Aller au contenu
Kudos AI
Read in English
Logique et connaissances

Un million de clauses, ou soixante et une

Convertir une formule courte en forme normale conjonctive par distribution donne 1 048 576 clauses et 20 971 520 littéraux ; nommer les sous-formules en donne 61 et 160, soit un facteur 131 072 sur les littéraux, et ne perd rien du tout : les deux ont le même nombre de modèles, vérifié par énumération. C’est le codage, et non le solveur, qui décide du sort d’un problème de satisfiabilité.

4 min de lectureKudos AI

Prérequis : La logique et la représentation des connaissances

Une formule réécrite en clauses, deux clauses portant une paire complémentaire glissant l’une vers l’autre pour produire leur résolvante, et la chaîne se refermant sur la clause vide.

La résolution n’a qu’une règle d’inférence et exige son entrée en forme normale conjonctive : une conjonction de disjonctions de littéraux. Toute formule propositionnelle admet un équivalent en FNC, ce que l’on énonce d’ordinaire comme si l’affaire était réglée.

Voici une formule qui sépare « il en existe un » de « vous pouvez vous le permettre ».

φ  =  (x1∧y1)∨(x2∧y2)∨⋯∨(x20∧y20).\varphi \;=\; (x_1 \wedge y_1) \vee (x_2 \wedge y_2) \vee \dots \vee (x_{20} \wedge y_{20}).

Vingt conjonctions, quarante variables, une ligne.

A. Par distribution

La conversion classique distribue ∨\vee sur ∧\wedge. Chacun des vingt disjoints fournit soit son xx, soit son yy à chaque clause, indépendamment : le résultat compte donc une clause par choix,

220=1,048,576 clauses,2^{20} = 1{,}048{,}576 \text{ clauses},

chacune longue de vingt littéraux, soit 20 971 520 littéraux au total. Pour trente disjoints, cela fait 1 073 741 824 clauses. La conversion est correcte, elle termine, et elle est inutilisable.

B. En nommant les sous-formules

L’alternative consiste à donner un nom à chaque conjonction. Introduisez tit_i et affirmez ti↔(xi∧yi)t_i \leftrightarrow (x_i \wedge y_i), ce qui fait trois clauses :

(¬ti∨xi),(¬ti∨yi),(ti∨¬xi∨¬yi),(\neg t_i \vee x_i), \qquad (\neg t_i \vee y_i), \qquad (t_i \vee \neg x_i \vee \neg y_i),

puis dites qu’au moins l’une d’elles est vraie : (t1∨⋯∨t20)(t_1 \vee \dots \vee t_{20}).

Cela fait 3×20+1=613 \times 20 + 1 = \mathbf{61} clauses et 160 littéraux, contre 20 971 520. Un facteur 131 072 sur les littéraux, obtenu par une règle de réécriture et non par un meilleur solveur. C’est la transformation de Tseitin, et c’est ce que fait l’entrée de tout solveur SAT.

C. Ce que cela coûte

Le résumé habituel est que le résultat est équisatisfiable plutôt qu’équivalent, ce qui sonne comme une concession. Il vaut la peine de préciser à quel point elle est mince.

La nouvelle formule a vingt variables de plus : elle porte donc sur un autre vocabulaire et ne peut être équivalente à φ\varphi au sens strict. Mais chaque tit_i est contraint : les trois clauses le fixent à la valeur de vérité de xi∧yix_i \wedge y_i, sans aucune liberté restante. Tout modèle de φ\varphi se prolonge donc en exactement un modèle du codage, et le comptage le confirme :

nnmodèles de φ\varphimodèles du codage
111
277
33737
4175175

Vérifié en énumérant toutes les affectations, 22n2^{2n} pour φ\varphi et 23n2^{3n} pour le codage. La satisfiabilité est préservée, les solutions le sont, et le nombre de modèles aussi. Ce qui ne l’est pas, c’est la liste des variables, et le prix à payer est une projection à la fin.

Interactif : un million de clauses, ou soixante et une

Axe logarithmique. Les deux encodages sont tracés ; le bouton choisit celui décrit.

110010k1M100M15101520ndistribué, clausesdistribué, littérauxTseitin, clausesTseitin, littéraux
Clauses de cet encodage
1,048,576
Littéraux de cet encodage
20,971,520
Modèles, l’un ou l’autre
1,096,024,843,375
Distribué sur Tseitin, littéraux
131,072x
Distribué sur Tseitin, clauses
17,190x
Les premières clauses : (x1 ∨ x2 ∨ x3 ∨ x4 ∨ x5 ∨ x6 ∨ x7 ∨ x8 ∨ x9 ∨ x10 ∨ x11 ∨ x12 ∨ x13 ∨ x14 ∨ x15 ∨ x16 ∨ x17 ∨ x18 ∨ x19 ∨ x20), (y1 ∨ x2 ∨ x3 ∨ x4 ∨ x5 ∨ x6 ∨ x7 ∨ x8 ∨ x9 ∨ x10 ∨ x11 ∨ x12 ∨ x13 ∨ x14 ∨ x15 ∨ x16 ∨ x17 ∨ x18 ∨ x19 ∨ x20), (x1 ∨ y2 ∨ x3 ∨ x4 ∨ x5 ∨ x6 ∨ x7 ∨ x8 ∨ x9 ∨ x10 ∨ x11 ∨ x12 ∨ x13 ∨ x14 ∨ x15 ∨ x16 ∨ x17 ∨ x18 ∨ x19 ∨ x20), ... 1,048,576 clauses en tout.

Distribuer choisit x ou y dans chacun des 20 disjoints, indépendamment : on écrit donc 1,048,576 clauses de 20 littéraux chacune. Le rapport en littéraux vaut 2 puissance n - 3 : chaque disjoint de plus double l’écart. Les deux ont 1,096,024,843,375 modèles, 4 puissance n moins 3 puissance n, car chaque nouvelle variable est forcée à la valeur de la conjonction qu’elle nomme.

D. La règle elle-même

La résolution prend deux clauses contenant une paire complémentaire et produit leur résolvante :

(α∨ℓ)(β∨¬ℓ)(α∨β).\frac{(\alpha \vee \ell) \qquad (\beta \vee \neg \ell)}{(\alpha \vee \beta)}.

Elle n’est pas complète pour dériver des conséquences quelconques - de PP elle ne dérivera jamais P∨QP \vee Q, qui est pourtant impliqué - mais elle est complète pour la réfutation : si un ensemble de clauses est insatisfiable, la résolution répétée dérive la clause vide. Cela suffit, car KB⊨α\text{KB} \models \alpha exactement lorsque KB∧¬α\text{KB} \wedge \neg\alpha est insatisfiable.

Sur les clauses {P∨Q,  ¬P∨R,  ¬Q∨R,  ¬R}\{P \vee Q,\; \neg P \vee R,\; \neg Q \vee R,\; \neg R\}, il existe une réfutation en quatre étapes :

  1. ¬R\neg R avec ¬P∨R\neg P \vee R donne ¬P\neg P
  2. ¬R\neg R avec ¬Q∨R\neg Q \vee R donne ¬Q\neg Q
  3. P∨QP \vee Q avec ¬P\neg P donne QQ
  4. QQ avec ¬Q\neg Q donne la clause vide.

Saturer aveuglément - résoudre toutes les paires jusqu’à ce que rien de nouveau n’apparaisse - dérive 8 clauses nouvelles et atteint une clôture de 12 avant d’y parvenir. Sur quatre clauses, la différence est nulle. C’est la même différence qui sépare un solveur moderne piloté par les conflits de l’algorithme tel qu’il est écrit dans un manuel, et à grande échelle elle est tout.

La figure applique la même règle à une autre base de connaissances, la règle de la brise du monde du Wumpus, B1,1⇔(P1,2∨P2,1)B_{1,1} \Leftrightarrow (P_{1,2} \vee P_{2,1}) avec ¬B1,1\neg B_{1,1} : quatre clauses plus la requête niée, et chaque réponse est vérifiée sur les huit mondes possibles.

Interactif : une réfutation, clause par clause

Répondu deux fois : par résolution, et en énumérant les huit mondes.

Base de connaissances en FNC, la requête niée en dernier

  • !B11 v P12 v P21
  • !P12 v B11
  • !P21 v B11
  • !B11
  • P12
Clauses de départ
5
Clauses nouvelles
5
Clause vide
oui
La vérification par modèles confirme
oui

Résolvantes, dans l’ordre où le démonstrateur les a trouvées

  • !P12 v B11 + !B11 -> !P12
  • !P21 v B11 + !B11 -> !P21
  • !P12 v B11 + P12 -> B11
  • !B11 v P12 v P21 + !P12 -> !B11 v P21
  • P12 + !P12 -> []
demander si la base implique

La clause vide est apparue après 5 clauses nouvelles, et une disjonction vide est fausse dans tout modèle. La base jointe à la requête niée est donc insatisfiable, ce qui est exactement ce que signifie « la base implique la requête ». La vérification par modèles, qui énumère les huit mondes sans partager une ligne de code, confirme.

E. Ce qu’il faut en retenir

  • La traduction fait partie de l’algorithme. Un problème impossible après distribution et routinier après Tseitin n’a jamais été un problème difficile ; il était mal codé.
  • Comptez les littéraux, pas les clauses. La forme distribuée ci-dessus est mauvaise dans les deux, mais des codages comparables en nombre de clauses diffèrent souvent d’un ordre de grandeur en littéraux, or c’est cela que la propagation parcourt.
  • « Il existe un équivalent en FNC » est un énoncé d’existence. « Tout problème de NP se réduit à SAT » aussi. Les deux sont vrais, et aucun ne dit quoi que ce soit sur la taille de ce que l’on obtient.

Références et lectures complémentaires

  • Stuart Russell, Peter Norvig, Artificial Intelligence: A Modern Approach, Pearson (3rd edition), 2010· Bibliothèque de référence Kudos AI

Les œuvres protégées par le droit d’auteur sont citées à titre de référence uniquement et ne sont pas hébergées ici ; veuillez consulter l’éditeur pour y accéder.

Lecture associée

10 min de lectureLogique et connaissances

La logique et la représentation des connaissances

Raisonner sur ce qui doit être vrai : modèles et conséquence logique déroulés par énumération exhaustive, correction et complétude, pourquoi la logique propositionnelle épuise son pouvoir expressif, et là où la logique du premier ordre prend le relais.

Représentation des connaissancesIntelligence artificielle
8 min de lectureRecherche et jeux

La théorie des jeux et l’équilibre de Nash

Le raisonnement stratégique quand les joueurs ne sont pas strictement opposés : stratégies dominantes, le dilemme du prisonnier déroulé depuis sa matrice de gains, l’équilibre de Nash, l’optimalité de Pareto, et pourquoi équilibre et efficacité peuvent s’opposer.

Théorie des jeuxIntelligence artificielleMathématiques
4 min de lectureFondements des probabilités

Quelle mauvaise loi voulez-vous ?

Une cible bimodale, une gaussienne, et deux directions de la même divergence. Minimiser KL(P||Q) étale la gaussienne sur les deux modes avec presque aucune masse là où la cible se trouve réellement ; minimiser KL(Q||P) la pose sur un mode, à 0,6931 nats, soit ln 2 à quatre décimales, et ce n’est pas une coïncidence. Chaque ajustement est jugé catastrophique par l’autre critère, 2,0976 contre 15,2799.

Apprentissage automatiqueMathématiques
← Retour à tous les articles