Station MinuitExplorer, comprendre, pratiquer

RAISONNEMENT — Raisonner et résoudreAutomne 2026

Semaine 7 — Logique et raisonnement : récursion et listes Prolog

3. Unification, arithmétique et comparaison

LECTURE 05 / 124 repèresCouverture déclarée complète

3. Unification, arithmétique et comparaison

3.1 Unifier des structures

Unifier deux termes consiste à trouver une substitution qui les rend identiques. Une variable déjà liée doit rester compatible avec sa liaison; = ne la réaffecte pas. Une liaison d’une même variable se propage à toutes ses occurrences dans le but courant.

Code (prolog) · sélectionner pour copier

?- homme(X) = homme(socrate).
X = socrate.

?- a(X,p(X),q(Y)) = a(2,Z,q(3)).
X = 2, Z = p(2), Y = 3.

?- p(X) = p(a,b).
false.

Dans le deuxième exemple, X=2 impose aussi le 2 de p(2). Le troisième échoue car p/1 et p/2 sont des prédicats distincts. Il faut vérifier la structure entière et les contraintes répétées, pas seulement faire correspondre des positions isolées.

Dans les exemples imprimés, ?- marque une requête. Dans le champ Swish, cette invite est déjà affichée : on saisit le but avec son point final, comme l’a confirmé l’enseignante sur le forum. Le point fait partie de la syntaxe. Pour les exercices d’unification, la vidéo conseille de prévoir le résultat sur papier puis de le tester dans Swish.

3.2 Évaluer avec is/2

Les quatre requêtes suivantes sont indépendantes, avec des variables fraîches :

Code (prolog) · sélectionner pour copier

?- A = p(a,b).         % A est lié au terme p(a,b)
?- B = 1+1.            % B est lié au terme 1+1
?- A = a+b.            % A est lié au terme a+b
?- B is 1+1.           % B = 2

L’unification ne déclenche aucun calcul de 1+1 ni de a+b. is/2 évalue l’expression de droite puis unifie son résultat à gauche. La notation is(B,1+1) est une autre écriture du même prédicat que B is 1+1.

Code (prolog) · sélectionner pour copier

?- A = 2, B is 5+8*A.
A = 2, B = 21.

?- B is 2+A, A = 2.
% Erreur d’instanciation : A est encore libre au moment du calcul.

Les variables n’ont pas de valeur numérique par défaut. Une erreur d’évaluation se distingue d’une preuve qui échoue et renvoie false. Cette dépendance explique l’ordre des buts de longueur/2 et de nb_occ/3 : obtenir le compte de la queue avant de lui ajouter 1.

3.3 Trois familles de comparaison

Tableau 1 — Famille · Positif · Négatif · Ce qui est testé
Famille Positif Négatif Ce qui est testé
Unification = \= Les termes peuvent-ils être rendus identiques? Le positif peut lier des variables.
Identité == \== Les termes sont-ils déjà identiques, sans nouvelle liaison?
Égalité arithmétique =:= =\= Les valeurs calculées sont-elles égales? Les expressions doivent être évaluables.

Tous les cas du tableau du diaporama sont repris ci-dessous. Chaque cellule est une requête indépendante; les variables A et B y sont fraîches, et distinctes quand leurs noms diffèrent.

Tableau 2 — Deux termes comparés · `=` · `\=` · `==` · `\==` · `=:=` · `=\=`
Deux termes comparés = \= == \== =:= =\=
1 et 1 vrai faux vrai faux vrai faux
1 et 2 faux vrai faux vrai faux vrai
1+1 et 2 faux vrai faux vrai vrai faux
a et a vrai faux vrai faux erreur erreur
a et b faux vrai faux vrai erreur erreur
A et A, même variable libre vrai faux vrai faux erreur erreur
A et B, variables libres distinctes liaison A=B faux faux vrai erreur erreur

1+1 est une structure syntaxique différente de 2, tout en ayant la même valeur arithmétique. Deux variables libres peuvent s’unifier sans être identiques avant cette opération. \= teste la non-unifiabilité actuelle : X \= a échoue si X est libre, car l’unification avec a reste possible; ce test ne dépose pas une contrainte de différence pour plus tard.

Les atomes a et b ne sont pas des expressions arithmétiques, et une variable libre n’est pas encore une valeur calculable. L’enseignante insiste surtout sur l’unification et relativise le poids de certaines confusions d’opérateurs dans la correction, sans barème chiffré. La vidéo n’exige pas d’utiliser tous ces opérateurs; le tableau sert à comprendre leurs différences de comportement.

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 thème. 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.