Internals of SMT Solvers - GitHub Pages
Transcript of Internals of SMT Solvers - GitHub Pages
![Page 1: Internals of SMT Solvers - GitHub Pages](https://reader036.fdocuments.net/reader036/viewer/2022081700/62d7a25ba53aae24272f0ba3/html5/thumbnails/1.jpg)
Internals of SMT Solvers
Leonardo de Moura
Microsoft Research
![Page 2: Internals of SMT Solvers - GitHub Pages](https://reader036.fdocuments.net/reader036/viewer/2022081700/62d7a25ba53aae24272f0ba3/html5/thumbnails/2.jpg)
Acknowledgements
• Dejan Jovanovic (SRI International, NYU)
• Grant Passmore (Univ. Edinburgh)
![Page 3: Internals of SMT Solvers - GitHub Pages](https://reader036.fdocuments.net/reader036/viewer/2022081700/62d7a25ba53aae24272f0ba3/html5/thumbnails/3.jpg)
Herbrand Award 2013
Greg Nelson
![Page 4: Internals of SMT Solvers - GitHub Pages](https://reader036.fdocuments.net/reader036/viewer/2022081700/62d7a25ba53aae24272f0ba3/html5/thumbnails/4.jpg)
What is a SMT Solver?
![Page 5: Internals of SMT Solvers - GitHub Pages](https://reader036.fdocuments.net/reader036/viewer/2022081700/62d7a25ba53aae24272f0ba3/html5/thumbnails/5.jpg)
Multiple Approaches
is a portfolio of solvers
![Page 6: Internals of SMT Solvers - GitHub Pages](https://reader036.fdocuments.net/reader036/viewer/2022081700/62d7a25ba53aae24272f0ba3/html5/thumbnails/6.jpg)
Preprocessing
Simplify
Variable elimination
if-then-else elimination
…
𝐹
Solver
Modular Architecture is a “must have”
![Page 7: Internals of SMT Solvers - GitHub Pages](https://reader036.fdocuments.net/reader036/viewer/2022081700/62d7a25ba53aae24272f0ba3/html5/thumbnails/7.jpg)
Equivalence Preserving Simplifications
Simplify
𝐹
𝐹′
Examples: 𝑥 + 𝑦 + 1 − 𝑥 − 2 ↦ 𝑦 − 1
𝑝 ∧ 𝑡𝑟𝑢𝑒 ∧ 𝑝 ↦ 𝑝
![Page 8: Internals of SMT Solvers - GitHub Pages](https://reader036.fdocuments.net/reader036/viewer/2022081700/62d7a25ba53aae24272f0ba3/html5/thumbnails/8.jpg)
Preprocessor API
Preprocessor
𝐹
𝐹′
Model
Converter
Proof
Converter
𝐹 and 𝐹’ may be only equisatisfiable
![Page 9: Internals of SMT Solvers - GitHub Pages](https://reader036.fdocuments.net/reader036/viewer/2022081700/62d7a25ba53aae24272f0ba3/html5/thumbnails/9.jpg)
Example
Variable Elimination
Proof builder
Model builder
![Page 10: Internals of SMT Solvers - GitHub Pages](https://reader036.fdocuments.net/reader036/viewer/2022081700/62d7a25ba53aae24272f0ba3/html5/thumbnails/10.jpg)
Example
Variable Elimination
Proof builder
Model builder
𝑀
𝑀, 𝑀(𝑎) = 𝑀(𝑏) + 1
![Page 11: Internals of SMT Solvers - GitHub Pages](https://reader036.fdocuments.net/reader036/viewer/2022081700/62d7a25ba53aae24272f0ba3/html5/thumbnails/11.jpg)
Example
Variable Elimination
Proof builder
Model builder
𝑏 → 5
𝑏 → 5, 𝑎 → 6
![Page 12: Internals of SMT Solvers - GitHub Pages](https://reader036.fdocuments.net/reader036/viewer/2022081700/62d7a25ba53aae24272f0ba3/html5/thumbnails/12.jpg)
Model Converters
Extension Filter
Model builder
𝑀
𝑀, 𝑀(𝑎) = 𝑀(𝑏) + 1
![Page 13: Internals of SMT Solvers - GitHub Pages](https://reader036.fdocuments.net/reader036/viewer/2022081700/62d7a25ba53aae24272f0ba3/html5/thumbnails/13.jpg)
Model Converter: Filter
𝑝 ∨ (𝑞 ∧ ℎ)
Tseitin CNF converter
𝑝 ∨ 𝑘, ¬𝑘 ∨ 𝑞, ¬𝑘 ∨ ℎ, 𝑘 ∨ ¬𝑞 ∨ ¬ℎ
Model builder
𝑀
𝑀 ∖ 𝑘
![Page 14: Internals of SMT Solvers - GitHub Pages](https://reader036.fdocuments.net/reader036/viewer/2022081700/62d7a25ba53aae24272f0ba3/html5/thumbnails/14.jpg)
Model Converter: Filter
𝑝 ∨ (𝑞 ∧ ℎ)
Tseitin CNF converter
𝑝 ∨ 𝑘, ¬𝑘 ∨ 𝑞, ¬𝑘 ∨ ℎ, 𝑘 ∨ ¬𝑞 ∨ ¬ℎ
Model builder
𝑝 → 𝑡, 𝑘 → 𝑓, 𝑞 → 𝑓, ℎ → 𝑡
𝑝 → 𝑡, 𝑞 → 𝑓, ℎ → 𝑡
![Page 15: Internals of SMT Solvers - GitHub Pages](https://reader036.fdocuments.net/reader036/viewer/2022081700/62d7a25ba53aae24272f0ba3/html5/thumbnails/15.jpg)
Model Converter: Extension + Filter
𝑥: 𝑏𝑖𝑡𝑣𝑒𝑐 4 , 𝑦, 𝑧: 𝑏𝑖𝑡𝑣𝑒𝑐[2] 𝑥 = 𝑐𝑜𝑛𝑐𝑎𝑡(𝑦, 𝑧)
Bit-blaster
𝑥3 ⇔ 𝑦1, 𝑥2 ⇔ 𝑦0, 𝑥1 ⇔ 𝑧1, 𝑥0 ⇔ 𝑧0
Model builder
𝑀
𝑀′
![Page 16: Internals of SMT Solvers - GitHub Pages](https://reader036.fdocuments.net/reader036/viewer/2022081700/62d7a25ba53aae24272f0ba3/html5/thumbnails/16.jpg)
Preprocessors
1. Produce Equivalent Formula
2. Produce Equisatisfiable Formula
3. Assume “closed world” (non-incremental)
Example: symmetry reduction
![Page 17: Internals of SMT Solvers - GitHub Pages](https://reader036.fdocuments.net/reader036/viewer/2022081700/62d7a25ba53aae24272f0ba3/html5/thumbnails/17.jpg)
Simple QF_BV (bit-vector) solver
Simplify
Variable elimination
𝐹
Bit-blasting
Tseitin CNF converter SAT Solver
![Page 18: Internals of SMT Solvers - GitHub Pages](https://reader036.fdocuments.net/reader036/viewer/2022081700/62d7a25ba53aae24272f0ba3/html5/thumbnails/18.jpg)
Under/Over-Approximations
Under-approximation
unsat answers cannot be trusted
Over-approximation
sat answers cannot be trusted
![Page 19: Internals of SMT Solvers - GitHub Pages](https://reader036.fdocuments.net/reader036/viewer/2022081700/62d7a25ba53aae24272f0ba3/html5/thumbnails/19.jpg)
Under/Over-Approximations
Under-approximation
model finders
Over-approximation
proof finders
![Page 20: Internals of SMT Solvers - GitHub Pages](https://reader036.fdocuments.net/reader036/viewer/2022081700/62d7a25ba53aae24272f0ba3/html5/thumbnails/20.jpg)
Under/Over-Approximations
Under-approximation
S S S’
Over-approximation
S S \ S’
![Page 21: Internals of SMT Solvers - GitHub Pages](https://reader036.fdocuments.net/reader036/viewer/2022081700/62d7a25ba53aae24272f0ba3/html5/thumbnails/21.jpg)
Under/Over-Approximations
Under-approximation
Example: QF_NIA model finders
add bounds to unbounded variables (and blast)
Over-approximation
Example: Boolean abstraction
![Page 22: Internals of SMT Solvers - GitHub Pages](https://reader036.fdocuments.net/reader036/viewer/2022081700/62d7a25ba53aae24272f0ba3/html5/thumbnails/22.jpg)
Under/Over-Approximations
Combining under and over is bad!
sat and unsat answers cannot be trusted.
![Page 23: Internals of SMT Solvers - GitHub Pages](https://reader036.fdocuments.net/reader036/viewer/2022081700/62d7a25ba53aae24272f0ba3/html5/thumbnails/23.jpg)
Tracking: under/over-approximations
Proof and Model converters can check if the resultant models and proofs are valid.
![Page 24: Internals of SMT Solvers - GitHub Pages](https://reader036.fdocuments.net/reader036/viewer/2022081700/62d7a25ba53aae24272f0ba3/html5/thumbnails/24.jpg)
CEGAR is your friend Counter-Example Guided Abstract Refinement
procedure Solver(F)
Fp := Abstract(F)
loop
(R, M) := Solve(Fp)
if R = UNSAT then return UNSAT
R’ := Check(F, M)
if R’ = SAT then return SAT
Fp := Refine(F, Fp, M)
Using over-approximation
Model
![Page 25: Internals of SMT Solvers - GitHub Pages](https://reader036.fdocuments.net/reader036/viewer/2022081700/62d7a25ba53aae24272f0ba3/html5/thumbnails/25.jpg)
CEGAR is your friend Counter-Example Guided Abstract Refinement
procedure Solver(F)
Fp := Abstract(F)
loop
(R, Pr) := Solve(Fp)
if R = SAT then return SAT
R’ := Check(F, Pr)
if R’ = UNSAT then return UNSAT
Fp := Refine(F, Fp, M)
Using under-approximation
Proof
![Page 26: Internals of SMT Solvers - GitHub Pages](https://reader036.fdocuments.net/reader036/viewer/2022081700/62d7a25ba53aae24272f0ba3/html5/thumbnails/26.jpg)
CEGAR is your friend Counter-Example Guided Abstract Refinement
Refinements:
Incremental Solver
Run over and under-approximation is parallel
![Page 27: Internals of SMT Solvers - GitHub Pages](https://reader036.fdocuments.net/reader036/viewer/2022081700/62d7a25ba53aae24272f0ba3/html5/thumbnails/27.jpg)
Uninterpreted Functions by CEGAR
Suppose we have a Solver that does not support uninterpreted functions (example: QF_BV solver)
Congruence Rule: 𝑥1 = 𝑦1, … , 𝑥𝑛 = 𝑦𝑛 ⇒ 𝑓(𝑥1, … , 𝑥𝑛) = 𝑓(𝑦1, … , 𝑦𝑛)
![Page 28: Internals of SMT Solvers - GitHub Pages](https://reader036.fdocuments.net/reader036/viewer/2022081700/62d7a25ba53aae24272f0ba3/html5/thumbnails/28.jpg)
Uninterpreted Functions by CEGAR
Congruence Rule: 𝑥1 = 𝑦1, … , 𝑥𝑛 = 𝑦𝑛 ⇒ 𝑓(𝑥1, … , 𝑥𝑛)
Abstract: replace each f-application with a fresh variable
(over-approximation)
𝑎 = 𝑏 + 1, 𝑓(𝑎 − 1) = 𝑐, 𝑓(𝑏) ≠ 𝑐
𝑎 = 𝑏 + 1, 𝑘1 = 𝑐, 𝑘2 ≠ 𝑐
𝑘1 ≡ 𝑓 𝑎 − 1 ,
𝑘2 ≡ 𝑓(𝑏)
![Page 29: Internals of SMT Solvers - GitHub Pages](https://reader036.fdocuments.net/reader036/viewer/2022081700/62d7a25ba53aae24272f0ba3/html5/thumbnails/29.jpg)
Uninterpreted Functions by CEGAR
Congruence Rule: 𝑥1 = 𝑦1, … , 𝑥𝑛 = 𝑦𝑛 ⇒ 𝑓(𝑥1, … , 𝑥𝑛)
Check: check if congruence rule is satisfied
𝑎 = 𝑏 + 1, 𝑘1 = 𝑐, 𝑘2 ≠ 𝑐
𝑘1 ≡ 𝑓 𝑎 − 1 ,
𝑘2 ≡ 𝑓(𝑏)
𝑎 → 1, 𝑏 → 0, 𝑐 → 0, 𝑘1 → 0, 𝑘2 → 1
![Page 30: Internals of SMT Solvers - GitHub Pages](https://reader036.fdocuments.net/reader036/viewer/2022081700/62d7a25ba53aae24272f0ba3/html5/thumbnails/30.jpg)
Uninterpreted Functions by CEGAR
Congruence Rule: 𝑥1 = 𝑦1, … , 𝑥𝑛 = 𝑦𝑛 ⇒ 𝑓(𝑥1, … , 𝑥𝑛)
Refine: expand congruence axiom 𝑎 − 1 = 𝑏 ⇒ 𝑘1 = 𝑘2
𝑎 = 𝑏 + 1, 𝑘1 = 𝑐, 𝑘2 ≠ 𝑐
𝑘1 ≡ 𝑓 𝑎 − 1 ,
𝑘2 ≡ 𝑓(𝑏)
𝑎 → 1, 𝑏 → 0, 𝑐 → 0, 𝑘1 → 0, 𝑘2 → 1
![Page 31: Internals of SMT Solvers - GitHub Pages](https://reader036.fdocuments.net/reader036/viewer/2022081700/62d7a25ba53aae24272f0ba3/html5/thumbnails/31.jpg)
Uninterpreted Functions by CEGAR
Congruence Rule: 𝑥1 = 𝑦1, … , 𝑥𝑛 = 𝑦𝑛 ⇒ 𝑓(𝑥1, … , 𝑥𝑛)
Refine: expand congruence axiom 𝑎 − 1 = 𝑏 ⇒ 𝑘1 = 𝑘2
𝑎 = 𝑏 + 1, 𝑘1 = 𝑐, 𝑘2 ≠ 𝑐, (𝑎 − 1 = 𝑏 ⇒ 𝑘1 = 𝑘2)
unsat
𝑎 − 1 ≠ 𝑏 ∨ 𝑘1 = 𝑘2
![Page 32: Internals of SMT Solvers - GitHub Pages](https://reader036.fdocuments.net/reader036/viewer/2022081700/62d7a25ba53aae24272f0ba3/html5/thumbnails/32.jpg)
UF by CEGAR
Simple QF_UFBV Solver
QF_BV solver
![Page 33: Internals of SMT Solvers - GitHub Pages](https://reader036.fdocuments.net/reader036/viewer/2022081700/62d7a25ba53aae24272f0ba3/html5/thumbnails/33.jpg)
AUF by CEGAR
Simple QF_AUFBV Solver arrays on top of UF
QF_BV solver
Lemmas on Demand For Theory of Arrays [Brummayer-Biere 2009]
![Page 34: Internals of SMT Solvers - GitHub Pages](https://reader036.fdocuments.net/reader036/viewer/2022081700/62d7a25ba53aae24272f0ba3/html5/thumbnails/34.jpg)
Simple UFBV Solver model-based quantifier instantiation
MBQI
UF by CEGAR
QF_BV solver
Efficiently solving quantified bit-vector formulas [Wintersteiger at al 2010]
![Page 35: Internals of SMT Solvers - GitHub Pages](https://reader036.fdocuments.net/reader036/viewer/2022081700/62d7a25ba53aae24272f0ba3/html5/thumbnails/35.jpg)
Simple QF_NIA “solver” by CEGAR nonlinear integer arithmetic
Hilbert’s 10th Problem
DPRM theorem: QF_NIA is undecidable
Idea: use (under-approximation) CEGAR
1. Add lower/upper bounds to all variables, and convert into QF_BV
2. If SAT done
3. Otherwise, refine: increase lower/upper bounds
![Page 36: Internals of SMT Solvers - GitHub Pages](https://reader036.fdocuments.net/reader036/viewer/2022081700/62d7a25ba53aae24272f0ba3/html5/thumbnails/36.jpg)
Lazy SMT as CEGAR
Suppose we have a Solver that can only process a conjunction of literals.
Examples:
Congurence Closure (UF),
Simplex (Linear Real Arithmetic)
![Page 37: Internals of SMT Solvers - GitHub Pages](https://reader036.fdocuments.net/reader036/viewer/2022081700/62d7a25ba53aae24272f0ba3/html5/thumbnails/37.jpg)
Lazy SMT as CEGAR: 1. Abstract
Basic Idea x 0, y = x + 1, (y > 2 y < 1)
p1, p2, (p3 p4) p1 (x 0), p2 (y = x + 1),
p3 (y > 2), p4 (y < 1)
[Audemard et al - 2002], [Barrett et al - 2002], [de Moura et al - 2002]
[Flanagan et al - 2003], …
![Page 38: Internals of SMT Solvers - GitHub Pages](https://reader036.fdocuments.net/reader036/viewer/2022081700/62d7a25ba53aae24272f0ba3/html5/thumbnails/38.jpg)
Lazy SMT as CEGAR: 2. Solve
Basic Idea x 0, y = x + 1, (y > 2 y < 1)
p1 (x 0), p2 (y = x + 1),
p3 (y > 2), p4 (y < 1)
p1, p2, (p3 p4)
SAT Solver
![Page 39: Internals of SMT Solvers - GitHub Pages](https://reader036.fdocuments.net/reader036/viewer/2022081700/62d7a25ba53aae24272f0ba3/html5/thumbnails/39.jpg)
Lazy SMT as CEGAR: 2. Solve
Basic Idea x 0, y = x + 1, (y > 2 y < 1)
p1 (x 0), p2 (y = x + 1),
p3 (y > 2), p4 (y < 1)
p1, p2, (p3 p4)
SAT Solver
Assignment p1, p2, p3, p4
![Page 40: Internals of SMT Solvers - GitHub Pages](https://reader036.fdocuments.net/reader036/viewer/2022081700/62d7a25ba53aae24272f0ba3/html5/thumbnails/40.jpg)
Lazy SMT as CEGAR: 3. Check
Basic Idea x 0, y = x + 1, (y > 2 y < 1)
p1, p2, (p3 p4)
SAT Solver
Assignment p1, p2, p3, p4
p1 (x 0), p2 (y = x + 1),
p3 (y > 2), p4 (y < 1)
x 0, y = x + 1,
(y > 2), y < 1
![Page 41: Internals of SMT Solvers - GitHub Pages](https://reader036.fdocuments.net/reader036/viewer/2022081700/62d7a25ba53aae24272f0ba3/html5/thumbnails/41.jpg)
Lazy SMT as CEGAR: 3. Check
Basic Idea x 0, y = x + 1, (y > 2 y < 1)
p1, p2, (p3 p4)
SAT Solver
Assignment p1, p2, p3, p4
p1 (x 0), p2 (y = x + 1),
p3 (y > 2), p4 (y < 1)
x 0, y = x + 1,
(y > 2), y < 1
Theory Solver
Unsatisfiable
x 0, y = x + 1, y < 1
![Page 42: Internals of SMT Solvers - GitHub Pages](https://reader036.fdocuments.net/reader036/viewer/2022081700/62d7a25ba53aae24272f0ba3/html5/thumbnails/42.jpg)
Lazy SMT as CEGAR: 4. Refine
Basic Idea x 0, y = x + 1, (y > 2 y < 1)
p1, p2, (p3 p4)
SAT Solver
Assignment p1, p2, p3, p4
p1 (x 0), p2 (y = x + 1),
p3 (y > 2), p4 (y < 1)
x 0, y = x + 1,
(y > 2), y < 1
Theory Solver
Unsatisfiable
x 0, y = x + 1, y < 1
New Lemma
p1p2p4
![Page 43: Internals of SMT Solvers - GitHub Pages](https://reader036.fdocuments.net/reader036/viewer/2022081700/62d7a25ba53aae24272f0ba3/html5/thumbnails/43.jpg)
Lazy SMT as CEGAR: 4. Refine
Basic Idea
Theory Solver
Unsatisfiable
x 0, y = x + 1, y < 1
New Lemma
p1p2p4
AKA
Theory conflict
![Page 44: Internals of SMT Solvers - GitHub Pages](https://reader036.fdocuments.net/reader036/viewer/2022081700/62d7a25ba53aae24272f0ba3/html5/thumbnails/44.jpg)
Lazy SMT as CEGAR: refinements
Many refinements:
Incrementality
Efficient Backtracking
Efficient Lemma Generation
Theory propagation - DPLL(T) [Ganzinger et all – 2004]
Many SMT solvers are based on DPLL(T)
![Page 45: Internals of SMT Solvers - GitHub Pages](https://reader036.fdocuments.net/reader036/viewer/2022081700/62d7a25ba53aae24272f0ba3/html5/thumbnails/45.jpg)
DPLL(T) weakness
Theories are “second-class citizens”.
DPLL(T) is not model-driven (key property of CDCL).
Mo
dels
Pro
ofs
![Page 46: Internals of SMT Solvers - GitHub Pages](https://reader036.fdocuments.net/reader036/viewer/2022081700/62d7a25ba53aae24272f0ba3/html5/thumbnails/46.jpg)
CDCL: Conflict Driven Clause Learning
Resolution
DPLL
Proof
Model
![Page 47: Internals of SMT Solvers - GitHub Pages](https://reader036.fdocuments.net/reader036/viewer/2022081700/62d7a25ba53aae24272f0ba3/html5/thumbnails/47.jpg)
DPLL(T) weakness
DPLL(T) works well only for “easy” theories.
Examples:
Uninterpreted functions
Difference logic (𝑥 − 𝑦 ≤ 𝑐)
Linear real arithmetic
“Hard theories”:
Linear integer arithmetic
Arrays
Nonlinear real arithmetic
![Page 48: Internals of SMT Solvers - GitHub Pages](https://reader036.fdocuments.net/reader036/viewer/2022081700/62d7a25ba53aae24272f0ba3/html5/thumbnails/48.jpg)
Example: Nonlinear Real Arithmetic
𝑥2 − 4𝑥 + 𝑦2 − 𝑦 + 8 < 1
𝑥𝑦 − 2𝑥 − 2𝑦 + 4 > 1
PSPACE
QF_NRA
NP-hardness
x is “Boolean” x (x-1) = 0
x or y or z x + y + z > 0
PSPACE membership
Canny – 1988,
Grigor’ev – 1988
NP
![Page 49: Internals of SMT Solvers - GitHub Pages](https://reader036.fdocuments.net/reader036/viewer/2022081700/62d7a25ba53aae24272f0ba3/html5/thumbnails/49.jpg)
The RISE of Model-Driven Techniques in SMT
![Page 50: Internals of SMT Solvers - GitHub Pages](https://reader036.fdocuments.net/reader036/viewer/2022081700/62d7a25ba53aae24272f0ba3/html5/thumbnails/50.jpg)
Saturation x Search
Proof-finding Model-finding
Mo
dels
Pro
ofs
![Page 51: Internals of SMT Solvers - GitHub Pages](https://reader036.fdocuments.net/reader036/viewer/2022081700/62d7a25ba53aae24272f0ba3/html5/thumbnails/51.jpg)
Two procedures
Resolution DPLL
Proof-finder Model-finder
Saturation Search
CDCL is model-driven proof search
![Page 52: Internals of SMT Solvers - GitHub Pages](https://reader036.fdocuments.net/reader036/viewer/2022081700/62d7a25ba53aae24272f0ba3/html5/thumbnails/52.jpg)
Linear Arithmetic
Fourier-Motzkin Simplex
Proof-finder Model-finder
Saturation Search
![Page 53: Internals of SMT Solvers - GitHub Pages](https://reader036.fdocuments.net/reader036/viewer/2022081700/62d7a25ba53aae24272f0ba3/html5/thumbnails/53.jpg)
Fourier-Motzkin
Very similar to Resolution
Exponential time and space
𝑡1 ≤ 𝑎𝑥, 𝑏𝑥 ≤ 𝑡2
𝑏𝑡1 ≤ 𝑎𝑏𝑥, 𝑎𝑏𝑥 ≤ 𝑎𝑡2
𝑏𝑡1 ≤ 𝑎𝑡2
![Page 54: Internals of SMT Solvers - GitHub Pages](https://reader036.fdocuments.net/reader036/viewer/2022081700/62d7a25ba53aae24272f0ba3/html5/thumbnails/54.jpg)
Polynomial Constraints
𝑥2 − 4𝑥 + 𝑦2 − 𝑦 + 8 < 1
𝑥𝑦 − 2𝑥 − 2𝑦 + 4 > 1
AKA Existential Theory of the Reals
R
![Page 55: Internals of SMT Solvers - GitHub Pages](https://reader036.fdocuments.net/reader036/viewer/2022081700/62d7a25ba53aae24272f0ba3/html5/thumbnails/55.jpg)
CAD “Big Picture”
1. Project/Saturate set of polynomials
2. Lift/Search: Incrementally build assignment 𝑣: 𝑥𝑘 → 𝛼𝑘
Isolate roots of polynomials 𝑓𝑖(𝜶, 𝑥)
Select a feasible cell 𝐶, and assign 𝑥𝑘 some 𝛼𝑘 ∈ 𝐶
If there is no feasible cell, then backtrack
![Page 56: Internals of SMT Solvers - GitHub Pages](https://reader036.fdocuments.net/reader036/viewer/2022081700/62d7a25ba53aae24272f0ba3/html5/thumbnails/56.jpg)
CAD “Big Picture”
𝑥2 + 𝑦2 − 1 < 0
𝑥 𝑦 − 1 > 0 1. Saturate
𝑥4 − 𝑥2 + 1
𝑥
𝑥2 − 1
(−∞, −𝟏) −𝟏 (−𝟏, 𝟎) 𝟎 (𝟎, 𝟏) 𝟏 (𝟏, ∞)
𝑥4 − 𝑥2 + 1 + + + + + + +
𝑥2 − 1 + 0 - - - 0 +
𝑥 - - - 0 + + +
2. Search
![Page 57: Internals of SMT Solvers - GitHub Pages](https://reader036.fdocuments.net/reader036/viewer/2022081700/62d7a25ba53aae24272f0ba3/html5/thumbnails/57.jpg)
CAD “Big Picture”
𝒙𝟐 + 𝒚𝟐 − 𝟏 < 0
𝒙 𝒚 − 𝟏 > 0 1. Saturate
𝑥4 − 𝑥2 + 1
𝑥
𝑥2 − 1
(−∞, −𝟏) −𝟏 (−𝟏, 𝟎) 𝟎 (𝟎, 𝟏) 𝟏 (𝟏, ∞)
𝑥4 − 𝑥2 + 1 + + + + + + +
𝑥2 − 1 + 0 - - - 0 +
𝑥 - - - 0 + + +
𝒙− 𝟐
(−∞, −𝟏
𝟐) −
𝟏
𝟐 (−
𝟏
𝟐, ∞)
4 + 𝑦2 − 1 + + +
−2y − 1 + 0 -
2. Search
![Page 58: Internals of SMT Solvers - GitHub Pages](https://reader036.fdocuments.net/reader036/viewer/2022081700/62d7a25ba53aae24272f0ba3/html5/thumbnails/58.jpg)
CAD “Big Picture”
𝒙𝟐 + 𝒚𝟐 − 𝟏 < 𝟎
𝑥 𝑦 − 1 > 0 1. Saturate
𝑥4 − 𝑥2 + 1
𝑥
𝑥2 − 1
(−∞, −𝟏) −𝟏 (−𝟏, 𝟎) 𝟎 (𝟎, 𝟏) 𝟏 (𝟏, ∞)
𝑥4 − 𝑥2 + 1 + + + + + + +
𝑥2 − 1 + 0 - - - 0 +
𝑥 - - - 0 + + +
𝒙− 𝟐
(−∞, −𝟏
𝟐) −
𝟏
𝟐 (−
𝟏
𝟐, ∞)
𝟒 + 𝒚𝟐 − 𝟏 + + +
−2y − 1 + 0 -
2. Search
CONFLICT
![Page 59: Internals of SMT Solvers - GitHub Pages](https://reader036.fdocuments.net/reader036/viewer/2022081700/62d7a25ba53aae24272f0ba3/html5/thumbnails/59.jpg)
NLSat: Model-Driven Search
Static x Dynamic
Optimistic approach
Key ideas
Start the Search before Saturate/Project
We saturate on demand
Model guides the saturation
Mo
dels
Pro
ofs
![Page 60: Internals of SMT Solvers - GitHub Pages](https://reader036.fdocuments.net/reader036/viewer/2022081700/62d7a25ba53aae24272f0ba3/html5/thumbnails/60.jpg)
Experimental Results (1) OUR NEW ENGINE
![Page 61: Internals of SMT Solvers - GitHub Pages](https://reader036.fdocuments.net/reader036/viewer/2022081700/62d7a25ba53aae24272f0ba3/html5/thumbnails/61.jpg)
Experimental Results (2)
OUR NEW ENGINE
![Page 62: Internals of SMT Solvers - GitHub Pages](https://reader036.fdocuments.net/reader036/viewer/2022081700/62d7a25ba53aae24272f0ba3/html5/thumbnails/62.jpg)
Other examples
Delayed
Theory Combination
[Bruttomesso et al 2006]
Model-Based
Theory Combination X
![Page 63: Internals of SMT Solvers - GitHub Pages](https://reader036.fdocuments.net/reader036/viewer/2022081700/62d7a25ba53aae24272f0ba3/html5/thumbnails/63.jpg)
Other examples
Array Theory by
Axiom Instantiation
Lemmas on Demand
For Theory of Array
[Brummayer-Biere 2009]
∀𝑎, 𝑖, 𝑣: 𝑎 𝑖 ≔ 𝑣 𝑖 = 𝑣
∀𝑎, 𝑖, 𝑗, 𝑣: 𝑖 = 𝑗 ∨ 𝑎 𝑖 ≔ 𝑣 𝑗 = 𝑎[𝑗]
X
![Page 64: Internals of SMT Solvers - GitHub Pages](https://reader036.fdocuments.net/reader036/viewer/2022081700/62d7a25ba53aae24272f0ba3/html5/thumbnails/64.jpg)
Other examples (for linear arithmetic)
Fourier-Motzkin
Generalizing DPLL to richer logics
[McMillan et al 2009]
Conflict Resolution
[Korovin et al 2009]
X
![Page 65: Internals of SMT Solvers - GitHub Pages](https://reader036.fdocuments.net/reader036/viewer/2022081700/62d7a25ba53aae24272f0ba3/html5/thumbnails/65.jpg)
Saturation: successful instances
Polynomial time procedures
Gaussian Elimination
Congruence Closure
![Page 66: Internals of SMT Solvers - GitHub Pages](https://reader036.fdocuments.net/reader036/viewer/2022081700/62d7a25ba53aae24272f0ba3/html5/thumbnails/66.jpg)
MCSat
Model-Driven SMT
Lift ideas from CDCL to SMT
Generalize ideas found in model-driven approaches
Easier to implement
Model construction is explicit
![Page 67: Internals of SMT Solvers - GitHub Pages](https://reader036.fdocuments.net/reader036/viewer/2022081700/62d7a25ba53aae24272f0ba3/html5/thumbnails/67.jpg)
MCSat
𝑥 ≥ 2, ¬𝑥 ≥ 1 ∨ 𝑦 ≥ 1 , (𝑥2 + 𝑦2 ≤ 1 ∨ 𝑥𝑦 > 1)
![Page 68: Internals of SMT Solvers - GitHub Pages](https://reader036.fdocuments.net/reader036/viewer/2022081700/62d7a25ba53aae24272f0ba3/html5/thumbnails/68.jpg)
MCSat
𝑥 ≥ 2, ¬𝑥 ≥ 1 ∨ 𝑦 ≥ 1 , (𝑥2 + 𝑦2 ≤ 1 ∨ 𝑥𝑦 > 1)
𝑥 ≥ 2
Propagations
![Page 69: Internals of SMT Solvers - GitHub Pages](https://reader036.fdocuments.net/reader036/viewer/2022081700/62d7a25ba53aae24272f0ba3/html5/thumbnails/69.jpg)
MCSat
𝑥 ≥ 2, ¬𝑥 ≥ 1 ∨ 𝑦 ≥ 1 , (𝑥2 + 𝑦2 ≤ 1 ∨ 𝑥𝑦 > 1)
𝑥 ≥ 2
Propagations
𝑥 ≥ 1
![Page 70: Internals of SMT Solvers - GitHub Pages](https://reader036.fdocuments.net/reader036/viewer/2022081700/62d7a25ba53aae24272f0ba3/html5/thumbnails/70.jpg)
MCSat
𝑥 ≥ 2, ¬𝑥 ≥ 1 ∨ 𝑦 ≥ 1 , (𝑥2 + 𝑦2 ≤ 1 ∨ 𝑥𝑦 > 1)
𝑥 ≥ 2
Propagations
𝑥 ≥ 1 𝑦 ≥ 1
![Page 71: Internals of SMT Solvers - GitHub Pages](https://reader036.fdocuments.net/reader036/viewer/2022081700/62d7a25ba53aae24272f0ba3/html5/thumbnails/71.jpg)
MCSat
𝑥 ≥ 2, ¬𝑥 ≥ 1 ∨ 𝑦 ≥ 1 , (𝑥2 + 𝑦2 ≤ 1 ∨ 𝑥𝑦 > 1)
𝑥 ≥ 2
Boolean Decisions
𝑥 ≥ 1 𝑦 ≥ 1 𝑥2 + 𝑦2 ≤ 1
![Page 72: Internals of SMT Solvers - GitHub Pages](https://reader036.fdocuments.net/reader036/viewer/2022081700/62d7a25ba53aae24272f0ba3/html5/thumbnails/72.jpg)
MCSat
𝑥 ≥ 2, ¬𝑥 ≥ 1 ∨ 𝑦 ≥ 1 , (𝑥2 + 𝑦2 ≤ 1 ∨ 𝑥𝑦 > 1)
𝑥 ≥ 2
Semantic Decisions
𝑥 ≥ 1 𝑦 ≥ 1 𝑥2 + 𝑦2 ≤ 1 𝑥 → 2
![Page 73: Internals of SMT Solvers - GitHub Pages](https://reader036.fdocuments.net/reader036/viewer/2022081700/62d7a25ba53aae24272f0ba3/html5/thumbnails/73.jpg)
MCSat
𝑥 ≥ 2, ¬𝑥 ≥ 1 ∨ 𝑦 ≥ 1 , (𝑥2 + 𝑦2 ≤ 1 ∨ 𝑥𝑦 > 1)
𝑥 ≥ 2
Conflict
𝑥 ≥ 1 𝑦 ≥ 1 𝑥2 + 𝑦2 ≤ 1 𝑥 → 2
We can’t find a value for 𝑦 s.t. 4 + 𝑦2 ≤ 1
![Page 74: Internals of SMT Solvers - GitHub Pages](https://reader036.fdocuments.net/reader036/viewer/2022081700/62d7a25ba53aae24272f0ba3/html5/thumbnails/74.jpg)
MCSat
𝑥 ≥ 2, ¬𝑥 ≥ 1 ∨ 𝑦 ≥ 1 , (𝑥2 + 𝑦2 ≤ 1 ∨ 𝑥𝑦 > 1)
𝑥 ≥ 2
Conflict
𝑥 ≥ 1 𝑦 ≥ 1 𝑥2 + 𝑦2 ≤ 1 𝑥 → 2
We can’t find a value for 𝑦 s.t. 4 + 𝑦2 ≤ 1
Learning that ¬ 𝑥2 + 𝑦2 ≤ 1 ∨ ¬(𝑥= 2) is not productive
![Page 75: Internals of SMT Solvers - GitHub Pages](https://reader036.fdocuments.net/reader036/viewer/2022081700/62d7a25ba53aae24272f0ba3/html5/thumbnails/75.jpg)
MCSat
𝑥 ≥ 2, ¬𝑥 ≥ 1 ∨ 𝑦 ≥ 1 , (𝑥2 + 𝑦2 ≤ 1 ∨ 𝑥𝑦 > 1)
𝑥 ≥ 2 𝑥 ≥ 1 𝑦 ≥ 1 𝑥2 + 𝑦2 ≤ 1
Learning that ¬ 𝑥2 + 𝑦2 ≤ 1 ∨ ¬(𝑥= 2) is not productive
¬(𝑥 = 2)
¬ 𝑥2 + 𝑦2 ≤ 1 ∨ ¬(𝑥 = 2)
![Page 76: Internals of SMT Solvers - GitHub Pages](https://reader036.fdocuments.net/reader036/viewer/2022081700/62d7a25ba53aae24272f0ba3/html5/thumbnails/76.jpg)
MCSat
𝑥 ≥ 2, ¬𝑥 ≥ 1 ∨ 𝑦 ≥ 1 , (𝑥2 + 𝑦2 ≤ 1 ∨ 𝑥𝑦 > 1)
𝑥 ≥ 2 𝑥 ≥ 1 𝑦 ≥ 1 𝑥2 + 𝑦2 ≤ 1
Learning that ¬ 𝑥2 + 𝑦2 ≤ 1 ∨ ¬(𝑥= 2) is not productive
¬(𝑥 = 2)
¬ 𝑥2 + 𝑦2 ≤ 1 ∨ ¬(𝑥 = 2)
𝑥 → 3
![Page 77: Internals of SMT Solvers - GitHub Pages](https://reader036.fdocuments.net/reader036/viewer/2022081700/62d7a25ba53aae24272f0ba3/html5/thumbnails/77.jpg)
MCSat
𝑥 ≥ 2, ¬𝑥 ≥ 1 ∨ 𝑦 ≥ 1 , (𝑥2 + 𝑦2 ≤ 1 ∨ 𝑥𝑦 > 1)
𝑥 ≥ 2 𝑥 ≥ 1 𝑦 ≥ 1 𝑥2 + 𝑦2 ≤ 1
Learning that ¬ 𝑥2 + 𝑦2 ≤ 1 ∨ ¬(𝑥= 2) is not productive
¬(𝑥 = 2)
¬ 𝑥2 + 𝑦2 ≤ 1 ∨ ¬(𝑥 = 2)
𝑥 → 3
“Same” Conflict
We can’t find a value for 𝑦 s.t. 9 + 𝑦2 ≤ 1
![Page 78: Internals of SMT Solvers - GitHub Pages](https://reader036.fdocuments.net/reader036/viewer/2022081700/62d7a25ba53aae24272f0ba3/html5/thumbnails/78.jpg)
𝑥 ≥ 2, ¬𝑥 ≥ 1 ∨ 𝑦 ≥ 1 , (𝑥2 + 𝑦2 ≤ 1 ∨ 𝑥𝑦 > 1)
𝑥 ≥ 2
Conflict
𝑥 ≥ 1 𝑦 ≥ 1 𝑥2 + 𝑦2 ≤ 1 𝑥 → 2
𝑦
𝑥
𝑥2 + 𝑦2 ≤ 1 𝑥 → 2
−1 ≤ 𝑥, 𝑥 ≤ 1
¬(𝑥2 + 𝑦2 ≤ 1) ∨ 𝑥 ≤ 1
![Page 79: Internals of SMT Solvers - GitHub Pages](https://reader036.fdocuments.net/reader036/viewer/2022081700/62d7a25ba53aae24272f0ba3/html5/thumbnails/79.jpg)
MCSat
𝑥 ≥ 2, ¬𝑥 ≥ 1 ∨ 𝑦 ≥ 1 , (𝑥2 + 𝑦2 ≤ 1 ∨ 𝑥𝑦 > 1)
𝑥 ≥ 2 𝑥 ≥ 1 𝑦 ≥ 1 𝑥2 + 𝑦2 ≤ 1 𝑥 ≤ 1
¬(𝑥2 + 𝑦2 ≤ 1) ∨ 𝑥 ≤ 1
![Page 80: Internals of SMT Solvers - GitHub Pages](https://reader036.fdocuments.net/reader036/viewer/2022081700/62d7a25ba53aae24272f0ba3/html5/thumbnails/80.jpg)
MCSat
𝑥 ≥ 2, ¬𝑥 ≥ 1 ∨ 𝑦 ≥ 1 , (𝑥2 + 𝑦2 ≤ 1 ∨ 𝑥𝑦 > 1)
𝑥 ≥ 2 𝑥 ≥ 1 𝑦 ≥ 1 𝑥2 + 𝑦2 ≤ 1 𝑥 ≤ 1
¬(𝑥2 + 𝑦2 ≤ 1) ∨ 𝑥 ≤ 1
Conflict
¬ 𝑥 ≥ 2 ∨ ¬(𝑥 ≤ 1)
![Page 81: Internals of SMT Solvers - GitHub Pages](https://reader036.fdocuments.net/reader036/viewer/2022081700/62d7a25ba53aae24272f0ba3/html5/thumbnails/81.jpg)
MCSat
𝑥 ≥ 2, ¬𝑥 ≥ 1 ∨ 𝑦 ≥ 1 , (𝑥2 + 𝑦2 ≤ 1 ∨ 𝑥𝑦 > 1)
𝑥 ≥ 2 𝑥 ≥ 1 𝑦 ≥ 1 𝑥2 + 𝑦2 ≤ 1
¬(𝑥2 + 𝑦2 ≤ 1) ∨ 𝑥 ≤ 1
Learned by resolution
¬ 𝑥 ≥ 2 ∨ ¬(𝑥2 + 𝑦2 ≤ 1)
![Page 82: Internals of SMT Solvers - GitHub Pages](https://reader036.fdocuments.net/reader036/viewer/2022081700/62d7a25ba53aae24272f0ba3/html5/thumbnails/82.jpg)
MCSat
𝑥 ≥ 2, ¬𝑥 ≥ 1 ∨ 𝑦 ≥ 1 , (𝑥2 + 𝑦2 ≤ 1 ∨ 𝑥𝑦 > 1)
𝑥 ≥ 2 𝑥 ≥ 1 𝑦 ≥ 1 ¬(𝑥2 + 𝑦2 ≤ 1)
¬(𝑥2 + 𝑦2 ≤ 1) ∨ 𝑥 ≤ 1 ¬ 𝑥 ≥ 2 ∨ ¬(𝑥2 + 𝑦2 ≤ 1)
![Page 83: Internals of SMT Solvers - GitHub Pages](https://reader036.fdocuments.net/reader036/viewer/2022081700/62d7a25ba53aae24272f0ba3/html5/thumbnails/83.jpg)
MCSat: FM Example
−𝑥 + 𝑧 + 1 ≤ 0, 𝑥 − 𝑦 ≤ 0 𝑧 → 0, 𝑦 → 0
𝑧 + 1 ≤ 𝑥, 𝑥 ≤ 𝑦
≡
1 ≤ 𝑥, 𝑥 ≤ 0
−𝑥 + 𝑧 + 1 ≤ 0 𝑧 → 0 𝑦 → 0 𝑥 − 𝑦 ≤ 0
We can’t find a value of 𝑥
![Page 84: Internals of SMT Solvers - GitHub Pages](https://reader036.fdocuments.net/reader036/viewer/2022081700/62d7a25ba53aae24272f0ba3/html5/thumbnails/84.jpg)
MCSat: FM Example
−𝑥 + 𝑧 + 1 ≤ 0, 𝑥 − 𝑦 ≤ 0 𝑧 → 0, 𝑦 → 0
∃𝑥: −𝑥 + 𝑧 + 1 ≤ 0 ∧ 𝑥 − 𝑦 ≤ 0
𝑧 + 1 − 𝑦 ≤ 0
−𝑥 + 𝑧 + 1 ≤ 0 𝑧 → 0 𝑦 → 0 𝑥 − 𝑦 ≤ 0
¬ −𝑥 + 𝑧 + 1 ≤ 0 ∨ ¬ 𝑥 − 𝑦 ≤ 0 ∨ 𝑧 + 1 − 𝑦 ≤ 0
Fourier-Motzkin
![Page 85: Internals of SMT Solvers - GitHub Pages](https://reader036.fdocuments.net/reader036/viewer/2022081700/62d7a25ba53aae24272f0ba3/html5/thumbnails/85.jpg)
MCSat: FM Example
−𝑥 + 𝑧 + 1 ≤ 0 𝑧 → 0 𝑧 + 1 − 𝑦 ≤ 0 𝑥 − 𝑦 ≤ 0
¬ −𝑥 + 𝑧 + 1 ≤ 0 ∨ ¬ 𝑥 − 𝑦 ≤ 0 ∨ 𝑧 + 1 − 𝑦 ≤ 0
![Page 86: Internals of SMT Solvers - GitHub Pages](https://reader036.fdocuments.net/reader036/viewer/2022081700/62d7a25ba53aae24272f0ba3/html5/thumbnails/86.jpg)
MCSat: FM Example
−𝑥 + 𝑧 + 1 ≤ 0 𝑧 → 0 𝑧 + 1 − 𝑦 ≤ 0 𝑥 − 𝑦 ≤ 0
¬ −𝑥 + 𝑧 + 1 ≤ 0 ∨ ¬ 𝑥 − 𝑦 ≤ 0 ∨ 𝑧 + 1 − 𝑦 ≤ 0
𝑦 → 1
−𝑥 + 𝑧 + 1 ≤ 0, 𝑥 − 𝑦 ≤ 0 𝑧 → 0, 𝑦 → 1
𝑧 + 1 ≤ 𝑥, 𝑥 ≤ 𝑦
≡
1 ≤ 𝑥, 𝑥 ≤ 1
![Page 87: Internals of SMT Solvers - GitHub Pages](https://reader036.fdocuments.net/reader036/viewer/2022081700/62d7a25ba53aae24272f0ba3/html5/thumbnails/87.jpg)
MCSat: FM Example
−𝑥 + 𝑧 + 1 ≤ 0 𝑧 → 0 𝑧 + 1 − 𝑦 ≤ 0 𝑥 − 𝑦 ≤ 0
¬ −𝑥 + 𝑧 + 1 ≤ 0 ∨ ¬ 𝑥 − 𝑦 ≤ 0 ∨ 𝑧 + 1 − 𝑦 ≤ 0
𝑦 → 1
−𝑥 + 𝑧 + 1 ≤ 0, 𝑥 − 𝑦 ≤ 0 𝑧 → 0, 𝑦 → 1
𝑧 + 1 ≤ 𝑥, 𝑥 ≤ 𝑦
≡
1 ≤ 𝑥, 𝑥 ≤ 1
𝑥 → 1
![Page 88: Internals of SMT Solvers - GitHub Pages](https://reader036.fdocuments.net/reader036/viewer/2022081700/62d7a25ba53aae24272f0ba3/html5/thumbnails/88.jpg)
MCSat: Another Example −4𝑥𝑦 − 4𝑥 + 𝑦 > 1, 𝑥2 + 𝑦2 < 1, 𝑥3 + 2𝑥2 + 3𝑦2 − 5 < 0
![Page 89: Internals of SMT Solvers - GitHub Pages](https://reader036.fdocuments.net/reader036/viewer/2022081700/62d7a25ba53aae24272f0ba3/html5/thumbnails/89.jpg)
MCSat: Another Example
𝑥3 + 2𝑥2 + 3𝑦2 − 5 < 0
𝑥2 + 𝑦2 < 1
−4𝑥𝑦 − 4𝑥 + 𝑦 > 1
Feasible Region
Starting search Partial solution: 𝑥 → 0.5
Can we extend it to 𝑦?
What is the core?
−4𝑥𝑦 − 4𝑥 + 𝑦 > 1, 𝑥2 + 𝑦2 < 1, 𝑥3 + 2𝑥2 + 3𝑦2 − 5 < 0
![Page 90: Internals of SMT Solvers - GitHub Pages](https://reader036.fdocuments.net/reader036/viewer/2022081700/62d7a25ba53aae24272f0ba3/html5/thumbnails/90.jpg)
MCSat: Another Example
𝑥3 + 2𝑥2 + 3𝑦2 − 5 < 0
𝑥2 + 𝑦2 < 1
−4𝑥𝑦 − 4𝑥 + 𝑦 > 1
Feasible Region
Starting search Partial solution: 𝑥 → 0.5
Can we extend it to 𝑦?
What is the core?
−4𝑥𝑦 − 4𝑥 + 𝑦 > 1, 𝑥2 + 𝑦2 < 1, 𝑥3 + 2𝑥2 + 3𝑦2 − 5 < 0
![Page 91: Internals of SMT Solvers - GitHub Pages](https://reader036.fdocuments.net/reader036/viewer/2022081700/62d7a25ba53aae24272f0ba3/html5/thumbnails/91.jpg)
MCSat – Finite Basis
Every theory that admits quantifier elimination has a finite basis (given a fixed assignment order)
𝐹[𝑥, 𝑦1, … , 𝑦𝑚] 𝑦1 → 𝛼1, … , 𝑦𝑚 → 𝛼𝑚
∃𝑥: 𝐹[𝑥, 𝑦1, … , 𝑦𝑚]
𝐶1[𝑦1, … , 𝑦𝑚] ∧ ⋯ ∧ 𝐶𝑘[𝑦1, … , 𝑦𝑚]
¬𝐹 𝑥, 𝑦1, … , 𝑦𝑚 ∨ 𝐶𝑘[𝑦1, … , 𝑦𝑚]
![Page 92: Internals of SMT Solvers - GitHub Pages](https://reader036.fdocuments.net/reader036/viewer/2022081700/62d7a25ba53aae24272f0ba3/html5/thumbnails/92.jpg)
MCSat – Finite Basis
𝐹1[𝑥1]
𝐹2[𝑥1,𝑥2]
𝐹𝑛[𝑥1,𝑥2, … , 𝑥𝑛−1, 𝑥𝑛]
𝐹𝑛−1[𝑥1,𝑥2, … , 𝑥𝑛−1]
…
![Page 93: Internals of SMT Solvers - GitHub Pages](https://reader036.fdocuments.net/reader036/viewer/2022081700/62d7a25ba53aae24272f0ba3/html5/thumbnails/93.jpg)
MCSat – Finite Basis
𝐹1[𝑥1]
𝐹2[𝑥1,𝑥2]
𝐹𝑛[𝑥1,𝑥2, … , 𝑥𝑛−1, 𝑥𝑛]
𝐹𝑛−1[𝑥1,𝑥2, … , 𝑥𝑛−1]
…
![Page 94: Internals of SMT Solvers - GitHub Pages](https://reader036.fdocuments.net/reader036/viewer/2022081700/62d7a25ba53aae24272f0ba3/html5/thumbnails/94.jpg)
MCSat – Finite Basis
𝐹1[𝑥1]
𝐹2[𝑥1,𝑥2]
𝐹𝑛[𝑥1,𝑥2, … , 𝑥𝑛−1, 𝑥𝑛]
𝐹𝑛−1[𝑥1,𝑥2, … , 𝑥𝑛−1]
…
![Page 95: Internals of SMT Solvers - GitHub Pages](https://reader036.fdocuments.net/reader036/viewer/2022081700/62d7a25ba53aae24272f0ba3/html5/thumbnails/95.jpg)
MCSat – Finite Basis
𝐹1[𝑥1]
𝐹2[𝑥1,𝑥2]
𝐹𝑛[𝑥1,𝑥2, … , 𝑥𝑛−1, 𝑥𝑛]
𝐹𝑛−1[𝑥1,𝑥2, … , 𝑥𝑛−1]
…
![Page 96: Internals of SMT Solvers - GitHub Pages](https://reader036.fdocuments.net/reader036/viewer/2022081700/62d7a25ba53aae24272f0ba3/html5/thumbnails/96.jpg)
MCSat – Finite Basis
Every “finite” theory has a finite basis Example: Fixed size Bit-vectors
𝐹[𝑥, 𝑦1, … , 𝑦𝑚] 𝑦1 → 𝛼1, … , 𝑦𝑚 → 𝛼𝑚
¬𝐹 𝑥, 𝑦1, … , 𝑦𝑚 ∨ ¬(𝑦1 = 𝛼1) ∨ ⋯ ∨ ¬(𝑦𝑚= 𝛼𝑚)
![Page 97: Internals of SMT Solvers - GitHub Pages](https://reader036.fdocuments.net/reader036/viewer/2022081700/62d7a25ba53aae24272f0ba3/html5/thumbnails/97.jpg)
MCSat – Finite Basis
Theory of uninterpreted functions has a finite basis
Theory of arrays has a finite basis [Brummayer- Biere 2009]
In both cases the Finite Basis is essentially composed of equalities between existing terms.
![Page 98: Internals of SMT Solvers - GitHub Pages](https://reader036.fdocuments.net/reader036/viewer/2022081700/62d7a25ba53aae24272f0ba3/html5/thumbnails/98.jpg)
MCSat: Uninterpreted Functions
𝑎 = 𝑏 + 1, 𝑓 𝑎 − 1 < 𝑐, 𝑓 𝑏 > 𝑎
𝑎 = 𝑏 + 1, 𝑓 𝑘 < 𝑐, 𝑓 𝑏 > 𝑎, 𝑘 = 𝑎 − 1
𝑎 = 𝑏 + 1, 𝑓 𝑘 < 𝑐, 𝑓 𝑏 > 𝑎, 𝑘 = 𝑎 − 1
Treat 𝑓(𝑘) and 𝑓(𝑏) as variables Generalized variables
![Page 99: Internals of SMT Solvers - GitHub Pages](https://reader036.fdocuments.net/reader036/viewer/2022081700/62d7a25ba53aae24272f0ba3/html5/thumbnails/99.jpg)
MCSat: Uninterpreted Functions
𝑎 = 𝑏 + 1, 𝑓 𝑘 < 𝑐, 𝑓 𝑏 > 𝑎, 𝑘 = 𝑎 − 1
𝑘 → 0 𝑏 → 0 𝑓(𝑘) → 0 𝑓(𝑏) → 2
Conflict: 𝑓 𝑘 and 𝑓 𝑏 must be equal
¬ 𝑘 = 𝑏 ∨ 𝑓 𝑘 = 𝑓(𝑏)
![Page 100: Internals of SMT Solvers - GitHub Pages](https://reader036.fdocuments.net/reader036/viewer/2022081700/62d7a25ba53aae24272f0ba3/html5/thumbnails/100.jpg)
MCSat: Uninterpreted Functions
𝑎 = 𝑏 + 1, 𝑓 𝑘 < 𝑐, 𝑓 𝑏 > 𝑎, 𝑘 = 𝑎 − 1
𝑘 → 0 𝑏 → 0 𝑓(𝑘) → 0
¬ 𝑘 = 𝑏 ∨ 𝑓 𝑘 = 𝑓(𝑏)
𝑘 = 𝑏
(Semantic) Propagation
![Page 101: Internals of SMT Solvers - GitHub Pages](https://reader036.fdocuments.net/reader036/viewer/2022081700/62d7a25ba53aae24272f0ba3/html5/thumbnails/101.jpg)
MCSat: Uninterpreted Functions
𝑎 = 𝑏 + 1, 𝑓 𝑘 < 𝑐, 𝑓 𝑏 > 𝑎, 𝑘 = 𝑎 − 1
𝑘 → 0 𝑏 → 0 𝑓(𝑘) → 0
¬ 𝑘 = 𝑏 ∨ 𝑓 𝑘 = 𝑓(𝑏)
𝑘 = 𝑏 𝑓 𝑘 = 𝑓(𝑏)
![Page 102: Internals of SMT Solvers - GitHub Pages](https://reader036.fdocuments.net/reader036/viewer/2022081700/62d7a25ba53aae24272f0ba3/html5/thumbnails/102.jpg)
MCSat: Uninterpreted Functions
𝑎 = 𝑏 + 1, 𝑓 𝑘 < 𝑐, 𝑓 𝑏 > 𝑎, 𝑘 = 𝑎 − 1
𝑘 → 0 𝑏 → 0 𝑓(𝑘) → 0
¬ 𝑘 = 𝑏 ∨ 𝑓 𝑘 = 𝑓(𝑏)
𝑘 = 𝑏 𝑓 𝑘 = 𝑓(𝑏) 𝑓(𝑏) → 0
![Page 103: Internals of SMT Solvers - GitHub Pages](https://reader036.fdocuments.net/reader036/viewer/2022081700/62d7a25ba53aae24272f0ba3/html5/thumbnails/103.jpg)
MCSat – Finite Basis
We can also use literals from the finite basis in decisions. Application: simulate branch&bound for bounded linear integer arithmetic
LP solution:
1 2 3 4 5 6 𝑥1
1
2
3
4
5
6
0
𝑥2
𝑥1 ≥ 1 𝑥1 ≤ 0
𝑥1 = 1 𝑥2 = 2
𝑥1 = 0 𝑥2 = 3
𝑥1 = 0.8 𝑥2 = 2.4
![Page 104: Internals of SMT Solvers - GitHub Pages](https://reader036.fdocuments.net/reader036/viewer/2022081700/62d7a25ba53aae24272f0ba3/html5/thumbnails/104.jpg)
MCSat: Termination
Propagations
Boolean Decisions
Semantic Decisions
![Page 105: Internals of SMT Solvers - GitHub Pages](https://reader036.fdocuments.net/reader036/viewer/2022081700/62d7a25ba53aae24272f0ba3/html5/thumbnails/105.jpg)
MCSat
≻
Propagations
Boolean Decisions
Semantic Decisions
![Page 106: Internals of SMT Solvers - GitHub Pages](https://reader036.fdocuments.net/reader036/viewer/2022081700/62d7a25ba53aae24272f0ba3/html5/thumbnails/106.jpg)
MCSat
≻
Propagations
Boolean Decisions
Semantic Decisions
![Page 107: Internals of SMT Solvers - GitHub Pages](https://reader036.fdocuments.net/reader036/viewer/2022081700/62d7a25ba53aae24272f0ba3/html5/thumbnails/107.jpg)
MCSat
|𝐹𝑖𝑛𝑖𝑡𝑒𝐵𝑎𝑠𝑖𝑠|
…
Maximal Elements
…
![Page 108: Internals of SMT Solvers - GitHub Pages](https://reader036.fdocuments.net/reader036/viewer/2022081700/62d7a25ba53aae24272f0ba3/html5/thumbnails/108.jpg)
𝑥 ≥ 2, ¬𝑥 ≥ 1 ∨ 𝑦 ≥ 1 , (𝑥2 + 𝑦2 ≤ 1 ∨ 𝑥𝑦 > 1)
𝑥 ≥ 2 𝑥 ≥ 1 𝑦 ≥ 1 𝑥2 + 𝑦2 ≤ 1 𝑥 ≤ 1
¬(𝑥2 + 𝑦2 ≤ 1) ∨ 𝑥 ≤ 1 Conflict
¬ 𝑥 ≥ 2 ∨ ¬(𝑥 ≤ 1)
![Page 109: Internals of SMT Solvers - GitHub Pages](https://reader036.fdocuments.net/reader036/viewer/2022081700/62d7a25ba53aae24272f0ba3/html5/thumbnails/109.jpg)
𝑥 ≥ 2, ¬𝑥 ≥ 1 ∨ 𝑦 ≥ 1 , (𝑥2 + 𝑦2 ≤ 1 ∨ 𝑥𝑦 > 1)
𝑥 ≥ 2 𝑥 ≥ 1 𝑦 ≥ 1 𝑥2 + 𝑦2 ≤ 1 𝑥 ≤ 1
¬(𝑥2 + 𝑦2 ≤ 1) ∨ 𝑥 ≤ 1 Conflict
¬ 𝑥 ≥ 2 ∨ ¬(𝑥 ≤ 1)
𝑥 ≥ 2, ¬𝑥 ≥ 1 ∨ 𝑦 ≥ 1 , (𝑥2 + 𝑦2 ≤ 1 ∨ 𝑥𝑦 > 1)
𝑥 ≥ 2 𝑥 ≥ 1 𝑦 ≥ 1 ¬(𝑥2 + 𝑦2 ≤ 1)
¬(𝑥2 + 𝑦2 ≤ 1) ∨ 𝑥 ≤ 1 ¬ 𝑥 ≥ 2 ∨ ¬(𝑥2 + 𝑦2 ≤ 1)
![Page 110: Internals of SMT Solvers - GitHub Pages](https://reader036.fdocuments.net/reader036/viewer/2022081700/62d7a25ba53aae24272f0ba3/html5/thumbnails/110.jpg)
𝑥 ≥ 2, ¬𝑥 ≥ 1 ∨ 𝑦 ≥ 1 , (𝑥2 + 𝑦2 ≤ 1 ∨ 𝑥𝑦 > 1)
𝑥 ≥ 2 𝑥 ≥ 1 𝑦 ≥ 1 𝑥2 + 𝑦2 ≤ 1 𝑥 ≤ 1
¬(𝑥2 + 𝑦2 ≤ 1) ∨ 𝑥 ≤ 1 Conflict
¬ 𝑥 ≥ 2 ∨ ¬(𝑥 ≤ 1)
𝑥 ≥ 2, ¬𝑥 ≥ 1 ∨ 𝑦 ≥ 1 , (𝑥2 + 𝑦2 ≤ 1 ∨ 𝑥𝑦 > 1)
𝑥 ≥ 2 𝑥 ≥ 1 𝑦 ≥ 1 ¬(𝑥2 + 𝑦2 ≤ 1)
¬(𝑥2 + 𝑦2 ≤ 1) ∨ 𝑥 ≤ 1 ¬ 𝑥 ≥ 2 ∨ ¬(𝑥2 + 𝑦2 ≤ 1)
![Page 111: Internals of SMT Solvers - GitHub Pages](https://reader036.fdocuments.net/reader036/viewer/2022081700/62d7a25ba53aae24272f0ba3/html5/thumbnails/111.jpg)
𝑥 < 1 ∨ 𝑝, ¬𝑝 ∨ 𝑥 = 2
𝑥 → 1
MCSat
![Page 112: Internals of SMT Solvers - GitHub Pages](https://reader036.fdocuments.net/reader036/viewer/2022081700/62d7a25ba53aae24272f0ba3/html5/thumbnails/112.jpg)
𝑥 < 1 ∨ 𝑝, ¬𝑝 ∨ 𝑥 = 2
𝑥 → 1
MCSat
𝑝
![Page 113: Internals of SMT Solvers - GitHub Pages](https://reader036.fdocuments.net/reader036/viewer/2022081700/62d7a25ba53aae24272f0ba3/html5/thumbnails/113.jpg)
𝑥 < 1 ∨ 𝑝, ¬𝑝 ∨ 𝑥 = 2
𝑥 → 1
MCSat
𝑝
Conflict (evaluates to false)
![Page 114: Internals of SMT Solvers - GitHub Pages](https://reader036.fdocuments.net/reader036/viewer/2022081700/62d7a25ba53aae24272f0ba3/html5/thumbnails/114.jpg)
𝑥 < 1 ∨ 𝑝, ¬𝑝 ∨ 𝑥 = 2
𝑥 → 1
MCSat
𝑝
New clause
𝑥 < 1 ∨ 𝑥 = 2
![Page 115: Internals of SMT Solvers - GitHub Pages](https://reader036.fdocuments.net/reader036/viewer/2022081700/62d7a25ba53aae24272f0ba3/html5/thumbnails/115.jpg)
𝑥 < 1 ∨ 𝑝, ¬𝑝 ∨ 𝑥 = 2
𝑥 → 1
MCSat
𝑝
New clause
𝑥 < 1 ∨ 𝑥 = 2
𝑥 < 1
![Page 116: Internals of SMT Solvers - GitHub Pages](https://reader036.fdocuments.net/reader036/viewer/2022081700/62d7a25ba53aae24272f0ba3/html5/thumbnails/116.jpg)
𝑥 < 1 ∨ 𝑝, ¬𝑝 ∨ 𝑥 = 2
𝑥 → 1
MCSat
𝑝
New clause
𝑥 < 1 ∨ 𝑥 = 2
𝑥 < 1
![Page 117: Internals of SMT Solvers - GitHub Pages](https://reader036.fdocuments.net/reader036/viewer/2022081700/62d7a25ba53aae24272f0ba3/html5/thumbnails/117.jpg)
MCSat: Architecture
Arithmetic
Boolean Lists
Arrays
![Page 118: Internals of SMT Solvers - GitHub Pages](https://reader036.fdocuments.net/reader036/viewer/2022081700/62d7a25ba53aae24272f0ba3/html5/thumbnails/118.jpg)
MCSat: development
![Page 119: Internals of SMT Solvers - GitHub Pages](https://reader036.fdocuments.net/reader036/viewer/2022081700/62d7a25ba53aae24272f0ba3/html5/thumbnails/119.jpg)
MCSat prototype: 7k lines of code Deduction Rules
Boolean Resolution
Fourier-Motzkin
Equality Split
Ackermann expansion aka Congruence
Normalization
![Page 120: Internals of SMT Solvers - GitHub Pages](https://reader036.fdocuments.net/reader036/viewer/2022081700/62d7a25ba53aae24272f0ba3/html5/thumbnails/120.jpg)
MCSat: preliminary results prototype: 7k lines of code
QF_LRA
![Page 121: Internals of SMT Solvers - GitHub Pages](https://reader036.fdocuments.net/reader036/viewer/2022081700/62d7a25ba53aae24272f0ba3/html5/thumbnails/121.jpg)
MCSat: preliminary results prototype: 7k lines of code
QF_UFLRA and QF_UFLIA
![Page 122: Internals of SMT Solvers - GitHub Pages](https://reader036.fdocuments.net/reader036/viewer/2022081700/62d7a25ba53aae24272f0ba3/html5/thumbnails/122.jpg)
Conclusion
Mode-driven techniques are very promising
Preprocessing
MCSat: new framework for developing SMT solvers MCSat generalizes NLSat
Modular architecture
CEGAR
![Page 123: Internals of SMT Solvers - GitHub Pages](https://reader036.fdocuments.net/reader036/viewer/2022081700/62d7a25ba53aae24272f0ba3/html5/thumbnails/123.jpg)
Resources: Papers
The Strategy Challenge in SMT Solving, L. de Moura and G. Passmore.
http://research.microsoft.com/en-us/um/people/leonardo/files/smt-strategy.pdf
Solving non-linear arithmetic, D. Jovanovic and L. de Moura
http://research.microsoft.com/en-us/um/people/leonardo/files/IJCAR2012.pdf
A Model Constructing Satisfiability Calculus, L. de Moura and D. Jovanonic
http://research.microsoft.com/en-us/um/people/leonardo/files/mcsat.pdf
The Design and Implementation of the Model Constructing Satisfiability Calculus,
D. Jovanovic, C. Barrett , L. de Moura
http://research.microsoft.com/en-us/um/people/leonardo/mcsat_design.pdf
![Page 124: Internals of SMT Solvers - GitHub Pages](https://reader036.fdocuments.net/reader036/viewer/2022081700/62d7a25ba53aae24272f0ba3/html5/thumbnails/124.jpg)
Resources: Source Code
nlsat https://z3.codeplex.com/SourceControl/latest#src/nlsat/
mcsat https://github.com/dddejan/CVC4/tree/mcsat
tactic/preprocessors https://z3.codeplex.com/SourceControl/latest#src/tactic/