On Higher-Order Program Verification and Two Notions of - - PowerPoint PPT Presentation

on higher order program verification and two notions of
SMART_READER_LITE
LIVE PREVIEW

On Higher-Order Program Verification and Two Notions of - - PowerPoint PPT Presentation

On Higher-Order Program Verification and Two Notions of Higher-Order Model Checking Naoki Kobayashi University of Tokyo Summaries of papers from POPL09, POPL17 (joint work with Etienne Lozes, Florian Bruse), and more recent work (joint work


slide-1
SLIDE 1

On Higher-Order Program Verification and Two Notions of Higher-Order Model Checking

Naoki Kobayashi

University of Tokyo

Summaries of papers from POPL09, POPL17 (joint work with Etienne Lozes, Florian Bruse), and more recent work (joint work with Takeshi Tsukada, and Keiichi Watanabe)

slide-2
SLIDE 2

Two Notions of Higher-Order Model Checking

Models Logic finite state model checking finite state systems modal µ-calculus

slide-3
SLIDE 3

Two Notions of Higher-Order Model Checking

Models Logic finite state model checking finite state systems modal µ-calculus HORS model checking

[Knapik+ 01; Ong 06]

higher-order recursion schemes (HORS) modal µ-calculus

Useful for modeling a certain class of infinite state systems (such as higher-order functional programs)

slide-4
SLIDE 4

Models Logic finite state model checking finite state systems modal µ-calculus HORS model checking

[Knapik+ 01; Ong 06]

higher-order recursion schemes (HORS) modal µ-calculus HFL model checking

[Viswanathan& Viswanathan 04]

finite state systems higher-order modal fixpoint logic (HFL)

Useful for describing non-regular properties

Two Notions of Higher-Order Model Checking

slide-5
SLIDE 5

Models Logic finite state model checking finite state systems modal µ-calculus HORS model checking

[Knapik+ 01; Ong 06]

higher-order recursion schemes (HORS) modal µ-calculus HFL model checking

[Viswanathan& Viswanathan 04]

finite state systems higher-order modal fixpoint logic (HFL) Applied to verification of higher-order programs [K09][K+11]... verification of concurrent systems [VV 04][Lange+ 14]

Two Notions of Higher-Order Model Checking

slide-6
SLIDE 6

This Talk

Higher-order program verification HORS model checking HFL model checking

[K, POPL09]

[K&Lozes&Bruse, POPL17] [K&Tsukada&Watanabe, draft]

slide-7
SLIDE 7

Outline

 Reviews of HORS model checking and HFL model checking

– HORS model checking – HFL model checking

 From program verification to HORS model checking  Conversion between HORS/HFL model checking  From program verification to HFL model checking  Conclusion

slide-8
SLIDE 8

Higher-Order Recursion Scheme (HORS)

Grammar for generating an infinite tree

Order-0 HORS (regular tree grammar) S → a c B B → b S

S → a c B B → b S

slide-9
SLIDE 9

Higher-Order Recursion Scheme (HORS)

Grammar for generating an infinite tree

Order-0 HORS (regular tree grammar) S → a c B B → b S → a c B c b → a S c b → a a c B

→ ... →

c b a c b a c b a S

S → a c B B → b S

slide-10
SLIDE 10

Higher-Order Recursion Scheme (HORS)

Grammar for generating an infinite tree

Order-1 HORS S → A c A x → a x (A (b x)) S: o, A: o→ o

slide-11
SLIDE 11

Higher-Order Recursion Scheme (HORS)

Grammar for generating an infinite tree

Order-1 HORS S → A c A x → a x (A (b x)) S: o, A: o→ o →A c

c A(b c)

→ a

→ ... →

c a → a b A(b(b c)) c c a a b c a b b c a b b b c ... Tree whose paths are labeled by am+1 bm c S

slide-12
SLIDE 12

Higher-Order Recursion Scheme (HORS)

Grammar for generating an infinite tree

Order-1 HORS S → A c A x → a x (A (b x)) S: o, A: o→ o

HORS ≈ Call-by-name simply-typed λ-calculus + recursion, tree constructors

slide-13
SLIDE 13

HORS Model Checking

e.g.

  • Does every finite path of Tree(G) end with “c”?
  • Does “a” occur below “b” in Tree(G)?

Given G: HORS A: alternating parity tree automaton (APT) (a formula of modal µ-calculus or MSO), does A accept Tree(G)? k-EXPTIME-complete [Ong, LICS06] (for order-k HORS) but practical algorithms exist

p(x) 2 .. 2 2

slide-14
SLIDE 14

HORS Model Checking as Generalization

  • f Finite State/Pushdown Model Checking

order-0 ≈ finite state model checking order-1 ≈ pushdown model checking

c b a c b a c b a

infinite tree

a c b

transition system

Does “a”

  • ccur

below “b”? Is there a transition sequence in which “a” occurs after “b”?

slide-15
SLIDE 15

HORS Model Checking as Generalization

  • f Finite State/Pushdown Model Checking

order-0 ≈ finite state model checking order-1 ≈ pushdown model checking infinite tree

(infinite-state) transition system

Does “a”

  • ccur

below “b”? Is there a transition sequence in which “a” occurs after “b”?

c a a b c a b b c a b b b ... a c b a b a b a

... ...

slide-16
SLIDE 16

Outline

 Reviews of HORS model checking and HFL model checking

– HORS model checking – HFL model checking

 From program verification to HORS model checking  Conversion between HORS/HFL model checking  From program verification to HFL model checking  Conclusion

slide-17
SLIDE 17

Higher-Order Modal Fixpoint Logic (HFL) [Viswanathan&Viswanathan 04]

 Higher-order extension of the modal µ-calculus ϕ ::= true ϕ1 ∧ ϕ2 ϕ1 ∨ ϕ2 [a]ϕ ϕ must hold after a <a>ϕ ϕ may hold after a X propositional variable µX.ϕ least fixpoint νX.ϕ greatest fixpoint

slide-18
SLIDE 18

Higher-Order Modal Fixpoint Logic (HFL) [Viswanathan&Viswanathan 04]

 Higher-order extension of the modal µ-calculus ϕ ::= true ϕ1 ∧ ϕ2 ϕ1 ∨ ϕ2 [a]ϕ ϕ must hold after a <a>ϕ ϕ may hold after a X predicate variable µXκ.ϕ least fixpoint νXκ.ϕ greatest fixpoint λXκ. ϕ (higher-order) predicate ϕ1 ϕ2 application κ ::=  | κ1→κ2

slide-19
SLIDE 19

Selected Typing Rules for HFL

Γ, X:κ ┝ X:κ Γ, X:κ1 ┝ ϕ:κ2

−−−−−−−−−−−−−−−−−− Γ┝ λX.ϕ: κ1 → κ2

Γ┝ ϕ: κ1 → κ2 Γ┝ ψ: κ1

−−−−−−−−−−−−−−−−−−−−−−−− Γ┝ ϕ ψ: κ2

Γ, X:κ ┝ ϕ:κ

−−−−−−−−−−−−−−−−−− Γ┝ µX.ϕ: κ

Γ ┝ true:  Γ ┝ ϕ: 

−−−−−−−−−−−−−−−−−− Γ┝ [a]ϕ: 

Γ┝ ϕ:  Γ┝ ψ: 

−−−−−−−−−−−−−−−−−−−−−−−− Γ┝ ϕ ∧ψ: 

slide-20
SLIDE 20

Semantics

[ϕ]I: the set of states that satisfy ϕ L |=ϕ  sinit∈[ϕ]∅ (sinit: initial state of L) [true]I = States [ϕ∧ψ]I= [ϕ]I ∩ [ψ]I [ϕ∨ψ]I= [ϕ]I ∪ [ψ]I [ [α] ϕ ]I= {s | ∀t.(s →α t implies t∈ [ϕ]I)} [<α> ϕ ]I = {s | ∃t.(s →α t and t∈ [ϕ]I)} [µXκ.ϕ]I = lfp(λx∈[κ].[ϕ]I{X=x} ) [νXκ.ϕ]I = gfp (λx∈[κ].[ϕ]I{X=x} ) [λXκ.ϕ]I = λx∈[κ].[ϕ]I{X=x} [ϕ ψ]I= [ϕ]I [ψ]I [X]I = I(X)

[] = 2States [κ1→κ2] = {f∈ [κ1] → [κ2] | f: monotonic}

slide-21
SLIDE 21

Example

(µF→→.λX.λY. (X∧Y) ∨ F (<a>X) (<b>Y)) P Q

= (P∧Q) ∨ (µF→→.λX.λY. (X∧Y) ∨ F(<a>X)(<b>Y)) (<a>P)(<b>Q) = (P∧Q) ∨ (<a>P∧<b>Q) ∨ (<a><a>P∧<b><b>Q) ∨ ... For some n, <a>n P and <b>n Q hold P Q an bn

slide-22
SLIDE 22

HFL Model Checking

e.g. L |= ϕ for:

L:

Given L: (finite-state) labeled transition system ϕ: HFL formula,

does L satisfy ϕ?

a b d c

ϕ: (µF.λX.λY. (X∧Y)

∨ F (<a>X) (<b>Y)) (<c>true) (<d>true)

slide-23
SLIDE 23

HES (Hierarchical Equation Systems) Representation of HFL Formulas

X1 =α1 ϕ1; ...; Xn =αn ϕn (αi∈ {µ, ν} ) Example: HFL: νX.µY.(<a>X ∨ <b>Y) (there exists a path (b*a)ω ) HES: X=ν Y; Y=µ <a>X ∨ <b>Y

slide-24
SLIDE 24

HORS vs HFL model checking

Model Spec. complexity Applications HORS model checking HORS APT

k-EXPTIME complete (for order-k HORS) Automated verification of functional programs [K 09][K+11]...

HFL model checking LTS HFL

k-EXPTIME complete (for order-k HFL) Assume-guarantee reasoning [VV 04] Process equivalence checking [Lange+ 14]

APT: alternating parity tree automaton LTS: finite-state labeled transition system

slide-25
SLIDE 25

This Talk

Higher-order program verification HORS model checking HFL model checking

[K, POPL09]

[K&Lozes&Bruse, POPL17] [K&Tsukada&Watanabe, draft]

slide-26
SLIDE 26

This Talk

Higher-order program verification HORS model checking Tree(G)|= ϕ? HFL model checking

[K, POPL09]

[K&Lozes&Bruse, POPL17] [K&Tsukada&Watanabe, draft]

slide-27
SLIDE 27

From Program Verification to HORS Model Checking

[K. POPL 2009] Program Transformation Higher-order program + specification (on events or

  • utput)

HORS G

(describing all event sequences

  • r outputs)

+

Tree property ϕ, describing valid event sequences

  • r outputs

HORS Model Checking

slide-28
SLIDE 28

From Program Verification to Model Checking:

Example

let f x = if ∗ then close(x) else (read(x); f x) in let y = open “foo” in f (y)

c + + c + c ... r r r

  

Is the file “foo” accessed according to read* close? Is each path of the tree labeled by r*c?

F x k → + (c k) (r(F x k)) S → F d 

slide-29
SLIDE 29

c + + c + c ... r r r

  

From Program Verification to Model Checking:

Example

F x k → + (c k) (r(F x k)) S → F d 

Is the file “foo” accessed according to read* close? Is each path of the tree labeled by r*c? CPS Transformation! continuation parameter, expressing how “foo” is accessed after the call returns

let f x = if ∗ then close(x) else (read(x); f x) in let y = open “foo” in f (y)

slide-30
SLIDE 30

c + + c + c ... r r r

  

From Program Verification to Model Checking:

Example

F x k → + (c k) (r(F x k)) S → F d 

Is the file “foo” accessed according to read* close? Is each path of the tree labeled by r*c? CPS Transformation!

let f x = if ∗ then close(x) else (read(x); f x) in let y = open “foo” in f (y)

slide-31
SLIDE 31

c + + c + c ... r r r

  

From Program Verification to Model Checking:

Example

F x k → + (c k) (r(F x k)) S → F d 

Is the file “foo” accessed according to read* close? Is each path of the tree labeled by r*c? CPS Transformation!

let f x = if ∗ then close(x) else (read(x); f x) in let y = open “foo” in f (y)

slide-32
SLIDE 32

c + + c + c ... r r r

  

From Program Verification to Model Checking:

Example

F x k → + (c k) (r(F x k)) S → F d 

Is the file “foo” accessed according to read* close? Is each path of the tree labeled by r*c? CPS Transformation!

let f x = if ∗ then close(x) else (read(x); f x) in let y = open “foo” in f (y)

slide-33
SLIDE 33

From Program Verification to Model Checking:

Example

let f(x) = if ∗ then close(x) else (read(x); f x) in let y = open “foo” in f (y)

Is the file “foo” accessed according to read* close? Is each path of the tree labeled by r*c?

F x k → + (c k) (r(F x k)) S → F d  S

slide-34
SLIDE 34

From Program Verification to Model Checking:

Example

let f(x) = if ∗ then close(x) else (read(x); f x) in let y = open “foo” in f (y)

Is the file “foo” accessed according to read* close? Is each path of the tree labeled by r*c?

F x k → + (c k) (r(F x k)) S → F d  F d 

slide-35
SLIDE 35

From Program Verification to Model Checking:

Example

let f(x) = if ∗ then close(x) else (read(x); f x) in let y = open “foo” in f (y)

Is the file “foo” accessed according to read* close? Is each path of the tree labeled by r*c?

F x k → + (c k) (r(F x k)) S → F d  F d  + c

r

slide-36
SLIDE 36

From Program Verification to Model Checking:

Example

let f(x) = if ∗ then close(x) else (read(x); f x) in let y = open “foo” in f (y)

Is the file “foo” accessed according to read* close? Is each path of the tree labeled by r*c?

F x k → + (c k) (r(F x k)) S → F d  + c

r + F d  c

r

slide-37
SLIDE 37

From Program Verification to Model Checking:

Example

let f(x) = if ∗ then close(x) else (read(x); f x) in let y = open “foo” in f (y) c + + c + c ... r r r

  

Is the file “foo” accessed according to read* close? Is each path of the tree labeled by r*c?

F x k → + (c k) (r(F x k)) S → F d 

slide-38
SLIDE 38

Tool demonstration: MoCHi

[K&Sato&Unno, 2011]

(a software model checker for a subset of functional programming language OCaml)

slide-39
SLIDE 39

HORS vs HFL model checking

Higher-order program verification HORS model checking Tree(G)|= A? HFL model checking L |= ϕ?

[K, POPL09]

[K&Lozes&Bruse, POPL17] [K&Tsukada&Watanabe, draft]

slide-40
SLIDE 40

From HORS to HFL model checking

Input:

– HORS G – Parity tree automaton A (with largest priority p)

Output:

– LTS LA – HFL formula ϕG,p such that Tree(G) |= A iff LA |= ϕG,p

Intuition:

  • LA simulates the transitions of A
  • ϕG,p describes “LA has transitions corresponding

to an accepting run of A over Tree(G)”

slide-41
SLIDE 41

From HORS to HFL model checking

Input:

– HORS G – Parity tree automaton A (with largest priority p)

Output:

– LTS LA – HFL formula ϕG,p such that Tree(G) |= A iff LA |= ϕG,p

Intuition:

  • LA simulates the transitions of A
  • ϕG,p describes “LA has transitions corresponding

to an accepting run of A over Tree(G)”

slide-42
SLIDE 42

Construction of LA

(non-deterministic case; see the paper for the case of APT)

A: q0 →a q1 q0 q0 →b q1 q1 →b q1 q0 →c q1 →c

Ω(q0)=0 Ω(q1)=1

LA:

q0 q1 [q1 q0] [q1] [ ] a0 b0 b1 c0 c1 2 1 1

slide-43
SLIDE 43

Construction of LA

(non-deterministic case; see the paper for the case of APT)

A: q0 →a q1 q0 q0 →b q1 q1 →b q1 q0 →c q1 →c

Ω(q0)=0 Ω(q1)=1

LA:

q0 q1 [q1 q0] [q1] [ ] a0 b0 b1 c0 c1 2 1 1 The states of LA consist of:

  • states of A and
  • r.h.s. of

transition rules

slide-44
SLIDE 44

Construction of LA

(non-deterministic case; see the paper for the case of APT)

A: q0 →a q1 q0 q0 →b q1 q1 →b q1 q0 →c q1 →c

Ω(q0)=0 Ω(q1)=1

LA:

q0 q1 [q1 q0] [q1] [ ] a0 b0 b1 c0 c1 2 1 1

A transition label is an input symbol annotated with a priority; or ...

slide-45
SLIDE 45

Construction of LA

(non-deterministic case; see the paper for the case of APT)

A: q0 →a q1 q0 q0 →b q1 q1 →b q1 q0 →c q1 →c

Ω(q0)=0 Ω(q1)=1

LA:

q0 q1 [q1 q0] [q1] [ ] a0 b0 b1 c0 c1 2 1 1

A transition label is ...; or a number to identify the visited child

slide-46
SLIDE 46

Outline

 Reviews of HORS model checking and HFL model checking  From HORS to HFL model checking

– construction of LA – construction of ϕG,p

  • case p=0
  • general case

 From HFL to HORS model checking  Type system for HFL model checking  Conclusion

slide-47
SLIDE 47

From trees to HFL formulas

ϕa c (b c) = <a0> “can visit 1st and 2nd children with states satisfying ϕc and ϕb c respectively” = <a0>(<1>ϕc ∧<2>ϕb c) = <a0>(H2 ϕc ϕb c) (Hn X1 ... Xn = <1>X1∧...<n>Xn)

ϕT: “the current state has transitions corresponding to an accepting run for T”

q0 q1 [q1 q0] [q1] [ε] a0 b0 b0 c0 c0 2 1 1 def

slide-48
SLIDE 48

From trees to HFL formulas

ϕa c (b c) = <a0> “can visit 1st and 2nd children with states satisfying ϕc and ϕb c respectively” = <a0>(<1>ϕc ∧<2>ϕb c) = <a0>(H2 ϕc ϕb c) = <a0>(H2 (<c0>H0) (<b0>H1 (<c0>H0))) (Hn X1 ... Xn = <1>X1∧...<n>Xn)

ϕT: “the current state has transitions corresponding to an accepting run for T”

q0 q1 [q1 q0] [q1] [ε] a0 b0 b0 c0 c0 2 1 1 def

slide-49
SLIDE 49

From HORS to HFL

HORS G S → F c F x → a x (F (b x)) ϕG,0 S =ν F (<c0>H0) F x =ν <a0>(H2 x (F(<b0>(H1 x))) A: q0 →a q1 q0 q0 →b q1 q1 →b q1 q0 →c q1 →c LA

q0 q1 [q1 q0] [q1] [ ] a0 b0 b0 c0 c0 2 1 1

slide-50
SLIDE 50

Outline

 Reviews of HORS model checking and HFL model checking  From HORS to HFL model checking

– construction of LA – construction of ϕG,p

  • case p=0
  • general case

 From HFL to HORS model checking  Type system for HFL model checking  Conclusion

slide-51
SLIDE 51

Difference from the special case

 Replicate each non-terminal/argument for each priority (to translate parity condition to a proper nesting of least/greatest fixpoints) HORS G: S → F c F x → a x (F (b x)) HFL ϕG,1 S1 =µ F0 (<c0>H0) (<c1>H0); F1 x0 x1 =µ <a0>(H2 x1 x1 (F0(<b1>(H1 x1 x1))) (F1(<b1>H1 x1 x1)); S0 =ν F0 (<c0>H0) (<c1>H0); F0 x0 x1 =ν ...

slide-52
SLIDE 52

Correctness of Translation

Theorem: Tree(G) |= A if and only if LA |= ϕG,p

  • rder(LA)=order(G)

|LA| is polynomial in |A| |ϕG,p| is polynomial in |G|, p

slide-53
SLIDE 53

HORS vs HFL model checking

Higher-order program verification HORS model checking Tree(G)|= A? HFL model checking L |= ϕ?

[K, POPL09]

[K&Lozes&Bruse, POPL17] [K&Tsukada&Watanabe, draft]

slide-54
SLIDE 54

From HFL to HORS model checking

 Input:

– LTS L – HFL formula ϕ

 Output:

– HORS Gϕ,c – APT AL such that L |= ϕ iff Gϕ,c |= AL for sufficiently large c Intuition:

  • Gϕ,c generates tree representation of the formula

equivalent to ϕ, obtained by unfolding fixpoint formulas sufficiently many times

  • AL accepts trees representing valid formulas
slide-55
SLIDE 55

HFL-to-HORS Translation: Overview

F X =ν ϕ Remove fixpoint operators by finite unfoldings (cf. Kleene fixpoint theorem) F(c) X=[F(c-1)/F]ϕ ;...;F(1) X=[F(0)/F] ϕ;F(0) X=true Convert it to HORS, which generates the tree representation of the formula F(c) X→[F(c-1)/F]ϕ’;...; F(1) X→[F(0)/F] ϕ’; F(0) X→true F m X→ if (Zero? m) true ([F (m-1) /F]ϕ’) Parameterize F by a number, and implement numbers (up to ) as functions (cf. [Jones01])

n 2 .. 2 2

slide-56
SLIDE 56

Correctness of Translation

Theorem: L |= ϕ if and only if Gϕ,|L| |= AL

  • rder(Gϕ,|L|) = order(L)

|Gϕ,|L|| is polynomial in |ϕ| and |L| |AL| is polynomial in |L|

slide-57
SLIDE 57

HORS vs HFL model checking

Higher-order program verification P |= ψ ? HORS model checking Tree(G)|= A? HFL model checking L |= ϕ?

[K, POPL09]

[K&Lozes&Bruse, POPL17] [K&Tsukada&Watanabe, draft]

slide-58
SLIDE 58

HORS vs HFL model checking

Higher-order program verification P |= ψ ? HORS model checking Tree(G)|= A? HFL model checking L |= ϕ?

[K, POPL09]

[K&Lozes&Bruse, POPL17] [K&Tsukada&Watanabe, draft]

“The behavior of P is correct.”

slide-59
SLIDE 59

From Program Verification to HFL Model Checking: Example

let f x = if ∗ then close(x) else (read(x); f x) in let y = open “foo” in f (y)

Is the file “foo” accessed according to read* close?

F x k =ν <close>k ∧ (<read>(F x k)) S =ν F true (<end>true)

Does LTS: satisfy the formula S? s0 s1

close read end

slide-60
SLIDE 60

From Program Verification to HORS Model Checking let f x = if ∗ then close(x) else (read(x); f x) in let y = open “foo” in f (y)

c + + c + c ... r r r

  

Is the file “foo” accessed according to read* close? Is each path of the tree labeled by r*c?

F x k → + (c k) (r(F x k)) S → F d 

slide-61
SLIDE 61

From Program Verification to extended HFL Model Checking

let f n x = if n≤0 then close(x) else (read(x); f (n-1) x) in let y = open “foo” in f m (y)

Is the file “foo” accessed according to read* close?

F n x k =µ (n≤0 ⇒<close>k) ∧ (¬n≤0 ⇒ <read>(F (n-1) x k)) S =µ F m true (<end>true)

Does LTS: satisfy the formula S? s0 s1

close read end

slide-62
SLIDE 62

From Program Verification to extended HFL Model Checking

let f n x = if n≤0 then close(x) else (read(x); f (n-1) x) in let y = open “foo” in f m (y)

Is the file “foo” accessed according to read* close?

F n x k =µ (n≤0 ⇒<close>k) ∧ (¬n≤0 ⇒ <read>(F (n-1) x k)) S =µ F m true (<end>true)

Does LTS: satisfy the formula S? s0 s1

close read end

This approach provides a sound and complete logical characterization of:

  • reachability problem
  • termination problem
  • linear/branching-time temporal properties

for higher-order functional programs with infinite data

slide-63
SLIDE 63

From Termination Verification to extended HFL Model Checking

let sum n k = if n≤0 then k 0 else sum (n-1) λr.k(r+n) in sum m (λx.())

Termination: (µ sum.λn.λk. (n≤0⇒k 0)∧ (n>0⇒sum(n-1) λr.k(r+n))) m (λx.true) Non-Termination: (ν sum.λn.λk. (n≤0∧k 0)∨ (n>0∧ sum(n-1) λr.k(r+n))) m (λx.false)

slide-64
SLIDE 64

Related Work

 From HORS to HFL model checking:

– Reduction from HORS model checking to nested least/greatest fixedpoint computation

[Salvati&Walukiewicz, CSL15]

 From program verification to HFL model checking:

– program verification via:

  • (Constraint) Horn clauses

[Bjorner, Gurfinkel, McMillan, Rybalchenko, Unno, ...]

  • Higher-order constraint Horn clauses

[Burn, Ong&Ramsay 2017] Can be viewed as a restriction to the fragment

  • f HFL without fixpoint alternation and modal operators
slide-65
SLIDE 65

Conclusion

 Revealed close relationships among:

– program verification – HFL/HORS model checking

 Reduction from program verification to HFL model checking provides a new, uniform approach to verification of infinite-data higher-order programs  Future work:

– development of extended HFL model checkers (cf. recent integration of Horn clause solvers into SMT solvers)