Cours 3 Langage Déclaratif : Prolog Conceptes Fondamentaux Kaninda Musumbu 1 Département d Informatique Université Bordeaux 1
Motivation Langages Procéduraux de nature "impérative", c.-à-d. ils exigent du programmeur, pour résoudre un problème, de définir selon un algorithme connu de lui et de préciser étape par étape la méthode de résolution de ce problème Langages Déclarative il revient au programmeur de déclarer "de quoi" est fait le problème, plutôt que "comment" le résoudre (Bihan 87)
Programmation déclarative Objectif On fait la description du problème à résoudre en listant : les objets concernés, leurs propriétés, les relations qu ils vérifient. Ensuite, le mécanisme de résolution parcourt de façon non déterministe toutes les possibilités du problème et peut donc retourner plusieurs solutions. PROLOG Langage dérivé du calcul des prédicats ou logique du premier ordre. Les prédicats servent à qualifier les objets du problème et à décrire les relations dans lesquelles ils sont impliqués.
Concepts Fondamentaux 1/3 Programme constitué de clauses de trois type : faits, règles et questions. Une relation peut être spécifiée par des faits n-uplets d objets vérifiant la relation pere(pierre, paul), egal(x,x) Règles : à partir de faits d établir de nouveaux faits par déduction si on a démontré P et P Q alors on a démontré Q.
Concepts Fondamentaux 2/3 Exemple "si on est le père du père ou de la mère de quelqu un alors on est son grand-père" grandpere(x,y):-pere(x,z),pere(z,y). grandpere(x,y):-pere(x,z),mere(z,y). ou encore grandpere(x,y):-pere(x,z),(pere(z,y);mere(z,y)).
Concepts Fondamentaux 3/3 Question moyen d extraire de l information dans un programme on cherche à savoir si une relation a lieu entre des objets Exemple?- pere(abraham,issac).?- plus(2,3,5).?- pere(issac, X). Remarque Pour répondre à une question relative à un programme, il faut déterminer si la question est conséquence logique du programme.
Formalisation Procédure ensemble de clauses concernant une même relation (ou prédicat). Définition Atome : prédicat ou formule (bien formée) enfant(x), mere(x,y), triangle(x,y,z),... Clause : enoncé de la forme : A B 1, B 2,...,B n A tête B 1, B 2,..., B n corps A est vrai si i B i est vrai
Structure de Donnée 1/2 Terme objet manipulé par un programme Prolog Type On distingue trois sortes de termes : variable représente des objets inconnus de l univers. Syntaxe : chaîne alpha-num commençant par une majuscule ou par_. termes atomiques représentant les objets simples connus de l univers. On distingue trois sortes : nombres : entiers ou flottants, atomes : chaîne alpha-numérique commençant par une minuscule termes composés représentant les objets structurés de l univers. Syntaxe : foncteur(t1,..., tn)
Structure de Donnée 2/2 Exemple adresse(351,"cours de la Libérations",Ville) cons(a,cons(x,nil)) Remarque Il n existe pas de distinction structurelle entre : l information au sens de "process" celle "qui dit ce qu il faut faire" l information au sens de "data" celle "sur quoi on travaille",
Opération d Unification Objectif Coeur de l utilisation de l inférence en I.A. C est l opération fondamentale en programmation logique. Remarque L unification réalise à elle seule : passage de paramètres affectation retour de valeurs sur la structure de données.
Réduction d un But Principe Soit G un but, et P un programme une réduction de G par P consiste à remplacer G par le corps d une instance d une règle de P dont la conclusion s unifie avec G. Remarque : L ordre de choix n a pas d importance pour le but à réduire mais a une importance pour la clause
Récursivité Intérêt éviter de définir explicitement toutes les acceptations du prédicat Exemple ancetre(x,y) :- pere(x,y). ancêtre(x,y) :- pere(x,z), pere(z,y). ancetre(x,y) :- père(x,z), père(z,w), père(w,y). ancetre(x,y) :- père(x,z), père(z,w), père(w,q),père(q,y). etc...
Récursivité Intérêt éviter de définir explicitement toutes les acceptations du prédicat Exemple ancetre(x,y) :- pere(x,y). ancêtre(x,y) :- pere(x,z), pere(z,y). ancetre(x,y) :- père(x,z), père(z,w), père(w,y). etc... Utiliser un raisonnement récursif ancetre(x,y) :- pere(x,y). ancêtre(x,y) :- pere(x,z), ancetre(z,y). ou bien ancetre(x,y) :- pere(x,y). ancêtre(x,y) :- ancetre(x,z), pere(z,y).
Interpréteur abstrait Entrée : une question Q et un programe P Sortie : θ, yes si l on a démontré Q à partir de P ou no sinon Algorithme : initialiser R = Q Tant_que R = A 1,..., A n début fin TQ si choisir A i et C p = A B j P A = A i avec 1 < i < n si echec break ; sinon θs.t.a i θ = A R = (A 1,..., A i 1, B 1,..., B m, A i+1,..., A n )θ R = alors sortie=yes, θ sinon sortie=no
Sémantique Définition M P dénote la sémantique d un programme P ssi il est égale à l ensemble de tous les buts de base déductible à partir de P. Consistance et complétitude M P = {A B P P A} et M consistance : M P M complétude : M M P consistance et complétude : M P = M
Consistance et complétitude Exemple Prog1 Prog2 p. p :- p. p :- p. p.?-p.
Exemple Base des règles : 1. si A et C alors E 2. si F et C alors H 3. si B et E alors H 4. si B alors C 5. si H alors X Base des faits : 1. A. 2. B. "Est-ce que X est déductible de ce programme?"