2015-10-27 23 views
0

我需要檢查第一個給定的期限(例如s(s(nul))(或2))是否可以通過第二期(例如s(nul)(或1))進行分割。Prolog,在Peano算術中檢查可分性

我想要做的是將給定的項乘以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

您是否期望'multiplication'返回一個值或修改'Y'?因爲它們都不可能。你應該定義一個關係,比如'double(X,XX)',其中'XX'總是X的值的兩倍,可以寫成'XX是X * 2'。 – coredump

+0

@coredump我正在談論條款。你不能* 2這個詞,你能嗎? – WheelPot

+0

你可以,但它可能沒有意義。 :) –

回答

1

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

所以,如果ab整除,並a = b+x,然後x也是由b整除。

在Peano編碼中,n = 1+m被寫入n = s(m)

把它從這裏拿出來。

+0

非常好!優雅,太 – CapelliC

+0

@CapelliC非常感謝你。 :) –