TD 2 : Modélisation en Logique Propositionelle Master 1 INFO TD 2 Quelques Informations – page du cours sur Eprel : http://eprel.u-pec.fr/eprel/ 1 Mise en forme normale Pour mettre une formule de la logique propositionnelle en forme normale conjonctive (FNC), on applique les transformations suivantes : 1. éliminer les → et ↔ : (φ → ψ) ≡ (¬φ ∨ ψ) (φ ↔ ψ) ≡ (¬φ ∨ ψ) ∧ (¬ψ ∨ φ) 2. faire entrer les négations le plus à l’intérieur possible : ¬(φ ∨ ψ) ≡ (¬φ ∧ ¬ψ) ¬(φ ∧ ψ) ≡ (¬φ ∨ ¬ψ) 3. utiliser la distributivité de ∧ et ∨ : (φ ∧ (ψ ∨ χ)) ≡ (φ ∧ ψ) ∨ (φ ∧ χ) (φ ∨ (ψ ∧ χ)) ≡ (φ ∨ ψ) ∧ (φ ∨ χ) Exercice 1 Mettre les formules suivantes en forme normale conjonctive : 1. (p ∧ q ∧ r) → (q ∧ s) 2. q ↔ (p → r) 3. (p → (q ∧ r)) → ((p → q) ∧ (p → r)) 2 Modélisation Exercice 2 On veut attribuer des fréquences d’émission à cinq émetteurs radio. Certains émetteurs étant proches, on ne peut pas leur assigner la même fréquence d’émission à cause des problèmes d’interférences. On dispose exactement de trois fréquences : 95, 100, et 105 méga-hertz, et les émetteurs sont numérotés de 1 à 5. Entre les paires d’émetteurs suivantes, on ne peut pas attribuer les mêmes fréquences : {(1, 2), (2, 3), (3, 4), (4, 5), (5, 1), (1, 4)} 1 Master 1 INFO TD 2 : Modélisation en Logique Propositionelle De plus, entre certains émetteurs, on veut que les fréquences soient très différentes (au moins 7Mhz de différence) : {(1, 4), (4, 3)} Peut-on trouver une assignation de fréquences qui respecte toutes ces contraintes ? Modéliser ce problème en logique propositionnelle. Plus précisément, écrire une formule φ de logique propositionnelle (en forme normale conjonctive), telle que φ est satisfaisable si et seulement si il existe une assignation de fréquences qui respecte les contraintes. Exercice 3 Sudoku 3D On veut placer dans un cube de taille 9x9x9 les nombres de 1 à 9 avec la contrainte que toute tranche d’épaisseur 1 (c’est-à-dire tout tableau 9x9 qu’on peut obtenir en fixant une des coordonnées) satisfait les contraintes suivantes : 1. toute ligne de cette tranche contient les nombres de 1 à 9 et ils n’apparaissent qu’une seule fois ; 2. toute colonne de cette tranche contient les nombres de 1 à 9 et ils n’apparaissent qu’une seul fois. Modélisez ce problème en logique propositionnelle et donnez une formule en forme normale conjonctive telle que toute interprétation satisfait la formule si et seulement si elle représente une solution du problème. En utilisant la bibliothèque C++ MiniSAT, écrire un programme qui génère la formule précédente et teste si elle est satisfaisable. Rappel : la bibliothèque MiniSAT définit une classe Solver qui contient les méthodes suivantes :newVar(), addUnit(Lit), addBinary(Lit,Lit), addClause(<vec>Lit), solve(),okay() La classe Lit permet de définir des littéraux : Lit(int) définit le littéral positif représenté par l’entier pris en argument, alors que ∼Lit(int) définit un littéral négatif. Un vecteur de littéraux v est de type <vec>Lit et se manipule avec les méthodes clear(), push(Lit). Supposons maintenant que certains nombres sont déjà placés dans la grille. Modifiez votre formule pour qu’elle prenne en compte ces nouvelles contraintes. On pourra supposer que le placement des nombres est donné par une fonction F : {1, . . . , 9}3 → {1, . . . , 9} ∪ {?} telle que pour tout (i, j, k) ∈ {1, . . . , 9}3 , F (i, j, k) =? si la case de position (i, j, k) est vide, et F (i, j, k) = l ∈ {1, . . . , 9} si la case de position (i, j, k) contient la valeur l. 2