Bruno Delb                           http://www.brunodelb.com                       Date : 27/12/1998

                                              Le langage Prolog



                                                Sommaire

INTRODUCTION..........................................................................................................2

COMMENT EST STRUCTURÉ UN PROGRAMME ?...........................................................3
  QUELLE EST LA STRUCTURE GÉNÉRALE D’UN PROGRAMME ?...........................................................3
  QU’EST-CE QU’UN PRÉDICAT ?............................................................................................3
  QU’EST-CE QU’UN TERME ?................................................................................................3
  QU’EST-CE QUE LE REGROUPEMENT EN PAQUET ?......................................................................3
COMMENT CONSTRUIRE DES RELATIONS ?................................................................4
  QUE FAUT-IL SAVOIR SUR LES RELATIONS ?............................................................................4
  COMMENT EST EXÉCUTÉE UNE RELATION ?..............................................................................4
REVOIR LES CHOSES DE PLUS PRÈS...........................................................................5
  QU’EST-CE QU’UN ARBRE ?................................................................................................5
  QU’EST-CE QUE L'UNIFICATION ?.........................................................................................5
  QU’EST-CE QUE LA SUBSTITUTION ?......................................................................................5
  QU’EST-CE QUE L'EFFACEMENT ?..........................................................................................5
    Présentation............................................................................................................5
    Algorithme..............................................................................................................5
    Recherche de solution..............................................................................................7




                                                             1
Bruno Delb                  http://www.brunodelb.com         Date : 27/12/1998

                                Le langage Prolog




Introduction

      Prolog a été développé par des chercheurs en IA à l'initiative du Japon, en
      octobre 1981, lorsque le Japon invite quelques uns des principaux
      responsables occidentaux de la recherche et du développement pour leur
      présenter un projet ambitieux de développement de systèmes de «
      cinquième génération ».
      Quinze ans après Lisp, A. Comerauer, dans le but de créer un langage pour
      la programmation des problèmes d'analyse de la langue naturelle, met au
      point, grâce à la logique du premier ordre et la démonstration automatique
      de théorème, le langage Prolog.
      Le premier interprète été écrit en 1973 par P. Roussel (écrit en Fortran).
      Les principales différences avec les langages classiques sont les suivantes :
            •   Le Prolog est un langage déclaratif et non procédural (on y donne
                uniquement les données).
            •   Il a un travail non déterministe car il travaille avec des objets
                partiellement inconnus ('il cherche toutes les solutions).
      Ses applications sont :
            •   pour toute communication de langage naturel avec l'ordinateur
            •   pour des calculs formels
            •   pour les constructions de plan en robotique
            •   pour faire des compilateurs
            •   pour faire des SE
      Sont évolution est :
            •   portabilité
            •   interactivité, avec un éditeur écrit en Prolog
            •   extensibilité
            •   fiabilité




                                             2
Bruno Delb                 http://www.brunodelb.com            Date : 27/12/1998

                               Le langage Prolog




Comment est structuré un programme ?




 Quelle est la structure générale d’un programme ?

     C'est la représentation et utilisation des connaissances (ensemble de
     relations qui décrivent les propriétés de ces objets et leurs interactions) que
     l'on a sur un certain domaine (ensemble d'objets).
     S'il y a une relation entre les objets, alors l'ordre est significatif .
     Paul est le père de Jean.
     RELATION (ou PREDICAT) = « être père »
     OBJETS (ou ARGUMENTS) = « Jean » et « Paul »
     On dira : « est_père_de (Paul, Jean) ».
     Poser la question « Qui est le père de Jean ? » : « est_père_de (x, Jean) »x
     est donc une variable.


 Qu’est-ce qu’un prédicat ?

     C'est un mélange de règles et d'assertions.
     Un programme Prolog est une suite de règles.
     Une règle est constituée d'une tête de règle (un seul prédicat) et d'une queue
     de règle (une suite de littéraux reliées par ":-" ou "if").


 Qu’est-ce qu’un terme ?

     Les termes (règles, littéraux, arguments) peuvent être une constante
     (identificateur, nombre, chaîne de caractères), une variable ou un terme
     structuré (u-plet).


 Qu’est-ce que le regroupement en paquet ?

     L'ensemble des règles et assertions (clauses) permettant de définir un
     prédicat doivent être regroupé obligatoirement en paquet.




                                            3
Bruno Delb               http://www.brunodelb.com         Date : 27/12/1998

                              Le langage Prolog




Comment construire des relations ?




  Que faut-il savoir sur les relations ?

       Pour satisfaire une conjonction de relations, on les examine de gauche à
       droite.
       Au cours de l'exécution, certaines variables peuvent recevoir des valeurs, si
       une variable reçoit une variable, toutes ses occurences prennent la même
       valeur.
       Dans une relation, il n'y a a pas de distinction entre argument d'entrée et de
       sortie.


  Comment est exécutée une relation ?

       L'exécution est non déterministe : on calcule tous les jeux de valeur qui
       satisfont la relation.
       Au cours de l'exécution, lorsque Prolog tente de trouver une relation dans la
       base, il prend les paquets dans l'ordre où ils se présentent.




                                           4
Bruno Delb                  http://www.brunodelb.com            Date : 27/12/1998

                                Le langage Prolog




Revoir les choses de plus près




  Qu’est-ce qu’un arbre ?

       Un arbre est constitué d'une racine et de sous arbres qui sont eux-mêmes
       des arbres.
       Tout noeud sans descendant est dit terminal ou feuille.
       En Prolog, un arbre peut être partiellement inconnu. Dans ce cas, une au
       moins de ses feuilles se réduit à une variable.


  Qu’est-ce que l'unification ?

       Soit deux arbres comportant éventuellement des parties variables,
       l'unification c'est consister à trouver, si elles existent, les valeurs que doivent
       prendre les variables présentes dans l'un ou l'autre des arbres pour que
       ceux-ci coïncident.
       C'est la principale opération effectuée sur les arbres.
       C'est le mécanisme fondamental de Prolog pour tenter de trouver des
       réponses aux questions.


  Qu’est-ce que la substitution ?

       Ensemble des égalités (variables = valeurs) qui rendent les deux arbres
       égaux.


  Qu’est-ce que l'effacement ?

   Présentation
       « P (...) if Q (...), R (...) » peut s'interpréter par : « pour effacer P (...),
       effacer Q (...) puis R (...) ».
       « S (...) » peut s'interpréter par : « S (...) s'efface ».
       Une question « S1 (...) S2 (...), ...., Sn (...) » peut s'interpréter par : «
       effacer S1 (...) puis S2 (...) .... puis Sn (...) ».

   Algorithme
             •   à la fin, si tout est effacé, alors c'est un succès : ce sont les
                 substitutions pour les valeurs de la question



                                             5
Bruno Delb                http://www.brunodelb.com                     Date : 27/12/1998

                          Le langage Prolog

        •   sinon, si l'on bute sur un terme qu'on ne réussit par à effacer, c'est
            échec
        •   dans les deux cas :
                              -   retour en arrière
                              -   reconsidèrer le dernier choix que l'on a fait pour tenter d'effacer
                                  le terme d'une autre façon
 Question
 Indiquer quelles relations existent entre certains objets :
 PERE (ANATOLE, BERNARD);
 PERE (ANATOLE, CHARLES);
 Réponse
 Anatole est-le-père-de Bernard.
 Anatole est-le-père-de Charles.
 Question
 PERE (ANATOLE, BERNARD);
 Réponse
 Oui.
 Question
 PERE (ANATOLE, XAVIER);
 Réponse
 Il n'en sait rien.
 Question
 PERE (ANATOLE, qui);
 Réponse
 qui= BERNARD
 qui= CHARLES




                                       6
Bruno Delb                 http://www.brunodelb.com        Date : 27/12/1998

                            Le langage Prolog

  On déclare des règles :
  GRAND_PERE (Pepe, Fiston) ->
  PERE (Pepe, Papa);
  PERE (Papa, Fiston);
  Pepe EST-LE-GRAND-PERE de Fiston s'il existe une valeur de Papa pour
  laquelle Pépé EST-LE-PERE-DE Papa ET Papa EST-LE-PERE-DE Fiston.

Recherche de solution
  Constituons une famille à l'aide des règles suivantes :
  PERE (ANATOLE, BERNARD);
  PERE (ANATOLE, CHARLES);
  PERE (BERNARD, DIDIER);
  PERE (CHARLES, ERIC);
  GRAND_PERE (Pepe, Fiston) ->
  PERE (Pepe, Papa);
  PERE (Papa, Fiston);
  Soit :
  ANATOLE
  BERNARD CHARLES
  DIDIER ERIC
  On pose la question : PERE (BERNARD, qui);
  Prolog cherche dans le programme si quelque chose lui permet de trouver la
  valeur de "qui" telle que PERE (BERNARD, qui) soit vrai.
  PERE (ANATOLE, BERNARD);
  PERE (ANATOLE, CHARLES);
  PERE (ANATOLE, DIDIER);
  qui= DIDIER
  PERE (ANATOLE, ERIC);
  La réponse est donc : qui= DIDIER
  A la question :
  PERE (ANATOLE, Enfant);




                                         7
Bruno Delb                   http://www.brunodelb.com   Date : 27/12/1998

                             Le langage Prolog

 Prolog cherche :
 PERE (ANATOLE, BERNARD);
 enfant= BERNARD
 PERE (ANATOLE, CHARLES);
 enfant= CHARLES
 PERE (ANATOLE, DIDIER);
 PERE (ANATOLE, ERIC);
 La réponse est donc :
 enfant= BERNARD
 enfant= CHARLES
 Question :
 GRAND_PERE (ANATOLE, Petit);
 Prolog commence ici par la règle 5 :
 GRAND_PERE (Pepe, Fiston) ->
 PERE (Pepe, Papa);
 PERE (Papa, Fiston);
 C'est vrai si :
        •   Pepe = ANATOLE
        •   Fiston = Petit
        •   PERE (ANATOLE, Papa); est vrai
        •   PERE (Papa, Petit); est vrai
 Prolog essaie :
 PERE (ANATOLE, Papa);
 papa= BERNARD
 PERE (BERNARD, Petit);
 petit= DIDIER
 PERE (ANATOLE, Papa);
 papa= CHARLES
 PERE (CHARLES, Petit);
 petit= ERIC




                                          8

Le langage Prolog

  • 1.
    Bruno Delb http://www.brunodelb.com Date : 27/12/1998 Le langage Prolog Sommaire INTRODUCTION..........................................................................................................2 COMMENT EST STRUCTURÉ UN PROGRAMME ?...........................................................3 QUELLE EST LA STRUCTURE GÉNÉRALE D’UN PROGRAMME ?...........................................................3 QU’EST-CE QU’UN PRÉDICAT ?............................................................................................3 QU’EST-CE QU’UN TERME ?................................................................................................3 QU’EST-CE QUE LE REGROUPEMENT EN PAQUET ?......................................................................3 COMMENT CONSTRUIRE DES RELATIONS ?................................................................4 QUE FAUT-IL SAVOIR SUR LES RELATIONS ?............................................................................4 COMMENT EST EXÉCUTÉE UNE RELATION ?..............................................................................4 REVOIR LES CHOSES DE PLUS PRÈS...........................................................................5 QU’EST-CE QU’UN ARBRE ?................................................................................................5 QU’EST-CE QUE L'UNIFICATION ?.........................................................................................5 QU’EST-CE QUE LA SUBSTITUTION ?......................................................................................5 QU’EST-CE QUE L'EFFACEMENT ?..........................................................................................5 Présentation............................................................................................................5 Algorithme..............................................................................................................5 Recherche de solution..............................................................................................7 1
  • 2.
    Bruno Delb http://www.brunodelb.com Date : 27/12/1998 Le langage Prolog Introduction Prolog a été développé par des chercheurs en IA à l'initiative du Japon, en octobre 1981, lorsque le Japon invite quelques uns des principaux responsables occidentaux de la recherche et du développement pour leur présenter un projet ambitieux de développement de systèmes de « cinquième génération ». Quinze ans après Lisp, A. Comerauer, dans le but de créer un langage pour la programmation des problèmes d'analyse de la langue naturelle, met au point, grâce à la logique du premier ordre et la démonstration automatique de théorème, le langage Prolog. Le premier interprète été écrit en 1973 par P. Roussel (écrit en Fortran). Les principales différences avec les langages classiques sont les suivantes : • Le Prolog est un langage déclaratif et non procédural (on y donne uniquement les données). • Il a un travail non déterministe car il travaille avec des objets partiellement inconnus ('il cherche toutes les solutions). Ses applications sont : • pour toute communication de langage naturel avec l'ordinateur • pour des calculs formels • pour les constructions de plan en robotique • pour faire des compilateurs • pour faire des SE Sont évolution est : • portabilité • interactivité, avec un éditeur écrit en Prolog • extensibilité • fiabilité 2
  • 3.
    Bruno Delb http://www.brunodelb.com Date : 27/12/1998 Le langage Prolog Comment est structuré un programme ? Quelle est la structure générale d’un programme ? C'est la représentation et utilisation des connaissances (ensemble de relations qui décrivent les propriétés de ces objets et leurs interactions) que l'on a sur un certain domaine (ensemble d'objets). S'il y a une relation entre les objets, alors l'ordre est significatif . Paul est le père de Jean. RELATION (ou PREDICAT) = « être père » OBJETS (ou ARGUMENTS) = « Jean » et « Paul » On dira : « est_père_de (Paul, Jean) ». Poser la question « Qui est le père de Jean ? » : « est_père_de (x, Jean) »x est donc une variable. Qu’est-ce qu’un prédicat ? C'est un mélange de règles et d'assertions. Un programme Prolog est une suite de règles. Une règle est constituée d'une tête de règle (un seul prédicat) et d'une queue de règle (une suite de littéraux reliées par ":-" ou "if"). Qu’est-ce qu’un terme ? Les termes (règles, littéraux, arguments) peuvent être une constante (identificateur, nombre, chaîne de caractères), une variable ou un terme structuré (u-plet). Qu’est-ce que le regroupement en paquet ? L'ensemble des règles et assertions (clauses) permettant de définir un prédicat doivent être regroupé obligatoirement en paquet. 3
  • 4.
    Bruno Delb http://www.brunodelb.com Date : 27/12/1998 Le langage Prolog Comment construire des relations ? Que faut-il savoir sur les relations ? Pour satisfaire une conjonction de relations, on les examine de gauche à droite. Au cours de l'exécution, certaines variables peuvent recevoir des valeurs, si une variable reçoit une variable, toutes ses occurences prennent la même valeur. Dans une relation, il n'y a a pas de distinction entre argument d'entrée et de sortie. Comment est exécutée une relation ? L'exécution est non déterministe : on calcule tous les jeux de valeur qui satisfont la relation. Au cours de l'exécution, lorsque Prolog tente de trouver une relation dans la base, il prend les paquets dans l'ordre où ils se présentent. 4
  • 5.
    Bruno Delb http://www.brunodelb.com Date : 27/12/1998 Le langage Prolog Revoir les choses de plus près Qu’est-ce qu’un arbre ? Un arbre est constitué d'une racine et de sous arbres qui sont eux-mêmes des arbres. Tout noeud sans descendant est dit terminal ou feuille. En Prolog, un arbre peut être partiellement inconnu. Dans ce cas, une au moins de ses feuilles se réduit à une variable. Qu’est-ce que l'unification ? Soit deux arbres comportant éventuellement des parties variables, l'unification c'est consister à trouver, si elles existent, les valeurs que doivent prendre les variables présentes dans l'un ou l'autre des arbres pour que ceux-ci coïncident. C'est la principale opération effectuée sur les arbres. C'est le mécanisme fondamental de Prolog pour tenter de trouver des réponses aux questions. Qu’est-ce que la substitution ? Ensemble des égalités (variables = valeurs) qui rendent les deux arbres égaux. Qu’est-ce que l'effacement ? Présentation « P (...) if Q (...), R (...) » peut s'interpréter par : « pour effacer P (...), effacer Q (...) puis R (...) ». « S (...) » peut s'interpréter par : « S (...) s'efface ». Une question « S1 (...) S2 (...), ...., Sn (...) » peut s'interpréter par : « effacer S1 (...) puis S2 (...) .... puis Sn (...) ». Algorithme • à la fin, si tout est effacé, alors c'est un succès : ce sont les substitutions pour les valeurs de la question 5
  • 6.
    Bruno Delb http://www.brunodelb.com Date : 27/12/1998 Le langage Prolog • sinon, si l'on bute sur un terme qu'on ne réussit par à effacer, c'est échec • dans les deux cas : - retour en arrière - reconsidèrer le dernier choix que l'on a fait pour tenter d'effacer le terme d'une autre façon Question Indiquer quelles relations existent entre certains objets : PERE (ANATOLE, BERNARD); PERE (ANATOLE, CHARLES); Réponse Anatole est-le-père-de Bernard. Anatole est-le-père-de Charles. Question PERE (ANATOLE, BERNARD); Réponse Oui. Question PERE (ANATOLE, XAVIER); Réponse Il n'en sait rien. Question PERE (ANATOLE, qui); Réponse qui= BERNARD qui= CHARLES 6
  • 7.
    Bruno Delb http://www.brunodelb.com Date : 27/12/1998 Le langage Prolog On déclare des règles : GRAND_PERE (Pepe, Fiston) -> PERE (Pepe, Papa); PERE (Papa, Fiston); Pepe EST-LE-GRAND-PERE de Fiston s'il existe une valeur de Papa pour laquelle Pépé EST-LE-PERE-DE Papa ET Papa EST-LE-PERE-DE Fiston. Recherche de solution Constituons une famille à l'aide des règles suivantes : PERE (ANATOLE, BERNARD); PERE (ANATOLE, CHARLES); PERE (BERNARD, DIDIER); PERE (CHARLES, ERIC); GRAND_PERE (Pepe, Fiston) -> PERE (Pepe, Papa); PERE (Papa, Fiston); Soit : ANATOLE BERNARD CHARLES DIDIER ERIC On pose la question : PERE (BERNARD, qui); Prolog cherche dans le programme si quelque chose lui permet de trouver la valeur de "qui" telle que PERE (BERNARD, qui) soit vrai. PERE (ANATOLE, BERNARD); PERE (ANATOLE, CHARLES); PERE (ANATOLE, DIDIER); qui= DIDIER PERE (ANATOLE, ERIC); La réponse est donc : qui= DIDIER A la question : PERE (ANATOLE, Enfant); 7
  • 8.
    Bruno Delb http://www.brunodelb.com Date : 27/12/1998 Le langage Prolog Prolog cherche : PERE (ANATOLE, BERNARD); enfant= BERNARD PERE (ANATOLE, CHARLES); enfant= CHARLES PERE (ANATOLE, DIDIER); PERE (ANATOLE, ERIC); La réponse est donc : enfant= BERNARD enfant= CHARLES Question : GRAND_PERE (ANATOLE, Petit); Prolog commence ici par la règle 5 : GRAND_PERE (Pepe, Fiston) -> PERE (Pepe, Papa); PERE (Papa, Fiston); C'est vrai si : • Pepe = ANATOLE • Fiston = Petit • PERE (ANATOLE, Papa); est vrai • PERE (Papa, Petit); est vrai Prolog essaie : PERE (ANATOLE, Papa); papa= BERNARD PERE (BERNARD, Petit); petit= DIDIER PERE (ANATOLE, Papa); papa= CHARLES PERE (CHARLES, Petit); petit= ERIC 8