From 461d6b17aed0bd81adc86d4ce2148c0f1d790bbc Mon Sep 17 00:00:00 2001 From: qunyanm Date: Thu, 29 Oct 2015 16:08:48 -0700 Subject: Fix issue 91 - Change how we compute the bounds of quantified variables so that it does not depend on the order they appeared. --- Test/dafny4/Bug91.dfy | 53 ++++++++++++++++++++++++++++++++++++++++++++ Test/dafny4/Bug91.dfy.expect | 2 ++ 2 files changed, 55 insertions(+) create mode 100644 Test/dafny4/Bug91.dfy create mode 100644 Test/dafny4/Bug91.dfy.expect (limited to 'Test/dafny4') diff --git a/Test/dafny4/Bug91.dfy b/Test/dafny4/Bug91.dfy new file mode 100644 index 00000000..75f8de22 --- /dev/null +++ b/Test/dafny4/Bug91.dfy @@ -0,0 +1,53 @@ +// RUN: %dafny /compile:0 "%s" > "%t" +// RUN: %diff "%s.expect" "%t" + +type SendState = map> + +function UnAckedMessages(s:SendState) : set +{ + set m,dst | dst in s && m in s[dst] :: m +} + +predicate UnAckedMessage2(s:SendState, m:int) +{ + exists dst :: dst in s && m in s[dst] +} + +/* the following bound can't be determined since we only know what to do with binary operations +function UnAckedMessagesA(s:SendState) : set +{ + set m | UnAckedMessage2(s, m) :: m +} +*/ + +function UnAckedMessagesForDst(s:SendState, dst:int) : set + requires dst in s; +{ + set m | m in s[dst] :: m +} + +function UnAckedMessages3(s:SendState) : set +{ + set m,dst | dst in s && m in UnAckedMessagesForDst(s, dst) :: m +} + +function SeqToSet(s:seq) : set +{ + set i | i in s +} +/* does not verify, with element may not in domain error +function UnAckedMessages4(s:SendState) : set +{ + set m,dst | m in SeqToSet(s[dst]) && dst in s :: m +} +*/ + +function UnAckedLists(s:SendState) : set> +{ + set dst | dst in s :: s[dst] +} + +function UnAckedMessages5(s:SendState) : set +{ + set m, list | list in UnAckedLists(s) && m in list :: m +} \ No newline at end of file diff --git a/Test/dafny4/Bug91.dfy.expect b/Test/dafny4/Bug91.dfy.expect new file mode 100644 index 00000000..76f19e0d --- /dev/null +++ b/Test/dafny4/Bug91.dfy.expect @@ -0,0 +1,2 @@ + +Dafny program verifier finished with 7 verified, 0 errors -- cgit v1.2.3