Prolog

TD n°1

Historique de prolog

Présentation du langage

Le langage prolog (programmation en logique) fut introduit en 1972 par Alain Colmerauer. Ce langage permet d'écrire des programmes sous une forme très proche de la logique des prédicats du premier ordre.

C'est un langage :

Dans un programme prolog, on retrouve toujours :

La programmation logique en quelques dates

Revenons sur la naissance de prolog. En France, en 1970, A. Colmerauer se prend d'intérêt pour la façon de faire des déductions sur des textes. Étudiant alors le travail de R. Kowalski sur les méthodes de résolution, il s'en servit de base comme premier modèle théorique de prolog. Mais son but n'était pas de créer un nouveau langage de programmation. Il voulait pouvoir décrire, en français, un univers à l'ordinateur afin que celui-ci puisse répondre à des questions sur cet univers. Ils firent alors, avec R. Kowalski, un embryon d'un tel système, et c'est ainsi que fut développé l'outil prolog.

P. Roussel, de son côté, se servit du modèle de A. Colmerauer et avec l'aide de confrères d'Edimburg, il conçut le premier interprète, qui fut codé, par la suite, en fortran.

Le prolog est un langage de programmation logique basé sur deux grands mécanismes: le chaînage arrière et l'unification.

Le chaînage arrière est le fait de partir du but recherché, de rechercher les règles dont le but est la conclusion, puis, en prenant les conditions de ces règles comme nouveaux sous buts, recommencer la recherche récursivement, contruisant ainsi une base de faits. Ensuite, il ne reste plus qu'à unifier les faits trouvés avec le but recherché.

L'unification est le fait d'essayer de rendre deux assertions identiques (un fait et une règle en général) en donnant des valeurs aux variables qu'elles contiennent.

C'est un langage clair et lisible pour tout utilisateur, et l'écriture d'un programme en est aisée. Il est surtout utilisé pour faire des systèmes sur les langages naturels et les systèmes experts.

Premier exercice

But : définir un arbre généalogique, et pouvoir lui poser des questions...

Ébauche papier

Réaliser un arbre généalogique quelconque, mais en respectant certaines contraintes pour pouvoir l'exploiter facilement :

Codage des faits

Pour décrire un arbre généalogique, il y a les faits (ce qui est particulier à chaque famille, par exemple que « Bécassine est une femme » ou que « Dudulle est le fils de Chantal ») et les règles (ce qui est vrai pour toutes les familles, par exemple que « le frère du père est l'oncle »). Il y a plusieurs tactiques pour décrire les faits, certaines plus intelligentes que d'autres. Chaque choix influera sur les règles qui seront à définir.
Réflexions à avoir avant et pendant la création : Attention :

Utilisation...

  1. Écrire le fichier avec un éditeur, avec une extension ".pl".
  2. En vous positionnant dans le dossier contenant votre fichier, lancer la ligne de commande "gprolog" : l'interpréteur GNUProlog se lance et affiche : |?
  3. Charger le fichier en tapant
    |? [nom du fichier sans l'extension .pl].

    Si votre fichier contient des erreurs syntaxiques, elles vous seront signalées.
  4. Poser quelques questions fermées (à réponses Yes/No) : par exemple "Andre est-il un homme/une femme ?", "Bernard est-il un enfant de Caroline ?" , etc. Après chaque modification du fichier, sauvegarder et recharger.
  5. Quelques questions ouvertes avec une seule variable : par exemple "Qui sont les enfants de Babar ?", etc.
  6. Quelques questions ouvertes avec plusieurs variables : par exemple "Qui est parent de qui ?", "Quels couples homme/femme ont eu un enfant ensemble ?", etc.

Règles

La formule « ∀xy [enfant(x,y) ⇒ parent(y,x)] » se traduira « parent(Y,X) :- enfant(X,Y). ».

Expliciter sous forme de règles la définition des relations suivantes :

Règle récursive

Donner la définition de la relation de parenté "être un ancêtre de"

Traduire en interrogations prolog des questions formuléees en français

Dernière modification : 9/9/2011
Valid HTML 4.01! Valid CSS!