Station MinuitPortail personnel de révision

IFT-2003 — Intelligence artificielle IAutomne 2026

Semaine 6 — Logique et raisonnement (2/3)

8. Exercices Prolog, réponses et démarches

LECTURE 09 / 136 repèresSynthèse avec omissions acceptées

8. Exercices Prolog, réponses et démarches

8.1 Les cinq unifications

= teste l’unification de deux termes. Il faut comparer les structures et appliquer les substitutions partout où la même variable apparaît.

Tableau 1 — Requête · Résultat · Justification
Requête Résultat Justification
a(X,X) = a(p(12,abc),p(Y,Z)) X=p(12,abc), Y=12, Z=abc Le premier argument fixe X; le second doit être la même structure
f(a,Z) = f(X,g(h(y))) X=a, Z=g(h(y)) Même f/2; unification de chaque argument
f(a,Z) = f(b,g(h(y))) false a et b sont deux constantes différentes
f(X,p(A,B)) = f(a,p(1,2,3)) false p/2 et p/3 sont des structures différentes
R = f(X,g(h(y))) R=f(X,g(h(y))) R reçoit une structure; X reste libre

Dans g(h(y)), y est un atome minuscule. Il ne reçoit pas une substitution comme une variable Y. L’échec sur p/2 contre p/3 demeure un échec même si l’unification de X avec a était possible dans l’autre argument.

8.2 Jardin communautaire : relier les faits par N

Les prédicats sont parcelle(N,P) pour la personne propriétaire, surface(N,S) pour les m² et culture(N,C) pour la culture. Chaque parcelle contient une seule culture. Les données sont :

Code (prolog) · sélectionner pour copier

parcelle(1,guy).
parcelle(2,roland).
parcelle(3,renee).
parcelle(4,renee).
parcelle(5,paule).
parcelle(6,roland).

surface(1,5).
surface(2,8).
surface(3,10).
surface(4,5).
surface(5,10).
surface(6,12).

culture(1,tomates).
culture(2,carottes).
culture(3,carottes).
culture(4,laitues).
culture(5,haricots).
culture(6,pommes_de_terre).

Le nom de Renée est normalisé en renee dans ce code. Les faits portent sur les mêmes six parcelles; la variable N lie les conditions d’une question.

Tableau 2 — Question · Requête · Réponse
Question Requête Réponse
Y a-t-il des laitues? culture(N,laitues). N=4, donc succès
Quels légumes Roland cultive-t-il? parcelle(N,roland),culture(N,L). N=2/L=carottes; N=6/L=pommes_de_terre
Quelle est la surface de Paule? parcelle(N,paule),surface(N,S). N=5, S=10
Quelle surface Renée utilise-t-elle pour les carottes? parcelle(N,renee),surface(N,S),culture(N,carottes). N=3, S=10
Guy cultive-t-il des carottes sur 10 m²? parcelle(N,guy),culture(N,carottes),surface(N,10). false; sa parcelle 1 contient des tomates et fait 5 m²

Le corrigé écrit culture(C,laitues) pour la première question : C y est un numéro de parcelle malgré son nom. Dans les questions à plusieurs conditions, employer des variables de parcelle indépendantes permettrait de mélanger la personne d’une parcelle, la culture d’une autre et la surface d’une troisième. N doit donc rester commun.

8.3 Tracer a(R,T)

Le programme fourni comporte neuf clauses :

Code (prolog) · sélectionner pour copier

a(X,Y) :- b(X), c(X,X), d(Y).  % 1
b(X) :- f(X).                % 2
c(1,1).                      % 3
c(3,3).                      % 4
c(5,5).                      % 5
d(2).                        % 6
e(1).                        % 7
e(2).                        % 8
f(3).                        % 9

La trace de a(R,T) est :

Tableau 3 — Étape · Buts restants · Clause et substitution
Étape Buts restants Clause et substitution
0 a(R,T) Requête
1 b(R),c(R,R),d(T) Règle 1, X↦R et Y↦T
2 f(R),c(R,R),d(T) Règle 2, variable locale liée à R
3 c(3,3),d(T) Fait 9, R↦3; substitution propagée
4 d(T) Fait 4, c(3,3)
5 Aucun but Fait 6, T↦2

Réponse : R=3, T=2. Une fois R lié à 3, c(1,1) et c(5,5) ne conviennent pas. Les deux faits e ne sont sollicités par aucun sous-but. Le résultat doit être expliqué par les règles et substitutions, et pas seulement recopié de l’interpréteur.

8.4 Généalogie : orientation parent→enfant

Cet exercice impose parent(X,Y) : X est parent de Y. Utiliser cette base séparément de celle de §6.5.

Tableau 4 — Enfant ou enfants · Parents
Enfant ou enfants Parents
robert pamela, thomas
elizabeth pierre, marie
anne, patricia robert, elizabeth
julie, nathalie, luc anne, jimmy
jean julie, sylvain
sylvie luc, rachel
marc, kevin patricia, martin
tom sonia, kevin

Les 24 faits du corrigé sont :

Code (prolog) · sélectionner pour copier

parent(pamela,robert).
parent(thomas,robert).
parent(pierre,elizabeth).
parent(marie,elizabeth).
parent(robert,anne).
parent(elizabeth,anne).
parent(robert,patricia).
parent(elizabeth,patricia).
parent(anne,julie).
parent(jimmy,julie).
parent(anne,nathalie).
parent(jimmy,nathalie).
parent(anne,luc).
parent(jimmy,luc).
parent(julie,jean).
parent(sylvain,jean).
parent(luc,sylvie).
parent(rachel,sylvie).
parent(patricia,marc).
parent(martin,marc).
parent(patricia,kevin).
parent(martin,kevin).
parent(sonia,tom).
parent(kevin,tom).

Les cinq questions deviennent :

Tableau 5 — Question · Requête · Résultat dans la base
Question Requête Résultat dans la base
Marie est-elle la mère d’Élizabeth? parent(marie,elizabeth). Succès pour le lien parental
Nathalie a-t-elle des enfants? parent(nathalie,X). Aucun enfant représenté, donc échec
Qui sont les parents de Patricia? parent(X,patricia). X=robert; X=elizabeth
Martin est-il grand-père? parent(martin,X),parent(X,Y). Succès via X=kevin, Y=tom
Sylvie est-elle arrière-petite-fille de Robert? parent(robert,X),parent(X,Y),parent(Y,sylvie). Succès via X=anne, Y=luc

Chaque variable intermédiaire relie les générations. La dernière question suit Robert→Anne→Luc→Sylvie, soit trois relations parentales.

Le prédicat parent/2 ne code pas le sexe. La requête officielle sur Marie établit le lien parental; « mère », « grand-père » et « petite-fille » reposent sur le contexte de l’arbre, pas sur une propriété sexuée représentée dans le programme. L’échec pour Nathalie signifie qu’aucun enfant n’est décrit dans cette base, sans affirmer une vérité universelle sur le monde réel.

8.5 Les quatre relations demandées

Les conditions du corrigé sont conservées, avec des noms de prédicats normalisés :

Code (prolog) · sélectionner pour copier

soeur_frere(X,Y) :-
    parent(P,X), parent(P,Y), not(X=Y).

tante_oncle(X,Y) :-
    parent(GP,X), parent(GP,P1), not(P1=X), parent(P1,Y).

petit_enfant(X,Y) :-
    parent(P,X), parent(Y,P).

cousin_cousine(X,Y) :-
    parent(GP,P1), parent(GP,P2), not(P1=P2),
    parent(P1,X), parent(P2,Y).

Fratrie. X et Y partagent un parent P et sont distincts. Un parent commun suffit, donc la relation inclut les demi-frères et demi-sœurs. Deux parents communs peuvent encore produire deux preuves.

Tante/oncle. GP est parent de X et de P1 : X et P1 sont frère/sœur. P1 est parent de Y, donc X est tante/oncle de Y. not(P1=X) empêche de choisir X comme son propre frère/sœur et de transformer la règle en simple parentalité.

Petit-enfant. P est parent de X et Y est parent de P. X est donc petit-enfant de Y. L’orientation des arguments est ici celle du nom petit_enfant, conformément à l’énoncé.

Cousin/cousine. GP est parent de P1 et P2, qui sont distincts. P1 est parent de X et P2 de Y; X et Y descendent ainsi de deux personnes de la même fratrie. Des parents ou grands-parents communs multiples peuvent créer plusieurs preuves de la même réponse.

Les tests not(...) sont placés après les relations qui instancient leurs arguments. Par exemple, not(X=Y) appliqué immédiatement à deux variables libres échoue, car X=Y pourrait réussir. Il ne remplit alors pas le rôle attendu d’une différence entre deux personnes choisies.

L’exercice demande de vérifier ces relations en posant des questions et en les confrontant à l’arbre. Pour la fratrie et le cousinage, les deux orientations doivent retrouver les relations attendues; pour une relation orientée comme petit-enfant, inverser les arguments change la question.

Une substitution agit dans toutes les occurrencesUnifier lien(X,f(X)) avec lien(a,Y). Comparer le premier argument impose X=a; le second devient f(a)=Y. Unificateur le plus général {X↦a,Y↦f(a)}. Les deux liens issus de X indiquent la même substitution dans les deux occurrences; la répétition ne crée pas deux variables différentes.lien(X, f(X))lien(a, Y)Premier argument : X = aSecond : f(a) = Yθ = { X ↦ a, Y ↦ f(a) }
Une substitution agit dans toutes les occurrences

Unifier lien(X,f(X)) avec lien(a,Y). Comparer le premier argument impose X=a; le second devient f(a)=Y. Unificateur le plus général {X↦a,Y↦f(a)}. Les deux liens issus de X indiquent la même substitution dans les deux occurrences; la répétition ne crée pas deux variables différentes.

Source : Schéma original du portail, données autonomes; consolidation du 16 octobre 2026. · Maître S06 : 8.1 Les cinq unifications

Retour au sommaire de l’unitéHaut de page
Récupérer manuellement les données locales

Copier séparément les données ci-dessous dans des fichiers texte avant de fermer la page ou de modifier le stockage. Une valeur illisible ou incompatible reste en place. Aucun effacement ni rétablissement écrasant n’est effectué automatiquement. L’export/import JSON est disponible sur la page Progression du cours. Cette récupération séparée reste utile pour une valeur brute ou un conflit.

Clé de ce cours : . Format v1 porté par cette clé; dates UTC et identifiants durables.

Si l’accès est refusé, la valeur persistée peut rester inaccessible. Réautoriser le stockage dans le navigateur puis rouvrir ce cours permet de la relire. Une réinitialisation exige une décision explicite après récupération; aucune commande de suppression n’est proposée ici. Les données restent sur cette origine et cet appareil, sans transfert automatique.