summaryrefslogtreecommitdiff
path: root/Test/dafny0/TypeParameters.dfy
diff options
context:
space:
mode:
authorGravatar Rustan Leino <unknown>2014-03-21 23:00:28 -0700
committerGravatar Rustan Leino <unknown>2014-03-21 23:00:28 -0700
commit49cd5fd19facf9acce19fc193e381feec8ff82e8 (patch)
treec921eb12b1a44309649d2aefae3fb7f60339a41f /Test/dafny0/TypeParameters.dfy
parentb517eb9ade15aa3eed8362c30a202d1ccdc341a8 (diff)
Auto-set type arguments of built-in collection types, just like for user-defined types.
Diffstat (limited to 'Test/dafny0/TypeParameters.dfy')
-rw-r--r--Test/dafny0/TypeParameters.dfy51
1 files changed, 51 insertions, 0 deletions
diff --git a/Test/dafny0/TypeParameters.dfy b/Test/dafny0/TypeParameters.dfy
index 705961a0..f2f68a96 100644
--- a/Test/dafny0/TypeParameters.dfy
+++ b/Test/dafny0/TypeParameters.dfy
@@ -267,3 +267,54 @@ ghost method ammeLtsiL_int(xs: List<int>, ys: List<int>)
{
assert forall x :: InList(x, xs) ==> InList(x, ys);
}
+
+// -------------- auto filled-in type arguments for collection types ------
+
+function length(xs: List): nat
+{
+ match xs
+ case Nil => 0
+ case Cons(_, tail) => 1 + length(tail)
+}
+
+function elems(xs: List): set
+{
+ match xs
+ case Nil => {}
+ case Cons(x, tail) => {x} + elems(tail)
+}
+
+function Card(s: set): nat
+{
+ |s|
+}
+
+function Identity(s: set): set
+{
+ s
+}
+
+function MultisetToSet(m: multiset): set
+{
+ if |m| == 0 then {} else
+ var x :| x in m; MultisetToSet(m - multiset{x}) + {x}
+}
+
+function SeqToSet(q: seq): set
+{
+ if q == [] then {} else {q[0]} + SeqToSet(q[1..])
+}
+
+datatype Pair<T(==),U(==)> = MkPair(0: T, 1: U)
+
+method IdentityMap(s: set<Pair>) returns (m: map)
+{
+ m := map[];
+ var s := s;
+ while s != {}
+ decreases s;
+ {
+ var p :| p in s;
+ m, s := m[p.0 := p.1], s - {p};
+ }
+}