summaryrefslogtreecommitdiff
path: root/Test/test2/LambdaPoly.bpl
diff options
context:
space:
mode:
authorGravatar rustanleino <unknown>2010-05-15 01:01:15 +0000
committerGravatar rustanleino <unknown>2010-05-15 01:01:15 +0000
commit66d171a4e4e27dc958c7926cbf76756c7c6c7b11 (patch)
treea88366dc90890cbeeaba082b0e8f28c118d2388b /Test/test2/LambdaPoly.bpl
parenta660fb79bf527b42e3238b1810143f4fc3f3b827 (diff)
Boogie:
* Added support for polymorphism in lambda expressions * Little clean-up here and there * Added 'then' keyword to emacs and latex modes Dafny: * Added support for fine-grained framing, using the back-tick syntax from Region Logic * Internally, changed checking of reads clauses to use a local variable $_Frame, analogous to the $_Frame variable used in checking modifies clauses
Diffstat (limited to 'Test/test2/LambdaPoly.bpl')
-rw-r--r--Test/test2/LambdaPoly.bpl22
1 files changed, 22 insertions, 0 deletions
diff --git a/Test/test2/LambdaPoly.bpl b/Test/test2/LambdaPoly.bpl
index 6d56e7c5..0fec0260 100644
--- a/Test/test2/LambdaPoly.bpl
+++ b/Test/test2/LambdaPoly.bpl
@@ -16,3 +16,25 @@ procedure a()
assert !diff(a,b)[2];
}
+// -----------------------
+
+procedure Polly<Cracker>(c,d: Cracker)
+{
+ var e: Cracker;
+ e := c;
+
+ if (*) {
+ assert (forall<T> t: T :: (lambda<beta> b: beta, s: T :: b==c && s==t)[c,t]);
+ assert (forall<U> u: U :: (lambda<beta> b: beta, s: U :: b==c && s==u)[u,u]); // error
+ } else if (*) {
+ assert (lambda<V> v: V :: (lambda<beta> b: beta, s: V :: b==c && s==v)[v,v])[e];
+ assert (lambda<W> w: W :: (lambda<beta> b: beta, s: W :: b==c && s==w)[w,w])[d]; // error
+ e := d;
+ } else {
+ assume TriggerHappy(c);
+ assert (exists k: Cracker :: { TriggerHappy(k) } (lambda<beta> b: beta, m: Cracker :: b==k && m==c)[c,c]);
+ assert (forall k: Cracker :: (lambda<beta> b: beta, m: Cracker :: b==k && m==c)[c,c]); // error
+ }
+}
+
+function TriggerHappy<T>(T): bool;