Académique Documents
Professionnel Documents
Culture Documents
Les opérateurs arithmétiques: addition (+), multiplication (*), soustraction (-), division (/), division entière
(//), modulo (X mod Y), la puissance (^).
Prolog est basé sur une évaluation paresseuse des expressions arithmétiques. Il faut utiliser l’opérateur is
pour forcer l’évaluation numérique (avec l’absence de toute inconnue dans la partie droite du is).
Exemples:
X is 22/5
X=4.4
X is 22//5
X=4
X is 14 mod 3
X=2
II. L’Unification et la résolution
En informatique et en logique, l'unification (=) est un processus algorithmique qui, étant donnés deux
termes, trouve un 3eme terme t tel qu’on puisse passer de t à t1 et à t2 en instanciant certaines variables. t est
appelé unificateur de t1 et t2. Elle rend les deux termes identiques.
1. Substitution
Une substitution est un ensemble {𝑡𝑖 / 𝑥𝑖 } où : 𝑥𝑖 sont des variables et 𝑡𝑖 sont des termes qui peuvent être
des constantes, des variables ou des fonctions. Cela revient à remplacer toutes les occurrences des variables
𝑥𝑖 par 𝑡𝑖 .
Exemples :
{x+3} et {2+y} peuvent être rendus identiques par la substitution {x:=2} et {y:=3}, qui donne quand
on l'applique à chacun de ces termes le terme {2+3}.
2. Unification
Deux termes t1 et t2 sont unifiables s’il existe une substitution S tq : 𝑆. 𝑡1 = 𝑆. 𝑡2
Un ensemble de termes {t1, t2,…, tn} sont unifiables s’il existe une substitution S tq : 𝑆. 𝑡1 = 𝑆. 𝑡2 = ⋯ = 𝑆. 𝑡𝑛
Exemple :
𝑡1 = 𝑓(𝑎, 𝑔(𝑏)), 𝑡2 = 𝑓(𝑥, 𝑦)
T1 et t2 sont unifiables car il existe S={a/X, g(b)/Y} tq : 𝑆. 𝑡1 = 𝑆. 𝑡2
Trouver l’unificateur pour les clauses : p(X,X) et p(5,Y), p(f(X),f(5),X) et p(z,f(Y),Y).
Algorithme d’unification
Soit deux termes t1 et t2, l’algorithme d’unification cherche l’unificateur s’il existe.
S={} ; k=0 ;
Si 𝑆𝑘 . 𝑡1 = 𝑆𝑘 . 𝑡2 alors 𝑀 = 𝑆𝑘 fini avec succès
Calculer 𝐷(𝑆𝑘 . 𝑡1 , 𝑆𝑘 . 𝑡2 ) soit (𝑑1 , 𝑑2 )
Si 𝑑1 est une variable : 𝑆𝑘+1 = {𝑑2 ,/𝑑1 } ∪ 𝑆𝑘 , aller à 2
Si 𝑑2 est une variable : 𝑆𝑘+1 = {𝑑1 ,/𝑑2 } ∪ 𝑆𝑘 , aller à 2
Sinon échec
L’interprète Prolog utilise son algorithme d’unification pour rendre égaux X et Y. Trois cas sont possibles
pour une unification réussie, à savoir :
1. X et Y sont des constantes et elles sont égales ;
2. X ou Y est (sont) une variable libre ; dans ce cas il y a succès et la variable libre est liée au terme
représenté par la seconde variable (si les deux sont des variables libres, elles co-référencent alors sur
le même objet) . (X=Y, X=_G1, Y=_G1, si X=3 alors Y=3) ;
3. X et Y sont des termes composés. Il y a succès si les deux ont le même foncteur, le même nombre
d’arguments et si les arguments (dans l'ordre) s’unifient l’un avec l’autre.
Exemple 1 (unification réussite)
𝑡1 = 𝑓(𝑔(𝑢), 𝑍), 𝑡2 = 𝑓(𝑔(ℎ(𝑇)), 𝑟(𝑎))
𝑆0 = {}
D=(u,h(T)).
𝑆1 = 𝑆0 ∪ {ℎ(𝑇)/𝑢} = {ℎ(𝑇)/𝑢}
D=(Z,r(a))
𝑆2 = 𝑆1 ∪ {𝑟(𝑎)/𝑍} = {ℎ(𝑇)/𝑢, 𝑟(𝑎)/𝑍}
M=𝑆2
On utilise directement l'opérateur "=" pour unifier deux termes. Voici en Prolog l’exécution de quelques unifications :
?- X = 1.
X = 1
?- omar = amina.
No
?- suc(X) = suc(suc(suc(0))).
X = suc(suc(0))
?- p(X,X) = p(1,2).
No
?- p(X,X) = p(1,1).
X = 1
?- p(X,X) = p(1,W).
X = 1
W = 1
?- p(Y,fun(Y)) = p(toto,Z).
Y = toto
Z = fun(toto)
?- p(X,X,2) = p(1,W,W).
No
Pour s'assurer que deux termes ne sont pas unifiables, on utilise l'opérateur \= :
?- p(X,X,2) \= p(1,W,W).
Yes
Remarques :
Deux termes ne sont pas toujours unifiables. Exemple : f(a), f(b)
Deux termes peuvent avoir une infinité d’unifications mais il existe un unificateur le plus général (UPG)
c’est celui donné par l’algorithme (celui qui utilise toutes les substitutions).
L’unification de X par f(X) donne une boucle infinie.
3. Algorithme de résolution
Essentiellement, un programme Prolog est composé de règles, qui sont des clauses déclarant un fait qui
dépend d'autres faits. Ces règles ont la forme suivante :
Dr. Ouarda ZEDADRA (zedadra.ouarda@univ-guelma.dz) 2/4
3SI Guide pratique pour démarrer avec Prolog IA
𝐻 ∶ − 𝐵1, 𝐵2, … , 𝐵𝑛
𝐻 𝑒𝑡 𝐵1, 𝐵2, … , 𝐵𝑛 Constituent la tête et le corps de la règle, respectivement. La signification d'une règle est
la suivante : pour résoudre un but H, il faut résoudre la conjonction de buts𝐵1, 𝐵2, … , 𝐵𝑛. Un fait peut être
considéré comme une clause sans corps.
Pour satisfaire une requête, l'interpréteur Prolog utilise l'algorithme de résolution, qui utilise une pile,
appelée résolvante, pour contenir tous les buts qu'il reste à résoudre (notez que dans cet algorithme qu'un
fait est une clause dont le corps est vide) :
Il est important de noter que dans ce processus, le système mémorise les variables instanciées. Quand une
variable est instanciée dans une règle, soit dans la tête, soit dans le corps, la même instanciation s'applique
à toutes les occurrences de la variable dans la règle. Quand l'interpréteur fait un retour arrière à un point de
choix, il élimine le résultat de toutes les unifications qui ont été réalisées entre le moment où le point de choix
a été mémorisé et le moment de l'échec.
4. Prolog et la résolution
1. Comment l’interpréteur fait-il pour répondre aux questions ?
Il cherche à prouver que la question posée se déduit logiquement des connaissances qu’il connait.
Pour cela, il construit un arbre de recherche. Chaque branche de l’arbre déroule une étape de la
tentative de preuves.
Si au moins une branche conduit à la preuve complète de la question, l’interpréteur répond par oui.
Si toutes les branches conduisent à des échecs l’interpréteur répond par non.
2. Unification de prédicat :
La construction de l’arbre de recherche s’appuie sur l’unification de terme. Unifier deux termes
consiste à déterminer une substitution qui rend ces 2 termes égaux.
Exemple : Soit les deux prédicats père (omar, X) et père(Y, ali) et une substitution qui permet de les
unifier : {ali/X, omar/Y}. Quand on applique cette substitution à père(omar, X) on obtient le prédicat
père(omar, ali) et à père(Y, ali) on obtient aussi le prédicat(omar,ali).
3. Arbre de recherche :
Soit p() la question à laquelle l’interpréteur doit répondre :
Unification de la question avec toutes les clauses du programme qui ont le même symbole de
prédicat, si aucune unification n’est possible l’interpréteur répond non à la question. Sinon,
il y a autant de branches que d’unification possible.
La branche la plus à gauche est développé la première. Si la clause du programme qui a été
unifiée avec la question est un fait alors l’interpréteur retourne la substitution qu’il a
appliquée. Si la clause est une règle alors l’interpréteur a pour nouveaux buts les prédicats
unifiés du corps de la clause.
Exemple : soit la programme :
dog(fido)
dog(rover)
dog(henry)
cat(felix)
Dr. Ouarda ZEDADRA (zedadra.ouarda@univ-guelma.dz) 3/4
3SI Guide pratique pour démarrer avec Prolog IA
cat(jane)
animal (X) :- dog(X)
animal(X)
dog(X)
Arbre de résolution
Enrichir ce programme par les connaissances qui indiquent que le lion, le tigre, la vache sont des
animaux et que le lion et le tigre sont des carnivores.
dog(fido)
dog(rover)
dog(henry)
cat(felix)
cat(jane)
animal (X):- dog(X)
animal(X):- lion(X).
animal(X):- tigre(X).
animal(X):- vache(X).
carnivore(X) :- lion(X).
carnivore(X) :- tigre(X).