ENS 2017-2018 Satis abilit e Modulo Th eories (SMT)conchon/ENS/cours10.pdf · Plan du cours 1....
Transcript of ENS 2017-2018 Satis abilit e Modulo Th eories (SMT)conchon/ENS/cours10.pdf · Plan du cours 1....
ENS 2017-2018
Satisfiabilite Modulo Theories (SMT)
Sylvain Conchon
LRI (UMR 8623), Universite Paris-SudEquipe Toccata, INRIA Saclay – Ile-de-France
1
Plan du cours
1. Solveur SAT modernes
2. De petits moteurs de preuve
3. Interfacer SAT avec des procedures de decision
4. Combinaison de procedures de decision
5. Conclusion
6. Projet
2
Comment resoudre le probleme SAT ?
I Tables de verites
I Le principe de resolution (DP [1960])
I Technique de rebroussement (DPLL [1962])
Les recherches autour de l’algorithme DPLL:
I Annee 80 - 90: heuristiques sur la selection des variables
I Techniques d’elagage et d’apprentissage: backjumping, clauselearning (Grasp [1996]) CDCL
I Indexation: two-watched literals (Zchaff, 2001)
I Scoring: supprimer les clauses apprises devenues inutiles(Glucose, 2009)
5
Comment resoudre le probleme SAT ?
I Tables de verites
I Le principe de resolution (DP [1960])
I Technique de rebroussement (DPLL [1962])
Les recherches autour de l’algorithme DPLL:
I Annee 80 - 90: heuristiques sur la selection des variables
I Techniques d’elagage et d’apprentissage: backjumping, clauselearning (Grasp [1996]) CDCL
I Indexation: two-watched literals (Zchaff, 2001)
I Scoring: supprimer les clauses apprises devenues inutiles(Glucose, 2009)
5
Propositional Logic : Notations
p, q, r, s are propositional variables or atoms
l is a literal (p or ¬p)
¬l =
{¬p if l is pp if l is ¬p
A disjunction of literals l1 ∨ . . . ∨ ln is a clause
The empty clause is written ⊥
A conjunction of clauses is a CNF
To improve readability, we sometime
I denote atoms by natural numbers and negation by overliningI write CNF as sets of clauses
e.g. (¬l1 ∨ l2 ∨ ¬l3) ∧ (l4 ∨ ¬2) is simply written {1 ∨ 2 ∨ 3, 4 ∨ 2}6
Propositional Logic : Assignments
An assignment M is a set of literals such that if l ∈M then¬l 6∈M
A literal l is true in M if l ∈M , and false if ¬l ∈M
A literal l is defined in M if it is either true or false in M
A clause is true in M if at least one of its literal is true in M , it isfalse if all its literals are false in M , it is undefined otherwise
The empty clause ⊥ is not satisfiable
A clause C ∨ l is a unit clause in M if C is false in M and l isundefined in M
7
Propositional Logic : Satisfiability
A CNF F is satisfied by M (or M is a model of F ), writtenM |= F , if all clauses of F are true in M
If F has no model then it is unsatisfiable
F ′ is entailed by F , written F |= F ′, if F ′ is true in all models of F
F and F ′ are equivalent when F |= F ′ and F ′ |= F
F and F ′ are equisatisfiable whenF is satisfiable if and only if F ′ is satisfiable
F is valid if and only if ¬F is unsatisfiable
8
Resolution
Modus Ponens : from P and ¬P ∨Q we deduce Q
The Resolution principle generalizes modus ponens :
from P ∨ ϕ1 and ¬P ∨ ϕ2 we deduce ϕ1 ∨ ϕ2
A decision procedure based on resolution:
I Proof-finder procedure
I Works by saturation of resolution until the empty clause isderived
Exhaustive resolution is not practical:
exponential amount of memory
9
Resolution : State of the Procedure
The state of the procedure is represented by a variable (imperativestyle) F containing a set of clauses (CNF)
10
Resolution : Algorithm
ResolveC ∨ l ∈ F D ∨ ¬l ∈ F C ∨D 6∈ F
F := F ∪ {C ∨D}
Emptyl ∈ F ¬l ∈ FF := F ∪ ⊥
TautoF = F ′ ] {C ∨ l ∨ ¬l}
F := F ′
SubsumeF = F ′ ] {C ∨D} C ∈ F ′
F := F ′
Fail⊥ ∈ F
returnUnsat
11
Resolution : Example
Resolve1 ∨ 2 ∨ 3 ∈ F 1 ∨ 3 ∈ F
F := F ∪ {2 ∨ 3}
F = {1 ∨ 2 ∨ 3, 1 ∨ 2, 1 ∨ 3, 3}
12
Resolution : Example
Resolve1 ∨ 2 ∨ 3 ∈ F 1 ∨ 3 ∈ F
F := F ∪ {2 ∨ 3}
F = {1 ∨ 2 ∨ 3, 1 ∨ 2, 1 ∨ 3, 3, 2 ∨ 3}
12
Resolution : Example
SubsumeF = F ′ ] {1 ∨ 2 ∨ 3} 2 ∨ 3 ∈ F ′
F := F ′
F = {1 ∨ 2 ∨ 3, 1 ∨ 2, 1 ∨ 3, 3, 2 ∨ 3}
12
Resolution : Example
SubsumeF = F ′ ] {1 ∨ 2 ∨ 3} 2 ∨ 3 ∈ F ′
F := F ′
F = {1 ∨ 2, 1 ∨ 3, 3, 2 ∨ 3}
12
Resolution : Example
Resolve1 ∨ 2 ∈ F 1 ∨ 3 ∈ F
F := F ∪ {2 ∨ 3}
F = {1 ∨ 2, 1 ∨ 3, 3, 2 ∨ 3, 2 ∨ 3}
12
Resolution : Example
Resolve2 ∨ 3 ∈ F 2 ∨ 3 ∈ F
F := F ∪ {3}
F = {1 ∨ 2, 1 ∨ 3, 3, 2 ∨ 3, 2 ∨ 3, 3}
12
DPLL
DPLL is a model-finder procedure that builds incrementally amodel M for a CNF formula F by
I deducing the truth value of a literal l from M and F byBoolean Constraint Propagations (BCP)
If C ∨ l ∈ F and M |= ¬C then l must be true
I guessing the truth value of an unassigned literal
If M ∪ {l} leads to a model for which F is unsatisfiablethen backtrack and try M ∪ {¬l}
13
DPLL : State of the Procedure
The state of the procedure is represented by
I a variable F containing a set of clauses (CNF)
I a variable M containing a list of literals
14
DPLL : Algorithm
SuccessM |= F
return Sat
UnitC ∨ l ∈ F M |= ¬C l is undefined in M
M := l :: M
Decidel is undefined in M l (or ¬l) ∈ F
M := l@ :: M
Backtrack
C ∈ F M |= ¬C M = M1 :: l@ :: M2
M1 contains no decision literals
M := ¬l :: M2
FailC ∈ F M |= ¬C M contains no decision literals
return Unsat15
DPLL : Example
Decide1 is undefined in M 1 ∈ F
M := 1@ :: M
M = []
F = {1 ∨ 2, 3 ∨ 4, 5 ∨ 6, 6 ∨ 5 ∨ 2, 5 ∨ 7, 5 ∨ 7 ∨ 2}
16
DPLL : Example
Decide1 is undefined in M 1 ∈ F
M := 1@ :: M
M = [1@]
F = {1 ∨ 2, 3 ∨ 4, 5 ∨ 6, 6 ∨ 5 ∨ 2, 5 ∨ 7, 5 ∨ 7 ∨ 2}
16
DPLL : Example
Unit1 ∨ 2 ∈ F M |= 1 2 is undefined in M
M := 2 :: M
M = [1@]
F = {1 ∨ 2, 3 ∨ 4, 5 ∨ 6, 6 ∨ 5 ∨ 2, 5 ∨ 7, 5 ∨ 7 ∨ 2}
16
DPLL : Example
Unit1 ∨ 2 ∈ F M |= 1 2 is undefined in M
M := 2 :: M
M = [2; 1@]
F = {1 ∨ 2, 3 ∨ 4, 5 ∨ 6, 6 ∨ 5 ∨ 2, 5 ∨ 7, 5 ∨ 7 ∨ 2}
16
DPLL : Example
Decide3 is undefined in M 3 ∈ F
M := 3@ :: M
M = [2; 1@]
F = {1 ∨ 2, 3 ∨ 4, 5 ∨ 6, 6 ∨ 5 ∨ 2, 5 ∨ 7, 5 ∨ 7 ∨ 2}
16
DPLL : Example
Decide3 is undefined in M 3 ∈ F
M := 3@ :: M
M = [3@; 2; 1@]
F = {1 ∨ 2, 3 ∨ 4, 5 ∨ 6, 6 ∨ 5 ∨ 2, 5 ∨ 7, 5 ∨ 7 ∨ 2}
16
DPLL : Example
Unit3 ∨ 4 ∈ F M |= 3 4 is undefined in M
M := 4 :: M
M = [3@; 2; 1@]
F = {1 ∨ 2, 3 ∨ 4, 5 ∨ 6, 6 ∨ 5 ∨ 2, 5 ∨ 7, 5 ∨ 7 ∨ 2}
16
DPLL : Example
Unit3 ∨ 4 ∈ F M |= 3 4 is undefined in M
M := 4 :: M
M = [4; 3@; 2; 1@]
F = {1 ∨ 2, 3 ∨ 4, 5 ∨ 6, 6 ∨ 5 ∨ 2, 5 ∨ 7, 5 ∨ 7 ∨ 2}
16
DPLL : Example
Decide5 is undefined in M 5 ∈ F
M := 5@ :: M
M = [4; 3@; 2; 1@]
F = {1 ∨ 2, 3 ∨ 4, 5 ∨ 6, 6 ∨ 5 ∨ 2, 5 ∨ 7, 5 ∨ 7 ∨ 2}
16
DPLL : Example
Decide5 is undefined in M 5 ∈ F
M := 5@ :: M
M = [5@; 4; 3@; 2; 1@]
F = {1 ∨ 2, 3 ∨ 4, 5 ∨ 6, 6 ∨ 5 ∨ 2, 5 ∨ 7, 5 ∨ 7 ∨ 2}
16
DPLL : Example
Unit5 ∨ 6 ∈ F M |= 5 6 is undefined in M
M := 6 :: M
M = [5@; 4; 3@; 2; 1@]
F = {1 ∨ 2, 3 ∨ 4, 5 ∨ 6, 6 ∨ 5 ∨ 2, 5 ∨ 7, 5 ∨ 7 ∨ 2}
16
DPLL : Example
Unit5 ∨ 6 ∈ F M |= 5 6 is undefined in M
M := 6 :: M
M = [6; 5@; 4; 3@; 2; 1@]
F = {1 ∨ 2, 3 ∨ 4, 5 ∨ 6, 6 ∨ 5 ∨ 2, 5 ∨ 7, 5 ∨ 7 ∨ 2}
16
DPLL : Example
Backtrack
6 ∨ 5 ∨ 2 ∈ FM |= 6 ∧ 5 ∧ 2 M = [6] :: 5@ :: [4; 3@; 2; 1@]
M := 5 :: [4; 3@; 2; 1@]
M = [6; 5@; 4; 3@; 2; 1@]
F = {1 ∨ 2, 3 ∨ 4, 5 ∨ 6, 6 ∨ 5 ∨ 2, 5 ∨ 7, 5 ∨ 7 ∨ 2}
16
DPLL : Example
Backtrack
6 ∨ 5 ∨ 2 ∈ FM |= 6 ∧ 5 ∧ 2 M = [6] :: 5@ :: [4; 3@; 2; 1@]
M := 5 :: [4; 3@; 2; 1@]
M = [5; 4; 3@; 2; 1@]
F = {1 ∨ 2, 3 ∨ 4, 5 ∨ 6, 6 ∨ 5 ∨ 2, 5 ∨ 7, 5 ∨ 7 ∨ 2}
16
DPLL : Example
Unit5 ∨ 7 ∈ F M |= 5 7 is undefined in M
M := 7 :: M
M = [5; 4; 3@; 2; 1@]
F = {1 ∨ 2, 3 ∨ 4, 5 ∨ 6, 6 ∨ 5 ∨ 2, 5 ∨ 7, 5 ∨ 7 ∨ 2}
16
DPLL : Example
Unit5 ∨ 7 ∈ F M |= 5 7 is undefined in M
M := 7 :: M
M = [7; 5; 4; 3@; 2; 1@]
F = {1 ∨ 2, 3 ∨ 4, 5 ∨ 6, 6 ∨ 5 ∨ 2, 5 ∨ 7, 5 ∨ 7 ∨ 2}
16
DPLL : Example
Backtrack
5 ∨ 7 ∨ 2 ∈ FM |= 5 ∧ 7 ∧ 2 M = [7; 5; 4] :: 3@ :: [2; 1@]
M := 3 :: [2; 1@]
M = [7; 5; 4; 3@; 2; 1@]
F = {1 ∨ 2, 3 ∨ 4, 5 ∨ 6, 6 ∨ 5 ∨ 2, 5 ∨ 7, 5 ∨ 7 ∨ 2}
16
DPLL : Example
Backtrack
5 ∨ 7 ∨ 2 ∈ FM |= 5 ∧ 7 ∧ 2 M = [7; 5; 4] :: 3@ :: [2; 1@]
M := 3 :: [2; 1@]
M = [3; 2; 1@]
F = {1 ∨ 2, 3 ∨ 4, 5 ∨ 6, 6 ∨ 5 ∨ 2, 5 ∨ 7, 5 ∨ 7 ∨ 2}
16
DPLL : Example
Decide5 is undefined in M 5 ∈ F
M := 5@ :: M
M = [3; 2; 1@]
F = {1 ∨ 2, 3 ∨ 4, 5 ∨ 6, 6 ∨ 5 ∨ 2, 5 ∨ 7, 5 ∨ 7 ∨ 2}
16
DPLL : Example
Decide5 is undefined in M 5 ∈ F
M := 5@ :: M
M = [5@; 3; 2; 1@]
F = {1 ∨ 2, 3 ∨ 4, 5 ∨ 6, 6 ∨ 5 ∨ 2, 5 ∨ 7, 5 ∨ 7 ∨ 2}
16
DPLL : Example
Unit5 ∨ 6 ∈ F M |= 5 6 is undefined in M
M := 6 :: M
M = [5@; 3; 2; 1@]
F = {1 ∨ 2, 3 ∨ 4, 5 ∨ 6, 6 ∨ 5 ∨ 2, 5 ∨ 7, 5 ∨ 7 ∨ 2}
16
DPLL : Example
Unit5 ∨ 6 ∈ F M |= 5 6 is undefined in M
M := 6 :: M
M = [6; 5@; 3; 2; 1@]
F = {1 ∨ 2, 3 ∨ 4, 5 ∨ 6, 6 ∨ 5 ∨ 2, 5 ∨ 7, 5 ∨ 7 ∨ 2}
16
DPLL : Example
Backtrack
6 ∨ 5 ∨ 2 ∈ FM |= 6 ∧ 5 ∧ 2 M = [6] :: 5@ :: [3; 2; 1@]
M := 5 :: [3; 2; 1@]
M = [6; 5@; 3; 2; 1@]
F = {1 ∨ 2, 3 ∨ 4, 5 ∨ 6, 6 ∨ 5 ∨ 2, 5 ∨ 7, 5 ∨ 7 ∨ 2}
16
DPLL : Example
Backtrack
6 ∨ 5 ∨ 2 ∈ FM |= 6 ∧ 5 ∧ 2 M = [6] :: 5@ :: [3; 2; 1@]
M := 5 :: [3; 2; 1@]
M = [5; 3; 2; 1@]
F = {1 ∨ 2, 3 ∨ 4, 5 ∨ 6, 6 ∨ 5 ∨ 2, 5 ∨ 7, 5 ∨ 7 ∨ 2}
16
DPLL : Example
Unit5 ∨ 7 ∈ F M |= 5 7 is undefined in M
M := 7 :: M
M = [5; 3; 2; 1@]
F = {1 ∨ 2, 3 ∨ 4, 5 ∨ 6, 6 ∨ 5 ∨ 2, 5 ∨ 7, 5 ∨ 7 ∨ 2}
16
DPLL : Example
Unit5 ∨ 7 ∈ F M |= 5 7 is undefined in M
M := 7 :: M
M = [7; 5; 3; 2; 1@]
F = {1 ∨ 2, 3 ∨ 4, 5 ∨ 6, 6 ∨ 5 ∨ 2, 5 ∨ 7, 5 ∨ 7 ∨ 2}
16
DPLL : Example
Backtrack
5 ∨ 7 ∨ 2 ∈ FM |= 5 ∧ 7 ∧ 2 M = [7; 5; 3; 2] :: 1@ :: []
M := 1 :: []
M = [7; 5; 3; 2; 1@]
F = {1 ∨ 2, 3 ∨ 4, 5 ∨ 6, 6 ∨ 5 ∨ 2, 5 ∨ 7, 5 ∨ 7 ∨ 2}
16
DPLL : Example
Backtrack
5 ∨ 7 ∨ 2 ∈ FM |= 5 ∧ 7 ∧ 2 M = [7; 5; 3; 2] :: 1@ :: []
M := 1 :: []
M = [1]
F = {1 ∨ 2, 3 ∨ 4, 5 ∨ 6, 6 ∨ 5 ∨ 2, 5 ∨ 7, 5 ∨ 7 ∨ 2}
16
DPLL : Example
Decide3 is undefined in M 3 ∈ F
M := 3@ :: M
M = [1]
F = {1 ∨ 2, 3 ∨ 4, 5 ∨ 6, 6 ∨ 5 ∨ 2, 5 ∨ 7, 5 ∨ 7 ∨ 2}
16
DPLL : Example
Decide3 is undefined in M 3 ∈ F
M := 3@ :: M
M = [3@; 1]
F = {1 ∨ 2, 3 ∨ 4, 5 ∨ 6, 6 ∨ 5 ∨ 2, 5 ∨ 7, 5 ∨ 7 ∨ 2}
16
DPLL : Example
Decide5 is undefined in M 5 ∈ F
M := 5@ :: M
M = [3@; 1]
F = {1 ∨ 2, 3 ∨ 4, 5 ∨ 6, 6 ∨ 5 ∨ 2, 5 ∨ 7, 5 ∨ 7 ∨ 2}
16
DPLL : Example
Decide5 is undefined in M 5 ∈ F
M := 5@ :: M
M = [5@; 3@; 1]
F = {1 ∨ 2, 3 ∨ 4, 5 ∨ 6, 6 ∨ 5 ∨ 2, 5 ∨ 7, 5 ∨ 7 ∨ 2}
16
DPLL : Example
Unit5 ∨ 7 ∈ F M |= 5 7 is undefined in M
M := 7 :: M
M = [5@; 3@; 1]
F = {1 ∨ 2, 3 ∨ 4, 5 ∨ 6, 6 ∨ 5 ∨ 2, 5 ∨ 7, 5 ∨ 7 ∨ 2}
16
DPLL : Example
Unit5 ∨ 7 ∈ F M |= 5 7 is undefined in M
M := 7 :: M
M = [7; 5@; 3@; 1]
F = {1 ∨ 2, 3 ∨ 4, 5 ∨ 6, 6 ∨ 5 ∨ 2, 5 ∨ 7, 5 ∨ 7 ∨ 2}
16
DPLL : Example
Unit5 ∨ 7 ∨ 2 ∈ F M |= 5 ∧ 7 2 is undefined in M
M := 2 :: M
M = [7; 5@; 3@; 1]
F = {1 ∨ 2, 3 ∨ 4, 5 ∨ 6, 6 ∨ 5 ∨ 2, 5 ∨ 7, 5 ∨ 7 ∨ 2}
16
DPLL : Example
Unit5 ∨ 7 ∨ 2 ∈ F M |= 5 ∧ 7 2 is undefined in M
M := 2 :: M
M = [2; 7; 5@; 3@; 1]
F = {1 ∨ 2, 3 ∨ 4, 5 ∨ 6, 6 ∨ 5 ∨ 2, 5 ∨ 7, 5 ∨ 7 ∨ 2}
16
DPLL : Example
SuccessM |= F
return Sat
M = [2; 7; 5@; 3@; 1]
F = {1 ∨ 2, 3 ∨ 4, 5 ∨ 6, 6 ∨ 5 ∨ 2, 5 ∨ 7, 5 ∨ 7 ∨ 2}
16
DPLL : a strategy
def dpll(φ):µ = []
dl = 0
while True:
res = boolean_propagation(φ,µ)if res == SAT:
if all_variables_are_assigned(φ,µ):return SAT
l = pick_a_branching_literal(φ,µ)dl = dl + 1
push(µ,l@dl)else:
if dl == 0:
return UNSAT
backtrack(µ)dl = dl - 1
17
Backjumping
I The clause 6 ∨ 5 ∨ 2 is false in [6; 5@; 4; 3@; 2; 1@]
I It is also false in [6; 5@; ; 2; 1@]
I Instead of backtracking to M = [5; 4; 3@; 2; 1@], we wouldprefer to backjump directly to M = [5; 2; 1@]
18
Backjump Clauses
Conflict are reflected by backjump clauses
For instance, we have the following backjump clauses in theprevious example:
F |= 1 ∨ 5F |= 2 ∨ 5
Given a backjump clause C ∨ l, backjumping can undo severaldecisions at once: it goes back to the assignment M whereM |= ¬C and add l to M
19
DPLL + Backjumping
We just replace Backtrack by
Backjump
C ∈ F M |= ¬C M = M1 :: l@ :: M2
F |= C ′ ∨ l′ M2 |= ¬C ′l′ is undefined in M2 l′ (or ¬l′) ∈ F
M := l′ :: M2
where C ′ ∨ l′ is a backjump clause
20
Backjumping : Example
Decide1 is undefined in M 1 ∈ F
M := 1@ :: M
M = []
F = {1 ∨ 2, 3 ∨ 4, 5 ∨ 6, 6 ∨ 5 ∨ 2, 5 ∨ 7, 5 ∨ 7 ∨ 2}
21
Backjumping : Example
Decide1 is undefined in M 1 ∈ F
M := 1@ :: M
M = [1@]
F = {1 ∨ 2, 3 ∨ 4, 5 ∨ 6, 6 ∨ 5 ∨ 2, 5 ∨ 7, 5 ∨ 7 ∨ 2}
21
Backjumping : Example
Unit1 ∨ 2 ∈ F M |= 1 2 is undefined in M
M := 2 :: M
M = [1@]
F = {1 ∨ 2, 3 ∨ 4, 5 ∨ 6, 6 ∨ 5 ∨ 2, 5 ∨ 7, 5 ∨ 7 ∨ 2}
21
Backjumping : Example
Unit1 ∨ 2 ∈ F M |= 1 2 is undefined in M
M := 2 :: M
M = [2; 1@]
F = {1 ∨ 2, 3 ∨ 4, 5 ∨ 6, 6 ∨ 5 ∨ 2, 5 ∨ 7, 5 ∨ 7 ∨ 2}
21
Backjumping : Example
Decide3 is undefined in M 3 ∈ F
M := 3@ :: M
M = [2; 1@]
F = {1 ∨ 2, 3 ∨ 4, 5 ∨ 6, 6 ∨ 5 ∨ 2, 5 ∨ 7, 5 ∨ 7 ∨ 2}
21
Backjumping : Example
Decide3 is undefined in M 3 ∈ F
M := 3@ :: M
M = [3@; 2; 1@]
F = {1 ∨ 2, 3 ∨ 4, 5 ∨ 6, 6 ∨ 5 ∨ 2, 5 ∨ 7, 5 ∨ 7 ∨ 2}
21
Backjumping : Example
Unit3 ∨ 4 ∈ F M |= 3 4 is undefined in M
M := 4 :: M
M = [3@; 2; 1@]
F = {1 ∨ 2, 3 ∨ 4, 5 ∨ 6, 6 ∨ 5 ∨ 2, 5 ∨ 7, 5 ∨ 7 ∨ 2}
21
Backjumping : Example
Unit3 ∨ 4 ∈ F M |= 3 4 is undefined in M
M := 4 :: M
M = [4; 3@; 2; 1@]
F = {1 ∨ 2, 3 ∨ 4, 5 ∨ 6, 6 ∨ 5 ∨ 2, 5 ∨ 7, 5 ∨ 7 ∨ 2}
21
Backjumping : Example
Decide5 is undefined in M 5 ∈ F
M := 5@ :: M
M = [4; 3@; 2; 1@]
F = {1 ∨ 2, 3 ∨ 4, 5 ∨ 6, 6 ∨ 5 ∨ 2, 5 ∨ 7, 5 ∨ 7 ∨ 2}
21
Backjumping : Example
Decide5 is undefined in M 5 ∈ F
M := 5@ :: M
M = [5@; 4; 3@; 2; 1@]
F = {1 ∨ 2, 3 ∨ 4, 5 ∨ 6, 6 ∨ 5 ∨ 2, 5 ∨ 7, 5 ∨ 7 ∨ 2}
21
Backjumping : Example
Unit5 ∨ 6 ∈ F M |= 5 6 is undefined in M
M := 6 :: M
M = [5@; 4; 3@; 2; 1@]
F = {1 ∨ 2, 3 ∨ 4, 5 ∨ 6, 6 ∨ 5 ∨ 2, 5 ∨ 7, 5 ∨ 7 ∨ 2}
21
Backjumping : Example
Unit5 ∨ 6 ∈ F M |= 5 6 is undefined in M
M := 6 :: M
M = [6; 5@; 4; 3@; 2; 1@]
F = {1 ∨ 2, 3 ∨ 4, 5 ∨ 6, 6 ∨ 5 ∨ 2, 5 ∨ 7, 5 ∨ 7 ∨ 2}
21
Backjumping : Example
Backjump
6 ∨ 5 ∨ 2 ∈ F M |= 6 ∧ 5 ∧ 2
M = [6; 5@; 4] :: 3@ :: [2; 1@] F |= 2 ∨ 5
[2; 1@] |= 2 5 is undefined in [2; 1@]
M := 5 :: [2; 1@]
M = [6; 5@; 4; 3@; 2; 1@]
F = {1 ∨ 2, 3 ∨ 4, 5 ∨ 6, 6 ∨ 5 ∨ 2, 5 ∨ 7, 5 ∨ 7 ∨ 2}
21
Backjumping : Example
Backjump
6 ∨ 5 ∨ 2 ∈ F M |= 6 ∧ 5 ∧ 2
M = [6; 5@; 4] :: 3@ :: [2; 1@] F |= 2 ∨ 5
[2; 1@] |= 2 5 is undefined in [2; 1@]
M := 5 :: [2; 1@]
M = [5; 2; 1@]
F = {1 ∨ 2, 3 ∨ 4, 5 ∨ 6, 6 ∨ 5 ∨ 2, 5 ∨ 7, 5 ∨ 7 ∨ 2}
21
Backjumping : Example
Unit5 ∨ 7 ∈ F M |= 5 7 is undefined in M
M := 7 :: M
M = [5; 2; 1@]
F = {1 ∨ 2, 3 ∨ 4, 5 ∨ 6, 6 ∨ 5 ∨ 2, 5 ∨ 7, 5 ∨ 7 ∨ 2}
21
Backjumping : Example
Unit5 ∨ 7 ∈ F M |= 5 7 is undefined in M
M := 7 :: M
M = [7; 5; 2; 1@]
F = {1 ∨ 2, 3 ∨ 4, 5 ∨ 6, 6 ∨ 5 ∨ 2, 5 ∨ 7, 5 ∨ 7 ∨ 2}
21
Backjumping : Example
Backjump
5 ∨ 7 ∨ 2 ∈ FM |= 5 ∧ 7 ∧ 2 M = [7; 5; 2] :: 1@ :: []F |= 1 [] |= true 1 is undefined in []
M := 1 :: []
M = [7; 5; 2; 1@]
F = {1 ∨ 2, 3 ∨ 4, 5 ∨ 6, 6 ∨ 5 ∨ 2, 5 ∨ 7, 5 ∨ 7 ∨ 2}
21
Backjumping : Example
Backjump
5 ∨ 7 ∨ 2 ∈ FM |= 5 ∧ 7 ∧ 2 M = [7; 5; 2] :: 1@ :: []F |= 1 [] |= true 1 is undefined in []
M := 1 :: []
M = [1]
F = {1 ∨ 2, 3 ∨ 4, 5 ∨ 6, 6 ∨ 5 ∨ 2, 5 ∨ 7, 5 ∨ 7 ∨ 2}
21
Backjumping : Example
Decide3 is undefined in M 3 ∈ F
M := 3@ :: M
M = [1]
F = {1 ∨ 2, 3 ∨ 4, 5 ∨ 6, 6 ∨ 5 ∨ 2, 5 ∨ 7, 5 ∨ 7 ∨ 2}
21
Backjumping : Example
Decide3 is undefined in M 3 ∈ F
M := 3@ :: M
M = [3@; 1]
F = {1 ∨ 2, 3 ∨ 4, 5 ∨ 6, 6 ∨ 5 ∨ 2, 5 ∨ 7, 5 ∨ 7 ∨ 2}
21
Backjumping : Example
Decide5 is undefined in M 5 ∈ F
M := 5@ :: M
M = [3@; 1]
F = {1 ∨ 2, 3 ∨ 4, 5 ∨ 6, 6 ∨ 5 ∨ 2, 5 ∨ 7, 5 ∨ 7 ∨ 2}
21
Backjumping : Example
Decide5 is undefined in M 5 ∈ F
M := 5@ :: M
M = [5@; 3@; 1]
F = {1 ∨ 2, 3 ∨ 4, 5 ∨ 6, 6 ∨ 5 ∨ 2, 5 ∨ 7, 5 ∨ 7 ∨ 2}
21
Backjumping : Example
Unit5 ∨ 7 ∈ F M |= 5 7 is undefined in M
M := 7 :: M
M = [5@; 3@; 1]
F = {1 ∨ 2, 3 ∨ 4, 5 ∨ 6, 6 ∨ 5 ∨ 2, 5 ∨ 7, 5 ∨ 7 ∨ 2}
21
Backjumping : Example
Unit5 ∨ 7 ∈ F M |= 5 7 is undefined in M
M := 7 :: M
M = [7; 5@; 3@; 1]
F = {1 ∨ 2, 3 ∨ 4, 5 ∨ 6, 6 ∨ 5 ∨ 2, 5 ∨ 7, 5 ∨ 7 ∨ 2}
21
Backjumping : Example
Unit5 ∨ 7 ∨ 2 ∈ F M |= 5 ∧ 7 2 is undefined in M
M := 2 :: M
M = [7; 5@; 3@; 1]
F = {1 ∨ 2, 3 ∨ 4, 5 ∨ 6, 6 ∨ 5 ∨ 2, 5 ∨ 7, 5 ∨ 7 ∨ 2}
21
Backjumping : Example
Unit5 ∨ 7 ∨ 2 ∈ F M |= 5 ∧ 7 2 is undefined in M
M := 2 :: M
M = [2; 7; 5@; 3@; 1]
F = {1 ∨ 2, 3 ∨ 4, 5 ∨ 6, 6 ∨ 5 ∨ 2, 5 ∨ 7, 5 ∨ 7 ∨ 2}
21
Backjumping : Example
SuccessM |= F
return Sat
M = [2; 7; 5@; 3@; 1]
F = {1 ∨ 2, 3 ∨ 4, 5 ∨ 6, 6 ∨ 5 ∨ 2, 5 ∨ 7, 5 ∨ 7 ∨ 2}
21
CDCL
Conflict-Driven Clause Learning SAT solvers (CDCL) addbackjump clauses to M as learned clauses (or lemmas) to preventfuture similar conflicts.
LearnF |= C each atom of C occurs in F or M
F := F ∪ {C}
Lemmas can also be removed from M
ForgetF = F ′ ] C F ′ |= C
F := F ′
22
How to Find Backjump Clauses?
1. Build an implication graph that captures the way propagationliterals have been derived from decision literals
2. Use the implication graph to explain a conflict (by a specificcutting technique) and extract backjump clauses
23
Implication Graph
An implication graph G is a DAG that can be built during the runof DPLL as follows:
1. Create a node for each decision literal
2. For each clause l1 ∨ . . . ∨ ln ∨ l such that ¬l1, . . . ,¬ln arenodes in G, add a node for l (if not already present in thegraph), and add edges ¬li → l, for 1 ≤ i ≤ n (if not alreadypresent)
24
Implication Graph : Example
(Partial) implication graph for the following state of DPLL
F = {9∨ 6∨ 7∨ 8, 8∨ 7∨ 5, 6∨ 8∨ 4, 4∨ 1, 4∨ 5∨ 2, 5∨ 7∨ 3, 1∨ 2∨ 3}
M = [3; 2; 1; 4; 5; 8; 9@; . . . ; 7; . . . ; 6; . . .]
6
9
¬7
¬8
4
¬5
¬1
2
¬3
25
Cutting the Implication Graph
To extract backjump clauses, we first cut the implication graph intwo parts:
I the first part must contains (at least) all the nodes with noincoming arrows
I the second part must contains (at least) all the nodes with nooutgoing arrows
The literals whose outgoing edges are cut form a backjump clauseprovided that exactly one of these literals belongs to the currentdecision level.
26
Cutting the Implication Graph: Example
F = {9∨ 6∨ 7∨ 8, 8∨ 7∨ 5, 6∨ 8∨ 4, 4∨ 1, 4∨ 5∨ 2, 5∨ 7∨ 3, 1∨ 2∨ 3}
M = [3; 2; 1; 4; 5; 8; 9@; . . . ; 7; . . . ; 6; . . .]
6
9
¬7
¬8
4
¬5
¬1
2
¬3
27
Cutting the Implication Graph: Example
F = {9∨ 6∨ 7∨ 8, 8∨ 7∨ 5, 6∨ 8∨ 4, 4∨ 1, 4∨ 5∨ 2, 5∨ 7∨ 3, 1∨ 2∨ 3}
M = [3; 2; 1; 4; 5; 8; 9@; . . . ; 7; . . . ; 6; . . .]
6
9
¬7
¬8
4
¬5
¬1
2
¬3
27
Cutting the Implication Graph: Example
F = {9∨ 6∨ 7∨ 8, 8∨ 7∨ 5, 6∨ 8∨ 4, 4∨ 1, 4∨ 5∨ 2, 5∨ 7∨ 3, 1∨ 2∨ 3}
M = [3; 2; 1; 4; 5; 8; 9@; . . . ; 7; . . . ; 6; . . .]
6
9
¬7
¬8
4
¬5
¬1
2
¬3
27
Cutting the Implication Graph: Example
F = {9∨ 6∨ 7∨ 8, 8∨ 7∨ 5, 6∨ 8∨ 4, 4∨ 1, 4∨ 5∨ 2, 5∨ 7∨ 3, 1∨ 2∨ 3}
M = [3; 2; 1; 4; 5; 8; 9@; . . . ; 7; . . . ; 6; . . .]
6
9
¬7
¬8
4
¬5
¬1
2
¬3
¬6 v 8 v 7
27
Cutting the Implication Graph : Other Example
In the first example, Backjump is applied for the first time when
F = {1 ∨ 2, 3 ∨ 4, 5 ∨ 6, 6 ∨ 5 ∨ 2, 5 ∨ 7, 5 ∨ 7 ∨ 2}
M = [6; 5@; 4; 3@; 2; 1@]
1
2¬6
5
28
Cutting the Implication Graph : Other Example
In the first example, Backjump is applied for the first time when
F = {1 ∨ 2, 3 ∨ 4, 5 ∨ 6, 6 ∨ 5 ∨ 2, 5 ∨ 7, 5 ∨ 7 ∨ 2}
M = [6; 5@; 4; 3@; 2; 1@]
1
2¬6
5 ¬2 v ¬5
28
Cutting the Implication Graph : Other Example
In the first example, Backjump is applied for the first time when
F = {1 ∨ 2, 3 ∨ 4, 5 ∨ 6, 6 ∨ 5 ∨ 2, 5 ∨ 7, 5 ∨ 7 ∨ 2}
M = [6; 5@; 4; 3@; 2; 1@]
1
2¬6
5 ¬2 v ¬5 ¬1 v ¬5
28
Cutting the Implication Graph : Other Example
When Backjump is applied for the second time, we have
F = {1 ∨ 2, 3 ∨ 4, 5 ∨ 6, 6 ∨ 5 ∨ 2, 5 ∨ 7, 5 ∨ 7 ∨ 2}
M = [7; 5; 2; 1@]
1 2 ¬7¬5
¬2
29
Cutting the Implication Graph : Other Example
When Backjump is applied for the second time, we have
F = {1 ∨ 2, 3 ∨ 4, 5 ∨ 6, 6 ∨ 5 ∨ 2, 5 ∨ 7, 5 ∨ 7 ∨ 2}
M = [7; 5; 2; 1@]
1 2 ¬7¬5
¬2
29
Cutting the Implication Graph : Other Example
When Backjump is applied for the second time, we have
F = {1 ∨ 2, 3 ∨ 4, 5 ∨ 6, 6 ∨ 5 ∨ 2, 5 ∨ 7, 5 ∨ 7 ∨ 2}
M = [7; 5; 2; 1@]
1 2 ¬7¬5
¬2¬1
29
Backward Conflict Resolution
Backjump clauses can also be obtained by successive application ofresolution steps
Starting from the conflict clause, the (negation of) propagationliterals are resolved away in the reverse order with the respectiveclauses that caused their propagations
We stop when the resolvent contains only one literal in the currentdecision level
30
Backward Conflict Resolution: Example
F = {9∨ 6∨ 7∨ 8, 8∨ 7∨ 5, 6∨ 8∨ 4, 4∨ 1, 4∨ 5∨ 2, 5∨ 7∨ 3, 1∨ 2∨ 3}
M = [3; 2; 1; 4; 5; 8; 9@; . . . ; 7; . . . ; 6; . . .]
R = 1 ∨ 2 ∨ 3
31
Backward Conflict Resolution: Example
F = {9∨ 6∨ 7∨ 8, 8∨ 7∨ 5, 6∨ 8∨ 4, 4∨ 1, 4∨ 5∨ 2, 5∨ 7∨ 3, 1∨ 2∨ 3}
M = [3; 2; 1; 4; 5; 8; 9@; . . . ; 7; . . . ; 6; . . .]
ResolveR = 1 ∨ 2 ∨ 3 5 ∨ 7 ∨ 3 ∈ F
R := 5 ∨ 7 ∨ 1 ∨ 2
R = 1 ∨ 2 ∨ 3
31
Backward Conflict Resolution: Example
F = {9∨ 6∨ 7∨ 8, 8∨ 7∨ 5, 6∨ 8∨ 4, 4∨ 1, 4∨ 5∨ 2, 5∨ 7∨ 3, 1∨ 2∨ 3}
M = [3; 2; 1; 4; 5; 8; 9@; . . . ; 7; . . . ; 6; . . .]
ResolveR = 1 ∨ 2 ∨ 3 5 ∨ 7 ∨ 3 ∈ F
R := 5 ∨ 7 ∨ 1 ∨ 2
R = 5 ∨ 7 ∨ 1 ∨ 2
31
Backward Conflict Resolution: Example
F = {9∨ 6∨ 7∨ 8, 8∨ 7∨ 5, 6∨ 8∨ 4, 4∨ 1, 4∨ 5∨ 2, 5∨ 7∨ 3, 1∨ 2∨ 3}
M = [3; 2; 1; 4; 5; 8; 9@; . . . ; 7; . . . ; 6; . . .]
ResolveR = 5 ∨ 7 ∨ 1 ∨ 2 4 ∨ 5 ∨ 2 ∈ F
R := 4 ∨ 5 ∨ 7 ∨ 1
R = 5 ∨ 7 ∨ 1 ∨ 2
31
Backward Conflict Resolution: Example
F = {9∨ 6∨ 7∨ 8, 8∨ 7∨ 5, 6∨ 8∨ 4, 4∨ 1, 4∨ 5∨ 2, 5∨ 7∨ 3, 1∨ 2∨ 3}
M = [3; 2; 1; 4; 5; 8; 9@; . . . ; 7; . . . ; 6; . . .]
ResolveR = 5 ∨ 7 ∨ 1 ∨ 2 4 ∨ 5 ∨ 2 ∈ F
R := 4 ∨ 5 ∨ 7 ∨ 1
R = 4 ∨ 5 ∨ 7 ∨ 1
31
Backward Conflict Resolution: Example
F = {9∨ 6∨ 7∨ 8, 8∨ 7∨ 5, 6∨ 8∨ 4, 4∨ 1, 4∨ 5∨ 2, 5∨ 7∨ 3, 1∨ 2∨ 3}
M = [3; 2; 1; 4; 5; 8; 9@; . . . ; 7; . . . ; 6; . . .]
ResolveR = 4 ∨ 5 ∨ 7 ∨ 1 4 ∨ 1 ∈ F
R := 5 ∨ 7 ∨ 4
R = 4 ∨ 5 ∨ 7 ∨ 1
31
Backward Conflict Resolution: Example
F = {9∨ 6∨ 7∨ 8, 8∨ 7∨ 5, 6∨ 8∨ 4, 4∨ 1, 4∨ 5∨ 2, 5∨ 7∨ 3, 1∨ 2∨ 3}
M = [3; 2; 1; 4; 5; 8; 9@; . . . ; 7; . . . ; 6; . . .]
ResolveR = 4 ∨ 5 ∨ 7 ∨ 1 4 ∨ 1 ∈ F
R := 5 ∨ 7 ∨ 4
R = 5 ∨ 7 ∨ 4
31
Backward Conflict Resolution: Example
F = {9∨ 6∨ 7∨ 8, 8∨ 7∨ 5, 6∨ 8∨ 4, 4∨ 1, 4∨ 5∨ 2, 5∨ 7∨ 3, 1∨ 2∨ 3}
M = [3; 2; 1; 4; 5; 8; 9@; . . . ; 7; . . . ; 6; . . .]
ResolveR = 5 ∨ 7 ∨ 4 6 ∨ 8 ∨ 4 ∈ F
R := 6 ∨ 8 ∨ 7 ∨ 5
R = 5 ∨ 7 ∨ 4
31
Backward Conflict Resolution: Example
F = {9∨ 6∨ 7∨ 8, 8∨ 7∨ 5, 6∨ 8∨ 4, 4∨ 1, 4∨ 5∨ 2, 5∨ 7∨ 3, 1∨ 2∨ 3}
M = [3; 2; 1; 4; 5; 8; 9@; . . . ; 7; . . . ; 6; . . .]
ResolveR = 5 ∨ 7 ∨ 4 6 ∨ 8 ∨ 4 ∈ F
R := 6 ∨ 8 ∨ 7 ∨ 5
R = 6 ∨ 8 ∨ 7 ∨ 5
31
Backward Conflict Resolution: Example
F = {9∨ 6∨ 7∨ 8, 8∨ 7∨ 5, 6∨ 8∨ 4, 4∨ 1, 4∨ 5∨ 2, 5∨ 7∨ 3, 1∨ 2∨ 3}
M = [3; 2; 1; 4; 5; 8; 9@; . . . ; 7; . . . ; 6; . . .]
ResolveR = 6 ∨ 8 ∨ 7 ∨ 5 8 ∨ 7 ∨ 5 ∈ F
R := 8 ∨ 7 ∨ 6
R = 6 ∨ 8 ∨ 7 ∨ 5
31
Backward Conflict Resolution: Example
F = {9∨ 6∨ 7∨ 8, 8∨ 7∨ 5, 6∨ 8∨ 4, 4∨ 1, 4∨ 5∨ 2, 5∨ 7∨ 3, 1∨ 2∨ 3}
M = [3; 2; 1; 4; 5; 8; 9@; . . . ; 7; . . . ; 6; . . .]
ResolveR = 6 ∨ 8 ∨ 7 ∨ 5 8 ∨ 7 ∨ 5 ∈ F
R := 8 ∨ 7 ∨ 6
R = 8 ∨ 7 ∨ 6
31
CDCL + Resolution + Learning
When Mode = search
SuccessM |= F
return Sat
UnitC ∨ l ∈ F M |= ¬C l is undefined in M
M := lC∨l :: M
Decidel is undefined in M l (or ¬l) ∈ F
M := l :: M
ConflictC ∈ F M |= ¬C
R := C; Mode := resolution
32
CDCL + Resolution + Learning
When Mode = resolution
FailR = ⊥
return Unsat
ResolveR = C ∨ ¬l lD∨l ∈M
R := C ∨D
Backjump
R = C ∨ l M = M1 :: l′ :: M2
M2 |= ¬C l is undefined in M2
M := lC∨l :: M2; Mode := search
33
CDCL + Resolution + Learning
When Mode = resolution
LearnR 6∈ F
F := F ∪ {R}
When Mode = search
ForgetC is a learned clause
F := F \ {C}
34
CDCL + Resolution : Example
Mode = search
M = []
F = {1 ∨ 2, 3 ∨ 4, 5 ∨ 6, 6 ∨ 5 ∨ 2, 5 ∨ 7, 5 ∨ 7 ∨ 2}
R =
35
CDCL + Resolution : Example
Decide1 is undefined in M 1 ∈ F
M := 1 :: M
Mode = search
M = []
F = {1 ∨ 2, 3 ∨ 4, 5 ∨ 6, 6 ∨ 5 ∨ 2, 5 ∨ 7, 5 ∨ 7 ∨ 2}
R =
35
CDCL + Resolution : Example
Decide1 is undefined in M 1 ∈ F
M := 1 :: M
Mode = search
M = [1]
F = {1 ∨ 2, 3 ∨ 4, 5 ∨ 6, 6 ∨ 5 ∨ 2, 5 ∨ 7, 5 ∨ 7 ∨ 2}
R =
35
CDCL + Resolution : Example
Unit1 ∨ 2 ∈ F M |= 1 2 is undefined in M
M := 21∨2 :: M
Mode = search
M = [1]
F = {1 ∨ 2, 3 ∨ 4, 5 ∨ 6, 6 ∨ 5 ∨ 2, 5 ∨ 7, 5 ∨ 7 ∨ 2}
R =
35
CDCL + Resolution : Example
Unit1 ∨ 2 ∈ F M |= 1 2 is undefined in M
M := 21∨2 :: M
Mode = search
M = [21∨2; 1]
F = {1 ∨ 2, 3 ∨ 4, 5 ∨ 6, 6 ∨ 5 ∨ 2, 5 ∨ 7, 5 ∨ 7 ∨ 2}
R =
35
CDCL + Resolution : Example
Decide3 is undefined in M 3 ∈ F
M := 3 :: M
Mode = search
M = [21∨2; 1]
F = {1 ∨ 2, 3 ∨ 4, 5 ∨ 6, 6 ∨ 5 ∨ 2, 5 ∨ 7, 5 ∨ 7 ∨ 2}
R =
35
CDCL + Resolution : Example
Decide3 is undefined in M 3 ∈ F
M := 3 :: M
Mode = search
M = [3; 21∨2; 1]
F = {1 ∨ 2, 3 ∨ 4, 5 ∨ 6, 6 ∨ 5 ∨ 2, 5 ∨ 7, 5 ∨ 7 ∨ 2}
R =
35
CDCL + Resolution : Example
Unit3 ∨ 4 ∈ F M |= 3 4 is undefined in M
M := 43∨4 :: M
Mode = search
M = [3; 21∨2; 1]
F = {1 ∨ 2, 3 ∨ 4, 5 ∨ 6, 6 ∨ 5 ∨ 2, 5 ∨ 7, 5 ∨ 7 ∨ 2}
R =
35
CDCL + Resolution : Example
Unit3 ∨ 4 ∈ F M |= 3 4 is undefined in M
M := 43∨4 :: M
Mode = search
M = [43∨4; 3; 21∨2; 1]
F = {1 ∨ 2, 3 ∨ 4, 5 ∨ 6, 6 ∨ 5 ∨ 2, 5 ∨ 7, 5 ∨ 7 ∨ 2}
R =
35
CDCL + Resolution : Example
Decide5 is undefined in M 5 ∈ F
M := 5 :: M
Mode = search
M = [43∨4; 3; 21∨2; 1]
F = {1 ∨ 2, 3 ∨ 4, 5 ∨ 6, 6 ∨ 5 ∨ 2, 5 ∨ 7, 5 ∨ 7 ∨ 2}
R =
35
CDCL + Resolution : Example
Decide5 is undefined in M 5 ∈ F
M := 5 :: M
Mode = search
M = [5; 43∨4; 3; 21∨2; 1]
F = {1 ∨ 2, 3 ∨ 4, 5 ∨ 6, 6 ∨ 5 ∨ 2, 5 ∨ 7, 5 ∨ 7 ∨ 2}
R =
35
CDCL + Resolution : Example
Unit5 ∨ 6 ∈ F M |= 5 6 is undefined in M
M := 65∨6 :: M
Mode = search
M = [5; 43∨4; 3; 21∨2; 1]
F = {1 ∨ 2, 3 ∨ 4, 5 ∨ 6, 6 ∨ 5 ∨ 2, 5 ∨ 7, 5 ∨ 7 ∨ 2}
R =
35
CDCL + Resolution : Example
Unit5 ∨ 6 ∈ F M |= 5 6 is undefined in M
M := 65∨6 :: M
Mode = search
M = [65∨6; 5; 43∨4; 3; 21∨2; 1]
F = {1 ∨ 2, 3 ∨ 4, 5 ∨ 6, 6 ∨ 5 ∨ 2, 5 ∨ 7, 5 ∨ 7 ∨ 2}R =
35
CDCL + Resolution : Example
Conflict6 ∨ 5 ∨ 2 ∈ F M |= 6 ∧ 5 ∧ 2
R := 6 ∨ 5 ∨ 2;Mode := resolution
Mode = search
M = [65∨6; 5; 43∨4; 3; 21∨2; 1]
F = {1 ∨ 2, 3 ∨ 4, 5 ∨ 6, 6 ∨ 5 ∨ 2, 5 ∨ 7, 5 ∨ 7 ∨ 2}R =
35
CDCL + Resolution : Example
Conflict6 ∨ 5 ∨ 2 ∈ F M |= 6 ∧ 5 ∧ 2
R := 6 ∨ 5 ∨ 2;Mode := resolution
Mode = resolution
M = [65∨6; 5; 43∨4; 3; 21∨2; 1]
F = {1 ∨ 2, 3 ∨ 4, 5 ∨ 6, 6 ∨ 5 ∨ 2, 5 ∨ 7, 5 ∨ 7 ∨ 2}
R = 6 ∨ 5 ∨ 2
35
CDCL + Resolution : Example
ResolveR = 6 ∨ 5 ∨ 2 65∨6 ∈M
R := 2 ∨ 5
Mode = resolution
M = [65∨6; 5; 43∨4; 3; 21∨2; 1]
F = {1 ∨ 2, 3 ∨ 4, 5 ∨ 6, 6 ∨ 5 ∨ 2, 5 ∨ 7, 5 ∨ 7 ∨ 2}
R = 6 ∨ 5 ∨ 2
35
CDCL + Resolution : Example
ResolveR = 6 ∨ 5 ∨ 2 65∨6 ∈M
R := 2 ∨ 5
Mode = resolution
M = [65∨6; 5; 43∨4; 3; 21∨2; 1]
F = {1 ∨ 2, 3 ∨ 4, 5 ∨ 6, 6 ∨ 5 ∨ 2, 5 ∨ 7, 5 ∨ 7 ∨ 2}
R = 2 ∨ 5
35
CDCL + Resolution : Example
Backjump
R = 2 ∨ 5M = [65∨6; 5; 43∨4] :: 3 :: [21∨2; 1]
[21∨2; 1] |= 25 undefined in [21∨2; 1]
M := 52∨5 :: [21∨2; 1];Mode := search
Mode = resolution
M = [65∨6; 5; 43∨4; 3; 21∨2; 1]
F = {1 ∨ 2, 3 ∨ 4, 5 ∨ 6, 6 ∨ 5 ∨ 2, 5 ∨ 7, 5 ∨ 7 ∨ 2}
R = 2 ∨ 5
35
CDCL + Resolution : Example
Backjump
R = 2 ∨ 5M = [65∨6; 5; 43∨4] :: 3 :: [21∨2; 1]
[21∨2; 1] |= 25 undefined in [21∨2; 1]
M := 52∨5 :: [21∨2; 1];Mode := search
Mode = search
M = [52∨5; 21∨2; 1]
F = {1 ∨ 2, 3 ∨ 4, 5 ∨ 6, 6 ∨ 5 ∨ 2, 5 ∨ 7, 5 ∨ 7 ∨ 2}
R =
35
CDCL + Resolution : Example
etc.
Mode = search
M = [52∨5; 21∨2; 1]
F = {1 ∨ 2, 3 ∨ 4, 5 ∨ 6, 6 ∨ 5 ∨ 2, 5 ∨ 7, 5 ∨ 7 ∨ 2}
R =
35
Strategies
The inference rules given for DPLL and CDCL are flexible
Basic strategy :
I apply Decide only if Unit or Fail cannot be applied
Conflict resolution :
I Learn only one clause per conflict (the clause used inBackjump)
I Use Backjump as soon as possible (FUIP)
I When applying Resolve, use the literals in M in the reverseorder they have been added
36
The CDCL algorithm
def cdcl(φ):µ = []
dl = 0
while True:
res = boolean_propagation(φ,µ)if res == SAT:
if all_variables_are_assigned(φ,µ):return SAT
l = pick_a_branching_literal(φ,µ)dl = dl + 1
push(µ,l@dl)else:
(lvl, cls) = boolean_conflict_analysis(φ,µ)if lvl == 0:
return UNSAT
backtrack(φ, µ, lvl)
learn(cls)
dl = lvl
37
Decision heuristic : VSIDS
The Variable State Independent Decaying Sum (VSIDS) heuristicassociates a score to each literal in order to select the literal withthe highest score when Decide is used
I Each literal has a counter, initialized to 0I Increase the counters of
I the literal l when Resolve is usedI the literals of the clause in R when Backjump is used
I Counters are divided by a constant, periodically
38
Scoring Learned Clauses
CDCL performances are tightly related to their learning clausemanagement
I Keeping too many clauses decrease the BCP efficiency
I Cleaning out too many clauses break the overall learningbenefit
Quality measures for learning clauses are based on scoresassociated with learned clauses
I VSIDS (dynamic): increase the score of clauses involved inResolve
I LBD (static): number of different decision levels in a learnedclause
39
Indexing
BCP = 80% of SAT-solver runtime
How to implement efficiently M |= C (in Unit and Conflict) ?
Two watched literals technique:
I assign two non-false watched literals per clauseI only if one of the two watched literal becomes false, the
clause is inspected :I if the other watched literal is assigned to true, then do nothingI otherwise, try to find another watched literalI if no such literal exists, then apply BackjumpI if the only possible literal is the other watched literal of the
clause, then apply Unit
Main advantages :
I clauses are inspected only when watched literal are assignedI no updating when backjumping
40
Le probleme SMT
Satisfiabilite Modulo Theories
La probleme SMT consiste a decider de la satisfiabilite de formuleslogiques contenant des symboles de theories particulieres
Par exemple :
∃x, y, z. x+ y ≥ 0 ∧ (x = z ⇒ y + z = −1) ∧ z > 3t
(par la suite, les variables libres seront implicitement quantifieesavec ∃)
41
Le probleme SMT
Satisfiabilite Modulo Theories
La probleme SMT consiste a decider de la satisfiabilite de formuleslogiques contenant des symboles de theories particulieres
Par exemple :
∃x, y, z. x+ y ≥ 0 ∧ (x = z ⇒ y + z = −1) ∧ z > 3t
(par la suite, les variables libres seront implicitement quantifieesavec ∃)
41
Quelles formules ? Quelles contraintes ?
En toute generalite, les solveurs SMT peuvent prendre en entreedes formules quelconques de la logique du premier ordre
En pratique, il y a des solveurs SMT qui prennent en entreeuniquement des formules booleennes avec une seule theorie (parex. l’arithmetique lineaire sur les entiers)
Mais il y a aussi des solveurs qui traitent toute la logique dupremier ordre avec quantificateurs, des langages de types riches(polymorphisme, types algebriques, etc.) et des theories sur desobjets complexes (par ex. ODEs)
42
Exemples de theories
La theorie de l’egalite avec symboles non interpretes
f(f(f(x))) = x ∧ f(f(f(f(f(x))))) = x ∧ f(x) 6= x
La theorie de l’arithmetique lineaire sur les rationnels
x+ y = 19 ∧ x− y = 7 ∧ x 6= 13
La theorie des tableaux
a[i← x] = b ∧ a = b ∧ b[i] = y ∧ b[i← x][j] = y ∧ i = j
43
Comment resoudre le probleme SMT ?
Soit F la formule suivante avec des symboles de l’arithmetique
x+ y ≥ 0 ∧ (x = z ⇒ y + z = −1) ∧ z > 3t
F est-elle satisfiable ?
Pour repondre a cette question, on applique l’algorithme suivant:
1. convertir F en une CNF
2. remplacer chaque literal par une variable booleenne
3. appeler un solveur SAT afin d’obtenir un modele M booleende la formule
4. convertir M en contraintes dans l’arithmetique et le faireverifier par la procedure de decision
Si M est satisfiable dans la theorie de l’arithmetique, alors F l’estegalement, sinon on ajoute ¬M a F et on retourne en 2.
44
Comment resoudre le probleme SMT ?
Soit F la formule suivante avec des symboles de l’arithmetique
x+ y ≥ 0 ∧ (x = z ⇒ y + z = −1) ∧ z > 3t
F est-elle satisfiable ?
Pour repondre a cette question, on applique l’algorithme suivant:
1. convertir F en une CNF
2. remplacer chaque literal par une variable booleenne
3. appeler un solveur SAT afin d’obtenir un modele M booleende la formule
4. convertir M en contraintes dans l’arithmetique et le faireverifier par la procedure de decision
Si M est satisfiable dans la theorie de l’arithmetique, alors F l’estegalement, sinon on ajoute ¬M a F et on retourne en 2.
44
Comment resoudre le probleme SMT ?
Soit F la formule suivante avec des symboles de l’arithmetique
x+ y ≥ 0 ∧ (x = z ⇒ y + z = −1) ∧ z > 3t
F est-elle satisfiable ?
Pour repondre a cette question, on applique l’algorithme suivant:
1. convertir F en une CNF
2. remplacer chaque literal par une variable booleenne
3. appeler un solveur SAT afin d’obtenir un modele M booleende la formule
4. convertir M en contraintes dans l’arithmetique et le faireverifier par la procedure de decision
Si M est satisfiable dans la theorie de l’arithmetique, alors F l’estegalement, sinon on ajoute ¬M a F et on retourne en 2.
44
Comment resoudre le probleme SMT ?
Soit F la formule suivante avec des symboles de l’arithmetique
x+ y ≥ 0 ∧ (x = z ⇒ y + z = −1) ∧ z > 3t
F est-elle satisfiable ?
Pour repondre a cette question, on applique l’algorithme suivant:
1. convertir F en une CNF
2. remplacer chaque literal par une variable booleenne
3. appeler un solveur SAT afin d’obtenir un modele M booleende la formule
4. convertir M en contraintes dans l’arithmetique et le faireverifier par la procedure de decision
Si M est satisfiable dans la theorie de l’arithmetique, alors F l’estegalement, sinon on ajoute ¬M a F et on retourne en 2.
44
Comment resoudre le probleme SMT ?
Soit F la formule suivante avec des symboles de l’arithmetique
x+ y ≥ 0 ∧ (x = z ⇒ y + z = −1) ∧ z > 3t
F est-elle satisfiable ?
Pour repondre a cette question, on applique l’algorithme suivant:
1. convertir F en une CNF
2. remplacer chaque literal par une variable booleenne
3. appeler un solveur SAT afin d’obtenir un modele M booleende la formule
4. convertir M en contraintes dans l’arithmetique et le faireverifier par la procedure de decision
Si M est satisfiable dans la theorie de l’arithmetique, alors F l’estegalement, sinon on ajoute ¬M a F et on retourne en 2.
44
Comment resoudre le probleme SMT ?
Soit F la formule suivante avec des symboles de l’arithmetique
x+ y ≥ 0 ∧ (x = z ⇒ y + z = −1) ∧ z > 3t
F est-elle satisfiable ?
Pour repondre a cette question, on applique l’algorithme suivant:
1. convertir F en une CNF
2. remplacer chaque literal par une variable booleenne
3. appeler un solveur SAT afin d’obtenir un modele M booleende la formule
4. convertir M en contraintes dans l’arithmetique et le faireverifier par la procedure de decision
Si M est satisfiable dans la theorie de l’arithmetique, alors F l’estegalement, sinon on ajoute ¬M a F et on retourne en 2.
44
Comment resoudre le probleme SMT ?
Soit F la formule suivante avec des symboles de l’arithmetique
x+ y ≥ 0 ∧ (x = z ⇒ y + z = −1) ∧ z > 3t
F est-elle satisfiable ?
Pour repondre a cette question, on applique l’algorithme suivant:
1. convertir F en une CNF
2. remplacer chaque literal par une variable booleenne
3. appeler un solveur SAT afin d’obtenir un modele M booleende la formule
4. convertir M en contraintes dans l’arithmetique et le faireverifier par la procedure de decision
Si M est satisfiable dans la theorie de l’arithmetique, alors F l’estegalement, sinon on ajoute ¬M a F et on retourne en 2.
44
Resoudre le probleme SMT sur un exemple
x+ y ≥ 0 ∧ (x = z ⇒ y + z = −1) ∧ z > 3t
1. conversion en CNF
2. remplacement des contraintes arithmetiques par des variablesbooleennes
3. appel du solveur SAT: un modele M est renvoye si la formuleest satisfiable
4. convertir M vers l’arithmetique
5. verifier si M est coherent modulo arithmetique a l’aide d’uneprocedure de decision
6. ajout de ¬M a F et retourner a l’etape 2
45
Resoudre le probleme SMT sur un exemple
x+ y ≥ 0 ∧ (x = z ⇒ y + z = −1) ∧ z > 3t
1. conversion en CNF
2. remplacement des contraintes arithmetiques par des variablesbooleennes
3. appel du solveur SAT: un modele M est renvoye si la formuleest satisfiable
4. convertir M vers l’arithmetique
5. verifier si M est coherent modulo arithmetique a l’aide d’uneprocedure de decision
6. ajout de ¬M a F et retourner a l’etape 2
45
Resoudre le probleme SMT sur un exemple
x+ y ≥ 0 ∧ (x 6= z ∨ y + z = −1) ∧ z > 3t
1. conversion en CNF
2. remplacement des contraintes arithmetiques par des variablesbooleennes
3. appel du solveur SAT: un modele M est renvoye si la formuleest satisfiable
4. convertir M vers l’arithmetique
5. verifier si M est coherent modulo arithmetique a l’aide d’uneprocedure de decision
6. ajout de ¬M a F et retourner a l’etape 2
45
Resoudre le probleme SMT sur un exemple
x+ y ≥ 0 ∧ (x 6= z ∨ y + z = −1) ∧ z > 3t
1. conversion en CNF
2. remplacement des contraintes arithmetiques par des variablesbooleennes
3. appel du solveur SAT: un modele M est renvoye si la formuleest satisfiable
4. convertir M vers l’arithmetique
5. verifier si M est coherent modulo arithmetique a l’aide d’uneprocedure de decision
6. ajout de ¬M a F et retourner a l’etape 2
45
Resoudre le probleme SMT sur un exemple
p1 ∧ (p2 ∨ p3) ∧ p4
1. conversion en CNF
2. remplacement des contraintes arithmetiques par des variablesbooleennes
3. appel du solveur SAT: un modele M est renvoye si la formuleest satisfiable
4. convertir M vers l’arithmetique
5. verifier si M est coherent modulo arithmetique a l’aide d’uneprocedure de decision
6. ajout de ¬M a F et retourner a l’etape 2
45
Resoudre le probleme SMT sur un exemple
p1 ∧ (p2 ∨ p3) ∧ p4
1. conversion en CNF
2. remplacement des contraintes arithmetiques par des variablesbooleennes
3. appel du solveur SAT: un modele M est renvoye si la formuleest satisfiable
4. convertir M vers l’arithmetique
5. verifier si M est coherent modulo arithmetique a l’aide d’uneprocedure de decision
6. ajout de ¬M a F et retourner a l’etape 2
45
Resoudre le probleme SMT sur un exemple
M = {p1 = true, p2 = false, p3 = true, p4 = true}
1. conversion en CNF
2. remplacement des contraintes arithmetiques par des variablesbooleennes
3. appel du solveur SAT: un modele M est renvoye si la formuleest satisfiable
4. convertir M vers l’arithmetique
5. verifier si M est coherent modulo arithmetique a l’aide d’uneprocedure de decision
6. ajout de ¬M a F et retourner a l’etape 2
45
Resoudre le probleme SMT sur un exemple
M = {p1 = true, p2 = false, p3 = true, p4 = true}
1. conversion en CNF
2. remplacement des contraintes arithmetiques par des variablesbooleennes
3. appel du solveur SAT: un modele M est renvoye si la formuleest satisfiable
4. convertir M vers l’arithmetique
5. verifier si M est coherent modulo arithmetique a l’aide d’uneprocedure de decision
6. ajout de ¬M a F et retourner a l’etape 2
45
Resoudre le probleme SMT sur un exemple
M = {x+ y ≥ 0, x = z, y + z = −1, z > 3t}
1. conversion en CNF
2. remplacement des contraintes arithmetiques par des variablesbooleennes
3. appel du solveur SAT: un modele M est renvoye si la formuleest satisfiable
4. convertir M vers l’arithmetique
5. verifier si M est coherent modulo arithmetique a l’aide d’uneprocedure de decision
6. ajout de ¬M a F et retourner a l’etape 2
45
Resoudre le probleme SMT sur un exemple
M = {x+ y ≥ 0, x = z, y + z = −1, z > 3t}
1. conversion en CNF
2. remplacement des contraintes arithmetiques par des variablesbooleennes
3. appel du solveur SAT: un modele M est renvoye si la formuleest satisfiable
4. convertir M vers l’arithmetique
5. verifier si M est coherent modulo arithmetique a l’aide d’uneprocedure de decision
6. ajout de ¬M a F et retourner a l’etape 2
45
Resoudre le probleme SMT sur un exemple
M n’est pas coherent dans l’arithmetique!
1. conversion en CNF
2. remplacement des contraintes arithmetiques par des variablesbooleennes
3. appel du solveur SAT: un modele M est renvoye si la formuleest satisfiable
4. convertir M vers l’arithmetique
5. verifier si M est coherent modulo arithmetique a l’aide d’uneprocedure de decision
6. ajout de ¬M a F et retourner a l’etape 2
45
Resoudre le probleme SMT sur un exemple
M n’est pas coherent dans l’arithmetique!
1. conversion en CNF
2. remplacement des contraintes arithmetiques par des variablesbooleennes
3. appel du solveur SAT: un modele M est renvoye si la formuleest satisfiable
4. convertir M vers l’arithmetique
5. verifier si M est coherent modulo arithmetique a l’aide d’uneprocedure de decision
6. ajout de ¬M a F et retourner a l’etape 2
45
Resoudre le probleme SMT sur un exemple
x+ y ≥ 0 ∧ (x 6= z ∨ y + z = −1) ∧ z > 3t∧¬(x+ y ≥ 0 ∧ x = z ∧ y + z = −1 ∧ z > 3t)
1. conversion en CNF
2. remplacement des contraintes arithmetiques par des variablesbooleennes
3. appel du solveur SAT: un modele M est renvoye si la formuleest satisfiable
4. convertir M vers l’arithmetique
5. verifier si M est coherent modulo arithmetique a l’aide d’uneprocedure de decision
6. ajout de ¬M a F et retourner a l’etape 2
45
Combinaison de theories
En pratique, les formules a traiter sont souvent formees d’unmelange de symboles appartenant a plusieurs theories
Par exemple, la formule suivante melange des symboles de latheorie des tableaux, de l’arithmetique lineaire sur les entiers et dela theorie de l’egalite avec symboles non interpretes:
x+ 2 = y ∧ f(a[x←3][y − 2]) 6= f(y − x+ 1)
46
Les principales difficultes du probleme SMT
• La taille des formules (parfois plusieurs Giga-octets ! )
• La complexite de la structure booleenne (par exemple quandles formules encodent des circuits logiques demicro-processeurs)
• La combination de theories
• L’efficacite des procedures de decision
• Des theories sur des objets mathematiques de plus en pluscomplexes
• La gestion des quantificateurs
• . . .
C’est un domaine de l’informatique passionnant qui melangelogique, mathematique et programmation
47
Les principales difficultes du probleme SMT
• La taille des formules (parfois plusieurs Giga-octets ! )
• La complexite de la structure booleenne (par exemple quandles formules encodent des circuits logiques demicro-processeurs)
• La combination de theories
• L’efficacite des procedures de decision
• Des theories sur des objets mathematiques de plus en pluscomplexes
• La gestion des quantificateurs
• . . .
C’est un domaine de l’informatique passionnant qui melangelogique, mathematique et programmation
47
La theorie de l’egalite avec symboles non interpretes
Appelee egalement theorie libre de l’egalite, cette theorie donne unsens au predicat d’egalite = en presence de symboles de fonctionsd’arite quelconque dont le sens n’est pas defini
Les termes de cette theorie appartiennent a deux categoriessyntaxiques :
(1) les variables x, y, z, etc.
(2) les applications de fonctions f(x), g(x, y), etc.
Les contraintes elementaires sont soit des egalites ou desdifferences entre les termes comme par exemple:
x = f(y, z) g(x) 6= h(y) x = y
49
La theorie de l’egalite avec symboles non interpretes
Appelee egalement theorie libre de l’egalite, cette theorie donne unsens au predicat d’egalite = en presence de symboles de fonctionsd’arite quelconque dont le sens n’est pas defini
Les termes de cette theorie appartiennent a deux categoriessyntaxiques :
(1) les variables x, y, z, etc.
(2) les applications de fonctions f(x), g(x, y), etc.
Les contraintes elementaires sont soit des egalites ou desdifferences entre les termes comme par exemple:
x = f(y, z) g(x) 6= h(y) x = y
49
La theorie de l’egalite avec symboles non interpretes
Appelee egalement theorie libre de l’egalite, cette theorie donne unsens au predicat d’egalite = en presence de symboles de fonctionsd’arite quelconque dont le sens n’est pas defini
Les termes de cette theorie appartiennent a deux categoriessyntaxiques :
(1) les variables x, y, z, etc.
(2) les applications de fonctions f(x), g(x, y), etc.
Les contraintes elementaires sont soit des egalites ou desdifferences entre les termes comme par exemple:
x = f(y, z) g(x) 6= h(y) x = y
49
Axiomes de la theorie de l’egalite
La theorie est definie a partir de trois axiomes et d’un schemad’axiomes.
(Reflexivite) ∀x. x = x
(Symetrie) ∀xy. x = y ⇒ y = x
(Transitivite) ∀xyz. x = y ∧ y = z ⇒ x = z
(Congruence) Pour tout symbole de fonction f d’arite n
∀x1, . . . , xn, y1, . . . , yn.x1 = y1 ∧ · · · ∧ xn = yn ⇒ f(x1, . . . , xn) = f(y1, . . . , yn)
Exemples:
g(x, y) = x ∧ g(g(x, y), y) 6= x
f(f(f(x))) = x ∧ f(f(f(f(f(x))))) = x ∧ f(x) 6= x
50
Axiomes de la theorie de l’egalite
La theorie est definie a partir de trois axiomes et d’un schemad’axiomes.
(Reflexivite) ∀x. x = x
(Symetrie) ∀xy. x = y ⇒ y = x
(Transitivite) ∀xyz. x = y ∧ y = z ⇒ x = z
(Congruence) Pour tout symbole de fonction f d’arite n
∀x1, . . . , xn, y1, . . . , yn.x1 = y1 ∧ · · · ∧ xn = yn ⇒ f(x1, . . . , xn) = f(y1, . . . , yn)
Exemples:
g(x, y) = x ∧ g(g(x, y), y) 6= x
f(f(f(x))) = x ∧ f(f(f(f(f(x))))) = x ∧ f(x) 6= x
50
Axiomes de la theorie de l’egalite
La theorie est definie a partir de trois axiomes et d’un schemad’axiomes.
(Reflexivite) ∀x. x = x
(Symetrie) ∀xy. x = y ⇒ y = x
(Transitivite) ∀xyz. x = y ∧ y = z ⇒ x = z
(Congruence) Pour tout symbole de fonction f d’arite n
∀x1, . . . , xn, y1, . . . , yn.x1 = y1 ∧ · · · ∧ xn = yn ⇒ f(x1, . . . , xn) = f(y1, . . . , yn)
Exemples:
g(x, y) = x ∧ g(g(x, y), y) 6= x
f(f(f(x))) = x ∧ f(f(f(f(f(x))))) = x ∧ f(x) 6= x
50
Procedure de decision pour la theorie de l’egalite
La procedure decide de la satisfiabilite d’une conjonction C decontraintes elementaires de la forme
∧i
ti on ui ou on∈ {=, 6=}
L’algorithme commence par separer C en deux ensembles decontraintes E (egalites) et D (differences)
E︷ ︸︸ ︷∧i
ti = ui ∧
D︷ ︸︸ ︷∧j
tj 6= uj
La procedure de decision va calculer la fermeture par congruencede E et s’assurer qu’elle est compatible avec les contraintes dans D
51
Procedure de decision pour la theorie de l’egalite
La procedure decide de la satisfiabilite d’une conjonction C decontraintes elementaires de la forme
∧i
ti on ui ou on∈ {=, 6=}
L’algorithme commence par separer C en deux ensembles decontraintes E (egalites) et D (differences)
E︷ ︸︸ ︷∧i
ti = ui ∧
D︷ ︸︸ ︷∧j
tj 6= uj
La procedure de decision va calculer la fermeture par congruencede E et s’assurer qu’elle est compatible avec les contraintes dans D
51
Procedure de decision pour la theorie de l’egalite
La procedure decide de la satisfiabilite d’une conjonction C decontraintes elementaires de la forme
∧i
ti on ui ou on∈ {=, 6=}
L’algorithme commence par separer C en deux ensembles decontraintes E (egalites) et D (differences)
E︷ ︸︸ ︷∧i
ti = ui ∧
D︷ ︸︸ ︷∧j
tj 6= uj
La procedure de decision va calculer la fermeture par congruencede E et s’assurer qu’elle est compatible avec les contraintes dans D
51
Fermeture par congruence
Soit R une relation d’equivalence sur les termes. Le domaine de R,note dom(R), est l’ensemble de tous les termes et sous-termes de R
Deux termes t et u sont congruents par R s’ils sont respectivementde la forme f(t1, . . . , tn) et f(u1, . . . , un) et ∀i. (ti, ui) ∈ R
R est fermee par congruence si pour tous les termes t, u ∈ dom(R)congruents par R on a (t, u) ∈ R
Fermeture par congruence:
La fermeture par congruence de R est la plus petite relationcontenant R et qui est close par congruence
52
Representation des termes
DAG des termes : on construit un DAG pour representer tous lestermes (et sous-termes) apparaissant dans l’ensemble E ∪ D.
Par exemple, pour la formule g(x, y) = x ∧ g(g(x, y), y) 6= x, onobtient:
g
g
x y
53
Representation des termes
DAG des termes : on construit un DAG pour representer tous lestermes (et sous-termes) apparaissant dans l’ensemble E ∪ D.
Par exemple, pour la formule g(x, y) = x ∧ g(g(x, y), y) 6= x, onobtient:
g
g
x y
53
Representation de la relation d’equivalence
L’algorithme de la fermeture par congruence consiste a utiliser unestructure union-find pour maintenir des classes d’equivalence entreles nœuds du graphe
Deux nœuds n et m etant dans la meme classe quand les termes t1et ua qu’ils representent respectivement sont egaux soit:
1. soit parce que t1 = u1 ∈ E2. soit parce que l’egalite t1 = u1 est une consequence de E et
des axiomes de la theorie de l’egalite.
Cette relation est representeedans le DAG par des traits enpointilles (ex. g(x, y) = x)
g
g
x y54
Representation de la relation d’equivalence
L’algorithme de la fermeture par congruence consiste a utiliser unestructure union-find pour maintenir des classes d’equivalence entreles nœuds du graphe
Deux nœuds n et m etant dans la meme classe quand les termes t1et ua qu’ils representent respectivement sont egaux soit:
1. soit parce que t1 = u1 ∈ E2. soit parce que l’egalite t1 = u1 est une consequence de E et
des axiomes de la theorie de l’egalite.
Cette relation est representeedans le DAG par des traits enpointilles (ex. g(x, y) = x)
g
g
x y54
Structure Union-Find
Il s’agit d’une structure de donnees pour resoudre le probleme desclasses disjointes
I Ce probleme consiste a maintenir dans une structure dedonnees une partition d’un ensemble fini.
I Sans perte de generalite, on peut supposer qu’il s’agit del’ensemble des n entiers {0, 1, . . . , n− 1}.
55
Signature pour union-find
type t
val create : int -> t
val find : t -> int -> int
val union : t -> int -> int -> unit
I L’operation create n construit une nouvelle partition de{0, 1, . . . , n− 1} ou chaque element forme une classe a luitout seul.
I L’operation find determine la classe d’un element, sous laforme d’un entier considere comme le representant de cetteclasse.
I Enfin l’operation union reunit deux classes de la partition, lastructure de donnees etant modifiee en place.
56
Representation des partitions
L’idee principale est de lier entre eux les elements d’une memeclasse
I Dans chaque classe, ces liaisons forment un graphe acycliqueou tous les chemins menent au representant, qui est le seulelement lie a lui-meme.
La schema suivant illustre une situation ou l’ensemble {0, 1, . . . , 7}est partitionne en deux classes dont les representants sontrespectivement 3 et 4.
01 2
3 4
5 67
La structure est donc une foretde graphes acycliques
57
Implementation avec des tableaux
Une maniere simple de realiser cette foret consiste a utiliser untableau qui lie chaque entier i a un autre entier de la meme classe.
Ainsi la partition du schema de gauche est representee par letableau de droite :
01 2
3 4
5 67
0 1 · · · 7
7 5 6 3 4 3 4 3
58
Realisation de find et union
I L’operation find se contente de suivre les liaisons jusqu’atrouver le representant d’un element.
I L’operation union commence par trouver les representants desdeux elements, puis lie l’un des deux representants a l’autre.
Exemple: find 1 suit les liaisons rouges a partir du nœud 1 pourtrouver son representant (ici 3). De meme, union 1 6 trouve toutd’abord les representants de 1 et 6 (ici 3 et 4) puis lie le nœud 4
au nœud 3.
01 2
3 4
5 67
59
Amelioration
Afin d’atteindre de bonnes performances, on apporte deuxameliorations.
I La compression de chemins
I L’equilibrage des classes
60
La compression de chemins
On compresse les chemins pendant la recherche effectuee par find
Cela consiste a lier directement au representant tous les elementstrouves sur le chemin parcouru pour l’atteindre
0
1
3
5 7
61
L’equilibrage des classes
I On maintient pour chaque representant une approximation dela taille de sa classe, comme un un majorant de la longueur duplus long chemin dans sa classe.
I Cette information est stockee dans un second tableau etutilisee par la fonction union pour choisir le representantd’une union.
62
Type de la structure union-find (en OCaml)
Le type t est un enregistrement contenant deux tableaux :
I rank qui contient l’information sur la taille de chaque classe;
I parent qui contient les liaisons.
type t = {rank : int array;
parent : int array;
}
63
Classes initiales
I Chaque element forme une classe a lui tout seul, c’est-a-direque chaque element est son propre representant.
I La taille de chaque classe vaut 0.
let create n =
{ rank = Array.create n 0;
parent = Array.init n (fun i -> i) }
64
La fonction find
let rec find t i =
let p = t.parent.(i) in
if p = i then
i
else begin
let r = find t p in
t.parent.(i) <- r;
r
end
Un appel find t i commence par calculer le parent p de i.
I Si c’est i lui-meme, on a termine et i est le representant de laclasse.
I Sinon, il suffit de calculer recursivement le representant rcomme find t p.
Cependant, pour realiser la compression de chemins, on modifie leparent de i, pour lui donner la valeur r, avant de renvoyer r.
65
La fonction union (1/3)
Pour realiser l’union des classes de deux elements i et j, oncommence par calculer leurs representants respectifs ri et rj.
S’ils sont egaux, il n’y a rien a faire.
let union t i j =
let ri = find t i in
let rj = find t j in
if ri <> rj then begin
...
Sinon, on compare la taille des deux classes...
66
La fonction union (2/3)
Si la classe de ri est strictement plus petite que celle de rj, onfait de rj le representant de l’union, i.e. le parent de ri.
if t.rank.(ri) < t.rank.(rj) then
t.parent.(ri) <- rj
Si en revanche la classe de rj est la plus petite, on procedesymetriquement.
else begin
t.parent.(rj) <- ri;
67
La fonction union (3/3)
L’information de taille n’a besoin d’etre mise a jour que dans le casou les deux classes ont la meme taille, car c’est dans ce cas que lalongueur du plus long chemin est susceptible d’augmenter.
if t.rank.(ri) = t.rank.(rj) then
t.rank.(ri) <- t.rank.(ri) + 1
end
end
Il est important de noter que la fonction union utilise la fonctionfind et donc realise deux compressions de chemin, meme dans lecas ou il s’avere que i et j sont dans la meme classe.
68
Algorithme de fermeture par congruence (Python like)
L’algorithme de fermeture par congruence s’implemente facilementavec les deux boucles for suivantes:
for every nodes n,m ∈ Glabeled with the same symbol:
if find(n) == find(m) and find(ni) == find(mi)
for every children of n and m :
union(n,m)
for every difference ti 6= ui in D:if find(ti) == find(ui):
return UNSAT
return SAT
69
Exemple de fermeture par congruence
On souhaite verifier la satisfiabilite de la formule:g(x, y) = x ∧ g(g(x, y), y) 6= x
g
g
x y
(1) DAG initial
70
Exemple de fermeture par congruence
On souhaite verifier la satisfiabilite de la formule:g(x, y) = x ∧ g(g(x, y), y) 6= x
g
g
x y
(2) g(x, y) = x
70
Exemple de fermeture par congruence
On souhaite verifier la satisfiabilite de la formule:g(x, y) = x ∧ g(g(x, y), y) 6= x
g
g
x y
(3)g(x, y) = x ∧ y = y
⇒ g(g(x, y), y) = g(x, y)
70
Exemple de fermeture par congruence
On souhaite verifier la satisfiabilite de la formule:g(x, y) = x ∧ g(g(x, y), y) 6= x
g
g
x y
(4)g(g(x, y), y) = g(x, y) ∧ g(x, y) = x
⇒ g(g(x, y), y) = x
On en deduit que g(g(x, y), y) 6= x ne peut etre satisfait
70
La theorie des inequations
Cette theorie, appelee en anglais Difference Logic, est un fragmentde l’arithmetique lineaire (sur Z ou Q)
Les contraintes elementaires sont restreintes a la forme x− y ≤ c,avec x et y deux variables et c une constante numerique
Une solution a un ensemble de telles contraintes est representeepar un dictionnaire σ qui a chaque variable x associe un entier ouun rationnel σ(x)
71
La theorie des inequations
Cette theorie, appelee en anglais Difference Logic, est un fragmentde l’arithmetique lineaire (sur Z ou Q)
Les contraintes elementaires sont restreintes a la forme x− y ≤ c,avec x et y deux variables et c une constante numerique
Une solution a un ensemble de telles contraintes est representeepar un dictionnaire σ qui a chaque variable x associe un entier ouun rationnel σ(x)
71
Encodage
Bien que restrictive, d’autres contraintes peuvent etre encodeesdans ce fragment
(1) Encodage des contraintes strictes:
• sur Z, x− y < c est remplacee par x− y ≤ c− 1• sur Q, x− y < c est remplacee par x− y ≤ c− δ, ou δ est une
constante suffisamment petite (en pratique, δ est simplementune constante symbolique)
(2) Encodage des contraintes de la forme x ≤ c
A partir d’une solution σ, on peut construire une solution σ′
en decalant σ(x) par une meme constante k, pour tout x.
Ainsi, x ≤ c est encodee par x− yzero ≤ c, ou yzero est unenouvelle variable, et pour toute solution σ, on construit unesolution σ′ telle que σ′(yzero) = 0, i.e. on decale dek = −σ(yzero)
72
Encodage
Bien que restrictive, d’autres contraintes peuvent etre encodeesdans ce fragment
(1) Encodage des contraintes strictes:
• sur Z, x− y < c est remplacee par x− y ≤ c− 1• sur Q, x− y < c est remplacee par x− y ≤ c− δ, ou δ est une
constante suffisamment petite (en pratique, δ est simplementune constante symbolique)
(2) Encodage des contraintes de la forme x ≤ c
A partir d’une solution σ, on peut construire une solution σ′
en decalant σ(x) par une meme constante k, pour tout x.
Ainsi, x ≤ c est encodee par x− yzero ≤ c, ou yzero est unenouvelle variable, et pour toute solution σ, on construit unesolution σ′ telle que σ′(yzero) = 0, i.e. on decale dek = −σ(yzero)
72
Procedure de decision pour la theorie des inequations
Soit un ensemble de variables {x1, . . . , xn} et une conjonction Cde contraintes elementaires de la forme
∧i xi − yi ≤ ci
La procedure de decision pour cette theorie consiste a construireun graphe pondere G(V,E) tel que:
• V = {s, x1, . . . , xn}
Chaque nœud correspond a une variable du probleme plus unenouvelle variable s
• E = {yici−→ xi | xi − yi ≤ ci ∈ C} ∪ {s
0−→ xi | 1 ≤ i ≤ n}
Chaque arete correspond a une contrainte du probleme plusune arete de poids nul entre s et chaque variable du probleme
73
Exemple de graphe pondere des inequations
x1 − x2 ≤ 0
x1 − x5 ≤ −1
x2 − x5 ≤ 1
x3 − x1 ≤ 5
x4 − x1 ≤ 4
x4 − x3 ≤ −1
x5 − x3 ≤ −3
x5 − x4 ≤ −3
x5
x1
x4
0
-30
x3
x2
s
0
0
0-1
4
1
-1 0
5-3
74
Chemins dans un graphe
Un chemin entre deux nœuds a et b est une sequence d’aretes de la
forme ac1−→ v1
c2−→ · · · cn−1−→ vn−1cn−→ b
Le poids d’un chemin est la somme c1 + · · ·+ cn
Parmis tous les chemins entre a et b, on distingue le plus courtchemin, i.e. le chemin ayant le poids le plus petit
75
Procedure de decision pour la theorie des inequations
La procedure de decision pour cette theorie repose sur le theoremesuivant.
Theoreme : Etant donnee une conjonction d’inequations C de laforme: ∧
i
xi − yi ≤ ci
et G(V,E) le graphe correspondant:
1. Si G a un cycle negatif, i.e un chemin de la forme
v1c1−→ v2
c2−→ . . .cn−1−→ vn
cn−→ v1
tel que c1 + c2 + · · ·+ cn−1 + cn < 0, alors C est insatisfiable2. Sinon, une solution est
x1 = δ(s, x1), . . . , xn = δ(s, xn)ou δ(s, xi) est le chemin le plus court entre s et xi.
Preuve (voir livre)76
Detection des cycles negatifs
La detection des cycles negatifs peut etre realisee a l’aide del’algorithme de Bellman-Ford
for each xi in V :d[xi] = ∞
d[s] = 0
for k in range(1, |V |):for each yi
c−→ xi in E:if d[xi] > d[yi] + c: # relaxation
d[xi] = d[yi] + c
π[xi] = yifor each yi
c−→ xi ∈ E:if d[xi] > d[yi] + c: # cela ferait diminuer d[xi]return Negative Cycle Detected
(use π to reconstruct the cycle)
77
Exemple
x1 − x2 ≤ 0
x1 − x5 ≤ −1
x2 − x5 ≤ 1
x3 − x1 ≤ 5
x4 − x1 ≤ 4
x4 − x3 ≤ −1
x5 − x3 ≤ −3
x5 − x4 ≤ −3
x5
x1
x4
0
-30
x3
x2
s
0
0
0-1
4
1
-1 0
5-3
-5
-3
0-1
-4
0
x1 = −5 x2 = −3
x3 = 0 x4 = −1
x5 = −4
78
Restriction
On commence par s’interesser au probleme SMT en se restreignanta des formules d’une unique theorie T disposant d’une procedure dedecision Tsolve
Nous verrons dans la partie suivante comment traiter le problemeplus general avec plusieurs theories
80
La combinaison hors-ligne
Soit une formule φ, la technique la plus simple pour resoudre leprobleme SMT est de convertir φ en DNF de la forme
∨i∈I Ci
Ensuite, il suffit d’appeler Tsolve(Ci) sur chaque conjonction decontraintes Ci, jusqu’a ce qu’une de ces contraintes soitT-satisfiable
Plutot que de faire cette conversion en DNF (pas efficace), nousallons utiliser un solveur SAT pour traiter efficacement la structurebooleenne de φ
81
Fonctions intermediaires
I T2B(φ) calcule une abstraction booleenne de φ en remplacantchaque literal par une variable booleenne fraıche
I B2T(µ) fonction inverse pour retrouver les literaux de depart
I CDCL(f) appelle le solveur SAT et renvoie un couple (r, µ), our indique si f est satisfiable et, si c’est le cas, µ contient unmodele booleen pour f
I Tsolve(M) renvoie un couple (r, uc) ou r indique si le modeleµ est satisfiable modulo T ; si r = UNSAT, alors uc contientune explication (unsat core) qui peut etre un sous-ensembleincoherent de µ
82
L’algorithme SMT hors ligne
def smtOffline(φ):f = T2B(φ)while True:
(r, µ) = CDCL(f)
if r == UNSAT:
return UNSAT
else:
(r, uc) = Tsolve(B2T(µ))if r == SAT:
return SAT
else:
f = f ∧ ¬T2B(uc)
83
CDCL + Theorie
La recherche du modeles dans un SMT hors ligne n’est pas guideepar la theorie (choix de variables, BCP en aveugle)
Pour remedier a cela, on va integrer directement le raisonnementmodulo theorie dans l’algorithme CDCL.
Cela necessite quelques extensions:
I La fonction theory and boolean propagation(φ,µ) realisele BCP puis, si aucun conflit n’est detecte, appelle Tsolve
pour verifier la coherence du modele µ modulo T
Point fixe : on propage les literaux deduits par Tsolve pourtrouver de nouvelles clauses unitaires, etc.
I La fonction theory and boolean conflict analysis(φ,µ)utilise les explications renvoyees par la procedure de decisionpour trouver le niveau et la clause conflit modulo T
85
CDCL + Theorie
La recherche du modeles dans un SMT hors ligne n’est pas guideepar la theorie (choix de variables, BCP en aveugle)
Pour remedier a cela, on va integrer directement le raisonnementmodulo theorie dans l’algorithme CDCL.
Cela necessite quelques extensions:
I La fonction theory and boolean propagation(φ,µ) realisele BCP puis, si aucun conflit n’est detecte, appelle Tsolve
pour verifier la coherence du modele µ modulo T
Point fixe : on propage les literaux deduits par Tsolve pourtrouver de nouvelles clauses unitaires, etc.
I La fonction theory and boolean conflict analysis(φ,µ)utilise les explications renvoyees par la procedure de decisionpour trouver le niveau et la clause conflit modulo T
85
CDCL + Theorie
La recherche du modeles dans un SMT hors ligne n’est pas guideepar la theorie (choix de variables, BCP en aveugle)
Pour remedier a cela, on va integrer directement le raisonnementmodulo theorie dans l’algorithme CDCL.
Cela necessite quelques extensions:
I La fonction theory and boolean propagation(φ,µ) realisele BCP puis, si aucun conflit n’est detecte, appelle Tsolve
pour verifier la coherence du modele µ modulo T
Point fixe : on propage les literaux deduits par Tsolve pourtrouver de nouvelles clauses unitaires, etc.
I La fonction theory and boolean conflict analysis(φ,µ)utilise les explications renvoyees par la procedure de decisionpour trouver le niveau et la clause conflit modulo T
85
CDCL(T)
def cdclT(φ):µ = []
dl = 0
while True:
res = theory_and_boolean_propagation(φ,µ)if res == SAT:
if all_variables_are_assigned(φ,µ):return SAT
l = pick_a_branching_literal(φ,µ)dl = dl + 1
push(µ,l@dl)else:
(lvl, cls) = theory_and_boolean_conflict_analysis(φ,µ)if lvl < 0:
return UNSAT
backtrack(φ, µ, lvl)
learn(cls)
dl = lvl
86
Exemple
(x2 − x3 ≤ 2) ∨A1 ¬A2 ∨ (x1 − x5 ≤ 1) (x1 − x2 ≤ 3) ∨A2
(x3 + x4 < 5) ∨ (x1 − x3 > 6) ∨ ¬A1 (x1 − x2 ≤ 3) ∨A1
(x2 − x4 ≤ 6) ∨ (x5 = 5− 3x4) ∨ ¬A1 (x3 = x5 + 4) ∨A1 ∨A2
@1 (x1 − x3 > 6)@2 (x3 = x5 + 4)@3 (x2 − x4 ≤ 6)@4 (x2 − x3 ≤ 2)
T-propagate (x1 − x3 > 6) ∧ (x2 − x3 ≤ 2)⇒ (x1 − x2 > 3)BCP A1
BCP A2
BCP (x1 − x5 ≤ 1)T-conflict (x1 − x3 > 6) ∧ (x3 = x5 + 4) ∧ (x1 − x5 ≤ 1)backtrack x1 − x3 ≤ 6 ∨ (x3 6= x5 + 4) ∨ (x2 − x3 > 2)keep@1 (x1 − x3 > 6)keep@2 (x3 = x5 + 4)
BCP (x2 − x3 > 2). . .
87
Exemple
(x2 − x3 ≤ 2) ∨A1 ¬A2 ∨ (x1 − x5 ≤ 1) (x1 − x2 ≤ 3) ∨A2
(x3 + x4 < 5) ∨ (x1 − x3 > 6) ∨ ¬A1 (x1 − x2 ≤ 3) ∨A1
(x2 − x4 ≤ 6) ∨ (x5 = 5− 3x4) ∨ ¬A1 (x3 = x5 + 4) ∨A1 ∨A2
@1 (x1 − x3 > 6)@2 (x3 = x5 + 4)@3 (x2 − x4 ≤ 6)@4 (x2 − x3 ≤ 2)
T-propagate (x1 − x3 > 6) ∧ (x2 − x3 ≤ 2)⇒ (x1 − x2 > 3)BCP A1
BCP A2
BCP (x1 − x5 ≤ 1)T-conflict (x1 − x3 > 6) ∧ (x3 = x5 + 4) ∧ (x1 − x5 ≤ 1)backtrack x1 − x3 ≤ 6 ∨ (x3 6= x5 + 4) ∨ (x2 − x3 > 2)keep@1 (x1 − x3 > 6)keep@2 (x3 = x5 + 4)
BCP (x2 − x3 > 2). . .
87
Exemple
(x2 − x3 ≤ 2) ∨A1 ¬A2 ∨ (x1 − x5 ≤ 1) (x1 − x2 ≤ 3) ∨A2
(x3 + x4 < 5) ∨ (x1 − x3 > 6) ∨ ¬A1 (x1 − x2 ≤ 3) ∨A1
(x2 − x4 ≤ 6) ∨ (x5 = 5− 3x4) ∨ ¬A1 (x3 = x5 + 4) ∨A1 ∨A2
@1 (x1 − x3 > 6)@2 (x3 = x5 + 4)@3 (x2 − x4 ≤ 6)@4 (x2 − x3 ≤ 2)
T-propagate (x1 − x3 > 6) ∧ (x2 − x3 ≤ 2)⇒ (x1 − x2 > 3)
BCP A1
BCP A2
BCP (x1 − x5 ≤ 1)T-conflict (x1 − x3 > 6) ∧ (x3 = x5 + 4) ∧ (x1 − x5 ≤ 1)backtrack x1 − x3 ≤ 6 ∨ (x3 6= x5 + 4) ∨ (x2 − x3 > 2)keep@1 (x1 − x3 > 6)keep@2 (x3 = x5 + 4)
BCP (x2 − x3 > 2). . .
87
Exemple
(x2 − x3 ≤ 2) ∨A1 ¬A2 ∨ (x1 − x5 ≤ 1) (x1 − x2 ≤ 3) ∨A2
(x3 + x4 < 5) ∨ (x1 − x3 > 6) ∨ ¬A1 (x1 − x2 ≤ 3) ∨A1
(x2 − x4 ≤ 6) ∨ (x5 = 5− 3x4) ∨ ¬A1 (x3 = x5 + 4) ∨A1 ∨A2
@1 (x1 − x3 > 6)@2 (x3 = x5 + 4)@3 (x2 − x4 ≤ 6)@4 (x2 − x3 ≤ 2)
T-propagate (x1 − x3 > 6) ∧ (x2 − x3 ≤ 2)⇒ (x1 − x2 > 3)BCP A1
BCP A2
BCP (x1 − x5 ≤ 1)
T-conflict (x1 − x3 > 6) ∧ (x3 = x5 + 4) ∧ (x1 − x5 ≤ 1)backtrack x1 − x3 ≤ 6 ∨ (x3 6= x5 + 4) ∨ (x2 − x3 > 2)keep@1 (x1 − x3 > 6)keep@2 (x3 = x5 + 4)
BCP (x2 − x3 > 2). . .
87
Exemple
(x2 − x3 ≤ 2) ∨A1 ¬A2 ∨ (x1 − x5 ≤ 1) (x1 − x2 ≤ 3) ∨A2
(x3 + x4 < 5) ∨ (x1 − x3 > 6) ∨ ¬A1 (x1 − x2 ≤ 3) ∨A1
(x2 − x4 ≤ 6) ∨ (x5 = 5− 3x4) ∨ ¬A1 (x3 = x5 + 4) ∨A1 ∨A2
@1 (x1 − x3 > 6)@2 (x3 = x5 + 4)@3 (x2 − x4 ≤ 6)@4 (x2 − x3 ≤ 2)
T-propagate (x1 − x3 > 6) ∧ (x2 − x3 ≤ 2)⇒ (x1 − x2 > 3)BCP A1
BCP A2
BCP (x1 − x5 ≤ 1)T-conflict (x1 − x3 > 6) ∧ (x3 = x5 + 4) ∧ (x1 − x5 ≤ 1)
backtrack x1 − x3 ≤ 6 ∨ (x3 6= x5 + 4) ∨ (x2 − x3 > 2)keep@1 (x1 − x3 > 6)keep@2 (x3 = x5 + 4)
BCP (x2 − x3 > 2). . .
87
Exemple
(x2 − x3 ≤ 2) ∨A1 ¬A2 ∨ (x1 − x5 ≤ 1) (x1 − x2 ≤ 3) ∨A2
(x3 + x4 < 5) ∨ (x1 − x3 > 6) ∨ ¬A1 (x1 − x2 ≤ 3) ∨A1
(x2 − x4 ≤ 6) ∨ (x5 = 5− 3x4) ∨ ¬A1 (x3 = x5 + 4) ∨A1 ∨A2
@1 (x1 − x3 > 6)@2 (x3 = x5 + 4)@3 (x2 − x4 ≤ 6)@4 (x2 − x3 ≤ 2)
T-propagate (x1 − x3 > 6) ∧ (x2 − x3 ≤ 2)⇒ (x1 − x2 > 3)BCP A1
BCP A2
BCP (x1 − x5 ≤ 1)T-conflict (x1 − x3 > 6) ∧ (x3 = x5 + 4) ∧ (x1 − x5 ≤ 1)backtrack x1 − x3 ≤ 6 ∨ (x3 6= x5 + 4) ∨ (x2 − x3 > 2)keep@1 (x1 − x3 > 6)keep@2 (x3 = x5 + 4)
BCP (x2 − x3 > 2). . .
87
Procedures de decision pour SMT
Puisque la procedure de decision est maintenant partie prenantedes choix et rebroussements du solveur SAT, il est fondamentalqu’elle possede les proprietes suivantes:
I Incrementalite, pour etre appelee successivement sur une suited’ensembles de contraintes C′ ⊂ C1 ⊂ . . . ⊂ Ck afin que letraitement d’un ensemble Ci ne necessite pas de tout refairedepuis le debut, mais reutilise le traitement effectue pour Ci−1
I Backtrackabilite, pour revenir efficacement a un etat anterieurde l’algorithme sans avoir a tout re-initialiser
I Explications, pour calculer des unsat cores
I Propagations, pour detecter rapidement de nouveaux faits (oucontraintes) impliques par un ensemble de contraintes
88
Union de deux theories
Un des principaux problemes sous-jacents a l’implementation d’unsolveur SMT est le probleme de la construction d’une procedure dedecision pour l’union de theories
Mais, si T1 et T2 sont deux theories coherentes:
1. Est-ce que l’union T1 ∪ T2 est coherente?2. Peut-on construire une procedure de decision T1 ∪ T2 a partir
de procedures de decision pour T1 et T2?
90
Theories disjointes
Bien qu’il n’y ait pas de reponse dans le cas general, des resultatsont ete donnes pour certaines classes de theories
Par exemple, quand T1 et T2 n’ont pas de symboles communs (i.e.quand leurs signatures sont disjointes), on a le resultat suivant
Theoreme: Soient deux theories coherentes et disjointes T1 et T2,si T1 et T2 admettent toutes les deux un modele de cardinaliteinfinie, alors l’union T1 ∪ T2 est coherente.
Preuve (voir livre)
91
Combinaison naıve (1/2)
Meme dans le cas simple de theories disjointes, la combinaisonn’est pas une question triviale
Exemple: soit T1 la theorie de l’arithmetique lineaire, T2 la theoriede l’egalite et Φ la formule suivante:
f(x)− x = 0 ∧ f(2x− f(x)) 6= x
Une premiere idee pour decider la satisfiabilite de cette formuleconsiste a appliquer l’algorithme suivant:
1. decomposer Φ en deux formules logiques pures Φ1 et Φ2
2. conclure que Φ est satisfiable si et seulement si Φ1 et Φ2 sontsatisfiables dans T1 et T2, respectivement
92
Combinaison naıve (1/2)
Meme dans le cas simple de theories disjointes, la combinaisonn’est pas une question triviale
Exemple: soit T1 la theorie de l’arithmetique lineaire, T2 la theoriede l’egalite et Φ la formule suivante:
f(x)− x = 0 ∧ f(2x− f(x)) 6= x
Une premiere idee pour decider la satisfiabilite de cette formuleconsiste a appliquer l’algorithme suivant:
1. decomposer Φ en deux formules logiques pures Φ1 et Φ2
2. conclure que Φ est satisfiable si et seulement si Φ1 et Φ2 sontsatisfiables dans T1 et T2, respectivement
92
Combinaison naıve (1/2)
Meme dans le cas simple de theories disjointes, la combinaisonn’est pas une question triviale
Exemple: soit T1 la theorie de l’arithmetique lineaire, T2 la theoriede l’egalite et Φ la formule suivante:
f(x)− x = 0 ∧ f(2x− f(x)) 6= x
Une premiere idee pour decider la satisfiabilite de cette formuleconsiste a appliquer l’algorithme suivant:
1. decomposer Φ en deux formules logiques pures Φ1 et Φ2
2. conclure que Φ est satisfiable si et seulement si Φ1 et Φ2 sontsatisfiables dans T1 et T2, respectivement
92
Combinaison naıve (2/2)
Apres la phase de decomposition, on obtient les formules Φ1 et Φ2
(Φ1) z1 = f(x) ∧ z2 = f(x) ∧ f(z3) 6= x(Φ2) z1 − x = 0 ∧ 2x− z2 = z3
qui sont toutes les deux satisfiables dans T1 et T2, respectivement
Mais Φ1 ∧ Φ2 n’est pas satisfiable !
z1 = f(x) ∧ z2 = f(x)⇒ z1 = z2 (1)
z1 − x = 0⇒ z1 = x (2)
Par (1), (2) et 2x− z2 = z3, on a z1 = z2 = z3 = x
Par congruence, on a f(x) 6= z2 ce qui contredit f(x) = z2
Cette methode naıve de combinaison ne fonctionne pas !
93
Combinaison naıve (2/2)
Apres la phase de decomposition, on obtient les formules Φ1 et Φ2
(Φ1) z1 = f(x) ∧ z2 = f(x) ∧ f(z3) 6= x(Φ2) z1 − x = 0 ∧ 2x− z2 = z3
qui sont toutes les deux satisfiables dans T1 et T2, respectivement
Mais Φ1 ∧ Φ2 n’est pas satisfiable !
z1 = f(x) ∧ z2 = f(x)⇒ z1 = z2 (1)
z1 − x = 0⇒ z1 = x (2)
Par (1), (2) et 2x− z2 = z3, on a z1 = z2 = z3 = x
Par congruence, on a f(x) 6= z2 ce qui contredit f(x) = z2
Cette methode naıve de combinaison ne fonctionne pas !
93
Combinaison naıve (2/2)
Apres la phase de decomposition, on obtient les formules Φ1 et Φ2
(Φ1) z1 = f(x) ∧ z2 = f(x) ∧ f(z3) 6= x(Φ2) z1 − x = 0 ∧ 2x− z2 = z3
qui sont toutes les deux satisfiables dans T1 et T2, respectivement
Mais Φ1 ∧ Φ2 n’est pas satisfiable !
z1 = f(x) ∧ z2 = f(x)⇒ z1 = z2 (1)
z1 − x = 0⇒ z1 = x (2)
Par (1), (2) et 2x− z2 = z3, on a z1 = z2 = z3 = x
Par congruence, on a f(x) 6= z2 ce qui contredit f(x) = z2
Cette methode naıve de combinaison ne fonctionne pas !
93
Combinaison naıve (2/2)
Apres la phase de decomposition, on obtient les formules Φ1 et Φ2
(Φ1) z1 = f(x) ∧ z2 = f(x) ∧ f(z3) 6= x(Φ2) z1 − x = 0 ∧ 2x− z2 = z3
qui sont toutes les deux satisfiables dans T1 et T2, respectivement
Mais Φ1 ∧ Φ2 n’est pas satisfiable !
z1 = f(x) ∧ z2 = f(x)⇒ z1 = z2 (1)
z1 − x = 0⇒ z1 = x (2)
Par (1), (2) et 2x− z2 = z3, on a z1 = z2 = z3 = x
Par congruence, on a f(x) 6= z2 ce qui contredit f(x) = z2
Cette methode naıve de combinaison ne fonctionne pas !
93
Combinaison naıve (2/2)
Apres la phase de decomposition, on obtient les formules Φ1 et Φ2
(Φ1) z1 = f(x) ∧ z2 = f(x) ∧ f(z3) 6= x(Φ2) z1 − x = 0 ∧ 2x− z2 = z3
qui sont toutes les deux satisfiables dans T1 et T2, respectivement
Mais Φ1 ∧ Φ2 n’est pas satisfiable !
z1 = f(x) ∧ z2 = f(x)⇒ z1 = z2 (1)
z1 − x = 0⇒ z1 = x (2)
Par (1), (2) et 2x− z2 = z3, on a z1 = z2 = z3 = x
Par congruence, on a f(x) 6= z2 ce qui contredit f(x) = z2
Cette methode naıve de combinaison ne fonctionne pas !
93
Combinaison naıve (2/2)
Apres la phase de decomposition, on obtient les formules Φ1 et Φ2
(Φ1) z1 = f(x) ∧ z2 = f(x) ∧ f(z3) 6= x(Φ2) z1 − x = 0 ∧ 2x− z2 = z3
qui sont toutes les deux satisfiables dans T1 et T2, respectivement
Mais Φ1 ∧ Φ2 n’est pas satisfiable !
z1 = f(x) ∧ z2 = f(x)⇒ z1 = z2 (1)
z1 − x = 0⇒ z1 = x (2)
Par (1), (2) et 2x− z2 = z3, on a z1 = z2 = z3 = x
Par congruence, on a f(x) 6= z2 ce qui contredit f(x) = z2
Cette methode naıve de combinaison ne fonctionne pas !
93
Combinaison naıve (2/2)
Apres la phase de decomposition, on obtient les formules Φ1 et Φ2
(Φ1) z1 = f(x) ∧ z2 = f(x) ∧ f(z3) 6= x(Φ2) z1 − x = 0 ∧ 2x− z2 = z3
qui sont toutes les deux satisfiables dans T1 et T2, respectivement
Mais Φ1 ∧ Φ2 n’est pas satisfiable !
z1 = f(x) ∧ z2 = f(x)⇒ z1 = z2 (1)
z1 − x = 0⇒ z1 = x (2)
Par (1), (2) et 2x− z2 = z3, on a z1 = z2 = z3 = x
Par congruence, on a f(x) 6= z2 ce qui contredit f(x) = z2
Cette methode naıve de combinaison ne fonctionne pas !
93
Combinaison naıve (2/2)
Apres la phase de decomposition, on obtient les formules Φ1 et Φ2
(Φ1) z1 = f(x) ∧ z2 = f(x) ∧ f(z3) 6= x(Φ2) z1 − x = 0 ∧ 2x− z2 = z3
qui sont toutes les deux satisfiables dans T1 et T2, respectivement
Mais Φ1 ∧ Φ2 n’est pas satisfiable !
z1 = f(x) ∧ z2 = f(x)⇒ z1 = z2 (1)
z1 − x = 0⇒ z1 = x (2)
Par (1), (2) et 2x− z2 = z3, on a z1 = z2 = z3 = x
Par congruence, on a f(x) 6= z2 ce qui contredit f(x) = z2
Cette methode naıve de combinaison ne fonctionne pas !
93
Interpolants
La non-satisfiabilite d’une telle conjonction Φ1 ∧ Φ2 est localiseedans une formule close, appelee interpolant, qui ne contient quedes symboles communs aux deux theories
Theoreme Coherence jointe [Robinson, Craig].
Soient deux theories coherentes T1 et T2, l’union T1 ∪ T2 estincoherente ssi il existe un interpolant Φ tel que T1 |= Φ etT2 |= ¬Φ
Dans l’exemple precedent, un interpolant pour la conjonctionΦ1 ∧ Φ2 est par exemple x = z1 ∧ x = z3
94
La methode de Nelson-Oppen
Les algorithmes de combinaison de procedures de decisionimplementent des techniques efficaces pour calculer cesinterpolants, c’est le cas de la methode de Nelson-Oppen
Cette methode s’applique a des theories disjointes ayant les deuxproprietes suivantes :
I stables a l’infiniToute formule satisfiable dans ces theories doit l’etre au moinspour un modele de cardinalite infinie
I convexes
Si T |= ∀~x.(φ⇒ x1 = y1 ∨ . . . ∨ xn = yn) alorsil existe 1 ≤ i ≤ n tel que T |= ∀~x.(φ⇒ xi = yi)
95
La methode de Nelson-Oppen
Les algorithmes de combinaison de procedures de decisionimplementent des techniques efficaces pour calculer cesinterpolants, c’est le cas de la methode de Nelson-Oppen
Cette methode s’applique a des theories disjointes ayant les deuxproprietes suivantes :
I stables a l’infiniToute formule satisfiable dans ces theories doit l’etre au moinspour un modele de cardinalite infinie
I convexes
Si T |= ∀~x.(φ⇒ x1 = y1 ∨ . . . ∨ xn = yn) alorsil existe 1 ≤ i ≤ n tel que T |= ∀~x.(φ⇒ xi = yi)
95
Algorithme de Nelson-Oppen
def NO(φ):(φ1, φ2) = purification(φ)while True:
(res1, eq1) = Tsolve1(φ1)
(res2, eq2) = Tsolve2(φ2)
if res1 == UNSAT or res2 == UNSAT:
return UNSAT
if eq1 == eq2 == ∅:return SAT
φ1 = φ1 ∧ eq1 ∧ eq2
φ2 = φ2 ∧ eq1 ∧ eq2
Preuve de correction (voir livre, technique d’amalgamation)
96
NO : exemple
f(x)− x = 0 ∧ f(2x− f(x)) 6= x.
φ1 ≡ z1 = f(x) ∧ z2 = f(x) ∧ f(z3) 6= xφ2 ≡ z1 − x = 0 ∧ 2x− z2 = z3
φ1
φ2
(res1, eq1)
(res2, eq2)
97
NO : exemple
f(x)− x = 0 ∧ f(2x− f(x)) 6= x.
φ1 ≡ z1 = f(x) ∧ z2 = f(x) ∧ f(z3) 6= xφ2 ≡ z1 − x = 0 ∧ 2x− z2 = z3
(1)
φ1 z1 = f(x) ∧ z2 = f(x) ∧ f(z3) 6= x
φ2 z1 − x = 0 ∧ 2x− z2 = z3
(res1, eq1) (SAT, z1 = z2)
(res2, eq2) (SAT, z1 = x)
97
NO : exemple
f(x)− x = 0 ∧ f(2x− f(x)) 6= x.
φ1 ≡ z1 = f(x) ∧ z2 = f(x) ∧ f(z3) 6= xφ2 ≡ z1 − x = 0 ∧ 2x− z2 = z3
(2)
φ1z1 = f(x) ∧ z2 = f(x) ∧ f(z3) 6= x∧z1 = z2 ∧ z1 = x
φ2z1 − x = 0 ∧ 2x− z2 = z3∧z1 = z2 ∧ z1 = x
(res1, eq1) (SAT, ∅)
(res2, eq2) (SAT, x = z3)
97
NO : exemple
f(x)− x = 0 ∧ f(2x− f(x)) 6= x.
φ1 ≡ z1 = f(x) ∧ z2 = f(x) ∧ f(z3) 6= xφ2 ≡ z1 − x = 0 ∧ 2x− z2 = z3
(3)
φ1z1 = f(x) ∧ z2 = f(x) ∧ f(z3) 6= x∧z1 = z2 ∧ z1 = x ∧ x = z3
φ2z1 − x = 0 ∧ 2x− z2 = z3∧z1 = z2 ∧ z1 = x ∧ x = z3
(res1, eq1) UNSAT,−
(res2, eq2) SAT,−
97
Points faibles de la methode de Nelson-Oppen
Cette methode a deux points faibles:
I Elle necessite d’instrumenter les procedures de decision pourdeduire les egalites impliquees par une formule
I Le traitement des theories non-convexes necessite
1. d’etendre le mecanisme de deduction pour generer desdisjonctions d’egalites
2. de traiter ces disjonctions au sein meme de l’algorithme de lacombinaison de theories, alors que ces disjonctions seraientmieux traitees par un solveur SAT
Des variantes de cette methode permettent d’eviter ces problemes:
I L’analyse pas cas a la demande (splitting on demand)I La combinaison retardee (Delayed Theory Combination)I La combinaison dirigee par les modeles (model-based
theory combination)
98
L’analyse par cas a la demande
Cette extension s’appuie sur une fonction splitting on demand
pour ajouter a la formule d’entree des clauses d’analyse par casmodulo theorie
def cdclT(φ):µ = []
dl = 0
while True:
res = theory_and_boolean_propagation(φ,µ)if res == SAT:
if all_variables_are_assigned(φ,µ):return SAT
splitting_on_demand(φ,µ)...
else:
...
(restrictions pour garantir la terminaison et la correction)
99
La combinaison retardee (DTC)
Faire cooperer directement les procedures de decision avec lesolveur SAT, ce dernier se chargeant de l’echange des egalites(entre variables d’interface) entre les procedures
Peut etre vu comme l’integration de NO dans CDCL
Apres avoir purifie la formule en entree φ en deux formules φ1 etφ2, DTC initialise une ensemble contenant l’ensemble des atomessur lesquels effectuer des decisions, ainsi que toutes les egalitesentre les variables partagees par φ1 et φ2
(voir algo dans le livre)
100
La combinaison dirigee par les modeles (MBTC)
DTC doit gerer un nombre quadratique d’egalites entre variablespartagees et il choisit en aveugle parmi ces egalites
MBTC etend DTC afin que les procedures de decision de deduisentsimplement des egalites impliquees par un modele candidat
Par exemple, a partir de:
0 ≤ x ≤ 1 ∧ 0 ≤ y ≤ 1 ∧ z = y − 1
la theorie de l’arithmetique lineaire sur les entiers peut construirele modele {x = 0, y = 0, z − 1} et deduire x = y
Si ces egalites sont en contradiction avec les autres theories, il fautrebrousser. Pour cela, ces egalites dirigees par les modeles sontgenerees en appelant theory splitting on demand
Par exemple, x = y sera donnee par la clause x = y ∨ x 6= y (avecpriorite de decision a x = y)
101
La combinaison dirigee par les modeles (MBTC)
DTC doit gerer un nombre quadratique d’egalites entre variablespartagees et il choisit en aveugle parmi ces egalites
MBTC etend DTC afin que les procedures de decision de deduisentsimplement des egalites impliquees par un modele candidat
Par exemple, a partir de:
0 ≤ x ≤ 1 ∧ 0 ≤ y ≤ 1 ∧ z = y − 1
la theorie de l’arithmetique lineaire sur les entiers peut construirele modele {x = 0, y = 0, z − 1} et deduire x = y
Si ces egalites sont en contradiction avec les autres theories, il fautrebrousser. Pour cela, ces egalites dirigees par les modeles sontgenerees en appelant theory splitting on demand
Par exemple, x = y sera donnee par la clause x = y ∨ x 6= y (avecpriorite de decision a x = y)
101
La revolution SMT
70’s: Stanford Pascal Verifier (algorithm de Nelson-Oppen)1984: Shostak algorithm1992: Simplify1995: SVC2001: ICS2002: CVC, haRVey2004: CVC Lite2005: Barcelogic, MathSAT2005: Yices2006: CVC3, Alt-Ergo2007: Z3, MathSAT42008: Boolector, OpenSMT, Beaver,Yices22009: STP, VeriT2010: MathSAT5, SONOLAR2011: STP2, SMTInterpol2012: CVC42015: OpenSMT22015: SMT-Rat. . .
103
SMT-Lib
The Satisfiability Modulo Theory Library (SMT-Lib)
http://www.smtlib.org/
Une communaute internationale autour des solveurs SMT:
I Une description rigoureuse du langage logique d’entree(SMT-Lib2) (avec une liste de theories)
I L’organisation d’une competition (SMT-Comp) tous les ansavec plusieurs categories (QF-LIA, AUFLIA, etc.)
I Une tres grande bibliotheque de benchmarks (qu’il fautcontinuer a alimenter)
104
Mini solveur SMT
Realisation d’un solveur SMT pour la theorie de l’egaliteuniquement entre variables (peut-etre realise en binome)
Langage d’entree des fichiers .cnfuf
c Exemple d’un fichier .cnfuf
c les variables sont representees par des entiers
p cnf 4 2
1=2 2<>4 1=3
1=3 4<>1
A rendre pour le 8 juin 2018.
106