PROLOG . OBJECTIFS . PROLOG INTRODUCTION DEFINITION LA BOITE A OUTILS PROLOG LANGAGES VOISINS EXEMPLES ORIGINE 1970 PROgrammation LOGique GRANDS ESPOIRS 1990 UTILISE EN INTERNE PAR LES APPLICATIONS SYSTEMES EXPERTS PRINCIPES ENSEMBLE DE FAITS ET DE REGLES MOTEUR D'INFERENCE LES COMBINES POUR REPONDRE A UNE DEMANDE PROLOG AVANTAGE – PAS DE PROGRAMMATION INCONVENIENTS – LENT – PAS STANDARDISE – RETOUR A LA PROGRAMMATION POUR OPTIMISATION PROLOG APPLICATIONS SYSTEME EXPERT BASE DE DONNEES CALCUL SYMBOLIQUE RESOLUTION DE CONTRAINTES CLAUSES FAITS REGLES LES FAITS habite(daniel,massy). PREDICAT(ARGUMENTS). SENS DE LA RELATION ?- habite(pierre,paris). habite – true – false daniel massy LES FAITS possède(john,livre(zola,germinal)). possède john livre zola germinal LES REGLES 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 NOMBRES – 123, 1e10 CONSTANTES – daniel, massy, "Pierre", paris, paul, antony INCONNUES – _ville, Personne – anonyme '_' INTERROGATION ?- habite_capitale(daniel). ?- habite_capitale("Pierre"). ?- habite_capitale(X). ?- habite_capitale(_). LOGIQUE ORDRE 0 : FAITS ORDRE 0+ : FAITS + REGLES(CONSTANTES) ORDRE 1 : FAITS + REGLES(INCONNUES) SYSTEME EXPERT BASE – FAITS – REGLES 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 [élément1, élément2, élément3 ] [Tete|Reste] Predicat = ..Liste ! CUT VERSION SANS ! – abs(Z,N) :- Z>=0 , N = Z. – abs(Z,N) :- Z<0 , N = -Z. VERSION AVEC ! – abs(Z,N) :- Z>=0 , !, N = Z. – abs(Z,N) :- N = -Z. FAIL BOITE A OUTILS MANIPULATION DE CLAUSES – abolish, assert, asserta, assertz, retract, arg, functor. TESTS SUR LES DONNEES – integer, novar, var, atom, atomic, number ENTREES SORTIE – listing, nl, read, put, see, seen, tell, told, write LA MISE AU POINT – trace, notrace – spy, nospy LE CALCUL – opérateurs de comparaison – X is expression DEFINITION D'OPERATEURS habite(jean,paris) :- op(800,xfy,habite) jean habite paris. UTILISE PAR LES GRAMMAIRES LES GRAMMAIRES /* règles de décomposition d'une phase */ – – – – /* définition du dictionnaire typé des mots */ – – – – – 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]) PROGRAM\SANAL TURBO PROLOG REVENDU PAR BORLAND TYPES MODULES SEPARATION DONNEES/TRAITEMENTS REGLES STATIQUES PROLOG III CONTRAINTES SUR LES DONNEES RESOLUTION DE SYSTEMES LINEAIRES TUPLETS AU LIEU DE LISTE AUTRES SYSTEMES EXPERTS KOOL (BULL) SYSTEME EXPERT OBJET – classes, objets, attributs, et méthodes – règles et moteur d'inférence CAD_GEODE GESTION CONFIGURATION – objet – base de données relationnelles – système expert LANGAGES CLASSIQUES – C/C++ – PASCAL LANGAGE PAR CONTRAINTES CHARME (BULL) DEFINITION DES CONTRAINTES – MATRICIEL – ITERATIONS – NUMERIQUE MOTEUR D'INFERENCE – PRIORITE AUX VOIES A FAIBLE COMBINATOIRE EXEMPLE SYSTEME EXPERT CALCUL SYMBOLIQUE TRI TOUR DE HANOI RECHERCHE DE CHEMINS PROBLEME DES REINES SYSTEME EXPERT adam paul martine martine hugo pierre marie anne daniel anna 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). PROGRAM\DIFF 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,D1),d(B,D2),plus(D1,D2,D),!. d(X,D):- X =..Y,Y=['-',A,B],d(A,D1),d(B,D2),plus(D1,-D2,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,UpV),plus(UVp,UpV,D),!. d(X,D):- X =..Y,Y=['/',U,V],d(U,Up),d(V,Vp), mult(U,Vp,UVp),mult(Up,V,UpV),plus(-UVp,UpV,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,D1), N1 is N - 1, mult( N1 ,D1,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,X2,D):-D = X2,!. plus(X1,0,D):-D = X1,!. plus(X1,X2,D):-D is X1+X2,!. plus(X,X,D):-D = 2*X,!. plus(X1,X2,D):-D = X1+X2. DERIVEE % simplifications d'un produit mult(0,_,D):-D = 0,!. mult(_,0,D):-D = 0,!. mult(X1,X2,D):-D is X1*X2,!. mult(1,X2,D):-D = X2,!. mult(X1,1,D):-D = X1,!. mult(X1,X1):-D = X1 puiss 2,!. mult(X1,X2,D):-D = X1*X2. end. QUICKSORT PRENDRE LE PREMIER ELEMENT COMME CRITERE SEPARER EN DEUX LISTES – > CRITERE – < CRITERE TRIER LES SOUS-LISTES CONCATENER LES SOUS-LISTES TRIEES QSORT.PRO ARBRES % consultation/insertion dans l'arbre 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 ENTREE LISTE DE VILLES ET DE DISTANCES TROUVER LES ITINERAIRES DIST.PRO REINES N REINES SUR UN ECHIQUIER AUCUNE N'EST ECHEC PROLOG OR NOT PROLOG ECHEC DU LANGAGE MULTITUDE DE LANGAGES UTILISES EN INTERNE PAR LES OUTILS IA