diff --git a/025-factorize.dfy b/025-factorize.dfy index 6ea82bc..963e376 100644 --- a/025-factorize.dfy +++ b/025-factorize.dfy @@ -24,16 +24,16 @@ method factorize(n: nat) returns (factors: seq) { ghost var pre := cur; ghost var temp := 1; - while cur % i == 0 + while cur % i == 0 // invariants-start invariant cur >= 1 invariant temp * cur == pre - invariant prod(factors) == taken * temp + invariant prod(factors) == taken * temp // invariants-end decreases cur - 1 { factors := factors + [i]; - + cur := cur / i; temp := temp * i; assert 2 <= i && 2 * cur <= i * cur; // assert-line @@ -47,4 +47,4 @@ method factorize(n: nat) returns (factors: seq) } assert taken == n; // assert-line // impl-end -} \ No newline at end of file +} diff --git a/037-sort_even.dfy b/037-sort_even.dfy index dee0660..a939f7b 100644 --- a/037-sort_even.dfy +++ b/037-sort_even.dfy @@ -1,13 +1,13 @@ -method sorted_even(a: seq) returns (sorted_even: seq) +method sorted_even(a: seq) returns (sorted: seq) // pre-conditions-start requires |a| > 0 // pre-conditions-end // post-conditions-start - ensures |sorted_even| == |a| - ensures forall i, j :: 0 <= i < j && 2 * i < |sorted_even| && 2 * j < |sorted_even| ==> - sorted_even[2 * i] <= sorted_even[2 * j] - ensures forall i :: 0 <= i < |a| && i % 2 == 1 ==> sorted_even[i] == a[i] - ensures multiset(a) == multiset(sorted_even) + ensures |sorted| == |a| + ensures forall i, j :: 0 <= i < j && 2 * i < |sorted| && 2 * j < |sorted| ==> + sorted[2 * i] <= sorted[2 * j] + ensures forall i :: 0 <= i < |a| && i % 2 == 1 ==> sorted[i] == a[i] + ensures multiset(a) == multiset(sorted) // post-conditions-end { // impl-start @@ -24,7 +24,7 @@ method sorted_even(a: seq) returns (sorted_even: seq) i := i + 1; } - sorted_even := SortSeqPred(a, p); + sorted := SortSeqPred(a, p); // impl-end } diff --git a/073-smallest_change.dfy b/073-smallest_change.dfy index c2909c2..999eb1a 100644 --- a/073-smallest_change.dfy +++ b/073-smallest_change.dfy @@ -1,6 +1,6 @@ method smallest_change(s: seq) returns (c: int) // post-conditions-start - ensures c == |set i {:trigger s[i]} | 0 <= i < |s| / 2 && s[i] != s[|s| - 1 - i]| + ensures c == |set i | 0 <= i < |s| / 2 && s[i] != s[|s| - 1 - i]| // post-conditions-end { // impl-start diff --git a/087-get_row.dfy b/087-get_row.dfy index b5d628d..1e46bb3 100644 --- a/087-get_row.dfy +++ b/087-get_row.dfy @@ -1,4 +1,6 @@ -method get_row(lst: seq>, x: int) returns (pos: seq<(int, int)>) +type SortSeqState = seq<(int, int)> + +method get_row(lst: seq>, x: int) returns (pos: SortSeqState) // post-conditions-start ensures forall i :: 0 <= i < |pos| ==> ( var (a, b) := pos[i]; @@ -50,7 +52,7 @@ method get_row(lst: seq>, x: int) returns (pos: seq<(int, int)>) assert forall i, j :: 0 <= i < |lst| && 0 <= j < |lst[i]| && lst[i][j] == x ==> (i, j) in multiset(pos); } // assert-end - + // assert-start assert forall i :: 0 <= i < |pos| ==> ( var (a, b) := pos[i]; 0 <= a < |lst| && 0 <= b < |lst[a]| && lst[a][b] == x @@ -71,7 +73,7 @@ function less_eq(a: (int, int), b: (int, int)): bool { (x == u && y == v) || less(a, b) } -method SortSeq(s: seq<(int, int)>) returns (sorted: seq<(int, int)>) +method SortSeq(s: SortSeqState) returns (sorted: SortSeqState) // post-conditions-start ensures forall i, j :: 0 <= i < j < |sorted| ==> less_eq(sorted[i], sorted[j]) ensures |sorted| == |s| diff --git a/095-check_dict_case.dfy b/095-check_dict_case.dfy index 01662c7..858f457 100644 --- a/095-check_dict_case.dfy +++ b/095-check_dict_case.dfy @@ -8,7 +8,9 @@ predicate IsUpperCase(s: string) forall i :: 0 <= i < |s| ==> 'A' <= s[i] <= 'Z' } -method CheckDictCase(dict: map) returns (result: bool) +type DictCase = map + +method CheckDictCase(dict: DictCase) returns (result: bool) // post-conditions-start ensures dict == map[] ==> !result ensures result ==> (forall k :: k in dict ==> IsLowerCase(k)) || (forall k :: k in dict ==> IsUpperCase(k)) diff --git a/105-by_length.dfy b/105-by_length.dfy index 43625d9..d44a1b6 100644 --- a/105-by_length.dfy +++ b/105-by_length.dfy @@ -2,7 +2,7 @@ method SortReverseAndName(arr: seq) returns (result: seq) // post-conditions-start ensures |result| <= |arr| ensures forall i :: 0 <= i < |result| ==> - result[i] in {"One", "Two", "Three", "Four", "Five", "Six", "Seven", "Eight", "Nine"} + result[i] in ["One", "Two", "Three", "Four", "Five", "Six", "Seven", "Eight", "Nine"] // post-conditions-end { // impl-start