PROLOG OBJECTIFS n PROLOG n n n INTRODUCTION
PROLOG.
OBJECTIFS n .
PROLOG n n n INTRODUCTION DEFINITION LA BOITE A OUTILS PROLOG LANGAGES VOISINS EXEMPLES
ORIGINE n n n 1970 PROgrammation LOGique GRANDS ESPOIRS 1990 UTILISE EN INTERNE PAR LES APPLICATIONS
SYSTEMES EXPERTS PRINCIPES n n ENSEMBLE DE FAITS ET DE REGLES MOTEUR D'INFERENCE LES COMBINES POUR REPONDRE A UNE DEMANDE
PROLOG n AVANTAGE – PAS DE PROGRAMMATION n INCONVENIENTS – LENT – PAS STANDARDISE – RETOUR A LA PROGRAMMATION POUR OPTIMISATION
PROLOG APPLICATIONS n n SYSTEME EXPERT BASE DE DONNEES CALCUL SYMBOLIQUE RESOLUTION DE CONTRAINTES
CLAUSES n n FAITS REGLES
LES FAITS n n habite(daniel, massy). PREDICAT(ARGUMENTS). SENS DE LA RELATION ? - habite(pierre, paris). habite – true – false daniel massy
LES FAITS n possède(john, livre(zola, germinal)).
LES REGLES n n habite_capitale(Personne): habite(Personne, Ville), capitale(Ville). Turbo-PROLOG habite_capitale(Personne)if habite(Personne, Ville) and capitale(Ville). ET , OU ;
DES FAITS ET DES REGLES /* prédicat habite */ habite(daniel, massy). habite("Pierre", paris). habite(paul, antony). /* prédicat capitale */ capitale(paris). capitale(londres). /* prédicat habite_capitale */ habite_capitale(Personne) : - habite(Personne, _ville), capitale(_ville).
LEXIQUE n NOMBRES – 123, 1 e 10 n CONSTANTES – daniel, massy, "Pierre", paris, paul, antony n INCONNUES – _ville, Personne – anonyme '_'
INTERROGATION n n ? - habite_capitale(daniel). ? - habite_capitale("Pierre"). ? - habite_capitale(X). ? - habite_capitale(_).
LOGIQUE n n n ORDRE 0 : FAITS ORDRE 0+ : FAITS + REGLES(CONSTANTES) ORDRE 1 : FAITS + REGLES(INCONNUES)
SYSTEME EXPERT n BASE – FAITS – REGLES n MOTEUR D'INFERENCE – CHAINAGE AVANT – CHAINAGE ARRIERE
MOTEUR D'INFERENCE QUESTION habite("Pierre", paris). habite(daniel, massy). habite(paul, antony). capitale(paris). capitale(londres). habite_capitale(Personne) : - habite(Personne, _ville), capitale(_ville). ? -habite_capitale(daniel).
MOTEUR D'INFERENCE UNIFICATION habite("Pierre", paris). habite(daniel, massy). habite(paul, antony). capitale(paris). Personne=daniel capitale(londres). habite_capitale(Personne) : - habite(Personne, _ville), capitale(_ville). ? -habite_capitale(daniel).
MOTEUR D'INFERENCE UNIFICATION habite("Pierre", paris). habite(daniel, massy). unification impossible habite(paul, antony). capitale(paris). capitale(londres). habite_capitale(daniel) : - habite(daniel, _ville), capitale(_ville). ? -habite_capitale(daniel).
MOTEUR D'INFERENCE UNIFICATION habite("Pierre", paris). habite(daniel, massy). unification _ville=massy habite(paul, antony). capitale(paris). capitale(londres). habite_capitale(daniel) : - habite(daniel, _ville), capitale(_ville). ? -habite_capitale(daniel).
MOTEUR D'INFERENCE UNIFICATION habite("Pierre", paris). habite(daniel, massy). habite(paul, antony). unifications impossibles capitale(paris). capitale(londres). habite_capitale(daniel) : - habite(daniel, massy), capitale(massy). ? -habite_capitale(daniel). OK
MOTEUR D'INFERENCE BACKTRACKING habite("Pierre", paris). habite(daniel, massy). habite(paul, antony). capitale(paris). capitale(londres). habite_capitale(daniel) : - habite(daniel, _ville), capitale(_ville). ? -habite_capitale(daniel). FAUX VRAI FAUX
LISTES n n n [élément 1, élément 2, élément 3 ] [Tete|Reste] Predicat =. . Liste
! CUT n VERSION SANS ! – abs(Z, N) : - Z>=0 , N = Z. – abs(Z, N) : - Z<0 , N = -Z. n VERSION AVEC ! – abs(Z, N) : - Z>=0 , !, N = Z. – abs(Z, N) : - N = -Z.
FAIL
BOITE A OUTILS n MANIPULATION DE CLAUSES – abolish, asserta, assertz, retract, arg, functor. n TESTS SUR LES DONNEES – integer, novar, atom, atomic, number n ENTREES SORTIE – listing, nl, read, put, seen, tell, told, write n LA MISE AU POINT – trace, notrace – spy, nospy n LE CALCUL – opérateurs de comparaison – X is expression
DEFINITION D'OPERATEURS n n habite(jean, paris) : - op(800, xfy, habite) jean habite paris. UTILISE PAR LES GRAMMAIRES
LES GRAMMAIRES n /* règles de décomposition d'une phase */ – – n /* définition du dictionnaire typé des mots */ – – – n proposition --> objet , reste_de_phrase. objet --> article, nom. reste_de_phrase --> verbe, objet. reste_de_phrase --> objet. article --> [le]. article --> [la]. nom --> [pomme]. nom --> [femme]. verbe --> [mange]. /* interrogation test si phrase correcte: */ – phrase(proposition, [la, femme, mange, la, pomme]) PROGRAMSANAL
TURBO PROLOG n n n REVENDU PAR BORLAND TYPES MODULES SEPARATION DONNEES/TRAITEMENTS REGLES STATIQUES
PROLOG III n n n CONTRAINTES SUR LES DONNEES RESOLUTION DE SYSTEMES LINEAIRES TUPLETS AU LIEU DE LISTE
AUTRES SYSTEMES EXPERTS n KOOL (BULL) SYSTEME EXPERT OBJET – classes, objets, attributs, et méthodes – règles et moteur d'inférence n CAD_GEODE GESTION CONFIGURATION – objet – base de données relationnelles – système expert n LANGAGES CLASSIQUES – C/C++ – PASCAL
LANGAGE PAR CONTRAINTES CHARME (BULL) n DEFINITION DES CONTRAINTES – MATRICIEL – ITERATIONS – NUMERIQUE n MOTEUR D'INFERENCE – PRIORITE AUX VOIES A FAIBLE COMBINATOIRE
EXEMPLE n n n SYSTEME EXPERT CALCUL SYMBOLIQUE TRI TOUR DE HANOI RECHERCHE DE CHEMINS PROBLEME DES REINES
SYSTEME EXPERT FAMILLE. PRO
DERIVEE CALCUL SYMBOLIQUE % % d(expression, DERIVE) % calcul dans DERIVE la dérive d(expression)/dx % % les opérateurs traités sont puiss, sin, cos, log, +, -, *, / % % définition de l'opérateur x puiss y : -op(200, xfy, puiss). PROGRAMDIFF
DERIVEE % cas particulier f(x) = x d(X, D): -X=x, D is 1, !. % dérivée d'une somme ou différence d(X, D): - X =. . Y, Y=['+', A, B], d(A, D 1), d(B, D 2), plus(D 1, D 2, D), !. d(X, D): - X =. . Y, Y=['-', A, B], d(A, D 1), d(B, D 2), plus(D 1, -D 2, D), !. % dérivée d'un produit ou d'un rapport d(X, D): - X =. . Y, Y=['*', U, V], d(U, Up), d(V, Vp), mult(U, Vp, UVp), mult(Up, V, Up. V), plus(UVp, Up. V, D), !. d(X, D): - X =. . Y, Y=['/', U, V], d(U, Up), d(V, Vp), mult(U, Vp, UVp), mult(Up, V, Up. V), plus(-UVp, Up. V, DN), D = DN/(V*V), !.
DERIVEE % dérivée d'une fonction circulaire d(X, D): - X =. . Y, Y=['sin', U], d(U, Up), mult(Up, cos(U), D), !. d(X, D): - X =. . Y, Y=['cos', U], d(U, Up), mult(Up, sin(U), MD), D = -MD, !. % fonction logarithme naturelle d(X, D): - X =. . Y, Y=['log', U], d(U, Up), D = Up/U, !. % fonction puissance constante d(X, D): - X =. . Y, Y=['puiss', U, N], d(U, Up), mult(U, Up, D 1), N 1 is N - 1, mult( N 1 , D 1, D), !.
DERIVEE % tout le reste est considéré comme constante à dérivéR d(X, D): -D is 0. % simplifications d'une somme plus(0, X 2, D): -D = X 2, !. plus(X 1, 0, D): -D = X 1, !. plus(X 1, X 2, D): -D is X 1+X 2, !. plus(X, X, D): -D = 2*X, !. plus(X 1, X 2, D): -D = X 1+X 2.
DERIVEE % simplifications d'un produit mult(0, _, D): -D = 0, !. mult(_, 0, D): -D = 0, !. mult(X 1, X 2, D): -D is X 1*X 2, !. mult(1, X 2, D): -D = X 2, !. mult(X 1, 1, D): -D = X 1, !. mult(X 1, X 1): -D = X 1 puiss 2, !. mult(X 1, X 2, D): -D = X 1*X 2. end.
QUICKSORT n n PRENDRE LE PREMIER ELEMENT COMME CRITERE SEPARER EN DEUX LISTES – > CRITERE – < CRITERE n n TRIER LES SOUS-LISTES CONCATENER LES SOUS-LISTES TRIEES QSORT. PRO
ARBRES % consultation/insertion dans l'arbre(CLEF, fiche(CLEF, INFO, _, _), INFO) : - !. % trouvé % cherche avant arbre(CLEF, fiche(CLEFCC, _, AVANT, _), INFO) : - CLEF @< CLEFCC, arbre(CLEF, AVANT, INFO). % cherche après arbre(CLEF, fiche(CLEFCC, _, _, APRES), INFO) : - CLEF @> CLEFCC, arbre(CLEF, APRES, INFO). end.
RECHERCHE ITINERAIRE n n ENTREE LISTE DE VILLES ET DE DISTANCES TROUVER LES ITINERAIRES DIST. PRO
REINES n n N REINES SUR UN ECHIQUIER AUCUNE N'EST ECHEC
PROLOG OR NOT PROLOG n n ECHEC DU LANGAGE MULTITUDE DE LANGAGES UTILISES EN INTERNE PAR LES OUTILS IA
- Slides: 44