Slide 1

Slide 1 text

Symbolic model checker from scratch in Rust Riru Oda @ri5255 Kernel/VM探検隊@東京 No17 1

Slide 2

Slide 2 text

2 Agenda • モデル検査とは? • Symbolic Model Checkingの理論と実装 • デモ

Slide 3

Slide 3 text

3 モデル検査とは? システムが仕様を満たしてることを自動的に検証する技術

Slide 4

Slide 4 text

4 モデル検査とは? 例) 2つのスレッドp, qが一つの共有変数xを読み書きする While (true) { x = x + 1; x = x – 1; } 仕様: 𝐴𝐺(𝑥 < 2) 全て(All)の実行パスで常に(Globally) x < 2が成り立つ

Slide 5

Slide 5 text

5 モデル検査とは? 例) 2つのスレッドp, qが一つの共有変数xを読み書きする While (true) { x = x + 1; x = x – 1; } 仕様: 𝐴𝐺(𝑥 < 2) 全て(All)の実行パスで常に(Globally) x < 2が成り立つ

Slide 6

Slide 6 text

6 モデル検査とは? 例) 2つのスレッドp, qが一つの共有変数xを読み書きする 仕様: 𝐴𝐺(𝑥 < 2) 全て(All)の実行パスで常に(Globally) x < 2が成り立つ While (true) { lock(“mutex”) x = x + 1; x = x – 1; unlock(“mutex”) }

Slide 7

Slide 7 text

7 モデル検査とは? 例) 2つのスレッドp, qが一つの共有変数xを読み書きする 仕様: 𝐴𝐺(𝑥 < 2) 全て(All)の実行パスで常に(Globally) x < 2が成り立つ While (true) { lock(“mutex”) x = x + 1; x = x – 1; unlock(“mutex”) }

Slide 8

Slide 8 text

8 モデル検査とは? モデル検査器 システム記述 + 仕様 Ok 反例

Slide 9

Slide 9 text

9 Agenda • モデル検査とは? • Symbolic Model Checkingの理論と実装 • デモ

Slide 10

Slide 10 text

CTL (Computation Tree Logic) • 𝑝 ∈ 𝐴𝑃 はCTL論理式 • 𝑓 がCTL論理式ならば¬𝑓, 𝐴𝑋 𝑓, 𝐸𝑋 𝑓, 𝐴𝐹 𝑓, 𝐸𝐹 𝑓, 𝐴𝐺 𝑓, 𝐸𝐺 𝑓はCTL論理式 • 𝑓 と 𝑔 が CTL論理式ならば𝑓 ∧ 𝑔, 𝑓 ∨ 𝑔, 𝐴 𝑓 𝑈 𝑔 , 𝐸 𝑓 𝑈 𝑔 , 𝐴 𝑓 𝑅 𝑔 , 𝐸 (𝑓 𝑅𝑔) はCTL論理式 𝑀, 𝑠0 ⊨ 𝐸𝑋 𝑓 𝑀, 𝑠0 ⊨ 𝐴𝐺 𝑓 𝑀, 𝑠0 ⊨ 𝐸(𝑓 𝑈 𝑔) 10

Slide 11

Slide 11 text

CTL Model Checking 例: E(p U q)を満たす状態は? 11

Slide 12

Slide 12 text

CTL Model Checking 答え 12 例: E(p U q)を満たす状態は?

Slide 13

Slide 13 text

CTL Model Checking 答え 13 例: E(p U q)を満たす状態は? どうやって計算する? そもそも計算可能なの?

Slide 14

Slide 14 text

CTL Model Checking via Fixpoint Computation 14 例: E(p U q)を満たす状態は?

Slide 15

Slide 15 text

CTL Model Checking via Fixpoint Computation 15 例: E(p U q)を満たす状態は?

Slide 16

Slide 16 text

CTL Model Checking via Fixpoint Computation 16 例: E(p U q)を満たす状態は?

Slide 17

Slide 17 text

CTL Model Checking via Fixpoint Computation 17 例: E(p U q)を満たす状態は?

Slide 18

Slide 18 text

CTL Model Checking via Fixpoint Computation 形式化 𝜏 𝑍 = 𝑞 ∨ (𝑝 ∧ 𝐸𝑋 𝑍 ) 𝑆𝑎𝑡 𝐸 𝑝 𝑈 𝑞 = 𝐿𝑓𝑝 𝜏 18

Slide 19

Slide 19 text

CTL Model Checking via Fixpoint Computation 形式化 𝜏 𝑍 = 𝑞 ∨ (𝑝 ∧ 𝐸𝑋 𝑍 ) 𝑆𝑎𝑡 𝐸 𝑝 𝑈 𝑞 = 𝐿𝑓𝑝 𝜏 19 𝜏 ∅ = 𝑞 ∨ 𝑝 ∧ 𝐸𝑋 ∅ = 𝑞 = {𝑠1}

Slide 20

Slide 20 text

CTL Model Checking via Fixpoint Computation 形式化 𝜏 𝑍 = 𝑞 ∨ (𝑝 ∧ 𝐸𝑋 𝑍 ) 𝑆𝑎𝑡 𝐸 𝑝 𝑈 𝑞 = 𝐿𝑓𝑝 𝜏 𝜏 ∅ = {𝑠1} 20 𝜏(𝜏(∅)) = 𝑞 ∨ (𝑝 ∧ 𝐸𝑋 𝑠1 ) = {𝑠1, 𝑠2}

Slide 21

Slide 21 text

CTL Model Checking via Fixpoint Computation 形式化 𝜏 𝑍 = 𝑞 ∨ (𝑝 ∧ 𝐸𝑋 𝑍 ) 𝑆𝑎𝑡 𝐸 𝑝 𝑈 𝑞 = 𝐿𝑓𝑝 𝜏 𝜏 ∅ = {𝑠1} 𝜏 𝜏 ∅ = {𝑠1, 𝑠2} 𝜏(𝜏(𝜏(∅))) = {𝑠1, 𝑠2, 𝑠3} 21

Slide 22

Slide 22 text

CTL Model Checking via Fixpoint Computation Theorem (Tarski-Knaster) Let 𝜏 be a predicate transformer on 𝑃 𝑆 . Then if 𝜏 is monotonic it has a greatest and least fixpoint. Lemma If 𝜏 is monotonic and S is finite, then threre is an integer 𝑖0 such that 𝐺𝑓𝑝 𝜏 = 𝜏𝑖0(𝑆) and 𝐿𝑓𝑝 𝜏 = 𝜏𝑖0(∅). Correctness 22

Slide 23

Slide 23 text

CTL Model Checking via Fixpoint Computation Theorem (Tarski-Knaster) Let 𝜏 be a predicate transformer on 𝑃 𝑆 . Then if 𝜏 is monotonic it has a greatest and least fixpoint. Lemma If 𝜏 is monotonic and S is finite, then threre is an integer 𝑖0 such that 𝐺𝑓𝑝 𝜏 = 𝜏𝑖0(𝑆) and 𝐿𝑓𝑝 𝜏 = 𝜏𝑖0(∅). Correctness 23 𝐸𝑋や∨, ∧ はどうやって実装する? 𝜏 𝑍 = 𝑞 ∨ (𝑝 ∧ 𝐸𝑋 𝑍 )

Slide 24

Slide 24 text

Symbolic Representation of Kripke Structures 24

Slide 25

Slide 25 text

Symbolic Representation of Kripke Structures 25 𝑆 = ¬𝑥0 ∨ 𝑥0 𝑅 = ¬𝑥0 ∧ 𝑥0′ ∨ 𝑥0 ∧ ¬𝑥0′ 𝑞 = ¬𝑥0 𝑝 = 𝑥0 Symbolic Representation

Slide 26

Slide 26 text

Symbolic Representation of Kripke Structures 26 𝑅 = ¬𝑥0 ∧ 𝑥0′ ∨ 𝑥0 ∧ ¬𝑥0′ 𝑞 = ¬𝑥0 𝑝 = 𝑥0 Symbolic Representation • 2つの状態を表すために1つのブール変数𝑥0 を導入 • s0を¬𝑥0, s1を𝑥0で表現する • 遷移後の状態を表現するために新しいブール変数𝑥0′を導入 Idea 𝑆 = ¬𝑥0 ∨ 𝑥0

Slide 27

Slide 27 text

Symbolic Representation of Kripke Structures 27 𝑅 = ¬𝑥0 ∧ 𝑥0′ ∨ 𝑥0 ∧ ¬𝑥0′ 𝑞 = ¬𝑥0 𝑝 = 𝑥0 Symbolic Representation • 2つの状態を表すために1つのブール変数𝑥0 を導入 • s0を¬𝑥0, s1を𝑥0で表現する • 遷移後の状態を表現するために新しいブール変数𝑥0′を導入 Idea 𝐸𝑋,∨,∧ を論理式に対する操作として実装できる 例: 𝑆𝑎𝑡(𝐸𝑋 𝑓 ) = ∃𝑣′[ 𝑓 𝑣′ ∧ 𝑅 𝑣, 𝑣′ ] 𝑆 = ¬𝑥0 ∨ 𝑥0

Slide 28

Slide 28 text

Symbolic Model Checking 例: E(p U q)を満たす状態は? Note • 𝑆𝑎𝑡 𝐸 𝑝 𝑈 𝑞 = 𝐿𝑓𝑝 𝜏 where 𝜏 𝑍 = 𝑞 ∨ 𝑝 ∧ 𝐸𝑋 𝑍 • 𝑆𝑎𝑡(𝐸𝑋 𝑓 ) = ∃𝑣′[ 𝑓 𝑣′ ∧ 𝑅 𝑣, 𝑣′ ] 28 𝑆 = ¬𝑥0 ∨ 𝑥0 𝑅 = ¬𝑥0 ∧ 𝑥0′ ∨ 𝑥0 ∧ ¬𝑥0′ 𝑞 = ¬𝑥0 𝑝 = 𝑥0 Symbolic Representation

Slide 29

Slide 29 text

Symbolic Model Checking 例: E(p U q)を満たす状態は? Note • 𝑆𝑎𝑡 𝐸 𝑝 𝑈 𝑞 = 𝐿𝑓𝑝 𝜏 where 𝜏 𝑍 = 𝑞 ∨ 𝑝 ∧ 𝐸𝑋 𝑍 • 𝑆𝑎𝑡(𝐸𝑋 𝑓 ) = ∃𝑣′[ 𝑓 𝑣′ ∧ 𝑅 𝑣, 𝑣′ ] 29 𝑅 = ¬𝑥0 ∧ 𝑥0′ ∨ 𝑥0 ∧ ¬𝑥0′ 𝑞 = ¬𝑥0 𝑝 = 𝑥0 Symbolic Representation 𝜏 ∅ = ¬𝑥0 𝜏(∅) = ¬𝑥0 ∨ 𝑥0 ∧ 𝐸𝑋(𝑓𝑎𝑙𝑠𝑒 ) = ¬𝑥0 𝑆 = ¬𝑥0 ∨ 𝑥0

Slide 30

Slide 30 text

Symbolic Model Checking 例: E(p U q)を満たす状態は? Note • 𝑆𝑎𝑡 𝐸 𝑝 𝑈 𝑞 = 𝐿𝑓𝑝 𝜏 where 𝜏 𝑍 = 𝑞 ∨ 𝑝 ∧ 𝐸𝑋 𝑍 • 𝑆𝑎𝑡(𝐸𝑋 𝑓 ) = ∃𝑣′[ 𝑓 𝑣′ ∧ 𝑅 𝑣, 𝑣′ ] 30 𝑅 = ¬𝑥0 ∧ 𝑥0′ ∨ 𝑥0 ∧ ¬𝑥0′ 𝑞 = ¬𝑥0 𝑝 = 𝑥0 Symbolic Representation 𝜏 ∅ = ¬𝑥0 𝜏(𝜏 ∅ ) = ¬𝑥0 ∨ 𝑥0 𝜏 𝜏 ∅ = ¬𝑥0 ∨ 𝑥0 ∧ 𝐸𝑋 𝜏 ∅ = ¬𝑥0 ∨ 𝑥0 ∧ ∃𝑥0′[¬𝑥0′ ∧ ( ¬𝑥0 ∧ 𝑥0′ ∨ (𝑥0 ∧ ¬𝑥0′)] ) = ¬𝑥0 ∨ 𝑥0 𝑆 = ¬𝑥0 ∨ 𝑥0

Slide 31

Slide 31 text

Symbolic Model Checking 例: E(p U q)を満たす状態は? Note • 𝑆𝑎𝑡 𝐸 𝑝 𝑈 𝑞 = 𝐿𝑓𝑝 𝜏 where 𝜏 𝑍 = 𝑞 ∨ 𝑝 ∧ 𝐸𝑋 𝑍 • 𝑆𝑎𝑡(𝐸𝑋 𝑓 ) = ∃𝑣′[ 𝑓 𝑣′ ∧ 𝑅 𝑣, 𝑣′ ] 31 𝑅 = ¬𝑥0 ∧ 𝑥0′ ∨ 𝑥0 ∧ ¬𝑥0′ 𝑞 = ¬𝑥0 𝑝 = 𝑥0 Symbolic Representation 𝜏 ∅ = ¬𝑥0 𝜏(𝜏 ∅ ) = ¬𝑥0 ∨ 𝑥0 𝑆 = ¬𝑥0 ∨ 𝑥0 論理式を表現するデータ構造は? 𝜏 𝜏 ∅ = ¬𝑥0 ∨ 𝑥0 ∧ 𝐸𝑋 𝜏 ∅ = ¬𝑥0 ∨ 𝑥0 ∧ ∃𝑥0′[¬𝑥0′ ∧ ( ¬𝑥0 ∧ 𝑥0′ ∨ (𝑥0 ∧ ¬𝑥0′)] ) = ¬𝑥0 ∨ 𝑥0

Slide 32

Slide 32 text

OBDD(Ordered Binary Decision Diagram) 32 例: 𝑥0 ∨ 𝑥1 BDT(Binary Decision Tree)

Slide 33

Slide 33 text

OBDD(Ordered Binary Decision Diagram) 33 例: 𝑥0 ∨ 𝑥1 BDT(Binary Decision Tree) OBDD

Slide 34

Slide 34 text

OBDD(Ordered Binary Decision Diagram) 34 例: 𝑥0 ∨ 𝑥1 BDT(Binary Decision Tree) OBDD Theorem (Bryant[1]) For any Boolean function 𝑓 , there is a unique OBDD denoting 𝑓

Slide 35

Slide 35 text

OBDD(Ordered Binary Decision Diagram) 35 例: 𝑥0 ∨ 𝑥1 BDT(Binary Decision Tree) OBDD Theorem (Bryant[1]) For any Boolean function 𝑓 , there is a unique OBDD denoting 𝑓

Slide 36

Slide 36 text

OBDD(Ordered Binary Decision Diagram) 36 例: 𝑥0 ∨ 𝑥1 BDT(Binary Decision Tree) OBDD Theorem (Bryant[1]) For any Boolean function 𝑓 , there is a unique OBDD denoting 𝑓 𝐸𝑋,∨,∧をOBDDを用いて実装することができる!

Slide 37

Slide 37 text

Implementation in Rust 37 𝑆𝑎𝑡(𝐸𝑋 𝑓 ) = ∃𝑣′[ 𝑓 𝑣′ ∧ 𝑅 𝑣, 𝑣′ ]

Slide 38

Slide 38 text

Implementation in Rust 38 𝜏 𝑍 = 𝑓2 ∨ 𝑓1 ∧ 𝐸𝑋 𝑍 𝑆𝑎𝑡 𝐸 𝑓1 𝑈 𝑓2 = 𝐿𝑓𝑝 𝜏

Slide 39

Slide 39 text

39 Agenda • モデル検査とは? • Symbolic Model Checkingの理論と実装 • デモ

Slide 40

Slide 40 text

Demo:食事する哲学者問題 40 システム記述

Slide 41

Slide 41 text

Demo:食事する哲学者問題 41 仕様: AG(𝑐𝑟𝑖𝑡𝑖𝑐𝑎𝑙 < 2) 全ての状態がこれを満たすならば相互排他が成り立つ

Slide 42

Slide 42 text

Demo:食事する哲学者問題 42

Slide 43

Slide 43 text

Demo:食事する哲学者問題 43 仕様: EG(𝑐𝑠𝑝 == 0) これを満たす状態が存在するならばスレッドpが飢餓に陥る実行パスが存在する

Slide 44

Slide 44 text

Demo:食事する哲学者問題 44

Slide 45

Slide 45 text

45 Demo:食事する哲学者問題 例: qがロックをとり続ける実行パス

Slide 46

Slide 46 text

References 46 1. Bryant, "Graph-Based Algorithms for Boolean Function Manipulation" in IEEE Transactions on Computers, vol. C-35, no. 8, pp. 677-691, Aug. 1986, doi: 10.1109/TC.1986.1676819. 2. Clarke, E. M., Jr, Grumberg, O., Kroening, D., Peled, D., & Veith, H. (2018). Model Checking, Second Edition. MIT Press. 3. チェシャ猫 (2024). モデル検査器をつくる Code https://github.com/r1ru/model-checker-from-scratch