Inteligence Artificiel

Télécharger au format pdf ou txt
Télécharger au format pdf ou txt
Vous êtes sur la page 1sur 37

Notes de Cours:

LOGIQUE ET INTRODUCTION A L'INTELLIGENCE ARTIFICIELLE

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/;

S. Russell, P. Norvig, Articial Intelligence: A Modern Approach, 2nd edition, 2002

researchgate.net/ Intelligence Artificielle, Dr Adj Oudj Reda; (2006)

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:

Ce cours est un bon moyen de rentrer dans le bain, et d'introduire l'intelligence


artificielle.
L'intelligence artificielle a pour but de concevoir des systèmes pouvant reproduire le
raisonnement humain.
Le but est de pouvoir automatiser des actions, telles que: la prise de décision,
l'apprentissage, résolution de problèmes, etc, en fonction des scénarios auxquels fera
face la machine ou le système ainsi conçu.

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.

Ce cours ci en particulier s'appesantit sur la compréhension donc, de la logique utilisée


par divers agents, i.e la modélisation des connaissances, des raisonnements, et
l'établissement des déductions pour aboutir à des conclusions.
Nous distinguerons ici, entre-autres, la logique des propositions, pour exprimer des
relations entre des énoncés relativement simples et concis à exprimer, puis la logique
des prédicats, pour exprimer des relations entre des énoncés plus complexes à
exprimer.
Puis, enfin nous étudierons le langage de la programmation logique, tout ce qui entre
dans sa syntaxe, les expressions utilisées, ainsi que sa sémantique, et enfin les
méthodes utilisées afin d'obtenir des réponses aux problèmes posés, les déductions que
nous voulons effectuer. Dans cette dernière partie, nous présenterons le langage
PROLOG, très utilisé pour ce faire.
Donc, nous avons 3 grands chapitres:
La logique des propositions
la logique des prédicats
la programmation logique
Chapitre 1 : LA LOGIQUE DES PROPOSITIONS

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.

I.2 La logique propositionnelle


Le langage propositionnel est composé de formules représentant des propositions.
Comme les autres langages, le langage du calcul propositionnel est caractérisé par deux
aspects.
Ces deux aspects sont:
1. syntaxique, qui concerne les formules elles-mêmes, si elles sont bien écrites ou
constituées suivant les normes;
2. sémantique, qui donne un sens à ces formules, c'est-à-dire leur valeur (vrai ou
faux).

I.2.1 La syntaxe du langage propositionnel


La syntaxe d’un langage s'interesse surtout à l’alphabet et aux règles d’écriture
(grammaire) des expressions du langage.
Pour la construction des formules propositionnelles, on distingue plusieurs notions qui
sont:
• les variables, qui sont des lettres ou des mots (avec ou sans indices);
• les constantes, qui sont: vrai, ou faux;
• les connecteurs logiques; entre autres, le connecteur unaire: Ø , les connecteurs
binaires: Ù, Ú , ®, «;
• les parenthèses ().
Une variable propositionnelle est donc une proposition (affirmation) élémentaire, et
une formule propositionnelle est une combinaison correcte de variables
propositionnelles.

I.2.1.1 Les règles d’écriture.


En ce qui concerne les règles d’écriture, (assemblage des symbôles), de ces dites
formules en logique propositionnelle, nous notons que:
1. toute variable propositionnelle est une formule;
2. si a est une formule, Ø a (ou a) est une formule;
3. si a et b sont des formules, ( a Ù b), ( a Ú b), ( a ® b) et ( a « b) sont des formules;
4. une expression n’est une formule que si elle est écrite conformément aux règles 1,2
et 3.

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.

I.2.1.2 Priorité des connecteurs


Les connecteurs sont appliqués dans l’ordre suivant :
Ø,Ù ,Ú,®,«.

Exemple 1.2.2.
1. Ø p « q se lit (Ø p) « q.
2. p Ù q Ú r se lit (p Ù q) Ú r.

I.2.2 Aspect sémantique de la logique des propositions

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

2. pour la conjonction: Ù, la fonction d'interprétation est f Ù ;


la conjonction de deux propositions a et b, notée par a Ù b, qui se lit (a et b) est vraie si
et seulement si les deux propositions a et b sont vraies simultanément.
D’où la table de vérité suivante :
a b f Ù (a , b)
1 1 1
1 0 0
0 1 0
0 0 0

3. pour la disjonction: Ú, la fonction d'interprétation est f Ú;


la disjonction de deux propositions a et b, notée par a Ú b, qui se lit (a ou b) est fausse
si et seulement si les deux propositions a et b sont fausses simultanément.
D’où la table de vérité suivante :

a b f Ú ( a , b)
0 0 0
0 1 1
1 0 1
1 1 1

4. pour l’implication: ® , la fonction d'interprétation est f®;


le connecteur "® " est appelé le connecteur d’implication, la proposition a ® b est
fausse dans le cas où a est vraie et b est fausse.
Elle est définie par le tableau suivant :

a b f®(a, b)
1 0 0
1 1 1
0 1 1
0 0 1

Dans la formule a ® b, a est appelée l’hypothèse (ou antécédent) et b la thèse (ou la


conséquence).

5. pour l’équivalence: « , la fonction d'interprétation est f«;


la proposition a « b est vraie dans le cas où a et b ont la même valeur de vérité.
Elle est définie par le tableau suivant :

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

D'où la formule est vraie ici pour 4 cas bien particuliers.


I.2.3 Modeles, cohérence, validité.

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.

On dit qu'une interprétation I falsifie une formule A, lorsque: I(A)=0;


autrement dit, une formule A est dite insatisfiable si elle est fausse sur toutes les lignes
de sa table de vérité.
Exemple 1.2.3.1:
Pour A = Øa Ù a, A est insatisfiable.

On appelle modèle d'une formule A, toute interprétation qui la satisfait.


Exemple 1.2.3.2:
pour A = (p ® (r Ù s)), on a le modèle: ( p=vrai, r=vrai, s=vrai (ceci equivaut a: p=1,
r=1, s=1) )

On appelle contre - modèle d'une formule A, toute interprétation qui la falsifie.


Exemple 1.2.3.4:
pour A = (p ® (r Ù s)), on a le contre - modèle: ( p=vrai, r=faux, s=faux (ceci equivaut
à: p=1, r=0, s=0) )

Toute formule ayant au moins un modèle est dite: cohérente, ou satisfiable.

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.

Toute formule A n'ayant aucun contre-modèle est dite: valide.

On dit encore que cette formule A est une tautologie, et on la note |= A.


Exemple 1.2.3.6:
La formule A = a Ù b ® b est une tautologie, car sa table de verite donne:

a b aÙ b A = ( (a Ù b) ® b)

1 1 1 1
0 0 0 1
0 1 0 1
1 0 0 1

Certaines tautologies fréquemment utilisées sont:


|= (A ® A) appelée identité
|= (A Ú A) appelée tiers-exclu
|= (A Ù A) appelée non contradiction
|= (A «   A) appelée double négation

Conséquence et raisonnement logique.

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'.

La conséquence logique nous permet donc d'établir plusieus schémas de raisonnement,


ou lois logiques, que nous énumerons ci-après, et qui nous permettent de faire des
démonstrations, ou déductions logiques.

Loi logique de l'équivalence


Celle-ci dit, que: P = ( (A ® B) Ù (B ® A) ) « (A « B) est une tautologie.

Loi logique de la contraposition


Celle-ci dit, que: P = ( (A ® B) « (B ® A) ) est une tautologie.

Loi logique de la réduction a l'absurde.


Celle-ci dit, que: P = ((A Ù B) ® (C Ù C)) « (A ® B) est une tautologie.
En logique, les systèmes à la Hilbert servent à définir les déductions formelles en
suivant un modèle proposé par David Hilbert au début du 20ème siècle: il s'agit d'un
grand nombre d’axiomes logiques exprimant les principales propriétés de la logique
que l’on combine au moyen de quelques règles, notamment la règle de Modus Ponens,
pour dériver de nouveaux théorèmes.

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.

Considérons la liste des axiomes suivante, c'est-à-dire de formules dont on admet


qu’elles sont des théorèmes sans pouvoir leur donner une démonstration formelle; et on
considère le système complet de connecteurs {Ø, Ú}.
Définition 1.2.3.2
L’expression x ® y n’est qu’une abréviation de l’écriture Ø xÚ y.
Les axiomes d’Hilbert-Ackerman sont :
1. (H.A)1 (x Ú x) ® x;
2. (H.A)2 x ® x Ú y;
3. (H.A)3 x Ú y ® y Ú x;
4. (H.A)4 (x ® y) ® (z Ú x ® z Ú y).

I.2.4 Les règles ou schémas de déduction


Les règles de déduction ont pour objet la déduction de nouveaux théorèmes à partir de
théorèmes connus. Une règle de déduction n’est pas un axiome mais en quelque sorte
un procédé permettant d’obtenir de nouveaux théorèmes.

1.2.4.1 Règle de détachement (ou Modus Ponens)


Contrairement à la liste des axiomes et aux autres règles de déduction, la règle du
Modus Ponens est commune à toutes les théories.
Le terme Modus Ponens est utilisé pour exprimer le fait de tirer une conclusion d'un
énoncé (ou de plusieurs). Elle est donnée comme suit :
soient a et b, deux formules telles que a soit vraie, ainsi que a ® b soit vraie;
alors, on peut conclure que: β est vraie;
on l'écrit: De ├ a, et ├ a ® b , on peut déduire: ├ b
(├ a signifie que a est un théorème)
d'où grâce à cette règle on peut détacher la formule b, étant donné bien sûr que les
deux autres formules vérifient: ├ a, et ├ a ® b.

1.2.4.2 Règle de substitution


Cette règle est indispensable pour les théories où les axiomes sont donnés avec des
variables propositionnelles (comme le cas de la théorie d’H.A.). Soit a un théorème
dans lequel figure la variable propositionnelle x, alors pour toute formule β (où β n’est
pas nécessairement un théorème), la substitution de β à x en chacune de ses
occurrences engendre un théorème. Autrement dit :
De ├ a, on déduit ├ a (x := β)
Exemple 1.2.4.1.

1.2.4.3 Les règles dérivées


Grâce à des règles dérivées, on peut plus rapidement effectuer ces démonstrations.
Celles que nous avons sélectionnées dans ce cas en particulier sont:

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 atome ou formule atomique est une formule ne comportant qu’une variable


propositionnelle (pas de connecteurs).
Exemple: la formule A = b.

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.

Un monôme conjonctif est une conjonction de littéraux.


Exemple: la formule A = a1    an.

Une clause est une disjonction de littéraux.


Exemple: la formule A = b1    bn

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).

La résolvante de deux clauses correspond à la clause résultant de l’application de la


règle de résolution sur ces deux clauses.

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.

Une autre façon de nommer prémisse et conclusion est la suivante;


on appelle corps l’ensemble des littéraux négatifs de la clause, et tête son unique littéral
positif lorsqu’il existe.
Soit son ecriture : exemple;
la formule f donnée par: f = a  b  g ;
on a f  a  b  g  a  (b  g)  (b  g)  a  (b  g)  a
d'ou la premisse est : (b  g), et la conclusion est: a.

Exemples de résolutions et deductions logiques, par regle d'inference.

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.

Formalisez ces 3 phrases en utilisant les variables propositionnelles definies ci-


dessous et les seuls connecteurs : ¬, ⇒, ∧ et ∨.

1.2.4.4) Regles d'inferences sur les clauses de Horn

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?

Le moteur d’inférence de PROLOG fonctionne essentiellement sur ce principe.


Chapitre 2: LA LOGIQUE DES PREDICATS

La logique des propositions permet de décrire des énoncés concis, et directs.


Par contre, pour des constructions plus complexes, et plus explicites, comment faire?
Par exemple:
Si nous cherchons la valeur de vérite de la proposition: P = "Le chat est sorti", c'est
assez simple et direct;
Qu'en est-il de : "Le chat noir d'Alex est sorti" ?
Il faut dissocier: “chat”, de “noir”, d' “Alex”, chacun d'eux pouvant être substitué dans
la formule. D'ou l'introduction de la logique des predicats.

La terminologie premier ordre fait référence au fait que les quantifications


existentielles et universelles ne sont autorisées que sur les variables.
L’objectif de ce chapître est alors de définir la logique du premier ordre. Comme pour
la logique propositionnelle, on va le faire en parlant d’abord de la syntaxe, c’est- à-dire
comment écrire les formules, puis de leur sémantique.

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;

Pour ecrire en logique du 1er ordre, nous pouvons combiner:


• les constantes: peuvent être des chiffres, ou mots dont la 1ere lettre est
minuscule;
• les variables: seront des mots ou combinaisons de mots, et en majuscule;
• les fonctions: avec lettre minuscule, et avec un ou plusieurs arguments; une
fonction peut aussi être considere tel un objet, ou terme;
par exemple, papa(x) est une fonction, et papa(Marie) est aussi un objet;
• les prédicats: ressemblent a des fonctions, mais ne peuvent pas être assimilés a
des objets; les prédicats sont à la base de formules (combinaison de prédicats),
ils retournent une valeur de verite; et le nombre d'arguments s'appelle: "arité";
par exemple, papaderetour est un predicat sans argument, mais ne peut etre un
objet;
• les connecteurs logiques: les connecteurs sont ceux qui sont connus: , ∧,  ,
, 
• les quantificateurs: nous notons: ∃, il existe et ∀, pour tout;
par exemple, ∀x personne(x) ∃y personne (y) (maman(y,x)) (y est la maman de
x).
• les symboles auxiliaires tels les parenthèses.

II.1.1 Expressions

II.1.1.1) Les termes


1. Toute constante est un terme;
2. Toute variable est un terme;
3. Si f est un symbôle de fonction à n arguments et t1, t2, , tn sont des termes, alors
f(t1, t2, , tn) est un terme;
4. Rien d’autres n’est un terme, s’il n’est pas obtenu en vertus des règles 1, 2 et 3.

II.1.1.2) Les formules


1. Une variable propositionnelle est une formule.
2. Si t1, t2, , tn sont des termes et P un prédicat à n variables, alors P (t 1, t2, , tn) est
une formule.
3. Si a et β sont des formules, alors a , a ∧b, a  b, a  b, a  b sont aussi des
formules.
4. Si a est une formule et x une variable, alors ∀x a et ∃x a sont des formules.
5. Rien n’est une formule, s’il n’est pas obtenu en vertus des règles 1, 2,3 et 4.
6. L’ensemble des formules atomiques d’un langage L est l’ensemble des formules de
la forme :
p(t1, t2, , tn) ou p est un prédicat d’arité n et t1, t2, , tn sont des termes du langage
L;
t1 = t2 si L est égalitaire et t1, t2 sont des termes du langage L.

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.

II.1.2 Priorité des connecteurs


Les connecteurs et les quantificateurs sont appliqués dans l’ordre suivant :
, ∧,  ,∀, ∃, →, ↔,.
II.1.3 Champ d’un quantificateur
Le champ d’un quantificateur est la partie de la formule couverte par un quantificateur,
comme présenté ci-dessous:
∀x a ∧b (∀x a  b )
∃x a ∧b (∃x a  b )
∀x a  b
∃x a  b
∀x (a  b)
∃x (a  b)

II.1.4 Variable libre et variable liée

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 le cas contraire, l’occurrence est dite liée.

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.

Formule close (fermée)


Une formule a est dite close (ou fermée), si et seulement si, a ne possède pas de
variables libres.

II.2 Aspect sémantique


Interprétation
On se donne :
un domaine de valeurs pour les constantes
une application qui donne une valeur à chaque variable
une application qui associe à toute fonction d’arité n et à tout n-uplet de
termes une valeur dans le domaine de valeurs
une application qui associe à tout prédicat d’arité n et à tout n-uplet de termes une
valeur dans {vrai,faux}

∀x P est vrai ssi P est vrai pour toute interprétation de x


∃x.P est vrai ssi P est vrai pour au moins une interprétation de x

II.3 Formes normales


Nous allons présenter principalement les formes normales de Prenexe, de Skolem et
un algorithme permettant de transformer n'importe quelle formule en forme clausale.

II.3.1 Forme normale Prenexe


Dans cette section, nous allons présenter un moyen de transformer une formule
quelconque du calcul des prédicats vers une formule équivalente en forme normale
prenexe.
L'intérêt de cette transformation est de montrer plus facilement certaines propriétés.

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)

• Mettre la formule en forme normale conjonctive en distribuant  sur  comme


suit :
Remplacer (A  B)  C par (A  C)  (B  C)
Remplacer A  (B  C) par (A  B)  (A  C)

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

2. On remplace x A  y B par x (A  y B)

3. On remplace x (A  y B) par xy (A  B).


Cette formule est bien entendu en forme normale de prenexe conjonctive.

Mettre la formule suivante sous forme normale de prenexe conjonctive.


x y A(x, y) → y B(y,y)

1. On renomme les variables liées. On obtient la formule suivante :


x y A(x, y) → y1 B(y1, y1)

2. On remplace → par  et  . On obtient: x y A(x, y)  y1 B(y1, y1) . Cette


formule est équivalente à x y A(x, y)  y1 B(y1, y1).
On applique les règles précédentes et on obtient finalement la formule suivante, en
forme de prenexe conjonctive:
x y y1 (A(x, y)  B(y1, y1)).
II.3.2 Forme normale de Skolem

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 .

Etapes de mise sous forme de Skolem:

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 abc 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: abP(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 hzx yP(h, x, y, z). La skolemisation de cette formule donne
zxP(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 hzxyP(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.

Exemple II.3.3.1). A(x)  B(y) n'est pas une clause.


xy (A(x)  B(y)) est une clause.
xy(A(x)  B(y)  C(x; y; z)) est une clause.
xy(A(x)  B(y)) est une clause.
xy(A(x)  B(y)) est une clause.
xy(A(x)  B(y)) est une clause.
xy((A(x)  B(x))  B(y)) n'est pas une clause.
xy((A(x)  B(x))  B(y)) n'est pas une clause.

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.

Mise sous forme clausale:

Soit une formule A;

1. Mettre A en forme normale conjonctive de prénexe


2. Mettre la formule obtenue en forme de Skolem
3. Remplacer la formule suivante: A  B par A  B
4. Remplacer les  de la formule obtenue par des virgules "," donnant lieu à
une ou plusieurs clauses.

Exemple II.3.3.2:

Soit la formule x A(x)  y B(y).


La clause qui lui est équivalente est donnée par:

1. Forme normale conjonctive de prenexe:


 x y(A(x)  B(y)).

2. Forme normale de Skolem


A(u)  B(v), u et v étant des constantes de skolem.

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:

1. Forme normale conjonctive de prenexe:


 y ( ( A(y)  B(y) )  C(x) ) ; celle ci est équivalente à:
 y ( ( A(y)   B(y) )  C(x) );
d'où on a:  y ( ( A(y)  C(x) )  ( B(y)  C(x) ) )

2. Forme normale de Skolem


( A(v)  C(x) )  ( B(v)  C(x) ), v étant une constante de skolem.

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 :

1) f n’est pas nulle (où f est une fonction de R dans R).


2) Le dénominateur D de la fraction ne s’annule pas sur R.
3) f n’est pas l’identité de R (où f est une fonction de R dans R).
4) f n’est pas croissante sur R (où f est une fonction de R dans R).

Exercice 2.
Écrire avec des quantificateurs les propositions suivantes :

1) a) Tout entier naturel est pair ou impair.


b) Tout entier naturel est pair ou tout entier naturel est impair.
2) a) f est strictement monotone sur R (où f désigne une fonction de R dans
R).
b) f n’est pas strictement monotone sur R.

Exercice 3.
Écrire avec des quantificateurs les propositions suivantes :

1) a) f est constante sur R (où f est une fonction de R dans R).


b) f n’est pas constante sur R.
2) a) f est une homothétie (où f est une transformation du plan P).
b) f n’est pas une homothétie.
3) a) Pour chaque entier, on peut trouver un entier strictement plus grand
(cette affirmation est vraie).
b) Il y a un entier plus grand que tous les entiers (cette affirmation est
fausse).

Aspect sémantique

Déductions
Chapitre 3: PROLOG

III.1 Programmation logique.


La programmation logique permet de
Un langage logique est caractérisé par une symbolique (où tous les objets sont des
symbôles), un ensemble d'entités et prédicats en relation les uns avec les autres, et les
solutions retournées peuvent être nombreuses, car toutes les possibilités du problème
sont évoquées.

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).

En programmation logique, nous allons introduire les notions suivantes:


1. la substitution
2. l'unification.
III.1.2) Substitution
La substitution est un ensemble de couples <variable, terme>, donné de la forme
suivante:
{X1  t1,  , Xn  tn}

L'application d'une substitution s (s = {X1  t1,  , Xn  tn}) à un terme ou une formule


f consiste seulement à remplacer les occurrences de X1, , Xn dans f par les termes:
t1,  ,tn.

Exemple: Soit la substitution s = {X1  lucas, X2  xavier}, et soit la formule


f = cousin(X,Y).
Alors s(f) = cousin (lucas, xavier).

Remarque . Si X  t  s, alors: s(X) = t.

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.1.4) Resolution SLD


Le principe de résolution SLD est une règle de simplication des buts qui procède
par unication avec les têtes de clauses du programme.

Soit le but courant B1, ,Bi-1,Bi,Bi+1, , Bn et soit la clause A  A1,  ,Ap.


Supposons que l'unificateur le plus général entre A et Bi est u via
une substitution de renommage des variables g. Le principe de la résolution
SLD est défini par l'équation suivante:
B1 , , Bi−1, Bi , Bi+1, , Bn
g (B1 , , Bi−1, A1 , , Ap , Bi+1,, Bn)
C'est une réécriture du but B1, ,Bi-1,Bi,Bi+1, , Bn , où l'atome Bi est remplacé par
A1,  ,Ap, puisque A et B sont unifiables par g.
III.2) Langage PROLOG
PROLOG est un acronyme pour PROgrammation en LOGique. C'est un langage qui
s'écrit très souvent grâce à la syntaxe des clauses de Horn, et utilise la méthode de
résolution du …

III.2.1) La syntaxe

III.2.1.1) Pour les constantes:


ce sont les caractères qui commencent par des minuscules, ou bien qui sont entre côtes:
' ', et ceci les différencie des variables.
Exemple:
lucas, 20, cynthia, 'Prenom'.

III.2.1.2) Pour les variables:


toute chaine de caractères commençant par une majuscule est une variable;
par exemple,
Prenom, Lucas, VAR sont des variables.

On note aussi, la présence de variables commencant par _; ce sont des variables


anonymes et elles sont utilisées pour des variables dont on ne désire pas connaître les
valeurs.
Par exemple, soit la requête PROLOG:
?- cousin(lucas,_) répond soit par 'Yes', soit par 'No'...
La valeur correspondante à la variable qui n'est pas donnée n'est pas indispensable pour
ce cas particulier.

III.2.1.3) Pour les prédicats:


ce sont des chaînes de caractères commençant par des minuscules, mais qui possède
des arguments; raison pour ne pas être confondue avec des constantes.
Exemple:
grand(lucas), grand-père(arsene, lucas), ami(lucas, florient).
III.2.1.4) Pour les faits:
Un fait est une clause de Horn positive (sans littéraux négatifs). Il exprime une
connaissance factuelle, et un fait se termine toujours par un point.
Exemples:
Soit le fait suivant: homme(ali).
Cette formule exprime le fait que ali est un homme.

ami(lucas, florient);
cette formule exprime le fait que florient soit un ami de lucas.

III.2.1.5) Pour les règles:


Les règles sont des clauses ayant un littéral positif et un ou plusieurs littéraux
négatifs.
Elles sont de la forme A :- B1, , Bn (A  B1, , Bn pour la programmation logique
en général), avec A la tête, et les Bi représentent la queue.
Cette formule veut dire pour que A soit satisfaite, il faut que les Bi soient
simultanément satisfaites;
ou plutôt: si ( B1    Bn : vrai), alors : (A: aussi vraie).
Chaque règle se termine par un point.
Exemple III.2.1.5 :
Soient les deux règles suivantes :
grand-pere(X, Y) :-pere(X, Z), pere(Z, Y).
grand-pere(X, Y) :-mere(X, Z'), pere(Z',Y).
Ces deux règles expriment la connaissance suivante :
Pour que Y soit grand père de X, il faut qu'il existe un Z tel que Z est père de X et
Y est père de Z ; ou Z' est mère de X et Y est père de Z'.

On peut noter les règles des exemples 3.2.8 et 3.2.9 respectivement


comme suit :
grand-pere(X, Y) :-pere(X,Z),pere(Z,Y) ;mere(X,L),pere(L,Y).
freres(X, Y) :-pere(X,Z),pere(Y,Z) ;mere(X,H),mere(Y,H).
Les virgules "," expriment la conjonction et les point-virgules " ;" exprime la
disjonction.

III.2.1.6) Pour les buts:


Appelés parfois questions, les buts permettent d'exprimer une interrogation sur
l'existence de données vériant les prédicats.
La syntaxe d'un but est la suivante : ?-B, ou bien: ?-B1, ¼ , Bn.
Exemples:
?-cousin(X, Y).
Ce but vérie l'existence de données X et Y avec X est cousin de Y.
Pour un programme plus élaboré;
homme(lucas).
homme(andre).
pere(lucas, tim).
pere(andre, simon).
frere(tim, simon).
oncle(X,Y) :-pere(X, Z), frere(Z, Y).
cousin(X,Y) :-pere(X, Z), pere(Y, T), frere(Z, T).
Soient les buts suivants :
?-oncle(lucas, simon).
Prolog répond par Yes.

?-pere(M, N).
Prolog répond par M=lucas, N=tim, Yes.

En Prolog, si on veut avoir une autre réponse possible, on tape ;


d'où on aura en plus;
M=andre , N=simon, Yes.
Et si on tape encore le caractère " ;" on aura la réponse: .No.

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).

1. Donnez la reponse aux requêtes suivantes, et justifier :


| ?- station-voisine(tottenhamcourtroad,W).
| ?- station-voisine(charingcross,W).
| ?- station-voisine(W,Y,Z), connectee(Y, charingcross, Z).
| ?- connectee(greenpark, charingcross, jubilee).

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).

Quelles reponses obtenons-nous ? Pourquoi ?


?-atteignable( oxfordcircus, charingcross, R).
?-atteignable( oxfordcircus, northern).

Pouvez-vous nous donner toutes les stations par paire atteignables ?

III.2.2) Prédicats reccurents et utiles: PROLOG

III.2.2.1) Prédicat: “is”

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.

Les opérateurs relationnels


Les opérateurs <; >;=<;>= et = n = eectuent le calcul avant de comparer les
valeurs. Pour utiliser ces opérateurs, les variables doivent être instanciées.
Exemple II.2.2.1: ?-X>2.
No
?-4>3.
Yes
?-X=3.
Yes
?-Y=5.
Yes
?-X>Y.
No

Introduisons les prédicats de sauvegarde : “findall”, “bagof” et “setof”.

III.2.2.2) Le prédicat findall


Ce prédicat permet de sauvegarder les solutions d'un but dans une liste.
Celui-ci s'écrit: “ findall(Objets, But, Liste).”

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=[ ].

III.2.2.3) Le prédicat bagof


Ce prédicat aussi récupère les résultats dans une liste, mais bagof échoue en cas de non
solution. Aussi, le résultat diffère quand il y a des variables libres dans But.
D'où, bagof sépare les résultats en fonction des valeurs de ces variables libres :
III.2.2.4) Le prédicat setof
Ce prédicat est très utile, car il a les mêmes attributs que bagof; la différence est qu'il
élimine les doublons et trie la liste des résultats.

III.2.2.5) Le prédicat assert


Ce prédicat permet d'ajouter dynamiquement une clause au programme. Mais, il
faudrait que les prédicats concernés soient déclarés 'dynamic', avec leur arité.

Exemple: Soit le programme suivant:


dynamic homme.
homme(lucas).
homme(simon).
femme(lisa).
homme(andre).
femme(malika).
fiemme(sandra).
Si nous voulons ajouter une clause pour dire que franck est un garçon, on exécute la
requête suivante :
assert(homme(franck)).

III.2.2.6) Le prédicat retract


Ce prédicat permet le retrait de la première clause du programme qui s'unie avec
son argument, tant qu'il a été déclaré dynamic au début.
Exemple: retract(homme(ali)).

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.2.7) Le prédicat trace; (Trace d'exécution)


Le prédicat trace(but), permet de voir tous les appels et leur résultats logiques lors de la
résolution d'un but.
La syntaxe est la suivante : ?-trace.

III.2.3) Arbres et listes

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.

On a une notation sous PROLOG, permettant de distinguer la tête de la liste du reste de


ses éléments.
Celle-ci sépare clairement la tête du reste, grâce à: [X/L], où X est l'élément de tête et L
est le reste de la liste.
Par exemple,
Considérons la liste [a, 2, 3];
si a correspond à la tête, on peut re-écrire la liste comme: L = [a /2, 3].
Cette notation est très utilisée en Prolog, spécialement pour isoler plusieurs éléments en
tête de n'importe quelle liste.

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]

?-append(L1, [3,4,5], [1,2,3,4,5]).


L1=[1,2]
?-append([1], L2, [1,2,3,4,5]).
L2=[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]

?-inverser (L, [c, b, a]).


L=[a, b, c]

Longeur d'une liste


Le but ici bien sur est de préciser combien d'élements sont contenus dans la liste. Le
prédicat longueur est utilisé suivant l'algorithme suivant:

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.

Vous aimerez peut-être aussi

pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy