Prolog,检查Peano算术的可分性

时间:2015-10-27 16:58:54

标签: prolog multiplication term successor-arithmetics

我需要检查第一个给定的术语(例如s(s(nul))(或2))是否可以被第二个术语分割(例如s(nul)(或1))。

我想要做的是将给定的项乘以2,然后检查该项是否小于或等于另一项(如果它相等 - 问题已解决)。

到目前为止,我得到了这个:

checkingIfDividable(X,X).
checkingIfDividable(X,Y) :-
    X > Y,
    multiplication(X,Y).

/* multiplication by two should occur here. 
   I can't figure it out. This solution does not work!*/
multiplication(Y):-
    YY is Y * 2,
    checkingIfDividable(X,YY).

我似乎无法弄清楚如何将一个项乘以2.任何想法?

1 个答案:

答案 0 :(得分:1)

如果a = n*b, n > 0,它也是a = n*b = (1+m)*b = b + m*b, m >= 0

因此,如果a可以ba = b+x分割,那么x也可以被b分割。

在Peano编码中,n = 1+m写为n = s(m)

从这里开始。