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