Un des plus anciens théorèmes de la programmation logique est celui de la complétude calculatoire des théories de Horn considérées comme des programmes [Andréka et Németi 76, Tärnlund 77]. Cela correspond bien à une des préoccupations majeures des concepteurs de langages de programmation : offrir la puissance d'une machine de Turing. Cet attachement à la complétude calculatoire porte en germe des difficultés considérables, dont l'impossibilité de prévoir aussi précisément qu'on le veut le comportement des programmes au simple vu de leur texte.
Quelques niches ont vu la création de langages de
«programmation»
incomplets
(par exemple, les bases de données avec et Datalog).
Nous pensons qu'il est possible de créer de tels langages pour des
niches de plus en plus larges et variées en donnant des restrictions
de plus en plus faibles à la formation des programmes d'un langage
éventuellement complet,
ou en combinant des fragments décidables.
Une niche correspondrait à une classe d'applications qui utiliserait
une classe d'algorithme.
La logique a une longue tradition d'étude de fragments décidables.
À certains correspondent des classes de complexités et donc les
problèmes ou les algorithmes qui sont dans cette classe.
Les grammaires logiques*,
avec les ,
constituent une autre approche.
Les
ne constituent pas véritablement un formalisme incomplet,
mais quelques restrictions supplémentaires permettraient d'en faire un fragment
décidable de Prolog pour application dans une niche particulière :
la programmation dans un monoïde.
Les types inductifs*
fournissent une autre piste pour la définition de fragments décidables.
La programmation logique se prête donc
bien à l'expression de restrictions décidables.
Qu'elles soient toutes issues d'un même paradigme permettrait
de les combiner dans des applications hétérogènes.