En 1958, John McCarthy proposait déjà d’utiliser la logique comme langage declaratif de representation des connaissances, un démonstrateur de théorème devenant un résolveur de problème. La résolution de problèmes est alors répartie entre le cogniticien, responsable de la validité de l’application exprimée logiquement, et le moteur d’inférence, responsable d’une exécution valide et efficace.
En un sens plus étroit et plus commun, la programmation logique joue sur une ambivalence représentation declarative/représentation procédurale : ainsi, un raisonnement régressif associera à l’implication B1&…&Bn → H une procédure « pour établir H, établir B1 puis… puis Bn ». De ce fait, au nom de l’efficacité, le programmeur peut être amené à exploiter les propriétés physiques du démonstrateur, se rapprochant ainsi d’une programmation classique. Cependant, les programmes logiques gardent toujours une interprétation logique pure permettant de garantir leur correction, et, du fait de leur caractère déclaratif, sont plus abstraits que leur contrepartie impérative, tout en restant exécutables.
Les premières applications de la programmation logique (1964-69) concernèrent des systèmes de questions/réponses. Absys (1969) fut probablement le premier langage de programmation à base d’assertions.
La programmation logique au sens étroit remonte aux débats de cette époque concernant la représentation des connaissances en intelligence artificielle. Stanford et Édimbourg, avec J. McCarthy et Kowalski, tenaient pour une représentation déclarative, et le MIT, avec Marvin Minsky et Seymour Papert, pour une représentation procédurale.
Planner (Hewitt 1969), langage basé sur la logique, émergea cependant au MIT. Son sous-ensemble Micro-Planner (Sussman, Charniak, Winograd) fut utilisé par Winograd pour SHRDLU, programme basé sur l’interprétation d’un dialogue en langage naturel. Planner invoquait des plans procéduraux à partir de buts et d’assertions, et utilisait des reprises en arrière pour ménager le peu de mémoire disponible. Dérivèrent de Planner QA-4, Popler, Conniver, QLISP, Ether.
Cependant, Hayes et Kowalski à Édimbourg essayaient de réconcilier approche déclarative et représentation des connaissances avec l’approche procédurale à la Planner. Hayes (1973) developpa un langage équationnel, Golux, qui pouvait invoquer diverses procedures en altérant le fonctionnement du moteur d’inférence. Kowalski montrait par ailleurs que la SL-resolution traitait les implications comme procédures réductrices des buts.