Programmation logique

Un article de Wikipédia, l'encyclopédie libre.
Aller à : Navigation, rechercher

La programmation logique est une forme de programmation qui définit les applications à l'aide d'un ensemble de faits élémentaires les concernant et de règles de logique leur associant des conséquences plus ou moins directes. Ces faits et ces règles sont exploités par un démonstrateur de théorème ou moteur d'inférence, en réaction à une question ou requête.

Cette approche se révèle beaucoup plus souple que la définition d'une succession d'instructions que l'ordinateur exécuterait. La programmation logique est considérée comme une programmation déclarative plutôt qu’impérative, car elle s'attache davantage au quoi qu'au comment, le moteur assumant une large part des enchaînements. Elle est particulièrement adaptée aux besoins de l’intelligence artificielle, dont elle est un des principaux outils.

Sommaire

Vers la démonstration automatique

Dans les années 1930, Herbrand avait posé les conditions de validité d'une démonstration automatique. En 1953, Quine donnait une règle d'inférence originale ; définie pour l'ordre O, elle présentait peu d'intérêt si ce n'est pour améliorer le calcul des circuits logiques. En 1965, Robinson donnait sa Méthode de Résolution : il basait une démonstration automatique sur les conditions d'Herbrand, avec un raisonnement par l'absurde utilisant des énoncés logiques mis sous forme clausale, et une Règle de Résolution, extension à l'ordre 1 de la règle de Quine. Les premiers essais montrèrent que l'idée y était, mais qu'il restait à en trouver une expression efficace : ce sera Prolog.

Approche informatique

En 1958, John McCarthy proposait déjà d’utiliser la logique comme langage declaratif de representation des connaissances, un démonstrateur de théorème devenant un résolveur de problème. La résolution de problèmes est alors répartie entre le cogniticien, responsable de la validité de l’application exprimée logiquement, et le moteur d’inférence, responsable d’une exécution valide et efficace.

En un sens plus étroit et plus commun, la programmation logique joue sur une ambivalence représentation declarative/représentation procédurale : ainsi, un raisonnement régressif associera à l’implication B1&…&Bn → H une procédure « pour établir H, établir B1 puis… puis Bn ». De ce fait, au nom de l’efficacité, le programmeur peut être amené à exploiter les propriétés physiques du démonstrateur, se rapprochant ainsi d’une programmation classique. Cependant, les programmes logiques gardent toujours une interprétation logique pure permettant de garantir leur correction, et, du fait de leur caractère déclaratif, sont plus abstraits que leur contrepartie impérative, tout en restant exécutables.

Les premières applications de la programmation logique (1964-69) concernèrent des systèmes de questions/réponses. Absys (1969) fut probablement le premier langage de programmation à base d’assertions.

La programmation logique au sens étroit remonte aux débats de cette époque concernant la représentation des connaissances en intelligence artificielle. Stanford et Édimbourg, avec J. McCarthy et Kowalski, tenaient pour une représentation déclarative, et le MIT, avec Marvin Minsky et Seymour Papert, pour une représentation procédurale.

Planner (Hewitt 1969), langage basé sur la logique, émergea cependant au MIT. Son sous-ensemble Micro-Planner (Sussman, Charniak, Winograd) fut utilisé par Winograd pour SHRDLU, programme basé sur l’interprétation d’un dialogue en langage naturel. Planner invoquait des plans procéduraux à partir de buts et d’assertions, et utilisait des reprises en arrière pour ménager le peu de mémoire disponible. Dérivèrent de Planner QA-4, Popler, Conniver, QLISP, Ether.

Cependant, Hayes et Kowalski à Édimbourg essayaient de réconcilier approche déclarative et représentation des connaissances avec l’approche procédurale à la Planner. Hayes (1973) developpa un langage équationnel, Golux, qui pouvait invoquer diverses procedures en altérant le fonctionnement du moteur d’inférence. Kowalski montrait par ailleurs que la SL-resolution traitait les implications comme procédures réductrices des buts.

L'Avènement de Prolog

Alain Colmerauer, universitaire français passé de la compilation à la traduction automatique (Montréal, 1967-70), eut d'abord l’idée des Q-systèmes (1969), formés de règles de réécriture d’arbres, invoquées selon les besoins et utilisant l’unification. Ces systèmes furent à la base d’une chaîne de traduction anglais→français, puis de la rédaction du système Météo qui, au Canada, traduit chaque jour les bulletins météorologiques de l’anglais au français.

Après 1970, Colmerauer revenu à Marseille s’intéressa davantage à l’exploitation de textes qu’à leur traduction ; voulant utiliser la logique pour représenter la sémantique aussi bien que pour les raisonnements liés aux questions, il s’intéressa aux travaux de Robinson sur le Principe de Résolution.

Durant l’été 1971, Colmerauer et Kowalski virent que la forme clausale pouvait représenter les grammaires formelles et qu’un moteur d’inférence pouvait être utilisé pour l’analyse de textes, certains moteurs fournissant une analyse ascendante, et la SL-résolution de Kowalski une analyse descendante. L’été suivant, ils développèrent l’interprétation procédurale des implications, et établirent qu’on pouvait restreindre les clauses aux clauses de Horn, correspondant à des implications où antécédents et conséquent sont des énoncés atomiques.

A. Colmerauer et P. Roussel développèrent alors le langage Prolog comme outil permettant de décrire un monde en français, et de traiter ensuite des questions sur ce monde, Prolog servant aussi bien à l’analyse/synthèse en français qu’aux raisonnements élaborant les réponses. Ce premier Prolog diffusa rapidement. L’intérêt de Prolog pour l’interrogation en langue naturelle de bases de données déboucha sur un configurateur pour ordinateurs Solar (Télémécanique), dont dériveront divers systèmes d’interrogation en français, en anglais (Warren), en portugais (Pereira, Lisbonne), puis en allemand.

D'autres applications naquirent parallèlement : composition d'un repas diététique, calcul symbolique, organisation d'un voyage aérien...

1976 vit un premier portage de Prolog sur micro-ordinateur.

En 1977, D. Warren développa à Édimbourg un compilateur Prolog, qui apporta à Prolog la performance qui lui manquait. Le Prolog d’Édimbourg devint ainsi un standard.

Développements

En 1982 sortit Prolog II, qui utilisait des systèmes d’équations plutôt que l’unification, et abordait le traitement des arbres infinis.

À partir de 1987, Prolog III intégrait au niveau de l’unification : une manipulation des arbres, éventuellement infinis, avec un traitement spécifique pour les listes ; un traitement complet de l’algèbre de Boole ; un traitement numérique portant sur l’addition, la multiplication par une constante et les relations usuelles.

En 1996, Prolog IV s’attaqua résolument au traitement des contraintes. Programmer par contraintes consiste à formuler un problème en termes d’inconnues soumises à une contrainte, énoncé du premier ordre faisant intervenir des opérations et des relations du domaine de calcul. Résoudre la contrainte, et par là le problème, consiste à trouver les valeurs à attribuer aux variables libres de la formule pour la rendre vraie, ce qui unifie la programmation logique et la programmation mathématique (au sens de la recherche opérationnelle). Au prix d’un moteur dix fois plus gros que pour Prolog II, Prolog IV traite un vaste jeu de contraintes, allant des contraintes sur les listes et les arbres aux contraintes numériques, en passant par les contraintes traitées par réduction des intervalles de valeur, s’appliquant aussi bien aux réels qu’aux entiers voire aux booléens.

Descendance

À partir de Prolog, furent développés par exemple Gödel, Oz ou Visual Prolog. λProlog abordait les logiques d'ordre supérieur. Outre datalog et divers langages de programmation logique sous contraintes, le projet japonais d'ordinateurs de 5e génération fut à l'origine de nombreux langages de programmation logique concurrente, tels que plus récemment CS Prolog ou Actor Prolog.

Langages de programmation logique

  • Prolog : Le premier langage de programmation logique ;
  • Oz ;
  • CLIPS ;
  • Python : PyPy permet de l'utiliser pour la programmation logique.

Voir aussi

mentions légales Wikipédia
logo wikimediapolitique de confidentialité à propos de Wikipédia avertissements contacts logo wikimediafaire un don

Programmation logique . Wikipédia


La programmation logique est une forme de programmation qui définit les applications à l'aide d'un ensemble de faits élémentaires les concernant et de règles de logique leur associant des conséquences...

DE LOGIQUE DE PROGRAMMATION À JAVA convertir, compiler, programmation,


programmation , logique Niveau : Débutant Date de création : 02/02/2006 Vu / téléchargé : 9 244 / 420. Description. Cet exemple permet de convertir une suite d'instructions tel que : SI a>b ALORS a<-5...

Programmation Logique Par Contraintes Francois Fages . soundmedia.ch . EAN


Programmation Logique Par Contraintes . Livre Broché ISBN: 978-2-7298-4613-8 192 S. H 26.0 cm x B 17.0 cm x D 0.0 cm 440g Livres, Francois Fages, Programmation Logique Par Contraintes, Livres, contenu...
Plus d'infos Sur le web

  • La programmation logique est une forme de programmation qui définit les applications à l'aide d'un ensemble de faits élémentaires les ...
    10 Kio (1 205 mots) - 6 septembre 2011 à 12:21

  • La programmation logique inductive (PLI) est une approche de l'apprentissage automatique qui utilise les techniques de la programmation ...
    915 o (91 mots) - 13 février 2012 à 20:03

  • Prolog est l’un des principaux langages de programmation logique . Le nom Prolog est un acronyme de PROgrammation en LOGique. ...
    25 Kio (3 510 mots) - 17 avril 2012 à 22:57

  • La programmation par contraintes (PPC, ou CP pour Constraint Programming en anglais ... Voir aussi Articles connexes : Programmation logique ...
    13 Kio (1 726 mots) - 11 mai 2012 à 21:59

  • Oz est un langage de programmation permettant d'employer et de combiner différents ... d'autres supportant la programmation logique (d'une part ...
    4 Kio (405 mots) - 5 janvier 2012 à 20:03

  • Prédicat (logique mathématique) Prédicat nobiliaire ... Prédicat (programmation)
    330 o (9 mots) - 19 janvier 2012 à 11:43

  • Un booléen en logique et en programmation informatique est un type de variable à deux états. Les variables de ce type sont ainsi soit à ...
    2 Kio (157 mots) - 22 janvier 2012 à 00:15

  • Un organigramme est une représentation d'une programmation sous forme d'un schéma. ... de façon séquentielle et logique les actions à mener et ...
    1 Kio (157 mots) - 23 mai 2012 à 10:05

  • MOLOG est une généralisation du langage Prolog permettant d'étendre le paradigme de la Programmation logique à la logique non classique ...
    10 Kio (1 463 mots) - 18 avril 2012 à 23:12

  • Un langage de programmation de cinquième génération, abrégé L5G, est un langage de ... contraintes ou par programmation logique ainsi que ...
    3 Kio (392 mots) - 16 mars 2012 à 11:08

  • Logtalk est un langage de programmation logique, orienté objet, issu de Prolog . Exemple ?- : write('Hello world'), nl. Hello world true. ...
    1 Kio (91 mots) - 15 avril 2012 à 16:09

  • En programmation logique , la SLD-résolution (SLD signifiant Sélectionné, Linéaire, Défini) est un algorithme servant à prouver une formule ...
    5 Kio (689 mots) - 10 novembre 2011 à 09:04

  • λProlog ou lambda prolog est un langage de programmation logique dérivé de prolog . λProlog est une double extension de prolog, dans un ...
    949 o (112 mots) - 30 décembre 2010 à 22:51

  • En informatique , la programmation impérative est un paradigme de programmation ... Langages fonctionnels et langages de programmation logique ...
    13 Kio (1 567 mots) - 3 avril 2012 à 22:48

  • règle d'inférence non monotone en programmation logique , utilisée pour la dérivation de not~p à partir de l'échec de la dérivation de p. ...
    7 Kio (924 mots) - 13 janvier 2012 à 00:20

  • Haskell est un langage de programmation fonctionnel . Il est fondé sur le lambda-calcul et la logique combinatoire . Son nom vient du ...
    13 Kio (1 551 mots) - 20 mai 2012 à 14:37

  • Prolog , l’un des principaux langages de programmation logique , nom acronyme de PROgrammation LOGique.
    915 o (66 mots) - 17 novembre 2011 à 00:32

  • Plus généralement on se reportera au portail de la logique . Logique ... Programmation logique Logique (mathématiques élémentaires) ...
    305 o (25 mots) - 27 janvier 2010 à 21:49

  • Un langage de programmation est un langage informatique (Turing-complet , ... la programmation logique et la programmation par contraintes). ...
    33 Kio (3 151 mots) - 11 mai 2012 à 11:09

  • La notion de grammaire formelle est particulièrement utilisée en programmation logique, compilation (analyse syntaxique ), en théorie de ...
    12 Kio (1 492 mots) - 11 février 2012 à 06:24