Synthesis of Domain Specific Encoders for Bit- Vector Solvers
Jeevana Priya Inala
with Rohit Singh, Armando Solar-Lezama
Synthesis of Domain Specific Encoders for Bit- Vector Solvers - - PowerPoint PPT Presentation
Synthesis of Domain Specific Encoders for Bit- Vector Solvers Jeevana Priya Inala with Rohit Singh, Armando Solar-Lezama Appears in SAT16 High-level constraint to CNF clauses SMT solver SAT solver High-level constraint CNF clauses msb
Jeevana Priya Inala
with Rohit Singh, Armando Solar-Lezama
SMT solver High-level constraint SAT solver CNF clauses
x y
lsb msb
ite
>
….
Is this the “best” encoding?
y1 ∨ x1 ∨ t1 y1 ∨ x1 ∨ t1 y1 ∨ x1 ∨ t1 y1 ∨ x1 ∨ t1 t2 ∨ t1 t2 ∨ y0 t2 ∨ x0 t1 ∨ y0 ∨ x0 ∨ t2 t3 ∨ y1 t3 ∨ x1 y1 ∨ x1 ∨ t3
t2 ∨ t3 ∨ o1
SMT solver High-level constraint SAT solver CNF clauses
x y
lsb msb
ite
>
….
x0 ∨ y0 ∨ o20 x0 ∨ y0 ∨ o20
x1 ∨ y1 ∨ o21 x1 ∨ y1 ∨ o21
assignments
assignments
Current variables assignment x1 = F, x2 = T, x3 = F, x4 = F
x1 ∨ x2 ∨ x4 ∨ x5 false
assignments
Current variables assignment x1 = F, x2 = T, x3 = F, x4 = F Unit clause
x1 ∨ x2 ∨ x4 ∨ x5
assignments
Current variables assignment x1 = F, x2 = T, x3 = F, x4 = F, x5 = T
1
y1 ∨ x1 ∨ t1 y1 ∨ x1 ∨ t1 y1 ∨ x1 ∨ t1 y1 ∨ x1 ∨ t1 t2 ∨ t1 t2 ∨ y0 t2 ∨ x0 t1 ∨ y0 ∨ x0 ∨ t2 t3 ∨ y1 t3 ∨ x1 y1 ∨ x1 ∨ t3
t2 ∨ t3 ∨ o1
x0 ∨ y0 ∨ o20 x0 ∨ y0 ∨ o20
x1 ∨ y1 ∨ o21 x1 ∨ y1 ∨ o21
x1 = 1
Unit prop
− − − − − − → o21 = 1
x y
lsb msb
ite
>
1
Composing encodings does not preserve optimality
Focus on
encodings for these patterns
What patterns to target? How do we come up with “optimal” encoding for a pattern? Do these encodings actually improve the performance?
What patterns to target? How do we come up with “optimal” encoding for a pattern? Do these encodings actually improve the performance?
Synthesis of Encodings (Sketch) Auto-tuning (Machine Learning) Pattern Finding (Sampling) Corpus of benchmarks Encodings Optimal solver Patterns
x y
ite
>
Encodings (VMCAI’16)
Synthesis of Encodings (Sketch) Auto-tuning (Machine Learning) Pattern Finding (Sampling) Corpus of benchmarks Encodings Optimal solver Patterns
x y
ite
>
Boolean predicate P CNF clauses C Specification Template
Sketch (SyGus solver)
Correct program
t1 = true t2 = true for i from N to 1 : t3 = newV ar t4 = newV ar clause({x[i], y[i], o[i]}) clause({x[i], t1, t3}) clause({x[i], t2, o[i], t4}) clause({x[i], o[i], t3}) clause({x[i], y[i], o[i]}) clause({x[i], t2, o[i]}) clause({x[i], t2, t4}) clause({y[i], t2, t4}) clause({y[i], o[i], t3}) clause({y[i], t1, t3}) clause({y[i], o[i], t3}) clause({t1, t3}) clause({t1, o[i], t3}) clause({t2, t4}) clause({t3, t4}) t1 = t3 t2 = t4
Boolean predicate P CNF clauses C
x y
msb
ite
>
t1 = true t2 = true for i from N to 1 : t3 = newV ar t4 = newV ar clause({x[i], y[i], o[i]}) clause({x[i], t1, t3}) clause({x[i], t2, o[i], t4}) clause({x[i], o[i], t3}) clause({x[i], y[i], o[i]}) clause({x[i], t2, o[i]}) clause({x[i], t2, t4}) clause({y[i], t2, t4}) clause({y[i], o[i], t3}) clause({y[i], t1, t3}) clause({y[i], o[i], t3}) clause({t1, t3}) clause({t1, o[i], t3}) clause({t2, t4}) clause({t3, t4}) t1 = t3 t2 = t4
Boolean predicate P CNF clauses C
x y
msb
ite
>
t1 = true t2 = true for i from N to 1 : t3 = newV ar t4 = newV ar clause({x[i], y[i], o[i]}) clause({x[i], t1, t3}) clause({x[i], t2, o[i], t4}) clause({x[i], o[i], t3}) clause({x[i], y[i], o[i]}) clause({x[i], t2, o[i]}) clause({x[i], t2, t4}) clause({y[i], t2, t4}) clause({y[i], o[i], t3}) clause({y[i], t1, t3}) clause({y[i], o[i], t3}) clause({t1, t3}) clause({t1, o[i], t3}) clause({t2, t4}) clause({t3, t4}) t1 = t3 t2 = t4
Boolean predicate P CNF clauses C
x y
msb
ite
>
t1 = true t2 = true for i from N to 1 : t3 = newV ar t4 = newV ar clause({x[i], y[i], o[i]}) clause({x[i], t1, t3}) clause({x[i], t2, o[i], t4}) clause({x[i], o[i], t3}) clause({x[i], y[i], o[i]}) clause({x[i], t2, o[i]}) clause({x[i], t2, t4}) clause({y[i], t2, t4}) clause({y[i], o[i], t3}) clause({y[i], t1, t3}) clause({y[i], o[i], t3}) clause({t1, t3}) clause({t1, o[i], t3}) clause({t2, t4}) clause({t3, t4}) t1 = t3 t2 = t4
Boolean predicate P CNF clauses C
x y
msb
ite
>
t1 = ?? t2 = ?? for i from ?? to ?? : t3 = newV ar t4 = newV ar genClauses(x[i], y[i], o[i], t1, t2, t3, t4) t1 = t3 t2 = t4
Boolean predicate P CNF clauses C Specification Template
Sketch (SyGus solver)
Correct program
Correctness: ∀σ. P(σ) = C(σ)
σ = variables assignment
Boolean predicate P CNF clauses C
P(σ) = C(σ) = T a ∨ c ∨ d a ∨ c ∨ d a ∨ b ∨ d a ∨ b ∨ d b ∨ c ∨ d b ∨ c ∨ d d ∨ e d ∨ e d = ite(a, b, c) ∧ e = d T ∨ F ∨ F T ∨ T ∨ T F ∨ T ∨ F F ∨ F ∨ T T ∨ F ∨ F F ∨ T ∨ T T ∨ F F ∨ T a = T, b = T, c = F, d = T, e = T
Correctness: ∀σ. P(σ) = C(σ)
σ = variables assignment
Boolean predicate P CNF clauses C
P(σ) = C(σ) = F a ∨ c ∨ d a ∨ c ∨ d a ∨ b ∨ d a ∨ b ∨ d b ∨ c ∨ d b ∨ c ∨ d d ∨ e d ∨ e d = ite(a, b, c) ∧ e = d F ∨ F ∨ F F ∨ T ∨ T T ∨ T ∨ F T ∨ F ∨ T T ∨ F ∨ F F ∨ T ∨ T T ∨ F F ∨ T a = F, b = T, c = F, d = T, e = T
Maximal Propagation
Boolean predicate P CNF clauses C
a ∨ c ∨ d a ∨ c ∨ d a ∨ b ∨ d a ∨ b ∨ d b ∨ c ∨ d b ∨ c ∨ d d ∨ e d ∨ e d = ite(a, b, c) ∧ e = d b = T, c = T ∀σ. satisfiable(σ, P) = ⇒
Boolean predicate P CNF clauses C
a ∨ c ∨ d a ∨ c ∨ d a ∨ b ∨ d a ∨ b ∨ d b ∨ c ∨ d b ∨ c ∨ d d ∨ e d ∨ e d = ite(a, b, c) ∧ e = d b = T, c = T = ⇒ e = T ∀xi, bi. (forces(σ, P, xi, bi) = ⇒ ∀σ. satisfiable(σ, P) = ⇒
Maximal Propagation
Boolean predicate P CNF clauses C
a ∨ c ∨ d a ∨ c ∨ d a ∨ b ∨ d a ∨ b ∨ d b ∨ c ∨ d b ∨ c ∨ d d ∨ e d ∨ e d = ite(a, b, c) ∧ e = d a ∨ T ∨ d a ∨ F ∨ d a ∨ T ∨ d a ∨ F ∨ d T ∨ T ∨ d F ∨ F ∨ d d ∨ e d ∨ e b = T, c = T = ⇒ e = T ∀σ. satisfiable(σ, P) = ⇒ ∀xi, bi. (forces(σ, P, xi, bi) = ⇒
Maximal Propagation
UP(C, σ) v extend(σ, xi, bi))
Boolean predicate P CNF clauses C
a ∨ c ∨ d a ∨ c ∨ d a ∨ b ∨ d a ∨ b ∨ d b ∨ c ∨ d b ∨ c ∨ d d ∨ e d ∨ e d = ite(a, b, c) ∧ e = d = ⇒ e = T b = T, c = T, d = T a ∨ T ∨ F a ∨ F ∨ T a ∨ T ∨ F a ∨ F ∨ T T ∨ T ∨ F F ∨ F ∨ T T ∨ e F ∨ e ∀σ. satisfiable(σ, P) = ⇒ ∀xi, bi. (forces(σ, P, xi, bi) = ⇒
Maximal Propagation
UP(C, σ) v extend(σ, xi, bi))
Boolean predicate P CNF clauses C
a ∨ c ∨ d a ∨ c ∨ d a ∨ b ∨ d a ∨ b ∨ d b ∨ c ∨ d b ∨ c ∨ d d ∨ e d ∨ e d = ite(a, b, c) ∧ e = d = ⇒ e = T a ∨ T ∨ F a ∨ F ∨ T a ∨ T ∨ F a ∨ F ∨ T T ∨ T ∨ F F ∨ F ∨ T T ∨ e F ∨ e ∀σ. satisfiable(σ, P) = ⇒ ∀xi, bi. (forces(σ, P, xi, bi) = ⇒ b = T, c = T, d = T, e = T
Maximal Propagation
UP(C, σ) v extend(σ, xi, bi))
Boolean predicate P CNF clauses C
a ∨ c ∨ d a ∨ c ∨ d a ∨ b ∨ d a ∨ b ∨ d b ∨ c ∨ d b ∨ c ∨ d d ∨ e d ∨ e d = ite(a, b, c) ∧ e = d a ∨ T ∨ F a ∨ F ∨ T a ∨ T ∨ F a ∨ F ∨ T T ∨ T ∨ F F ∨ F ∨ T T ∨ e F ∨ e ∀σ. satisfiable(σ, P) = ⇒ ∀xi, bi. (forces(σ, P, xi, bi) = ⇒ UP(C, σ) v extend(σ, xi, bi)) = ⇒ e = T b = T, c = T, d = T, e = T
Maximal Propagation
Difficult for synthesis tools to reason about
Boolean predicate P CNF clauses C
Is there a better specification for maximal propagation?
∀σ. satisfiable(σ, P) = ⇒ ∀xi, bi. (forces(σ, P, xi, bi) = ⇒ UP(C, σ) v extend(σ, xi, bi))
Maximal Propagation
Boolean predicate P CNF clauses C
a ∨ c ∨ d a ∨ c ∨ d a ∨ b ∨ d a ∨ b ∨ d b ∨ c ∨ d b ∨ c ∨ d d ∨ e d ∨ e d = ite(a, b, c) ∧ e = d b = T, c = T a ∨ T ∨ d a ∨ F ∨ d a ∨ T ∨ d a ∨ F ∨ d T ∨ T ∨ d F ∨ F ∨ d d ∨ e d ∨ e is satisfiable No false clauses
) C(σ) 6= false
Boolean predicate P CNF clauses C
a ∨ c ∨ d a ∨ c ∨ d a ∨ b ∨ d a ∨ b ∨ d b ∨ c ∨ d b ∨ c ∨ d d ∨ e d ∨ e d = ite(a, b, c) ∧ e = d b = T, c = T a ∨ T ∨ d a ∨ F ∨ d a ∨ T ∨ d a ∨ F ∨ d T ∨ T ∨ d F ∨ F ∨ d d ∨ e d ∨ e Can propagate e to T Has a unit clause
) C(σ) 6= false
⇒ C(σ) has a unit clause
Boolean predicate P CNF clauses C
a ∨ c ∨ d a ∨ c ∨ d a ∨ b ∨ d a ∨ b ∨ d b ∨ c ∨ d b ∨ c ∨ d d ∨ e d ∨ e d = ite(a, b, c) ∧ e = d b = T, c = T, d = T a ∨ T ∨ F a ∨ F ∨ T a ∨ T ∨ F a ∨ F ∨ T T ∨ T ∨ F F ∨ F ∨ T T ∨ e F ∨ e Can still propagate e to T Has a unit clause
) C(σ) 6= false
⇒ C(σ) has a unit clause
Boolean predicate P CNF clauses C
a ∨ c ∨ d a ∨ c ∨ d a ∨ b ∨ d a ∨ b ∨ d b ∨ c ∨ d b ∨ c ∨ d d ∨ e d ∨ e d = ite(a, b, c) ∧ e = d b = T, c = T, e = F a ∨ T ∨ d a ∨ F ∨ d a ∨ T ∨ d a ∨ F ∨ d T ∨ T ∨ d F ∨ F ∨ d d ∨ T d ∨ F Unsatisfiable Has unit clauses
) C(σ) 6= false
⇒ C(σ) has a unit clause
⇒ C(σ) = false (or) C(σ) has a unit clause
Boolean predicate P CNF clauses C
a ∨ c ∨ d a ∨ c ∨ d a ∨ b ∨ d a ∨ b ∨ d b ∨ c ∨ d b ∨ c ∨ d d ∨ e d ∨ e d = ite(a, b, c) ∧ e = d a ∨ T ∨ T a ∨ F ∨ F a ∨ T ∨ T a ∨ F ∨ F T ∨ T ∨ T F ∨ F ∨ F F ∨ T T ∨ F b = T, c = T, e = F, d = F Also unsatisfiable Has a false clause
) C(σ) 6= false
⇒ C(σ) has a unit clause
⇒ C(σ) = false (or) C(σ) has a unit clause
* Excluding the benchmarks used for training
Benchmark Family Solved by CVC4 Our Solver Log-slicing (79) 33 62 ASP (365) 240 288 Mcm (61) 40 43 Brummayerbiere2 (33) 28 29 Float (62) 59 60 Brummayerbiere3 (40) 23 24 Bruttomesso (676) 623 623 TOTAL 1046 1129
83 more problems in total
Benchmark Family Solved by CVC4 Our Solver Log-slicing (79) 33 62 ASP (365) 240 288 Mcm (61) 40 43 Brummayerbiere2 (33) 28 29 Float (62) 59 60 Brummayerbiere3 (40) 23 24 Bruttomesso (676) 623 623 TOTAL 1046 1129
Solver Domain log- slicing asp mcm brumma2 float brumma3 brutto log-slicing 62 58 36 59 32 35 35 asp 227 288 255 227 236 253 240 mcm 39 38 43 40 39 39 41 brumma2 29 28 28 29 29 29 29 float 57 57 59 57 60 60 59 brumma3 22 22 25 22 23 24 23 brutto 607 606 623 609 623 623 623
Best Worst
lines per encoding)
level constraints to CNF
to generate domain specific solvers