Inteligence Artificiel
Inteligence Artificiel
Inteligence Artificiel
préparé par le
Dr. Um Laurence.
Toutes les réferences pour la préparation de ce document peuvent être retrouvées sur:
https://hal.archives-ouvertes.fr/hal-00874279:
www.liafa.jussieu.fr/~haberm/cours/ia/;
https://elearning.univ-bejaia.dz/;
www.iro.umontreal.ca/aimeur;
www.info.univ-angers.fr/pub/richer
Table des matières
Introduction générale:......................................................................................................................2
Chapitre 1 : LA LOGIQUE DES PROPOSITIONS..................................................................................3
I.1 Définition......................................................................................................................................4
I.2 La logique propositionnelle.........................................................................................................4
I.2.1 La syntaxe du langage propositionnel.................................................................................4
I.2.2 Aspect sémantique de la logique des propositions.............................................................5
I.2.3 Modeles, cohérence, validité..............................................................................................7
I.2.4 Les règles ou schémas de déduction................................................................................11
1.2.4.1 Règle de détachement (ou Modus Ponens).............................................................11
1.2.4.2 Règle de substitution................................................................................................11
1.2.4.3 Les règles dérivées...................................................................................................12
1.2.4.4) Regles d'inferences sur les clauses de Horn............................................................15
Chapitre 2: LA LOGIQUE DES PREDICATS......................................................................................16
II.1 Définitions...........................................................................................................................17
II.1.1 Expressions..................................................................................................................18
II.1.2 Priorité des connecteurs.............................................................................................19
II.1.3 Champ d’un quantificateur.........................................................................................19
II.1.4 Variable libre et variable liée.......................................................................................20
II.2 Aspect sémantique.............................................................................................................20
II.3 Formes normales.................................................................................................................21
II.3.1 Forme normale Prenexe...............................................................................................21
II.3.2 Forme normale de Skolem..........................................................................................22
II.3.3) Clauses......................................................................................................................23
Chapitre 3: PROLOG.......................................................................................................................25
III.1 Programmation logique......................................................................................................25
III.1.1) Définition..................................................................................................................26
III.1.2) Substitution...............................................................................................................26
III.1.3) Unification.................................................................................................................27
III.1.4) Resolution SLD..........................................................................................................27
III.2) Langage PROLOG...............................................................................................................27
III.2.1) La syntaxe..................................................................................................................27
III.2.2) Prédicats reccurents et utiles: PROLOG.....................................................................32
III.2.3) Arbres et listes..........................................................................................................34
Introduction générale:
Pour ce faire, il est donc nécessaire d'introduire des théories, qui régissent le
comportement humain, dans chacune ou toutes ces activités, en s'appuyant sur les
sciences cognitives entre autres; celles-ci nous seront très utiles afin de prédire
l'analyse et le comportement humain.
Ensuite, il faut être capable de traduire toutes ces données, ou que nous souhaitons
déduire et prévoir, grâce à des équations logiques que la machine pourra analyser.
Il faut donc pouvoir concevoir un agent rationnel: i.e “une entité qui perçoit et agit
dans un environnement pour accomplir ses buts en fonction de ses capacités ou de ses
croyances (ou ses connaissances).”
Le comportement d'un agent est decrit par la fonction d'agent, qui associe à chaque
séquence de perception (tout ce que un agant a perçu en entrée), une action.
Le calcul des propositions ou calcul propositionnel est une théorie logique ayant pour
objet l’étude des relations logiques entre «propositions». Ces formules ou propositions
sont liées grace aux connecteurs logiques, et donnent des raisonnements valides. Elle
est aussi appelée: la logique d’ordre 0.
I.1 Définition
On appelle proposition un assemblage de mots d’une langue naturelle vérifiant les trois
propriétés suivantes :
1. Il est reconnu syntaxiquement correct.
2. Il est sémantiquement correct.
3. Il est possible de lui assigner sans ambiguïté une valeur de vérité (vrai ou faux).
Exemple:
La vie est belle, mais aussi courte ;
elle a la syntaxe, la sémantique, et clairement une valeur de vérité: vraie ou faux.
Exemple 1.2.1.
1. p, q, r sont des variables propositionnelles, donc des formules.
2. p Ù q est une formule.
3. (q Ø r) Ú p n’est pas une formule.
Exemple 1.2.2.
1. Ø p « q se lit (Ø p) « q.
2. p Ù q Ú r se lit (p Ù q) Ú r.
Le but pour cette partie est de donner une valeur de vérité, vrai ou faux, à chaque
formule.
Nous introduisons la notion d'interprétation, car à chaque connecteur, lui est associée
une fonction, qui lui donne une valeur de vérité (interprétation), en fonction de la
valeur de ses composantes.
Une formule à n variables admet donc 2n interprétations (mondes de possibles), et sa
valeur de vérité depend de celle de ses variables.
Le graphe de cette formule est défini par une table de vérité à 2n lignes représentant la
valeur de vérité correspondant à chaque combinaison des valeurs des n variables
(appelées aussi distribution de valeurs de vérité des variables).
Chaque connecteur a une fonction d'interprétation f qui lui est associée.
Nous distinguons:
1. pour la négation: , la fonction d'interprétation est f ;
a ou a (a barre), est définie tel que : "Si la proposition a est vraie alors a est fausse, et
vice-versa."
D'où la table de vérité suivante :
a f(a)
1 0
0 1
a b f Ú ( a , b)
0 0 0
0 1 1
1 0 1
1 1 1
a b f®(a, b)
1 0 0
1 1 1
0 1 1
0 0 1
a b f«(a, b)
1 1 1
0 0 1
0 1 0
1 0 0
Exemple:
Soit f la formule: f = (a Ú b) « c; dans quel monde de possibles f est-elle vraie?
a b aÚb c f = (a Ú b) « c
0 0 0 0 1
0 0 0 1 0
0 1 1 0 0
0 1 1 1 1
1 0 1 0 0
1 0 1 1 1
1 1 1 0 0
1 1 1 1 1
Satisfiabilité
On dit qu'une interprétation I satisfait une formule A, lorsque: I(A)=1;
autrement dit, une formule A est dite satisfiable si et seulement si sa table de vérité
contient au moins une ligne où la valeur de vérité de A est vraie ( ou Verite(A) = 1).
On peut aussi parler de satisfiabilité d'un ensemble de formules, au cas où il existe au
moins une ligne où toutes ces formules sont vraies simultanément, en fonction de la
valeur des mêmes variables.
La satisfiabilité d’un ensemble de formules est assimilée à la conjonction de toutes ses
formules.
Toute formule n'ayant aucun modèle est dite: incohérente, ou non satisfiable.
Exemple 1.2.3.5:
pour A = Øp Ù p, A est insatisfiable, car n'ayant aucun modèle.
a b aÙ b A = ( (a Ù b) ® b)
1 1 1 1
0 0 0 1
0 1 0 1
1 0 0 1
Ce qui nous interesse dans l'étude de la logique est de pouvoir obtenir des procédures
de raisonnement. Nous aimerions, grâce à une serie d'informations et d'énoncés,
déduire une conclusion logique.
D'ou le raisonnement logique est la relation de conséquence logique entre les énoncés.
Définition 1.2.3.1
Soit {F1, …, Fn} un ensemble de formules. Une formule C est une conséquence
logique de l'ensemble {F1, …, Fn}, si tout modèle de {F1, …, Fn} est un modèle de C;
i.e toute interprétation rendant vraie simultanément tous les F i rend vraie C.
De manière plus simple, une formule b est conséquence logique d’une formule a ( et
on note a |= b), si et seulement si étant donné la table de vérité de a et b, la valeur de
vérité de b est vraie sur toutes les lignes où la valeur de vérité de a est vraie.
La conséquence logique est très liée à la tautologie, car si A est une tautologie, elle est
déductible de l'ensemble vide.
Donc, plus generalement, si on a un ensemble de formules F = {F 1, …, Fn}, tel que C
en est une conséquence logique, alors: ( F ® C ) est une tautologie;
d'ou: F |= C si et seulement si |= ( F ® C ).
Remarques 1.2.3.1:
1. {a1, …, an} |= a si et seulement si |= a1 Ù … Ù an ® a.
2. Soit E un ensemble de formules et A ⊆E. Alors, si E est satisfiable, A est satisfiable.
3. L’ensemble vide est satisfiable.
4. L’ensemble de toutes les formules est insatisfiable.
5. Soit E un ensemble de formules et A ⊆ E. Alors, si A est insatisfiable alors E est
insatisfiable.
6. Toute tautologie est conséquense logique d’un ensemble quelconque de formules, en
particulier de l’ensemble vide.
Théorème de substitution
Soit b une formule où figure la variable propositionnelle x, et soit b', la formule
obtenue à partir de b en substituant à x, en toutes ses occurrences, une formule a.
Exemple 1.2.3.7:
Soit b ≡ x ® ((y ® z) ® x). On peut vérifier que |= b.
Et soit, b' ≡ (a Ù b) ® ((y ® z) ® (a Ù b)) obtenue en substituant dans b, (a Ù b) à x.
Alors, |= b'.
Théorème de remplacement
Soit a une formule dans laquelle apparaît en une ou plusieurs occurrences la formule β,
et soit a' la formule obtenue à partir de a en remplaçant β en une ou plusieurs de ses
occurrences, par la formule β'.
Si b ≡ b', alors a ≡ a'.
Exemple 1.2.3.8:
Soit a ≡ x Ú (x ® y) « (z Ú (z ® y).
On peut vérifier que z ® y ≡ Øz Ú y.
Soit a' la formule obtenue à partir de a en remplaçant z ® y par Øz Ú y; a' ≡ x Ú (x ®
y) « (z Ú (Øz Ú y)). On peut aisément vérifier que a ≡ a'.
Une déduction (ou démonstration) d’une formule à partir d’un certain ensemble de
formules Γ est une séquence de formules: a1, a2, ¼, an telles que an = a et chaque ai est
soit un axiome, soit un théorème déjà démontré, soit une formule de Γ, soit obtenue à
partir de l’application d’une des règles d’inférence.
Et on note Γ ├ a.
Règle S
Soient a, b et y des formules. Alors de ├ a ® b et ├ b ® y on déduit ├ a ® y
Démonstration
Règles I
De ├ a Ú a on déduit ├ a.
Démonstration.
La preuve de cette règle est :
(1) (x Ú x) ® x (H.A)1
(2) (a Ú a) ® a sub (x := a)
(3) a Ú a Hypothèse
(4) a Modus Ponens (2,3).
Règles II
De ├ a on déduit ├ a Ú β.
Démonstration.
La preuve de la règle II est :
• x ® x Ú y (H.A)2
• a ® a Ú β sub (x := a, y := β)
• a Hypothèse
• aÚ β Modus Ponens (2,3).
Règles III
De ├ a Ú β on déduit ├ β Ú a.
Démonstration.
La preuve de la règle III est :
(1) x y y x (H.A)3
(2) a b b a sub (x := a, y := b )
(3) a b Hypothèse
(4) b a Modus Ponens (2,3).
2.3.7 Règles IV
De ├ a b on déduit ├ g a ├ g b .
Démonstration.
La preuve de la règle IV est :
(1) (x y) (z x z y) (H.A)4
(2) (a b) ( g a g b ) sub (x := a, y := b, z := g)
(3) a b Hypothèse
(4) g a g b Modus Ponens (2,3).
Des équivalences logiques standards, qui donnent lieu à des théorèmes (lois logiques)
sont:
(1) x x x, x x x Lois de tautologie;
(2) x x Loi de la double négation;
(3) x x Loi du tiers exclu;
(4) x x Loi du tiers exclu (autre forme);
(5) (x y) (y x) Loi de contraposition;
(6) x (y z) (x y) z Associativité de ;
(7) x∧(y∧ z) (x ∧y) ∧z Associativité de ∧;
(8) (x∧y) x y Loi de De Morgan;
(9) (x y) x ∧y Loi de De Morgan (autre forme);
(10) x (y (x ∧y));
(11) x ∧(y z) (x∧y) (x∧z) Distribution de ∧ sur ;
(12) x (y∧z) (x y) ∧ (x z) Distribution de sur∧;
Exercices;
Notons que, pour utiliser la plupart des règles de déduction, il est plus simple que nos
formules soient sous forme de clauses, ou forme normale conjonctives;
d'où les définitions suivantes.
Un littéral est une formule atomique ou la négation d’une formule atomique; elle peut
aussi être définie comme une variable propositionnelle ou la négation d’une variable
propositionnelle.
Exemple: la formule A = b.
Une formule est en forme normale conjonctive si elle est une conjonction de clauses.
Exemple: la formule A = ( a11 a1n ) ( an1 ann).
Une formule est en forme normale disjonctive si elle est une disjonction de monômes.
Exemple: la formule A = ( a11 a1n ) ( an1 ann).
Une clause de Horn est une disjonction de littéraux, c’est-à-dire en fait une clause dont
un seul au maximum de ses littéraux est positif.
Par exemple,
p q r, s r ou encore simplement le littéral t sont des clauses de Horn, tandis
que p q r n’en est pas une.
L’idée d’avoir ce genre de clauses est qu’on peut les écrire comme une conjonction de
littéraux positifs impliquant un littéral positif unique.
Par exemple:
p q r est logiquement équivalent à (p∧q)→r.
La partie se situant à gauche de l’implication s’appelle la prémisse, et la partie se
situant à sa droite la conclusion.
Exercices:
Exercice 1.
On considere le texte suivant :
Pour que Toto reussisse l’examen de logique, il est necessaire et suffisant que,
premierement, il assiste au cours, deuxiemement, il cesse de parler avec sa voisine,
et finalement, qu’il ecoute le professeur.
2. Mais si Toto ecoute le professeur, c’est qu’il assiste au cours et cesse de
parler avec sa voisine.
3. Donc il est necessaire et suffisant que Toto ecoute le professeur pour qu’il
reussisse l’examen de logique.
Chaînage avant:
Le chaînage avant consiste à combiner des faits connus pour en déduire de nouveaux.
Par exemple, de l’énoncé posé précédemment, peut-on déduire le fait x?
Le principe du chaînage avant consiste en vérifier:
si toutes les prémisses d’une implication sont connues, et en rajouter la conclusion à la
base de connaissances.
On peut répéter ce processus jusqu’à tant que:
• soit la requête recherchée est produite (par exemplex) ;
• soit on ne peut rien déduire de plus.
Chainage arrière:
Dans le chaînage arrière, on part du but que l’on veut atteindre, autrement dit un fait
que l’on cherche à déduire de nos connaissances.
Exemple
x est-il un fait connu ? Non.
On considère alors les règles dans lesquelles x est une conséquence, c’est-à-dire celles
où x est la tête.
Nous avons:
b a, comment prouver b par chainage arrière, afin de prouver a?
II.1 Définitions
En littérature, un prédicat est ce qui est affirmé d’un sujet ou est dit lui appartenir.
Par exemple:
(Sagesse/sage est prédicat dans “La sagesse appartient à Socrate” ou dans “Socrate est
sage”.)
On peut avoir plusieurs types de prédicats:
• un prédicat à une variable P(x) (dans ce cas, on parle d’une propriété de l’objet
x),
• un prédicat à deux variables (exemple: x > y, dans ce cas, c’est une relation
entre l’objet x et l’objet y), ou encore
• un prédicat à n variables (On parle alors de prédicat n-aire).
Les prédicats décrivent des faits, correspondant à des relations entre des objets.
La logique des prédicats s'inspire du langage naturel, et les objets intervenant dans les
prédicats peuvent être:
des constantes
des variables
des fonctions sur ces objets.
L'écriture des énoncés ici est plus riche et plus complexe.
Alphabet;
II.1.1 Expressions
Si P est un symbole de prédicat d'arité n et M1, ,Mn sont des termes, alors
P(M1, ,Mn) est un atome ou une formule atomique.
Exemple 2.1.1.2.1:
Soit le prédicat plus-grand et soient les termes 2, 5, 7, x et y. Alors plus-grand(7,5),
plus-grand(7+2, 5) et plus-grand(7+y*2, 5+y*2) sont des formules atomiques;
* et + sont des symboles de fonctions.
7. L’ensemble des formules du langage L, que l’on d´esigne par F(L), est le plus petit
ensemble qui satisfait:
• toute formule atomique est une formule;
• si est une formule alors ¬ est une formule;
• si A et B sont des formules alors: A∧ B, A∨B ,A → B , A↔ B sont des
formules;
• si A est une formule et x une variable, alors ∀x A· et ∃x A· sont des formules.
Exemple 2.1.1.2.2:
Considérons les prédicats A et B. Soient les termes x, y, 7 et 6, alors :
∀x∃y( A(x, 6) B(y, 7)) est une formule (bien formée).
x = y, 6 < 7 et ∀x∃y (x = y x + 6 < y + 7) sont aussi des formules.
Toute formule d’un langage du premier ordre se décompose de manière unique sous
l’une, et une seule, des formes suivantes :
– une formule atomique,
– ¬F, où F est une formule,
– F∧G , F∨G , F→ G , F↔ G où et F et G sont des formules,
– ∀x F ou ∃x F, où F est une formule et x est une variable.
Une formule F est une sous-formule de G, si F apparaît dans la décomposition de G.
Une occurrence d’une variable dans une formule est un couple constitué de cette
variable et d’une place effective, c’est-à-dire qui ne suit pas un quantificateur.
Exemple II.1.4.1:
r(x, z) → ∀z · (r(y, z) ∨y = z)
la variable x possède une occurrence, la variable y deux et la variable z trois.
Une occurrence d’une variable x dans une formule est une occurrence libre si elle ne
se trouve dans aucune sous-formule de cette dernière, qui commence par une
quantification ∀x ou ∃x.
Dans une formule a, l’occurrence d’une variable x est liée si elle se trouve dans le
champ d’un quantificateur x; sinon elle est libre.
Une variable x est libre dans une formule a s’il existe dans a une occurrence libre de x.
Une variable x est liée dans une formule a s’il existe dans a une occurrence liée de x.
Définition:
Une formule du calcul des prédicats est en forme normale conjonctive de Prenexe si
tous les quanticateurs sont en tête de la formule :
Q1x1 Qmxm {[A11 A1i] [Al1 Alj ]}
où Qk { , }, k {1, , m} et Aij est une formule atomique ou la négation
d'une formule atomique.
Exemple II.3.1.1:
Soit x y (P(x, y) Q(x; z)). Cette formule est en forme normale conjonctive de
prenexe.
Par contre, la formule x yP(x, y) Q(x, z) n'est pas en forme normale conjonctive
de prenexe.
Il est possible de transformer toute formule du calcul des prédicats A, en une autre
formule A' équivalente en forme normale conjonctive de prenexe.
Ceci peut se faire en passant par les étapes suivantes:
• Éliminer dans la formule de départ A tous les quanticateurs redondants
(éliminer tous les x ou x si aucune occurrence libre de x n'apparaît dans leur
champs respectifs).
• Renommer les variables liées comme suit :
Si une variable x a n occurrences liées et 0 occurrences libres alors
renommer n -1 occurrences par différentes variables.
Si une variable x a n occurrences liées et au moins une occurrence libre alors
renommer les n occurrences liées par n diérentes variables.
• Remplacer A B par A B. Remplacer A B par (A B) (B A)
• Appliquer les transformations suivantes :
Remplacer xA B par x (A B)
Remplacer xA B par x (A B)
Remplacer xA B par x (A B)
Remplacer x A B par x (A B)
Remplacer A xB par x (A B)
Remplacer A xB par x (A B)
Remplacer A xB par x(A B)
Remplacer A xB par x(A B)
Exemples:
Mettre la formule suivante sous forme normale de prenexe conjonctive;
x A → y B
1. On remplace x A → y B par x A y B;
d'où: x A y B = x A y B
Définition:
Une formule A en forme normale de Skolem est une formule As en forme normale
prenexe où les connecteurs existentiels ont été supprimés de telle sorte que si A est
satisfiable alors As est satisfiable.
Exemple II.3.2.1.
La formule x y P(x, y, z) est en forme normale de Skolem;
par contre, x yP(x, y, z) n'est pas en forme normale de Skolem à cause de la présence
du quanticateur .
Soit la formule A;
1. mettre A en forme normale conjonctive de prénexe;
2. remplacer chaque occurrence d'une variable y quantiée existentiellement par
un terme de la forme f(x1 , ,xn), où x1, ,xn sont les variables quantifiées
universellement et dont le quanticateur apparaît avant celui de y dans A;
3. si aucun quanticateur universel n'apparaît avant y dans A, alors remplacer y
par une constante de Skolem.
Remarque II.3.2:
Pour chaque variable y, quantifiée existentiellement, choisir un nom différent pour la
fonction de Skolem.
La formule abc P(a, b, c) n'est pas sous une forme de Skolem, dûe à la présence
du quantificateur ;
sa skolémisation donne une formule de la forme: abP(a, f(b, a), b) où
f(a, b) est une fonction de Skolem dont les arguments sont les variables quantifiées
universellement et dont le quanticateur apparaît avant le 9 considéré.
Exemple 1.2.6.
Soit la formule hzx yP(h, x, y, z). La skolemisation de cette formule donne
zxP(b, x, g(z; x), z) où b est une constante de Skolem et g(z,x) est une fonction de
Skolem.
Exemple II.3.2.2:
Soit la formule hzxyP(h, x, y, z).
La skolemisation de cette formule donne P(b, c, d, e) où b, c, d et e sont des constantes
de Skolem.
II.3.3) Clauses
Définition II.3.3:
Une clause est une formule (universellement quantifiée) dont le corps est une
disjonction de formules atomiques ou de la négation de formules atomiques.
Lorsqu'il est demandé de mettre sous FNC, il s'agit de mettre la formule sous forme
normale conjonctive, i.e, comme conjonction de clauses.
Exemple II.3.3.2:
3. Clause
Cette formule est déjà une clause, puisqu'elle est une disjonction (de négation) de
formules atomiques..
Exemple II.3.3.3:
Soit la formule x ( (A(x) B(x) ) C(x) .
La clause qui lui est équivalente est donnée par:
3. Clause
On remplace le “ ” par une virgule “,”, et on obtient deux clauses:
( A(v) C(x)), et (B(v) C(x))
Exercices d'application;
Exercice 1.
Écrire avec des quantificateurs les propositions suivantes :
Exercice 2.
Écrire avec des quantificateurs les propositions suivantes :
Exercice 3.
Écrire avec des quantificateurs les propositions suivantes :
Aspect sémantique
Déductions
Chapitre 3: PROLOG
III.1.1) Définition.
La programmation logique en clauses de Horn est définie par la donnée d'un ensemble
de termes, et/ou formules (prédicats), et d'un ensemble de clauses définies.
On distingue trois types de clauses:
1. un fait: est une relation sur des objets du monde considérée comme vraie.
Exemples:
grand(lucas), ceci est un fait, avec le prédicat: grand, qui signifie que lucas est grand;
lucas est un terme qui est une constante;
grand-père(arsene, lucas) est un fait; ce qui signifie que arsene est le grand-père de
lucas, arsene et lucas sont des constantes.
2. Une règle : qui est une clause constituée d'un littéral positif (appelé tête de la
clause) et plusieurs littéraux négatifs (corps de la clause).
Elle s'écrit: A B1, , Bn ; d'où A est vraie si les conditions B1 jusqu'à Bn
sont aussi vraies.
Elle peut aussi s'écrire: A :- B1, , Bn , suivant la syntaxe de PROLOG.
Exemples:
admisenl3(X) valide_l1(X), valide_l2(X), inscritenl3(X).
D'où la traduction: X est admis en l3 si, X a validé l1, X a validé l2, et est inscrit en l3.
tante(A, B) ( ( pere(C, B), soeur(A, D) ) ; ( mere(D, B), soeur(A, C) ) ).
3. un but : qui est une formule dont on cherche à savoir si elle est vraie ou fausse.
Elle s'écrit: ?-tante(X, Y) , ?-admisenl3(X) , ?-admisenl3(lucas) , ?-=(X, Y).
III.1.3) Unification
Deux termes t1 et t2 sont dits unifiables, s'il existe une substitution telle que s(t1) = s(t2).
Définition II.1.3
Soit E un ensemble de termes E={t1, ,tn}.
Une substitution s est dite unificateur le plus général de E si les deux conditions
suivantes sont satisfaites:
• s(t1) = = s(tn) et
• si s' est un autre unicateur de E alors il existe une substitution s'' telle que: s'' =
ss'.
III.2.1) La syntaxe
ami(lucas, florient);
cette formule exprime le fait que florient soit un ami de lucas.
?-pere(M, N).
Prolog répond par M=lucas, N=tim, Yes.
III.2.1.7) Unification
En prolog, l'unication est désignée par l'opérateur "=". Ainsi
?-pere(X, lucas)=pere(tim, Y).
X=tim,
Y=lucas.
Exemples:
?-X=lucas.
X=lucas
?-tim=lucas.
No
?-f(X,5)=f(10,Y).
X=10
Y=5
?-p(X,X,X)=g(X,X,X).
No
?-p(X,X,X)=p(a,a,a).
X=a
?-p(X,X,a)=g(b,Y,Y).
No
?-homme(lucas) ≠ homme(simon).
Yes
Le symbole ≠ est utilisé pour non unication. La réponse est évidemment Yes, car
les deux constantes lucas et simon ne sont pas identiques.
cousin(lucas, andre)
garçon(lucas).
garçon(andre).
fille(lisa).
fille(zahira).
Soit maintenant le but suivant :
?-garçon(X).
X=lucas ;
Si on tape le caractère " ;", Prolog répond
X=andre ;
Si on tape encore le caractère " ;", Prolog répond:
No.
Exercices d'application:
Exercice 1 :
Soit le programme logique suivant ;
pere(jean,jules).
pere(jean,julie).
plus(un,zero,un).
plus(un,un,deux).
Donnez la reponse aux requetes suivantes, et justifier;
| ?- pere(jean,X). | ?-plus(un,X,Y).
Exercice 2 :
grand-pere(X,Y) :- pere(X,Z), pere(Z,Y).
pere(toto,titi).
sexe(titi, masculin).
pere(titi,lulu).
Quelle est la reponse a la requete suivante, et pourquoi ?
| ? grand-pere(X,Y).
Exercice 3 :
Plan du metro.
Soient les faits suivants :
connectee(bondstreet,oxfordcircus,central).
connectee(oxfordcircus,tottenhamcourtoad,central).
connectee(bondstreet,greenpark,jubilee).
connectee(greenpark,charingcross,jubilee).
connectee(greenpark,piccadillycircus,piccadilly).
connectee(piccadillycircus,leicestersquare,piccadilly).
connectee(greenpark,oxfordcircus,victoria).
connectee(oxfordcircus,piccadillycircus,bakerloo).
connectee(piccadillycircus,charingcross,bakerloo).
connectee(tottenhamcourtroad,leicestersquare,northern).
connectee(leicestersquare,charingcross,northern).
On donne les clauses (regles) suivantes;
station-voisine(X,Y) :-connectee(X,Y,L).
station-voisine(X,Y) :-connectee(X,Z,L), connectee(Z,Y,L).
2. Soit la nouvelle regle, stipulant qu’on puisse atteindre une station a partir d’une autre
si elles sont sur la meme ligne, avec quelques changements ;
atteignable(X, Y) :- connectee(X, Y, L).
atteignable(X, Y) :- connectee(X, Z, L1), connectee(Z, Y, L2).
atteignable(X, Y) :- connectee(X, Z1, L1). connectee(Z1, Z2, L2), connectee(Z2, Y,
L3).
atteignable(X, Y, []) :- connectee(X, Y, L).
atteignable(X,Y)(X,Y, finchemin) :- connectee(X, Y, L).
atteignable(X,Y)(X, Y, chemin(Z, R)) :- connectee(X, Z, L), atteignable(Z, Y, R).
Le prédicat is permet l'affectation d'une valeur ou d'un résultat d'une opération à une
variable.
Exemples:
?-X is 5.
Yes
?-Y is 5+2.
Y=7
?-M is X+Z.
M=12
Le prédicat = :=
Le prédicat = := permet la comparaison de deux expressions après leur évaluation.
Ce prédicat permet de retourner la liste: Liste, de tous les objets Objets vérifiant
But. Si le But n'a pas de solution, le prédicat findall retournera la liste vide : [ ].
Exemples:
Soient les prédicats suivants :
boit(lucas, cafe).
boit(lucas, lait).
boit (lucas, the).
boit(simon, champagne).
Soit le but suivant :
?- findall(X, boit(lucas, X), Liste).
Prolog retourne Liste=[cafe, lait, the].
S la liste est vide, nous aurons en réponse: Liste=[ ].
L'attribut “dynamic” est déclaré pour tous les prédicats qui le sont, avec leur arité (i.e
leur nombre d'arguments).
Par exemple, si le prédicat freres et amis sont dynamiques et leurs arités respectives
sont 2 et 3, on écrit :- dynamic freres/2, amis/3.
III.2.3.1) Listes
Une liste est une séquence d'objets qui peuvent être de types différents.
C'est une structure de données très utilisée en PROLOG. La notation usuelle est [a, b,
].
Par exemple:
[a; 11; 3; livre; cahier] est une liste contenant des objets de types différents.
Par exemple:
[1, a, 2, b/L] indexe n'importe quelle liste commençant par les éléments 1, a, 2, b.
?-[a,b,c]=[X/L].
X=a.
L=[b,c]
?-[1/L]=[1,2,3].
L=[2,3]
?-[1,2,3/L]=[1,2,3].
L=[ ]
?-[X,Y]=[a,b,c].
No
Concaténation de liste;
La concaténation de deux listes L1 et L2 est réalisée par le prédicat append
prédéni en Prolog. Cette opération exploite la récursivité. Son principe est comme
suit :
1. isoler la tête de la première liste L1.
2. Résoudre récursivement le prédicat pour concaténer le reste de la liste L1 avec
la seconde liste L2.
3. Ajouter au début de la liste résultante l'élément qui avait été isolé à la première
étape
Ce prédicat permet diérentes utilisations du fait que Prolog ne distingue pas les
données des résultats.
Exemple:
?-append([1,2],[3,4,5], L3).
L3=[1,2,3,4,5]
Inversion de liste
Le prédicat inverser réussit si la deuxième liste est l'inverse de la première. Le
programme Prolog correspondant est le suivant :
?- inverser([ ],[ ]).
?- inverser([X|L1],L2) :- inverser(L1,L3),append(L3,[X],L2).
Exemples:
?-inverser ([a, b, c], L).
L=[c, b, a]
longueur([ ],0).
longueur([X/L],N) :-longueur(L,M), N is M+1.
Exemple:
?-longueur([b,c,a,d],N).
N=4
III.2.3.2) Arbres
Ils permettent de représenter beaucoup de données du monde réel. Ils permettent de
classifier et de récupérer de manière organisée, les données enregistrées sous cette
forme.
Pour les arbres binaires, chaque noeud possède exactement deux fils.
Lorsque représenté par une liste, un noeud de l'arbre est représenté par 3 éléments: le
premier représente la valeur stockée, le deuxième représente le sous-arbre gauche et le
troisième représente le sous-arbre droit.
La valeur pour chaque noeud du est supérieure à toutes celles du sous-arbre enraciné au
niveau de son fils gauche et inférieure à toutes celles du sous-arbre enraciné au niveau
de son fils droit.