Tema 1: El sistema deductivo de Prolog

1 Introducción

1.1 Objetivos del seminario

1.2 Declarativo vs. imperativo

1.3 Historia de la programación lógica

2 Deducción Prolog

2.1 Deducción Prolog en lógica proposicional

es_cebra :- es_ungulado, tiene_rayas_negras.
es_ungulado :- rumia, es_mamífero.
es_ungulado :- es_mamífero, tiene_pezuñas.
es_mamífero.
tiene_pezuñas.
tiene_rayas_negras.
/home/SLC2015/tema-1> prolog
Welcome to SWI-Prolog (Multi-threaded, 64 bits, Version 6.6.4)
Copyright (c) 1990-2013 University of Amsterdam, VU Amsterdam
SWI-Prolog comes with ABSOLUTELY NO WARRANTY. This is free software,
and you are welcome to redistribute it under certain conditions.
Please visit http://www.swi-prolog.org for details.

For help, use ?- help(Topic). or ?- apropos(Word).

?- [animales].
% animales compiled 0.00 sec, 7 clauses
true.

?- es_cebra.
true.

?- trace.
true.

[trace]  ?- es_cebra.
   Call: (6) es_cebra ? 
   Call: (7) es_ungulado ? 
   Call: (8) rumia ? 
   Fail: (8) rumia ? 
   Redo: (7) es_ungulado ? 
   Call: (8) es_mamifero ? 
   Exit: (8) es_mamifero ? 
   Call: (8) tiene_pezuñas ? 
   Exit: (8) tiene_pezuñas ? 
   Exit: (7) es_ungulado ? 
   Call: (7) tiene_rayas_negras ? 
   Exit: (7) tiene_rayas_negras ? 
   Exit: (6) es_cebra ? 
true.

[trace]  ?- nodebug.
true.

2.2 Deducción Prolog en lógica relacional

divide(2,6).
divide(2,4).
divide(2,12).
divide(3,6).
divide(3,12).
divide(6,X) :- divide(2,X), divide(3,X).
?- divide(6,X).
X = 6 ;
X = 12 ;
No

2.3 Deducción Prolog en lógica funcional

Suma de números naturales

0, s(0), s(s(0)), ...
0 + Y = Y
s(X) + Y = s(X+Y)
suma(0,Y,Y).
suma(s(X),Y,s(Z)) :- suma(X,Y,Z).

Cálculo de sumas

?- suma(s(0),s(s(0)),X).
X = s(s(s(0)))

Cálculo de restas

?- suma(X,s(s(0)),s(s(s(0)))).
X = s(0) ;
false.

Descomposiciones en dos sumandos

?- suma(X,Y,s(s(0))).
X = 0       Y = s(s(0)) ;
X = s(0)    Y = s(0) ;
X = s(s(0)) Y = 0 ;
false.

Soluciones de sistemas de ecuaciones

1 + X = Y
X + Y = 1
?- suma(s(0),X,Y), suma(X,Y,s(0)).
X = 0 Y = s(0) ;
false.

3 Bibliografía

  1. J.A. Alonso (2006) Introducción a la programación lógica con Prolog.
  2. I. Bratko (1990) Prolog Programming for Artificial Intelligence (2nd ed.)
  3. W.F. Clocksin y C.S. Mellish (1994) Programming in Prolog (Fourth Edition).
  4. R.A. Kowalski (2006) La lógica computacional y el pensamiento humano: cómo ser artificialmente inteligente.

  5. SWISH: SWI-Prolog for SHaring (a SWI-Prolog web IDE).


Universidad de Sevilla

José A. Alonso Jiménez
Grupo de Lógica Computacional
Dpto. de Ciencias de la Computación e I.A.
Universidad de Sevilla