Skip to content

Commit 306ebd3

Browse files
committed
Add failing test for exercise 8.3
1 parent 167c8e8 commit 306ebd3

File tree

1 file changed

+51
-0
lines changed

1 file changed

+51
-0
lines changed

tests/exercise8.3-bad.slang

Lines changed: 51 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,51 @@
1+
// uninterpreted function (do not change)
2+
function F(x: Int): Int
3+
4+
// TODO: implement
5+
function sumUp(n: Int, m: Int): Int
6+
{
7+
n >= m ? 0 : (F(n) + sumUp(n + 1, m))
8+
}
9+
10+
// TODO: implement
11+
function sumDown(n: Int, m: Int): Int
12+
{
13+
n >= m ? 0 : (F(m - 1) + sumUp(n, m - 1))
14+
}
15+
16+
// TODO: implement
17+
method lemmaSameSum(n: Int, m: Int)
18+
requires n <= m
19+
ensures sumUp(n,m) == sumDown(n,m)
20+
decreases m - n
21+
{
22+
match {
23+
m == n => assert true,
24+
m == n + 1 => assert true,
25+
true =>
26+
lemmaSameSum(n, m - 1);
27+
lemmaSameSum(n + 1, m - 1);
28+
lemmaSameSum(n + 1, m)
29+
}
30+
}
31+
32+
// TODO: verify this
33+
method client(n: Int, m: Int) : Int
34+
ensures result == sumUp(n, m)
35+
{
36+
// you can assert n <= m here although you shouldn't
37+
var sum: Int := 0;
38+
var i: Int := m;
39+
loop
40+
invariant i <= m
41+
// @CheckError
42+
invariant i >= n
43+
invariant sum == sumDown(i, m)
44+
{
45+
i != n =>
46+
i := i - 1;
47+
sum := sum + F(i)
48+
};
49+
lemmaSameSum(n, m);
50+
return sum
51+
}

0 commit comments

Comments
 (0)