Programmation logique Programmation Logique Eléments de
Transcription
Programmation logique Programmation Logique Eléments de
Programmation Logique Programmation logique • Suite de la programmation exotique • Le langage Prolog Pierre Tellier IUP3 GMI 2004/2005 UFR Maths-Info – IUP 3 Eléments de logique • Variables propositionnelles (Booléens) • Connecteurs : non, et, ou, implique, équivalent ¬∧∨⇒⇔ • p⇒q 0 0 1 0 0 1 1 1 • Antilogie : q et non q • Tautologie : q ou non q (q ou non p) 1 0 1 1 UFR Maths-Info – IUP 3 UFR Maths-Info – IUP 3 Résolution • Etant donnée une formule, on cherche une valuation pour que la formule soit vraie – Littéral : variable propositionnelle ou sa négation – Clause : disjonction de littéraux – Forme clausale : conjonction de clauses UFR Maths-Info – IUP 3 Clause de Horn • Clause avec au plus un littéral positif • Si que des négatifs : clause de Horn négative. • Lien avec programmation logique – ¬p∨¬q∨¬r∨s – ¬(p∧q∧r)∨s – (p∧q∧r) ⇒s • Assertion logique : s est vraie si p, q et r sont vérifiées • s :- p, q, r UFR Maths-Info – IUP 3 1 • • • • • • • • C1 : p C2 : p⇒q C3 : q⇒r Question : a-t-on r? C1 : p C2 : q∨¬p C3 : r∨¬q But : r UFR Maths-Info – IUP 3 PROgrammation LOGique • Programmation sous forme de relations logiques – L’interpréteur cherche à résoudre le problème à partir de connaissances en utilisant la résolution – On ne dit pas à l’ordinateur ce qu’il doit faire (et surtout comment), on se contente de modéliser logiquement le problème UFR Maths-Info – IUP 3 p q∨¬p r∨¬q ¬r q r [] UFR Maths-Info – IUP 3 • Programmation classique : on peut faire une fonction "genre", pour répondre à la question : quel est le genre de machin ? • En prolog, cette fonction permet aussi de répondre à la question : quels sont tous les hommes ? UFR Maths-Info – IUP 3 Bibliographie • En programmation classique, on peut écrire un programme qui concatène 2 chaînes de caractères • En Prolog, ce programme permet de répondre à la question : que vaut x qui concaténé à "b" donne "ab" ? • Mais aussi à : que valent x et y qui concaténés donnent "ab" ? UFR Maths-Info – IUP 3 • Y. Bellot, "Objectif Prolog • J. Elbaz, "Programmer en Prolog", Ellipses • L. Sterling & E. Shapiro, "L'art de Prolog", Masson UFR Maths-Info – IUP 3 2 Prolog • 1972 : création de Prolog par A. Colmerauer et P. Roussel (Groupe IA, Luminy, Univ. Marseille) • Déduire des conséquences des hypothèses logiques • Applications • Caractéristiques – – – – Pattern matching Backtracking Interactif Déclaratif – IA – Traitement langage naturel UFR Maths-Info – IUP 3 UFR Maths-Info – IUP 3 Programme Prolog • Enoncer des connaissances et hypothèses : axiomes • Résoudre le problèmes : démonstration à partir de ces axiomes • Encore une programmation totalement différente de la programmation impérative. • Calcul (inférence logique) sur des relations • Base de données + requêtes – BDD : clauses • faits • règles – Exécution interactive : question • No • Yes : Prolog identifie les variables satisfaisant la question UFR Maths-Info – IUP 3 UFR Maths-Info – IUP 3 Syntaxe Prolog • Termes – Atomes (constantes) : objets définis du problème • Identificateur : commence par une lettre minuscule • Nombre • Chaîne de caractères entre apostrophes (messages) – Variables : objets indéfinis du problème • Identificateur : commence par une lettre majuscule UFR Maths-Info – IUP 3 • Clauses – Faits : connaissances de bases établies a priori • fait. (formule prédictive quelconque) – Règles : règles de manipulation de connaissance • conclusion :- premisse. • concl :- prem1, … , premN. (conjonction de premisses) UFR Maths-Info – IUP 3 3 Prédicat / foncteur • Prédicat unaire – Propriété de l'argument – chien(rex). – pasBo(momo). • Binaire • Formule (prédictive) – Application d'un prédicat à ses arguments – Fait, jugement – Relation entre 2 objets – plusBo(moi,toi). • arité > 2 – Lien entre arguments – note(dugenou,pfl,2). UFR Maths-Info – IUP 3 UFR Maths-Info – IUP 3 Faits masculin(jean). masculin(luc). féminin(catherine). prédicat(arg1, …, argN). père(loïc,gérard). père(gérard, maxime). père(gérard,lise). • père/2 prédicat/arité masculin/1 UFR Maths-Info – IUP 3 Faits universels • Contiennent une ou plusieurs variables quantifiées couleurchat(nuit,Chat,gris). UFR Maths-Info – IUP 3 UFR Maths-Info – IUP 3 Termes clos, non clos • clos : ne contient pas de variable • terme non clos T : ensemble INFINI de termes clos (les instances de T) obtenus en substituant les variables de T par tous les termes clos possibles UFR Maths-Info – IUP 3 4 Question existentielle Questions • Questions (buts) : problèmes à résoudre – ?- but. (but simple: formule prédictive) – ?- but1, … , butN. (conjonction de buts) • permettent de savoir si un fait est vérifié ?- père(loïc, gérard). Yes ?- père(loïc,maxime). No UFR Maths-Info – IUP 3 • Comporte une ou plusieurs variables? ?- père(X,loïc). Est ce qu'il existe X tel que la relation père(X,loïc) existe ? ?- père(Y,Z). Est ce qu'il existe X et Y tels que la relation père(X,Y) existe ? UFR Maths-Info – IUP 3 Unification • Procédé par lequel on essaie de rendre 2 formules identiques en donnant des valeurs aux variables qu'elles contiennent • Peut échouer – père(X,X) UFR Maths-Info – IUP 3 • egal(X,X) • =, \= • ==, \== Opérateurs d'unification • Prolog unifie le terme de la question au terme contenu dans la base de données. • Substitution des variables par des termes (constantes) • Un terme A est une instance de B si il existe une substitution de A à B • ex masculin(jean) instance de masculin(X) • {X=jean} : substitution correspondante • Une variable instanciée ne peut changer de valeur UFR Maths-Info – IUP 3 l ?- masculin(jean). Yes ?- masculin(X). X = jean ; X = luc ; No UFR Maths-Info – IUP 3 UFR Maths-Info – IUP 3 5 Variables partagées Tous les fils d'un père. ?- pere(X,Y), masculin(Y). UFR Maths-Info – IUP 3 • Si X est un homme alors X boit de la bière (en cours de pfl) boit(X, bière) :- homme(X). • Il n'y a pas de fumée sans feu fumée :- feu. • Albert attaquera le prof de pfl si il echoue attaque('Albert',X) :note('Albert',pfl,Y),inférieurà10(Y), enseigne(X,pfl). UFR Maths-Info – IUP 3 Règles • Définissent des relations à partir des autres relations. but :- C1, … CN. • Clause de Horn • Tête : but • Eléments du corps : sous buts. Doivent être vérifiés pour pour vérifier le but UFR Maths-Info – IUP 3 majeur(X) :- age(X,Y), superieur(Y,18). mineur(X) :- age(X,Y), inferieur(Y,18). différentes unique(partagée) UFR Maths-Info – IUP 3 Variables anonymes majeur(X) :- age(X,Y), superieur(Y,18). mineur(X) :- age(X,Y), inferieur(Y,18). majeur(Ma) :- age(Ma,Aa), superieur(Aa,18). mineur(Mi) :- age(Mi,Ai), inferieur(Ai,18). UFR Maths-Info – IUP 3 majeur(X) :- age(X,Y), sup(Y,18). majeur(X) :- age(X,_), sup(_,18). • Variables partagées : Utilisation délicate • Semi-anonymat majeur(X) :- age(X,_Y), sup(_Y,18). UFR Maths-Info – IUP 3 6 Portée • Pas de conjonctions de faits • Pas de conjonctions de conclusions • Constantes – La totalité du programme • Variables – Clause dans laquelle elle se trouve UFR Maths-Info – IUP 3 Exercices • Arbre généalogique • Coloriage UFR Maths-Info – IUP 3 SWI-Prolog • • • • http://www.swi-prolog.org/ versions linux, windows, … installé sur ada Possibilité – écrire du code C/C++ pour définir de nouveaux prédicats – embarquer swi-prolog dans applications C/C++ – gcc, msvc, … UFR Maths-Info – IUP 3 UFR Maths-Info – IUP 3 Ecriture Prolog • Faits et règles d'un même prédicat groupés • L'ordre des sous buts a une importance • L'ordre des faits / règles n'a pas d'importance UFR Maths-Info – IUP 3 SWI-Prolog ?- consult('toto.pl'). ?- ['toto.pl']. ?- [toto]. ?- ['toto.pl', 'titi.pl']. ?- listing. ?- listing(père). ?- reconsult('toto.pl'). ?- [-'toto.pl']. ?- halt. UFR Maths-Info – IUP 3 7 Résolution Prolog • Principe d'effacement • Chaînage Arrière – Résolution de buts • Profondeur d'abord – Résolution complète du 1er but • Régime par tentative Chaînage arrière • Résolution d'un but B • Recherche d'une clause ayant B comme conclusion – fait B. : le but B est montré – règle B :- P1, … , PN. Il faut résoudre les prémisses – Choix 1ère clause, retour arrière éventuel UFR Maths-Info – IUP 3 UFR Maths-Info – IUP 3 Profondeur d'abord (1) p_atmo_elevee. (2) temp_elevee. (3) anticyclone :- p_atmo_elevee. (4) beau :- anticyclone. ?- beau. UFR Maths-Info – IUP 3 Interprétation logique chemin(Z,Z). chemin(X,Y) :- lien(X,I),chemin(I,Y). Attention bouclage ! chemin(Z,Z). chemin(X,Y) :- chemin(I,Y),lien(X,I). UFR Maths-Info – IUP 3 (1) p_atmo_elevee. (2) temp_elevee. (3) anticyclone :- isobare_eleve. (4) isobare_eleve :- p_atmo_elevee. (5) beau :- anticyclone, temp_elevee. ?- beau. UFR Maths-Info – IUP 3 • Point sur axe x ou y axe(_,0,0). axe(0,_,0). ?- axe(0,0,C). C=0 C=0 Pb : performances, lisibilité des résultats UFR Maths-Info – IUP 3 8 Arithmétique • En logique pure • Opérateurs arithmétiques impurs En logique pure • A l'aide de relations ternaires add(0, 1, 1). add(1, 0, 1). add(1, 1, 2). add(0, 2, 2). add(2, 0, 2). sub(X,Y,Z) :- add(Y,Z,X). UFR Maths-Info – IUP 3 UFR Maths-Info – IUP 3 Arithmétique impure lesseq(X,Y) :- add(X,_,Y). even(X) :- add(Y,Y,X). ?- lesseq(X,10), lesseq(Y,10), tester(X,Y). fact(0,1). fact(N,FN) :- sub(N,1,X), fact(X,FX), mult(N,FX,FN). ?- fact(5,X). ?- fact(X,X). ?- fact(X,120). UFR Maths-Info – IUP 3 1+1 n'est pas égal à 2 fact(0,1). fact(N,FN) :- X is N-1, fact(X,FX), FN is N*FX. fact(N,FN) :- N>0, X is N-1, fact(X,FX), FN is N*FX. longueur([],0). longueur([T|R],N) :longueur(R,M), N is M+1. UFR Maths-Info – IUP 3 SWI-Prolog égal_à_deux(X) :- X = 1+1. ?- égal_à_deux(2). No ?- égal_à_deux(1+1). Yes ?- égal_à_deux(X). X = 1+1 ; No UFR Maths-Info – IUP 3 UFR Maths-Info – IUP 3 9 Structures de données Enregistrements • Enregistrements : unification • Types récursifs – Listes – Arbres … UFR Maths-Info – IUP 3 UFR Maths-Info – IUP 3 Listes • Liste vide [] • Liste non vide [T|R] • Ex [1,2,3]. • concaténation concatène([],Y,Z) : vrai si Y=Z concatène([T|R],Y,Z) : vrai si Z est de la forme[T|S] S est la concaténation de R et Y Passer par U : Z=[U|Z], T=U concatène([],Y,Y). concatène([T|R],Y,[T|Z]) :concatène(R,Y,Z). Inversion inv([],[]). inv([X|Y],Z) :inv(Y,T),concatène(T,[X],Z). UFR Maths-Info – IUP 3 • member/2 UFR Maths-Info – IUP 3 • intersection • suppression member(X, [X|Y]). member(X, [Z|Y]) :- member(X, Y). UFR Maths-Info – IUP 3 UFR Maths-Info – IUP 3 10 Dérivée symbolique Coupure • Il insiste ! UFR Maths-Info – IUP 3 UFR Maths-Info – IUP 3 ifthenelse Négation not(P) :- P, !, fail. not(P) :- true. • Il vaut mieux que les variables soient instanciées avant d'utiliser une négation ?- not(member(X,[a,b])). No • Le programme identifie X à une des variables, réussit et le not le fait échouer. UFR Maths-Info – IUP 3 UFR Maths-Info – IUP 3 ET, OU marié(françois). étudiant(rené). étudiantCélibataire(X) :- not(marié(X)), étudiant(X). ?- étudiantCélibataire(X). No ?- étudiantCélibataire(rené). Yes % !!! étudiantCélibataire(X) :- étudiant(X), not(marié(X)). UFR Maths-Info – IUP 3 et(P,Q,1) :- P, Q, !. et(P,Q,0). ou(P,Q,1) :- P, !. ou(P,Q,1) :- Q, !. ou(P,Q,0). UFR Maths-Info – IUP 3 11 Problème de Einstein Exercice • cez 31 UFR Maths-Info – IUP 3 UFR Maths-Info – IUP 3 12