Diaporama n°24¶

Logique - Applications¶

Exemple d'application pour un solver SAT¶

image.png

Pour chaque case inconnue, on définit une variable booléenne

V ssi la case est minée

image.png

Quelles sont les contraintes du plateau ?¶

Pour chaque case de la bordure, on a une contrainte sur les variables

Exemple : image.png

$(x_0 \land \neg x_1) \lor (x_1 \land \neg x_0)$¶

Le plateau correspond une formule qui doit être satisfiable

  • c'est la conjonction des formules exprimant les contraintes pour chaque case
  • assez facile à exprimer à l'aide d'un algorithme
  • on obtient ...

let bigformula = Et (Ou (Et (Var "X1" , Non(Var "X0")) , Et (Var "X0" , Non(Var "X1"))) , Et (Ou (Et (Et (Var "X3" , Var "X2") , Non(Var "X1")) , Ou (Et (Et (Var "X3" , Var "X1") , Non(Var "X2")) , Et (Et (Var "X2" , Var "X1") , Non(Var "X3")))) , Et (Ou (Ou (Et (Var "X4" , Et (Non(Var "X3") , Non(Var "X2"))) , Et (Var "X3" , Et (Non(Var "X4") , Non(Var "X2")))) , Et (Var "X2" , Et (Non(Var "X4") , Non(Var "X3")))) , Et (Ou (Ou (Ou (Et (Et (Var "X7" , Var "X6") , Et (Non(Var "X5") , Et (Non(Var "X4") , Non(Var "X3")))) , Ou (Et (Et (Var "X7" , Var "X5") , Et (Non(Var "X6") , Et (Non(Var "X4") , Non(Var "X3")))) , Et (Et (Var "X6" , Var "X5") , Et (Non(Var "X7") , Et (Non(Var "X4") , Non(Var "X3")))))) , Ou (Ou (Et (Et (Var "X7" , Var "X4") , Et (Non(Var "X6") , Et (Non(Var "X5") , Non(Var "X3")))) , Et (Et (Var "X6" , Var "X4") , Et (Non(Var "X7") , Et (Non(Var "X5") , Non(Var "X3"))))) , Et (Et (Var "X5" , Var "X4") , Et (Non(Var "X7") , Et (Non(Var "X6") , Non(Var "X3")))))) , Ou (Ou (Ou (Et (Et (Var "X7" , Var "X3") , Et (Non(Var "X6") , Et (Non(Var "X5") , Non(Var "X4")))) , Et (Et (Var "X6" , Var "X3") , Et (Non(Var "X7") , Et (Non(Var "X5") , Non(Var "X4"))))) , Et (Et (Var "X5" , Var "X3") , Et (Non(Var "X7") , Et (Non(Var "X6") , Non(Var "X4"))))) , Et (Et (Var "X4" , Var "X3") , Et (Non(Var "X7") , Et (Non(Var "X6") , Non(Var "X5")))))) , Et (Ou (Ou (Et (Var "X8" , Et (Non(Var "X7") , Non(Var "X6"))) , Et (Var "X7" , Et (Non(Var "X8") , Non(Var "X6")))) , Et (Var "X6" , Et (Non(Var "X8") , Non(Var "X7")))) , Et (Ou (Ou (Et (Var "X9" , Et (Non(Var "X8") , Non(Var "X7"))) , Et (Var "X8" , Et (Non(Var "X9") , Non(Var "X7")))) , Et (Var "X7" , Et (Non(Var "X9") , Non(Var "X8")))) , Et (Ou (Ou (Et (Var "X13" , Et (Non(Var "X12") , Non(Var "X11"))) , Et (Var "X12" , Et (Non(Var "X13") , Non(Var "X11")))) , Et (Var "X11" , Et (Non(Var "X13") , Non(Var "X12")))) , Et (Ou (Et (Et (Var "X14" , Var "X13") , Non(Var "X12")) , Ou (Et (Et (Var "X14" , Var "X12") , Non(Var "X13")) , Et (Et (Var "X13" , Var "X12") , Non(Var "X14")))) , Et (Ou (Et (Et (Var "X15" , Var "X14") , Non(Var "X13")) , Ou (Et (Et (Var "X15" , Var "X13") , Non(Var "X14")) , Et (Et (Var "X14" , Var "X13") , Non(Var "X15")))) , Ou (Et (Var "X15" , Non(Var "X14")) , Et (Var "X14" , Non(Var "X15"))))))))))));

On cherche les modèles de la formule (par exemple avec la variante de l'algo de Quine)

modeles bigformula;

image.png

Conclusion ?

Conclusion¶

dans tous les modèles, on a :

X15:F-X14:T-X13:T-X12:F-X11:F-X4:F-X1:T-X0:F

image.png