-
Notifications
You must be signed in to change notification settings - Fork 52
Expand file tree
/
Copy pathpostSelfRef.vpr
More file actions
84 lines (68 loc) · 1.81 KB
/
Copy pathpostSelfRef.vpr
File metadata and controls
84 lines (68 loc) · 1.81 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
// Any copyright is dedicated to the Public Domain.
// http://creativecommons.org/publicdomain/zero/1.0/
import <decreases/int.vpr>
// Testing consistency checks for functions with self-references in their postconditions.
// w/o decreases
function fac(i: Int): Int
requires i >= 0
//:: ExpectedOutput(consistency.error)
ensures fac(i) >= 1
{
i == 0 ? 1 : i * fac(i - 1)
}
function faca(i: Int): Int
requires i >= 0
//:: ExpectedOutput(consistency.error)
ensures faca(i + 1) >= 1
function fac1(i: Int): Int
requires i >= 0
//:: ExpectedOutput(consistency.error)
ensures fac2(i) >= 1
{
i == 0 ? 1 : i * fac2(i - 1)
}
function fac2(i: Int): Int
requires i >= 0
//:: ExpectedOutput(consistency.error)
ensures fac1(i - 1) >= 1
{
i == 0 ? 1 : i * fac1(i - 1)
}
function lol(i: Int): Int
//:: ExpectedOutput(consistency.error)
ensures lol(0) > 0
{
i + 1
}
// same with all kinds of decreases clauses
function dfac(i: Int): Int
requires i >= 0
ensures dfac(i) >= 1 // would raise a termination error if this file got to the verification stage
decreases i
{
i == 0 ? 1 : i * dfac(i - 1)
}
function dfaca(i: Int): Int
requires i >= 0
ensures dfaca(i + 1) >= 1
decreases _
function dfac1(i: Int): Int
requires i >= 0
ensures dfac2(i) >= 1 // would raise a termination error if this file got to the verification stage
decreases i
{
i == 0 ? 1 : i * dfac2(i - 1)
}
function dfac2(i: Int): Int
decreases *
requires i >= 0
ensures dfac1(i - 1) >= 1 // would raise a termination error if this file got to the verification stage
{
i == 0 ? 1 : i * dfac1(i - 1)
}
function dlol(i: Int): Int
ensures dlol(0) > 0 // would raise a termination error if this file got to the verification stage
decreases
{
i + 1
}