ENS 2017-2018 Satis abilit e Modulo Th eories (SMT)conchon/ENS/cours10.pdf · Plan du cours 1....

281
ENS 2017-2018 Satisfiabilit´ e Modulo Th´ eories (SMT) Sylvain Conchon LRI (UMR 8623), Universit´ e Paris-Sud ´ Equipe Toccata, INRIA Saclay – ˆ Ile-de-France 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

SOLVEUR SAT MODERNES

Le probleme SAT

Est-ce que la formule propositionnelle

(p ∨ q ∨ ¬r) ∧ (r ∨ ¬p)

est satisfiable?

4

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

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}

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}

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}

12

Resolution : Example

Resolve2 ∨ 3 ∈ F 2 ∨ 3 ∈ F

F := F ∪ {3}

F = {1 ∨ 2, 1 ∨ 3, 3, 2 ∨ 3, 2 ∨ 3, 3}

12

Resolution : Example

Empty3 ∈ F 3 ∈ FF := F ∪ {⊥}

F = {1 ∨ 2, 1 ∨ 3, 3, 2 ∨ 3, 2 ∨ 3, 3}

12

Resolution : Example

Empty3 ∈ F 3 ∈ FF := F ∪ {⊥}

F = {1 ∨ 2, 1 ∨ 3, 3, 2 ∨ 3, 2 ∨ 3, 3,⊥}

12

Resolution : Example

Fail⊥ ∈ F

return Unsat

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

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 = []

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

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 = []

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

DE PETITS MOTEURS DE PREUVE

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

INTERFACER SAT AVEC DES PROCEDURES DEDECISION

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

Exemple avec SMT hors ligne

¬(a = b)(x = a ∨ x = b)(y = a ∨ y = b)(z = a ∨ z = b)¬(x = y)

84

Exemple avec SMT hors ligne

T2B

¬P1

(P2 ∨ P3)(P4 ∨ P5)(P6 ∨ P7)¬P8

84

Exemple avec SMT hors ligne

CDCL

¬P1,¬P8

¬P3, P2

¬P5, P4

¬P7, P6

84

Exemple avec SMT hors ligne

B2T

¬(a = b),¬(x = y)¬(x = b), x = a¬(y = b), y = a¬(z = b), z = a

84

Exemple avec SMT hors ligne

Tsolve UNSAT,

x = a,y = a,¬(x = y)

84

Exemple avec SMT hors ligne

T2B

P2

P4

¬P8

84

Exemple avec SMT hors ligne

add ¬uc

¬P1

(P2 ∨ P3)(P4 ∨ P5)(P6 ∨ P7)¬P8

(P8 ∨ ¬P2 ∨ ¬P4)

84

Exemple avec SMT hors ligne

CDCL

¬P1,¬P8

¬P3, P2

¬P4, P5

¬P7, P6

84

Exemple avec SMT hors ligne

B2T

¬(a = b),¬(x = y)¬(x = b), x = a¬(y = a), y = b¬(z = b), z = a

84

Exemple avec SMT hors ligne

Tsolve SAT

84

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

COMBINAISON DE PROCEDURES DE DECISION

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

CONCLUSION

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

PROJET

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