Formal verification of a static analyzer: abstract interpretation in type theory
Xavier Leroy
Inria Paris-Rocquencourt
TYPES meeting, 2014-05-14
- X. Leroy (Inria)
Verified static analyzer 2014-05-14 1 / 57
Formal verification of a static analyzer: abstract interpretation in - - PowerPoint PPT Presentation
Formal verification of a static analyzer: abstract interpretation in type theory Xavier Leroy Inria Paris-Rocquencourt TYPES meeting, 2014-05-14 X. Leroy (Inria) Verified static analyzer 2014-05-14 1 / 57 In memoriam Radhia Cousot, 2014
Verified static analyzer 2014-05-14 1 / 57
Verified static analyzer 2014-05-14 2 / 57
Verified static analyzer 2014-05-14 3 / 57
Verified static analyzer 2014-05-14 4 / 57
Verified static analyzer 2014-05-14 5 / 57
Verified static analyzer 2014-05-14 6 / 57
Verified static analyzer 2014-05-14 7 / 57
Verified static analyzer 2014-05-14 8 / 57
Verified static analyzer 2014-05-14 9 / 57
Verified static analyzer 2014-05-14 9 / 57
Verified static analyzer 2014-05-14 10 / 57
◮ No out-of-bound accesses. ◮ No dereferencing the null pointer. ◮ No access after a free. ◮ Alignment constraints are respected.
◮ No division by zero. ◮ No (signed) arithmetic overflows.
◮ No arithmetic overflows (result is ±∞) ◮ No undefined operations (result Not a Number) ◮ No catastrophic cancellation.
Verified static analyzer 2014-05-14 11 / 57
Verified static analyzer 2014-05-14 12 / 57
Verified static analyzer 2014-05-14 13 / 57
◮ The then and else branches of an if are both taken → joins. ◮ Loops and recursions execute arbitrarily many times → fixpoints.
Verified static analyzer 2014-05-14 14 / 57
Verified static analyzer 2014-05-14 15 / 57
Verified static analyzer 2014-05-14 15 / 57
Verified static analyzer 2014-05-14 16 / 57
Verified static analyzer 2014-05-14 17 / 57
Verified static analyzer 2014-05-14 18 / 57
Verified static analyzer 2014-05-14 19 / 57
Verified static analyzer 2014-05-14 20 / 57
Verified static analyzer 2014-05-14 21 / 57
Verified static analyzer 2014-05-14 22 / 57
Verified static analyzer 2014-05-14 23 / 57
Verified static analyzer 2014-05-14 24 / 57
Verified static analyzer 2014-05-14 25 / 57
Verified static analyzer 2014-05-14 26 / 57
Verified static analyzer 2014-05-14 27 / 57
Verified static analyzer 2014-05-14 28 / 57
Verified static analyzer 2014-05-14 29 / 57
Verified static analyzer 2014-05-14 29 / 57
Verified static analyzer 2014-05-14 30 / 57
Verified static analyzer 2014-05-14 31 / 57
Verified static analyzer 2014-05-14 32 / 57
Verified static analyzer 2014-05-14 33 / 57
Verified static analyzer 2014-05-14 34 / 57
Verified static analyzer 2014-05-14 35 / 57
Verified static analyzer 2014-05-14 36 / 57
Verified static analyzer 2014-05-14 37 / 57
Verified static analyzer 2014-05-14 38 / 57
Verified static analyzer 2014-05-14 38 / 57
Verified static analyzer 2014-05-14 39 / 57
1 Soundness: if x ∈ γ(a) then F(x) ∈ γ(F #(a)). 2 Optimality: every a′ such that x ∈ γ(a) ⇒ F(x) ∈ γ(a′)
Verified static analyzer 2014-05-14 40 / 57
Verified static analyzer 2014-05-14 41 / 57
Verified static analyzer 2014-05-14 42 / 57
Verified static analyzer 2014-05-14 43 / 57
Verified static analyzer 2014-05-14 44 / 57
Verified static analyzer 2014-05-14 45 / 57
1 Abstract interpreter for RTL (Blazy, Maron`
2 Abstract interpreter for C#minor (Jourdan, in progress)
Verified static analyzer 2014-05-14 46 / 57
Verified static analyzer 2014-05-14 47 / 57
Verified static analyzer 2014-05-14 48 / 57
Verified static analyzer 2014-05-14 49 / 57
Verified static analyzer 2014-05-14 50 / 57
Verified static analyzer 2014-05-14 51 / 57
Verified static analyzer 2014-05-14 52 / 57
Verified static analyzer 2014-05-14 53 / 57
Verified static analyzer 2014-05-14 54 / 57
Verified static analyzer 2014-05-14 55 / 57
Verified static analyzer 2014-05-14 56 / 57
Verified static analyzer 2014-05-14 57 / 57