Programmation Logique - Université Grenoble Alpes

Transcription

Programmation Logique - Université Grenoble Alpes
Programmation Logique
Partie 1 : Introduction à la
programmation logique
Jean-Michel Adam
Université Pierre Mendès France
U.F.R. Sciences de l’Hommes et de la Société (SHS)
Département Informatique et Mathématiques appliquées aux Sciences Sociales
Grenoble - France
Organisation de l’enseignement
z
30 heures
z
z
z
z
5 cours (5 x 2 heures)
5 TD (5 x 2 heures)
h
)
5 TP (5 x 2 heures)
Cours
1.
2.
3
3.
4.
5.
Introduction à la programmation logique
Le langage Prolog
Les listes en Prolog
Les graphes en Prolog, compléments
G
Grammaires
i
ett automates
t
t d’états
d’ét t finis
fi i en Prolog
P l
Prolog
z
Prolog est un langage extraordinaire, parce qu'il nous montre qu'il peut
exister d'autres moyens de programmer un ordinateur.
z
Prolog
P
l (P
(Programmation
ti Logique)
L i
) estt né
é en F
France en 1972 (Marseille)
(M
ill )
et a servi de base aux programmes de recherche japonais sur les
ordinateurs de 5ème génération.
Ce qui est phénoménal, c'est qu'en Prolog, il suffit
z
z
de décrire ce que l'on sait sur le domaine étudié, (en Intelligence
Artificielle, on appelle cela une base de connaissances),
z
puis on décrit notre problème
et Prolog va nous le résoudre, sans que l’on ait à lui dire comment faire !
Programmation logique et Prolog
z
z
z
z
z
z
z
Historique – modes de programmation
D
Données,
é
relations
l ti
ett ffaits
it
Prédicats et formules
Règles
Clauses de Horn
Démonstration en Prolog
Stratégie de Prolog
Historique
z
z
z
z
1965 : ce mode de programmation a vu le jour grâce à
John Robinson qui a posé en 1965 les bases de la
logique.
1972 : création de Prolog par A. Colmerauer et P.
Roussel à Marseille (Luminy).
1980 : reconnaissance de Prolog
g comme langage
g g de
développement en Intelligence Artificielle
Depuis,
p , plusieurs
p
versions ont été développées,
pp
, dont des
extensions pour la programmation par contraintes, mais il
n’existe pas vraiment de standard de ce langage.
Information complémentaires
sur Prolog
z
z
z
z
La syntaxe et la sémantique du langage Prolog est
l’ensemble des règles
g
q
qui définissent comment un
programme Prolog est écrit et interprété.
Les règles sont énoncées dans la norme ISO ISO/IEC
13211, bien qu'il existe des différences dans les
implémentations de Prolog
Prolog, voir:
http://en.wikipedia.org/wiki/Comparison_of_Prolog_im
plementations
Dans ce cours nous utiliserons la syntaxe Edinburgh
syntax
t ett l’interprète
l’i t
èt SWI-Prolog
SWI P l (f
(freeware))
Les modes de programmation
z
z
z
z
Programmation impérative
Programmation fonctionnelle
Programmation déclarative
Programmation par Objets
Les modes de programmation
z
La programmation impérative
z
z
z
z
Démarche algorithmique qui décrit la façon de traiter les
données pour atteindre un résultat par une série
d’actions (instructions).
L’ordre d’exécution des instructions est impératif :
déterminé à l’avance.
Le déroulement du programme est parfaitement
déterministe.
E
Exemple
l d
de ttels
l llangages : B
Basic,
i P
Pascal,
l C
C, F
Fortran,
t
…
Les modes de programmation
z
La programmation fonctionnelle
z
z
z
La p
programmation
g
consiste à faire de la composition
p
de
fonctions.
Proche de la p
programmation
g
impérative
p
; cependant
p
ses
fondements (λ-calcul) ainsi que l’absence de
branchements et d’affectations (du moins dans sa forme
théorique) en fait un mode de programmation à part.
Dans la programmation fonctionnelle, on distingue deux
grandes familles :
z les langages fortement typés : ML (ex : Caml)
z les langages non typés : LISP (ex : Scheme)
Les modes de programmation
z
z
z
Les modes de programmation impérative et fonctionnelle
sont dits procéduraux car ils cherchent à obtenir le résultat
grâce
â à une procédure
éd
A cela on oppose la programmation logique qui est dite
déclarative.
déclarative
La programmation déclarative
z
z
Le programmeur ne s’occupe
s occupe pas de la manière d’obtenir
d obtenir le résultat;
par contre, le programmeur doit faire la description du problème à
résoudre en listant les objets concernés, les propriétés et les
relations qu’ils
qu ils vérifient
vérifient.
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.
Les modes de programmation
z
La programmation orientée objet
z
z
Ce mode de programmation est mis à part car il
regroupe en fait tous les modes précédemment vus en
q
déclaratives et d’autres
utilisant à la fois des techniques
procédurale.
Exemple de langages : Smalltalk, C++,
C , Java, C#,
ActionScript, VisualBasic, etc.
Construction d’un programme
Prolog
z
z
z
Principe : décrire le problème à résoudre.
D
Dans
lle cas d
de P
Prolog,
l
on fformalise
li grâce
â à un
langage dérivé du calcul des prédicats.
Les prédicats servent à donner les caractéristiques
(qualifier)) des objets
(q
j
du p
problème et à décrire les
relations dans lesquelles ils sont impliqués.
Prédicats et formules
z
En Prolog, une relation possède :
z
z
un nom
un nombre d ’arguments
ex: couleur(voiture
couleur(voiture, rouge)
z
En logique, relation = prédicat
couleur
z
L’application du prédicat à ses arguments est
appelé formule.
Prédicats et formules
z
Nombre d ’arguments du prédicat = arité
unaire Ö le prédicat est une propriété de l’argument
l argument
homme(jerome).
arité zéro Ö signification logique très restreinte (un fait vrai)
p.
z
Exercice : écrire les faits suivants sous forme de
prédicats
z
z
La chèvre est un animal herbivore
le loup est un animal cruel
Programme Prolog
z
Un programme Prolog est constitué d’une suite de
prédicats ou clauses de deux types
p
yp :
z
z
z
z
les faits : l’affirmation d’une relation entre certains objets
les règles qui permettent d’établir
d établir de nouveaux faits
Prolog est un langage interprété
L’ é ti d’
L’exécution
d’un programme consiste
i t à poser une
question à l’interprète qui va rechercher toutes les
solutions.
Les Faits
z
z
z
z
Les faits sont des données élémentaires que l’on considère
vraies.
Ce sont des formules atomiques constituées du nom d’un
prédicat (c’est à dire d’une relation) suivi entre parenthèse
d’une
d
une liste ordonnée d’arguments
d arguments qui sont les objets du
problème principal ou d’un sous-problème.
Un programme Prolog est au moins constitué d’un
d un ou
plusieurs faits car c’est à partir d’eux que Prolog va pouvoir
rechercher des preuves pour répondre aux requêtes de
l’utilisateur
Ce sont en quelque sorte les hypothèses de travail.
Les Faits
Exemples :
z
z
z
z
z
z
Henri IV est le père de Louis XIII se traduit par :
pere(henri4 louis13)
pere(henri4,louis13).
Marie de Médicis est la mère de Henri IV se traduit par :
mere(marie-de-medicis,henri4).
S
Superman
est plus
l ffort que tout le
l monde
d se traduit
d i par :
plusfort(superman,X).
0! = 1 se traduit p
par : factorielle(0,1).
( )
Généralement, on place toutes les déclarations de faits au
début du programme même si ce n’est pas obligatoire.
U ffait
Un
it se termine
t
i toujours
t j
par un point
i t«.»
Les Faits
Forme : nomprédicat(arg1,arg2, …, argn).
Exemples:
z
z
z
z
z
z
capitale(france,paris).
astre(terre).
t (t
)
étoile(soleil).
satellite(terre,soleil).
satellite(lune,terre).
plus_petit_que(3,6).
Les données manipulées
z
Constantes
z
z
z
Symbole : chaîne de caractères (minuscule)
Nombres : entiers ou flottants
Variables
V
i bl : chaîne
h î d
de caractères
tè
commençantt par
une majuscule. Elles servent à
z
z
Exprimer une propriété concernant une catégorie
d’objets
Exprimer une question lorsque l’on interroger le système
Prolog
Règles Prolog
z
z
Un programme Prolog contient presque toujours des
règles, cependant ce n’est pas une obligation.
Si les faits sont les hypothèses de travail, les règles sont
des relations qui permettent à partir de ces hypothèses
d’établir de nouveaux faits par déduction
(si on a démontré F1 et F1 F2 alors on a démontré F2).
z
z
Exemple : La relation telle que si on est invincible, alors on est plus
fort que tout le monde se traduit par la règle :
plusfort(X,Y)
l f t(X Y) :- invincible(X).
i i ibl (X)
Les variables utilisées dans une règle sont universellement
quantifiées par Prolog
Prolog, avec le quantificateur (quel que
soit).
Règles Prolog
z
z
Enoncent la dépendance d’une relation entre objets par
rapport à d’autres relations
Concernent des catégories d’objets / faits
*
*
z
fait : fille(helene).
règles : si X est une fille alors X aime les poupées qui s'écrit :
aime(X,poupees) :- fille(X).
Le « si » s’écrit « :- » en Prolog et correspond à
l’implication ⇐
fille(X) ⇒ aime(X,poupees)
s’écrit en Prolog :
aime(X,pourees) :- fille(X).
Règles Prolog
z
Il peut y avoir plusieurs conditions derrière le « :- »,
séparées par des virgules ou des points-virgules
z
z
z
z
La virgule
L
i l correspond
d à un ET llogique
i
((conjonction)
j
ti )
Le point-virgule correspond à un OU logique (disjonction)
Exemple :
La relation telle que si on est le père du père ou de la mère de
quelqu’un alors on est son grand-père se traduit par
grandpere(X,Y) :- pere(X,Z), pere(Z,Y).
grandpere(X,Y) :- pere(X,Z), mere(Z,Y).
ou encore par :
grandpere(X,Y) :- pere(X,Z), (pere(Z,Y) ; mere(Z,Y)).
Autre exemple :
planete(X) :- astre(X), etoile(Y), satellite(X,Y).
Règles Prolog
z
Exercice : exprimer en Prolog les propositions suivantes,
identifier les objets, les faits, les règles
z
z
z
z
z
z
z
z
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
d l’h
l’herbe
b
un animal carnivore mange des animaux herbivores
les carnivores et les herbivores boivent de l’eau
l eau
un animal consomme ce qu’il boit ou ce qu’il mange
Question possible : y a-t-il
a t il un animal cruel et que consomme-t-il
consomme t il ?
Solution possible
animal(chevre)
animal(chevre).
animal(loup).
herbivore(chevre).
cruel(loup).
( ) :- cruel(X).
( )
carnivore(X)
mange(X,viande):- animal(X), carnivore(X).
g ( ,
) animal(X),
( ), herbivore(X).
( )
mange(X,herbe):mange(X,Y):- carnivore(X),herbivore(Y).
boit(X,eau):bo
t( ,eau) a
animal(X),
a ( ), (ca
(carnivore(X);
o e( ); herbivore(X)).
e b o e( ))
consomme(X,Y) :- mange(X,Y); boit(X,Y).
Clauses de Horn (1)
z
z
z
Le langage Prolog est basé sur les clauses de
Horn
Ce sont les faits et les règles.
F
Forme
générale
é é l : F :- F1,
F1 F2,…,
F2
Fn.
F
z
z
z
z
Se traduit par « F si F1 et F2 et … et Fn »
F : formule atomique
Fi : littéraux ((formules atomiques
q
ou leur négation)
g
)
En Prolog : pour démontrer F, il faut démontrer F1,
et F2,…,
F2
et Fn.
Fn
Clauses de Horn (2)
z
z
z
F est la tête de la clause
F1 F2
F1,
F2,…, Fn est appelée la queue de la clause
Un fait est une clause dont la queue est vide
*
Exemples :
*
*
naissance(prolog, 1972).
aime(X,
( bach).
) : « Pour tout X, X aime Bach. »
Clauses de Horn (3)
z
z
z
z
Une règle
g est une clause dont la q
queue est non
vide. La plupart des règles contiennent des
variables.
Définition d’une variable anonyme : « _ »
a_un_salaire(X)
( ) :- employeur(Y,X).
p y ( , )
peut s’écrire :
a un_sa
a_u
salaire(X)
a e( ) :- e
employeur(
p oyeu (_,,X).
)
Si une variable n’est pas nécessaire pour exprimer une
g interpreter affiche un
relation, l’interprète Prolog
message d’avertissement (warning).
Définir un prédicat = définir un ensemble de faits
et de règles
Programme Prolog
z
z
z
z
z
Programme Prolog = séquence de définitions de
prédicats
Pas d’ordre spécifique des prédicats.
Un programme peut être composé de plusieurs
fichiers.
Il est possible d’utiliser
d utiliser le même nom de prédicat
avec une arité différente.
Example : predicat nommé enfant
enfant(X,Père,Mère).
enfant(X,Y) :- enfant(X,Y,_) ; enfant(X,_,Y).
Démonstration Prolog
z
A partir d’un programme Prolog, on peut poser des
questions, par exemple :
frere(patrick, X).
z
pour trouver les frères de Patrick.
C’est-à-dire déterminer les valeurs des variables (X dans
notre exemple) telles que la question soit déductible des
faits et prédicats du programme.
On p
parle de résolution de q
question ou de
démonstration de question.
Unification (1)
z
Exemple :
frere(X,Y) :- homme(X), enfant(X,Z), enfant(Y,Z), X\=Y.
où \= représente le prédicat de différence
différence.
frere(patrick,Qui).
tentative d’unification
d unification avec la tête de la clause frere(X,Y)
frere(X Y)
z
z
Unification : procédé par lequel on essaie de rendre
d
deux
fformules
l id
identiques
ti
en d
donnantt d
des valeurs
l
aux
variables qu’elles contiennent.
Résultat : c’est une substitution (ou unificateur), un
ensemble d’affectations de variables.
Exemple : X=patrick, Qui=Y
Unification (2)
z
Exemple :
frere(X Y) ::- homme(X),
frere(X,Y)
homme(X) enfant(X
enfant(X,Z),
Z) enfant(Y,Z),
enfant(Y Z) X\=Y.
X\=Y
frere(patrick Qui)
frere(patrick,Qui).
Unification
U
ifi i avec frere(X,Y)
f
(X Y)
X=patrick et Qui=Y
homme(patrick)
enfant(patrick,Z)
enfant(Y,Z)
patrick\=Y
t i k\ Y
Unification (3)
z
z
Le résultat n’est pas forcément unique, mais
représente
p
l’unificateur le p
plus g
général.
L’unification peut réussir ou échouer.
e(X X) et e(2,3)
e(X,X)
e(2 3) ne peuvent être unifiés
unifiés.
z
Prédicat d’unification : « = »
a(B,C)
(B C) = a(2,3).
(2 3)
d
donne
pour résultat
é lt t :
true B=2, C=3
a(X Y L) = a(Y,2,carole).
a(X,Y,L)
a(Y 2 carole) donne pour résultat :
true X=2, Y=2, L=carole
a(X,X,Y) = a(Y,u,v).
donne pour résultat :
false
Démonstration Prolog (1)
z
z
Si l’unification échoue : situation d'échec sur la
règle considérée pour démontrer la formule.
Si l’unification réussit : substitution des variables
présentes dans la queue de la clause par les
valeurs correspondantes des variables de
l’ ifi t
l’unificateur.
Démonstration Prolog(2)
z
z
z
z
La démonstration
L
dé
t ti de
d cett ensemble
bl de
d fformules
l estt
faite dans l’ordre de leur citation
Le système est enrichi par les valeurs obtenues
des variables.
A la fin de la démonstration, le système a construit
un ensemble des couples valeur
valeur-variable
variable
Le sous-ensemble de couples correspondant aux
variables présentes dans la question initiale forme
la solution affichée par Prolog.
Points de choix
z
Quand plusieurs règles concernent une même
question :
z
z
z
Prolog effectue des essais consécutifs dans l’ordre de
déclaration des prédicats
Cette séquence d’essais peut être représentée par un
arbre: l’arbre
l arbre de recherche
Les nœuds de l’arbre sont appelés points de choix
Arbre de recherche (1)
z
On parle d’arbre de recherche d’une question
*
*
*
Racine de l’arbre
l arbre : la question
Nœud : points de choix (formules à démontrer)
Passage d’un
d un nœud vers son fils en considérant l’une
l une
des règles et en effectuant une unification et un pas
de démonstration
Arbre de recherche (2)
*
*
*
Les nœuds sont démontrés de gauche à droite, dans
l’ordre de déclaration dans la règle
g
Nœuds d'échec : aucune règle ne permet de
démontrer la p
première formule du nœud
Nœuds de succès : ne contient plus aucune formule
à démontrer,, tout a été démontré et les éléments de
solution sont trouves en remontant vers la racine de
l’arbre
Arbre de recherche (3)
Exemple de programme:
pere(charlie, david).
(p1)
pere(henri charlie)
pere(henri,
charlie).
(p2)
papy(X,Y) :- pere(X,Z), pere(Z,Y). (p3)
Appel du programme : papy(X,Y).
papy(X,Y)
p3
p
et
pere(X,Z)
p1
X=charlie
Z=david
ou
p2
X=henri
Z=charlie
pere(Z,Y)
pere(david,Y)
p1
échec
ou
p2
pere(charlie,Y)
o
p1 ou
échec y=david
succès
p2
Stratégie de Prolog (1)
z
z
Pour résoudre une question, Prolog construit
ll’arbre
arbre de recherche de la question
Parcours en profondeur d’abord
*
*
nœud
dd
de succès
è : c’est
’ t une solution,
l ti
P
Prolog
l l’l’affiche
ffi h ett
cherche d’autres solutions
nœud
d d'é
d'échec
h : remontée
té d
dans l’l’arbre
b jjusqu'à
'à un point
i t
de choix possédant des branches non explorées
Stratégie de Prolog (2)
z
z
On parle de backtrack. Si un tel nœud de choix
n’existe
n
existe pas, la démonstration est terminée, il n’y
ny
a pas d’autre solution.
Possibilité de branche infinie et donc de
recherche sans terminaison… Attention à :
z
z
L’ordre des littéraux dans la queue de clause
L’ordre des clauses
Exemple de démonstration
planete(X) ::- astre(X),
astre(X) etoile(Y)
etoile(Y), satellite(X
satellite(X,Y).
Y)
faits:
astre(lune).
t (l
)
astre(terre).
astre(soleil).
astre(soleil)
astre(venus).
(
soleil).
)
satellite(venus,
satellite(lune, terre).
satellite(terre, soleil).
étoile(vega).
étoile(soleil).
?- planete(X).
Exemple de démonstration
planete(X) :- astre(lune), etoile(Y), satellite(lune,Y).
faits:
astre(lune).
astre(terre).
astre(soleil).
astre(venus).
satellite(venus soleil)
satellite(venus,
soleil).
satellite(lune, terre).
satellite(terre,
sate
te(te e, so
soleil).
e )
étoile(vega).
étoile(soleil).
Exemple de démonstration
planete(X) :- astre(lune), etoile(vega), satellite(lune, vega).
faits:
échec !
astre(lune).
astre(terre).
astre(soleil).
astre(venus).
satellite(venus soleil)
satellite(venus,
soleil).
satellite(lune, terre).
satellite(terre,
sate
te(te e, so
soleil).
e )
étoile(vega).
étoile(soleil).
Exemple de démonstration
planete(X) :- astre(lune), etoile(soleil), satellite(lune, soleil).
faits:
backtrack
échec !
astre(lune).
astre(terre).
astre(soleil).
astre(venus).
satellite(venus soleil)
satellite(venus,
soleil).
satellite(lune, terre).
satellite(terre,
sate
te(te e, so
soleil).
e )
étoile(vega).
étoile(soleil).
Exemple de démonstration
planete(X) :- astre(terre), etoile(Y), satellite(terre, Y).
faits:
backtrack
astre(lune).
astre(terre).
astre(soleil).
astre(venus).
satellite(venus soleil)
satellite(venus,
soleil).
satellite(lune, terre).
satellite(terre,
sate
te(te e, so
soleil).
e )
étoile(vega).
étoile(soleil).
Exemple de démonstration
planete(X) :- astre(terre), etoile(vega), satellite(terre, vega).
faits:
échec !
astre(lune).
astre(terre).
astre(soleil).
astre(venus).
satellite(venus soleil)
satellite(venus,
soleil).
satellite(lune, terre).
satellite(terre,
sate
te(te e, so
soleil).
e )
étoile(vega).
étoile(soleil).
Exemple de démonstration
planete(X) :- astre(terre), etoile(soleil), satellite(terre, soleil).
faits:
backtrack
true !
astre(lune).
astre(terre).
astre(soleil).
astre(venus).
satellite(venus soleil)
satellite(venus,
soleil).
satellite(lune, terre).
satellite(terre,
sate
te(te e, so
soleil).
e )
étoile(vega).
étoile(soleil).
X = terre,
Y = soleil
Exemple de démonstration
planete(X) :- astre(soleil), etoile(Y), satellite(soleil, Y).
faits:
backtrack …..
échec !
astre(lune).
astre(terre).
astre(soleil).
astre(venus).
satellite(venus soleil)
satellite(venus,
soleil).
satellite(lune, terre).
satellite(terre,
sate
te(te e, so
soleil).
e )
étoile(vega).
étoile(soleil).
Exemple de démonstration
planete(X) :- astre(venus), etoile(Y), satellite(venus, Y).
faits:
backtrack
astre(lune).
astre(terre).
astre(soleil).
astre(venus).
satellite(venus soleil)
satellite(venus,
soleil).
satellite(lune, terre).
satellite(terre,
sate
te(te e, so
soleil).
e )
étoile(vega).
étoile(soleil).
Exemple de démonstration
planete(X) :- astre(venus), etoile(soleil), satellite(venus,soleil).
faits:
true !
astre(lune).
astre(terre).
astre(soleil).
astre(venus).
satellite(venus soleil)
satellite(venus,
soleil).
satellite(lune, terre).
satellite(terre,
sate
te(te e, so
soleil).
e )
étoile(vega).
étoile(soleil).
X = venus,
Y = soleil
Prolog utilisé en TP
z
SWI-Prolog
z
z
z
Fonctionne sous Linux,, Windows et MacOS.
Disponible gratuitement (licence GPL) au département
informatique de l'Université de Psychologie d'Amsterdam
http://www.swi-prolog.org/download/stable
Autres Prolog
gg
gratuits
z
z
Il y a également Visual Prolog Personal Edition, gratuit
pour un usage privé
GNU-Prolog (par l'INRIA).
Bibliographie
z
F
Foundations
d ti
off Logic
L i Programming
P
i
J. W. Lloyd, Springer-Verlag New York, Inc. New York, NY, USA ©1984 ISBN:0-387-13299-6
z
Prolog
F. Giannesini, H. Kanoui, R. Pasero et M. Van Caneghem, InterÉditions, 1985
z
Programming in Prolog
W.F. Clocksin, C.S. Mellish, Springer-Verlag Telos; 4th edition (September 1994)
z
The art of Prolog , 2nd Edition, Advanced Programming Techniques
L St
L.
Sterling,
li
E
E. Sh
Shapiro,
i th
the MIT Press,
P
1994 ISBN-13:
1994,
ISBN 13 978
978-0-262-19338-2
0 262 19338 2
z
Logic Programmin and Prolog (2nd ed)
Ulf Nilsson
U
sso a
and
d Ja
Jan Maluszynski,
a us y s , free
ee e
e-book,
boo , 2000
000
z
Logic programming with Prolog
Max Bramer, springeronline.com, 2005, free e-book, ISBN-13: 978-1852-33938-8
z
Tutoriel en anglais:
http://www.csupomona.edu/~jrfisher/www/prolog_tutorial/intro.html