You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
("LinearSearch", "method LinearSearch(a: array<int>, key: int) returns (idx: int)\n ensures 0 <= idx ==> idx < a.Length && a[idx] == key\n ensures idx < 0 ==> forall i :: 0 <= i < a.Length ==> a[i] != key\n{\n var i := 0;\n while i < a.Length\n invariant 0 <= i <= a.Length\n invariant forall j :: 0 <= j < i ==> a[j] != key\n {\n if a[i] == key { return i; }\n i := i + 1;\n }\n return -1;\n}", ["ensures", "invariant"]),
203
+
("SumArray", "method SumArray(a: array<int>) returns (s: int)\n ensures s == Sum(a[..], 0, a.Length)\n{\n s := 0;\n var i := 0;\n while i < a.Length\n invariant 0 <= i <= a.Length\n invariant s == Sum(a[..], 0, i)\n {\n s := s + a[i];\n i := i + 1;\n }\n}", ["ensures", "invariant"]),
204
+
("MaxElement", "method MaxElement(a: array<int>) returns (m: int)\n requires a.Length > 0\n ensures forall i :: 0 <= i < a.Length ==> a[i] <= m\n ensures exists i :: 0 <= i < a.Length && a[i] == m\n{\n m := a[0];\n var i := 1;\n while i < a.Length\n invariant 1 <= i <= a.Length\n invariant forall j :: 0 <= j < i ==> a[j] <= m\n invariant exists j :: 0 <= j < i && a[j] == m\n {\n if a[i] > m { m := a[i]; }\n i := i + 1;\n }\n}", ["requires", "ensures", "invariant"]),
205
+
("CountOccurrences", "method CountOccurrences(a: array<int>, key: int) returns (c: int)\n ensures c == |set i | 0 <= i < a.Length && a[i] == key|\n{\n c := 0;\n var i := 0;\n while i < a.Length\n invariant 0 <= i <= a.Length\n invariant c == |set j | 0 <= j < i && a[j] == key|\n {\n if a[i] == key { c := c + 1; }\n i := i + 1;\n }\n}", ["ensures", "invariant"]),
206
+
("ReverseInPlace", "method ReverseInPlace(a: array<int>)\n modifies a\n ensures forall i :: 0 <= i < a.Length ==> a[i] == old(a[a.Length - 1 - i])\n{\n var lo, hi := 0, a.Length - 1;\n while lo < hi\n invariant 0 <= lo && hi < a.Length\n invariant lo + hi == a.Length - 1\n invariant forall i :: 0 <= i < lo ==> a[i] == old(a[a.Length - 1 - i])\n invariant forall i :: hi < i < a.Length ==> a[i] == old(a[a.Length - 1 - i])\n invariant forall i :: lo <= i <= hi ==> a[i] == old(a[i])\n {\n a[lo], a[hi] := a[hi], a[lo];\n lo, hi := lo + 1, hi - 1;\n }\n}", ["modifies", "ensures", "invariant"]),
207
+
("CopyArray", "method CopyArray(src: array<int>) returns (dst: array<int>)\n ensures dst.Length == src.Length\n ensures forall i :: 0 <= i < src.Length ==> dst[i] == src[i]\n ensures fresh(dst)\n{\n dst := new int[src.Length];\n var i := 0;\n while i < src.Length\n invariant 0 <= i <= src.Length\n invariant forall j :: 0 <= j < i ==> dst[j] == src[j]\n {\n dst[i] := src[i];\n i := i + 1;\n }\n}", ["ensures", "invariant"]),
208
+
("Partition", "method Partition(a: array<int>, lo: int, hi: int) returns (p: int)\n requires 0 <= lo < hi <= a.Length\n modifies a\n ensures lo <= p < hi\n ensures forall i :: lo <= i < p ==> a[i] <= a[p]\n ensures forall i :: p < i < hi ==> a[i] > a[p]\n ensures multiset(a[lo..hi]) == multiset(old(a[lo..hi]))\n{}", ["requires", "modifies", "ensures"]),
209
+
("TwoSum", "method TwoSum(a: array<int>, target: int) returns (i: int, j: int)\n requires Sorted(a, 0, a.Length)\n ensures 0 <= i < j < a.Length ==> a[i] + a[j] == target\n{\n i, j := 0, a.Length - 1;\n while i < j\n invariant 0 <= i && j < a.Length\n invariant forall p, q :: 0 <= p < i && i <= q < a.Length ==> a[p] + a[q] != target\n {\n if a[i] + a[j] == target { return; }\n else if a[i] + a[j] < target { i := i + 1; }\n else { j := j - 1; }\n }\n return -1, -1;\n}", ["requires", "ensures", "invariant"]),
210
+
]
211
+
212
+
inductive_proofs = [
213
+
("SumFormula", "lemma SumFormula(n: nat)\n ensures 2 * SumTo(n) == n * (n + 1)\n decreases n\n{\n if n == 0 { } else { SumFormula(n - 1); }\n}", ["ensures", "decreases"]),
214
+
("PowerMonotone", "lemma PowerMonotone(b: nat, m: nat, n: nat)\n requires b >= 2 && m <= n\n ensures Pow(b, m) <= Pow(b, n)\n decreases n - m\n{\n if m == n { } else { PowerMonotone(b, m, n - 1); }\n}", ["requires", "ensures", "decreases"]),
215
+
("ListFlatten", "lemma ListFlatten<T>(l1: List<T>, l2: List<T>)\n ensures Length(Append(l1, l2)) == Length(l1) + Length(l2)\n decreases l1\n{\n match l1 { case Nil => case Cons(_, tl) => ListFlatten(tl, l2); }\n}", ["ensures", "decreases"]),
216
+
("TreeHeight", "lemma TreeHeight(t: Tree)\n ensures Height(t) >= 0\n decreases t\n{\n match t {\n case Leaf => {}\n case Node(l, _, r) => { TreeHeight(l); TreeHeight(r); }\n }\n}", ["ensures", "decreases"]),
217
+
("FibMonotone", "lemma FibMonotone(m: nat, n: nat)\n requires m <= n && m >= 1\n ensures Fib(m) <= Fib(n)\n decreases n - m\n{\n if m == n { } else { FibMonotone(m, n - 1); FibPositive(n - 2); }\n}", ["requires", "ensures", "decreases"]),
("GhostCounter", "method GhostCounter(n: nat) returns (r: nat)\n ensures r == n\n{\n r := 0;\n ghost var g := 0;\n while r < n\n invariant r == g && r <= n\n {\n r := r + 1;\n g := g + 1;\n }\n}", ["ensures", "invariant"]),
0 commit comments