7. Le vol des biscuits : du récit aux preuves
7.1. Situation, faits et objectif
Nathalie a placé des biscuits dans un placard fermé à clé; ils ont disparu et la porte a été retrouvée forcée. Il faut construire un programme qui trouve les personnes suspectes, en autorisant plusieurs suspects et plusieurs façons de soupçonner la même personne.
| Personnage ou indice | Information utilisée dans le modèle fourni |
|---|---|
| Nathalie | Possède directement les clés |
| Simon | Frère de Nathalie, suit un régime, blessé à la main |
| Gaëtan | Oncle de Nathalie, miettes sur son bureau |
| Kévin | Peu d’argent, possède des canaris |
| Canaris | Animal à nourrir |
| John | Beaucoup d’argent; récit le décrivant aussi grand et mince |
| Isabelle | Aime cuisiner |
| Famille de Nathalie | Possède les clés |
La taille et la minceur de John ainsi que la porte retrouvée forcée appartiennent au récit; le programme fourni n’en fait pas des faits distincts exploités par ses règles. Il contient argent(john,beaucoup), mais aucune règle ne permet d’en déduire un besoin de biscuits. Ne pas inventer une fonction à chaque détail descriptif.
7.2. Les onze hypothèses du récit
Les hypothèses constituent le modèle de l’énigme; ce ne sont pas des vérités générales sur les personnes.
- Pour être suspect du vol, il faut avoir besoin des biscuits et pouvoir y accéder.
- Le besoin peut venir de la gourmandise ou du souhait de donner les biscuits.
- L’accès peut provenir des clés, de l’effraction ou de la corruption d’une personne ayant les clés.
- Une blessure peut être un indice d’effraction par contact avec le bois.
- Une personne ayant besoin des biscuits peut aussi être corrompue, même sans clés.
- Devoir nourrir quelqu’un et manquer d’argent peut motiver le don de biscuits.
- L’embonpoint ou le goût de cuisiner peuvent servir d’indices de gourmandise.
- Des miettes permettent de soupçonner une consommation de biscuits.
- Une personne corrompue est supposée en avoir mangé.
- Posséder un animal implique de devoir le nourrir dans ce modèle.
- Suivre un régime est utilisé comme indice d’embonpoint.
Les termes « indice », « peut » et « probablement » sont essentiels pour comprendre la portée du récit. Le fichier Prolog les transforme en règles déterministes afin de rechercher des suspects. Cette transformation produit des conséquences dans un modèle choisi; elle ne démontre pas la culpabilité d’une personne réelle.
7.3. Organisation des règles du programme
Le fichier volBiscuits.pl [accès au cours requis] est conservé tel que fourni. Les extraits ci-dessous en explicitent l’organisation, avec des noms de variables raccourcis pour la lecture.
Famille et clés. La relation de famille accepte frère ou oncle dans les deux sens :
Code (prolog) · sélectionner pour copier
famille(A,B) :- frere(A,B); frere(B,A); oncle(A,B); oncle(B,A).
possede(P,cles) :- famille(P,nathalie).
Avec les faits de frère et d’oncle, Simon et Gaëtan obtiennent les clés. Nathalie les a par un fait direct. La définition symétrise les deux relations fournies; elle ne calcule ni tous les liens de parenté possibles ni une fermeture transitive.
Soupçon et besoin. Le point d’entrée exige les deux conditions pour la même personne :
Code (prolog) · sélectionner pour copier
voler(S,biscuits) :- besoin(S,biscuits), acces(S,biscuits).
besoin(P,biscuits) :- gourmand(P); donner(P,Autre,biscuits).
gourmand(P) :- embonpoint(P); aime(P,cuisiner).
embonpoint(P) :- regime(P).
donner(D,R,biscuits) :- nourrir(D,R), argent(D,peu).
nourrir(P,A) :- possede(P,A), animal(A).
La virgule représente une conjonction et le point-virgule une alternative. Simon a besoin par la chaîne régime→embonpoint→gourmandise. Isabelle a besoin par son goût de cuisiner. Kévin a besoin parce qu’il possède un animal à nourrir et a peu d’argent. Posséder des clés seul ne crée pas un besoin.
Accès. Le programme admet les clés, l’effraction ou une corruption :
Code (prolog) · sélectionner pour copier
acces(P,biscuits) :-
possede(P,cles);
forcer(P,placard);
soudoyer(P,S), (possede(S,cles); besoin(S,biscuits)).
forcer(P,placard) :- blesse(P,Endroit).
mange(P,biscuits) :- miettes(P,Endroit).
soudoyer(P,S) :- mange(S,biscuits).
La dernière branche exige à la fois la relation soudoyer(P,S) et, pour cette même S, des clés ou un besoin. Les parenthèses regroupent ces deux qualités possibles; les supprimer peut changer la portée des alternatives. La blessure à la main de Simon satisfait la règle d’effraction, qui ne filtre pas spécifiquement le lieu de la blessure. Les miettes du bureau font dériver que Gaëtan a mangé.
7.4. Réponses et multiplicité des preuves
La requête proposée par le fichier est :
Code (prolog) · sélectionner pour copier
?- voler(S,biscuits).
Le commentaire final du programme annonce Simon trois fois, puis Isabelle et Kévin, puis false. Le déroulement statique explique ces réponses :
| Suspect | Preuve du besoin | Preuve de l’accès |
|---|---|---|
| Simon, preuve 1 | Régime → embonpoint → gourmandise | Clés par sa relation de frère avec Nathalie |
| Simon, preuve 2 | Même besoin | Blessure → effraction possible |
| Simon, preuve 3 | Même besoin | Corruption de Gaëtan, qui a mangé et possède les clés |
| Isabelle | Cuisine → gourmandise | Corruption de Gaëtan |
| Kévin | Canaris à nourrir et peu d’argent → don | Corruption de Gaëtan |
L’ensemble des personnes suspectes est {Simon, Isabelle, Kévin}. Les trois occurrences de Simon correspondent à trois preuves de la conjonction besoin/accès, pas à trois personnes et pas à un niveau chiffré de confiance.
Gaëtan a les clés et a mangé, mais aucune règle ne lui donne un besoin de biscuits; il ne satisfait donc pas la conjonction principale. Nathalie n’a pas de besoin dérivé non plus. John n’en a pas avec les faits et règles fournis. L’absence de preuve dans cette base ne constitue pas une démonstration générale d’innocence.
Le false final indique que la recherche n’a plus de preuve supplémentaire à fournir; il n’annule pas les réponses précédentes. L’ordre d’énumération annoncé dépend de l’ordre des clauses et des buts du fichier. La tâche actuelle a contrôlé cette trace par lecture et déroulement statique, sans exécuter le programme.
7.5. Limites instructives du modèle
La règle soudoyer(P,S) :- mange(S,biscuits). ne contraint pas P : aucune richesse, dépense ou rencontre n’est requise. Une fois que Gaëtan satisfait mange, toute personne candidate peut être reliée à lui par ce prédicat. C’est pourquoi Isabelle et Kévin peuvent accéder aux biscuits dans le programme, même sans clés ni blessure. Ajouter spontanément une obligation d’argent pour corrompre modifierait les résultats de la source.
Ce cas est à rapprocher de la correction populaire(X) :- connait(Z,Y) : un argument sans lien dans le corps devient très général. Ici, on décrit et explique le comportement du programme officiel; on ne suppose pas une condition cachée pour rendre le récit plus réaliste.
Plusieurs règles exploitent un indice dans le sens utile à l’enquête : blessure→effraction, miettes→consommation, consommation→corruption possible. Ces directions ne sont pas des équivalences logiques démontrées par le récit. L’énigme les utilise comme hypothèses de soupçon. Les termes décrivant le régime, l’embonpoint ou la gourmandise restent des conventions de ce problème.
Des variables employées une seule fois, comme Autre, Endroit et le premier argument de soudoyer, peuvent provoquer des avertissements d’interpréteur. Un avertissement n’invalide pas automatiquement le programme, mais invite à vérifier si cette absence de contrainte est voulue. Le fichier original est conservé sans correction et sa généralité est explicitée plutôt que masquée.