A.5.3. Diferencias semánticas
La semántica lógica es declarativa: el significado de las sentencias es que definen
modelos. Pero estamos suponiendo que los programas en Prolog se ejecutan sobre una
máquina convencional, siguiendo el modelo procesal ya descrito. Su semántica es,
por consiguiente, procedimental. El ideal sería que ambas coincidiesen, es
decir, que aplicando el modelo procesal de Prolog se obtuviese un modelo
del programa, pero no es siempre así. Por ejemplo, las cuatro versiones de
«jefes»
y «superiores»
estudiadas en el apartado A.3.3 tienen el mismo significado declarativo: las cuatro
comparten el modelo (mínimo):
I(jefe) = {(Ana,Eva), (Eva,Pepe), (Pepe,Paco)}
I(superior) = {(Ana,Eva), (Eva,Pepe), (Pepe,Paco), (Ana,Pepe),
(Ana,Paco), (Eva,Paco)}
Sin embargo, con la cuarta versión no se obtiene este modelo (no se obtiene
nada).
La relación entre la semántica de Prolog y la semántica declarativa es un tema que
requiere un desarrollo matemático de cierta envergadura (especialmente con las
complicaciones que surgen al considerar el uso de funciones y de negación), y
remitimos una vez más al lector a la bibliografía. Pero sí hay dos aspectos importantes
que vamos a presentar de manera informal.
DIT-ETSIT-UPM