Best viewed in 24pt and full-screen
next up previous contents
Next: Implémentation Up: Prolog Previous: Manipuler les expressions dans

Les formules héréditaires de Harrop

Il se trouve qu'il existe un fragment du calcul des prédicats intuitionniste qui a de bonnes propriétés calculatoires et qui permet justement de combiner librement les implications et les quantifications universelles. Ce fragment est celui où on n'admet que les occurrences positives* du connecteur «ou» (tex2html_wrap_inline54296) et du quantificateur «il existe» (tex2html_wrap_inline54298), et où on admet les connecteurs «et» et «implique» (tex2html_wrap_inline51356 et tex2html_wrap_inline55358), et le quantificateur «quel que soit» (tex2html_wrap_inline55356) sans restriction. Intuitivement, on dit qu'une occurrence de connecteur est de polarité* positive si elle est imbriquée à gauche d'un nombre pair ou nul d'implications. Si ce nombre est impair, l'occurrence est négative. Par exemple, dans les formules tex2html_wrap_inline51940 et tex2html_wrap_inline51942, les occurrences de tex2html_wrap_inline54296 sont négatives, alors qu'elles sont positives dans tex2html_wrap_inline51946 et tex2html_wrap_inline51948 . On convient que la polarité d'une occurrence de connecteur ou de quantificateur est celle du non-terminal qui l'engendre. On notera tex2html_wrap_inline51950 une occurrence d'un objet tex2html_wrap_inline51952 de polarité tex2html_wrap_inline53470 (par exemple, tex2html_wrap_inline51956 et tex2html_wrap_inline55364)

Les formules de ce fragment sont les formules héréditaires de Harrop*, et elles ont la propriété que la prouvabilité uniforme* est complète par rapport à la logique intuitionniste pour ces formules. En d'autres termes, les théorèmes intuitionnistes des formules héréditaires de Harrop ont tous une preuve constructive* qui peut être atteinte par une stratégie simple et dirigée par la formule à prouver. Cela ne signifie pas que ce fragment est décidable ; il ne l'est pas. Dans la suite, nous ne considérerons plus que le calcul des prédicats intuitionniste.

La polarité rend partiellement compte de la distinction habituelle en programmation logique entre programme (ensemble de clauses) et but. Les buts sont des formules positives et les clauses des formules négatives. La forme des clauses peut être encore restreinte pour leur donner l'apparence de règles de déduction avec une conséquence (la tête*) bien distinguée des prémisses (le corps*). La grammaire suivante décrit des formules héréditaires de Harrop où les occurrences négatives de l'implication (c'est-à-dire dans les clauses) ne peuvent avoir comme conclusion que des formules atomiques.

displaymath22565

Cependant, cette dissymétrie n'est pas fondamentale, et n'est qu'une présentation d'une logique totalement symétrique. Nous allons retrouver une présentation totalement symétrique en appliquant progressivement des identités logiques.

La première chose est d'observer que les tex2html_wrap_inline51960 peuvent être remplacés par un tex2html_wrap_inline51962 bien choisi et construit avec un nouveau symbole de prédicat, à condition que la formule tex2html_wrap_inline51964 soit ajoutée au programme. De même, les tex2html_wrap_inline51966 peuvent être remplacés par un tex2html_wrap_inline56450 bien choisi et construit avec un nouveau symbole de prédicat, à condition que la formule tex2html_wrap_inline51970 soit ajoutée au programme. Dans les deux cas, le programme original et le programme résultat ne sont pas équivalents, à cause des nouveaux symboles de prédicats, mais ils fournissent les mêmes réponses si on n'utilise que la signature originale. On peut ainsi éliminer les occurrences positives de la disjonction et de la quantification existentielle, et donc toutes leurs occurrences. On obtient alors le langage décrit par la grammaire suivante :

displaymath51921

L'identité suivante

displaymath51922

est une identité intuitionniste pour les deux polarités. Elle permet d'introduire des conclusions d'occurrences négatives de l'implication qui sont elles-mêmes des implications. De la même manière, on observe que les identités suivantes

displaymath51923

sont des identités intuitionnistes pour les deux polarités. Elles permettent d'introduire des conjonctions et des quantifications universelles comme conclusions d'occurrences négatives de l'implication.

À ce stade, le langage des formules positives est le même que celui des formules négatives. On peut donc les confondre. Le langage logique obtenu n'utilise que les connecteurs «et» et «implique» (tex2html_wrap_inline51356 et tex2html_wrap_inline55358), et le quantificateur «quel que soit» (tex2html_wrap_inline55356), et il les utilise sans restriction.

displaymath51924

tex2html_wrap_inline56836Prolog est la présentation dissymétrique de cette logique. La présentation symétrique montre que cette logique est relativement simple, mais la présentation dissymétrique est nécessaire pour donner une sémantique opérationnelle au langage. C'est elle qui oriente les formules et permet de les décomposer en tête* et corps* analogues à l'en-tête et au corps d'une procédure d'un langage impératif.

Il faut bien noter qu'ici la forme clausale ne résulte pas d'une mise sous forme normale conjonctive* avec skolémisation* (chose qui n'a pas de correspondant intuitionniste), mais seulement d'une présentation dissymétrique d'une logique parfaitement symétrique. On peut observer que si on interdit les occurrences positives de l'implication et de la quantification universelle, ce qui reste constitue les clauses de Horn*. De plus, les conséquences intuitionnistes d'une théorie de Horn sont les mêmes que les conséquences classiques. On en conclut donc que l'interprétation intuitionniste des formules héréditaires de Harrop (le noyau de tex2html_wrap_inline56836Prolog) contient strictement l'interprétation classique des formules de Horn (le noyau de Prolog).

Comme en Prolog, l'unification est une opération importante du schéma d'exécution, et pour qu'elle soit bien définie on restreint le domaine des tex2html_wrap_inline56836-termes à un domaine fortement normalisable* et où le problème d'unification n'est pas trop difficile. Pour cela, on choisit le domaine des tex2html_wrap_inline56836-termes simplement typés* [Church 40], mais d'autres domaines fortement normalisables conviendraient. Il faut noter que les tex2html_wrap_inline56836-termes simplement typés constituent un bon compromis entre un problème d'unification qui n'est pas trop difficile en pratique, même si certains le jugent déjà trop difficile parce que seulement semi-décidable* et infinitaire*, et la valeur ajoutée d'une discipline de type à la tex2html_wrap_inline54612. Rappelons cependant que Prolog n'est pas typé, et que c'est pour cela que tex2html_wrap_inline56836Prolog n'est pas un sur-ensemble strict de Prolog.

La motivation de la métaprogrammation nous a donc conduit à un langage de programmation logique dont la structure logique est plus riche que celle de Prolog et dont le domaine de calcul est celui des tex2html_wrap_inline56836-termes simplement typés. L'enchaînement des motivations peut être résumé comme suit :

  1. Les structures objet introduisant des noms munis d'une notion de portée sont commodément représentées par des tex2html_wrap_inline56836-termes et les calculs sur ces structures utilisent la tex2html_wrap_inline55724-équivalence*.
  2. Pour parcourir les tex2html_wrap_inline56836-termes représentant les structures objet sans introduire de tex2html_wrap_inline56836-variables libres il faut les appliquer à des constantes universelles, celles-ci sont introduites par les quantifications universelles dans les buts.
  3. Cette opération n'est valide qu'en présence de l'axiome de tex2html_wrap_inline53994-équivalence.
  4. Ces constantes universelles doivent être dotées de propriétés que l'on peut introduire par l'effet de l'implication dans les buts.
  5. Pour que le problème d'unification soit mieux défini, il faut restreindre le domaine des tex2html_wrap_inline56836-termes. Le typage simple convient assez bien : il délimite un domaine qui est encore utile, le problème d'unification associé est résoluble en pratique et il offre en prime une discipline de type communément admise dans d'autres langages.

next up previous contents
Next: Implémentation Up: Prolog Previous: Manipuler les expressions dans

Olivier Ridoux
Mon Apr 27 11:10:23 MET DST 1998