summaryrefslogtreecommitdiff
path: root/Test/dafny0/Basics.dfy
diff options
context:
space:
mode:
authorGravatar Rustan Leino <unknown>2013-07-16 19:11:31 -0700
committerGravatar Rustan Leino <unknown>2013-07-16 19:11:31 -0700
commit8b69f963879696d40da0a1b845988e17fe9d29d2 (patch)
tree0638858c44528d9e14ff0b4d4d9db34c0fbbdb72 /Test/dafny0/Basics.dfy
parentb0bb7bf96406d8695d5ec2377d9ce2b2acba44f0 (diff)
Axioms that relate (multi)set cardinality with (multi)set difference.
Removed three redundant multiset axioms.
Diffstat (limited to 'Test/dafny0/Basics.dfy')
-rw-r--r--Test/dafny0/Basics.dfy39
1 files changed, 39 insertions, 0 deletions
diff --git a/Test/dafny0/Basics.dfy b/Test/dafny0/Basics.dfy
index 3d2e35bd..f6e2d895 100644
--- a/Test/dafny0/Basics.dfy
+++ b/Test/dafny0/Basics.dfy
@@ -336,4 +336,43 @@ module SetCardinality {
ensures |s| != 0 ==> var x :| x in s; true;
{
}
+
+ method G<T>(s: set<T>, t: set<T>)
+ requires s <= t;
+ ensures |s| <= |t|; // it doesn't get this immediately, but the method body offers different proofs
+ {
+ if {
+ case true => assert |t - s| + |t * s| == |t|;
+ case true => calc {
+ |s| <= |t|;
+ <==
+ |s - s| <= |t - s|;
+ }
+ case true => assert 0 <= |t - s|;
+ }
+ }
+
+ method H(s: multiset<int>, t: multiset<int>)
+ requires s <= t;
+ ensures |s| <= |t|; // it doesn't get this immediately, but the method body offers different proofs
+ {
+ if {
+ case true => assert |t - s| + |t * s| == |t|;
+ case true => calc {
+ |s| <= |t|;
+ <==
+ |s - s| <= |t - s|;
+ }
+ case true => assert 0 <= |t - s|;
+ }
+ }
+
+ method K<T>(s: multiset<T>, t: multiset<T>)
+ {
+ assert |s * t| + |t * s|
+ +
+ |s - t| + |t - s|
+ ==
+ |s + t|;
+ }
}