M é ca n ism e Pr o lo g. Ex e m p le



Documents pareils
Initiation à la Programmation en Logique avec SISCtus Prolog

CORRECTION EXERCICES ALGORITHME 1

STAGE IREM 0- Premiers pas en Python

Algorithmes récursifs

1/24. I passer d un problème exprimé en français à la réalisation d un. I expressions arithmétiques. I structures de contrôle (tests, boucles)

Logique : ENSIIE 1A - contrôle final

Recherche dans un tableau

Les structures de données. Rajae El Ouazzani

Initiation à l algorithmique

Les chaînes de caractères

Complexité. Licence Informatique - Semestre 2 - Algorithmique et Programmation

Les arbres binaires de recherche

Le chiffre est le signe, le nombre est la valeur.

INF601 : Algorithme et Structure de données

Bases de données Cours 5 : Base de données déductives

Structures algébriques

SOMMAIRE. Travailler avec les requêtes... 3

Chap 4: Analyse syntaxique. Prof. M.D. RAHMANI Compilation SMI- S5 2013/14 1

Travaux pratiques. Compression en codage de Huffman Organisation d un projet de programmation

TP n 2 Concepts de la programmation Objets Master 1 mention IL, semestre 2 Le type Abstrait Pile

chapitre 4 Nombres de Catalan

INITIATION AU LANGAGE C SUR PIC DE MICROSHIP

ARBRES BINAIRES DE RECHERCHE

UEO11 COURS/TD 1. nombres entiers et réels codés en mémoire centrale. Caractères alphabétiques et caractères spéciaux.

I. Introduction aux fonctions : les fonctions standards

Exercices types Algorithmique et simulation numérique Oral Mathématiques et algorithmique Banque PT

1 Recherche en table par balayage

Maple: premiers calculs et premières applications

Algorithmique, Structures de données et langage C

5 ème Chapitre 4 Triangles

Cours d introduction à l informatique. Partie 2 : Comment écrire un algorithme? Qu est-ce qu une variable? Expressions et instructions

Arbres binaires de recherche

Exercices - Polynômes : corrigé. Opérations sur les polynômes

Vers l'ordinateur quantique

Rappels sur les suites - Algorithme

Le langage SQL Rappels

Langage SQL (1) 4 septembre IUT Orléans. Introduction Le langage SQL : données Le langage SQL : requêtes


Calculabilité Cours 3 : Problèmes non-calculables.

Cours de Master Recherche

Algorithmique et Programmation Fonctionnelle

Correction TD algorithmique

Corrigé des TD 1 à 5

MIS 102 Initiation à l Informatique

Intelligence Artificielle Planification

Théorie des Langages

TD1 Signaux, énergie et puissance, signaux aléatoires

DOCM Solutions officielles = n 2 10.

Développements limités. Notion de développement limité

Définitions. Numéro à préciser. (Durée : )

Angles orientés et trigonométrie

IN Cours 1. 1 Informatique, calculateurs. 2 Un premier programme en C

Objectifs du cours d aujourd hui. Informatique II : Cours d introduction à l informatique et à la programmation objet. Complexité d un problème (2)

Projet d informatique M1BI : Compression et décompression de texte. 1 Généralités sur la compression/décompression de texte

Centre CPGE TSI - Safi 2010/2011. Algorithmique et programmation :

1. LA GESTION DES BASES DE DONNEES RELATIONNELLES

Conception de circuits numériques et architecture des ordinateurs

# let rec concat l1 l2 = match l1 with [] -> l2 x::l 1 -> x::(concat l 1 l2);; val concat : a list -> a list -> a list = <fun>

L'instruction if permet d'exécuter des instructions différentes selon qu'une condition est vraie ou fausse. Sa forme de base est la suivante:

Chapitre 3. Mesures stationnaires. et théorèmes de convergence

Initiation à la programmation en Python

Plan. Exemple: Application bancaire. Introduction. OCL Object Constraint Language Le langage de contraintes d'uml

COMMANDES SQL... 2 COMMANDES DE DEFINITION DE DONNEES... 2

Architecture des ordinateurs TD1 - Portes logiques et premiers circuits

TP3 : Manipulation et implantation de systèmes de fichiers 1

1. Qu'est-ce que SQL? La maintenance des bases de données Les manipulations des bases de données... 5

Master IMA - UMPC Paris 6 RDMM - Année Fiche de TP

1 de 46. Algorithmique. Trouver et Trier. Florent Hivert. Mél : Florent.Hivert@lri.fr Page personnelle : hivert

Résolution d équations non linéaires

Cours 1 : Introduction Ordinateurs - Langages de haut niveau - Application

CHAPITRE VIII : Les circuits avec résistances ohmiques

Premiers pas avec Mathematica

Codage d information. Codage d information : -Définition-

1 radian. De même, la longueur d un arc de cercle de rayon R et dont l angle au centre a pour mesure α radians est α R. R AB =R.

Les travaux doivent être remis sous forme papier.

introduction Chapitre 5 Récursivité Exemples mathématiques Fonction factorielle ø est un arbre (vide) Images récursives

Par combien de zéros se termine N!?

De même, le périmètre P d un cercle de rayon 1 vaut P = 2π (par définition de π). Mais, on peut démontrer (difficilement!) que

données en connaissance et en actions?

* très facile ** facile *** difficulté moyenne **** difficile ***** très difficile I : Incontournable T : pour travailler et mémoriser le cours

LibreOffice Calc : introduction aux tableaux croisés dynamiques

Rappel. Analyse de Données Structurées - Cours 12. Un langage avec des déclaration locales. Exemple d'un programme

LE MODELE CONCEPTUEL DE DONNEES

1. Introduction Création d'une requête...2

Cours d Informatique

Chapitre VI- La validation de la composition.

Bases de programmation. Cours 5. Structurer les données

La fonction exponentielle

Quelques Algorithmes simples

Génie Logiciel avec Ada. 4 février 2013

Fonctions de plusieurs variables

Algorithmes de recherche

Durée de L épreuve : 2 heures. Barème : Exercice n 4 : 1 ) 1 point 2 ) 2 points 3 ) 1 point

TP : Shell Scripts. 1 Remarque générale. 2 Mise en jambe. 3 Avec des si. Systèmes et scripts

Calculateur quantique: factorisation des entiers

Limites finies en un point

CORRIGE LES NOMBRES DECIMAUX RELATIFS. «Réfléchir avant d agir!»

Cours d initiation à la programmation en C++ Johann Cuenin

Initiation. àl algorithmique et à la programmation. en C

Transcription:

M é ca n ism e Pr o lo g Principe général : 5. on élimine L du but (le but est géré comme une pile de clauses) 1. on prend dans le but (clause ne contenant que des littéraux négatifs) le premier littéral négatif L 3. on parcours la base de faits et règles séquentiellement jusqu'à trouver une clause C dont le littéral positif est identique à L. Si on n'en trouve pas, la résolution s'arrête sur un échec 7. on ajoute les littéraux négatifs de C au but en unifiant (bien entendu, si C est un fait, on n'ajoute aucun littéral) 9. si le but est la clause vide, on arrête sur un succès, sinon on repart en 1 1 Base de faits et de règles : Ex e m p le On pose la question : humain(h)? homme('roger'). homme('robert'). femme('gertrude'). femme('germaine'). humain(x) :- homme(x) humain(x) :- femme(x). on trouve humain(x) :- homme(x), le but devient homme(x)? en unifiant par la substitution {X/H} on trouve homme('roger'), le but devient la clause vide en unifiant par {'roger'/x} résultat en remontant les unifications : H = 'roger' Le mécanisme complet est plus compliqué arbre de résolution 2

Ar b r e d e r e ch e r ch e ( 1 ) Base de faits et de règles : femme('gertrude'). femme('germaine'). On pose la question : humain(h)? humain(x) :- homme(x) humain(x) :- femme(x). on trouve humain(x) :- homme(x), le but devient homme(x)? on ne trouve pas de clause contenant homme comme littéral positif => échec Il faut pouvoir remonter à la question initiale et utiliser la deuxième clause contenant humain en littéral positif (avec femme(x)) 3 Alg o r it h m e b a ck t r a ck Pr olo g Sélectionner le premier littéral négatif du but, L Remplacer L dans le but par les littéraux négatifs de la clause Existe t-il une clause après le point de choix courant ayant L pour littéral positif? oui non Mémoriser le point de choix oui Existe t-il un point de choix précédent? Echec Succès oui non Le but est-il vide? non 4

St r a t é g ie d e Pr o lo g ( 1 /2 ) Pour résoudre un but, Prolog construit l arbre de recherche du but et le parcours en profondeur d abord Prolog ne trouve pas toujours de solution nœud feuille de succès : c est une solution, Prolog l affiche et peut chercher d autres solutions en remontant au dernier point de choix nœud feuille d'échec : remontée dans l arbre jusqu'à un point de choix possédant des branches non explorées il faut des faits et règles correspondant au but il faut pouvoir unifier p(x,x) et p(titi,toto) ne peuvent être unifiés q(x,y) et q(p(t),y) peuvent être unifiés 5 St r a t é g ie d e Pr o lo g ( 2 /2 ) Si l unification échoue : situation d'échec sur la règle considérée pour démontrer la formule. Si l unification réussit : substitution des variables présentes dans la queue de la clause par les valeurs correspondantes des variables de l unificateur. A la fin, l ensemble des couples valeur-variable des variables présentes dans la question initiale forme la solution affichée par Prolog. 6

Gr a p h e d e r é so lu t io n grand-pere(a,b) grand-pere(x,y) pere(x,z) pere(z,y) A->X B->Y pere(robert,romain) pere(roger,robert) X->robert X->roger Z->romain Z->robert pere(romain,y) pere(robert,y) Y->romain ECHEC pere(robert,romain). pere(roger,robert). SUCCES Programmation pere(x,z) Logique et Prolog pere(z,y) grand_pere(x,y) :- pere(x,z),pere(z,y). romainarbre_resolution7 pere(robert,romain) B = Y = A = X = roger Gr a p h e ET /O U grand-pere(a,b) X->robert Z->romain pere(x,z) pere(robert,romain). pere(roger,robert). X->roger Z->robert pere(z,y) grand_pere(x,y) :- pere(x,z),pere(z,y). pere(romain,y) ECHEC pere(robert,y) Y->romain SUCCES A = X = roger B = Y = romain 8

T r a ce d e r é so lu t io n Le prédicat d'arité nulle trace (resp. notrace) permet d'afficher (resp. de masquer) la trace de résolution d'un programme Prolog. ExempleProlog Ba ck t r a ck Possibilité de forcer le backtrack en cas de réussite pour trouver une autre solution (; dans l'interpréteur) l'ordre des littéraux dans la queue de clause l'ordre des clauses Le résultat peut dépendre de : Il peut exister plusieurs solutions à une même requête : non déterminisme de Prolog Les prédicats ne sont pas des fonctions : ils "retournent" vrai ou faux, et l'unification permet de trouver des valeurs des variables qui rendent le but vrai 9 10

Ré cu r siv it é e n Prolo g ( ExempleProlog 1 /2 ) Récursivité : un programme est récursif lorsqu'il s'appelle lui même Exemple : la factorielle en 2 lignes En Prolog, les prédicats peuvent "s'appeler" eux-mêmes, c'està-dire que le prédicat de tête d'une règle se retrouve dans la queue de la règle factorielle(1,1). factorielle(n,f) :- N=\=1, X is N-1, factorielle(x,y), F is Y*N. 11 Ré cu r siv it é e n Prolo g ( 2 /2 ) On peut aussi faire de la récursivité croisée entre règles Attention à l'ordre des clauses : pair(0). pair(n) :- N=\=0, M is N-1, impair(m). impair(0) :- fail. impair(n) :- N=\=0, M is N-1, pair(m). sélection d'une clause pour résolution : la première de la liste sélection d'un sous-but : le premier de l'ensemble des buts => la condition d'arrêt de la récursivité doit être en premiére position 12

... Pr é d ica t s p r é d é f in is Des dizaines de prédicats sont prédéfinis (built-in predicates) : unification égalité, différence arithmétique analyse des termes gestion des flux d'entrée et de sortie, sockets manipulation de listes méta-programmation (contrôle de la résolution) gestion de l'interpréteur et du système (mémoire, temps d'exécution,...) Présentation d'un prédicat : nom_predicat(mode type_param1, mode type_param2,...) <mode> : + (le terme doit être instancié à l'appel), - (le terme doit être une variable qui sera instanciée si le prédicat réussit), ou? exemple : sort(+list,?list) réussit si la deuxième liste est le résultat du tri de la première liste 13 Te st su r le s t y p e s Prolog offre la possibilité de tester les types des termes : var(?term) réussit si le paramètre est non instancié nonvar(?term) réussit si le paramètre est instancié atom(?term) réussit si le paramètre est instancié par un atome integer(?term) réussit si le paramètre est un entier float(?term) réussit si le paramètre est un réel number(?term) réussit si le paramètre est un entier ou un réel atomic(?term) réussit si le paramètre est un nombre ou un atome compound(?term) réussit si le paramètre est un terme composé (liste non vide ou structure) callable(?term) réussit si le paramètre est un atome ou un terme composé list(?term) réussit si le paramètre est une liste... 14

U n if ica t io n d e t e r m e s Prédicat d unification : = X = Y (ou =(?term,?term)) réussit si X s unifie avec Y X \= Y (ou \=(?term,?term)) réussit si X ne peut s'unifier avec Y Programmation unify_with_occurs_check(?term, Logique et Prolog?term) ne réussit que si aucune variable n'est unifiée avec un terme qui contient cette variable) a(b,c) = a(2,3). donne YES {B=2, C=3} =(a(x,y,l),a(y,2,carole)). donne YES {X=2, Y=2, L=carole} a(x,x,y) = a(y,u,v). donne NO Attention : = n'est pas une affectation! 15 Eg a lit é d e t e r m e s Prédicat d'égalité : == X == Y (ou ==(?term,?term)) réussit si les termes sont identiques (pas simplement unifiables) X \== Y (ou \==(?term,?term)) réussit si les termes ne sont pas identiques a == a. donne YES ==(A,a). donne NO 2 == 3. donne NO a(g,7) == a(6,7). donne NO 16

Co m p a r a iso n d e t e r m e s Les termes Prolog sont totalement ordonnés : les opérateurs @<, @>, @=<, @>= s'appliquent sur tous les termes l'ordre des termes est : 1) variables 2) nombres réels 3) nombres entiers 4) atomes dans l'ordre alphabétique 5) termes composés (listes, structures) a(f,g) @< ar(t,u). donne YES @<("bla","blabla"). donne YES coucou @< couc. donne NO 2 @< 5.6. donne NO [a,b] @< [a,b,c]. donne YES 17 Ar it h m é t iq u e Une expression arithmétique est constituée par des opérateurs des nombres (constantes ou variables instanciées) Les opérateurs ne sont pas des prédicats mais des fonctions! Les opérateurs sont les opérateurs classiques : -, +,, /, **, //, rem, mod, abs, min, max, sign, sqrt, sin, cos, tan, log, exp,... Les opérateurs binaires (sauf min et max) peuvent être utilisés en notation préfixée, +(2,3), ou infixée, 2+3 18

Ev a lu a t io n Une expression arithmétique est évaluée si elle apparait comme argument d'un prédicat qui porte sur des nombres. L'évaluation est forcée par le prédicat is(?var,+evaluable) R = 2+3. donne YES {R = 2+3} R is +(2,3). donne YES {R = 5} is(t,4 mod 3) donne YES {T = 1} Attention : pour qu'une évaluation ait lieu dans une expression où apparaissent des variables, il faut que les variables soient instanciées (par des nombres ou des expressions évaluables) au moment de l'évaluation de l'expression R is A + 2. donne une instantiation_error A is 3/4, B is A +1. donne YES {A = 0.75, B = 1.75} 19 Prio r it é d e s o p é r a t e u r s La priorité des opérateurs est fixée par un entier 20

Le langage Co m p a r a iso n d e s n om b r e s Comparaisons de nombres : <, =<, >= et > utilisés avec une syntaxe de prédicat ou d'opérateurs réussissent si les arguments sont des nombres (évaluation) et s'ils respectent l'ordre indiqué Programmation Exemples Logique et : Prolog <(2,5.6). donne YES 5.8 >= 5.8. donne YES Egalité de nombres : =:= et =\= 21 Le langage utilisés avec une syntaxe de prédicat ou d'opérateurs réussissent si les arguments sont des nombres (évaluation) et s'ils respectent l'égalité ou l'inégalité 2 =:= 3. donne NO 3.5 =:= 3.5. donne YES Ex e m p le : ca lcu l d u P GCD On veut écrire un prédicat qui calcule le PGCD de deux entiers : pgcd(+evaluable, +evaluable, -term) Algorithme d'euclide : calcul du PGCD de x et y si x = y, le pgcd est x si x < y, le pgcd est le pgcd de x et y - x si y < x, le pgcd est le pgcd de y et x pgcd(x,x,x). pgcd(x,y,d) :- X < Y, Z is Y-X, pgcd(x,z,d). pgcd(x,y,d) :- Y < X, pgcd(y,x). 22

D é f in it io n d 'o p é r a t e u r s Possibilité de définir de nouveaux opérateurs via le prédicat op(+integer,+operator_specifier,+atom) Le premier argument est la priorité de l'opérateur (entre 0, le plus prioritaire et 1200) Le deuxième argument spécifie le type de l'opérateur fx : opérateur préfixé non associatif fy : opérateur préfixé associatif à droite xf : opérateur postfixé non associatif yf : opérateur postfixé associatif à gauche yfx : opérateur infixé associatif à gauche xfy : opérateur infixé associatif à droite xfx : opérateur infixé non associatif Le troisième argument spécifie le nom de l'opérateur Les appels op(200, yfx, ou). et op(100, yfx, et). définissent les opérateurs et et ou 23