test.py 818 Bytes
Newer Older
1

2 3 4
a = 0
b = 1
while b < 100:
5 6 7
  #@ invariant b >= a >= 0
  #@ invariant b >= 1
  #@ variant 200 - b - a
8 9
  print(a)
  b = a+b
10
  #@ assert b >= 1
11
  a = b-a
12 13

# lists
14
l = range(0, 10)
15
#@ assert forall i. 0 <= i < 10 -> l[i] >= 0
Jean-Christophe Filliâtre's avatar
Jean-Christophe Filliâtre committed
16
l[2] = 42
17
#@ assert l[2] == 42
Jean-Christophe Filliâtre's avatar
Jean-Christophe Filliâtre committed
18 19
i = 0
while i < 10:
20 21 22
  #@ invariant 0 <= i
  #@ invariant forall j. 0 <= j < i -> l[j] == 0
  #@ variant 10 - i
Jean-Christophe Filliâtre's avatar
Jean-Christophe Filliâtre committed
23 24
  l[i] = 0
  i = i+1
25

26
sum = 0
27
for x in l:
28
  #@ invariant sum >= 0
29
  print(x)
30 31
  #@ assert x >= 0
  sum = sum+x
32

33 34 35 36 37
# Python's division is neither Euclidean division, nor computer division
#@ assert  4 //  3 ==  1 and  4 %  3 ==  1
#@ assert -4 //  3 == -2 and -4 %  3 ==  2
#@ assert  4 // -3 == -2 and  4 % -3 == -2
#@ assert -4 // -3 ==  1 and -4 % -3 == -1
38

39
# Local Variables:
40
# compile-command: "make -C ../.. && why3 prove -P alt-ergo test.py"
41
# End:
42