Skip to content

Commit 31a821f

Browse files
authored
Merge pull request #287 from theyoucheng/quantifier2
Added support for quantifiers (forall and exists).
2 parents ddc6998 + b3620fe commit 31a821f

File tree

24 files changed

+580
-46
lines changed

24 files changed

+580
-46
lines changed
Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
int main()
2+
{
3+
4+
int c[2][2];
5+
c[0][0]=0;
6+
c[0][1]=1;
7+
c[1][0]=1;
8+
c[1][1]=2;
9+
10+
__CPROVER_assert(__CPROVER_exists { int i; (i>=0 && i<2) ==> (__CPROVER_exists{int j; (j>=0 && j<2) ==> c[i][j]>=1 && c[i][j]<=10}) }, "Exists-Exists: successful");
11+
12+
__CPROVER_assert(!__CPROVER_exists { int i; (i>=0 && i<2) ==> (!__CPROVER_exists{int j; (j>=0 && j<2) ==> c[i][j]>=1 && c[i][j]<=10}) }, "NotExists-NotExists: successful");
13+
14+
__CPROVER_assert(!__CPROVER_exists { int i; (i>=0 && i<2) ==> (__CPROVER_exists{int j; (j>=0 && j<2) ==> c[i][j]>=1 && c[i][j]<=10}) }, "NotExists-Exists: failed");
15+
16+
__CPROVER_assert(!__CPROVER_exists { int i; (i>=0 && i<2) ==> (__CPROVER_forall{int j; (j>=0 && j<2) ==> c[i][j]>=1 && c[i][j]<=10}) }, "NotExists-Forall: failed");
17+
18+
__CPROVER_assert(!__CPROVER_forall { int i; (i>=0 && i<2) ==> (__CPROVER_forall{int j; (j>=0 && j<2) ==> c[i][j]>=1 && c[i][j]<=10}) }, "NotForall-Forall: successful");
19+
20+
__CPROVER_assert(!__CPROVER_forall { int i; (i>=0 && i<2) ==> (!__CPROVER_forall{int j; (j>=0 && j<2) ==> c[i][j]>=1 && c[i][j]<=10}) }, "NotForall-NotForall: successful");
21+
22+
return 0;
23+
}
Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
CORE
2+
main.c
3+
4+
^\*\* Results:$
5+
^\[main.assertion.1\] Exists-Exists: successful: SUCCESS$
6+
^\[main.assertion.2\] NotExists-NotExists: successful: SUCCESS$
7+
^\[main.assertion.3\] NotExists-Exists: failed: FAILURE$
8+
^\[main.assertion.4\] NotExists-Forall: failed: FAILURE$
9+
^\[main.assertion.5\] NotForall-Forall: successful: SUCCESS$
10+
^\[main.assertion.6\] NotForall-NotForall: successful: SUCCESS$
11+
12+
^\*\* 2 of 6 failed (2 iterations)$
13+
^\VERIFICATION FAILED$
Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
int main()
2+
{
3+
int a[2];
4+
a[0]=1;
5+
a[1]=2;
6+
7+
int x=__CPROVER_forall { int i; (i>=0 && i<2) ==> a[i]>=1 && a[i]<=10 };
8+
int y=__CPROVER_forall { int i; (i>=0 && i<2) ==> a[i]>=1 && a[i]<2 };
9+
int z1=__CPROVER_exists { int i; (i>=0 && i<2) ==> a[i]>=1 && a[i]<1.5 };
10+
int z2=__CPROVER_exists { int i; (i>=0 && i<2) ==> a[i]>=1 && a[i]<2*10 };
11+
12+
assert(x);
13+
assert(y);
14+
assert(z1);
15+
assert(z2);
16+
17+
return 0;
18+
}
Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
CORE
2+
main.c
3+
4+
^\*\* Results:$
5+
^\[main.assertion.1\] assertion x: SUCCESS$
6+
^\[main.assertion.2\] assertion y: FAILURE$
7+
^\[main.assertion.3\] assertion z1: SUCCESS$
8+
^\[main.assertion.4\] assertion z2: SUCCESS$
9+
10+
^\*\* 1 of 4 failed (2 iterations)$
11+
^\VERIFICATION FAILED$
Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
int main()
2+
{
3+
int a[5];
4+
int b[5];
5+
6+
a[0]=0;
7+
a[1]=1;
8+
a[2]=2;
9+
a[3]=3;
10+
a[4]=4;
11+
12+
__CPROVER_assume(__CPROVER_forall { int i; (i>=0 && i<5) ==> b[i]==a[i]});
13+
14+
assert(b[0]==0);
15+
assert(b[1]==1);
16+
assert(b[2]==2);
17+
assert(b[3]==3);
18+
assert(b[4]==4);
19+
return 0;
20+
}
Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
CORE
2+
main.c
3+
4+
^\*\* Results:$
5+
^\[main.assertion.1\] assertion b\[(signed long int)0\] == 0: SUCCESS$
6+
^\[main.assertion.2\] assertion b\[(signed long int)1\] == 1: SUCCESS$
7+
^\[main.assertion.3\] assertion b\[(signed long int)2\] == 2: SUCCESS$
8+
^\[main.assertion.4\] assertion b\[(signed long int)3\] == 3: SUCCESS$
9+
^\[main.assertion.5\] assertion b\[(signed long int)4\] == 4: SUCCESS$
10+
11+
^\*\* 0 of 5 failed (1 iteration)$
12+
^VERIFICATION SUCCESSFUL$
Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
int main()
2+
{
3+
int a[2];
4+
a[0]=1;
5+
a[1]=2;
6+
7+
if(__CPROVER_forall { int i; (i>=0 && i<2) ==> a[i]>=1 && a[i]<=10 })
8+
__CPROVER_assert(0, "failure 1");
9+
10+
if(__CPROVER_exists { int i; (i>=0 && i<2) ==> a[i]>=1 && a[i]<=10 })
11+
__CPROVER_assert(0, "failure 2");
12+
13+
if(__CPROVER_forall { int i; (i>=0 && i<2) ==> a[i]>=2 && a[i]<=10 })
14+
__CPROVER_assert(0, "success 1");
15+
16+
if(__CPROVER_exists { int i; (i>=0 && i<2) ==> a[i]>=2 && a[i]<=10 })
17+
__CPROVER_assert(0, "failure 3");
18+
19+
if(__CPROVER_exists { int i; (i>=0 && i<2) ==> a[i]>=5 && a[i]<=10 })
20+
__CPROVER_assert(0, "success 2");
21+
22+
return 0;
23+
}
Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
CORE
2+
main.c
3+
4+
^\*\* Results:$
5+
^\[main.assertion.1\] failure 1: FAILURE$
6+
^\[main.assertion.2\] failure 2: FAILURE$
7+
^\[main.assertion.3\] success 1: SUCCESS$
8+
^\[main.assertion.4\] failure 3: FAILURE$
9+
^\[main.assertion.5\] success 2: SUCCESS$
10+
11+
^\*\* 3 of 5 failed (2 iterations)$
12+
^\VERIFICATION FAILED$
Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
int main()
2+
{
3+
int a[5];
4+
5+
__CPROVER_assume(__CPROVER_forall { int i; (i>=0 && i<5) ==> a[i]==i+1});
6+
7+
assert(a[0]==1);
8+
assert(a[1]==2);
9+
assert(a[2]==3);
10+
assert(a[3]==4);
11+
assert(a[4]==5);
12+
return 0;
13+
}
Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
CORE
2+
main.c
3+
4+
^\*\* Results:$
5+
^\[main.assertion.1\] assertion a\[(signed long int)0\] == 1: SUCCESS$
6+
^\[main.assertion.2\] assertion a\[(signed long int)1\] == 2: SUCCESS$
7+
^\[main.assertion.3\] assertion a\[(signed long int)2\] == 3: SUCCESS$
8+
^\[main.assertion.4\] assertion a\[(signed long int)3\] == 4: SUCCESS$
9+
^\[main.assertion.5\] assertion a\[(signed long int)4\] == 5: SUCCESS$
10+
11+
^\*\* 0 of 5 failed (1 iteration)$
12+
^VERIFICATION SUCCESSFUL$

0 commit comments

Comments
 (0)