Aritmética en Lógica

Aunque Prolog tiene mecanimos para manejo de aritmética, estos pierden su sentido lógico, sin embargo, podemos mantenerlo con los axiomas de Peano.

0, s(0), s(s(0)), ...

numero(0).
numero(s(X)) :- numero(X).

menor_igual(0,X) :- numero(X).
menor_igual(s(X),s(Y)) :- menor_igual(X,Y).

minimo(N1,N2,N1) :- menor_igual(N1,N2).
minimo(N1,N2,N2) :- menor_igual(N2,N1).

suma(0,X,X) :- numero(X).               (0 + X = X)
suma(s(X),Y,s(Z)) :- suma(X,Y,Z).       (s(X) + Y = s(X + Y))
$f(A_1,A_2,\ldots,A_n) => p(A_1,A_2,\ldots,A_n,A_{n+1})$

Podemos decir: suma(Num1,Num2,X), suma(Num1,X,Num2), suma(X,Y,Num3), etc. E.g., suma(s(0),s(s(0)),X), suma(s(A),X,s(s(s(0)))), suma(X,Y,s(s(s(0)))), etc.

Ventajas: se le pueden dar diferentes usos al programa.

Restricciones: suma(X,Y,Z) :- par(X), impar(Y).

mult(0,X,0).
mult(s(X),Y,Z) :- mult(X,Y,W), suma(W,Y,Z).



emorales 2012-05-03