Définition du problème SAT

Le problème de satisfiabilité booléenne (SAT) est un problème fondamental en informatique théorique et en logique.
Il consiste à déterminer si une formule booléenne donnée peut être rendue vraie en attribuant des valeurs de vérité (vrai ou faux) à ses variables.

Formellement :

Instance : Une formule booléenne ( \phi ) en forme normale conjonctive (CNF), c’est-à-dire une conjonction de clauses, chaque clause étant une disjonction de littéraux.

Question : Existe-t-il une affectation des variables telle que ( \phi ) soit vraie ?

Une formule CNF s’écrit comme :

où chaque clause () est une disjonction de littéraux :

et chaque littéral () est soit une variable (), soit sa négation ().

Instance SAT

La question est : existe-t-il une affectation de ( x_1, x_2, x_3 \in {\text{vrai}, \text{faux}} ) qui rend ( \phi ) vraie ?

Self-réductibilité

SAT est self-réductible.

Algorithme avec oracle

SATdec(C) -> oui/non  // oracle O(1)

si !SATdec(C):
    retourner faux

v = []
pour i = 1 à n:
    si SATdec(C[xi=0]):
        C = C[xi=0]
        v[i] = 0
    sinon:
        C = C[xi=1]
        v[i] = 1
retourner v

Complexité : appels à l’oracle.

Le cas particulier : le problème 3-SAT

Le 3-SAT est une version restreinte du problème SAT où chaque clause contient exactement trois littéraux.

Instance : Une formule booléenne en CNF où chaque clause a exactement 3 littéraux. Question : Existe-t-il une affectation des variables qui satisfait la formule ?

Exemple :

Remarques

  • SAT est le premier problème prouvé NP-complet (théorème de Cook-Levin, 1971).
  • 3-SAT est aussi NP-complet, même s’il est plus restreint, ce qui en fait un cas d’étude standard pour la complexité algorithmique et la conception de solveurs SAT.