Synthesis of Ranking Functions and Synthesis of Inductive Invariants and Synthesis of Recurrence Sets via Constraint Solving
Andreas Podelski
January 17, 2012
1
Synthesis of Ranking Functions and Synthesis of Inductive - - PowerPoint PPT Presentation
Synthesis of Ranking Functions and Synthesis of Inductive Invariants and Synthesis of Recurrence Sets via Constraint Solving Andreas Podelski January 17, 2012 1 Program Verification and Constraints Reasoning about program
January 17, 2012
1
2
3
4
main(int x, int y, int z) { assume(y >= z); while (x < y) { x++; } assert(x >= z); }
5
main(int x, int y, int z) { assume(y >= z); while (x < y) { x++; } assert(x >= z); }
⇢1 = (y ≥ z ∧ x0 = x ∧ y 0 = y ∧ z0 = z) ⇢2 = (x + 1 ≤ y ∧ x0 = x + 1 ∧ y 0 = y ∧ z0 = z) ⇢3 = (x ≥ y ∧ x0 = x ∧ y 0 = y ∧ z0 = z) ⇢4 = (x ≥ z ∧ x0 = x ∧ y 0 = y ∧ z0 = z) ⇢5 = (x + 1 ≤ z ∧ x0 = x ∧ y 0 = y ∧ z0 = z)
6
⇥1 ⇥2 1 2 ⇥3 3 ⇥4 4 ⇥5 5
− ≤ − ∧ − ≤ ∧ − = ⇤ ⌥ ⌥ ⌥ ⌥ ⇧ 1 −1 0 −1 0 1 1 0 −1 0 0 −1 0 1 1 0 −1 ⌅
⇤ ⌥ ⌥ ⇧ x y x y ⌅
⇤ ⌥ ⌥ ⌥ ⌥ ⇧ −1 1 −1 ⌅
≤ ∧ ∧ = (x − y ≤ −1 ∧ −x + x ≤ 1 ∧ x − x ≤ −1 ∧ −y + y ≤ 0 ∧ y − y ≤ 0) ⇤ ⌅ ⇤ ⌅ ρ2 = (x + 1 ≤ y ∧ x = x + 1 ∧ y = y)
7
8
9
10
11
− ≤ − ∧ − ≤ ∧ − = ⇤ ⌥ ⌥ ⌥ ⌥ ⇧ 1 −1 0 −1 0 1 1 0 −1 0 0 −1 0 1 1 0 −1 ⌅
⇤ ⌥ ⌥ ⇧ x y x y ⌅
⇤ ⌥ ⌥ ⌥ ⌥ ⇧ −1 1 −1 ⌅
≤ ∧ ∧ = (x − y ≤ −1 ∧ −x + x ≤ 1 ∧ x − x ≤ −1 ∧ −y + y ≤ 0 ∧ y − y ≤ 0) ⇤ ⌅ ⇤ ⌅ ρ2 = (x + 1 ≤ y ∧ x = x + 1 ∧ y = y)
12
fxx + fyy ≥ δ0 =
⇥ ⇧ ⌥ x y x y ⌃ ⌦ ⌦ ≤ −δ0 ⇧ ⌃
⇧ ⌥ 1 −1 0 −1 0 1 1 0 −1 0 0 −1 0 1 1 0 −1 ⌃ ⌦ ⌦ ⌦ ⌦
⌥ x y x y ⌃ ⌦ ⌦ ≤ ⇧ ⌥ −1 1 −1 ⌃ ⌦ ⌦ ⌦ ⌦
13
∃λ : λ ≥ 0 ∧ λ ⇧ ⌥ 1 −1 0 −1 0 1 1 0 −1 0 0 −1 0 1 1 0 −1 ⌃ ⌦ ⌦ ⌦ ⌦
−fx −fy 0 0⇥ ∧ λ ⇧ ⌥ −1 1 −1 ⌃ ⌦ ⌦ ⌦ ⌦
14
∀ ∀ ∀ δ ≥ 1 ∧ ≥ ∧ ∃λ ∃µ : λ ≥ 0 ∧ λ ⇧ ⌥ 1 −1 0 −1 0 1 1 0 −1 0 0 −1 0 1 1 0 −1 ⌃ ⌦ ⌦ ⌦ ⌦
⇥ ∧ λ ⇧ ⌥ −1 1 −1 ⌃ ⌦ ⌦ ⌦ ⌦
µ ≥ 0 ∧ µ ⇧ ⌥ 1 −1 0 −1 0 1 1 0 −1 0 0 −1 0 1 1 0 −1 ⌃ ⌦ ⌦ ⌦ ⌦
⇥ ∧ µ ⇧ ⌥ −1 1 −1 ⌃ ⌦ ⌦ ⌦ ⌦
15
λ = (1 0 0 0 0) µ = (0 0 1 1 0) fx = −1 fy = 1 δ0 = 1 δ = 1
16
17
18
⇥1 ⇥2 y ≥ z ... x + 1 ≤ y ∧ x0 = x + 1 ... ⇥3 x ≥ y ... ⇥4 x ≥ z ... ⇥5 x + 1 ≤ z ...
main(int x, int y, int z) { assume(y >= z); while (x < y) { x++; } assert(x >= z); }
⇢1 = (y ≥ z ∧ x0 = x ∧ y 0 = y ∧ z0 = z) ⇢2 = (x + 1 ≤ y ∧ x0 = x + 1 ∧ y 0 = y ∧ z0 = z) ⇢3 = (x ≥ y ∧ x0 = x ∧ y 0 = y ∧ z0 = z) ⇢4 = (x ≥ z ∧ x0 = x ∧ y 0 = y ∧ z0 = z) ⇢5 = (x + 1 ≤ z ∧ x0 = x ∧ y 0 = y ∧ z0 = z)
19
⇥1 ⇥2 1 2 ⇥3 3 ⇥4 4 ⇥5 5
20
∃ ∃ ∃ ∃ ∃ ∃ ∃ ∀x ∀y ∀z ∀x ∀y ∀z : (1 → pxx + pyy + pzz ≤ p0) ∧ → ≤ ∧ ((pxx + pyy + pzz ≤ p0 ∧ 2) → pxx + pyy + pzz ≤ p0) ∧ ≤ ∧ → ≤ ∧ ((pxx + pyy + pzz ≤ p0 ∧ 3) → qxx + qyy + qzz ≤ q0) ∧ ≤ ∧ → ((qxx + qyy + qzz ≤ p0 ∧ 4) → 0 ≤ 0) ∧ ≤ ∧ → ≤ ∧ ((qxx + qyy + qzz ≤ p0 ∧ 5) → 0 ≤ −1)
21
y z
v ) ≤ r1
v ) ≤ r5
22
∃ ∃ ∃ ∃ ∃ ∃ ∃ ∃λ1 ∃λ2 ∃λ3 ∃λ4 ∃λ5 : λ1 ≥ 0 ∧ λ1R1 = (0 px py pz) ∧ λ1r1 ≤ p0 ∧ λ2 ≥ 0 ∧ λ2 px py pz 0 R2 ⇥ = (0 px py pz) ∧ λ2 p0 r2 ⇥ ≤ p0 ∧ λ3 ≥ 0 ∧ λ3 px py pz 0 R3 ⇥ = (0 qx qy qz) ∧ λ3 p0 r3 ⇥ ≤ q0 ∧ λ4 ≥ 0 ∧ λ4 qx qy qz 0 R4 ⇥ = 0 ∧ λ4 q0 r4 ⇥ ≤ 0 ∧ λ5 ≥ 0 ∧ λ5 qx qy qz 0 R5 ⇥ = 0 ∧ λ5 q0 r5 ⇥ ≤ −1
23
1 = (1 1 1 1) 2 = (1 0 1 1 1) 3 = (1 1 1 1 1) 4 = (0 0 0 0 0) 5 = (1 1 0 0 0) px = 0 py = −1 pz = 1 p0 = 0 qx = −1 qy = 0 qz = 1 q0 = 0
24
main(int x, int y, int z) { assume(y >= z); while (x < y) { x=x+1+z; } }
`1 `2 ⇢1 ⇢2 `3 ⇢3
25
`1 `2 ⇢1 ⇢2 `3 ⇢3
26
y z
z
y z
y z
27
∃S ∃s : (∃x ∃y ∃z : y ≥ z ∧ S ⇤ x
y z
⌅ ≤ s) ∧
∃ ∃ ∃ ≥ ∧ ⇤ ⌅ ≤ ∧ (∃λ : λ ≥ 0 ∧ λS =
⇥ ∧ λs ≤ −1) ∧
∃ ≥ ∧
⇥ ∧ ≤ − ∧ (∃Λ : Λ ≥ 0 ∧ ΛS =
⇥ ∧ Λs ≤ (s − Sx))
28