P.T. 2012/2013 Mise en œuvre de Prolog
Programmation en Logique (1) Logique des prédicats (ordre 1) Description d’ensembles et de relations Langage de requêtes (algèbre relationnelle) Moteur d’inférences Solveur d’équations logiques Langage de programmation déclarative Propagateur de contraintes (Prolog III et IV) http://prolog-heritage.org/fr/
Programmation en Logique (2) Synthèse de l’historique 1972 : Prolog I (A. Colmerauer – P. Roussel) Equipes de recherche Marseille & Edimbourg Mise en œuvre algorithme SLD Résolution 1982 : Prolog II (ajout des arbres infinis) 1989 : Prolog III (prog. par contraintes) 1996 : Prolog IV (contraintes non linéaires)
Programmation en Logique (3) Fondements théoriques Théorème de Herbrand Théorème de complétude de Gödel Restrictions aux clauses de Horn
Bibliographie (1) Tutoriaux, cours, ouvrages et sites Cours de P. Caboche (developpez.com) Prolog (F. Giannesini, H. Kanoui, R. Pasero, M. Van Caneghem) - InterEditions Page web d’Alain Colmerauer (free.fr) CV en ligne d’Alain Colmerauer Site http://prolog-heritage.org/
Bibliographie (2) Tutoriaux, cours, ouvrages et sites (suite) Prolog : fondements et applications (M. Condillac) – Dunod informatique Cours de Prolog INF242V (R. Janvier / pdf) Dossier Prolog L3 (M. Ludovic / pdf) Initiation à l’I.A. (ENSM St Etienne / pdf) P. Beaune, G. Picard et L. Vercouter http://en.wikipedia.org/wiki/Q-systems
Bibliographie (3) Ouvrages et sites annexes La société de l’esprit (Marvin Minsky) - InterEditions Le livre qui rend fou (R. Smullyan) - Dunod Page wikipedia de John McCarthy Page wikipedia de Marvin Minsky http://en.wikipedia.org/wiki/Q-systems
Bibliographie (4) Standards et IDE Standard Prolog ISO http://www.iso.org/iso/iso_catalogue http://fsl.cs.uiuc.edu/images/9/9c/PrologStandard.pdf SWI Prolog (Open source) http://en.wikipedia.org/wiki/SWI-Prolog Visual Prolog http://en.wikipedia.org/wiki/Visual_Prolog
Bibliographie (5) Autres cours à consulter (.pdf et .ppt) INF242V – R. Janvier (CNRS) Prog. fonctionnelle et logique (L3) NFP120 CNAM Programmation logique EPM – M. Gagnon Le langage Prolog – INRIA Programmation logique – I. Stepan …
Mon premier programme Prolog Sous forme d’une question ! Peux tu résoudre le prédicat suivant ? ?- write(‘Hello world’). Hello world true write est un prédicat prédéfini Constantes chaînes entre quotes write(‘Hello l’’oiseau !’).
Les multiples facettes de Prolog Enumération non exhaustive Description ensembles et relations Gestion de bases de connaissances Langage de requêtes Moteur d’inférences Langage de programmation déclarative …
Description d’ensembles et de relations Forte analogie avec les S.G.B.D. Modèle entités/relations Description par énumération Description en compréhension Description des propriétés de chaque élément En logique, Relation = Prédicat ! La B.D. devient Base de Connaissances !!
La base de connaissances (BdC) Principe du monde clos Tout ce qui doit être connu (du raisonnement à conduire !) doit être inclus dans la BdC. BdC : textuelle et modulaire BdC : bases de faits et bases de règles BdC : syntaxe unique de description BdC : chargement dynamique à la demande Cf fichier source joint (genealogie.pl)
Langage de requêtes (1) Questions posées sous forme de buts Les questions ne peuvent porter que sur le monde décrit par une BdC cible. Chargement par le prédicat prédéfini consult En logique, Question = But Conjonction possible de buts
Langage de requêtes (2) Système formel des clauses de Horn Le monde est supposé clos. Algorithme d’effacement des buts Erreur si le prédicat est absent de la BdC Disjonction modélisée par règles Recherche de toutes les solutions Prédicat prédéfini ! (cut)
Langage de requêtes (3) Système formel des clauses de Horn Usage d’inconnues (variables) Algorithme d’unification (A. Robinson) Propagation de contraintes dans la conjonction Usage possible de prédicats prédéfinis http://fr.wikipedia.org/wiki/Unification
Moteur d’inférences Raisonnement déductif (modus ponens) Recherche toutes les solutions. Algorithme de substitution (queue de règles) En profondeur d’abord Algorithme chaînage arrière (backtracking) Algorithme d’unification (A. Robinson) Algorithme de propagation de contraintes dans l’arbre d’effacement des buts
Solveur d’équations logiques Compléments d’illustration Prédicat prédéfini = (unir) Principe de réversibilité
Langage de programmation (1) Programmation déclarative et symbolique Entièrement basée sur la description d’arbres Arbres de données et arbres de traitement Normalisation ISO (IEC 13211-1) Langage interprété Interpréteur multi threads Chargement dynamique et modulaire
Langage de programmation (2) Entièrement basé sur la description d’arbres Possibilité de modification dynamique Prédicats prédéfinis assert et retract Gestion des exceptions (sens C++ du terme) Langage introspectif et réflexif Gestion des listes (chaînées) Prédicats prédéfinis nombreux et puissants