Skip to content

Commit 981bb5c

Browse files
committed
various fixes
1 parent 4ac565b commit 981bb5c

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

50 files changed

+2374
-2000
lines changed

bin/alk.jar

-213 KB
Binary file not shown.

input/symb/test0.alk

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
symbolic $a:array<int>;
2+
a = $a;
3+
assume a.size() < 2;
4+
min = a[0];
5+
i = 1;
6+
while (i < a.size())
7+
invariant a
8+
invariant b
9+
invariant c
10+
modifies i
11+
{
12+
if (a[i] < min) min = a[i];
13+
i = i+1;
14+
15+
assert d;
16+
}

input/symb/test1.alk

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
plateau(a: array<int>)
2+
requires forall i:int :: 0 <= i && i < a.size() - 1 ==> a[i] <= a[i+1]
3+
ensures (forall k:int :: forall l:int :: 0 <= k && k <= l && l < a.size() && a[k] == a[l] ==> (l-k) <= result)
4+
{
5+
lg = 1;
6+
i = 1;
7+
while (i < a.size())
8+
invariant (forall k:int :: forall l:int ::
9+
0 <= k && k <= l && l < i && a[k] == a[l]
10+
==>
11+
(l-k) <= lg)
12+
modifies lg
13+
{
14+
if (a[i] == a[i - lg]) lg = lg+1;
15+
i = i + 1;
16+
}
17+
}
18+
19+
symbolic $a: array<int>;
20+
a = $a;
21+
assume a.size() < 4;
22+
assume forall i:int :: 0 <= i && i < a.size()-1 ==> a[i] <= a[i+1];
23+
x = plateau(a);

input/symb/test2.alk

Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,38 @@
1+
plateau(a: array<int>) : int
2+
requires forall i:int :: 0 <= i && i < a.size()-1 ==> a[i] <= a[i+1]
3+
ensures (forall k:int :: forall l:int ::
4+
0 <= k && k <= l && l < a.size() && a[k] == a[l]
5+
==>
6+
(l-k) <= result)
7+
{
8+
lg = 1;
9+
i = 1;
10+
while (i < a.size())
11+
invariant (forall k:int :: forall l:int ::
12+
0 <= k && k <= l && l < i && a[k] == a[l]
13+
==>
14+
(l-k) <= lg)
15+
modifies lg
16+
{
17+
if (a[i] == a[i - lg]) lg = lg+1;
18+
i = i + 1;
19+
}
20+
return lg;
21+
}
22+
23+
symbolic $a: array<int>;
24+
a = $a;
25+
//assume a.size() < 4;
26+
assume forall i:int :: 0 <= i && i < a.size()-1 ==> a[i] <= a[i+1];
27+
//x = plateau(a);
28+
for (i = 0; i < 4; ++i)
29+
{
30+
havoc a;
31+
assume a.size() == i;
32+
x[i] = plateau(a);
33+
}
34+
35+
assert x[0] <= x[1] && x[1] <= x[2] && x[2] <= x[3];
36+
37+
Internal error [0:0]
38+
Unknown Z3 check! [5:3]

input/symb/test3.alk

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
symbolic $n: int;
2+
n = $n;
3+
sum = 0;
4+
i = 1;
5+
6+
while (i <= n)
7+
invariant sum == (i-1)*i/2
8+
{
9+
sum = sum + i;
10+
i = i + 1;
11+
}

input/symb/test4.alk

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
alg12(a: array<int>) : int
2+
{
3+
lg = 1;
4+
i = 1;
5+
while (i < a.size())
6+
{
7+
if (a[i] == a[i - lg]) lg = lg+1;
8+
i = i + 1;
9+
}
10+
return lg;
11+
}
12+
13+
symbolic $a: array<int>;
14+
a = $a;
15+
assume forall i:int :: 0 <= i && i < a.size()-1 ==> a[i] <= a[i+1];
16+
assume a.size() == 3;
17+
18+
x = alg12(a);

input/symb/test5.alk

Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,36 @@
1+
askIth(out a:array<int>, i:int) : int
2+
requires a.size() > 0 && 0 <= i && i < a.size()-1
3+
ensures a[i] <= a[i+1]
4+
ensures result > 0 ==> result == i
5+
{
6+
if (a[i] > a[i+1]) {
7+
temp = a[i];
8+
a[i] = a[i+1];
9+
a[i+1] = temp;
10+
return i;
11+
}
12+
return 0;
13+
}
14+
15+
sorted(out a) {
16+
return forall j:int :: forall k:int ::
17+
0 <= j && j <= last && last < k &&
18+
k < a.size() ==> a[j] <= a[k];
19+
}
20+
21+
bubbleSort(out a: array<int>) {
22+
last = a.size()-1;
23+
while (last > 0)
24+
invariant sorted(a)
25+
{
26+
n1 = last;
27+
i = 0;
28+
while (i < n1)
29+
invariant forall j:int ::
30+
0 <= j && j < i ==> a[j] <= a[i]
31+
{
32+
last = askIth(a, i);
33+
i = i + 1;
34+
}
35+
}
36+
}

input/symb/test6.alk

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
@symbolic $a: array<int>;
2+
a = $a;
3+
@assume forall i:int :: 0 <= i && i < a.size()-1 ==> a[i] <= a[i+1];
4+
slp = 1;
5+
i = 1;
6+
while (i < a.size())
7+
@invariant i <= a.size()
8+
@invariant (forall k:int :: forall l:int ::
9+
0 <= k && k <= l && l < i && a[k] == a[l]
10+
==>
11+
(l-k) <= slp)
12+
@modifies slp
13+
@modifies i
14+
{
15+
if (a[i] == a[i - slp]) slp = slp+1;
16+
i = i + 1;
17+
}

input/symb/test7.alk

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
@symbolic $a: array<int>;
2+
a = $a;
3+
@assume forall i:int :: 0 <= i && i < a.size()-1 ==> a[i] <= a[i+1];
4+
slp = 1;
5+
i = 1;
6+
while (i < a.size())
7+
@invariant slp <= i
8+
@invariant (forall k:int :: forall l:int ::
9+
0 <= k && k <= l && l < i && a[k] == a[l]
10+
==>
11+
(l-k) <= slp)
12+
@modifies slp, i
13+
{
14+
if (a[i] == a[i - slp]) slp = slp+1;
15+
i = i + 1;
16+
}

input/test5.alk

Lines changed: 7 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -1,17 +1,7 @@
1-
a = { "a" |-> 5 };
2-
3-
{} x = a.keys()
4-
5-
// map-uri (keys)
6-
// invariantii trebuie procesati intr-o singura executie (nu o executie pentru fiecare invariant)
7-
8-
// apel conditional la Z3 (-pr)
9-
// dataflow -> cautare secventiala si minim in tablou
10-
// conversia structurilor si a map-urilor in Z3
11-
12-
// redenumit keyword-urile assert, assume, requires, ensures, symbolic, modifies -> @
13-
// operatorul : pentru apartenenta la un tip de date:
14-
// @requires a : array<int> && x : int; -> din gramatica
15-
// @ensures result : int; -> din gramatica
16-
// type assertions
17-
// @Trusted
1+
@symbolic $a : array<int>, $i : int;
2+
a = $a;
3+
@assume a.size() == 8;
4+
a.pushFront($i);
5+
@assert a.topFront() == $i;
6+
b = $a;
7+
@assert b.topFront() == b[0];

0 commit comments

Comments
 (0)