2.2.3 Non-déterminisme
On s’est cantonné jusqu’ici à un modèle de calcul où les algorithmes sont détermi-
nistes.
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 non-
dé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 nen temps polynomial en n:
1. Faire la liste des variables v0,. . .,vk−1de φ;
2. Initialiser un tableau de kbooléens t;
3. Pour k∈[[0, k[[, choisir un booléen bet affecter bàt[k].
4.
Calculer la valeur vérité de
φ
pour l’interprétation
vi7→ t[i]
. Si elle vaut vrai,
accepter.
La satisfiabilité est donc vérifiable en temps polynomial par une machine non-
déterministe. On note
NP
l’ensemble des problèmes solubles en temps polynomial
non-déterministe.
SAT ∈N P
On peut montrer que
NP
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∈[[0,p[[
φi
Par convention, la disjonction de 0formules 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
Wi∈[[0,n[[ φi
de
n
formules, avec la convention que cette
conjonction est >si p= 0.
Définition 8
(Forme normale conjonctive/disjonctive)
.
On appelle clause toute disjonc-
tion
Vi∈[[0,p[[ li
de littéraux. La formule
⊥
, disjonction de
0
littéraux est appelée clause
vide.
On appelle monôme toute conjonction
Wi∈[[0,p[[ li
de littéraux. La formule
>
, disjonction
de 0littéraux est appelée monôme vide.
On dit qu’une formule φest en forme normale conjonctive s’il s’agit d’une conjonction
de disjonction de littéraux, c’est-à-dire d’une conjonction
Vi∈[[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 quadra-
tique) :
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