Prolog
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
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’ ?
…..
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, …
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.
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,
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)
La programmation déclarative
– La programmation fonctionnelle
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
La programmation logique
Procédure Formule
programme Ensemble (conjonction) de formules
appel de procédure question
exécution preuve
passage de paramètres substitution (unification)
8
La programmation logique
la question = but
( Une formule existentielle x Q )
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’ ?
…..
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
11
Syntaxe de Prolog
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 …
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
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
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
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
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,
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).
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.
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
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.
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
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
Programme ProLog
Clause de horn
22
Programme ProLog
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
• les ponctuations : :- , . ( ) ; ! | [ ]
H. Jamoussi Elkamel , FSM 48
Programmation Logique
24
Syntaxe de Prolog : les termes
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 _
25
les variables
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
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.
28
Les termes complexes
• 2ème représentation
enseignant( Nom_enseignant, Prenom_enseignant)
horaire( Jour, De, A)
local ( Departement, Salle)
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
• Syntaxe
clause ::= fait | regle
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
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.
Les règles
• Syntaxe :
regle ::= conclusion :- corps.
Une règle Se termine toujours par un point
Conclusion ::= predicat
corps ::= predicat { , predicat }
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 »
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
33
Programmes Prolog
Syntaxe:
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).
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).
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)).
36
Syntaxe de Prolog
oiseau(canari).
carnivore(chat). carnivore(chien).
animal(X):- carnivore(X).
animal(X):- oiseau(X) .
especevivante(X):-animal(X).
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
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).
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?
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?
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?
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?
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 , _ , _ , _ , _ ).
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 ]
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.
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).
Exercice
a. Quels sont les repars possibles?
?- repas( E, P, D).
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
47
Exercice
– Faits:
• la chèvre est un animal herbivore
animal(chevre).
herbivore(chevre).
• le loup est un animal cruel
cruel(loup).
animal(loup).
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
49
Fonctionnement de démonstrateur de théorème
Prolog
la question = but
( Une formule existentielle x Q )
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
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
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é
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
54
Profondeur d’abord
• Si un but se décompose en plusieurs sous-buts :
B :- P1, ..., Pn.
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
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
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}
Substitution et Unification
Exemple : Soit les deux prédicats pere(jean, X) et pere(Y, paul)
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.
• Ainsi
?- pere(X,ali) = pere(amira , Y).
X=amira, Y=ali.
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
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.
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).
jaloux(eve, marie).
échec échec échec 126
63