summaryrefslogtreecommitdiff
path: root/Test/test21/HeapAxiom.bpl
diff options
context:
space:
mode:
Diffstat (limited to 'Test/test21/HeapAxiom.bpl')
-rw-r--r--Test/test21/HeapAxiom.bpl27
1 files changed, 27 insertions, 0 deletions
diff --git a/Test/test21/HeapAxiom.bpl b/Test/test21/HeapAxiom.bpl
new file mode 100644
index 00000000..8972c6af
--- /dev/null
+++ b/Test/test21/HeapAxiom.bpl
@@ -0,0 +1,27 @@
+
+
+type Field a, Heap = <a>[ref, Field a]a;
+
+function IsHeap(Heap) returns (bool);
+const alloc : Field bool;
+
+axiom (forall H:Heap, o:ref, f:Field ref ::
+ IsHeap(H) && H[o,alloc] ==> H[H[o,f], alloc]);
+
+procedure P() returns () {
+ var h : Heap, o : ref, g : Field ref, i : Field ref, o2 : ref;
+ assume IsHeap(h) && h[o, alloc];
+
+ o2 := h[o, g];
+ assert h[o2, alloc];
+
+ o2 := h[o2, g];
+ assert h[o2, alloc];
+
+ h[o2, alloc] := false;
+
+ o2 := h[o2, g];
+ assert h[o2, alloc]; // should not be provable
+}
+
+type ref;