. n.f. Definite Clause Grammar ou grammaire en clauses définies [Pereira et Warren 80, Clocksin et Mellish 94]. Instance la plus répandue de la notion de grammaire logique*. Elle repose sur l'observation que la structure des clauses de Horn* et celle des règles de grammaires sans contexte se ressemblent, et que la stratégie habituelle de recherche de preuve par Prolog ressemble à une analyse descendante. Avec les , les prédicats jouent le rôle de non-terminaux, et des notations spéciales représentent les terminaux et les points de génération. La plupart des systèmes Prolog sont équipés d'un préprocesseur qui traduit les règles en des clauses Prolog de telle manière que l'exécution standard du programme résultant corresponde à une analyse descendante du langage engendré par la grammaire. À d'autres stratégies d'exécution de Prolog peuvent correspondre d'autres stratégies d'analyse. Par exemple, l'exécution selon la stratégie tabulée [Warren 92, Warren 93] correspond à la procédure de Earley [Earley 70]. Noter que les peuvent servir pour programmer des analyseurs, mais aussi des générateurs.
Par exemple, une règle de grammaire avec attribut engendrant des phrases simples et sa version sont comme suit :
«phrase» «groupe sujet» «groupe verbal»
phrase --> groupe_sujet A groupe_verbal A .
avec «groupe sujet».accord = «groupe verbal».accord
où l'attribut accord représente l'accord du sujet et du verbe. Comme souvent en programmation logique, on remplace le nommage de champs ou de paramètres par une notation positionnelle. L'attribut accord n'a donc plus de nom dans la version ; il n'est plus désigné que par sa position.
Dans un analyseur, cette règle de grammaire permet de vérifier la correction syntaxique d'une phrase, mais ne donne aucune information sur son contenu. Une variante plus utile construit une représentation sémantique (dans cet exemple, à la Montague [Montague 74]) de la phrase analysée.
phrase (SNP VP) --> groupe_sujet A SNP groupe_verbal A VP .
La plupart des systèmes Prolog contiennent un préprocesseur qui traduit les règles en clauses Prolog. En supposant que le mot entré pour être analysé est représenté par la technique de la liste en différence*, la règle précédente se traduit en :
type phrase o -> (list mot) -> (list mot) -> o .
phrase (SNP VP) In Out :-
groupe_sujet A SNP In L1 , groupe_verbal A VP L1 Out .
De Bruijn (notation de). Notation des -termes* qui s'affranchit de la -équivalence* en ne désignant pas les -variables* par leur nom mais par la position de la -abstraction* qui les lie [de Bruijn 72]. Le principe est de noter chaque occurrence d'une -variable par le nombre de -abstractions qui sont situées entre cette occurrence et la -abstraction qui lie cette variable, cette -abstraction comprise. La figure suivante illustre la notation de de Bruijn graphiquement et textuellement.
Un programme de conversion entre les deux notations est donné en exemple d´induction structurelle en Prolog*. La notation de de Bruijn est souvent employée dans les travaux sur les -calculs* à substitution explicite*.
Décidable. adj. (ant. indécidable*) (rel. semi-décidable*) Se dit d'un problème tel qu'il existe un algorithme qui peut en résoudre toutes les instances.
Descriptif. adj. (ant. prescriptif*) Se dit d'un typage des programmes Prolog* qui consiste essentiellement en une abstraction des programmes. On peut aussi y voir l'application du point de vue de Curry* au typage de Prolog. Le type d'un programme est alors une partie de sa base de Herbrand* qui contient sa sémantique. L'enjeu principal est de trouver un compromis entre la facilité de calcul et la qualité de l'approximation. Dans ce domaine, les propositions techniques consistent essentiellement en des structures de parties de bases de Herbrand partiellement ordonnées par inclusion dans lesquelles on recherche la plus petite partie qui contient la sémantique d'un programme [Mishra 84, Yardeni et Shapiro 87, Zobel 87, Bruynooghe et Janssens 88].