PROLOG

44
PROLOG .

description

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 - PowerPoint PPT Presentation

Transcript of PROLOG

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 EXPERTSPRINCIPES

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

PROLOGAPPLICATIONS

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).

– true

– false

habite

massydaniel

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-PROLOGhabite_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'INFERENCEQUESTION

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'INFERENCEUNIFICATION

habite("Pierre",paris).habite(daniel,massy).habite(paul,antony).capitale(paris).capitale(londres).habite_capitale(Personne) :- habite(Personne,_ville),capitale(_ville).

?-habite_capitale(daniel).

Personne=daniel

MOTEUR D'INFERENCEUNIFICATION

habite("Pierre",paris).habite(daniel,massy).habite(paul,antony).capitale(paris).capitale(londres).habite_capitale(daniel) :- habite(daniel,_ville),capitale(_ville).

?-habite_capitale(daniel).

unification impossible

MOTEUR D'INFERENCEUNIFICATION

habite("Pierre",paris).habite(daniel,massy).habite(paul,antony).capitale(paris).capitale(londres).habite_capitale(daniel) :- habite(daniel,_ville),capitale(_ville).

?-habite_capitale(daniel).

unification _ville=massy

MOTEUR D'INFERENCEUNIFICATION

habite("Pierre",paris).habite(daniel,massy).habite(paul,antony).capitale(paris).capitale(londres).habite_capitale(daniel) :- habite(daniel,massy),capitale(massy).

?-habite_capitale(daniel).OK

unifications impossibles

MOTEUR D'INFERENCEBACKTRACKING

habite("Pierre",paris).habite(daniel,massy).habite(paul,antony).capitale(paris).capitale(londres).habite_capitale(daniel) :- habite(daniel,_ville),capitale(_ville).

?-habite_capitale(daniel).VRAI FAUXFAUX

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 */– proposition --> objet , reste_de_phrase.

– objet --> article, nom.

– reste_de_phrase --> verbe, objet.

– reste_de_phrase --> objet.

/* définition du dictionnaire typé des mots */– 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 CONTRAINTESCHARME (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

FAMILLE.PRO

martine

adam

paul pierre marie

hugo anne

daniel anna

martine

DERIVEECALCUL 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) = xd(X,D):-X=x,D is 1,!.

% dérivée d'une somme ou différenced(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 rapportd(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 circulaired(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 naturelled(X,D):- X =..Y,Y=['log',U],d(U,Up),D = Up/U,!.% fonction puissance constanted(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éRd(X,D):-D is 0.

% simplifications d'une sommeplus(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 produitmult(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'arbrearbre(CLEF, fiche(CLEF,INFO,_,_), INFO) :- !. % trouvé% cherche avantarbre(CLEF, fiche(CLEFCC,_,AVANT,_), INFO) :- CLEF @< CLEFCC, arbre(CLEF, AVANT, INFO).% cherche aprèsarbre(CLEF, fiche(CLEFCC,_,_,APRES), INFO) :- CLEF @> CLEFCC, arbre(CLEF, APRES, INFO).end.

RECHERCHEITINERAIRE

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