Vous êtes sur la page 1sur 63

Programmation logique

Prolog

Programmation Logique H. Jamoussi Elkamel , FSM

Chapitre 1: Programmation logique


et Prolog

H. Jamoussi Elkamel , FSM 2


Programmation Logique

1
Pourquoi la programmation
• On écrit des programmes pour résoudre des problèmes.
• Un problème est spécifié par :
– Les entrées :
• les données (les faits),
• les contraintes et les hypothèses (règles)
– Les sorites : la conclusion (but)
• Résoudre un problème revient à trouver un chemin
de résolution à partir des entrées vers la sortie c’est-
à-dire donner une démonstration de la conclusion
à partir des entrées.
H. Jamoussi Elkamel , FSM 3
Programmation Logique

Exemple : parcours d’un graphe


• Soit le graphe orienté suivant :

• Dans les graphes orientés, les chemins (les arcs) sont


à sens unique entre deux sommets (ou nœuds).

H. Jamoussi Elkamel , FSM 4


Programmation Logique

2
Exemple : parcours d’un graphe
• On cherche à écrire un programme pour répondre
aux questions :
1. Peut-on aller de ‘a’ vers ‘c’?
2. Comment aller de ‘a’ vers ‘e’ ?
3. Quels sont les chemins menant à ‘e’ ?
4. Comment aller de ‘a’ à ‘e’ en passant de ‘d’ ?
…..

H. Jamoussi Elkamel , FSM 5


Programmation Logique

Les principaux paradigmes en programmation

o Programmation impérative (dire comment résoudre) ;


o Programmation orientée objets
o Programmation déclarative (dire quoi résoudre).

H. Jamoussi Elkamel , FSM 6


Programmation Logique

3
Les principaux paradigmes en programmation
• La programmation impérative (procédurale)
o Dire comment résoudre un problème
o se traduit par une démarche algorithmique (suite
d’instructions) qui décrit la façon de traiter les données pour
atteindre un résultat par une série d’actions (instructions).
o L’ordre d’exécution des instructions est impératif : déterminé
à l’avance.
o Le déroulement du programme est parfaitement déterministe.
o Importance des structures de contrôle
o Exemples : C, Basic, Pascal, Fortran, Java, …

H. Jamoussi Elkamel , FSM 7


Programmation Logique

Les principaux paradigmes en programmation


• La programmation orientée objet
o Décomposition d’un objet en attributs et méthodes.
o Notions de classe et d’interface, de sous-classe,
d’héritage, de polymorphisme
o Exemples : Smalltalk, C++, Java, C#, ActionScript,
VisualBasic, Ada, Python.

H. Jamoussi Elkamel , FSM 8


Programmation Logique

4
Les différents mode de programmation
• La programmation déclarative
– Dire quoi résoudre c'est-à-dire spécifier le problème et
non comment faire pour le résoudre.
– Par exemple, les pages HTML sont déclaratives car
elles décrivent ce que contient une page (texte, titres,
paragraphes, etc.) et non comment les afficher
(positionnement, couleurs, polices de caractères, etc.).
– C'est une forme de programmation sans effets de bord,
ayant généralement une correspondance avec la logique
mathématique.

H. Jamoussi Elkamel , FSM 9


Programmation Logique

La programmation déclarative
• Il existe plusieurs formes de la programmation
déclarative :

– La programmation descriptive,
– La programmation fonctionnelle,
– La programmation logique,
– la programmation par contraintes,

H. Jamoussi Elkamel , FSM 10


Programmation Logique

5
La programmation déclarative

– La programmation descriptive,

• à l'expressivité réduite,
• qui permet de décrire des structures de données
• (par exemple, HTML, XML, LaTex)

H. Jamoussi Elkamel , FSM 11


Programmation Logique

La programmation déclarative

– La programmation fonctionnelle

• qui effectue une description du résultat comme une


composition de fonctions mathématiques
• LISP, Caml, MatLab, Maple..,

H. Jamoussi Elkamel , FSM 12


Programmation Logique

6
La programmation déclarative
– La programmation logique
• Le programmeur ne s’occupe pas de la manière d’obtenir le résultat;
par contre, le programmeur doit faire la description du problème à
résoudre en décrivant les objets concernés, leurs propriétés et les
relations qu’ils vérifient (les faits) ainsi que les règles logiques
attendues d’une solution,
• Cette description constitue la base de connaissance
• Puis, spécifier le résultat comme une question
• Ensuite, le mécanisme de résolution intégré au langage, général et
universel, parcourt de façon non déterministe toutes les possibilités du
problème et calcule les solutions
• Exemple: ProLog, Python..
• En Prolog, la résolution s’appuie sur une déduction logique de toutes
les conséquences de la base de connaissance via l’unification
Programmation Logique H. Jamoussi Elkamel , FSM

La programmation déclarative
– la programmation par contraintes,
• consiste à formuler un problème en termes
d’inconnues soumises à des contraintes, énoncé
dans un langage de logique du premier ordre et
faisant intervenir des opérations et des relations du
domaine de calcul.
• Résoudre la contrainte, et par là le problème,
consiste à trouver les valeurs à attribuer aux
variables libres de la formule pour la rendre vraie.
ce qui unifie la programmation logique et la
programmation mathématique
H. Jamoussi Elkamel , FSM 14
Programmation Logique

7
Un programme Logique

– Un programme logique
• Est adapté au calcul symbolique et au raisonnement;
• Permet d’exprimer de façon naturelle les textes du
langage naturel ;
• permet d’énoncer un problème dans un langage du
premier ordre sous forme d’une suite de fait et de
règles (base des connaissances).
– Exécuter un programme logique revient à poser
une question

H. Jamoussi Elkamel , FSM 15


Programmation Logique

La programmation logique

• Programmation impérative Programmation logique

Procédure Formule
programme Ensemble (conjonction) de formules
appel de procédure question
exécution preuve
passage de paramètres substitution (unification)

Remarque: dans la programmation logique il n’y a pas d’instruction, pas


d’affectation et pas de boucles implicites..
H. Jamoussi Elkamel , FSM 16
Programmation Logique

8
La programmation logique
la question = but
( Une formule existentielle x Q )

le programme Démonstrateur de théorème


(Un ensemble de formules P ) pour une formule
= base des connaissances = Moteur d’inférence

Non, il n'existe pas d’instanciation L'ensemble instanciations


pour x telle que Q soit pour x telles que Q soit une
une conséquence logique de P. conséquence logique de P.

H. Jamoussi Elkamel , FSM 17


Programmation Logique

Exemple : parcours d’un graphe


• Soit le graphe orienté suivant :

• Dans les graphes orientés, les chemins (les arcs) sont


à sens unique entre deux sommets (ou nœuds).

H. Jamoussi Elkamel , FSM 18


Programmation Logique

9
Exemple : parcours d’un graphe
• On cherche à écrire un programme pour répondre
aux questions :
1. Peut-on aller de ‘a’ vers ‘c’?
2. Comment aller de ‘a’ vers ‘e’ ?
3. Quels sont les chemins menant à ‘e’ ?
4. Comment aller de ‘a’ à ‘e’ en passant de ‘d’ ?
…..

H. Jamoussi Elkamel , FSM 19


Programmation Logique

Exemple : modélisation d’un graphe orienté

/*base des connaissances « graph.pl » */


/* Les faits */
/* les prédicats arc(Source, Destination) pour décrire un
arc entre la source et la destination */
arc(a,b).
arc(a,e).
arc(b,e).
arc(c,e).
arc(e,d).
arc(d,a).
H. Jamoussi Elkamel , FSM 20
Programmation Logique

10
Exemple : modélisation d’un graphe orienté
/*base des connaissances */
/* Les faits */
/* arc(Source, Destination) */
arc(a,b). arc(a,e).
arc(b,e). arc(c,e).
arc(e,d). arc(d,a).
/* les règles */
/* la règle chemin(Source, Destination) pour décrire qu’il
existe un chemin entre la source et la destination */
chemin(X,Y) :- arc(X,Y).
chemin(X,Y):- arc(X,Z), chemin(Z,Y).
H. Jamoussi Elkamel , FSM 21
Programmation Logique

Exemple : modélisation d’un graphe orienté


/*poser des questions à la base de connaissances « graph.pl»
?- consult(graph). /* charger la base de connaissance*/
true
?- chemin(e, a).
true
?- arc(a,X).
X=b ;
X=e.
?- chemin(a,c).
boucle!
H. Jamoussi Elkamel , FSM 22
Programmation Logique

11
Syntaxe de Prolog

• Les éléments de base d’un programme Prolog sont les


– prédicats
– et les termes.

Dans chemin(a, X).


– chemin est un (symbole de) prédicat.
– a est un terme (une constante).
– X est un terme (une variable).

H. Jamoussi Elkamel , FSM 23


Programmation Logique

La programmation logique
• Les principales caractéristiques d’un langage de
programmation logique :
– Symbolique : tous les objets manipulés sont des
symboles (constantes, variables, etc..)
– Haut niveau: aucune gestion de la mémoire et masquage
du caractère impératif de la machine;
– Déclaratif : on s’intéresse plus à dire « quoi faire » ,
non « comment faire »
– Le programmeur doit définir les faits et les règles
logiques attendues d’une solution et laisser le
compilateur les transformer en séquence d’instructions.
H. Jamoussi Elkamel , FSM 24
Programmation Logique

12
Domaines d’application de La programmation
logique
La programmation logique est Adaptée aux problèmes relevant de
l’Intelligence Artificielle
– Planification,
– Raisonnement automatique (systèmes experts, diagnostic des
pannes , les automates …)
– Traitement de la langue naturelle (l’analyse syntaxique..)
– Interrogation des bases de données déclaratives
– Vérification de la correction de programme
– Résolution symbolique d’équations
– Web Sémantiques …

H. Jamoussi Elkamel , FSM 25


Programmation Logique

Rappels de Logique mathématique


• La logique = Un outil pour modéliser et valider le
raisonnement humain (“raisonnement naturel”)
• Dans la logique classique ( Logique mathématique)
on a :
– La logique des propositions = la logique d’ordre 0
– La logique des prédicats = la logique de 1er ordre

H. Jamoussi Elkamel , FSM 26


Programmation Logique

13
La Logique des propositions
a) Vocabulaire
– Ensemble de variables propositionnelles A, B, C
– Connecteurs logiques: , , ¬, , 
– Parenthèses: (, )
b) Syntaxe
– Les variables propositionnelles sont des formules atomiques
– Si P et Q sont des formules alors (P  Q), (P  Q), ¬P, (P  Q),
(P  Q)
c) Démonstration
– modus ponens : A, A  B
B
– La résolution qui se base sur la règle de coupure: A, ¬ A  B
Programmation Logique H. Jamoussi Elkamel , FSM B 27

La Logique des prédicats du 1er ordre


a) Vocabulaire du langage
– Ensemble dénombrable de variables: x, y,…
– Pour tout entier naturel n,
Fn = ensemble de symboles fonctionnels d’arité n: F(a1,a2,…,an)
F0 = ensemble des constantes (a, b, c,…)
– Pour tout entier naturel n,
Rn = symboles relationnels d’arité n ou prédicats n-aires:
R(a1,a2,…,an )
– Connecteurs logiques: , , ¬, , 
– Quantificateurs: ∀, ∃
– Parenthèses: (, )
H. Jamoussi Elkamel , FSM 28
Programmation Logique

14
La Logique des prédicats du 1er ordre
b) Syntaxe
– Termes:
• Les constantes et les variables sont des termes
• Si t1,t2,…,tn sont des termes et f un symbole de fonction alors
f (t1,t2,…,tn) est un terme.
– Formules:
• Si P prédicat n-aires et les ti sont des termes alors P(t1,t2,…,tn )
est une formule atomique
• Si P et Q sont des formules alors (P  Q), (P  Q),¬P, (P  Q),
(P  Q) sont des formules.
• Si P est une formule alors ∀x P, ∃x P sont des formules

H. Jamoussi Elkamel , FSM 29


Programmation Logique

La Logique des prédicats du 1er ordre


Terminologie complémentaire
– Littéral est une Formule atomique ou la négation d’une formule
atomique: P, ¬P
P est appelé littéral positif , ¬P est appelé littéral négatif

– Formule normale conjonctive prenex


si tous les quantificateurs sont en tête de la formule
Q1 x1 ,Q2 x2, .. Qn Xn G
Avec Qi  {∀, ∃} et
G est en forme normale conjonctive

∀x ∃y ( (P(x,y)  Q(x,y))   Q(x,x) )


H. Jamoussi Elkamel , FSM 30
Programmation Logique

15
La Logique des prédicats du 1er ordre
Clause
Formule dont les variables sont (implicitement)
quantifiées universellement en tête (=formules prenexes)
exprimée comme une disjonction de littéraux

Exemple: P  ¬Q  ¬R  S
– Clause de Horn
Clause ayant au plus un littéral positif
Exemples: P  ¬Q  ¬R  ¬S
¬Q  ¬R
H. Jamoussi Elkamel , FSM 31
Programmation Logique

La Logique des prédicats du 1er ordre


Résultats importants
• Toute formule F peut être transformée en un ensemble de
clauses équivalent (forme normale, forme prenex,
sckolémisation, forme clausale)
Mais…
toute formule ne peut pas être mise sous forme de clauses
de Horn
• ie la logique définie par l’ensemble des clauses de Horn est
un sous-ensemble de la logique du 1er ordre
• La logique restreinte aux clauses de Horn est un sous-
ensemble décidable de la logique du 1er ordre
H. Jamoussi Elkamel , FSM 32
Programmation Logique

16
La Logique des prédicats du 1er ordre
c)Démonstration par la méthode de résolution
• Le principe de résolution est une règle d’inférence saine,
i.e. tout résolvant est une conséquence logique des deux
clauses parentes

• Pour appliquer le principe de résolution à des clauses


non concrètes, on définit l’unification, afin de
rechercher des littéraux complémentaires.

H. Jamoussi Elkamel , FSM 33


Programmation Logique

Chapitre 2: Le langage Prolog

H. Jamoussi Elkamel , FSM 34


Programmation Logique

17
Prolog
• Prolog est un acronyme pour Programmation Logique.
• Prolog est né du besoin de pouvoir traiter les langages
naturelles par ordinateur et en particulier la grammaire.
• C’est un langage de représentation de connaissance,

• Il est utilisé principalement en Intelligence Artificielle.


• C’est un langage de programmation logique basé sur la
logique du premier ordre restreinte aux clauses de Horn.

H. Jamoussi Elkamel , FSM 35


Programmation Logique

Prolog
• Ce qui est original, c'est qu'en Prolog, il suffit de décrire ce
que l'on sait sur le domaine étudié, en vrac, dans l'ordre
où ça nous vient (en Intelligence Artificielle, on appelle
cela une base de connaissances).

• Puis on décrit notre problème (sous forme d’une question


à propos de ce domaine ) ,

• Prolog va nous le résoudre et nous répondre à la question,


sans qu'on n'ait à lui dire comment faire !

H. Jamoussi Elkamel , FSM 36


Programmation Logique

18
Prolog
• Prolog définit les problèmes à l'aide
– d'un ensemble de faits élémentaires les concernant;
– et de règles de logique leur associant des conséquences
plus ou moins directes.

• Ces faits et ces règles, qui forment la base de


connaissances, sont exploités par un démonstrateur de
théorème ou moteur d'inférence, en réaction à une
question ou requête(buts).

H. Jamoussi Elkamel , FSM 37


Programmation Logique

Prolog
– Prolog est un langage de très haut niveau
– C’est un petit langage avec une syntaxe simple et sans
types statiques (pas de tableau).
– Les identificateurs pour réserver des cases mémoires, les
tableaux, les pointeurs n’existent pas,
– Ne possède pas la notion d’instruction.
– Un programme en prolog est très concis
– Le langage prolog est très gourmand en temps de calcul
et en mémoire, mais certaines applications programmées
en prolog tournent plus rapidement si elles étaient
conçues dans un langage classique
H. Jamoussi Elkamel , FSM 38
Programmation Logique

19
Prolog

• Le langage Prolog n’est pas normalisé, Ils existent de


nombreuses implémentations différentes de prolog.
Chacune avec ses particularités sémantique et syntaxique

• Deux familles / deux syntaxes Prolog


– l ’école d’Edimbourg (standard principal Prolog)
– l ’école de Marseille

H. Jamoussi Elkamel , FSM 39


Programmation Logique

Historique
• Prolog est né en France (Marseille) sur les idées de Herbrand (1936)
et Robinson (1965) et a servi de base aux programmes de recherche
japonais sur les ordinateurs de 5ème génération.
– 1965 : John Robinson décrit les principes théoriques de la
programmation logique via la règle de résolution.
– 1972 : création de Prolog par A. Colmerauer et Ph. Roussel à
Marseille (Luminy), pour le traitement des langues naturelles .
– 1977: premier compilateur par D.H. Warren à Edimbourg
– 1980 : reconnaissance de Prolog comme langage de
développement en Intelligence Artificielle
– Depuis plusieurs versions ont été développées avec un standard
ISO, plusieurs extensions possibles, dont une tournée vers la
programmation par contraintes.

H. Jamoussi Elkamel , FSM 40


Programmation Logique

20
Information complémentaires sur Prolog
• La syntaxe et la sémantique du langage Prolog est l’ensemble des
règles qui définissent comment un programme Prolog est écrit et
interprété.
• Les règles sont énoncées dans la norme ISO/IEC 13211, bien qu'il
existe des différences dans les implémentations de Prolog, voir:
http://en.wikipedia.org/wiki/Comparison_of_Prolog_implementations
• Dans ce cours nous utiliserons la syntaxe dite Edimbourg.
• Les deux implémentations suivantes sont gratuites et disponibles sur
différentes plateformes.
– GNU Prolog http://gprolog.org (par l'INRIA)
– SWI-Prolog Fonctionne sous Linux, Windows et MacOS. Disponible
gratuitement (licence BSD) au département informatique de l'Université de
Psychologie d'Amsterdam http://www.swi-prolog.org/download/stable
• La version que nous allons utiliser en TP est SWI-Prolog
H. Jamoussi Elkamel , FSM 41
Programmation Logique

Bibliographie
• Cours en ligne http://pcaboche.developpez.com/article/prolog/presentation/
• http://www.learnprolognow.org/ (in English)
Pour aller plus loin:
• Foundations of Logic Programming, J. W. Lloyd, Springer-Verlag New
York, Inc. New York, NY, USA ©1984 ISBN:0-387-13299-6
• Prolog, F. Giannesini, H. Kanoui, R. Pasero et M. Van Caneghem,
InterÉditions, 1985
• Programming in Prolog, W.F. Clocksin, C.S. Mellish, Springer-Verlag
Telos; 4th edition (September 1994)
• The art of Prolog , 2nd Edition, Advanced Programming Techniques, L.
Sterling, E. Shapiro, the MIT Press, 1994, ISBN-13: 978-0-262-19338-2
• Logic Programming and Prolog (2nd ed), Ulf Nilsson and Jan Maluszynski,
2000

H. Jamoussi Elkamel , FSM 42


Programmation Logique

21
Programme ProLog
• Programme Prolog =ensemble de clauses de Horn

• Clause de Horn:
On appelle clause de Horn toute clause de la LP1 ayant au plus une
formule atomique (littéral) positive
Trois types de clause de Horn
Type 1 H1 ∨  H2 ∨ ... ∨  Hn ∨ C
Type 2 C
Type 3  C1 ∨  C2 ∨ ... ∨  Cn

H. Jamoussi Elkamel , FSM 43


Programmation Logique

Programme ProLog
Clause de horn

Type 1: règles implication: production de nouvelles connaissances


H1 ∨  H2 ∨ ... ∨  Hn ∨ C H1  H2  ...  Hn  C
si (x est un homme) et (x est un des deux parents de y)
alors x est père de y
Type 2 : faits Affirmation de connaissances supposées vraies a priori (assertions)
C C

Type 3 : Buts Question à laquelle on souhaite répondre par déduction


 C1 ∨  C2 ∨ ... ∨  Cn C1  C2  ...  Cn ?

H. Jamoussi Elkamel , FSM 44


Programmation Logique

22
Programme ProLog

Clauses de Horn Prolog


Règles Règles
H1  H2  ...  Hn  C C :- H1, H2, .. , Hn .
Faits Faits
C C.
Questions Questions
C? ?- C.
C1  C2  ...  Cn ? ?- C1, C2, ... , Cn .

H. Jamoussi Elkamel , FSM 45


Programmation Logique

Programme ProLog
• Programme Prolog =ensemble de clauses de Horn
• Clause de Horn sont
– Faits
– Règles
– Questions
• Une clause de Horn est formée des prédicats
• Un prédicat est une relation entre des termes
Exemple: x est père de y : père(X,Y)
• Les prédicats manipulent des termes
• Un terme est soit
– une variable
– un terme élémentaire
– un terme composé
H. Jamoussi Elkamel , FSM 46
Programmation Logique

23
Programmes Prolog
exemple de programme prolog
/* faits*/
homme(ali).
homme(said).
homme(salah).
pere(omar, ali).
pere(omar,said).
pere(ali, salah).
/* règles */
frere(X,Y):-homme(X), homme(P), pere(P,X), pere(P,Y).
H. Jamoussi Elkamel , FSM 47
Programmation Logique

Syntaxe de Prolog

le lexique (simplifié)
• Constantes : chaînes de caractères dont le premier est
minuscule

• variables : chaînes de caractères dont le premier est


majuscule ou _

• nombres : en notation décimale

• les ponctuations : :- , . ( ) ; ! | [ ]
H. Jamoussi Elkamel , FSM 48
Programmation Logique

24
Syntaxe de Prolog : les termes

terme ::= variable | terme-simple | terme-complexe

terme-simple ::= constante | nombre |chaine

terme-complexe ::= constante( liste-termes )

liste-termes ::= terme { , terme }

H. Jamoussi Elkamel , FSM 49


Programmation Logique

les variables
• Une variable Prolog est une variable au sens logique ou
mathématique.
• une variable est un objet indéfinie du problème, elle est
l’équivalent d’une inconnue en mathématique
=> une fois valuée une variable ne peut pas changer de
valeur

• Syntaxe
Une variable est une chaîne alphanumérique commençant
par une lettre majuscule ou le caractère _

H. Jamoussi Elkamel , FSM 50


Programmation Logique

25
les variables

• Exemples : X, Toto, Y23, _toto, _8, _

• _ : est la variable inconnue (variable anonyme)


Elle désigne une variable dont la valeur ne nous intéresse pas

Si on veut savoir les frères de ali alors il suffit de poser la question


?- frere(X, ali).

Si on veut savoir si ali a un frère alors il suffit de poser la question


?- frere(_, ali).
on ne désire pas connaitre la valeur prise par la variable anonyme.

H. Jamoussi Elkamel , FSM 51


Programmation Logique

Le terme Simple (atome)


• Un terme simple (élémentaire) représente un objet simple de
l’univers, c’est un objet défini du problème.
• Un terme simple est soit
– un nombre (entier ou flottant)
– chaîne de caractère entre guillemets ou quotes
Exemples : ’’toto’’, ’’Toto’’, ‘abc’
– une constante symbolique (appelée atome) : c’est une chaîne
alpha-numérique commençant par une lettre minuscule
Exemples : toto, x, y23
• Les commentaires sont encadrés par /*…*/ ou
• // commentaire sur une seule ligne
H. Jamoussi Elkamel , FSM 52
Programmation Logique

26
Les termes complexes
• Un terme complexe (composé) représente un objet structuré
de l’univers (une structure)
• Syntaxe :
terme-complexe ::= constante( liste-termes )
liste-termes ::= terme { , terme }
Ou encore

terme-complexe ::= nomDeFonction(terme1,…,termeN)

où nomDeFonction est une chaîne alpha-numérique


commençant par une lettre minuscule
H. Jamoussi Elkamel , FSM 53
Programmation Logique

Les termes complexes


• Exemple :
– adresse(‘’rue des Martyres’’, 30, Ville)
terme composé d’arité 3 représentant l’adresse
décrite par
• la chaîne de caractères ‘’rue des Martyres’’,
• l’entier 30
• et la variable Ville

– auteur(jean_paul, sartre) terme composé d’arité 2


– livre(la_nausee, auteur(jean_paul, sartre)) terme
composé d’arité 2

H. Jamoussi Elkamel , FSM 54


Programmation Logique

27
Les termes complexes
• Exercice:
on se propose d’écrire un programme permettant de donner des
informations sur un ensemble de cours. Chaque cours est
caractérisé par sa matière, par le nom et le prénom de
l’enseignant, par son horaire, et la salle où le cours à lieu.

On a donc un ensemble d’assertions comme « le cours


d’intelligence artificielle est fait par Paul Durant et il a lieu
les lundis de 9 à 11 dans le département Informatique, salle
105 » à représenter

H. Jamoussi Elkamel , FSM 55


Programmation Logique

Les termes complexes


Deux représentations possibles:
• 1ère représentation
cours( Matiere, Nom_enseignant, Prenom_enseignant,
Jour, De, A, Departement, Salle)

L’assertion (fait) est équivalente à

cours(ia, durant, paul, lundi, 9, 11, info, 105).

H. Jamoussi Elkamel , FSM 56


Programmation Logique

28
Les termes complexes
• 2ème représentation
enseignant( Nom_enseignant, Prenom_enseignant)
horaire( Jour, De, A)
local ( Departement, Salle)

cours( Matiere, enseignant (Nom_enseignant,


Prenom_enseignant), horaire (Jour, De, A), local
(Departement, Salle))

L’assertion est équivalente à


cours(ia, enseignant(durant, paul), horaire(lundi, 9,
11), local(info,105)).
H. Jamoussi Elkamel , FSM 57
Programmation Logique

Les prédicats (formules atomiques)


• Un prédicat est un jugement ou une relation existant entre
des termes
* relation entre objets
* propriété d’un objet
• En Prolog, un prédicats possède :
* un nom
* un nombre d’arguments = arité
* couleur(Voiture, rouge) : couleur est un prédicat d’arité 2
• Application du prédicat à ses arguments = formule
atomique

H. Jamoussi Elkamel , FSM 58


Programmation Logique

29
Les prédicats (formules atomiques)
• Syntaxe :
predicat ::= nom-predicat [ ( liste-termes ) ]
nom-predicat::= constante
constante est le nom de la relation qui lie les termes de la
liste-termes.
constante est une chaîne alpha-numérique commençant
par une lettre minuscule.
• Exemples :
- pere(jean, paul)

relation de nom pere qui lie les constantes symboliques jean et paul
H. Jamoussi Elkamel , FSM 59
Programmation Logique

Les clauses de Horn


• Une clause de Horn est soit
– une affirmation inconditionnelle (un fait)
– une affirmation conditionnelle (une règle)
– une question (un but à démontrer)

• Syntaxe
clause ::= fait | regle

H. Jamoussi Elkamel , FSM 60


Programmation Logique

30
Les faits
• Un fait est une clause de Horn positive, sans littéraux
négatifs
• Un fait signifie que le prédicat est vrai et ce sans condition
• Les faits Constituent une partie des données d’un problème
= connaissance de base établies apriori.
• Exemples :
- pere(jean, paul).
indique que la relation « jean est le père de paul » est
toujours vraie
- egal(X,X).
Indique que la relation « X est égal à X » est toujours vraie.
H. Jamoussi Elkamel , FSM 61
Programmation Logique

Les faits
• Syntaxe :
fait ::= predicat.
Se termine toujours par un point

• Remarque : dans la base de connaissance la conjonction


des faits est interdite
fait1, fait2. fait1.
fait2.
Exemple:Hélène est une fille de cinq ans=(fille(helene) age(helene,5))
fille(helene), age(helene,5). Faux
fille(helene).
age(helene,5).
H. Jamoussi Elkamel , FSM 62
Programmation Logique

31
Les règles
• Une règle décrit à quelle condition une relation est vraie
= règle de manipulation de la connaissance
• Les règles sont des clauses ayant un seul littéral positif (a
une seule conclusion) et un ou plusieurs littéraux négatifs.

• Exemples : les filles aiment les poupées


– si X est une fille alors X aime les poupées
(ou encore on peut dire X aime les poupées si X est une fille) qui
s'écrit :
aime(X, poupees) :- fille(X).
Le « si » s’écrit « :- » en Prolog
H. Jamoussi Elkamel , FSM 63
Programmation Logique

Les règles
• Syntaxe :
regle ::= conclusion :- corps.
Une règle Se termine toujours par un point
Conclusion ::= predicat
corps ::= predicat { , predicat }

conclusion : est la tête de la clause


corps: est le corps de la clause, c’est un ensemble des clauses
séparées par une virgule
• Remarque : la conjonction des conclusion est interdite
concl1, concl2 :- corps. concl1 :- corps.
concl2 :- corps.

H. Jamoussi Elkamel , FSM 64


Programmation Logique

32
Les règles
grand-pere(X,Y) :- pere(X,Z) , parent(Z,Y).
indique que la relation « X est grand-père de Y est vraie si X est
père d’un individu Z et que Z est parent de Y »

meme-pere(X,Y) :- pere(P,X) , pere(P,Y).


Indique que la relation « X et Y ont le même père s’il existe un
individu P qui est le père de X et le père de Y »

H. Jamoussi Elkamel , FSM 65


Programmation Logique

Les règles
• Remarque
– les variables apparaissant dans la tête d’une clause sont
quantifiées universellement
– les variables apparaissant uniquement dans le corps d’une
clause sont quantifiées existentiellement

grand-pere(X,Y) :- pere(X,Z) , pere(Z,Y).

signifie plus exactement :


Pour tout X et pour tout Y, X est grand-père de Y s’il
existe Z tel que X est père de Z et que Z est le père de Y »
H. Jamoussi Elkamel , FSM 66
Programmation Logique

33
Programmes Prolog

• Un programme Prolog est une suite de clauses de Horn

Syntaxe:

programme-prolog ::= clause { clause }

H. Jamoussi Elkamel , FSM 67


Programmation Logique

Programmes Prolog
exemple de programme prolog
homme(ali).
homme(said).
homme(salah).
pere(omar, ali).
pere(omar,said).
pere(ali, salah).
frere(X,Y):-homme(X),homme(P),
pere(P,X),pere(P,Y).

H. Jamoussi Elkamel , FSM 68


Programmation Logique

34
Programmes Prolog
• Exercice :
Ecrire des règles pour définir la notion de personne
• « pour tout x, x est une personne , si x est un homme ou x est une
femme »
 X ( (femme(X)  homme(X))personne(X) )
 X (  (femme(X)  homme(X))  personne(X))
 X (( femme(X)  homme(X))  personne(X))
 X( ( femme(X)  personne(X))  (homme(X)  personne(X)) )
Deux clauses de Horn : ( femme(X)  personne(X))
(homme(X)  personne(X))
• Donne 2 règles : personne(X) :- homme(X).
personne(X) :- femme(X).
H. Jamoussi Elkamel , FSM 69
Programmation Logique

Programmes Prolog
• Deux clauses de même tête sont liées par un Et-logique

personne(X) :- homme(X).
personne(X) :- femme(X).

Signifie : pour tout X, X est une personne si X est un homme et


X est une personne si X est une femme
(ce qui revient à dire: pour démontrer que X est une personne, il
suffit de démontrer que X est un homme ou que X est une
femme)
• => l’ordre dans lequel sont écrites les clauses portant sur
un même prédicat est significatif
H. Jamoussi Elkamel , FSM 70
Programmation Logique

35
Syntaxe de Prolog
la grammaire (simplifiée)
• programme-prolog ::= clause { clause }
• clause ::= fait | regle
• fait ::= predicat.
• regle ::= conclusion :- corps.
• conclusion::= predicat
• corps ::= predicat { , predicat }
• predicat ::= nom-predicat [ ( liste-termes ) ]
• nom-predicat::= constante
• liste-termes ::= terme { , terme }
• terme ::= terme-simple | terme-complexe
• terme-simple ::= constante | variable | nombre
• terme-complexe ::= constante ( liste-termes )
H. Jamoussi Elkamel , FSM 71
Programmation Logique

Syntaxe de Prolog
Exercice
On considère le programme ci-dessous :
oiseau(Canari);
carnivore(Chat), carnivore(Chien);
animal(X):- carnivore(X);
animal(X):- Oiseau(X);
especevivante(animal(X)).

Ce programme contient plusieurs erreurs de syntaxe. Pouvez vous


les détecter et les corriger.

H. Jamoussi Elkamel , FSM 72


Programmation Logique

36
Syntaxe de Prolog

oiseau(canari).
carnivore(chat). carnivore(chien).
animal(X):- carnivore(X).
animal(X):- oiseau(X) .
especevivante(X):-animal(X).

H. Jamoussi Elkamel , FSM 73


Programmation Logique

Exécution d’un programme Prolog


• On exécute un programme Prolog en posant une question à
l’interpréteur
* Exemple
frere( X, ali).
Pour trouver les frères de Ali.
C’est-à-dire déterminer les valeurs des variables (Ex : X)
telles que la question soit déductible des faits et des règles
de la base de connaissance du programme.
• On parle de résolution de question ou de
démonstration de question.

H. Jamoussi Elkamel , FSM 74


Programmation Logique

37
Exécution d’un programme Prolog
• L’interpréteur Prolog répond
– Yes ou True , si la question est une conséquence logique du
programme (l’ensemble des faits et des règles)
– No ou false si la question n’est pas une conséquence logique du
programme

• Quand une question contient des variables, l’interpréteur


Prolog retourne la liste des valeurs des variables pour
lesquelles la question est une conséquence logique du
programme
• Une question peut contenir plusieurs buts à résoudre, il faut
alors que tous soient satisfaits.
H. Jamoussi Elkamel , FSM 75
Programmation Logique

Exécution d’un programme Prolog


• syntaxe d’une question :
Question:: = predicat {, predicat }.
Une question se termine par un point
les variables apparaissant dans ces prédicats sont
quantifiées existentiellement
• Sémantique d’une question
la question prédicat1 , … , prédicatN.
signifie : est-ce que les prédicat1, … et prédicatN sont
vrais?

H. Jamoussi Elkamel , FSM 76


Programmation Logique

38
Programmes Prolog
exemple de programme prolog
homme(ali).
homme(said).
homme(salah).
pere(omar, ali).
pere(omar,said).
pere(ali, salah).
frere(X,Y):-homme(X), homme(P),
pere(P,X), pere(P,Y).

H. Jamoussi Elkamel , FSM 77


Programmation Logique

Exécution d’un programme Prolog


• Exemples :
– à la question pere(omar, ali).
L’interpréteur répond true si pere(omar,ali) se déduit à
partir des faits et des clauses du programme, sinon
l’interpréteur répond false

– à la question pere(ali, X).


L’interpréteur retourne les différentes valeurs v1,.. vn
que peut prendre la variable X pour lesquelles
pere(ali, vi) se déduit des faits et des clauses du
programme
H. Jamoussi Elkamel , FSM 78
Programmation Logique

39
Exemple : « biographie »
• Faits :
/* bio/6
bio(Nom, Sexe, Ne_en, Dcd_en, Pere, Mere)*/
bio(louis13, h, 1601, 1643, henri4, marie_medicis).
bio(elisabeth_france, f, 1603, 1644, henri4, marie_medicis).
bio(louis14, h, 1638, 1715, louis13, anne_autriche).
• Règles
/*pere/2 pere(Pere, Enfant) */
pere(X, Y):- bio(Y,_,_,_,X,_).
/*age/ 2 age(Personne, Age)*/
age(X,Y):- bio(X,_,Z,T,_,_),Y is T-Z. 79
Programmation Logique H. Jamoussi Elkamel , FSM

Exemple : « biographie »
On interroge le programme: buts
• Quel est la date de naissance de Louis XIV?

• Qui est le père de Louis XIII?

• Combien d’année Louis XIV a survécu à son père?

• Parmi les personnes dont on dispose de la « biographie », qui


sont les hommes?

H. Jamoussi Elkamel , FSM 80


Programmation Logique

40
Exemple : « biographie »
On interroge le programme: buts
• Quel est la date de naissance de Louis XIV?
bio(louis14, _ ,X,_, _ , _).
• Qui est le père de Louis XIII?

• Combien d’année Louis XIV a survécu à son père?

• Parmi les personnes dont on dispose de la « biographie », qui


sont les hommes?

H. Jamoussi Elkamel , FSM 81


Programmation Logique

Exemple : « biographie »
On interroge le programme: buts
• Quel est la date de naissance de Louis XIV?
bio(louis14, _ ,X,_, _ , _).
• Qui est le père de Louis XIII?
pere(X,louis13). Ou aussi bio(louis13, _ , _ , _ ,X, _ ).
• Combien d’année Louis XIV a survécu à son père?

• Parmi les personnes dont on dispose de la « biographie », qui


sont les hommes?

H. Jamoussi Elkamel , FSM 82


Programmation Logique

41
Exemple : « biographie »
On interroge le programme: buts
• Quel est la date de naissance de Louis XIV?
bio(louis14, _ ,X,_, _ , _).
• Qui est le père de Louis XIII?
pere(X,louis13). Ou aussi bio(louis13, _ , _ , _ ,X, _ ).
• Combien d’année Louis XIV a survécu à son père?
bio(louis14, _ , _ ,Y,Z, _ ), bio(Z, _ , _ ,T, _ , _ ), R is Y-T.
• Parmi les personnes dont on dispose de la « biographie », qui
sont les hommes?

H. Jamoussi Elkamel , FSM 83


Programmation Logique

Exemple : « biographie »
On interroge le programme: buts
• Quel est la date de naissance de Louis XIV?
bio(louis14, _ ,X,_, _ , _).
• Qui est le père de Louis XIII?
pere(X,louis13). Ou aussi bio(louis13, _ , _ , _ ,X, _ ).
• Combien d’année Louis XIV a survécu à son père?
bio(louis14, _ , _ ,Y,Z, _ ), bio(Z, _ , _ ,T, _ , _ ), R is Y-T.
• Parmi les personnes dont on dispose de la « biographie », qui
sont les hommes?
bio(X, h , _ , _ , _ , _ ).

H. Jamoussi Elkamel , FSM 84


Programmation Logique

42
Exemple : « biographie »
/* à l’aide d’un éditeur en édite le fichier bio.pl qui contient les faits
et les règles*/
bio(louis13,h,1601,1643,henri4,marie_medicis).
bio(elisabeth france,f,1603,1644,henri4,marie_medicis).
bio(louis14,h,1638,1715,louis13,anne_autriche).
pere(X,Y) :- bio(Y,_,_,_,X,_).
age(X,Y) :- bio(X,_,T,Z,_,_), Y is Z-T.
# avec l’interpréteur prolog SWI-Prolog on pose les questions
?- consult(bio).
true
?- bio(louis14,_,X,_,_,_).
X = 1638.
H. Jamoussi Elkamel , FSM 85
Programmation Logique

Exemple : « biographie »
?- pere(X,louis13).
X = henry4.
?-bio(louis13,_, _ , _ ,X, _ ).
X=henry4.
?- bio(louis14, _ , _ ,Y,Z, _ ),bio(Z, _ , _ ,T, _ , _ ),R is Y-T.
Y = 1715,
Z = louis13,
T = 1643,
R = 72.
H. Jamoussi Elkamel , FSM 86
Programmation Logique

43
Exemple : « biographie »
?- bio(X,h,_, _ , _ , _ , _).
X = louis13 ;
X = louis14.

?- halt.
# [ Prolog execution halted ]

H. Jamoussi Elkamel , FSM 87


Programmation Logique

Exercice
On veut modéliser une carte d’un restaurant :
On sait que les artichauts, les crevettes et les salades sont les entrées.
Le poulet, l’escalope et le grillade de bœuf sont les viandes.
Les poissons sont le loup le sole et le daurade et les desserts sont les fraise, les glaces et
les tartes.
1. écrire un ensemble de faits pour modéliser cette carte
2. Comment demander la listes des entrées possibles? Quel sera le résultat affiché?
3 Enrichir le programme en définissant les règles exprimant les connaissances
suivantes :
a. Un plat est à base de viande ou de poisson
b. Un repas est constitué d’une entrée, d’un plat et d’un dessert
4, exprimer les questions suivantes :
a. Quels sont les repars possibles?
b. Quels sont les repas comportant de l’escalope?
c. Quels sont les repas comportant du poisson ?
H. Jamoussi Elkamel , FSM 88
Programmation Logique

44
Exercice
/* base de connaissances carte.pl */
/* Les faits */
entree(artichaut).
entree(crevettes ).
entree(salades).
viande(poulet).
viande(escalope).
viande(grillade_de_boeuf).
poisson(loup).
poisson(sole).
poisson(daurade).
dessert(fraise). dessert(glace). dessert(tarte).
H. Jamoussi Elkamel , FSM 89
Programmation Logique

Exercice
Comment demander la listes des entrées possibles? Quel sera le résultat
affiché?

?- entree(X).
X= artichaut ;
X= crevettes ;
X= salades.

H. Jamoussi Elkamel , FSM 90


Programmation Logique

45
Exercice
/* base de connaissances carte.pl */
/* Les faits */
entree(artichaut). entree(crevettes ). entree(salades).
viande(poulet). viande(escalope). viande(grillade_de_boeuf).
poisson(loup). poisson(sole). poisson(daurade).
dessert(fraise). dessert(glace). dessert(tarte).
/* Un plat est à base de viande ou de poisson */
plat(X) :- viande(X).
plat(X) :- poisson(X).
/* Un repas est constitué d’une entrée, d’un plat et d’un dessert */
repas(E, P, D) :- entree( E ), plat(P), dessert(D).

H. Jamoussi Elkamel , FSM 91


Programmation Logique

Exercice
a. Quels sont les repars possibles?
?- repas( E, P, D).

a. Quels sont les repas comportant de l’escalope?


?- repas( E, escalope, D).

c. Quels sont les repas comportant du poisson ?


?-repas(E, P, D), poisson(P).

H. Jamoussi Elkamel , FSM 92


Programmation Logique

46
Exercice
* la chèvre est un animal herbivore
* le loup est un animal cruel
* un animal cruel est carnivore
* un animal carnivore mange de la viande
* un animal herbivore mange de l’herbe
* un animal carnivore mange des animaux herbivores
* les carnivores et les herbivores boivent de l’eau
* un animal consomme ce qu’il boit ou ce qu’il mange
• Question possible : y a-t-il un animal cruel et que
consomme-t-il ?
• Idée : identifier les objets, les faits, les règles
H. Jamoussi Elkamel , FSM 93
Programmation Logique

Exercice
– Constantes : chevre, loup, viande, herbe, eau,
– Predicats:
• animal(X): X est un animal
• cruel(X): X est cruel
• carnivore(X): X est carnivore,
• herbivore(X): X est herbivore
• mange(X,Y): X mange Y
• boit(X,Y): X boit Y
• consomme(X,Y): X consomme Y

H. Jamoussi Elkamel , FSM 94


Programmation Logique

47
Exercice
– Faits:
• la chèvre est un animal herbivore
animal(chevre).
herbivore(chevre).
• le loup est un animal cruel
cruel(loup).
animal(loup).

H. Jamoussi Elkamel , FSM 95


Programmation Logique

Exercice
– Règles :
• un animal cruel est carnivore
carnivore (X) :- animal(X), cruel(X).
• un animal carnivore mange de la viande
mange(X,viande) :- animal(X), carnivore(X).
• un animal herbivore mange de l’herbe
mange(X,herbe) :- animal(X), herbivore(X).
* un animal carnivore mange des animaux herbivores
mange(X,Y) :- animal(X), carnivore(X), animal(Y), herbivore(Y).
* les carnivores et les herbivores boivent de l’eau
boit(X,eau) :- carnivore(X).
boit(X,eau) :- herbivore (X).
* un animal consomme ce qu’il boit ou ce qu’il mange
consomme(X,Y) :- animal(X), boit(X,Y).
consomme(X,Y) :- animal(X), mange(X,Y).
H. Jamoussi Elkamel , FSM 96
Programmation Logique

48
Exercice
/* base de connaissances animaux.pl */
cruel(loup).
animal(loup).
animal(chevre).
herbivore(chevre).
carnivore(X) :- animal(X), cruel(X).
mange(X, viande) :- animal(X), carnivore(X).
mange(X, herbe) :- animal(X), herbivore(X).
mange(X, Y) :- animal(X), carnivore(X), animal(Y), herbivore(Y).
boit(X, eau) :- carnivore(X).
boit(X, eau) :- herbivore(X).
consomme(X,Y) :- animal(X), boit(X,Y).
consomme(X,Y) :- animal(X), mange(X,Y).
H. Jamoussi Elkamel , FSM 97
Programmation Logique

Exercice
– Question
• Question possible : y a-t-il un animal cruel et que
consomme-t-il ?
animal(X), cruel(X),consomme(X,Y).

Réponse
X= loup X= loup X= loup
Y = eau Y = viande Y = chevre

H. Jamoussi Elkamel , FSM 98


Programmation Logique

49
Fonctionnement de démonstrateur de théorème
Prolog
la question = but
( Une formule existentielle x Q )

le programme Démonstrateur de théorème


(Un ensemble de formules P ) pour une formule
= base des connaissances = Moteur d’inférence

Non, il n'existe pas d’instanciation L'ensemble instanciations


pour x telle que Q soit pour x telles que Q soit une
une conséquence logique de P. conséquence logique de P.

H. Jamoussi Elkamel , FSM 99


Programmation Logique

Comment l’interpréteur fait-il pour répondre aux


questions ?
• Le démonstrateur de théorème cherche à prouver que la
question posée Q est une conséquence logique des
connaissances (clauses de la base de connaissances ) qu’il «
connaît » S={C1, C2,…, Cn} en utilisant le principe de
résolution de Robinson.
• Pour cela, il construit un arbre de recherche.

• Chaque branche de l’arbre déroule une tentative de


preuve.
• Chaque étape d’une branche est une étape de la tentative de
preuve.

H. Jamoussi Elkamel , FSM 100


Programmation Logique

50
Comment l’interpréteur fait-il pour répondre
aux questions ?
• Si au moins une branche conduit à la preuve complète de
la question, l’interpréteur répond à la question par
l’affirmative en donnant éventuellement les conditions (les
valeurs de variables) devant être satisfaites  la question est
résolue.
• Si toutes les branches conduisent à des échecs,
l’interpréteur répond par la négative

H. Jamoussi Elkamel , FSM 101


Programmation Logique

Le principe de Résolution
• Pour prouver une question posée Q à partir d’un
ensemble des clauses S={C1, C2,…, Cn}, il suffit de
construire une réfutation de l’ensemble
S’= S  {¬ Q} en utilisant le principe de résolution.
• Le principe de résolution de Robinson est une
méthode de démonstration automatique qui se base
sur la règle de coupure et travaillant sur des
clauses.
la règle de coupure: A, ¬ A  B
B
H. Jamoussi Elkamel , FSM 102
Programmation Logique

51
Le principe de Résolution
Exercice
• Si la pression atmosphérique est élevée, alors il y’a anticyclone et s’il
y’a anticyclone alors il fait beau. Or aujourd’hui la température et la
pression atmosphérique sont élevées.
• prouver qu’il fait beau en utilisant le principe de résolution.
(1) (p_atmo_elevee  anticyclone) ≡ (p_atmo_elevee  anticyclone)
(2) ( anticyclone  beau ) ≡ ( anticyclone  beau )
(3) temp_elevee
(4) p_atmo_elevee.
conclusion beau
S={(p_atmo_elevee  anticyclone), ( anticyclone  beau ) ,
temp_elevee , p_atmo_elevee, beau}
H. Jamoussi Elkamel , FSM 103
Programmation Logique

Le principe de Résolution
(p_atmo_elevee  anticyclone) ( anticyclone  beau ) temp_elevee p_atmo_elevee beau

anticyclone

beau

[ ]
H. Jamoussi Elkamel , FSM 104
Programmation Logique

52
Le principe de Résolution
• Lors d’application de principe de résolution deux sources
d’indéterminisme :
- quel but à résoudre
- quelle clause à appliquer

H. Jamoussi Elkamel , FSM 105


Programmation Logique

Stratégie de résolution Prolog


Dans la construction d’une preuve,
Prolog se base sur
• Chaînage arrière
pour la résolution de buts
• Profondeur d’abord
résolution complète du 1er but si plusieurs buts
• Régime par tentative
choix 1ère clause et retour-arrière éventuel sur les
clauses non encore utilisées

H. Jamoussi Elkamel , FSM 106


Programmation Logique

53
Chaînage arrière
• La résolution d'un but B consiste à rechercher une clause
ayant B en conclusion (tête).

• Si le but B est
– un Fait B. Alors le but B est montré

– une Règle B :- P1, ..., Pn. Alors les prémisses P1, … Pn


sont les nouveaux buts et B est remplacé par P1, … Pn

H. Jamoussi Elkamel , FSM 107


Programmation Logique

Chaînage arrière
• Exemple
(1) p_atmo_elevee. {beau}
(2) temp_elevee.
(3) anticyclone :- p_atmo_elevee. (4)
(4) beau :- anticyclone. {anticyclone}

But : (3)
{p_atmo_elevee}
?- beau.
(1)
true
YES

H. Jamoussi Elkamel , FSM 108


Programmation Logique

54
Profondeur d’abord
• Si un but se décompose en plusieurs sous-buts :
B :- P1, ..., Pn.

Prolog tente toujours de résoudre complètement le premier


sous-but P1 avant de tenter de résoudre le suivant, et ainsi de
suit.

H. Jamoussi Elkamel , FSM 109


Programmation Logique

Profondeur d’abord
{beau}
Exemple (5)
(1) p_atmo_hte.
(2) temp_hte. {anticyclone, temp_hte}
(3) anticyclone :- p_atmo_hte. (3)
(4) isobare_hte :- p_atmo_hte.
(5) beau :- anticyclone, temp_hte. {p_atmo_hte , temp_hte}
But : (1)
?- beau.
{temp_hte}
(2)

YES
H. Jamoussi Elkamel , FSM 110
Programmation Logique

55
Régime par tentative
• Si plusieurs clauses peuvent a priori résoudre le même but :
B :- P1, ..., Pp. B :- R1, ..., Rr.
• L'interpréteur choisit toujours la première clause du
programme (non encore essayée) : tentative prioritaire sur
la 1ère clause.
• En cas d'échec de la clause essayée, on effectue un
retour-arrière (backtrack) jusqu'au dernier point de
choix: on considère alors la 1ère clause utilisable suivante.
• S'il ne reste aucune règle utilisable, on remonte au point de
choix précédent. Si aucune possibilité n'est envisageable
au final : échec

H. Jamoussi Elkamel , FSM 111


Programmation Logique

Régime par tentative


• Exemple
(1) inflation_zero.
(2) chomage.
(3) crise :- deflation.
(4) crise :- chomage.
(5) deflation :- inflation_zero, investissement_zero.
But :
?- crise.

H. Jamoussi Elkamel , FSM 112


Programmation Logique

56
Régime par tentative
• Exemple {crise}
(1) inflation_zero. (3) (4)
(2) chomage.
{deflation} {chomage}
(3) crise :- deflation.
(4) crise :- chomage. (5)
succès
(5) deflation :- {inflation_zero,
inflation_zero, investissement_zero}
investissement_zero. (1)
But : ?- crise. {investissement_zero}

échec

H. Jamoussi Elkamel , FSM 113


Programmation Logique

Résolution Prolog avec variables


Substitution et Unification
• La construction de l’arbre de recherche s’appuie sur
l’unification des termes.
• Unification : procédé par lequel on essaie de rendre deux
formules identiques en donnant des valeurs aux variables
qu’elles contiennent.
• Unifier deux termes consiste à déterminer une
substitution qui rend ces deux termes égaux.
• Unification réussie : substitution possible
• Deux termes t1 et t2 sont dits unifiables s’il existe une
substitution  telle que (t1) = (t2).

H. Jamoussi Elkamel , FSM 114


Programmation Logique

57
Substitution et Unification
Substitution
• On appelle substitution toute application σ de l'ensemble des
variables V vers l'ensemble des termes T
σ:V→T
X → σ (X) = nom_fonct(terme1, ..., terme n)
σ (X) = Constante
σ (X) = variable
• Une substitution  est un ensemble de couples <variable, terme>
représenté par = {X1←t1, X2←t2,.. Xn←tn}

• L’application d’une substitution  (= {X1←t1, .. Xn←tn}) à un


terme ou une formule F consiste à remplacer les occurrences de de
X1, …, Xn dans F par les termes t1, ..tn
H. Jamoussi Elkamel , FSM 115
Programmation Logique

Substitution et Unification
Exemple : Soit les deux prédicats pere(jean, X) et pere(Y, paul)

une substitution qui permet de les unifier est


 = {X ← paul, Y ← jean}
X ←paul signifie que l’on remplace X par paul noté paul/X
Y ←jean signifie que l’on remplace Y par jean noté jean/Y

Quand on applique cette substitution 


à pere(jean,X) on obtient le prédicat pere(jean,paul)
à pere(Y,paul) on obtient le prédicat pere(jean,paul)

H. Jamoussi Elkamel , FSM 116


Programmation Logique

58
Substitution et Unification
• L’algorithme de Robinson d’unification des termes
détermine l’unificateur le plus général de deux
prédicats.

• En prolog, l'unification est désignée par l'opérateur "=".

• Ainsi
?- pere(X,ali) = pere(amira , Y).
X=amira, Y=ali.

H. Jamoussi Elkamel , FSM 117


Programmation Logique

Substitution et Unification
• Quand Prolog tente d’unifier un but avec un fait ou une tête
de clause, il peut s'avérer nécessaire de renommer les
variables.
Exemple
• Soit le but ?-aime(X,ali).
• et soit le fait aime(omar, X).
• Pour que ces deux expressions soient unifiables, on doit
renommer les variables comme suit :
?- aime(X1,ali)=aime(omar,X2).
Soient deux expressions A et B quelconques (formules ou
termes) l’algorithme d’unification retourne un unificateur  de
A et B s’il existe, retourne echec sinon.
H. Jamoussi Elkamel , FSM 118
Programmation Logique

59
L’algorithme d’unification de prolog
Input : deux expressions A et B à unifier
Output : Unificateur θ de A et B.
θ=∅
empiler A = B
while pile n'est pas vide do
Dépiler l'équation X = Y
if X est une variable qui n'apparaît pas dans Y then
Substituer toutes les occurrences de X par Y dans la pile et dans θ
Ajouter X = Y dans θ
if Y est une variable qui n'apparaît pas dans X then
Substituer toutes les occurrences de Y par X dans la pile et dans θ
Ajouter Y = X dans θ
if X et Y sont des constantes ou des variables identiques then Continuer
if X est f(X1, · · · , Xn) et Y est f(Y1, · · · , Yn) then
Empiler les n équations Xi = Yi ;
if Aucun des cas précédents then retourner échec
Retourner θ H. Jamoussi Elkamel , FSM 119
Programmation Logique

Exemples d’unification
• ?-X=ali.
X=ali
• ?-ali=omar.
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,X)=p(11,11,12).
No
• ?-p(X,X,a)=g(b,Y,Y).
No
• ?-homme(ali) = homme(farid).
No
H. Jamoussi Elkamel , FSM 120
Programmation Logique

60
Unification dans les Clauses
• L'unification réussie dans la tête se propage aux clauses
• La base de connaissances
frere(X,Y) :- homme(X), pere(Z,X), pere(Z,Y), X\=Y.

?- frere(ali, Qui).
Frere (ali, Qui) et frere(X,Y) sont unifiables X=ali Y=Qui

L'unification réussie dans la tête se propage aux clauses

homme(ali) pere(Z, ali), pere(Z, Qui) ali\=Qui

H. Jamoussi Elkamel , FSM 121


Programmation Logique

Construction de l’arbre de recherche :


Soit G(…) la question à laquelle l’interpréteur doit répondre
1) unifications de la question avec toutes les clauses du
programme P 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’unifications possibles
2) la branche la plus à gauche est développée 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

H. Jamoussi Elkamel , FSM 122


Programmation Logique

61
Construction de l’arbre de recherche
• Lʼexécution d’une Question G pour un programme P a comme
résultat lʼensemble de feuilles succès de l’arbre de recherche
correspondant.
• Plus précisément, pour chacune de ces feuilles, le résultat est
lʼensemble des instanciations des variables de G qui se trouvent
sur le chemin qui mène de la racine à la feuille en question.
• L’arbre de recherche est produit par un parcours en profondeur
dʼabord, de gauche vers la droite dans l’ordre des clauses. Donc
l’ordre des clauses est important.
• Par exemple,
– pour p(X):- p(X). p(a). Le but p(X) ne donne aucun résultat (boucle),
– mais pour p(a). p(X):-p(X). le résultat X=a est atteint.

H. Jamoussi Elkamel , FSM 123


Programmation Logique

Exercice :L’inspecteur Maigret


• L’inspecteur veut connaître les suspects qu’il doit interroger pour un
certain nombre de faits : il tient un individu pour suspect dès qu’il
était présent dans un lieu, un jour où un vol a été commis et s’il a pu
voler la victime.
• Un individu a pu voler, soit parce qu’il était sans argent, soit par
jalousie. On dispose de faits sur les vols : par exemple, Marie a été
volée lundi à l’hippodrome, Jean, mardi au bar, Luc, jeudi au stade.
• Il sait que Max est sans argent et qu’Eve est très jalouse de Marie. Il
est attesté par ailleurs que Max était au bar mercredi, Eric au bar
mardi et qu’Eve était à l’hippodrome lundi (on ne prend pas en
compte la présence des victimes comme possibilité qu’ils aient été
aussi voleurs ce jour-là).
• Ecrire le programme Prolog qui, à la question suspect(X), renverra
toutes les réponses possibles et représenter l’arbre de recherche de
Prolog.Logique
Programmation H. Jamoussi Elkamel , FSM 124

62
Exercice : L’inspecteur Maigret
suspect(X) :- present(X, L, J), vol(L, J, V), apuvoler(X, V).
apuvoler(X, _) :- sansargent(X).
apuvoler(X, Y) :- jaloux(X, Y).
vol(hipp, lundi, marie).
vol(bar, mardi, jean).
vol(stade, jeudi, luc).
sansargent(max).
jaloux(eve, marie).
present(max, bar, mercredi).
present(eric, bar, mardi).
present(eve, hipp, lundi).

H. Jamoussi Elkamel , FSM 125


Programmation Logique

Exercice : L’inspecteur Maigret


suspect(X)

X max present(X, L, J), vol(L, J, V), apuvoler(X, V).


L bar X  eric X  eve
J mercredi L  bar L  hipp
J  mardi J  lundi
vol(bar, mercredi, V), vol(bar, mardi, V), vol(hipp, lundi, V),
apuvoler(max, V). apuvoler(eric, V). apuvoler(eve, V).
V  jean V  marie

échec apuvoler(eric, jean). apuvoler(eve, marie).

sansargent(eric). jaloux(eric, jean). sansargent(eve).

jaloux(eve, marie).
échec échec échec 126

Programmation Logique H. Jamoussi Elkamel , FSM succès


X = eve

63

Vous aimerez peut-être aussi