Trouver un modèle
Exercice · OCaml (option informatique), chapitre 17 — Logique propositionnelle
Énoncé
Écrire trouve_modele f : bool array option qui renvoie une valuation satisfaisant f (Some v), ou None si f est insatisfiable.
Corrigé
let trouve_modele f =
let n = nb_variables f in
let v = Array.make n false in
let rec essaie i =
if i = n then (if evalue v f then Some (Array.copy v) else None)
else begin
v.(i) <- false;
match essaie (i + 1) with
| Some m -> Some m
| None -> v.(i) <- true; essaie (i + 1)
end
in
essaie 0
C'est satisfiable qui, au lieu de renvoyer true, rapporte la valuation trouvée — d'où le Array.copy v (chapitre 5) pour figer une copie indépendante de v (qui, mutable, continue d'évoluer). C'est le squelette d'un solveur \textsc{SAT} : explorer, et reconstruire la solution le long des choix réussis (chapitre 11).
Les autres exercices de ce chapitre Le cours du chapitre
Un blocage sur cet exercice ? Le tuteur d'Adloun guide par questions, sans donner la réponse.