summaryrefslogtreecommitdiff
path: root/Test/test0/PrettyPrint.bpl
blob: faa6bfd11cef5e23713a8846998419a4592977a2 (plain)
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
// RUN: %boogie -pretty:0 -noVerify -printInstrumented "%s" > "%t"
// RUN: %diff "%s.expect" "%t"
const x: int;
const y: int;
const z: int;
const r: real;
const s: real;
const t: real;
const P: bool;
const Q: bool;
const R: bool;

axiom x * (y + z) == x + (y * z);
axiom (x * y) + z == (x + y) * z;

axiom x * y * z == (x * (y * z));
axiom (x * y) * (z * x) == (x * y) * z;

axiom x div y div z == (x div (y div z));
axiom (x div y) div (z div x) == (x div y) div z;

axiom x + y mod z == ((y mod z) + x);
axiom (x + y) mod z == (x mod z) + (y mod z);

axiom x / y / z == (x / (y / z));
axiom (x / y) / (z / x) == (x / y) / z;
axiom x / s / z == (x / (s / z));
axiom (x / s) / (z / x) == (x / s) / z;
axiom r / s / t == (r / (s / t));
axiom (r / s) / (t / r) == (r / s) / t;

axiom ((r * s) / t) == r * s / t;
axiom ((r / s) * t) == (r / s) * t;

axiom (r * s) ** t == (r ** t) * (s ** t);
axiom r ** (s + t) == r ** s * r ** t;

axiom int(real(x)) == x;
axiom r >= 0.0 ==> real(int(r)) <= r;
axiom int(0e-3 - 0.02) == 0;
axiom int(0e2 - 3.5e1) == -35;
axiom int(27e-1) == 2;

axiom x - y - z == (x - (y - z));
axiom (x - y) - (z - x) == (x - y) - z;

axiom x + y - z - x + y == 0;
axiom ((((x + y) - z) - x) + y) == (x + (y - (z - (x + y))));

axiom P ==> Q ==> R <==> (P ==> (Q ==> R));
axiom ((P ==> Q) ==> (R ==> P)) == ((P ==> Q) ==> R);

axiom P <==> Q <==> R;
axiom P ==> Q <==> Q ==> R <==> R ==> P;

axiom (P && Q) || (Q && R);
axiom (P || Q) && (Q || R);
axiom (P || Q) || (Q || R);
axiom (P && Q) && (Q && R);

// -------------- quantifier key-value decorations

function f(int) returns (int);

axiom (forall x: int :: {:xname "hello"}
              {  :weight 5} {f(x+x)}   {:ValueFunc f(x+1)  }  {f(x)*f(x)} {:nopats f(x+x+x)}
         f(f(x)) < 200);