Best viewed in 24pt and full-screen
next up previous contents
Next: N Up: A-Z Previous: L

M

type monoïde A -> (A->A->A) -> o .
monoïde N C :-
         pi mtex2html_wrap_inline56812( (C N m) = m , (C m N) = m ) ,
         pi m1tex2html_wrap_inline56812(pi m2tex2html_wrap_inline56812(pi m3tex2html_wrap_inline56812( (C m1 (C m2 m3)) = (C (C m1 m2) m3) ))) .


Spécification d´un monoïde : (monoïde N C) si et seulement si N et C sont les opérations d´un monoïde représentables par des tex2html_wrap_inline56836-termes simplement typés.

tex2html_wrap_inline52106. Mémoire Adaptée aux Langages Indéterministes [Bekkers et al. 88]. Élément logiciel [Ridoux 91] ou matériel [Bekkers et al. 86] qui se comporte comme une mémoire et offre des services adaptés aux langages de programmation logique. L'adaptation consiste à mémoriser des termes plutôt que des mots, à offrir un service de récupération de mémoire automatique et à prévoir les besoins du parcours d'un arbre de recherche en profondeur d'abord avec retour-arrière. Le traitement simultané des deux derniers points est fondamental car ils s'influencent mutuellement.

La possibilité de retour-arrière fait que la présence d'un chemin de références depuis une racine jusqu'à un objet n'implique pas que cet objet est utile. Il faut en plus que le chemin de références vérifie certaines contraintes. Cette relation entre ce qui est connu de la dynamique d'un système et la spécification de ce qui est utile est appelé la logique d'utilité. Le retour-arrière est aussi une forme rudimentaire mais importante (parce que quasi gratuite) de récupération de mémoire. Cet effet doit cohabiter avec une gestion de mémoire plus raffinée et plus précise.

tex2html_wrap_inline52106 n'offre aucune structure de contrôle. Tout le contrôle est à décrire dans le processeur qui utilise tex2html_wrap_inline52106. C'est la garantie d'une flexibilité très importante. Les structures de données offertes par tex2html_wrap_inline52106 ont pu servir à implémenter, outre tex2html_wrap_inline56836Prolog, des variantes de Prolog tex2html_wrap_inline56458 [Le Huitouze 88, Le Huitouze 90b], de tex2html_wrap_inline54860 [Ridoux 89] et de l'unification des expressions booléennes [Ridoux et Tonneau 90].

tex2html_wrap_inline56476. (rel. imitation* et projection*) La procédure tex2html_wrap_inline56476 est la partie de la procédure de tex2html_wrap_inline56836-unification qui produit les substitutions solutions. La multiplicité des solutions est gérée par la construction d'un arbre de recherche qui se trouve avoir une structure compatible avec celui de tex2html_wrap_inline56836Prolog. Les mises en tex2html_wrap52064uvre de tex2html_wrap_inline56836Prolog fusionnent donc les deux arbres de recherche et contrôlent la multiplicité des solutions par retour-arrière. Dans tex2html_wrap_inline52896*, l'enchaînement des opérations est simplement rédigé en tex2html_wrap_inline56836Prolog, de façon à ne pas dupliquer la programmation des point de choix et du retour-arrière.

La version de tex2html_wrap_inline56476 utilisée pour tex2html_wrap_inline56836Prolog (tex2html_wrap_inline54254-équivalence) est la suivante :

displaymath25523

Chaque tex2html_wrap_inline54536 ou tex2html_wrap_inline55242 dénote un tex2html_wrap_inline54538, où tex2html_wrap_inline54582 est une inconnue nouvelle et d'un type approprié.

Matrice. n.f. (tex2html_wrap_inline55796 prénexe*)

Métaprogrammation. n.f. (rel. représentations close*, non-close* et par abstraction*) Domaine de programmation où les données sont elles-mêmes des programmes. On distingue le métaprogramme, écrit dans le métalangage, et le programme objet, écrit dans le langage objet. La notion n'a vraiment d'intérêt que lorsque les deux langages sont proches au point qu'on peut se demander si on peut en superposer des parties (voir section «La métaprogrammation»*).

Métavariable. n.f. (rel. métaprogrammation*) Variable d'un métaprogramme dont le domaine de valeur est celui des structures objets. La relation entre métavariable et variable objet* est un des problèmes de la métaprogrammation.

Miller, Dale (États-Unis, 1956). À la suite de recherches sur la démonstration automatique en logique d'ordre supérieur Dale Miller propose avec Gopalan Nadathur un nouveau langage de programmation logique, tex2html_wrap_inline56836Prolog, lui-même d'ordre supérieur [Miller et Nadathur 86b, Nadathur 87]. Miller présente ensuite différents aspects de ce langage comme la modularité [Miller 93], l'abstraction des données [Miller 89a], ou l'unification de tex2html_wrap_inline56836Prolog [Miller 91d, Miller 92].

La théorie des preuves effectuées en tex2html_wrap_inline56836Prolog est celle des preuves uniformes* pour la logique intuitionniste. Miller étend cette théorie à un fragment de la logique linéaire [Hodas et Miller 94], puis à sa totalité [Miller 94].

Dale Miller est actuellement (1998) professeur à Pennsylvania State University.

Mode. n.m. (rel. réversibilité*) Attribution aux paramètres d'un prédicat de rôles d'entrées, de sorties, ou d'un rôle mixte. Une caractéristique de la programmation logique* est de permettre d'écrire des prédicats réversibles. Cependant, tous les prédicats ne sont pas réversibles, soit parce que la relation qu'ils implémentent ne s'inverse pas aisément (par exemple, dériver/intégrer), soit parce qu'ils sont définis en termes d'opérations non-logiques (par exemple, lire ou écrire). De plus, la réversibilité a un coût que le programmeur qui a l'intention de n'utiliser qu'une direction ne veut pas toujours payer.

La notion de mode permet d'exprimer la directionnalité (souhaitée ou subie) des prédicats. Le langage d'expression des modes est souvent fondé sur la notation +-? pour décrire les arguments considérés fournis (+), les arguments considérés calculés (-) et les arguments indifférents («?»). Par exemple, les 3 usages du prédicat conc_f décrits dans l'article «Réversibilité»* sont décrits par les modes (conc_f + + -), (conc_f + + +), et (conc_f - - +).

Selon les systèmes, les modes peuvent faire l'objet de déclaration, de vérification, ou de synthèse. Un compilateur peut en tenir compte pour rendre le code produit plus efficace.

Module. n.m. Partie de programme considérée comme formant une entité cohérente. La notion est très dépendante des langages. En programmation logique, un module est le plus souvent une collection de clauses.

Miller propose d'interpréter l'implication dans les buts comme le chargement d'un module pour la durée d'un calcul [Miller 93] selon le schéma suivant :

résultat :- module => But .

Ainsi au lieu d'une conjonction de clauses la prémisse d'une implication pourrait être un nom de module. Au moment d'interpréter cette implication, le module serait lu et ses clauses seraient ajoutées au contexte de la preuve pour la durée de la preuve de la conséquence de l'implication.

Avec l'avènement du tex2html_wrap_inline53134 (World Wide Web), on pourrait remplacer le nom de module par un tex2html_wrap_inline54904 (Universal Resource Locator) et le télécharger. Il faut noter qu'on donne ainsi une capacité «Internet» à un langage de programmation logique sans en changer la logique.

Multiplicité. n.f. Caractérise le nombre de solutions d'un but. On abstrait en général ce nombre en quelques catégories : pas de solutions (but absurde), 0 ou 1 solution (but servant de condition), exactement 1 solution, 0 ou plusieurs solutions, au moins une solution, multiplicité inconnue. Cette information est utile pour raisonner sur les programmes, pour les transformer, et pour les compiler. On peut aussi fournir à l'utilisateur un moyen d'expression de la multiplicité, et vérifier que la multiplicité déclarée par l'utilisateur est compatible avec la multiplicité observée par analyse du programme.


next up previous contents
Next: N Up: A-Z Previous: L

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