--- /dev/null
+[], sizeof(Nodes) >= 1;
--- /dev/null
+[], !(head=0) => head in Nodes;
+[forall node in Nodes], !(node.next=0) => node.next in Nodes;
+[forall node in Nodes], !(node.next=0) => <node, node.next> in nextnodes;
+
+
--- /dev/null
+set Nodes(Node);
+nextnodes : Nodes -> Nodes (1->1);
+prevnodes : Nodes -> Nodes (1->1);
+
--- /dev/null
+Node* head;
+structure Node {
+ int data;
+ Node *next;
+ Node *prev;
+}
--- /dev/null
+[], sizeof(Nodes) >= literal(1);
+[forall node in Nodes], sizeof(node.~nextnodes) <= literal(1);
+[forall n in Nodes],
+ sizeof(n.nextnodes) = literal(0) or n.nextnodes.prevnodes = n;
+
--- /dev/null
+[], literal(true) => head in Nodes;
+[forall node in Nodes], !(node.next=literal(0)) => node.next in Nodes;
+[forall node in Nodes], !(node.next=literal(0)) => <node, node.next> in nextnodes;
+[forall node in Nodes], !(node.prev=literal(0)) => <node, node.prev> in prevnodes;
+
+
--- /dev/null
+set Nodes(Node);
+nextnodes : Nodes -> Nodes (1->1);
+prevnodes : Nodes -> Nodes (1->1);
+
--- /dev/null
+Node* head;
+structure Node {
+ int data;
+ Node *next;
+ Node *prev;
+}