Prolog es un lenguaje de programación declarativo y de programación en lógica. Su nombre es la abreviatura de PROgramming in LOGic.
Fue creado en 1972 por Philippe Roussel y Alain Colmerauer de la Universidad de Aix-Marseille y Robert Kowalski de la Universidad de Edinburgh.
La programación procedural consiste en que el programador le indique a la computadora COMO resolver un problema. El programador debe conocer el algoritmo para resolver un problema. La programación declarativa, en cambio, consiste en un estilo más descriptivo, el programador debe conocer la relación entre entidades. El programador indica a la computadora QUE hacer de una manera descriptiva y declarativa.
Prolog, junto con Lisp, son los lenguajes más usados para trabajar en Inteligencia Artificial.
Un programa Prolog consiste de una base de datos de hechos y reglas de inferencia, que definen relaciones entre objetos. Los programas resultan en afirmaciones que implican hechos en la base de datos. Se ejecutan probando la verdad o no de una afirmación particular. El mecanismo de inferencia de Prolog está basado en el principio de resolución de Robinson (1965), junto a un mecanismo para obtener respuestas propuesto por Green (1968).
Las afirmaciones o implicaciones se expresan por predicados siguiendo la lógica de primer orden. Es una restricción de la forma clausal de la lógica, llamada cláusulas de Horn. Una cláusula de Horn consiste de una cláusula goal (objetivo) y un conjunto de cláusulas separadas por el símbolo ‘:-‘. Este símbolo significa simplemente ‘si-entonces’. Una típica sentencia en Prolog tiene la forma:
clausulagoal(Vg) :- clausula1(V1),..,clausulam(Vm).
Esto significa que clausulagoal es verdadera para el conjunto de variablesVg si el conjunto de cláusulas clausula1 (V1),..,clausulam(Vm) es verdadera. Dicho de otro modo:
clausulagoal (Vg) es verdadera si clausula1(V1) y ... y clausulam(Vm) es verdadera.
Prolog trabaja en forma conversacional, una vez ingresado un programa, espera una consulta del usuario. Esta consulta se intentará demostrar usando los hechos y las reglas del programa.