1 Mise en forme normale 2 Modélisation

publicité
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
Téléchargement