Software Model Checking with Ultimate
Jochen Hoenicke
Albert-Ludwigs-Universit¨ at Freiburg, Germany
July 3rd & 5th, 2019
Jochen Hoenicke (Uni Freiburg) Software Model Checking with Ultimate 3 Jul 2019 1 / 65
Software Model Checking with Ultimate Jochen Hoenicke - - PowerPoint PPT Presentation
Software Model Checking with Ultimate Jochen Hoenicke Albert-Ludwigs-Universit at Freiburg, Germany July 3rd & 5th, 2019 Jochen Hoenicke (Uni Freiburg) Software Model Checking with Ultimate 3 Jul 2019 1 / 65 Brief History of Model
Jochen Hoenicke (Uni Freiburg) Software Model Checking with Ultimate 3 Jul 2019 1 / 65
Jochen Hoenicke (Uni Freiburg) Software Model Checking with Ultimate 3 Jul 2019 2 / 65
Jochen Hoenicke (Uni Freiburg) Software Model Checking with Ultimate 3 Jul 2019 2 / 65
Jochen Hoenicke (Uni Freiburg) Software Model Checking with Ultimate 3 Jul 2019 2 / 65
Jochen Hoenicke (Uni Freiburg) Software Model Checking with Ultimate 3 Jul 2019 2 / 65
Jochen Hoenicke (Uni Freiburg) Software Model Checking with Ultimate 3 Jul 2019 3 / 65
Jochen Hoenicke (Uni Freiburg) Software Model Checking with Ultimate 3 Jul 2019 4 / 65
Jochen Hoenicke (Uni Freiburg) Software Model Checking with Ultimate 3 Jul 2019 5 / 65
Jochen Hoenicke (Uni Freiburg) Software Model Checking with Ultimate 3 Jul 2019 5 / 65
Jochen Hoenicke (Uni Freiburg) Software Model Checking with Ultimate 3 Jul 2019 6 / 65
Jochen Hoenicke (Uni Freiburg) Software Model Checking with Ultimate 3 Jul 2019 7 / 65
Jochen Hoenicke (Uni Freiburg) Software Model Checking with Ultimate 3 Jul 2019 8 / 65
Jochen Hoenicke (Uni Freiburg) Software Model Checking with Ultimate 3 Jul 2019 9 / 65
Jochen Hoenicke (Uni Freiburg) Software Model Checking with Ultimate 3 Jul 2019 9 / 65
Jochen Hoenicke (Uni Freiburg) Software Model Checking with Ultimate 3 Jul 2019 9 / 65
Jochen Hoenicke (Uni Freiburg) Software Model Checking with Ultimate 3 Jul 2019 10 / 65
Jochen Hoenicke (Uni Freiburg) Software Model Checking with Ultimate 3 Jul 2019 11 / 65
Jochen Hoenicke (Uni Freiburg) Software Model Checking with Ultimate 3 Jul 2019 11 / 65
Jochen Hoenicke (Uni Freiburg) Software Model Checking with Ultimate 3 Jul 2019 12 / 65
Jochen Hoenicke (Uni Freiburg) Software Model Checking with Ultimate 3 Jul 2019 12 / 65
Jochen Hoenicke (Uni Freiburg) Software Model Checking with Ultimate 3 Jul 2019 12 / 65
Jochen Hoenicke (Uni Freiburg) Software Model Checking with Ultimate 3 Jul 2019 12 / 65
Jochen Hoenicke (Uni Freiburg) Software Model Checking with Ultimate 3 Jul 2019 12 / 65
Jochen Hoenicke (Uni Freiburg) Software Model Checking with Ultimate 3 Jul 2019 13 / 65
Jochen Hoenicke (Uni Freiburg) Software Model Checking with Ultimate 3 Jul 2019 13 / 65
Jochen Hoenicke (Uni Freiburg) Software Model Checking with Ultimate 3 Jul 2019 13 / 65
Jochen Hoenicke (Uni Freiburg) Software Model Checking with Ultimate 3 Jul 2019 13 / 65
Jochen Hoenicke (Uni Freiburg) Software Model Checking with Ultimate 3 Jul 2019 13 / 65
Jochen Hoenicke (Uni Freiburg) Software Model Checking with Ultimate 3 Jul 2019 13 / 65
Software Model Checking with Ultimate 3 Jul 2019 14 / 65
Jochen Hoenicke (Uni Freiburg) Software Model Checking with Ultimate 3 Jul 2019 15 / 65
Jochen Hoenicke (Uni Freiburg) Software Model Checking with Ultimate 3 Jul 2019 15 / 65
Jochen Hoenicke (Uni Freiburg) Software Model Checking with Ultimate 3 Jul 2019 15 / 65
Jochen Hoenicke (Uni Freiburg) Software Model Checking with Ultimate 3 Jul 2019 16 / 65
Jochen Hoenicke (Uni Freiburg) Software Model Checking with Ultimate 3 Jul 2019 17 / 65
Jochen Hoenicke (Uni Freiburg) Software Model Checking with Ultimate 3 Jul 2019 17 / 65
Jochen Hoenicke (Uni Freiburg) Software Model Checking with Ultimate 3 Jul 2019 17 / 65
Jochen Hoenicke (Uni Freiburg) Software Model Checking with Ultimate 3 Jul 2019 17 / 65
Jochen Hoenicke (Uni Freiburg) Software Model Checking with Ultimate 3 Jul 2019 17 / 65
Jochen Hoenicke (Uni Freiburg) Software Model Checking with Ultimate 3 Jul 2019 18 / 65
Jochen Hoenicke (Uni Freiburg) Software Model Checking with Ultimate 3 Jul 2019 19 / 65
Jochen Hoenicke (Uni Freiburg) Software Model Checking with Ultimate 3 Jul 2019 20 / 65
Jochen Hoenicke (Uni Freiburg) Software Model Checking with Ultimate 3 Jul 2019 20 / 65
Jochen Hoenicke (Uni Freiburg) Software Model Checking with Ultimate 3 Jul 2019 21 / 65
Jochen Hoenicke (Uni Freiburg) Software Model Checking with Ultimate 3 Jul 2019 21 / 65
Jochen Hoenicke (Uni Freiburg) Software Model Checking with Ultimate 3 Jul 2019 22 / 65
Jochen Hoenicke (Uni Freiburg) Software Model Checking with Ultimate 3 Jul 2019 22 / 65
Jochen Hoenicke (Uni Freiburg) Software Model Checking with Ultimate 3 Jul 2019 23 / 65
1 Build program automaton. 2 Pick an error traces. If none, program is safe. 3 Ask SMT solver. If sat, program is unsafe. 4 Generalize error trace to an automaton. 5 Subtract from program automaton. 6 Go to step 2. Jochen Hoenicke (Uni Freiburg) Software Model Checking with Ultimate 3 Jul 2019 24 / 65
Jochen Hoenicke (Uni Freiburg) Software Model Checking with Ultimate 3 Jul 2019 25 / 65
Jochen Hoenicke (Uni Freiburg) Software Model Checking with Ultimate 3 Jul 2019 25 / 65
Jochen Hoenicke (Uni Freiburg) Software Model Checking with Ultimate 3 Jul 2019 25 / 65
Jochen Hoenicke (Uni Freiburg) Software Model Checking with Ultimate 3 Jul 2019 25 / 65
Jochen Hoenicke (Uni Freiburg) Software Model Checking with Ultimate 3 Jul 2019 25 / 65
Jochen Hoenicke (Uni Freiburg) Software Model Checking with Ultimate 3 Jul 2019 25 / 65
Jochen Hoenicke (Uni Freiburg) Software Model Checking with Ultimate 3 Jul 2019 26 / 65
Jochen Hoenicke (Uni Freiburg) Software Model Checking with Ultimate 3 Jul 2019 26 / 65
Jochen Hoenicke (Uni Freiburg) Software Model Checking with Ultimate 3 Jul 2019 27 / 65
Jochen Hoenicke (Uni Freiburg) Software Model Checking with Ultimate 3 Jul 2019 27 / 65
Jochen Hoenicke (Uni Freiburg) Software Model Checking with Ultimate 3 Jul 2019 28 / 65
Jochen Hoenicke (Uni Freiburg) Software Model Checking with Ultimate 3 Jul 2019 28 / 65
Jochen Hoenicke (Uni Freiburg) Software Model Checking with Ultimate 3 Jul 2019 29 / 65
Jochen Hoenicke (Uni Freiburg) Software Model Checking with Ultimate 3 Jul 2019 29 / 65
Jochen Hoenicke (Uni Freiburg) Software Model Checking with Ultimate 3 Jul 2019 30 / 65
Jochen Hoenicke (Uni Freiburg) Software Model Checking with Ultimate 3 Jul 2019 31 / 65
Jochen Hoenicke (Uni Freiburg) Software Model Checking with Ultimate 3 Jul 2019 31 / 65
Jochen Hoenicke (Uni Freiburg) Software Model Checking with Ultimate 3 Jul 2019 31 / 65
Jochen Hoenicke (Uni Freiburg) Software Model Checking with Ultimate 3 Jul 2019 31 / 65
Jochen Hoenicke (Uni Freiburg) Software Model Checking with Ultimate 3 Jul 2019 31 / 65
Jochen Hoenicke (Uni Freiburg) Software Model Checking with Ultimate 3 Jul 2019 31 / 65
Jochen Hoenicke (Uni Freiburg) Software Model Checking with Ultimate 3 Jul 2019 32 / 65
Jochen Hoenicke (Uni Freiburg) Software Model Checking with Ultimate 3 Jul 2019 32 / 65
Jochen Hoenicke (Uni Freiburg) Software Model Checking with Ultimate 3 Jul 2019 33 / 65
Jochen Hoenicke (Uni Freiburg) Software Model Checking with Ultimate 3 Jul 2019 33 / 65
Jochen Hoenicke (Uni Freiburg) Software Model Checking with Ultimate 3 Jul 2019 34 / 65
Jochen Hoenicke (Uni Freiburg) Software Model Checking with Ultimate 3 Jul 2019 35 / 65
Jochen Hoenicke (Uni Freiburg) Software Model Checking with Ultimate 3 Jul 2019 36 / 65
Jochen Hoenicke (Uni Freiburg) Software Model Checking with Ultimate 3 Jul 2019 36 / 65
Jochen Hoenicke (Uni Freiburg) Software Model Checking with Ultimate 3 Jul 2019 37 / 65
Jochen Hoenicke (Uni Freiburg) Software Model Checking with Ultimate 3 Jul 2019 37 / 65
Jochen Hoenicke (Uni Freiburg) Software Model Checking with Ultimate 3 Jul 2019 37 / 65
Jochen Hoenicke (Uni Freiburg) Software Model Checking with Ultimate 3 Jul 2019 38 / 65
Jochen Hoenicke (Uni Freiburg) Software Model Checking with Ultimate 3 Jul 2019 38 / 65
Jochen Hoenicke (Uni Freiburg) Software Model Checking with Ultimate 3 Jul 2019 39 / 65
Jochen Hoenicke (Uni Freiburg) Software Model Checking with Ultimate 3 Jul 2019 39 / 65
Jochen Hoenicke (Uni Freiburg) Software Model Checking with Ultimate 3 Jul 2019 40 / 65
Jochen Hoenicke (Uni Freiburg) Software Model Checking with Ultimate 3 Jul 2019 41 / 65
Jochen Hoenicke (Uni Freiburg) Software Model Checking with Ultimate 3 Jul 2019 42 / 65
Jochen Hoenicke (Uni Freiburg) Software Model Checking with Ultimate 3 Jul 2019 42 / 65
x↑<=101 call f x>100 res:=x-10 x<=100 x↑:=x+11 x↑:=res res!=91 return
Jochen Hoenicke (Uni Freiburg) Software Model Checking with Ultimate 3 Jul 2019 43 / 65
x↑<=101 call f x>100 res:=x-10 x<=100 x↑:=x+11 x↑:=res res!=91 return ? call f call f return ? return ?
Jochen Hoenicke (Uni Freiburg) Software Model Checking with Ultimate 3 Jul 2019 43 / 65
Jochen Hoenicke (Uni Freiburg) Software Model Checking with Ultimate 3 Jul 2019 44 / 65
Jochen Hoenicke (Uni Freiburg) Software Model Checking with Ultimate 3 Jul 2019 44 / 65
x↑<=101 call f ↓ℓ2 x>100 res:=x-10 x<=100 x↑:=x+11 x↑:=res res!=91 return ↑ℓ2 call f ↓ℓ6 call f ↓ℓ8 return ↑ℓ6 return ↑ℓ8
Jochen Hoenicke (Uni Freiburg) Software Model Checking with Ultimate 3 Jul 2019 45 / 65
Jochen Hoenicke (Uni Freiburg) Software Model Checking with Ultimate 3 Jul 2019 46 / 65
Jochen Hoenicke (Uni Freiburg) Software Model Checking with Ultimate 3 Jul 2019 46 / 65
Jochen Hoenicke (Uni Freiburg) Software Model Checking with Ultimate 3 Jul 2019 47 / 65
Jochen Hoenicke (Uni Freiburg) Software Model Checking with Ultimate 3 Jul 2019 47 / 65
Jochen Hoenicke (Uni Freiburg) Software Model Checking with Ultimate 3 Jul 2019 48 / 65
Jochen Hoenicke (Uni Freiburg) Software Model Checking with Ultimate 3 Jul 2019 48 / 65
Jochen Hoenicke (Uni Freiburg) Software Model Checking with Ultimate 3 Jul 2019 49 / 65
Jochen Hoenicke (Uni Freiburg) Software Model Checking with Ultimate 3 Jul 2019 49 / 65
Jochen Hoenicke (Uni Freiburg) Software Model Checking with Ultimate 3 Jul 2019 50 / 65
Jochen Hoenicke (Uni Freiburg) Software Model Checking with Ultimate 3 Jul 2019 51 / 65
Jochen Hoenicke (Uni Freiburg) Software Model Checking with Ultimate 3 Jul 2019 51 / 65
Jochen Hoenicke (Uni Freiburg) Software Model Checking with Ultimate 3 Jul 2019 51 / 65
Jochen Hoenicke (Uni Freiburg) Software Model Checking with Ultimate 3 Jul 2019 51 / 65
Jochen Hoenicke (Uni Freiburg) Software Model Checking with Ultimate 3 Jul 2019 51 / 65
Jochen Hoenicke (Uni Freiburg) Software Model Checking with Ultimate 3 Jul 2019 51 / 65
Jochen Hoenicke (Uni Freiburg) Software Model Checking with Ultimate 3 Jul 2019 51 / 65
Jochen Hoenicke (Uni Freiburg) Software Model Checking with Ultimate 3 Jul 2019 52 / 65
Jochen Hoenicke (Uni Freiburg) Software Model Checking with Ultimate 3 Jul 2019 52 / 65
Jochen Hoenicke (Uni Freiburg) Software Model Checking with Ultimate 3 Jul 2019 53 / 65
Jochen Hoenicke (Uni Freiburg) Software Model Checking with Ultimate 3 Jul 2019 54 / 65
Jochen Hoenicke (Uni Freiburg) Software Model Checking with Ultimate 3 Jul 2019 54 / 65
Jochen Hoenicke (Uni Freiburg) Software Model Checking with Ultimate 3 Jul 2019 55 / 65
Jochen Hoenicke (Uni Freiburg) Software Model Checking with Ultimate 3 Jul 2019 55 / 65
Jochen Hoenicke (Uni Freiburg) Software Model Checking with Ultimate 3 Jul 2019 56 / 65
Jochen Hoenicke (Uni Freiburg) Software Model Checking with Ultimate 3 Jul 2019 56 / 65
Jochen Hoenicke (Uni Freiburg) Software Model Checking with Ultimate 3 Jul 2019 56 / 65
Jochen Hoenicke (Uni Freiburg) Software Model Checking with Ultimate 3 Jul 2019 57 / 65
Jochen Hoenicke (Uni Freiburg) Software Model Checking with Ultimate 3 Jul 2019 57 / 65
Jochen Hoenicke (Uni Freiburg) Software Model Checking with Ultimate 3 Jul 2019 58 / 65
Jochen Hoenicke (Uni Freiburg) Software Model Checking with Ultimate 3 Jul 2019 59 / 65
Jochen Hoenicke (Uni Freiburg) Software Model Checking with Ultimate 3 Jul 2019 59 / 65
Jochen Hoenicke (Uni Freiburg) Software Model Checking with Ultimate 3 Jul 2019 60 / 65
Jochen Hoenicke (Uni Freiburg) Software Model Checking with Ultimate 3 Jul 2019 61 / 65
Jochen Hoenicke (Uni Freiburg) Software Model Checking with Ultimate 3 Jul 2019 61 / 65
Jochen Hoenicke (Uni Freiburg) Software Model Checking with Ultimate 3 Jul 2019 61 / 65
Jochen Hoenicke (Uni Freiburg) Software Model Checking with Ultimate 3 Jul 2019 62 / 65
Jochen Hoenicke (Uni Freiburg) Software Model Checking with Ultimate 3 Jul 2019 62 / 65
Jochen Hoenicke (Uni Freiburg) Software Model Checking with Ultimate 3 Jul 2019 62 / 65
Jochen Hoenicke (Uni Freiburg) Software Model Checking with Ultimate 3 Jul 2019 63 / 65
Jochen Hoenicke (Uni Freiburg) Software Model Checking with Ultimate 3 Jul 2019 63 / 65
Jochen Hoenicke (Uni Freiburg) Software Model Checking with Ultimate 3 Jul 2019 63 / 65
Jochen Hoenicke (Uni Freiburg) Software Model Checking with Ultimate 3 Jul 2019 64 / 65
Jochen Hoenicke (Uni Freiburg) Software Model Checking with Ultimate 3 Jul 2019 64 / 65
Jochen Hoenicke (Uni Freiburg) Software Model Checking with Ultimate 3 Jul 2019 64 / 65
Jochen Hoenicke (Uni Freiburg) Software Model Checking with Ultimate 3 Jul 2019 64 / 65
Jochen Hoenicke (Uni Freiburg) Software Model Checking with Ultimate 3 Jul 2019 65 / 65