Les cas où la difficulté disparaît
Ce que ce chapitre apporte
- Résoudre 2-SAT en temps linéaire, et en extraire un modèle, pas seulement une réponse.
- Distinguer un chemin qui force une valeur d'un chemin qui rend la formule insatisfiable.
- Reconnaître une formule de Horn et la résoudre par propagation unitaire seule.
- Reconnaître un système XOR et savoir qu'il se résout par élimination de Gauss.
- Expliquer pourquoi l'encodage d'un XOR en clauses détruit ce qui le rendait facile.
- Énoncer le théorème de Schaefer et s'en servir pour trancher devant une modélisation.
Premier cas facile : 2-SAT
Une clause équivaut à deux implications : et .
On construit un graphe orienté dont les sommets sont les littéraux, avec un arc par implication.
Ces deux implications sont contraposées l'une de l'autre, donc logiquement équivalentes. Les dessiner toutes les deux n'ajoute aucune information : cela rend simplement le graphe parcourable dans les deux sens, ce dont l'algorithme a besoin.
Ce qu'un chemin de vers signifie
C'est ici que se joue toute la subtilité, et elle mérite une figure à elle seule.
L'insatisfiabilité demande les deux chemins : mène à et mène à . Aucune des deux valeurs ne tient alors, et il n'y a plus d'issue.
La formule est insatisfiable si et seulement si une variable et sa négation appartiennent à la même composante fortement connexe du graphe.
Une composante fortement connexe est un ensemble de sommets qui s'atteignent mutuellement. Dire que et y sont ensemble, c'est exactement dire que les deux chemins existent.
Lire un modèle sur le graphe
Le critère répond par oui ou par non. L'algorithme donne mieux : quand la formule est satisfiable, il construit un modèle sans essai ni retour arrière.
Calculer les composantes fortement connexes, puis les ranger en ordre topologique.
Poser si la composante de vient après celle de dans cet ordre, et sinon.
La variable . Sur la figure, occupe la deuxième colonne et la quatrième : vient après. Donc .
La lecture directe dit la même chose : il existe un chemin de vers , en passant par ou par . Supposer faux conduit à vrai, donc est vrai.
La variable . est en première colonne, en dernière. Donc .
La variable . et sont dans la même colonne. Ni l'un ni l'autre n'atteint son opposé : les deux valeurs conviennent, et la variable est libre.
Le modèle. , , et au choix. Contrôle avec : , , . Les trois clauses sont satisfaites.
Conséquence : les composantes vont par paires, celle d'un littéral et celle de son opposé, et elles occupent des positions symétriques dans l'ordre topologique. Choisir systématiquement celle qui vient en dernier revient donc à choisir, pour chaque variable, le côté qui n'implique rien de contradictoire.
Total : linéaire, sans aucun retour arrière, sans aucune décision. Et il y a là plus qu'un tour de force. 2-SAT est facile parce qu'une clause de deux littéraux est une implication, donc une information locale qui se propage. Il n'y a jamais de choix à faire.
Ce « ou » dans la conclusion est exactement ce qui fait passer du temps linéaire au NP-complet. Un arc de graphe sait porter « alors » ; il ne sait pas porter « alors ou ».
Deuxième cas facile : Horn-SAT
Une clause de Horn contient au plus un littéral positif.
Elle s'écrit donc soit , ce qui est exactement la règle « si et … et alors », soit sans littéral positif du tout, ce qui est une contrainte d'exclusion.
est de Horn, un seul positif. ne l'est pas, deux positifs. l'est, aucun positif.
Une seule clause hors norme suffit à faire sortir la formule entière du fragment, et donc à lui rendre toute sa difficulté.
Partir de toutes les variables à 0.
Tant qu'il existe une clause dont tous les littéraux négatifs sont faux, c'est-à-dire dont toutes les conditions sont réunies, et dont le littéral positif vaut encore 0 : mettre ce littéral positif à 1.
S'arrêter quand plus aucune clause n'est dans ce cas. Si une clause sans littéral positif se retrouve falsifiée, la formule est insatisfiable.
C'est la propagation unitaire, et rien d'autre. Elle suffit, et le résultat obtenu est le modèle minimal de la formule.
- c1(a)⇒ a = 1
- c2(b)⇒ b = 1
- c3(¬a∨¬b∨c)
- c4(¬c∨d)
Propagation unitaire : a = 1, b = 1. Ces valeurs ne sont pas des choix, elles sont imposées.
Les faits observés : le service ne répond pas, et la charge processeur est normale. Deux clauses unitaires, et .
Les règles du diagnostic, chacune de la forme « si … alors … » :
- si le service est muet et la charge normale, alors le processus est arrêté : ;
- si le processus est arrêté, consulter le journal : ;
- si le processus est arrêté, alerter l'astreinte : .
Le déroulement est mécanique. Les deux faits passent à 1, ce qui rend la première règle unitaire et pose , ce qui rend les deux suivantes unitaires à leur tour. Conclusion : consulter le journal et alerter.
Aucune décision n'a été prise, aucune hypothèse n'a été testée puis abandonnée. Un moteur de règles ne fait rien d'autre, et c'est pourquoi il répond instantanément là où un solveur général chercherait.
L'algorithme le construit exactement. Il ne met une variable à 1 que lorsqu'une clause l'y oblige, donc il ne dépasse jamais ce minimum ; et il s'arrête quand plus rien ne l'oblige, donc il l'atteint.
Si ce modèle minimal falsifie une clause sans littéral positif, aucun autre ne la satisfera : les autres modèles ne font qu'ajouter des 1, ce qui ne peut pas aider une clause entièrement négative. D'où l'insatisfiabilité, sans avoir rien essayé.
C'est cette unicité qui disparaît dès qu'une clause a deux littéraux positifs : « ou » ouvre deux minima possibles, donc un choix.
Ces outils sortent du fragment dès qu'ils permettent d'écrire « ce paquet exige l'un de ceux-ci », qui compte plusieurs littéraux positifs. Ce n'est pas un hasard si c'est précisément à partir de là que la résolution de dépendances est devenue lente, et que plusieurs d'entre eux embarquent aujourd'hui un vrai solveur SAT.
Troisième cas facile : XOR-SAT
Celui-ci est le plus surprenant des trois, et le plus utile à connaître pour comprendre pourquoi certaines instances réputées petites résistent aux meilleurs solveurs.
Une contrainte XOR porte sur la parité d'un ensemble de variables :
, avec valant 0 ou 1.
Elle exige que le nombre de variables valant 1 soit pair si , impair si .
Un tel système est un système d'équations linéaires sur le corps à deux éléments, où le ou exclusif joue le rôle de l'addition. Il se résout donc par élimination de Gauss, exactement comme un système linéaire ordinaire, en temps polynomial.
, ,
La deuxième équation donne .
La première donne , donc est l'inverse de .
Contrôle sur la troisième. , puisque . L'équation est satisfaite quelle que soit la valeur de : elle n'apporte rien de neuf, elle est combinaison des deux autres.
Les solutions : avec , ou avec . Deux solutions, obtenues sans le moindre essai.
, ,
Additionner les trois équations. À gauche, chaque variable apparaît exactement deux fois, et : le membre de gauche vaut . À droite, .
On obtient . Le système est insatisfiable, et la démonstration tient en une ligne.
C'est la même structure que le cycle impair du chapitre sur la coloration : trois contraintes « ces deux-là doivent différer » posées sur un triangle, et l'on ne peut pas satisfaire les trois.
Elle n'a aucun équivalent sur les clauses. Additionner deux clauses n'a pas de sens ; la seule opération dont dispose un solveur est la résolution, qui élimine une variable à la fois et sur un seul littéral. Le chapitre suivant montrera à quel point c'est plus faible.
Ce que la traduction en clauses détruit
Pour , cela fait quatre clauses. Pour , plus d'un demi-million. C'est déjà mauvais, mais ce n'est pas le pire.
Voici les quatre clauses de . Chacune interdit une affectation de parité paire.
- c1(x∨y∨z)
- c2(¬x∨¬y∨z)⇒ z = 1
- c3(¬x∨y∨¬z)
- c4(x∨¬y∨¬z)
Propagation unitaire : z = 1. Ces valeurs ne sont pas des choix, elles sont imposées.
Pire, ce n'est pas seulement une occasion manquée : on sait démontrer que certains systèmes XOR, écrits en CNF, exigent des preuves par résolution de taille exponentielle. Comme tous les solveurs CDCL raisonnent par résolution, aucun d'eux ne peut y échapper. Le chapitre 6 revient sur ce résultat.
D'où l'existence de solveurs, dont CryptoMiniSat est le plus connu, qui gardent les contraintes XOR à part et leur appliquent Gauss en parallèle du raisonnement par clauses. C'est aussi la raison pour laquelle les instances issues de la cryptographie, saturées de ou exclusifs, sont si dures : leur difficulté est en grande partie fabriquée par l'encodage.
Ce n'est pas une subtilité de définition : c'est ce qui arrive constamment en modélisation. Une contrainte « exactement un » se réduit à des clauses binaires, sauf la clause « au moins un » qui en compte . Le modèle n'est donc pas du 2-SAT, et il ne le sera jamais.
La bonne question n'est donc pas « mon problème est-il dans un fragment facile », qui reçoit presque toujours la réponse non, mais « quelle partie de mon problème l'est », parce que c'est de là que viennent les propagations gratuites.
Pourquoi exactement ces trois cas
Ces trois fragments ne sont pas une collection d'accidents heureux. La question « quelles restrictions rendent SAT facile » a une réponse complète, et elle est ancienne.
| Fragment | La restriction | Pourquoi c'est facile | Le coût |
|---|---|---|---|
| 2-SAT | deux littéraux par clause | une clause est une implication : tout se propage, rien ne se choisit | |
| Horn | au plus un littéral positif | la propagation unitaire seule construit le modèle minimal | |
| XOR | contraintes de parité | c'est de l'algèbre linéaire, et Gauss s'applique |
Si l'on fixe à l'avance les types de contraintes autorisés, le problème de satisfaction correspondant est soit dans P, soit NP-complet. Il n'y a rien entre les deux.
Les cas faciles sont exactement au nombre de six : les formules toujours satisfaites par tout à 0, celles toujours satisfaites par tout à 1, les formules de Horn, leur symétrique où chaque clause a au plus un littéral négatif, les formules à deux littéraux par clause, et les systèmes affines, c'est-à-dire XOR.
Si toutes ont deux littéraux, ou au plus un positif, ou sont des parités, le problème est facile et il existe un algorithme dédié qui écrasera n'importe quel solveur général.
Sinon, il n'y a aucun moyen terme à espérer : le problème est NP-complet, et la seule question qui reste porte sur la structure de l'instance particulière, au sens du chapitre précédent.
Horn : la propagation unitaire construit le modèle minimal, donc il n'y a rien à choisir.
XOR : Gauss élimine les variables une à une, sans jamais parier sur une valeur.
Dans les trois cas, la difficulté disparaît avec le choix. C'est exactement ce que les chapitres suivants vont exploiter : tout le travail d'un solveur consiste à décider le moins souvent possible, et à ne jamais refaire deux fois le même mauvais choix.
Exercices type
La formule est-elle satisfiable ? Répondre par le graphe.
C'est du 2-SAT. Les six arcs :
donne et . donne et . donne et .
Chercher les allers-retours. Depuis : . Les sommets et sont donc dans une même composante. Cette composante contient-elle ? Depuis on atteint , et depuis on atteint , sans jamais sortir de la paire. Donc non.
Satisfiable. Pour le modèle : atteint , par , alors que n'atteint pas . La composante de vient donc après celle de , d'où . De même .
Contrôle : , , . Les trois clauses sont satisfaites.
Une formule 2-SAT de 5 variables contient un chemin de vers et un chemin de vers . Que peut-on conclure ?
Deux forçages, aucune contradiction.
Le premier chemin dit que supposer vrai mène à faux : donc . Le second dit que supposer faux mène à vrai : donc .
La formule reste parfaitement satisfiable en l'état de ces informations. Il faudrait, pour conclure à l'insatisfiabilité, trouver une variable dont les deux chemins existent simultanément.
C'est la confusion la plus fréquente sur 2-SAT : un chemin unique déduit, une paire de chemins réfute.
La formule est-elle de Horn ? La résoudre.
Oui : chaque clause a au plus un littéral positif. Les deux premières sont des règles, les deux dernières des faits.
Application de l'algorithme, en partant de tout à 0 :
est falsifiée, on pose . de même, . devient falsifiée, on pose . devient falsifiée, on pose . Plus rien n'est falsifié.
Modèle : , et c'est le modèle minimal. Le calcul est du pur chaînage avant, exactement ce que fait un moteur de règles, et il n'a demandé aucune décision.
La formule est-elle de Horn ?
Non. La première clause contient deux littéraux positifs, et . Elle se lit « si alors ou », et c'est précisément ce « ou » dans la conclusion qui fait sortir du fragment.
La différence n'est pas cosmétique : elle réintroduit le choix. Un moteur de règles sait dérouler « si alors » ; face à « si alors ou », il doit parier sur l'un des deux et savoir revenir en arrière. C'est toute la distance entre un chaînage avant linéaire et une recherche.
La seconde clause, elle, est bien de Horn.
Une formule de Horn est-elle toujours satisfiable ?
Non. Il suffit d'une clause sans littéral positif que le modèle minimal falsifie.
Exemple : . Les trois clauses sont bien de Horn, avec respectivement un, un et zéro littéral positif.
Le déroulement : force , puis force . La troisième clause, , se retrouve alors entièrement fausse.
Insatisfiable, et détecté en deux propagations. Noter que la clause fautive est celle qui n'a aucun littéral positif : ce sont les seules qui peuvent échouer, puisque toutes les autres peuvent toujours être satisfaites en mettant leur conclusion à 1.
Écrire en clauses
La contrainte exige un nombre pair de variables à 1. Il faut donc interdire les quatre affectations de parité impaire, une clause chacune.
Les affectations à exclure sont , , et . Chacune donne la clause qui la nie :
, , , .
Quatre clauses, soit . Noter au passage que ce sont exactement les clauses complémentaires de celles de : chaque signe est inversé.
Le système , , a-t-il une solution ?
Additionner les trois équations. Chaque variable apparaît deux fois à gauche et s'annule, donc le membre de gauche vaut 0. À droite, .
On obtient : le système est insatisfiable.
La vérification directe confirme : la deuxième équation impose , la troisième impose , donc , ce qui contredit la première.
Ce raisonnement d'une ligne est hors de portée d'un solveur CDCL travaillant sur les douze clauses de l'encodage, qui devra les explorer. Sur un système de mille équations, l'écart devient insurmontable.
Une modélisation produit 4 000 clauses binaires et 12 clauses de cinq littéraux. Est-elle facile ?
Non, pas au sens du théorème. Le fragment 2-SAT exige que toutes les clauses soient binaires, et douze exceptions suffisent à faire perdre la garantie.
Mais la lecture utile n'est pas là. Ces douze clauses sont les seules qui demandent un choix : une fois leurs littéraux fixés, tout le reste est du 2-SAT, donc résoluble en temps linéaire.
Autrement dit, la formule possède une porte dérobée naturelle, au sens du chapitre précédent, et il suffit d'explorer les combinaisons issues de ces douze clauses. C'est précisément le raisonnement qui explique pourquoi tant d'instances industrielles, formellement NP-complètes, se résolvent en quelques secondes.
1.La formule (x ∨ y) ∧ (¬x ∨ z) ∧ (¬y ∨ ¬z) relève de…
2.Dans un graphe d'implication 2-SAT, il existe un chemin de x vers ¬x mais aucun de ¬x vers x. Que conclure ?
3.La clause (¬a ∨ b ∨ c) est-elle une clause de Horn ?
4.Quelle clause de Horn peut être falsifiée par le modèle minimal ?
5.Un système de 500 contraintes XOR est traduit en clauses puis donné à un solveur CDCL. À quoi s'attendre ?
6.D'après le théorème de Schaefer, un problème de satisfaction à contraintes fixées peut-il être « moyennement difficile » ?
La méthode
- Compter les littéraux par clause avant tout : deux partout signifie temps linéaire.
- Compter les littéraux positifs par clause : au plus un partout signifie Horn, donc temps linéaire.
- Chercher les contraintes de parité : un système XOR se résout par Gauss, et se traduit très mal en clauses.
- Construire le graphe d'implication pour toute question 2-SAT, et y lire le modèle, pas seulement la réponse.
- Ne pas confondre un chemin qui force une valeur et une paire de chemins qui réfute.
- Vérifier que la restriction vaut pour toutes les clauses : une seule exception fait tomber la garantie.
- Chercher quelle partie du problème est facile quand l'ensemble ne l'est pas : c'est là que se trouvent les propagations gratuites.
Synthèse
- 2-SAT : composantes fortement connexes du graphe d'implication, en temps linéaire, et l'ordre topologique donne le modèle.
- Un chemin de vers force ; il faut les deux chemins pour l'insatisfiabilité.
- Une clause de trois littéraux n'est plus une implication : sa conclusion est un « ou », donc un choix.
- Horn-SAT se résout par la seule propagation unitaire, qui construit le modèle minimal unique.
- Seules les clauses de Horn sans littéral positif peuvent être falsifiées par ce modèle.
- XOR-SAT est de l'algèbre linéaire sur deux éléments : Gauss le résout en additionnant des équations.
- Une contrainte XOR sur variables coûte clauses, et son encodage rend la structure invisible.
- Schaefer : soit dans P, soit NP-complet, et rien entre les deux. Les cas faciles sont au nombre de six.
- Une seule clause hors du fragment fait tomber toute la garantie.
- Le fil conducteur : la difficulté disparaît exactement quand le choix disparaît.