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.