Présentation
Auteur(s)
-
Patrice BOIZUMAULT : Professeur à l’École des mines de Nantes
Lire cet article issu d'une ressource documentaire complète, actualisée et validée par des comités scientifiques.
Lire l’articleINTRODUCTION
Les logiciels des grands systèmes informatiques d’aujourd’hui ont une durée de vie, une taille et une complexité croissante. Le développement de tels systèmes nécessite des méthodes formelles capables de raisonner sur le logiciel, en prenant en compte tous les aspects allant de la spécification à la validation et l’analyse de performances. Les méthodes formelles ouvrent la voie à la mathématisation du logiciel.
Au-delà des méthodes d’assertion qui sont le plus couramment utilisées en génie logiciel, il est possible de relier plus profondément mathématiques et calcul. En particulier, on peut établir une correspondance forte entre logique et programmation en identifiant : un programme à une théorie logique et une exécution à la recherche d’une preuve. Cette correspondance est l’idée maîtresse de la programmation en logique et elle se résume par la formule : programme=théorie logique exécution=recherche de preuve
Un programme logique est un ensemble d’axiomes (règles et faits) qui définissent les relations entre les entités du problème à traiter. L’exécution d’un programme logique consiste à déduire les conséquences logiques du programme. L’art de la programmation en logique consiste à construire des programmes concis et élégants qui ont les conséquences logiques attendues.
L’idée d’utiliser la logique des prédicats comme langage de programmation est née au tout début des années 1970. La puissance et la simplicité du langage Prolog, ainsi que l’existence d’une sémantique bien définie à partir du calcul des prédicats, ont donné naissance à de très nombreuses implantations et applications dans les domaines de la spécification et du prototypage, des bases de données, des systèmes à base de connaissances, de la simulation, du traitement du langage naturel, de l’écriture de compilateurs, de la conception assistée par ordinateur (CAO), de l’enseignement assisté par ordinateur (EAO), etc.
La présentation du langage Prolog dans cet article ne demande aucun prérequis en programmation. Il est organisé selon un degré de complexité croissant. Nous avons privilégié une présentation intuitive à partir d’exemples, en mentionnant également certains aspects plus formels.
La programmation en logique est un paradigme de programmation déclarative : il s’agit moins d’exprimer comment on calcule le résultat que de fournir les propriétés de ce résultat. Nous décrivons cet aspect au début de l’article, où Prolog est présenté comme un démonstrateur de théorèmes, avec un rappel des notions de base sur la logique de prédicats.
Prolog est certes un langage déclaratif, mais un bon programmeur Prolog doit aussi savoir tirer profit de la stratégie de contrôle du démonstrateur pour obtenir efficacement des solutions. Nous nous intéressons donc ensuite au modèle d’exécution de Prolog exprimé comme une stratégie particulière de parcours d’un arbre de recherche (en profondeur d’abord). Puis est exposé le traitement des listes et des arbres en Prolog.
VERSIONS
- Version courante de juin 2022 par Laurent BLOCH
DOI (Digital Object Identifier)
Cet article fait partie de l’offre
Technologies logicielles Architectures des systèmes
(239 articles en ce moment)
Cette offre vous donne accès à :
Une base complète d’articles
Actualisée et enrichie d’articles validés par nos comités scientifiques
Des services
Un ensemble d'outils exclusifs en complément des ressources
Un Parcours Pratique
Opérationnel et didactique, pour garantir l'acquisition des compétences transverses
Doc & Quiz
Des articles interactifs avec des quiz, pour une lecture constructive
Présentation
2. Premiers pas en Prolog
Nous adoptons une démarche progressive partant de l’écriture de faits et de requêtes pour arriver à la définition récursive de règles. Nous terminons avec une première présentation du contrôle Prolog.
2.1 Faits et questions
Nous nous intéressons à la recherche d’un chemin dans un graphe. Des villes a, b, c, ... sont reliées par des routes supposées « à sens unique » (pour l’instant). Le graphe initial orienté est représenté par le prédicat arc/3 (d’arité 3) ayant comme arguments : la ville de départ, la ville d’arrivée et la distance entre ces deux villes.
arc(a, x, 4).
arc(a, b, 7).
arc(a, c, 5).
arc(b, c, 4).
arc(b, d, 3).
arc(b, e, 6).
arc(b, x, 8).
arc(c, f, 6).
arc(d, e, 7).
arc(e, f, 5).
Traduisons en Prolog les questions suivantes.
le « souligné » _ représente la variable anonyme. L’information qu’elle représente ne nous intéresse pas. Deux occurrences différentes de la variable anonyme peuvent représenter deux termes différents.
-
Y-a-t-il un arc de a à c ?
?- arc(a, c, _).
yes
-
Quels sont les arcs arrivant en e et leur distance ?
?- arc(X, e, Distance).
D=b Distance=6 ;
D=d Distance=7 ;
no
C’est une des caractéristiques propres de Prolog que d’énumérer toutes les solutions à la requête formulée (non-déterminisme). L’utilisateur demande les réponses successives en « frappant » (;). L’ordre d’obtention des solutions est relatif à l’ordre d’apparition des clauses dans la définition du prédicat arc/3.
-
Existe-t-il une ville étape entre b et f ?
?- arc(b, Etape, _), arc(Etape, f, _).
Etape=c ;
Etape=e ;
no
La conjonction des deux buts permet de ne retenir que l’intersection de l’ensemble des successeurs de b avec l’ensemble des prédécesseurs de f.
-
Quels sont les voisins de e ?
?- arc(e, V, _) ; arc(V, e, _).
V=f ;
V=b ;
V=d ;
no
L’union...
Cet article fait partie de l’offre
Technologies logicielles Architectures des systèmes
(239 articles en ce moment)
Cette offre vous donne accès à :
Une base complète d’articles
Actualisée et enrichie d’articles validés par nos comités scientifiques
Des services
Un ensemble d'outils exclusifs en complément des ressources
Un Parcours Pratique
Opérationnel et didactique, pour garantir l'acquisition des compétences transverses
Doc & Quiz
Des articles interactifs avec des quiz, pour une lecture constructive
Premiers pas en Prolog
BIBLIOGRAPHIE
-
(1) - COLMERAUER (A.), KANOUI (H.), PASERO (R.), ROUSSEL (P.) - Un système de communication homme machine en français - . 1972 Technical report, GIA université d’Aix-Marseille.
-
(2) - WARREN (D.H.) - Implementing Prolog : compiling predicates logic programs - . Technical Report 39-40, 1977, DAI Edimbourg.
-
(3) - CLOCKSIN (W.F.), MELLISH (C.S.) - Programming in Prolog - . 2e éd., 1984 Springer-Verlag.
-
(4) - APT (K.) - From Logic Programming to Prolog - . 1997 Prentice Hall.
-
(5) - ROBINSON (J.A.) - A machine oriented logic based on the resolution principle - . JACM, 12(1), 1965, 23-44.
-
(6) - APT (K.R.), VAN EMDEN (M.H.) - Contribution to the theory of Logic Programming - . JACM, 29(3), 1982, 841-862.
-
...
DANS NOS BASES DOCUMENTAIRES
-
Langages pour la conception des circuits intégrés
ANNEXES
Revue Theory and Practice of Logic Programming
http://www.cwi.nl/projects/alp/TPLP/index.html
Archives (logiciels libres, systèmes commerciaux, manifestations scienti-fiques...)
http://archive.comlab.ox.ac.uk/logic-prog.html
HAUT DE PAGE
Association internationale pour la programmation en logique ALP
http://www.cwi.nl/projects/alp
Association française pour la programmation en logique et la programmation par contraintes AFPLC
Réseau compulog
http://kmi.open.ac.uk/compulog
HAUT DE PAGECet article fait partie de l’offre
Technologies logicielles Architectures des systèmes
(239 articles en ce moment)
Cette offre vous donne accès à :
Une base complète d’articles
Actualisée et enrichie d’articles validés par nos comités scientifiques
Des services
Un ensemble d'outils exclusifs en complément des ressources
Un Parcours Pratique
Opérationnel et didactique, pour garantir l'acquisition des compétences transverses
Doc & Quiz
Des articles interactifs avec des quiz, pour une lecture constructive