Exercices SAT

Exercice 1

  1. Se familiariser avec la syntaxe DIMACS des formules CNF.
  2. Tester le solveur Minisat exécutable dans un navigateur sur les formules booléennes de l'exercice 2 cette fiche (les exercices 3, 4 et 5 permettront de tester Minisat sur des formules de plus grande taille).

Exercice 2

  1. Appliquer à la main un algorithme polynomial (cf. Wikipedia ou bien 2SAT (Muli Safra)) pour déterminer la satisfiabilité des formules suivantes :
    1. (x ∨ y) ∧ (x ∨ ¬ z) ∧ (¬ x ∨ y) ∧ (y ∨ z)
    2. (x ∨ y) ∧ (z ∨ ¬ t) ∧ (x ∨ t) ∧ (x ∨ z) ∧ (¬ y ∨ t)
    3. (¬ x ∨ y) ∧ (¬ y ∨ z) ∧ (¬ z ∨ x)
    4. (¬ x ∨ y) ∧ (¬ y ∨ z) ∧ (¬ z ∨ x) ∧ (x ∨ y) ∧ (¬ y ∨ ¬ z)
  2. Ecrire un programme de complexité polynomiale (langage au choix) résolvant 2-SAT.

Exercice 3

Le principe des tiroirs est un test classique pour un solveur propositionnel car le nombre d'étapes pour la résolution propositionnelle est exponentielle en fonction du nombre de chaussettes. Modéliser (voir par exemple ce document, pigeon = chaussette, nid = tiroir) et résoudre via Minisat pour (2,2), (3,2) pigeons/nids. Benchmarker Minisat pour (n,n) et (n+1,n) pigeons/nids avec n variant de 5 à 10 et représenter graphiquement les temps de calcul (en ordonnée) relativement à n (en abcisse).

Exercice 4

Résoudre à l'aide de Minisat le problème du coloriage de cartes.

Exercice 5

Résoudre à l'aide de Minisat le problème des n-reines.