Chapitre 5 Satisfaisabilité de formes conjonctives normales

publicité
Chapitre 5 Satisfaisabilité de formes conjonctives normales
Chapitre 5
Satisfaisabilité de formes conjonctives normales
Chapitre 5 Satisfaisabilité de formes conjonctives normales
Table de Matières
Vers an algorithme ecace
Une stratégie d'énumération, et une optimisation
Variables qui apparaissent avec une seule polarité
L'algorithme DPLL complet
Un exemple complet
Conclusion
Chapitre 5 Satisfaisabilité de formes conjonctives normales
Le problème
I
I
I
I
Satisfaisabilité d'une formule DNF: très facile
Validité d'une formule CNF: très facile
Beaucoup de problèmes concernent la satisfaisabilité d'une
formule en CNF (ou facilement transformée en CNF):
Problème de planication :
I beaucoup de contraintes à résoudre (qui doivent toutes être
satisfaites
⇒
Conjonction)
⇒
I chaque contrainte consiste en plusieurs alternatives (
Disjonction)
Chapitre 5 Satisfaisabilité de formes conjonctives normales
Le problème
I
I
I
I
Satisfaisabilité d'une formule DNF: très facile
Validité d'une formule CNF: très facile
Beaucoup de problèmes concernent la satisfaisabilité d'une
formule en CNF (ou facilement transformée en CNF):
Problème de planication :
I beaucoup de contraintes à résoudre (qui doivent toutes être
satisfaites
⇒
Conjonction)
⇒
I chaque contrainte consiste en plusieurs alternatives (
Disjonction)
Chapitre 5 Satisfaisabilité de formes conjonctives normales
Le problème
I
I
I
I
Satisfaisabilité d'une formule DNF: très facile
Validité d'une formule CNF: très facile
Beaucoup de problèmes concernent la satisfaisabilité d'une
formule en CNF (ou facilement transformée en CNF):
Problème de planication :
I beaucoup de contraintes à résoudre (qui doivent toutes être
satisfaites
⇒
Conjonction)
⇒
I chaque contrainte consiste en plusieurs alternatives (
Disjonction)
Chapitre 5 Satisfaisabilité de formes conjonctives normales
Le problème
I
I
I
I
Satisfaisabilité d'une formule DNF: très facile
Validité d'une formule CNF: très facile
Beaucoup de problèmes concernent la satisfaisabilité d'une
formule en CNF (ou facilement transformée en CNF):
Problème de planication :
I beaucoup de contraintes à résoudre (qui doivent toutes être
satisfaites
⇒
Conjonction)
⇒
I chaque contrainte consiste en plusieurs alternatives (
Disjonction)
Chapitre 5 Satisfaisabilité de formes conjonctives normales
Le problème
I
I
I
I
Satisfaisabilité d'une formule DNF: très facile
Validité d'une formule CNF: très facile
Beaucoup de problèmes concernent la satisfaisabilité d'une
formule en CNF (ou facilement transformée en CNF):
Problème de planication :
I beaucoup de contraintes à résoudre (qui doivent toutes être
satisfaites
⇒
Conjonction)
⇒
I chaque contrainte consiste en plusieurs alternatives (
Disjonction)
Chapitre 5 Satisfaisabilité de formes conjonctives normales
Le problème
I
I
I
I
Satisfaisabilité d'une formule DNF: très facile
Validité d'une formule CNF: très facile
Beaucoup de problèmes concernent la satisfaisabilité d'une
formule en CNF (ou facilement transformée en CNF):
Problème de planication :
I beaucoup de contraintes à résoudre (qui doivent toutes être
satisfaites
⇒
Conjonction)
⇒
I chaque contrainte consiste en plusieurs alternatives (
Disjonction)
Chapitre 5 Satisfaisabilité de formes conjonctives normales
Table de vérité ?
I
I
La table d'une vérité pour une formule avec n variable a 2
lignes.
Avec n = 300:
n
2300 = 210 30 ≈ 103 30 = 1090
I
I
Nombre estimé de particules élémentaires dans l'univers
connu : 1079 1081
Des problèmes réalistes peuvent avoir facilement des milliers
de variables.
Chapitre 5 Satisfaisabilité de formes conjonctives normales
Table de vérité ?
I
I
La table d'une vérité pour une formule avec n variable a 2
lignes.
Avec n = 300:
n
2300 = 210 30 ≈ 103 30 = 1090
I
I
Nombre estimé de particules élémentaires dans l'univers
connu : 1079 1081
Des problèmes réalistes peuvent avoir facilement des milliers
de variables.
Chapitre 5 Satisfaisabilité de formes conjonctives normales
Table de vérité ?
I
I
La table d'une vérité pour une formule avec n variable a 2
lignes.
Avec n = 300:
n
2300 = 210 30 ≈ 103 30 = 1090
I
I
Nombre estimé de particules élémentaires dans l'univers
connu : 1079 1081
Des problèmes réalistes peuvent avoir facilement des milliers
de variables.
Chapitre 5 Satisfaisabilité de formes conjonctives normales
Table de vérité ?
I
I
La table d'une vérité pour une formule avec n variable a 2
lignes.
Avec n = 300:
n
2300 = 210 30 ≈ 103 30 = 1090
I
I
Nombre estimé de particules élémentaires dans l'univers
connu : 1079 1081
Des problèmes réalistes peuvent avoir facilement des milliers
de variables.
Chapitre 5 Satisfaisabilité de formes conjonctives normales
Table de vérité ?
I
I
La table d'une vérité pour une formule avec n variable a 2
lignes.
Avec n = 300:
n
2300 = 210 30 ≈ 103 30 = 1090
I
I
Nombre estimé de particules élémentaires dans l'univers
connu : 1079 1081
Des problèmes réalistes peuvent avoir facilement des milliers
de variables.
Chapitre 5 Satisfaisabilité de formes conjonctives normales
Table de vérité ?
I
I
La table d'une vérité pour une formule avec n variable a 2
lignes.
Avec n = 300:
n
2300 = 210 30 ≈ 103 30 = 1090
I
I
Nombre estimé de particules élémentaires dans l'univers
connu : 1079 1081
Des problèmes réalistes peuvent avoir facilement des milliers
de variables.
Chapitre 5 Satisfaisabilité de formes conjonctives normales
Table de vérité ?
I
I
La table d'une vérité pour une formule avec n variable a 2
lignes.
Avec n = 300:
n
2300 = 210 30 ≈ 103 30 = 1090
I
I
Nombre estimé de particules élémentaires dans l'univers
connu : 1079 1081
Des problèmes réalistes peuvent avoir facilement des milliers
de variables.
Chapitre 5 Satisfaisabilité de formes conjonctives normales
Vers an algorithme ecace
L'algorithme DPLL
I
I
I
Dû à Martin Davis, Hilary Putnam, George Logemann, Donald
Loveland, 1962
Parfois aussi (incorrectement) appelé algorithme de
Davis-Putnam (DP)
C'est la base des SAT-solveurs actuels.
Chapitre 5 Satisfaisabilité de formes conjonctives normales
Vers an algorithme ecace
L'algorithme DPLL
I
I
I
Dû à Martin Davis, Hilary Putnam, George Logemann, Donald
Loveland, 1962
Parfois aussi (incorrectement) appelé algorithme de
Davis-Putnam (DP)
C'est la base des SAT-solveurs actuels.
Chapitre 5 Satisfaisabilité de formes conjonctives normales
Vers an algorithme ecace
L'algorithme DPLL
I
I
I
Dû à Martin Davis, Hilary Putnam, George Logemann, Donald
Loveland, 1962
Parfois aussi (incorrectement) appelé algorithme de
Davis-Putnam (DP)
C'est la base des SAT-solveurs actuels.
Chapitre 5 Satisfaisabilité de formes conjonctives normales
Vers an algorithme ecace
Polarité d'une occurrence d'une variable
I
Variable x apparaît avec polarité positive dans une clause
... ∨ x ∨ ...
I
Variable x apparaît avec polarité négative dans une clause
. . . ∨ ¬x ∨ . . .
I
A priori, une variable peut apparaître à la fois avec polarité
positive et avec polarité négative dans une clause :
y1 ∨ x ∨ y2 ∨ ¬x ∨ y3
Chapitre 5 Satisfaisabilité de formes conjonctives normales
Vers an algorithme ecace
Polarité d'une occurrence d'une variable
I
Variable x apparaît avec polarité positive dans une clause
... ∨ x ∨ ...
I
Variable x apparaît avec polarité négative dans une clause
. . . ∨ ¬x ∨ . . .
I
A priori, une variable peut apparaître à la fois avec polarité
positive et avec polarité négative dans une clause :
y1 ∨ x ∨ y2 ∨ ¬x ∨ y3
Chapitre 5 Satisfaisabilité de formes conjonctives normales
Vers an algorithme ecace
Polarité d'une occurrence d'une variable
I
Variable x apparaît avec polarité positive dans une clause
... ∨ x ∨ ...
I
Variable x apparaît avec polarité négative dans une clause
. . . ∨ ¬x ∨ . . .
I
A priori, une variable peut apparaître à la fois avec polarité
positive et avec polarité négative dans une clause :
y1 ∨ x ∨ y2 ∨ ¬x ∨ y3
Chapitre 5 Satisfaisabilité de formes conjonctives normales
Vers an algorithme ecace
Hypothèse sur la forme des clauses
I
I
Hypothèse : aucune variable apparaît deux fois dans la même
clause. Justication :
Si deux occurrences de la même polarité :
... ∨ x ∨ ... ∨ x ∨ ...
I
on peut simplier la clause
Si deux occurrences de polarité opposée :
. . . ∨ x ∨ . . . ∨ ¬x ∨ . . .
Tautologie, on peut supprimer la clause.
Chapitre 5 Satisfaisabilité de formes conjonctives normales
Vers an algorithme ecace
Hypothèse sur la forme des clauses
I
I
Hypothèse : aucune variable apparaît deux fois dans la même
clause. Justication :
Si deux occurrences de la même polarité :
... ∨ x ∨ ... ∨ x ∨ ...
I
on peut simplier la clause
Si deux occurrences de polarité opposée :
. . . ∨ x ∨ . . . ∨ ¬x ∨ . . .
Tautologie, on peut supprimer la clause.
Chapitre 5 Satisfaisabilité de formes conjonctives normales
Vers an algorithme ecace
Hypothèse sur la forme des clauses
I
I
Hypothèse : aucune variable apparaît deux fois dans la même
clause. Justication :
Si deux occurrences de la même polarité :
... ∨ x ∨ ... ∨ x ∨ ...
I
on peut simplier la clause
Si deux occurrences de polarité opposée :
. . . ∨ x ∨ . . . ∨ ¬x ∨ . . .
Tautologie, on peut supprimer la clause.
Chapitre 5 Satisfaisabilité de formes conjonctives normales
Vers an algorithme ecace
Mieux que
I
I
I
Générer et tester
?
Table de vérité : algorithme générer et tester Avantage de ce paradigme : séparation de l'algorithme en deux
parties clairement distinguées.
Inconvénient : parfois, on peut détecter qu'une formule n'est
pas satisfaisable en essayant des valeurs pour quelques unes de
ses variables seulement :
x ∧ (¬x ∨ y1 ∨ ¬y2 ∨ y3 ) ∧ ¬x ∧ (y2 ∨ ¬y4 ∨ y5 )
(essayer les valeurs possibles pour x !)
Chapitre 5 Satisfaisabilité de formes conjonctives normales
Vers an algorithme ecace
Mieux que
I
I
I
Générer et tester
?
Table de vérité : algorithme générer et tester Avantage de ce paradigme : séparation de l'algorithme en deux
parties clairement distinguées.
Inconvénient : parfois, on peut détecter qu'une formule n'est
pas satisfaisable en essayant des valeurs pour quelques unes de
ses variables seulement :
x ∧ (¬x ∨ y1 ∨ ¬y2 ∨ y3 ) ∧ ¬x ∧ (y2 ∨ ¬y4 ∨ y5 )
(essayer les valeurs possibles pour x !)
Chapitre 5 Satisfaisabilité de formes conjonctives normales
Vers an algorithme ecace
Mieux que
I
I
I
Générer et tester
?
Table de vérité : algorithme générer et tester Avantage de ce paradigme : séparation de l'algorithme en deux
parties clairement distinguées.
Inconvénient : parfois, on peut détecter qu'une formule n'est
pas satisfaisable en essayant des valeurs pour quelques unes de
ses variables seulement :
x ∧ (¬x ∨ y1 ∨ ¬y2 ∨ y3 ) ∧ ¬x ∧ (y2 ∨ ¬y4 ∨ y5 )
(essayer les valeurs possibles pour x !)
Chapitre 5 Satisfaisabilité de formes conjonctives normales
Vers an algorithme ecace
Évaluation partielle d'une clause disjonctive
d : clause disjonctive

True




 True
d [x /b] = d \ {¬x }


 d \ {x }


d
si b = 1 et x apparait avec polarité positive en d
si b = 0 et x apparait avec polarité négative en d
si b = 1 et x apparait avec polarité négative en d
si b = 0 et x apparait avec polarité positive en d
si x n'apparait pas en d .
Ici : d \ l est la clause d sans le littéral l
Chapitre 5 Satisfaisabilité de formes conjonctives normales
Vers an algorithme ecace
Évaluation partielle d'une clause disjonctive
d : clause disjonctive

True




 True
d [x /b] = d \ {¬x }


 d \ {x }


d
si b = 1 et x apparait avec polarité positive en d
si b = 0 et x apparait avec polarité négative en d
si b = 1 et x apparait avec polarité négative en d
si b = 0 et x apparait avec polarité positive en d
si x n'apparait pas en d .
Ici : d \ l est la clause d sans le littéral l
Chapitre 5 Satisfaisabilité de formes conjonctives normales
Vers an algorithme ecace
Évaluation partielle d'une clause disjonctive
d : clause disjonctive

True




 True
d [x /b] = d \ {¬x }


 d \ {x }


d
si b = 1 et x apparait avec polarité positive en d
si b = 0 et x apparait avec polarité négative en d
si b = 1 et x apparait avec polarité négative en d
si b = 0 et x apparait avec polarité positive en d
si x n'apparait pas en d .
Ici : d \ l est la clause d sans le littéral l
Chapitre 5 Satisfaisabilité de formes conjonctives normales
Vers an algorithme ecace
Évaluation partielle d'une clause disjonctive
d : clause disjonctive

True




 True
d [x /b] = d \ {¬x }


 d \ {x }


d
si b = 1 et x apparait avec polarité positive en d
si b = 0 et x apparait avec polarité négative en d
si b = 1 et x apparait avec polarité négative en d
si b = 0 et x apparait avec polarité positive en d
si x n'apparait pas en d .
Ici : d \ l est la clause d sans le littéral l
Chapitre 5 Satisfaisabilité de formes conjonctives normales
Vers an algorithme ecace
Évaluation partielle d'une clause disjonctive
d : clause disjonctive

True




 True
d [x /b] = d \ {¬x }


 d \ {x }


d
si b = 1 et x apparait avec polarité positive en d
si b = 0 et x apparait avec polarité négative en d
si b = 1 et x apparait avec polarité négative en d
si b = 0 et x apparait avec polarité positive en d
si x n'apparait pas en d .
Ici : d \ l est la clause d sans le littéral l
Chapitre 5 Satisfaisabilité de formes conjonctives normales
Vers an algorithme ecace
Évaluation partielle d'une clause disjonctive
d : clause disjonctive

True




 True
d [x /b] = d \ {¬x }


 d \ {x }


d
si b = 1 et x apparait avec polarité positive en d
si b = 0 et x apparait avec polarité négative en d
si b = 1 et x apparait avec polarité négative en d
si b = 0 et x apparait avec polarité positive en d
si x n'apparait pas en d .
Ici : d \ l est la clause d sans le littéral l
Chapitre 5 Satisfaisabilité de formes conjonctives normales
Vers an algorithme ecace
Exemples d'évaluation partielle d'une clause
(x ∨ ¬y ∨ z )[x /1]
(¬x ∨ ¬y ∨ z )[x /0]
(¬x ∨ ¬y ∨ z )[x /1]
(x ∨ ¬y ∨ z )[x /0]
(y1 ∨ ¬y2 ∨ z )[x /1]
=
=
=
=
=
True
True
(¬y ∨ z )
(¬y ∨ z )
(y1 ∨ ¬y2 ∨ z )
Chapitre 5 Satisfaisabilité de formes conjonctives normales
Vers an algorithme ecace
Exemples d'évaluation partielle d'une clause
(x ∨ ¬y ∨ z )[x /1]
(¬x ∨ ¬y ∨ z )[x /0]
(¬x ∨ ¬y ∨ z )[x /1]
(x ∨ ¬y ∨ z )[x /0]
(y1 ∨ ¬y2 ∨ z )[x /1]
=
=
=
=
=
True
True
(¬y ∨ z )
(¬y ∨ z )
(y1 ∨ ¬y2 ∨ z )
Chapitre 5 Satisfaisabilité de formes conjonctives normales
Vers an algorithme ecace
Exemples d'évaluation partielle d'une clause
(x ∨ ¬y ∨ z )[x /1]
(¬x ∨ ¬y ∨ z )[x /0]
(¬x ∨ ¬y ∨ z )[x /1]
(x ∨ ¬y ∨ z )[x /0]
(y1 ∨ ¬y2 ∨ z )[x /1]
=
=
=
=
=
True
True
(¬y ∨ z )
(¬y ∨ z )
(y1 ∨ ¬y2 ∨ z )
Chapitre 5 Satisfaisabilité de formes conjonctives normales
Vers an algorithme ecace
Exemples d'évaluation partielle d'une clause
(x ∨ ¬y ∨ z )[x /1]
(¬x ∨ ¬y ∨ z )[x /0]
(¬x ∨ ¬y ∨ z )[x /1]
(x ∨ ¬y ∨ z )[x /0]
(y1 ∨ ¬y2 ∨ z )[x /1]
=
=
=
=
=
True
True
(¬y ∨ z )
(¬y ∨ z )
(y1 ∨ ¬y2 ∨ z )
Chapitre 5 Satisfaisabilité de formes conjonctives normales
Vers an algorithme ecace
Exemples d'évaluation partielle d'une clause
(x ∨ ¬y ∨ z )[x /1]
(¬x ∨ ¬y ∨ z )[x /0]
(¬x ∨ ¬y ∨ z )[x /1]
(x ∨ ¬y ∨ z )[x /0]
(y1 ∨ ¬y2 ∨ z )[x /1]
=
=
=
=
=
True
True
(¬y ∨ z )
(¬y ∨ z )
(y1 ∨ ¬y2 ∨ z )
Chapitre 5 Satisfaisabilité de formes conjonctives normales
Vers an algorithme ecace
Évaluation partielle d'une formule en CNF
c : formule en forme CNF de la forme d1 ∧ . . . ∧ d
n
c [x /b ] =
^
1≤i ≤n
d [x /b]
i
di [x /b]6=True
C'est-à-dire :
I Évaluation partielle de toutes les clauses
I Supprimer les clauses évalues comme True
Chapitre 5 Satisfaisabilité de formes conjonctives normales
Vers an algorithme ecace
Exemples d'évaluation partielle d'une formule en CNF
c
c [x /0]
c [x /1]
=
=
=
=
=
x
False
False
True
False
∧(¬x ∨ y1 ∨ ¬y2 ∨ y3 )
∧ True
∧¬x
∧ True
∧(y2 ∨ ¬y4 ∨ y5 )
∧ (y2 ∨ ¬y4 ∨ y5 )
∧ (y1 ∨ ¬y2 ∨ y3 )
∧ False
∧ (y2 ∨ ¬y4 ∨ y5 )
Chapitre 5 Satisfaisabilité de formes conjonctives normales
Vers an algorithme ecace
Exemples d'évaluation partielle d'une formule en CNF
c
c [x /0]
c [x /1]
=
=
=
=
=
x
False
False
True
False
∧(¬x ∨ y1 ∨ ¬y2 ∨ y3 )
∧ True
∧¬x
∧ True
∧(y2 ∨ ¬y4 ∨ y5 )
∧ (y2 ∨ ¬y4 ∨ y5 )
∧ (y1 ∨ ¬y2 ∨ y3 )
∧ False
∧ (y2 ∨ ¬y4 ∨ y5 )
Chapitre 5 Satisfaisabilité de formes conjonctives normales
Vers an algorithme ecace
Exemples d'évaluation partielle d'une formule en CNF
c
c [x /0]
c [x /1]
=
=
=
=
=
x
False
False
True
False
∧(¬x ∨ y1 ∨ ¬y2 ∨ y3 )
∧ True
∧¬x
∧ True
∧(y2 ∨ ¬y4 ∨ y5 )
∧ (y2 ∨ ¬y4 ∨ y5 )
∧ (y1 ∨ ¬y2 ∨ y3 )
∧ False
∧ (y2 ∨ ¬y4 ∨ y5 )
Chapitre 5 Satisfaisabilité de formes conjonctives normales
Vers an algorithme ecace
Exemples d'évaluation partielle d'une formule en CNF
c
c [x /0]
c [x /1]
=
=
=
=
=
x
False
False
True
False
∧(¬x ∨ y1 ∨ ¬y2 ∨ y3 )
∧ True
∧¬x
∧ True
∧(y2 ∨ ¬y4 ∨ y5 )
∧ (y2 ∨ ¬y4 ∨ y5 )
∧ (y1 ∨ ¬y2 ∨ y3 )
∧ False
∧ (y2 ∨ ¬y4 ∨ y5 )
Chapitre 5 Satisfaisabilité de formes conjonctives normales
Vers an algorithme ecace
Exemples d'évaluation partielle d'une formule en CNF
c
c [x /0]
c [x /1]
=
=
=
=
=
x
False
False
True
False
∧(¬x ∨ y1 ∨ ¬y2 ∨ y3 )
∧ True
∧¬x
∧ True
∧(y2 ∨ ¬y4 ∨ y5 )
∧ (y2 ∨ ¬y4 ∨ y5 )
∧ (y1 ∨ ¬y2 ∨ y3 )
∧ False
∧ (y2 ∨ ¬y4 ∨ y5 )
Chapitre 5 Satisfaisabilité de formes conjonctives normales
Vers an algorithme ecace
Rappel important
I
I
est une abréviation pour la clause disjonctive vide
Si on supprime de la clause x le littéral x on obtient la clause
vide notée False.
False
Chapitre 5 Satisfaisabilité de formes conjonctives normales
Vers an algorithme ecace
Rappel important
I
I
est une abréviation pour la clause disjonctive vide
Si on supprime de la clause x le littéral x on obtient la clause
vide notée False.
False
Chapitre 5 Satisfaisabilité de formes conjonctives normales
Vers an algorithme ecace
Propriétés de l'évaluation partielle
c : formule en forme CNF
I
[[c [x /b]]]v = [[c ]](v [x /b])
pour toute aectation v et valeur booléenne b
I
c |= c [x /0] ∨ c [x /1]
Chapitre 5 Satisfaisabilité de formes conjonctives normales
Vers an algorithme ecace
Propriétés de l'évaluation partielle
c : formule en forme CNF
I
[[c [x /b]]]v = [[c ]](v [x /b])
pour toute aectation v et valeur booléenne b
I
c |= c [x /0] ∨ c [x /1]
Chapitre 5 Satisfaisabilité de formes conjonctives normales
Vers an algorithme ecace
Un arbre de recherche
I
I
Donc, c est satisfaisable si c [x /0] est satisfaisable ou si c [x /1]
est satisfaisable.
Cela donne lieu à un arbre de recherche car il faut a priori
exploiter les deux possibilités :
c
c [x /0]
I
c [x /1]
L'arbre de recherche décrit le déroulement du programme, il
n'est pas entièrement représenté en mémoire.
Chapitre 5 Satisfaisabilité de formes conjonctives normales
Vers an algorithme ecace
Un arbre de recherche
I
I
Donc, c est satisfaisable si c [x /0] est satisfaisable ou si c [x /1]
est satisfaisable.
Cela donne lieu à un arbre de recherche car il faut a priori
exploiter les deux possibilités :
c
c [x /0]
I
c [x /1]
L'arbre de recherche décrit le déroulement du programme, il
n'est pas entièrement représenté en mémoire.
Chapitre 5 Satisfaisabilité de formes conjonctives normales
Vers an algorithme ecace
Un arbre de recherche
I
I
Donc, c est satisfaisable si c [x /0] est satisfaisable ou si c [x /1]
est satisfaisable.
Cela donne lieu à un arbre de recherche car il faut a priori
exploiter les deux possibilités :
c
c [x /0]
I
c [x /1]
L'arbre de recherche décrit le déroulement du programme, il
n'est pas entièrement représenté en mémoire.
Chapitre 5 Satisfaisabilité de formes conjonctives normales
Vers an algorithme ecace
Un premier algorithme
1. Si c est la conjonction vide, notée True, alors c est même une
tautologie, et donc en particulier satisfaisable.
2. Si c contient une clause qui est la disjonction vide, notée
False, alors c n'est pas satisfaisable.
3. Sinon, choisir une variable pivot x , et continuer sur c [x /0] et
c [x /1] (branchement dans l'arbre de recherche).
Chapitre 5 Satisfaisabilité de formes conjonctives normales
Vers an algorithme ecace
Un premier algorithme
1. Si c est la conjonction vide, notée True, alors c est même une
tautologie, et donc en particulier satisfaisable.
2. Si c contient une clause qui est la disjonction vide, notée
False, alors c n'est pas satisfaisable.
3. Sinon, choisir une variable pivot x , et continuer sur c [x /0] et
c [x /1] (branchement dans l'arbre de recherche).
Chapitre 5 Satisfaisabilité de formes conjonctives normales
Vers an algorithme ecace
Un premier algorithme
1. Si c est la conjonction vide, notée True, alors c est même une
tautologie, et donc en particulier satisfaisable.
2. Si c contient une clause qui est la disjonction vide, notée
False, alors c n'est pas satisfaisable.
3. Sinon, choisir une variable pivot x , et continuer sur c [x /0] et
c [x /1] (branchement dans l'arbre de recherche).
Chapitre 5 Satisfaisabilité de formes conjonctives normales
Vers an algorithme ecace
Exemple pour le premier algorithme
c
c[x/0]
c[x/1]
c[x/0][y/0] c[x/0][y/1]
c[x/1][z/0] c[x/1][z/1]
La construction de l'arbre s'arrête quand on peut conclure par
l'évaluation partielle.
Chapitre 5 Satisfaisabilité de formes conjonctives normales
Une stratégie d'énumération, et une optimisation
Comment choisir les variables de pivot ?
(x1 ∨ x2 ∨ x3 )
∧ (x1 ∨ x2 ∨ ¬x3 )
∧ (x1 ∨ ¬x2 ∨ x3 )
∧ (x1 ∨ ¬x2 ∨ ¬x3 )
I
I
Mauvais choix : x1 − x2
Bon choix : x3
∧
∧
∧
∧
(¬x1 ∨ x2 ∨ x3 )
∧ x3
(¬x1 ∨ x2 ∨ ¬x3 )
∧ ¬x3
(¬x1 ∨ ¬x2 ∨ x3 )
(¬x1 ∨ ¬x2 ∨ ¬x3 )
Chapitre 5 Satisfaisabilité de formes conjonctives normales
Une stratégie d'énumération, et une optimisation
Comment choisir les variables de pivot ?
(x1 ∨ x2 ∨ x3 )
∧ (x1 ∨ x2 ∨ ¬x3 )
∧ (x1 ∨ ¬x2 ∨ x3 )
∧ (x1 ∨ ¬x2 ∨ ¬x3 )
I
I
Mauvais choix : x1 − x2
Bon choix : x3
∧
∧
∧
∧
(¬x1 ∨ x2 ∨ x3 )
∧ x3
(¬x1 ∨ x2 ∨ ¬x3 )
∧ ¬x3
(¬x1 ∨ ¬x2 ∨ x3 )
(¬x1 ∨ ¬x2 ∨ ¬x3 )
Chapitre 5 Satisfaisabilité de formes conjonctives normales
Une stratégie d'énumération, et une optimisation
Comment choisir les variables de pivot ?
(x1 ∨ x2 ∨ x3 )
∧ (x1 ∨ x2 ∨ ¬x3 )
∧ (x1 ∨ ¬x2 ∨ x3 )
∧ (x1 ∨ ¬x2 ∨ ¬x3 )
I
I
Mauvais choix : x1 − x2
Bon choix : x3
∧
∧
∧
∧
(¬x1 ∨ x2 ∨ x3 )
∧ x3
(¬x1 ∨ x2 ∨ ¬x3 )
∧ ¬x3
(¬x1 ∨ ¬x2 ∨ x3 )
(¬x1 ∨ ¬x2 ∨ ¬x3 )
Chapitre 5 Satisfaisabilité de formes conjonctives normales
Une stratégie d'énumération, et une optimisation
Un bon choix de la variable pivot
I
I
S'il y a une clause qui consiste en un seul littéral x ou ¬x alors
on choisit la variable x .
Denition
Une clause (conjonctive ou disjonctive) qui consiste en un seul
littéral est appelée unitaire.
Chapitre 5 Satisfaisabilité de formes conjonctives normales
Une stratégie d'énumération, et une optimisation
Un bon choix de la variable pivot
I
I
S'il y a une clause qui consiste en un seul littéral x ou ¬x alors
on choisit la variable x .
Denition
Une clause (conjonctive ou disjonctive) qui consiste en un seul
littéral est appelée unitaire.
Chapitre 5 Satisfaisabilité de formes conjonctives normales
Une stratégie d'énumération, et une optimisation
Optimisation : Résolution unitaire
Si c contient la clause unitaire x :
I Le choix x = 0 donne forcement une formule c qui contient la
clause False.
I c est satisfaisable si et seulement si c [x /1] est satisfaisable.
I On peut donc passer de la formule c directement à la formule
c [x /1] qui est une formule plus petite, et cela sans d'avoir fait
un choix.
I Analogue dans le cas d'une clause unaire ¬x
Chapitre 5 Satisfaisabilité de formes conjonctives normales
Une stratégie d'énumération, et une optimisation
Optimisation : Résolution unitaire
Si c contient la clause unitaire x :
I Le choix x = 0 donne forcement une formule c qui contient la
clause False.
I c est satisfaisable si et seulement si c [x /1] est satisfaisable.
I On peut donc passer de la formule c directement à la formule
c [x /1] qui est une formule plus petite, et cela sans d'avoir fait
un choix.
I Analogue dans le cas d'une clause unaire ¬x
Chapitre 5 Satisfaisabilité de formes conjonctives normales
Une stratégie d'énumération, et une optimisation
Optimisation : Résolution unitaire
Si c contient la clause unitaire x :
I Le choix x = 0 donne forcement une formule c qui contient la
clause False.
I c est satisfaisable si et seulement si c [x /1] est satisfaisable.
I On peut donc passer de la formule c directement à la formule
c [x /1] qui est une formule plus petite, et cela sans d'avoir fait
un choix.
I Analogue dans le cas d'une clause unaire ¬x
Chapitre 5 Satisfaisabilité de formes conjonctives normales
Une stratégie d'énumération, et une optimisation
Optimisation : Résolution unitaire
Si c contient la clause unitaire x :
I Le choix x = 0 donne forcement une formule c qui contient la
clause False.
I c est satisfaisable si et seulement si c [x /1] est satisfaisable.
I On peut donc passer de la formule c directement à la formule
c [x /1] qui est une formule plus petite, et cela sans d'avoir fait
un choix.
I Analogue dans le cas d'une clause unaire ¬x
Chapitre 5 Satisfaisabilité de formes conjonctives normales
Une stratégie d'énumération, et une optimisation
Résolution unitaire
I
I
Passer de C1 ∧ x ∧ C2 à C1 [x /1] ∧ C2 [x /1]
Passer de C1 ∧ ¬x ∧ C2 à C1 [x /0] ∧ C2 [x /0]
Chapitre 5 Satisfaisabilité de formes conjonctives normales
Une stratégie d'énumération, et une optimisation
Exemple de résolution unitaire
ssi
ssi
ssi
(x ∨ y ) ∧ ¬y ∧ (¬x ∨ y ∨ ¬z )
x ∧ (¬x ∨ ¬z )
¬z
True
est satisfaisable
est satisfaisable
est satisfaisable
est satisfaisable
Chapitre 5 Satisfaisabilité de formes conjonctives normales
Une stratégie d'énumération, et une optimisation
Exemple de résolution unitaire
ssi
ssi
ssi
(x ∨ y ) ∧ ¬y ∧ (¬x ∨ y ∨ ¬z )
x ∧ (¬x ∨ ¬z )
¬z
True
est satisfaisable
est satisfaisable
est satisfaisable
est satisfaisable
Chapitre 5 Satisfaisabilité de formes conjonctives normales
Une stratégie d'énumération, et une optimisation
Exemple de résolution unitaire
ssi
ssi
ssi
(x ∨ y ) ∧ ¬y ∧ (¬x ∨ y ∨ ¬z )
x ∧ (¬x ∨ ¬z )
¬z
True
est satisfaisable
est satisfaisable
est satisfaisable
est satisfaisable
Chapitre 5 Satisfaisabilité de formes conjonctives normales
Une stratégie d'énumération, et une optimisation
Exemple de résolution unitaire
ssi
ssi
ssi
(x ∨ y ) ∧ ¬y ∧ (¬x ∨ y ∨ ¬z )
x ∧ (¬x ∨ ¬z )
¬z
True
est satisfaisable
est satisfaisable
est satisfaisable
est satisfaisable
Chapitre 5 Satisfaisabilité de formes conjonctives normales
Une stratégie d'énumération, et une optimisation
Remarques sur l'exemple
I
I
I
La résolution unitaire conserve la satisfaisabilité, mais ce n'est
pas une transformation d'équivalence !
Si la formule obtenue à la n est satisfaisable alors la formule
de départ l'est aussi.
Par contre, si la formule à la n est une tautologie il se peut
que la formule de départ ne l'est pas.
Chapitre 5 Satisfaisabilité de formes conjonctives normales
Une stratégie d'énumération, et une optimisation
Remarques sur l'exemple
I
I
I
La résolution unitaire conserve la satisfaisabilité, mais ce n'est
pas une transformation d'équivalence !
Si la formule obtenue à la n est satisfaisable alors la formule
de départ l'est aussi.
Par contre, si la formule à la n est une tautologie il se peut
que la formule de départ ne l'est pas.
Chapitre 5 Satisfaisabilité de formes conjonctives normales
Une stratégie d'énumération, et une optimisation
Remarques sur l'exemple
I
I
I
La résolution unitaire conserve la satisfaisabilité, mais ce n'est
pas une transformation d'équivalence !
Si la formule obtenue à la n est satisfaisable alors la formule
de départ l'est aussi.
Par contre, si la formule à la n est une tautologie il se peut
que la formule de départ ne l'est pas.
Chapitre 5 Satisfaisabilité de formes conjonctives normales
Une stratégie d'énumération, et une optimisation
Pourquoi n'est ce pas une transformation d'équivalence ?
I
I
x ∧ (¬x ∨ y ) est transformée en y
Regardez l'aectation [x 7→ 0, y 7→ 1]
Chapitre 5 Satisfaisabilité de formes conjonctives normales
Une stratégie d'énumération, et une optimisation
Pourquoi n'est ce pas une transformation d'équivalence ?
I
I
x ∧ (¬x ∨ y ) est transformée en y
Regardez l'aectation [x 7→ 0, y 7→ 1]
Chapitre 5 Satisfaisabilité de formes conjonctives normales
Une stratégie d'énumération, et une optimisation
Qu'est-ce qu'on a gagné ?
I
I
I
La résolution unitaire peut faire apparaître de nouvelles clauses
unitaires.
Si on a la chance de cela, ça fait des simplications en cascade.
Quoi faire quand toutes les clauses contiennent au moins deux
littéraux ?
Chapitre 5 Satisfaisabilité de formes conjonctives normales
Une stratégie d'énumération, et une optimisation
Qu'est-ce qu'on a gagné ?
I
I
I
La résolution unitaire peut faire apparaître de nouvelles clauses
unitaires.
Si on a la chance de cela, ça fait des simplications en cascade.
Quoi faire quand toutes les clauses contiennent au moins deux
littéraux ?
Chapitre 5 Satisfaisabilité de formes conjonctives normales
Une stratégie d'énumération, et une optimisation
Qu'est-ce qu'on a gagné ?
I
I
I
La résolution unitaire peut faire apparaître de nouvelles clauses
unitaires.
Si on a la chance de cela, ça fait des simplications en cascade.
Quoi faire quand toutes les clauses contiennent au moins deux
littéraux ?
Chapitre 5 Satisfaisabilité de formes conjonctives normales
Variables qui apparaissent avec une seule polarité
Une optimisation
Soit c en forme conjonctive normale.
Si la variable x apparaît seulement avec polarité positive en c
alors c est satisfaisable si et seulement si c [x /1] est
satisfaisable.
Si la variable x apparaît seulement avec polarité négative en c
alors c est satisfaisable si et seulement si c [x /0] est
satisfaisable.
Proposition :
I
I
Chapitre 5 Satisfaisabilité de formes conjonctives normales
Variables qui apparaissent avec une seule polarité
Idée derrière cette optimisation
I
I
Si une variable n'apparraît qu'avec polarité positive, alors ça
ne peut pas faire du mal de la mettre à la valeur 1
Si une variable n'apparraît qu'avec polarité négative, alors ça
ne peut pas faire du mal de la mettre à la valeur 0
Chapitre 5 Satisfaisabilité de formes conjonctives normales
Variables qui apparaissent avec une seule polarité
Idée derrière cette optimisation
I
I
Si une variable n'apparraît qu'avec polarité positive, alors ça
ne peut pas faire du mal de la mettre à la valeur 1
Si une variable n'apparraît qu'avec polarité négative, alors ça
ne peut pas faire du mal de la mettre à la valeur 0
Chapitre 5 Satisfaisabilité de formes conjonctives normales
Variables qui apparaissent avec une seule polarité
Démonstration du premier énoncé
I
Si c [x /1] est satisfaisable, disons v |= c [x /1], alors on a que
1 = [[c [x /1]]]v = [[c ]](v [x /1])
I
et c est alors également satisfaisable.
Soit c satisfaisable, disons v |= c . On peut montrer facilement
que pour toute clause d en c on a que [[d ]](v [x /1]) ≥ [[d ]]v car
x ne peut apparaître que positivement en d , et par conséquent
que
[[c [x /1]]]v = [[c ]](v [x /1]) ≥ 1
Donc, c [x /1] est satisfaisable.
Chapitre 5 Satisfaisabilité de formes conjonctives normales
Variables qui apparaissent avec une seule polarité
Démonstration du premier énoncé
I
Si c [x /1] est satisfaisable, disons v |= c [x /1], alors on a que
1 = [[c [x /1]]]v = [[c ]](v [x /1])
I
et c est alors également satisfaisable.
Soit c satisfaisable, disons v |= c . On peut montrer facilement
que pour toute clause d en c on a que [[d ]](v [x /1]) ≥ [[d ]]v car
x ne peut apparaître que positivement en d , et par conséquent
que
[[c [x /1]]]v = [[c ]](v [x /1]) ≥ 1
Donc, c [x /1] est satisfaisable.
Chapitre 5 Satisfaisabilité de formes conjonctives normales
Variables qui apparaissent avec une seule polarité
Propriétés de cette règle
I
I
I
I
Elle conserve la satisfaisabilité.
Elle n'est pas une équivalence.
Exemple (x ∨ y ) ∧ (x ∨ z ) donne True.
Aectation [x 7→ 0, y 7→ 0, z 7→ 0]
Cette règle peut déclencher une reduction en cascade (voir
l'exemple suivant).
Chapitre 5 Satisfaisabilité de formes conjonctives normales
Variables qui apparaissent avec une seule polarité
Propriétés de cette règle
I
I
I
I
Elle conserve la satisfaisabilité.
Elle n'est pas une équivalence.
Exemple (x ∨ y ) ∧ (x ∨ z ) donne True.
Aectation [x 7→ 0, y 7→ 0, z 7→ 0]
Cette règle peut déclencher une reduction en cascade (voir
l'exemple suivant).
Chapitre 5 Satisfaisabilité de formes conjonctives normales
Variables qui apparaissent avec une seule polarité
Propriétés de cette règle
I
I
I
I
Elle conserve la satisfaisabilité.
Elle n'est pas une équivalence.
Exemple (x ∨ y ) ∧ (x ∨ z ) donne True.
Aectation [x 7→ 0, y 7→ 0, z 7→ 0]
Cette règle peut déclencher une reduction en cascade (voir
l'exemple suivant).
Chapitre 5 Satisfaisabilité de formes conjonctives normales
Variables qui apparaissent avec une seule polarité
Propriétés de cette règle
I
I
I
I
Elle conserve la satisfaisabilité.
Elle n'est pas une équivalence.
Exemple (x ∨ y ) ∧ (x ∨ z ) donne True.
Aectation [x 7→ 0, y 7→ 0, z 7→ 0]
Cette règle peut déclencher une reduction en cascade (voir
l'exemple suivant).
Chapitre 5 Satisfaisabilité de formes conjonctives normales
Variables qui apparaissent avec une seule polarité
Exemple
(x ∨ ¬y ) ∧ (y ∨ z1 ) ∧ (¬z1 ∨ ¬z2 )
ssi (y ∨ z1 ) ∧ (¬z1 ∨ ¬z2 )
ssi (¬z1 ∨ ¬z2 )
ssi True
La formule de départ est donc satisfaisable.
est satisfaisable
est satisfaisable
est satisfaisable
est satisfaisable
Chapitre 5 Satisfaisabilité de formes conjonctives normales
Variables qui apparaissent avec une seule polarité
Exemple
(x ∨ ¬y ) ∧ (y ∨ z1 ) ∧ (¬z1 ∨ ¬z2 )
ssi (y ∨ z1 ) ∧ (¬z1 ∨ ¬z2 )
ssi (¬z1 ∨ ¬z2 )
ssi True
La formule de départ est donc satisfaisable.
est satisfaisable
est satisfaisable
est satisfaisable
est satisfaisable
Chapitre 5 Satisfaisabilité de formes conjonctives normales
Variables qui apparaissent avec une seule polarité
Exemple
(x ∨ ¬y ) ∧ (y ∨ z1 ) ∧ (¬z1 ∨ ¬z2 )
ssi (y ∨ z1 ) ∧ (¬z1 ∨ ¬z2 )
ssi (¬z1 ∨ ¬z2 )
ssi True
La formule de départ est donc satisfaisable.
est satisfaisable
est satisfaisable
est satisfaisable
est satisfaisable
Chapitre 5 Satisfaisabilité de formes conjonctives normales
Variables qui apparaissent avec une seule polarité
Exemple
(x ∨ ¬y ) ∧ (y ∨ z1 ) ∧ (¬z1 ∨ ¬z2 )
ssi (y ∨ z1 ) ∧ (¬z1 ∨ ¬z2 )
ssi (¬z1 ∨ ¬z2 )
ssi True
La formule de départ est donc satisfaisable.
est satisfaisable
est satisfaisable
est satisfaisable
est satisfaisable
Chapitre 5 Satisfaisabilité de formes conjonctives normales
L'algorithme DPLL complet
c
est une formule en forme CNF
(1)
(2)
(3)
(4)
(5)
(6)
(7)
function dp(c ) =case
if c = True
then
if c contient une clause False
then
if c contient une clause unitaire x
then
if c contient une clause unitaire ¬x
then
if x n'apparaît qu'avec polarité positive en c then
if x n'apparaît qu'avec polarité négative en c then
else choisir x ∈ V(c ); dp(c [x /0]) or dp(c [x /1])
true
false
dp(c [x /1])
dp(c [x /0])
dp(c [x /1])
dp(c [x /0])
Chapitre 5 Satisfaisabilité de formes conjonctives normales
L'algorithme DPLL complet
c
est une formule en forme CNF
(1)
(2)
(3)
(4)
(5)
(6)
(7)
function dp(c ) =case
if c = True
then
if c contient une clause False
then
if c contient une clause unitaire x
then
if c contient une clause unitaire ¬x
then
if x n'apparaît qu'avec polarité positive en c then
if x n'apparaît qu'avec polarité négative en c then
else choisir x ∈ V(c ); dp(c [x /0]) or dp(c [x /1])
true
false
dp(c [x /1])
dp(c [x /0])
dp(c [x /1])
dp(c [x /0])
Chapitre 5 Satisfaisabilité de formes conjonctives normales
L'algorithme DPLL complet
c
est une formule en forme CNF
(1)
(2)
(3)
(4)
(5)
(6)
(7)
function dp(c ) =case
if c = True
then
if c contient une clause False
then
if c contient une clause unitaire x
then
if c contient une clause unitaire ¬x
then
if x n'apparaît qu'avec polarité positive en c then
if x n'apparaît qu'avec polarité négative en c then
else choisir x ∈ V(c ); dp(c [x /0]) or dp(c [x /1])
true
false
dp(c [x /1])
dp(c [x /0])
dp(c [x /1])
dp(c [x /0])
Chapitre 5 Satisfaisabilité de formes conjonctives normales
L'algorithme DPLL complet
c
est une formule en forme CNF
(1)
(2)
(3)
(4)
(5)
(6)
(7)
function dp(c ) =case
if c = True
then
if c contient une clause False
then
if c contient une clause unitaire x
then
if c contient une clause unitaire ¬x
then
if x n'apparaît qu'avec polarité positive en c then
if x n'apparaît qu'avec polarité négative en c then
else choisir x ∈ V(c ); dp(c [x /0]) or dp(c [x /1])
true
false
dp(c [x /1])
dp(c [x /0])
dp(c [x /1])
dp(c [x /0])
Chapitre 5 Satisfaisabilité de formes conjonctives normales
L'algorithme DPLL complet
c
est une formule en forme CNF
(1)
(2)
(3)
(4)
(5)
(6)
(7)
function dp(c ) =case
if c = True
then
if c contient une clause False
then
if c contient une clause unitaire x
then
if c contient une clause unitaire ¬x
then
if x n'apparaît qu'avec polarité positive en c then
if x n'apparaît qu'avec polarité négative en c then
else choisir x ∈ V(c ); dp(c [x /0]) or dp(c [x /1])
true
false
dp(c [x /1])
dp(c [x /0])
dp(c [x /1])
dp(c [x /0])
Chapitre 5 Satisfaisabilité de formes conjonctives normales
L'algorithme DPLL complet
c
est une formule en forme CNF
(1)
(2)
(3)
(4)
(5)
(6)
(7)
function dp(c ) =case
if c = True
then
if c contient une clause False
then
if c contient une clause unitaire x
then
if c contient une clause unitaire ¬x
then
if x n'apparaît qu'avec polarité positive en c then
if x n'apparaît qu'avec polarité négative en c then
else choisir x ∈ V(c ); dp(c [x /0]) or dp(c [x /1])
true
false
dp(c [x /1])
dp(c [x /0])
dp(c [x /1])
dp(c [x /0])
Chapitre 5 Satisfaisabilité de formes conjonctives normales
L'algorithme DPLL complet
c
est une formule en forme CNF
(1)
(2)
(3)
(4)
(5)
(6)
(7)
function dp(c ) =case
if c = True
then
if c contient une clause False
then
if c contient une clause unitaire x
then
if c contient une clause unitaire ¬x
then
if x n'apparaît qu'avec polarité positive en c then
if x n'apparaît qu'avec polarité négative en c then
else choisir x ∈ V(c ); dp(c [x /0]) or dp(c [x /1])
true
false
dp(c [x /1])
dp(c [x /0])
dp(c [x /1])
dp(c [x /0])
Chapitre 5 Satisfaisabilité de formes conjonctives normales
L'algorithme DPLL complet
c
est une formule en forme CNF
(1)
(2)
(3)
(4)
(5)
(6)
(7)
function dp(c ) =case
if c = True
then
if c contient une clause False
then
if c contient une clause unitaire x
then
if c contient une clause unitaire ¬x
then
if x n'apparaît qu'avec polarité positive en c then
if x n'apparaît qu'avec polarité négative en c then
else choisir x ∈ V(c ); dp(c [x /0]) or dp(c [x /1])
true
false
dp(c [x /1])
dp(c [x /0])
dp(c [x /1])
dp(c [x /0])
Chapitre 5 Satisfaisabilité de formes conjonctives normales
L'algorithme DPLL complet
Remarques sur l'algorithme
I
I
I
Les tests diérents dans l'instruction case peuvent être faits
dans un ordre quelconque.
On a donc la liberté de choisir sa stratégie dans
l'implémentation de cet algorithme. Intéressant pour la priorité
entre les cas (3) à (6).
Les deux cas (5) et (6) sont parfois omis dans des
implémentations car trop chers.
Chapitre 5 Satisfaisabilité de formes conjonctives normales
L'algorithme DPLL complet
Remarques sur l'algorithme
I
I
I
Les tests diérents dans l'instruction case peuvent être faits
dans un ordre quelconque.
On a donc la liberté de choisir sa stratégie dans
l'implémentation de cet algorithme. Intéressant pour la priorité
entre les cas (3) à (6).
Les deux cas (5) et (6) sont parfois omis dans des
implémentations car trop chers.
Chapitre 5 Satisfaisabilité de formes conjonctives normales
L'algorithme DPLL complet
Remarques sur l'algorithme
I
I
I
Les tests diérents dans l'instruction case peuvent être faits
dans un ordre quelconque.
On a donc la liberté de choisir sa stratégie dans
l'implémentation de cet algorithme. Intéressant pour la priorité
entre les cas (3) à (6).
Les deux cas (5) et (6) sont parfois omis dans des
implémentations car trop chers.
Chapitre 5 Satisfaisabilité de formes conjonctives normales
L'algorithme DPLL complet
Terminaison de l'algorithme
I
I
Dans chaque appel récursif de l'algorithme, le nombre de
variables dans la formule est décrémenté.
Le temps d'exécution peut quand même, dans le pire des cas,
être exponentiel dans le nombre de variables (à cause du
branchement).
Chapitre 5 Satisfaisabilité de formes conjonctives normales
L'algorithme DPLL complet
Terminaison de l'algorithme
I
I
Dans chaque appel récursif de l'algorithme, le nombre de
variables dans la formule est décrémenté.
Le temps d'exécution peut quand même, dans le pire des cas,
être exponentiel dans le nombre de variables (à cause du
branchement).
Chapitre 5 Satisfaisabilité de formes conjonctives normales
Un exemple complet
Formule de départ
(x1 ∨ ¬x2 ∨ y1 ∨ ¬y2 ∨ ¬z2 ∨ ¬z4 )
∧(x2 ∨ y1 ) ∧ (x2 ∨ y1 ∨ y2 ∨ z1 ∨ z4 ) ∧ (x2 ∨ ¬y2 ∨ z1 ∨ ¬z2 )
∧(x2 ∨ ¬y1 ∨ z3 ∨ ¬z4 ) ∧ (x2 ∨ ¬y2 ∨ z2 ∨ ¬z3 )
∧(¬x2 ∨ ¬y1 ) ∧ (¬x2 ∨ ¬y1 ∨ ¬y2 ) ∧ (¬x2 ∨ y1 ∨ y2 ) ∧ (¬x2 ∨ ¬y2 ∨ z1 )
∧(¬x2 ∨ ¬z1 ∨ z2 )
∧(¬z3 ∨ ¬z4 ) ∧ (z3 ∨ z4 ) ∧ (¬z3 ∨ z4 )
Chapitre 5 Satisfaisabilité de formes conjonctives normales
Un exemple complet
Formule de départ
(x1 ∨ ¬x2 ∨ y1 ∨ ¬y2 ∨ ¬z2 ∨ ¬z4 )
∧(x2 ∨ y1 ) ∧ (x2 ∨ y1 ∨ y2 ∨ z1 ∨ z4 ) ∧ (x2 ∨ ¬y2 ∨ z1 ∨ ¬z2 )
∧(x2 ∨ ¬y1 ∨ z3 ∨ ¬z4 ) ∧ (x2 ∨ ¬y2 ∨ z2 ∨ ¬z3 )
∧(¬x2 ∨ ¬y1 ) ∧ (¬x2 ∨ ¬y1 ∨ ¬y2 ) ∧ (¬x2 ∨ y1 ∨ y2 ) ∧ (¬x2 ∨ ¬y2 ∨ z1 )
∧(¬x2 ∨ ¬z1 ∨ z2 )
∧(¬z3 ∨ ¬z4 ) ∧ (z3 ∨ z4 ) ∧ (¬z3 ∨ z4 )
x1
apparaît seulement avec polarité positive
clause
⇒
supprimer la première
Chapitre 5 Satisfaisabilité de formes conjonctives normales
Un exemple complet
Formule de départ
(x1 ∨ ¬x2 ∨ y1 ∨ ¬y2 ∨ ¬z2 ∨ ¬z4 )
∧(x2 ∨ y1 ) ∧ (x2 ∨ y1 ∨ y2 ∨ z1 ∨ z4 ) ∧ (x2 ∨ ¬y2 ∨ z1 ∨ ¬z2 )
∧(x2 ∨ ¬y1 ∨ z3 ∨ ¬z4 ) ∧ (x2 ∨ ¬y2 ∨ z2 ∨ ¬z3 )
∧(¬x2 ∨ ¬y1 ) ∧ (¬x2 ∨ ¬y1 ∨ ¬y2 ) ∧ (¬x2 ∨ y1 ∨ y2 ) ∧ (¬x2 ∨ ¬y2 ∨ z1 )
∧(¬x2 ∨ ¬z1 ∨ z2 )
∧(¬z3 ∨ ¬z4 ) ∧ (z3 ∨ z4 ) ∧ (¬z3 ∨ z4 )
x1
apparaît seulement avec polarité positive
clause
⇒
supprimer la première
Chapitre 5 Satisfaisabilité de formes conjonctives normales
Un exemple complet
Après suppression de la première clause
(x2 ∨ y1 ) ∧ (x2 ∨ y1 ∨ y2 ∨ z1 ∨ z4 ) ∧ (x2 ∨ ¬y2 ∨ z1 ∨ ¬z2 )
∧(x2 ∨ ¬y1 ∨ z3 ∨ ¬z4 ) ∧ (x2 ∨ ¬y2 ∨ z2 ∨ ¬z3 )
∧(¬x2 ∨ ¬y1 ) ∧ (¬x2 ∨ ¬y1 ∨ ¬y2 ) ∧ (¬x2 ∨ y1 ∨ y2 ) ∧ (¬x2 ∨ ¬y2 ∨ z1 )
∧(¬x2 ∨ ¬z1 ∨ z2 )
∧(¬z3 ∨ ¬z4 ) ∧ (z3 ∨ z4 ) ∧ (¬z3 ∨ z4 )
Chapitre 5 Satisfaisabilité de formes conjonctives normales
Un exemple complet
Après suppression de la première clause
(x2 ∨ y1 ) ∧ (x2 ∨ y1 ∨ y2 ∨ z1 ∨ z4 ) ∧ (x2 ∨ ¬y2 ∨ z1 ∨ ¬z2 )
∧(x2 ∨ ¬y1 ∨ z3 ∨ ¬z4 ) ∧ (x2 ∨ ¬y2 ∨ z2 ∨ ¬z3 )
∧(¬x2 ∨ ¬y1 ) ∧ (¬x2 ∨ ¬y1 ∨ ¬y2 ) ∧ (¬x2 ∨ y1 ∨ y2 ) ∧ (¬x2 ∨ ¬y2 ∨ z1 )
∧(¬x2 ∨ ¬z1 ∨ z2 )
∧(¬z3 ∨ ¬z4 ) ∧ (z3 ∨ z4 ) ∧ (¬z3 ∨ z4 )
Seulement (7) s'applique
I
Cas 1 :
x2 =
0
I
Cas 2 :
x2 =
1
⇒
choisir comme variable de pivot
x2
Chapitre 5 Satisfaisabilité de formes conjonctives normales
Un exemple complet
Cas 1 :
x
2
=0
(x2 ∨ y1 ) ∧ (x2 ∨ y1 ∨ y2 ∨ z1 ∨ z4 ) ∧ (x2 ∨ ¬y2 ∨ z1 ∨ ¬z2 )
∧(x2 ∨ ¬y1 ∨ z3 ∨ ¬z4 ) ∧ (x2 ∨ ¬y2 ∨ z2 ∨ ¬z3 )
∧ (¬x2 ∨ ¬y1 ) ∧ (¬x2 ∨ ¬y1 ∨ ¬y2 ) ∧ (¬x2 ∨ y1 ∨ y2 ) ∧ (¬x2 ∨ ¬y2 ∨ z1 )
∧ (¬x2 ∨ ¬z1 ∨ z2 )
∧(¬z3 ∨ ¬z4 ) ∧ (z3 ∨ z4 ) ∧ (¬z3 ∨ z4 )
x2
I
Supprimer
I
Supprimer toutes les clauses qui contiennent
dans toutes les clauses
¬x2
Chapitre 5 Satisfaisabilité de formes conjonctives normales
Un exemple complet
Cas 1 :
x
2
=0
(x2 ∨ y1 ) ∧ (x2 ∨ y1 ∨ y2 ∨ z1 ∨ z4 ) ∧ (x2 ∨ ¬y2 ∨ z1 ∨ ¬z2 )
∧(x2 ∨ ¬y1 ∨ z3 ∨ ¬z4 ) ∧ (x2 ∨ ¬y2 ∨ z2 ∨ ¬z3 )
∧ (¬x2 ∨ ¬y1 ) ∧ (¬x2 ∨ ¬y1 ∨ ¬y2 ) ∧ (¬x2 ∨ y1 ∨ y2 ) ∧ (¬x2 ∨ ¬y2 ∨ z1 )
∧ (¬x2 ∨ ¬z1 ∨ z2 )
∧(¬z3 ∨ ¬z4 ) ∧ (z3 ∨ z4 ) ∧ (¬z3 ∨ z4 )
x2
I
Supprimer
I
Supprimer toutes les clauses qui contiennent
dans toutes les clauses
¬x2
Chapitre 5 Satisfaisabilité de formes conjonctives normales
Un exemple complet
Cas 1 :
x
2
=0
(x2 ∨y1 ) ∧ (x2 ∨y1 ∨ y2 ∨ z1 ∨ z4 ) ∧ (x2 ∨ ¬y2 ∨ z1 ∨ ¬z2 )
∧(x2 ∨¬y1 ∨ z3 ∨ ¬z4 ) ∧ (x2 ∨¬y2 ∨ z2 ∨ ¬z3 )
∧(¬x2 ∨ ¬y1 ) ∧ (¬x2 ∨ ¬y1 ∨ ¬y2 ) ∧ (¬x2 ∨ y1 ∨ y2 ) ∧ (¬x2 ∨ ¬y2 ∨ z1 )
∧(¬x2 ∨ ¬z1 ∨ z2 )
∧(¬z3 ∨ ¬z4 ) ∧ (z3 ∨ z4 ) ∧ (¬z3 ∨ z4 )
x2
I
Supprimer
I
Supprimer toutes les clauses qui contiennent
dans toutes les clauses
¬x2
Chapitre 5 Satisfaisabilité de formes conjonctives normales
Un exemple complet
Cas 1 : Après avoir mis
x
2
=0
y1 ∧ (y1 ∨ y2 ∨ z1 ∨ z4 ) ∧ (¬y2 ∨ z1 ∨ ¬z2 )
∧(¬y1 ∨ z3 ∨ ¬z4 ) ∧ (¬y2 ∨ z2 ∨ ¬z3 )
∧(¬z3 ∨ ¬z4 ) ∧ (z3 ∨ z4 ) ∧ (¬z3 ∨ z4 )
Chapitre 5 Satisfaisabilité de formes conjonctives normales
Un exemple complet
Cas 1 : Après avoir mis
x
2
=0
y1 ∧ (y1 ∨ y2 ∨ z1 ∨ z4 ) ∧ (¬y2 ∨ z1 ∨ ¬z2 )
∧(¬y1 ∨ z3 ∨ ¬z4 ) ∧ (¬y2 ∨ z2 ∨ ¬z3 )
∧(¬z3 ∨ ¬z4 ) ∧ (z3 ∨ z4 ) ∧ (¬z3 ∨ z4 )
Clause unitaire: y1 ⇒ résolution unitaire
Chapitre 5 Satisfaisabilité de formes conjonctives normales
Un exemple complet
Cas 1 : Après avoir mis
x
2
=0
y1 ∧ (y1 ∨ y2 ∨ z1 ∨ z4 ) ∧ (¬y2 ∨ z1 ∨ ¬z2 )
∧(¬y1 ∨ z3 ∨ ¬z4 ) ∧ (¬y2 ∨ z2 ∨ ¬z3 )
∧(¬z3 ∨ ¬z4 ) ∧ (z3 ∨ z4 ) ∧ (¬z3 ∨ z4 )
Chapitre 5 Satisfaisabilité de formes conjonctives normales
Un exemple complet
Cas 1 :
x
2
= 0,
après résolution unitaire avec
y
(¬y2 ∨ z1 ∨ ¬z2 )
∧(z3 ∨ ¬z4 ) ∧ (¬y2 ∨ z2 ∨ ¬z3 )
∧(¬z3 ∨ ¬z4 ) ∧ (z3 ∨ z4 ) ∧ (¬z3 ∨ z4 )
1
Chapitre 5 Satisfaisabilité de formes conjonctives normales
Un exemple complet
Cas 1 :
x
2
= 0,
après résolution unitaire avec
y
1
(¬y2 ∨ z1 ∨ ¬z2 )
∧(z3 ∨ ¬z4 ) ∧ (¬y2 ∨ z2 ∨ ¬z3 )
∧(¬z3 ∨ ¬z4 ) ∧ (z3 ∨ z4 ) ∧ (¬z3 ∨ z4 )
y2 n'apparait qu'avec polarité négative ⇒ supprimer les deux
clauses qui contiennent le littéral ¬y2
Chapitre 5 Satisfaisabilité de formes conjonctives normales
Un exemple complet
Cas 1 :
x
2
= 0,
après résolution unitaire avec
y
1
(¬y2 ∨ z1 ∨ ¬z2 )
∧(z3 ∨ ¬z4 ) ∧ (¬y2 ∨ z2 ∨ ¬z3 )
∧(¬z3 ∨ ¬z4 ) ∧ (z3 ∨ z4 ) ∧ (¬z3 ∨ z4 )
y2 n'apparait qu'avec polarité négative ⇒ supprimer les deux
clauses qui contiennent le littéral ¬y2
Chapitre 5 Satisfaisabilité de formes conjonctives normales
Un exemple complet
Cas 1 : après avoir mis
y
2
(z3 ∨ ¬z4 )
=0
∧(¬z3 ∨ ¬z4 ) ∧ (z3 ∨ z4 ) ∧ (¬z3 ∨ z4 )
Chapitre 5 Satisfaisabilité de formes conjonctives normales
Un exemple complet
Cas 1 : après avoir mis
y
2
(z3 ∨ ¬z4 )
=0
∧(¬z3 ∨ ¬z4 ) ∧ (z3 ∨ z4 ) ∧ (¬z3 ∨ z4 )
Cas (7), variable de pivot: z3
I Sous-cas 1 : z3 = 0
I Sous-cas 2 : z3 = 1
Chapitre 5 Satisfaisabilité de formes conjonctives normales
Un exemple complet
Cas 1, sous-cas 1:
z
3
=0
(z3 ∨ ¬z4 )
∧ (¬z3 ∨ ¬z4 ) ∧ (z3 ∨ z4 ) ∧ (¬z3 ∨ z4 )
Chapitre 5 Satisfaisabilité de formes conjonctives normales
Un exemple complet
Cas 1, sous-cas 1:
z
3
=0
(z3 ∨ ¬z4 )
∧ (¬z3 ∨ ¬z4 ) ∧ (z3 ∨ z4 ) ∧ (¬z3 ∨ z4 )
I
I
Supprimer z3 dans toutes les clause
Supprimer toutes les clauses qui contiennet ¬z3
Chapitre 5 Satisfaisabilité de formes conjonctives normales
Un exemple complet
Cas 1, sous-cas 1:
z
3
=0
(z3 ∨¬z4 )
∧(¬z3 ∨ ¬z4 ) ∧ (z3 ∨z4 )∧(¬z3 ∨ z4 )
I
I
Supprimer z3 dans toutes les clause
Supprimer toutes les clauses qui contiennet ¬z3
Chapitre 5 Satisfaisabilité de formes conjonctives normales
Un exemple complet
Cas 1, sous-cas 1 :
z
3
=0
¬z4 ∧ z4
Chapitre 5 Satisfaisabilité de formes conjonctives normales
Un exemple complet
Cas 1, sous-cas 1 :
z
3
=0
¬z4 ∧ z4
Donne false par application de (3) (ou de (4))
Chapitre 5 Satisfaisabilité de formes conjonctives normales
Un exemple complet
Cas 1, sous-cas 2:
z
3
=1
(z3 ∨ ¬z4 )
∧(¬z3 ∨ ¬z4 ) ∧ (z3 ∨ z4 ) ∧ (¬z3 ∨ z4 )
Chapitre 5 Satisfaisabilité de formes conjonctives normales
Un exemple complet
Cas 1, sous-cas 2:
z
3
=1
(z3 ∨ ¬z4 )
∧(¬z3 ∨ ¬z4 ) ∧ (z3 ∨ z4 ) ∧ (¬z3 ∨ z4 )
I
I
Supprimer ¬z3 dans toutes les clause
Supprimer toutes les clauses qui contiennet z3
Chapitre 5 Satisfaisabilité de formes conjonctives normales
Un exemple complet
Cas 1, sous-cas 2:
z
3
=1
(z3 ∨ ¬z4 )
∧(¬z3 ∨¬z4 )∧(z3 ∨ z4 ) ∧ (¬z3 ∨ z4 )
I
I
Supprimer ¬z3 dans toutes les clause
Supprimer toutes les clauses qui contiennet z3
Chapitre 5 Satisfaisabilité de formes conjonctives normales
Un exemple complet
Cas 1, sous-cas 2 :
z
3
=1
¬z4 ∧ z4
Chapitre 5 Satisfaisabilité de formes conjonctives normales
Un exemple complet
Cas 1, sous-cas 2 :
z
3
=1
¬z4 ∧ z4
Donne false par application de (3) (ou de (4))
Chapitre 5 Satisfaisabilité de formes conjonctives normales
Un exemple complet
Cas 2 :
x
2
=1
(x2 ∨ y1 ) ∧ (x2 ∨ y1 ∨ y2 ∨ z1 ∨ z4 ) ∧ (x2 ∨ ¬y2 ∨ z1 ∨ ¬z2 )
∧ (x2 ∨ ¬y1 ∨ z3 ∨ ¬z4 ) ∧ (x2 ∨ ¬y2 ∨ z2 ∨ ¬z3 )
∧(¬x2 ∨ ¬y1 ) ∧ (¬x2 ∨ ¬y1 ∨ ¬y2 ) ∧ (¬x2 ∨ y1 ∨ y2 ) ∧ (¬x2 ∨ ¬y2 ∨ z1 )
∧(¬x2 ∨ ¬z1 ∨ z2 )
∧(¬z3 ∨ ¬z4 ) ∧ (z3 ∨ z4 ) ∧ (¬z3 ∨ z4 )
¬x2
I
Supprimer
I
Supprimer toutes les clauses qui contiennent
dans toutes les clauses
x2
Chapitre 5 Satisfaisabilité de formes conjonctives normales
Un exemple complet
Cas 2 :
x
2
=1
(x2 ∨ y1 ) ∧ (x2 ∨ y1 ∨ y2 ∨ z1 ∨ z4 ) ∧ (x2 ∨ ¬y2 ∨ z1 ∨ ¬z2 )
∧ (x2 ∨ ¬y1 ∨ z3 ∨ ¬z4 ) ∧ (x2 ∨ ¬y2 ∨ z2 ∨ ¬z3 )
∧(¬x2 ∨ ¬y1 ) ∧ (¬x2 ∨ ¬y1 ∨ ¬y2 ) ∧ (¬x2 ∨ y1 ∨ y2 ) ∧ (¬x2 ∨ ¬y2 ∨ z1 )
∧(¬x2 ∨ ¬z1 ∨ z2 )
∧(¬z3 ∨ ¬z4 ) ∧ (z3 ∨ z4 ) ∧ (¬z3 ∨ z4 )
¬x2
I
Supprimer
I
Supprimer toutes les clauses qui contiennent
dans toutes les clauses
x2
Chapitre 5 Satisfaisabilité de formes conjonctives normales
Un exemple complet
Cas 2 :
x
2
=1
(x2 ∨ y1 ) ∧ (x2 ∨ y1 ∨ y2 ∨ z1 ∨ z4 ) ∧ (x2 ∨ ¬y2 ∨ z1 ∨ ¬z2 )
∧(x2 ∨ ¬y1 ∨ z3 ∨ ¬z4 ) ∧ (x2 ∨ ¬y2 ∨ z2 ∨ ¬z3 )
∧(¬x2 ∨¬y1 ) ∧ (¬x2 ∨¬y1 ∨ ¬y2 ) ∧ (¬x2 ∨y1 ∨ y2 ) ∧ (¬x2 ∨¬y2 ∨ z1 )
∧(¬x2 ∨ ¬z1 ∨ z2 )
∧(¬z3 ∨ ¬z4 ) ∧ (z3 ∨ z4 ) ∧ (¬z3 ∨ z4 )
¬x2
I
Supprimer
I
Supprimer toutes les clauses qui contiennent
dans toutes les clauses
x2
Chapitre 5 Satisfaisabilité de formes conjonctives normales
Un exemple complet
Cas 2 : Après avoir choisi
x
2
=1
¬y1 ∧ (¬y1 ∨ ¬y2 ) ∧ (y1 ∨ y2 ) ∧ (¬y2 ∨ z1 ) ∧ (¬z1 ∨ z2 )
∧(¬z3 ∨ ¬z4 ) ∧ (z3 ∨ z4 ) ∧ (¬z3 ∨ z4 )
Chapitre 5 Satisfaisabilité de formes conjonctives normales
Un exemple complet
Cas 2 : Après avoir choisi
x
2
=1
¬y1 ∧ (¬y1 ∨ ¬y2 ) ∧ (y1 ∨ y2 ) ∧ (¬y2 ∨ z1 ) ∧ (¬z1 ∨ z2 )
∧(¬z3 ∨ ¬z4 ) ∧ (z3 ∨ z4 ) ∧ (¬z3 ∨ z4 )
Clause unitaire ¬y1
Chapitre 5 Satisfaisabilité de formes conjonctives normales
Un exemple complet
Cas 2 : Après avoir choisi
x
2
=1
¬y1 ∧ (¬y1 ∨ ¬y2 ) ∧ (y1 ∨ y2 ) ∧ (¬y2 ∨ z1 ) ∧ (¬z1 ∨ z2 )
∧(¬z3 ∨ ¬z4 ) ∧ (z3 ∨ z4 ) ∧ (¬z3 ∨ z4 )
Chapitre 5 Satisfaisabilité de formes conjonctives normales
Un exemple complet
Cas 2, après résolution unitaire
y2 ∧ (¬y2 ∨ z1 ) ∧ (¬z1 ∨ z2 ) ∧ (¬z3 ∨ ¬z4 ) ∧ (z3 ∨ z4 ) ∧ (¬z3 ∨ z4 )
Chapitre 5 Satisfaisabilité de formes conjonctives normales
Un exemple complet
Cas 2, après résolution unitaire
y2 ∧ (¬y2 ∨ z1 ) ∧ (¬z1 ∨ z2 ) ∧ (¬z3 ∨ ¬z4 ) ∧ (z3 ∨ z4 ) ∧ (¬z3 ∨ z4 )
Clause unitaire y2
Chapitre 5 Satisfaisabilité de formes conjonctives normales
Un exemple complet
Cas 2, après résolution unitaire
y2 ∧ (¬y2 ∨ z1 ) ∧ (¬z1 ∨ z2 ) ∧ (¬z3 ∨ ¬z4 ) ∧ (z3 ∨ z4 ) ∧ (¬z3 ∨ z4 )
Chapitre 5 Satisfaisabilité de formes conjonctives normales
Un exemple complet
Cas 2, après nouvelle résolution unitaire
z1 ∧ (¬z1 ∨ z2 ) ∧ (¬z3 ∨ ¬z4 ) ∧ (z3 ∨ z4 ) ∧ (¬z3 ∨ z4 )
Chapitre 5 Satisfaisabilité de formes conjonctives normales
Un exemple complet
Cas 2, après nouvelle résolution unitaire
z1 ∧ (¬z1 ∨ z2 ) ∧ (¬z3 ∨ ¬z4 ) ∧ (z3 ∨ z4 ) ∧ (¬z3 ∨ z4 )
Clause unitaire z1
Chapitre 5 Satisfaisabilité de formes conjonctives normales
Un exemple complet
Cas 2, après nouvelle résolution unitaire
z1 ∧ (¬z1 ∨z2 ) ∧ (¬z3 ∨ ¬z4 ) ∧ (z3 ∨ z4 ) ∧ (¬z3 ∨ z4 )
Chapitre 5 Satisfaisabilité de formes conjonctives normales
Un exemple complet
Cas 2, après encore une résolution unitaire
z2 ∧ (¬z3 ∨ ¬z4 ) ∧ (z3 ∨ z4 ) ∧ (¬z3 ∨ z4 )
Chapitre 5 Satisfaisabilité de formes conjonctives normales
Un exemple complet
Cas 2, après encore une résolution unitaire
z2 ∧ (¬z3 ∨ ¬z4 ) ∧ (z3 ∨ z4 ) ∧ (¬z3 ∨ z4 )
Clause unitaire z2
Chapitre 5 Satisfaisabilité de formes conjonctives normales
Un exemple complet
Cas 2, après encore une résolution unitaire
z2 ∧ (¬z3 ∨ ¬z4 ) ∧ (z3 ∨ z4 ) ∧ (¬z3 ∨ z4 )
Chapitre 5 Satisfaisabilité de formes conjonctives normales
Un exemple complet
Cas 2, après encore une résolution unitaire
(¬z3 ∨ ¬z4 ) ∧ (z3 ∨ z4 ) ∧ (¬z3 ∨ z4 )
Chapitre 5 Satisfaisabilité de formes conjonctives normales
Un exemple complet
Cas 2, après encore une résolution unitaire
(¬z3 ∨ ¬z4 ) ∧ (z3 ∨ z4 ) ∧ (¬z3 ∨ z4 )
Appliquer (7), variable de pivot : z3
I Sous-cas 1 : z3 = 0
I Sous-cas 2 : z3 = 1
Chapitre 5 Satisfaisabilité de formes conjonctives normales
Un exemple complet
Cas 2, sous-cas 1 : choisir
z
3
=0
(¬z3 ∨ ¬z4 ) ∧ (z3 ∨ z4 ) ∧ (¬z3 ∨ z4 )
Chapitre 5 Satisfaisabilité de formes conjonctives normales
Un exemple complet
Cas 2, sous-cas 1 : choisir
z
3
=0
(¬z3 ∨ ¬z4 ) ∧ (z3 ∨ z4 ) ∧ (¬z3 ∨ z4 )
Chapitre 5 Satisfaisabilité de formes conjonctives normales
Un exemple complet
Cas 2, sous-cas 1 : choisir
z
3
=0
(¬z3 ∨ ¬z4 ) ∧ (z3 ∨z4 ) ∧ (¬z3 ∨ z4 )
Chapitre 5 Satisfaisabilité de formes conjonctives normales
Un exemple complet
Cas 2, sous-cas 1 : Après avoir choisi
z4
z
3
=0
Chapitre 5 Satisfaisabilité de formes conjonctives normales
Un exemple complet
Cas 2, sous-cas 1 : Après avoir choisi
z
3
=0
z4
Application de (3) (ou alternativement (5)) donne true
Chapitre 5 Satisfaisabilité de formes conjonctives normales
Un exemple complet
Cas 2, sous-cas 1 : Après avoir choisi
z
3
=0
z4
Application de (3) (ou alternativement (5)) donne true
Résultat : satisfaisable
Chapitre 5 Satisfaisabilité de formes conjonctives normales
Conclusion
DPLL et DPLL dual
I
I
DPLL : satisfaisabilité de formules en CNF
DPLL dual : validité de formules en DNF
Formule en
DNF
CNF
Satisfaisabilité :
trivial
DPLL
I
Validité : DPLL dual trivial
Chapitre 5 Satisfaisabilité de formes conjonctives normales
Conclusion
DPLL et DPLL dual
I
I
DPLL : satisfaisabilité de formules en CNF
DPLL dual : validité de formules en DNF
Formule en
DNF
CNF
Satisfaisabilité :
trivial
DPLL
I
Validité : DPLL dual trivial
Chapitre 5 Satisfaisabilité de formes conjonctives normales
Conclusion
DPLL et DPLL dual
I
I
DPLL : satisfaisabilité de formules en CNF
DPLL dual : validité de formules en DNF
Formule en
DNF
CNF
Satisfaisabilité :
trivial
DPLL
I
Validité : DPLL dual trivial
Chapitre 5 Satisfaisabilité de formes conjonctives normales
Conclusion
L'état de l'art aujourd'hui
I
I
I
DPLL n'est pas susamment ecace pour des très grandes
formules.
À la n des années 80 : SAT-solveurs basés sur la notion
d'apprentissage : analyse des raison d'échec quand une
branche mène vers une formule non-satisfaisable.
Quelques outils : Chaff, GRASP, MiniSat.
Chapitre 5 Satisfaisabilité de formes conjonctives normales
Conclusion
L'état de l'art aujourd'hui
I
I
I
DPLL n'est pas susamment ecace pour des très grandes
formules.
À la n des années 80 : SAT-solveurs basés sur la notion
d'apprentissage : analyse des raison d'échec quand une
branche mène vers une formule non-satisfaisable.
Quelques outils : Chaff, GRASP, MiniSat.
Chapitre 5 Satisfaisabilité de formes conjonctives normales
Conclusion
L'état de l'art aujourd'hui
I
I
I
DPLL n'est pas susamment ecace pour des très grandes
formules.
À la n des années 80 : SAT-solveurs basés sur la notion
d'apprentissage : analyse des raison d'échec quand une
branche mène vers une formule non-satisfaisable.
Quelques outils : Chaff, GRASP, MiniSat.
Téléchargement