Notions de logique Judicaël Courant 17 septembre 2014 1 Manipulation de termes et formules 1.1 Exemple exemple NB : on manipulera des formules sans quantificateurs. 1.2 Syntaxe : concrète ou abstraite ? Quand on étudie une formule, on peut parler de sa syntaxe concrète : la chaîne de caractères qui permet de l’écrire ; htermei : := hvariablei | htermei ‘+’ htermei | htermei ‘−’ htermei | htermei ‘×’ htermei | htermei ‘/’ htermei | hconstante entièrei NB : Cette grammaire ne précise rien – ni sur le sens d’une formule ou d’un terme ; – ni même sur la façon de lever les ambiguïtés lorsqu’on lit une formule ou un terme écrit de façon concrète (par exemple : a + b × c est-il un arbre de racine × ou + ?). Elle sert à représenter uniquement ce qui se passe sur les arbres. Ces arbres se modélisent naturellement par un type Caml : type terme = | Variable of string | Constante of int | Plus of terme ∗ terme | Moins of terme ∗ terme | Mult of terme ∗ terme | Div of terme ∗ terme ;; 1.3 Syntaxe abstraite type formule_atomique = | InfStr of terme ∗ terme | Inf of terme ∗ terme | SupStr of terme ∗ terme | Sup of terme ∗ terme ;; La syntaxe concrète peut (ici) être décrite par une grammaire abstraite : hformulei : := hformule atomiquei | hformulei ‘∧’ hformulei | hformulei ‘∨’ hformulei | hformulei ‘⇒’ hformulei | hformulei ‘ ⇐⇒ ’ hformulei | ‘¬’ hformulei type formule = | Atome of formule_atomique | Conj of formule ∗ formule | Disj of formule ∗ formule | Impl of formule ∗ formule | Equiv of formule ∗ formule | Neg of formule ;; sa syntaxe abstraite : une description arborescente de cette formule. C’est le second point qui nous intéresse. hformule atomiquei : := htermei ‘=’ htermei | htermei ‘<’ htermei | htermei ‘≤’ htermei | htermei ‘>’ htermei | htermei ‘≥’ htermei 1 1.4 Sémantique 1.5 Sémantique des termes Sémantique : sens, valeur. 2 On va interpréter les termes comme des représentations de nombres flottants pour leur donner une valeur. Ici l’ensemble des valeurs pour les termes sera l’ensemble des réels. Étant donné un terme t, on veut définir précisément sa sémantique. Problème : quelle valeur donner aux variables ? L’interprétation d’un terme doit dépendre d’un environnement. Définition 1 (Environnement). On appelle environnement toute fonction ρ définie sur une partie V de l’ensemble des variables et associant à tout x ∈ V une valeur ρ(x). Étant donné un environnement ρ et un terme t on notera [[t]]ρ la valeur de t dans l’environnement ρ. On définit alors la sémantique des termes par induction sur leur syntaxe abstraite de la façon suivante : [[x]]ρ [[t1 + t2 ]]ρ [[t1 − t2 ]]ρ [[t1 × t2 ]]ρ = ρ(x) = [[t1 ]]ρ + [[t2 ]]ρ = [[t1 ]]ρ − [[t2 ]]ρ = [[t1 ]]ρ × [[t2 ]]ρ [[t1 ]]ρ [[t1 /t2 ]]ρ = [[t2 ]]ρ pour toute variable x Attention : le terme t1 + t2 représente bien un arbre avec pour racine l’opérateur + et pour sous-arbre t1 et t2 . Le symbole + n’y a donc pas la même signification que dans le membre de droite : [[t1 ]]ρ + [[t2 ]]ρ représente en effet un réel qui est le résultat de l’addition de deux réels. L’implantation est assez directe. On s’intéressera ici uniquement à des environnements définis sur un ensemble fini de variables, et on représentera par la liste [(x0 , v0 ); . . . ; (xn−1 ; vn−1 )] la fonction qui pour tout i ∈ [[0, n[[ associe vi à xi . type var == string ; ; type ’ a env == ( var ∗ ’ a ) list ; ; rec eval_t e t = match t with Variable x −> assoc x e Constante n −> float_of_int n Plus ( t1 , t2 ) −> l e t v1 = eval_t e t1 and v2 = eval_t e t2 in v1 +. v2 | Moins ( t1 , t2 ) −> l e t v1 = eval_t e t1 and v2 = eval_t e t2 in v1 −. v2 | Mult ( t1 , t2 ) −> l e t v1 = eval_t e t1 and v2 = eval_t e t2 in v1 ∗ . v2 let | | | 3 ;; | Div ( t1 , t2 ) −> l e t v1 = eval_t e t1 and v2 = eval_t e t2 in v1 / . v2 1.6 Sémantique des formules On veut étendre cette interprétation aux formules. La valeur d’une formule est alors une valeur de vérité : vrai (V ) ou faux (F ). [[Egal(t1 , t2)]]ρ = V =F [[Inf(t1 , t2)]]ρ = V =F .. . si [[t1 ]]ρ = [[t2 ]]ρ sinon si [[t1 ]]ρ ≤ [[t2 ]]ρ sinon [[Conj(A1 , A2 )]]ρ = V =F [[Disj(A1 , A2 )]]ρ = F =V [[Impl(A1 , A2 )]]ρ = F =V si [[A1 ]]ρ = [[A2 ]]ρ = V sinon si [[A1 ]]ρ = [[A2 ]]ρ = F sinon si [[A1 ]]ρ = V et [[A2 ]]ρ = F sinon [[Equiv(A1 , A2 )]]ρ = V =F [[Neg(A)]]ρ = V =F si [[A1 ]]ρ = [[A2 ]]ρ sinon si [[A]]ρ = F si [[A]]ρ = V 1.7 Implantation l e t rec eval_fa e fa = match fa with | Egal ( t1 , t2 ) −> l e t v1 = eval_t e t1 and v2 = eval_t e t2 in v1 = v2 4 | InfStr ( t1 , t2 ) −> l e t v1 = eval_t e t1 and v2 = eval_t e t2 in v1 < v2 ... ;; let | | | | | | ;; rec eval_f e f = match f with Atome fa −> eval_fa e fa Conj ( f1 , f2 ) −> eval_f e f1 && eval_f e f2 Disj ( f1 , f2 ) −> eval_f e f1 || eval_f e f2 Impl ( f1 , f2 ) −> not ( eval_f e f1 ) || eval_f e f2 Equiv ( f1 , f2 ) −> eval_f e f1 = eval_f e f2 Neg ( f1 ) −> not ( eval_f e f1 ) engendré par la grammaire abstraite suivante : hformulei : := hvariable propositionnellei | hformulei ‘∧’ hformulei | hformulei ‘∨’ hformulei | hformulei ‘⇒’ hformulei | hformulei ‘ ⇐⇒ ’ hformulei | ‘¬’ hformulei | ‘⊥’ | ‘>’ Définition 3. Les atomes de la logique propositionnelle sont les variables. On appelle littéral, toute formule qui est soit un atome a, soit la négation ¬a d’un atome. Étant donné un littéral l, on notera l le littéral – ¬l si l est un atome ; 1.8 Remarques – a si l est la négation ¬a d’un atome a. D’autres sémantiques sont possibles. Pour les termes on peut par exemple donner des sémantiques à valeur : – dans les entiers ; – dans Z/nZ. Pour les formules, on peut définir une sémantique à valeurs : – dans un ensemble à trois valeurs (vrai/faux/indéfini) 1 – dans l’ensemble des ouverts d’un espace topologique (modèles de la logique intuitionniste) Définition 4 (Logique booléenne). On se donne deux valeurs de vérités notées 0 et 1 (ou ⊥ et >, ou F et V ). L’ensemble { 0, 1 } est appelé ensemble des booléens et est noté B. On définit deux lois de composition interne sur + et . sur B par : 1.9 Problèmes ainsi qu’une application . : B → B par : Définition 2. On dit qu’un environnement ρ satisfait une formule A si [[A]]ρ = V . On dit qu’une formule A est satisfiable (ou satisfaisable) s’il existe un environnement ρ qui satisfait A. On dit qu’une formule est une tautologie si dans tout environnement donnant une définition à chaque variable de A, son interprétation vaut V . Comment tester qu’une formule est satisfiable ? est une tautologie ? Pour répondre à cette question, on va se placer dans un cadre plus simple. . . 0+0=0 0+1=1 1+0=1 1+1=1 0.0 = 0 0.1 = 0 1.0 = 0 1.1 = 1 0=1 1=0 + et . sont deux lois : 1. associatives et commutatives ; 2. possédant chacune un élément neutre (respectivement 0 et 1) et un élément absorbant (respectivement 1 et 0) ; 3. distributives l’une par rapport à l’autre (dans les deux sens !). 2 Logique propositionnelle De plus, pour tout booléens a et b, on a 2.1 Définition Étant donné un ensemble (au plus dénombrable) V de variables propositionnelles, l’ensemble F des formules de la logique propositionnelle est l’ensemble de formules b+b=1 b.b = 0 a + b = a.b a.b = a + b 1. Séduisant pour faire de «l’intelligence artificielle» mais ne tient pas ses promesses. 5 6 Définition 5 (Interprétation d’une formule propositionnelle). Une valuation (atomique) ou interprétation des variables est une fonction ρ : V → B. L’interprétation [[.]]ρ : V → B associée à une valuation ρ est définie par induction structurelle sur les formules par : [[a]]ρ = ρ(a) pour a ∈ V [[φ ∧ ψ]]ρ = [[φ]]ρ .[[ψ]]ρ [[⊥]]ρ = 0 [[φ ⇒ ψ]]ρ = [[φ]]ρ + [[ψ]]ρ [[¬φ]]ρ = [[φ]]ρ [[φ ∨ ψ]]ρ = [[φ]]ρ + [[ψ]]ρ [[>]]ρ = 1 [[φ ⇐⇒ ψ]]ρ = ([[φ]]ρ + [[ψ]]ρ ).([[φ]]ρ + [[ψ]]ρ ) Étant donné une formule φ, [[φ]]ρ est la valeur de vérité de la formule φ pour la valuation ρ. NB : Pour toute valuation ρ et toute formule φ, la restriction ρ0 de ρ à l’ensemble des variables apparaissant dans φ vérifie : [[φ]]ρ0 = [[φ]]ρ . On appelle table de vérité un tableau dans lequel la dernière colonne est étiquetée par une formule propositionnelle et les colonnes précédentes par les n variables apparaissant dans la formule. La table comporte alors, pour chacune des 2n valuations atomiques possibles sur ces n variables, exactement une ligne donnant les valeurs de vérité associées aux variables et la valeur de vérité de la formule. exemples Définition 6. On dit qu’une formule φ est satisfaite par une valuation ρ, si [[φ]]ρ = 1, et on note cela ρ |= φ. On dit qu’une formule est satisfiable (ou satisfaisable) s’il existe au moins une valuation qui la satisfait. On dit que ρ falsifie la formule φ si [[φ]]ρ = 0. On dit qu’une formule φ est une tautologie si elle est satisfaite par toute valuation, et on note cela |= φ : |= φ ⇐⇒ ∀ρ ∈ B V ρ |= φ On dit que deux formules φ et ψ sont équivalentes et on note φ ≡ ψ, si pour toute valuation ρ, [[φ]]ρ = [[ψ]]ρ . Proposition 1. Soit φ et ψ deux formules. L’équivalence de formule est une congruence, c’est-à-dire une relation d’équivalence qui de plus passe au contexte : notons C[φ] une formule contenant ψ comme sous-formule φ et C[ψ] la formule obtenue en remplaçant cette sous-formule par ψ. Si φ ≡ ψ alors C[φ] ≡ C[ψ]. Les tautologies sont les formules équivalentes à >, les formules non-satisfiables sont celles équivalentes à ⊥. φ est satisfiable si et seulement si ¬φ n’est pas une tautologie. φ est une tautologie si et seulement si ¬φ n’est pas satisfiable. φ et ψ sont équivalentes si et seulement si φ ⇐⇒ ψ est une tautologie. 7 On déduit des propriétés de l’algèbre de Boole B les résultats suivants : Proposition 2. Soit φ, ψ et χ trois formules. Alors φ ∨ (ψ ∨ χ) ≡ (φ ∨ ψ) ∨ χ φ∨ψ ≡ψ∨φ φ ∧ (ψ ∨ χ) ≡ (φ ∧ ψ) ∨ (φ ∧ χ) φ∨φ≡φ φ∨⊥≡φ φ∧⊥≡⊥ ¬¬φ ≡ φ φ ∧ (ψ ∧ χ) ≡ (φ ∧ ψ) ∧ χ φ∧ψ ≡ψ∧φ φ ∨ (ψ ∧ χ) ≡ (φ ∨ ψ) ∧ (φ ∨ χ) φ∧φ≡φ φ∧>≡φ φ∨>≡> 2.2 Le problème SAT On s’intéresse à une formule de taille n contenant k variables distinctes. NB : 1. k = O(n) ; 2. borne serrée, car il est facile de construire une formule de taille n dont le nombre de variables est proportionnel à la taille de la formule ; 3. c’est même le cas pour toute formule ne comportant que des variables distinctes et ne comportant pas de double négation (exercice : une formule de taille n sans double négation comporte au moins (n + 2)/4 variables). – Comment tester qu’une formule est satisfiable ? (problème SAT ) – Comment tester qu’une formule est une tautologie ? 2.2.1 Méthode naïve Essayer toutes les interprétations des variables. Complexité en temps : O(2n ). 2.2.2 Test polynomial par certificat Si on dispose d’une valuation ρ on peut tester si ρ |= φ en temps polynomial en la taille de φ (et même linéaire si les variables de φ sont numérotées par des entiers de 0 à k− et ρ représenté par un tableau de booléens). Donc si φ est satisfiable, il existe une valuation ρ, qu’on pourra appeler certificat (ou témoin, ou preuve) de satisfiabilité, vérifiable en temps polynomial. On dit que la satisfiabilité est vérifiable par certificat en temps polynomial. NB : le caractère tautologique d’une proposition n’est pas (a priori) vérifiable par certificat en temps polynomial 2 . En revanche le caractère non-tautologique d’une proposition l’est. 2. Avis aux amateurs : Le premier qui arrivera à le démontrer deviendra célèbre. 8 2.2.3 Non-déterminisme On s’est cantonné jusqu’ici à un modèle de calcul où les algorithmes sont déterministes. On veut étudier des algorithmes qui donnent une réponse du type acceptation/refus. On pourrait imaginer (et définir rigoureusement) un modèle de calcul où, à certains moment, la machine dispose d’une instruction pour tirer un booléen de façon nondéterministe 3 . Pour un même programme et une même donnée, il y a donc plusieurs exécutions possibles. On dira que le programme accepte la donnée s’il y a au moins une exécution qui conduit à une acceptation (on peut imaginer que toutes les exécutions possibles se déroulent en parallèle). Ici, on peut trouver un algorithme permettant de tester la satisfiabilité d’une formule φ de taille n en temps polynomial en n : 1. Faire la liste des variables v0 , . . ., vk−1 de φ ; 2. Initialiser un tableau de k booléens t ; 3. Pour k ∈ [[0, k[[, choisir un booléen b et affecter b à t[k]. 4. Calculer la valeur vérité de φ pour l’interprétation vi 7→ t[i]. Si elle vaut vrai, accepter. La satisfiabilité est donc vérifiable en temps polynomial par une machine nondéterministe. On note N P l’ensemble des problèmes solubles en temps polynomial non-déterministe. SAT ∈ N P On peut montrer que N P est exactement l’ensemble des problèmes vérifiables par certificat en temps polynomial. 2.3 Formes normales conjonctives/disjonctives Définition 7 (Disjonction/conjonction n-aire). Étant donné n formules φ0 , . . . , φn−1 , avec n ∈ N∗ , on appelle disjonction n-aire de ces formules la formule φ0 ∨(φ1 ∨ (. . . ∨ φn−1 )) notée aussi ^ φi i∈[[0,p[[ Par convention, la disjonction de 0 formules est ⊥. De cette façon, si p et q sont deux entiers naturels et φ0 , . . . , φp+q−1 sont p + q formules, on a ^ i∈[[0,p+q[[ φi = ^ i∈[[0,p[[ φi ∨ ^ i∈[[p,p+q[[ φi 3. Dire «au hasard» laisserait entendre qu’on va parler de probabilités. 9 De même, on définit la conjonction conjonction est > si p = 0. W i∈[[0,n[[ φi de n formules, avec la convention que cette Définition 8 (Forme normale conjonctive/disjonctive). On appelle clause toute disjoncV tion i∈[[0,p[[ li de littéraux. La formule ⊥, disjonction de 0 littéraux est appelée clause vide. W On appelle monôme toute conjonction i∈[[0,p[[ li de littéraux. La formule >, disjonction de 0 littéraux est appelée monôme vide. On dit qu’une formule φ est en forme normale conjonctive s’il s’agit d’une conjonction V de disjonction de littéraux, c’est-à-dire d’une conjonction i∈[[0,q[[ de clauses. On dit qu’elle est en forme normale conjonctive distinguée si, dans chaque clause Ci , on trouve une et une seule fois chaque variable de la formule φ. On dit qu’une formule est en forme normale disjonctive s’il s’agit d’une conjonction de disjonction de littéraux. On peut définir de même le fait qu’une formule est en forme normale disjonctive distinguée. Remarque : soit C une clause. Alors ¬C est équivalente à une conjonction de littéraux. On en déduit que la négation de toute formule en FNC est équivalente à une formule en FND. De même, la négation de toute FND est équivalente à une formule en FNC. Proposition 3. Un monôme (resp. une clause) est insatisfiable (resp. une tautologie) si et seulement s’il contient deux littéraux li et lj tels que li soit une variable et lj soit sa négation. Une FNC est satisfiable si et seulement si elle contient au moins un monôme satisfiable. Une FND est une tautologie si et seulement si chacune de ses clauses en est une. On peut donc tester en temps polynomial (et même facilement en temps quadratique) : 1. si une formule en FNC est satisfiable ; 2. si une formule en FND est une tautologie. Théorème 1. Pour toute formule φ, il existe une formule ψ en forme normale conjonctive (resp. disjonctive) vérifiant φ ≡ ψ. Démonstration : par induction sur φ. 2.4 Résoudre SAT de façon efficace ? On déduit de ce qui précède un algorithme pour tester la satisfiabilité d’une formule φ. 1. Transformer φ en une formule ψ équivalente en FND (voir démonstration du théorème d’existence de cette FND). 2. Tester si ψ est satisfiable (en temps quadratique). 3. On en déduit immédiatement si φ est satisfiable. 10 On dit qu’on a réduit le problème SAT au problème DN F SAT . On a un algorithme relativement efficace pour DN F SAT . L’algorithme obtenu pour SAT est-il efficace ? Réponse : non ! Pour n ∈ N∗ , notons φn = (X1 ∨ Y1 ) ∧ . . . ∧ (Xbn/4c ∨ Ybn/4c ) où les Xi et les Yi sont des variables. φn est de taille n. La FND ψn de φn obtenue par l’algorithme précédent est de taille Ω(2n/4 ), donc le test de satisfiabilité de cette FND demandera un temps exponentiel en n et non un temps polynomial. Si on veut réduire un problème à un autre et garder une complexité acceptable, il faut que la réduction : 1. fonctionne en temps polynomial ; 2. donne un nouveau problème de taille polynomiale en la taille du problème initial. 2.5 Unicité des FNC/FND ? Il n’y a pas unicité, pour deux types de raisons : 1. Des raisons non-essentielles de syntaxe : si a et b sont deux atomes, on a a∨b ≡ b∨a et ces deux clauses sont en FNC mais sont distinctes. Même problème avec a∨(b∨c) et a ∨ (b ∨ c) 2. Des variables en doublon dans certaines clauses/conjonction de littéraux : a ≡ a ∧ (b ∨ ¬b). 3. Des problèmes liés à l’ajout/l’omission de certaines variables : (a ∨ c) ∧ (a ∨ ¬c) ≡ a. Pour parler de l’unicité, nous allons devoir restreindre les clauses et monômes que nous considérons : Définition 9. Soit un ensemble fini V = { a0 , . . . , an−1 } de n variables, numérotées de 0 à n − 1. Une clause distinguée (resp. un monôme distingué) sur les variables a0 , . . . , W V an−1 est une clause (resp. un monôme) de la forme i∈[[0,n[[ li (resp. i∈[[0,n[[ li ) où pour tout i ∈ [[0, n[[, li est soit ai , soit ¬ai . Autrement dit : chaque variable y apparaît une et une seule fois et les variables apparaissent dans l’ordre de leurs numéros. Une FNC (resp. FND) est dite distinguée si et seulement si toutes ses clauses (resp. ses monômes) le sont. Pour toute clause distinguée C sur les variables a0 , . . . , an−1 , il existe une unique valuation ρ vérifiant ρ 6|= C, c’est la valuation ρ : { a0 , . . . , an−1 } définie par ρ(ai ) = 1 si ¬ai apparaît dans M , et ρ(ai ) = 0 sinon. Réciproquement, pour toute valuation, il existe une unique clause C vérifiant ρ 6|= C. Démonstration Théorème 2. Pour toute φ dont les variables sont parmi a0 , . . . , an−1 , il existe une formule ψ en forme normale disjonctive (resp. conjonctive) distinguée sur a0 , . . . , an−1 équivalente à φ. Cette formule est unique, au sens où l’ensemble de ses monômes (resp. clauses) est exactement l’ensemble des monômes (resp. clauses) associés aux valuations ρ : { a0 , . . . , an } → B tels que ρ |= phi (resp. ρ 6|= φ). Démonstration (cas des FND). Proposition 5. L’unique FND distinguée équivalente à une formule insatisfiable est la disjonction vide de 0 monômes. L’unique FNC distinguée équivalente à une tautologie est la conjonction vide. Démonstration : application directe du théorème. Rem : cela n’a pas énormément d’utilité pratique, les FND distinguées n’étant pas très faciles à calculer. 2.6 SAT : classifions On peut s’intéresser à quelques sous-problèmes de SAT : 1. Tester si une FND est dans SAT (DN F SAT ). 2. Tester si une FND distinguée est satisfiable. 3. Tester si formule en FNC est dans satisfiable (CN F SAT ). 4. Tester si une formule en FNC, dans laquelle chaque clause contient au plus 3 littéraux, est satisfiable (3CN F SAT ou 3SAT ). Proposition 4. Pour tout monôme distingué M sur les variables a0 , . . . , an−1 , il existe une unique valuation ρ vérifiant ρ |= M , c’est la valuation ρ : { a0 , . . . , an−1 } définie par ρ(ai ) = 0 si ¬ai apparaît dans M , et ρ(ai ) = 1 sinon. Réciproquement, pour toute valuation, il existe un unique monôme M vérifiant ρ |= M . On peut évidemment réduire chacun de ces problèmes à SAT : c’est trivial puisque ce sont des sous-problèmes. Ce qui nous intéresse, c’est de réduire SAT à ces sous-problèmes. On a vu qu’on pouvait réduire SAT à DN F SAT mais que cette réduction n’était pas polynomiale. On peut essayer de réduire SAT à la satisfiabilité des F N D distinguées : malheureusement, le théorème d’existence et d’unicité donné consiste à étudier toutes les valuations possibles — soit 2n si φ a n variables — ce qui est exponentiel. On peut clairement réduire 3SAT à CN F SAT , puisque c’est un cas particulier, et CN F SAT à SAT . Peut-on réduire polynomialement SAT à CN F SAT ? Oui ! On peut même le réduire polynomialement à 3SAT ! dessin 11 12 NB : attention, l’ordre des variables est important. Cela peut se faire de la façon suivante. On considère une formule φ contenant les variables a0 , . . . , an−1 . On se donne une infinité de variables supplémentaires vk , pour k ∈ N. On note φ0 , . . . , φN −1 les N sous-formules de φ, avec φN −1 = φ. On construit alors, pour tout i ∈ [[0, k[[, la formule Fi en fonction de la forme de φi comme suit : φi ¬φj φj ∧ φk φj ∨ φk aj φj ⇒ φk φj ⇐⇒ φk ⊥ > Fi vi ⇐⇒ ¬vj vi ⇐⇒ (vj ∧ vk ) vi ⇐⇒ (vj ∨ vk ) vi ⇐⇒ aj vi ⇐⇒ (vj ⇒ vk ) vi ⇐⇒ (vj ⇐⇒ vk ) vi ⇐⇒ ⊥ vi ⇐⇒ > Démonstration facile en raison des réductions polynomiales de SAT à 3 − CN F SAT et à CN F SAT . . . à partir du moment où on a les définitions ! Proposition 7. S’il existe un algorithme polynomial pour résoudre SAT (ou 3 − SAT ), alors N P = P . Démonstration : là encore hors programme. L’idée est que P ⊂ N P est évident et que d’autre part, SAT étant N P -complet, tout problème N P peut polynomialement se réduire à SAT , donc si SAT était résoluble en temps polynomial, tout problème N P le serait aussi, donc on aurait N P ⊂ P , donc P = N P . On conjecture plutôt P 6= N P mais c’est un problème ouvert depuis qu’il a été posé en 1970. Alors, si φ est satisfaite par une valuation ρ sur a0 , . . . an−1 , on peut étendre ρ en une valuation ρ0 sur a0 , . . . , an−1 , v0 , v1 , . . . en posant, pour tout i ∈ [[0, N [[, ρ0 (vi ) = [[φi ]]ρ et ρ0 satisfait alors simultanément toutes les formules Fi pour i ∈ [[0, N [[ ainsi que vN −1 . Réciproquement, si on peut trouver une valuation ρ0 sur a0 , . . . , an−1 , v0 , v1 ,. . . satisfaisant simultanément toutes les formules Fi pour i ∈ [[0, N [[ ainsi que vN −1 alors en notant ρ la restriction de ρ0 à { a0 , . . . , an−1 }, on a pour tout i ∈ [[0, N [[, [[φi ]]ρ = ρ0 (vi ) et en particulier [[φ]]ρ = ρ0 (vN −1 ) = 1. De plus, les formules Fi sont de taille bornée et comportent chacune au plus 3 littéraux. Donc chacune des Fi peut, en temps constant, être mise sous forme normale conjonctive dont toute clause comporte au plus 3 littéraux. On peut donc transformer chaque Fi en une F N D Fi0 en temps constant (donc au total en O(N ) = O(n)). 2.7 Et alors ? Les problèmes SAT et 3 − CN F SAT sont équivalents au sens où on sait réduire chacun des deux en l’autre, en temps polynomial. Malheureusement, on ne connaît pas d’algorithme polynomial pour résoudre 3 − CN F SAT . 2.8 P et NP On dit qu’un problème est NP-dur, si tout problème NP peut se réduire polynomialement à ce problème. On dit qu’un problème est NP-complet s’il est NP-dur et NP. Théorème 3 (Cook-Levin). Le problème SAT est NP-complet. La démonstration (et même les définitions précises de NP et NP-dur) sont hors de portée du programme. Proposition 6. Les problèmes CN F SAT et 3 − CN F SAT sont NP-complets. 13 14