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 +++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 53 insertions(+) create mode 100644 Test/dafny4/Bug91.dfy (limited to 'Test/dafny4/Bug91.dfy') 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 -- cgit v1.2.3 From 4b57bb7102c4161dfbc6a7d42740642340e9e60a Mon Sep 17 00:00:00 2001 From: qunyanm Date: Fri, 30 Oct 2015 09:17:21 -0700 Subject: update the test. --- Test/dafny4/Bug91.dfy | 17 ++--------------- 1 file changed, 2 insertions(+), 15 deletions(-) (limited to 'Test/dafny4/Bug91.dfy') diff --git a/Test/dafny4/Bug91.dfy b/Test/dafny4/Bug91.dfy index 75f8de22..53e5d5b2 100644 --- a/Test/dafny4/Bug91.dfy +++ b/Test/dafny4/Bug91.dfy @@ -8,18 +8,6 @@ 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; { @@ -35,12 +23,11 @@ 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 + set m,dst | dst in s && m in SeqToSet(s[dst]) :: m } -*/ function UnAckedLists(s:SendState) : set> { -- cgit v1.2.3