SLIDE 1 Verified Decision Procedures
for
Monadic Second-Order Logic on Strings
Functional Pearl
Dmitriy Traytel Tobias Nipkow
λ → ∀
=
Isabelle
β α
SLIDE 2
Overview
MSO
SLIDE 3
Overview
MSO LMSO(ϕ) = LMSO(ψ)?
SLIDE 4
Overview
MSO LMSO(ϕ) = LMSO(ψ)? Finite Automata
SLIDE 5
Overview
MSO LMSO(ϕ) = LMSO(ψ)? Finite Automata
MONA (> 40 kLOC of C/C++)
SLIDE 6
Overview
MSO LMSO(ϕ) = LMSO(ψ)? Regular Expressions Finite Automata
MONA (> 40 kLOC of C/C++)
SLIDE 7
Overview
MSO LMSO(ϕ) = LMSO(ψ)? Regular Expressions L (α) = L (β)? Finite Automata
MONA (> 40 kLOC of C/C++)
SLIDE 8
Overview
MSO LMSO(ϕ) = LMSO(ψ)? Regular Expressions L (α) = L (β)? LMSO(ϕ) = L (mkRE ϕ) Finite Automata
MONA (> 40 kLOC of C/C++)
SLIDE 9
Overview
M2L WS1S LM2L(ϕ) = LM2L(ψ)? LWS1S(ϕ) = LWS1S(ψ)? Regular Expressions L (α) = L (β)? LM2L(ϕ) = L (mkREM2L ϕ) LWS1S(ϕ) = L (mkREWS1S ϕ) Finite Automata MONA
SLIDE 10 Overview
M2L WS1S LM2L(ϕ) = LM2L(ψ)? LWS1S(ϕ) = LWS1S(ψ)? Regular Expressions L (α) = L (β)? LM2L(ϕ) = L (mkREM2L ϕ) LWS1S(ϕ) = L (mkREWS1S ϕ) Finite Automata MONA
λ → ∀ =
I s a b e l l e
β α
SLIDE 11 Overview
M2L WS1S LM2L(ϕ) = LM2L(ψ)? LWS1S(ϕ) = LWS1S(ψ)? Regular Expressions L (α) = L (β)? LM2L(ϕ) = L (mkREM2L ϕ) LWS1S(ϕ) = L (mkREWS1S ϕ) Finite Automata MONA
λ → ∀ =
I s a b e l l e
β α
SLIDE 12
Outline
Regular Expressions Equivalence MSO
SLIDE 13
Outline
Regular Expressions Equivalence MSO
SLIDE 14
Regular Expressions
L (∅) = {} L (ε) = {[]} L (a) = {[a ]}
a ∈ Σ
L (α+β) = L (α)∪L (β) L (α·β) = L (α)·L (β) L (α∗) = L (α)∗
SLIDE 15
Extended Regular Expressions
L (∅) = {} L (ε) = {[]} L (a) = {[a ]}
a ∈ Σ
L (α+β) = L (α)∪L (β) L (α·β) = L (α)·L (β) L (α∗) = L (α)∗ L (α∩β) = L (α)∩L (β) L (¬ α) = Σ∗ \L (α)
SLIDE 16
Π-Extended Regular Expressions
L (∅) = {} L (ε) = {[]} L (a) = {[a ]}
a ∈ Σ
L (α+β) = L (α)∪L (β) L (α·β) = L (α)·L (β) L (α∗) = L (α)∗ L (α∩β) = L (α)∩L (β) L (¬ α) = Σ∗ \L (α) L (Π α) = {
w | w ∈ L
(α)}
SLIDE 17 Π-Extended Regular Expressions
Ln(∅) = {} Ln(ε) = {[]} Ln(a) = {[a ]}
a ∈ Σn
Ln(α+β) = Ln(α)∪Ln(β) Ln(α·β) = Ln(α)·Ln(β) Ln(α∗) = Ln(α)∗ Ln(α∩β) = Ln(α)∩Ln(β) Ln(¬ α) = Σ∗
n \Ln(α)
Ln(Π α) = {
w | w ∈ Ln+1(α)}
SLIDE 18 Π-Extended Regular Expressions
Ln(∅) = {} Ln(ε) = {[]} Ln(a) = {[a ]}
a ∈ Σn
Ln(α+β) = Ln(α)∪Ln(β) Ln(α·β) = Ln(α)·Ln(β) Ln(α∗) = Ln(α)∗ Ln(α∩β) = Ln(α)∩Ln(β) Ln(¬ α) = Σ∗
n \Ln(α)
Ln(Π α) = {
w | w ∈ Ln+1(α)} Example Σn = {⊤, ⊥}n
⊤ ⊥ ⊥ ⊥ ⊤ ⊤ ⊥ ⊥ ⊤ ∈ Σ∗
3
SLIDE 19 Π-Extended Regular Expressions
Ln(∅) = {} Ln(ε) = {[]} Ln(a) = {[a ]}
a ∈ Σn
Ln(α+β) = Ln(α)∪Ln(β) Ln(α·β) = Ln(α)·Ln(β) Ln(α∗) = Ln(α)∗ Ln(α∩β) = Ln(α)∩Ln(β) Ln(¬ α) = Σ∗
n \Ln(α)
Ln(Π α) = {
w | w ∈ Ln+1(α)} Example Σn = {⊤, ⊥}n
⊤ ⊥ ⊥ ⊥ ⊤ ⊤ ⊥ ⊥ ⊤ ∈ Σ∗
2
SLIDE 20 Π-Extended Regular Expressions
Ln(∅) = {} Ln(ε) = {[]} Ln(a) = {[a ]}
a ∈ Σn
Ln(α+β) = Ln(α)∪Ln(β) Ln(α·β) = Ln(α)·Ln(β) Ln(α∗) = Ln(α)∗ Ln(α∩β) = Ln(α)∩Ln(β) Ln(¬ α) = Σ∗
n \Ln(α)
Ln(Π α) = {map π w | w ∈ Ln+1(α)} π : Σn+1 → Σn
Example Σn = {⊤, ⊥}n
⊤ ⊥ ⊥ ⊥ ⊤ ⊤ ⊥ ⊥ ⊤ ∈ Σ∗
2
π = tail π−1a = {⊤a, ⊥a}
SLIDE 21
Derivatives of Regular Expressions
Characteristic property Ln(Da(α)) = {w | aw ∈ Ln(α)}
SLIDE 22
Derivatives of Regular Expressions
Characteristic property Ln(Da(α)) = {w | aw ∈ Ln(α)}
Da(∅) = ∅ Da(ε) = ∅ Da(b) = if a = b then ε else ∅ Da(α+β) = Da(α)+Da(β) Da(α·β) = if ε ∈ L (α) then Da(α)·β+Da(β) else Da(α)·β Da(α∗) = Da(α)·α∗ Da(α∩β) = Da(α)∩Da(β) Da(¬ α) = ¬ Da(α)
SLIDE 23 Derivatives of Regular Expressions
Characteristic property Ln(Da(α)) = {w | aw ∈ Ln(α)}
Da(∅) = ∅ Da(ε) = ∅ Da(b) = if a = b then ε else ∅ Da(α+β) = Da(α)+Da(β) Da(α·β) = if ε ∈ L (α) then Da(α)·β+Da(β) else Da(α)·β Da(α∗) = Da(α)·α∗ Da(α∩β) = Da(α)∩Da(β) Da(¬ α) = ¬ Da(α) Da(Π α) = Π
Db(α)
SLIDE 24
DP by Example: a∗ ?
≡ ε+ a· a∗ for Σ = {a,b}
a∗
ε+ a· a∗
SLIDE 25
DP by Example: a∗ ?
≡ ε+ a· a∗ for Σ = {a,b}
a∗
ε+ a· a∗ ε· a∗ ∅+ε· a∗ Da
SLIDE 26
DP by Example: a∗ ?
≡ ε+ a· a∗ for Σ = {a,b}
a∗
ε+ a· a∗ ε· a∗ ∅+ε· a∗ ∅· a∗ ∅+∅· a∗ Da Db
SLIDE 27
DP by Example: a∗ ?
≡ ε+ a· a∗ for Σ = {a,b}
a∗
ε+ a· a∗ ε· a∗ ∅+ε· a∗ ∅· a∗ +ε· a∗ ∅+∅· a∗ +ε· a∗ ∅· a∗ ∅+∅· a∗ Da Da Db
SLIDE 28
DP by Example: a∗ ?
≡ ε+ a· a∗ for Σ = {a,b}
a∗
ε+ a· a∗ ε· a∗ ∅+ε· a∗ ∅· a∗ +ε· a∗ ∅+∅· a∗ +ε· a∗ ∅· a∗ +∅· a∗ +ε· a∗ ∅+∅· a∗ +∅· a∗ +ε· a∗ ∅· a∗ ∅+∅· a∗ Da Da Da Db
SLIDE 29
DP by Example: a∗ ?
≡ ε+ a· a∗ for Σ = {a,b}
a∗
ε+ a· a∗ ε· a∗ ∅+ε· a∗ ∅· a∗ +ε· a∗ ∅+∅· a∗ +ε· a∗ ∅· a∗ +∅· a∗ +ε· a∗ ∅+∅· a∗ +∅· a∗ +ε· a∗ ∅· a∗ ∅+∅· a∗ Da Da Da
ACI
Db
SLIDE 30
DP by Example: a∗ ?
≡ ε+ a· a∗ for Σ = {a,b}
a∗
ε+ a· a∗ ε· a∗ ∅+ε· a∗ ∅· a∗ +ε· a∗ ∅+∅· a∗ +ε· a∗ ∅· a∗ +∅· a∗ +ε· a∗ ∅+∅· a∗ +∅· a∗ +ε· a∗ ∅· a∗ ∅+∅· a∗ ∅· a∗ +∅· a∗ ∅+∅· a∗ +∅· a∗ Da Da Da
ACI
Db Db
SLIDE 31
DP by Example: a∗ ?
≡ ε+ a· a∗ for Σ = {a,b}
a∗
ε+ a· a∗ ε· a∗ ∅+ε· a∗ ∅· a∗ +ε· a∗ ∅+∅· a∗ +ε· a∗ ∅· a∗ +∅· a∗ +ε· a∗ ∅+∅· a∗ +∅· a∗ +ε· a∗ ∅· a∗ ∅+∅· a∗ ∅· a∗ +∅· a∗ ∅+∅· a∗ +∅· a∗ Da Da Da
ACI
Db Db
ACI
SLIDE 32
DP by Example: a∗ ?
≡ ε+ a· a∗ for Σ = {a,b}
a∗
ε+ a· a∗ ε· a∗ ∅+ε· a∗ ∅· a∗ +ε· a∗ ∅+∅· a∗ +ε· a∗ ∅· a∗ +∅· a∗ +ε· a∗ ∅+∅· a∗ +∅· a∗ +ε· a∗ ∅· a∗ ∅+∅· a∗ ∅· a∗ +∅· a∗ ∅+∅· a∗ +∅· a∗ Da Da Da
ACI
Db Db
ACI
Da Db
SLIDE 33
DP by Example: a∗ ?
≡ ε+ a· a∗ for Σ = {a,b}
a∗
ε+ a· a∗ ε· a∗ ∅+ε· a∗ ∅· a∗ +ε· a∗ ∅+∅· a∗ +ε· a∗ ∅· a∗ +∅· a∗ +ε· a∗ ∅+∅· a∗ +∅· a∗ +ε· a∗ ∅· a∗ ∅+∅· a∗ ∅· a∗ +∅· a∗ ∅+∅· a∗ +∅· a∗ ∅· a∗ +∅· a∗ +∅· a∗ ∅+∅· a∗ +∅· a∗ +∅· a∗ Da Da Da
ACI
Db Db Db
ACI
Da Db
SLIDE 34
DP by Example: a∗ ?
≡ ε+ a· a∗ for Σ = {a,b}
a∗
ε+ a· a∗ ε· a∗ ∅+ε· a∗ ∅· a∗ +ε· a∗ ∅+∅· a∗ +ε· a∗ ∅· a∗ +∅· a∗ +ε· a∗ ∅+∅· a∗ +∅· a∗ +ε· a∗ ∅· a∗ ∅+∅· a∗ ∅· a∗ +∅· a∗ ∅+∅· a∗ +∅· a∗ ∅· a∗ +∅· a∗ +∅· a∗ ∅+∅· a∗ +∅· a∗ +∅· a∗ Da Da Da
ACI
Db Db Db
ACI ACI
Da Db
SLIDE 35
DP by Example: a∗ ?
≡ ε+ a· a∗ for Σ = {a,b}
a∗
ε+ a· a∗ ε· a∗ ∅+ε· a∗ ∅· a∗ +ε· a∗ ∅+∅· a∗ +ε· a∗ ∅· a∗ +∅· a∗ +ε· a∗ ∅+∅· a∗ +∅· a∗ +ε· a∗ ∅· a∗ ∅+∅· a∗ ∅· a∗ +∅· a∗ ∅+∅· a∗ +∅· a∗ ∅· a∗ +∅· a∗ +∅· a∗ ∅+∅· a∗ +∅· a∗ +∅· a∗ Da Da Da
ACI
Db Db Db
ACI ACI
Da Db
SLIDE 36
DP by Example: a∗ ?
≡ ε+ a· a∗ for Σ = {a,b}
a∗
ε+ a· a∗ ε· a∗ ∅+ε· a∗ ∅· a∗ +ε· a∗ ∅+∅· a∗ +ε· a∗ ∅· a∗ ∅+∅· a∗ ∅· a∗ +∅· a∗ ∅+∅· a∗ +∅· a∗ Da Da Db Db Da Db
a∗ a∗
∅ ∅
EQ EQ EQ EQ
SLIDE 37 Related Work
JACM 1964 Brzozowski CONCUR 1998 Rutten
SLIDE 38 Related Work
JACM 1964 Brzozowski CONCUR 1998 Rutten
JFP 2009 Owens, Reppy, and Turon ICFP 2010 Fischer, Huch, and Wilke ICFP 2010 Danielsson ICFP 2011 Might, Darais, and Spiewak
SLIDE 39 Related Work
JACM 1964 Brzozowski CONCUR 1998 Rutten
JFP 2009 Owens, Reppy, and Turon ICFP 2010 Fischer, Huch, and Wilke ICFP 2010 Danielsson ICFP 2011 Might, Darais, and Spiewak
ITP 2010 Braibant and Pous JAR 2011 Krauss and Nipkow CPP 2011 Coquand and Siles ITP 2012 Asperti RAMiCS 2012 Moreira, Pereira, and de Sousa
SLIDE 40
Outline
Regular Expressions Equivalence MSO
SLIDE 41
MSO Formulas
formula
=
Qa(x)
|
x < y
|
x ∈ X
| ¬ formula |
formula ∨ formula
|
formula ∧ formula
| ∃x.formula | ∃X.formula
SLIDE 42
MSO Formulas
formula
=
Qa(x)
|
x < y
|
x ∈ X
| ¬ formula |
formula ∨ formula
|
formula ∧ formula
| ∃x.formula | ∃X.formula (w,I) Qa(x) ⇔ w !! I x = a
SLIDE 43
MSO Formulas
formula
=
Qa(x)
|
x < y
|
x ∈ X
| ¬ formula |
formula ∨ formula
|
formula ∧ formula
| ∃x.formula | ∃X.formula (w,I) Qa(x) ⇔ w !! I x = a LM2L(ϕ) = {enc(w,I) | (w,I) ϕ}
SLIDE 44
Representation of Interpretations as Words
(w = aba, I = {x → 0, X → {1,2}, y → 2})
SLIDE 45
Representation of Interpretations as Words
(w = aba, I = {x → 0, X → {1,2}, y → 2})
x X y
a b a
⊤ ⊥ ⊥ ⊥ ⊤ ⊤ ⊥ ⊥ ⊤
enc
Σn =Σ×{⊤, ⊥}n
SLIDE 46
Representation of Interpretations as Words
(w = aba, I = {x → 0, X → {1,2}, y → 2})
x X y
a b a
⊤ ⊥ ⊥ ⊥ ⊤ ⊤ ⊥ ⊥ ⊤
enc
Σn =Σ×{⊤, ⊥}n π (a, bs) = (a, tail bs) π−1(a, bs) = {(a, ⊤bs), (a, ⊥bs)}
SLIDE 47 From MSO Formulas to Regular Expressions
mkRE n (Qa(m)) =
Σ∗
n ·
a
⊤/⊥
⊤
⊤/⊥
·Σ∗
n ∩ WF n {m}
SLIDE 48 From MSO Formulas to Regular Expressions
mkRE n (Qa(m)) =
Σ∗
n ·
a
⊤/⊥
⊤
⊤/⊥
·Σ∗
n ∩ WF n {m}
. . .
mkRE n (ϕ1 ∨ϕ2) = (mkRE n ϕ1 + mkRE n ϕ2) ∩ WF n (FV (ϕ1 ∨ϕ2))
SLIDE 49 From MSO Formulas to Regular Expressions
mkRE n (Qa(m)) =
Σ∗
n ·
a
⊤/⊥
⊤
⊤/⊥
·Σ∗
n ∩ WF n {m}
. . .
mkRE n (ϕ1 ∨ϕ2) = (mkRE n ϕ1 + mkRE n ϕ2) ∩ WF n (FV (ϕ1 ∨ϕ2))
. . .
mkRE n (∃x.ϕ) =
Π (mkRE (n + 1) ϕ)
mkRE n (∃X.ϕ) =
Π (mkRE (n + 1) ϕ)
SLIDE 50 From MSO Formulas to Regular Expressions
mkRE n (Qa(m)) =
Σ∗
n ·
a
⊤/⊥
⊤
⊤/⊥
·Σ∗
n
. . .
mkRE n (ϕ1 ∨ϕ2) = mkRE n ϕ1 + mkRE n ϕ2
. . .
mkRE n (∃x.ϕ) =
Π (mkRE (n + 1) ϕ ∩ WF (n + 1) {x})
mkRE n (∃X.ϕ) =
Π (mkRE (n + 1) ϕ)
SLIDE 51 From MSO Formulas to Regular Expressions
mkRE n (Qa(m)) =
Σ∗
n ·
a
⊤/⊥
⊤
⊤/⊥
·Σ∗
n
. . .
mkRE n (ϕ1 ∨ϕ2) = mkRE n ϕ1 + mkRE n ϕ2
. . .
mkRE n (∃x.ϕ) =
Π (mkRE (n + 1) ϕ ∩ WF (n + 1) {x})
mkRE n (∃X.ϕ) =
Π (mkRE (n + 1) ϕ)
Theorem
LM2L(ϕ) = Ln(mkRE n ϕ ∩ WF n (FV ϕ))−{ε}
SLIDE 52 Head to Head
M2L WS1S Regular Expressions Finite Automata MONA
λ → ∀
=
Isabelle
β α
SLIDE 53 Head to Head
M2L WS1S Regular Expressions Finite Automata MONA
λ → ∀
=
Isabelle
β α
efficient
SLIDE 54 Head to Head
M2L WS1S Regular Expressions Finite Automata MONA
λ → ∀
=
Isabelle
β α
efficient unverified
SLIDE 55 Head to Head
M2L WS1S Regular Expressions Finite Automata MONA
λ → ∀
=
Isabelle
β α
efficient unverified 40 kLOC
SLIDE 56 Head to Head
M2L WS1S Regular Expressions Finite Automata MONA
λ → ∀
=
Isabelle
β α
efficient unverified 40 kLOC 40 kLOC of C/C++
SLIDE 57 Head to Head
M2L WS1S Regular Expressions Finite Automata MONA
λ → ∀
=
Isabelle
β α
efficient unverified 40 kLOC 40 kLOC of C/C++ inefficient
SLIDE 58 Head to Head
M2L WS1S Regular Expressions Finite Automata MONA
λ → ∀
=
Isabelle
β α
efficient unverified 40 kLOC 40 kLOC of C/C++ inefficient simple: 350 LOC of
Isabelle/HOL
SLIDE 59 Head to Head
M2L WS1S Regular Expressions Finite Automata MONA
λ → ∀
=
Isabelle
β α
efficient unverified 40 kLOC 40 kLOC of C/C++ inefficient simple: 350 LOC of
Isabelle/HOL
functional: 2,5 kLOC of
generated Haskell
SLIDE 60 Head to Head
M2L WS1S Regular Expressions Finite Automata MONA
λ → ∀
=
Isabelle
β α
efficient unverified 40 kLOC 40 kLOC of C/C++ inefficient simple: 350 LOC of
Isabelle/HOL
functional: 2,5 kLOC of
generated Haskell
sound, complete, and
terminating: 5 kLOP
SLIDE 61 Head to Head
M2L WS1S Regular Expressions Finite Automata MONA
λ → ∀
=
Isabelle
β α
efficient unverified 40 kLOC 40 kLOC of C/C++ inefficient simple: 350 LOC of
Isabelle/HOL
functional: 2,5 kLOC of
generated Haskell
sound, complete, and
terminating: 5 kLOP
Thanks for listening!
SLIDE 62 Verified Decision Procedures
for
Monadic Second-Order Logic on Strings
Functional Pearl
Dmitriy Traytel Tobias Nipkow
λ → ∀
=
Isabelle
β α