.
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»
phrase --> groupe_sujet A «groupe sujet» «groupe verbal»
avec «groupe sujet».accord = «groupe verbal».accord
groupe_verbal A .
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].