diff options
author | rustanleino <unknown> | 2010-05-15 01:01:15 +0000 |
---|---|---|
committer | rustanleino <unknown> | 2010-05-15 01:01:15 +0000 |
commit | 66d171a4e4e27dc958c7926cbf76756c7c6c7b11 (patch) | |
tree | a88366dc90890cbeeaba082b0e8f28c118d2388b /Test/test2/LambdaPoly.bpl | |
parent | a660fb79bf527b42e3238b1810143f4fc3f3b827 (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.bpl | 22 |
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; |