Post on 12-Jan-2016
Accelerating lemma learning using joins LPAR 2008 – Doha, Qatar
Nikolaj Bjørner, Leonardo de MouraMicrosoft Research
Bruno DutertreSRI International
Satisfiability Modulo Theories (SMT)
Accelerating lemma learning using joins
SAT
Theories
SMT
ArithmeticBit-vectorsArrays…
Satisfiability Modulo Theories (SMT)
Accelerating lemma learning using joins
)1()2),3,,(((2 xyfyxawritereadfyx
Arithmetic
Satisfiability Modulo Theories (SMT)
Accelerating lemma learning using joins
)1()2),3,,(((2 xyfyxawritereadfyx
ArithmeticArray Theory
Satisfiability Modulo Theories (SMT)
Accelerating lemma learning using joins
)1()2),3,,(((2 xyfyxawritereadfyx
ArithmeticArray TheoryUninterpreted
Functions
SMT: Some Applications @ Microsoft
Accelerating lemma learning using joins
VCC
Hyper-V Terminator T-2
NModel
HAVOC
F7SAGE
Vigilante
SMT@Microsoft: Solver
Accelerating lemma learning using joins
Z3 is a new solver developed at Microsoft Research.Development/Research driven by internal customers.Free for academic research.Interfaces:
http://research.microsoft.com/projects/z3
Z3
TextC/C++.NET
OCaml
SMT = DPLL + Theories
Guessing (case-splitting)Deducing (BCP + Theory propagation)Conflict resolution Backtracking + Lemma
Accelerating lemma learning using joins
a=b f(a)=f(b), a < 5 a > 10, a > 6 b = 2
Most SMT solvers use only the literals from the given
formula!
Is SMT fast???
Accelerating lemma learning using joins
a[0] = 0if (c1) { a[1] = 0; } else { a[1] = 1; }…if (cn) { a[n] = 0; } else { a[n] = 1; }assert(a[0] == 0);
Is SMT fast???
Accelerating lemma learning using joins
a1= write(a0, 0, 0)(c1 a2 = write(a1,1,0))(c1 a2 = write(a1,1,1))…(cn an+1 = write(an,n,0))(cn an+1 = write(an,n,1))read(an+1,0) 0 It takes O(2n) time if
lemmas do not use new literals!
“Diamonds are eternal”
Accelerating lemma learning using joins
SP(E) calculus
Accelerating lemma learning using joins
Very slow in practice!
It can solve “diamonds” in polynomial time.
DPLL (E + )
New literals can be createdCase-splitting (guessing)Lemma Learning
Any SP(E) inference can be simulated by DPLL(E+)
Accelerating lemma learning using joins
How do we create ?
Accelerating lemma learning using joins
Look ahead
Accelerating lemma learning using joins
S
p
p
l
New literal
l
Look ahead
Accelerating lemma learning using joins
SS,
l
“The plan”
Accelerating lemma learning using joins
Define language L (of new literals). Examples:(Bounds) x > 5(Equality) x = y(Difference) x – y < 3
Theory propagation for LJoin operator for L
S
p
p
S1
S2
S1 S2
Join: Examples (Bounds)
Accelerating lemma learning using joins
p q, q x>5, p x>y, y > 4
Join: Examples (Bounds)
Accelerating lemma learning using joins
p
{ x > 5 }
p q, q x>5, p x>y, y > 4
Join: Examples (Bounds)
Accelerating lemma learning using joins
p
{ x > 5 }
p
{ x > 4 }
p q, q x>5, p x>y, y > 4
Join: Examples (Bounds)
Accelerating lemma learning using joins
{ x > 5 } { x > 4 } = {x > 4}
p q, q x>5, p x>y, y > 4
p
{ x > 5 }
p
{ x > 4 }
Join: Examples (Equalities)
Accelerating lemma learning using joins
{ x = y, y = z, x = z } { x = z, z = w, x = w } = {x = z}
Join: Examples (Difference constraints)
Accelerating lemma learning using joins
{ x - y < 3 } { x - y < 2, y - z < 1, x - z < 3} = {x - y < 3}
Join
Accelerating lemma learning using joins
Other examples:Linear arithmetic: polyhedral.Array partial equalities: a =i b (forall x: x = i a[x] = b[x])
k-look ahead.
Conclusion
Accelerating lemma learning using joins
SMT solvers are fast, but they may choke in simple formulas.DPLL(join) = SMT + “Abstract Interpretation”.Future work: new literals during conflict resolution.http://research.microsoft.com/projects/z3
Thank You!