TD 2 Arborescence et satisabilité Option Info MP
Arborescence et satisabilité TD 2
On dénit le type expression pour représenter des expressions logiques contenant des constantes, des variables logiques et des opérateurs logiques : Et, Ou, Non,⇒ , ⇔, Xor et Nor.
type constante = Vrai | Faux;;
type expression =
| Const of constante
| Var of string
| Et of expression * expression
| Ou of expression * expression
| Non of expression
| Implique of expression * expression
| Equiv of expression * expression
| Xor of expression * expression (* le ou exclusif *)
;;
On peut ainsi considérer l'expression :
let expr1 = Implique(Var "a",Equiv(Const Vrai,Var "b"));;
Exercice 1 : Écrire une fonction transforme qui transforme toute expression du type précé- dent en une expression ne contenant que les opérateurs logiques : Et, Ou et Non.
transforme : expression -> expression
Exercice 2 : Écrire une fonction simplifiequi simplie une expression de contenant comme opérateurs que Et, Ou et Non.
simplifie : expression -> expression
Exercice 3 : Écrire la fonction liste_varqui prend en argument une expression, et renvoie la liste des variables dans l'expression, sans répétition.
liste_var : expression -> string list
Exercice 4 : Ecrire la fonction eval_affect qui prend en argument une expression et une aectation, qui est une liste de couples variable, valeur. La fonction renvoie alors la valeur associée à cette aectation.
eval_affect : expression -> (string * bool) list -> bool Exemple :
eval_affect (transforme expr1) [("a" , true) ; ("b" , false)];;
- : bool = false Exercice 5 :
1. Écrire la fonction distribue qui prend en argument un élément et une liste de liste et distribue l'élément à toutes les listes.
distribue : 'a -> 'a list list -> 'a list list
sebjaumaths.free.fr page 1 Lycée St Exupéry
TD 2 Arborescence et satisabilité Option Info MP
Exemple :
distribue 12 [ [1;5;6];[3;1] ; []];;
- : int list list = [[12; 1; 5; 6]; [12; 3; 1]; [12]]
2. Écrire la fonctionaffectation_listequi prend en argument une liste et renvoie la liste des couples correspondants aux aectations.
affectation_liste : 'a list -> ('a * bool) list list Exemple :
affectation_liste ["a" ; "b" ];;
- : (string * bool) list list =
[[("a", true); ("b", true)]; [("a", true); ("b", false)];
[("a", false); ("b", true)]; [("a", false); ("b", false)]]
3. En déduire la fonction affectation qui prend en argument une expression logique, et renvoie la liste des aectations pour les variables de l'expression.
affectation : expression -> (string * bool) list list Exemple :
affectation expr1;;
- : (string * bool) list list =
[[("a", true); ("b", true)]; [("a", true); ("b", false)];
[("a", false); ("b", true)]; [("a", false); ("b", false)]]
Exercice 6 : Écrire la fonction est_une_tautologie qui en argument une expression lo- gique, et renvoie le booléen correspondant au fait que l'expression est une tautologie.
est_une_tautologie : expression -> bool
Exemple : ((r ⇒ s)∧(s ⇒ t)) ⇒ (r ⇒ t) est une tautologie (principe de transitivité de l'implication).
tauto : expression =
Implique (Et (Implique (Var "r", Var "s"), Implique (Var "s", Var "t")), Implique (Var "r", Var "t"))
est_une_tautologie tauto ;;
- : bool = true
Exercice 7 : Écrire la fonction liste_satisfiablequi en argument une expression logique, et renvoie la liste des aections pour lesquelles l'expression est satisfaite.
liste_satisfiable : expression -> (string * bool) list list
Exercice 8 : Trois étudiants déjeunent ensemble à midi : Amine, Bertrand, Claire. Les habi- tudes font que :
si Amine prend un dessert, Bertrand aussi ;
soit Bertrand, soit Claire prennent un dessert, mais pas les deux ;
Amine ou Claire prend un dessert ;
si Claire prend un dessert, Amine aussi.
Trouve la combinaison satisfaisant à la problématique.
sebjaumaths.free.fr page 2 Lycée St Exupéry