2010-11-09 68 views
3

我正在開發(使用Java),爲了好玩,使用統一算法的應用程序。統一 - 結果的無窮大

我選擇了我的統一算法返回所有可能的統一。例如,如果我嘗試解決

加載(X,Y)= SUCC(SUCC(0))

它返回

{X = SUCC(SUCC(0)),Y = 0 },{X = succ(0),Y = succ(0)},{X = 0,Y = succ(succ(0))}

然而,在某些情況下,存在無限數量的可能統一 (例如,X> Y =真)。

有人知道我的算法是否允許確定是否可能遇到無限次數的統一?

在此先感謝

回答

8

在Prolog的背景下,當你說「統一」,你通常是指語法統一。因此,添加(X,Y)和succ(succ(0)),不要統一(如條款),因爲它們的函子和arities不同。您似乎指的是統一模理論,其中可以統一像add(X,Y)和succ(succ(0))這樣的不同術語,以提供一些額外的方程或謂詞。句法統一是可判定的,並且如果在應用最普通的統一者之後,兩個術語仍然有變量,則可能的統一者的數目是無限的。統一模理論通常不可判定。要看到已經基本的問題可以很難考慮例如整數問題N> 2,X^N + Y^N = Z^N這些整數,如果你可以很容易在算法上決定是否存在一個解(即,這些術語是否可以統一的模整數算術)將立即解決費馬大定理。考慮Matiyasevich定理和類似的不可判定性結果。

+1

正確。 OP試圖實現的東西似乎是自然數的一個定理證明,這一點在哥德爾定理中是不完全的。 – 2010-11-11 13:02:24

3

在某些constraint logic programming systems你可以很容易地看到解決方案集是無限的。例如,在一些CLP(FD)實現中(例如SWI-Prolog,Jekejeke Minlog,其他實現(如GNU Prolog和B-Prolog),因爲它們假定有限的上限/下限),具有無限整數集的某種程度的推理是從而得到支持

?- use_module(library(clpfd)). 
true. 

?- X #\= 2. 
X in inf..1\/3..sup. 

但有,它們不能在CLP(FD)標籤來使用的那些集的缺點,其中該組中的元素列舉和a:這是通過間隔符號如(SWI-Prolog的)觀察進一步嘗試解決實例化的方程式。這也將違背下面的結果,如果事情能在一般決定CLP(FD)查詢來完成:

「在1900年,以表彰他們的深度,大衛·希爾伯特提出的 有解所有不定的問題在於他的第十個問題:1970年,數學邏輯 中稱爲Matiyasevich定理的一個新結果負面地解決了這個問題: 一般的丟番圖問題是無法解決的。 (維基百科上Diophantine equations

另一個約束邏輯規劃可以平時也處理無限解集是CLP(R)。方程式之間的推理在那裏稍微強一點。例如,CLP(FD)在Jekejeke Minlog中沒有檢測到以下不一致性(取決於系統,這是SWI-Prolog的結果),您將立即看到第二個查詢爲No,並且GNU Prolog將循環大約4秒通過實施從數論,線性代數,分析等算法

?- use_module(library(clpr)). 

?- {X > Y}. 
{Y=X-_G5542, _G5542 > 0.0}. 

?- {X > Y, Y > X}. 
false. 

約束系統工作。取決於:然後說否):

?- X #> Y. 
Y#=<X+ -1. 

?- X #> Y, Y #> X. 
X#=<Y+ -1, 
Y#=<X+ -1. 

在另一方面CLP(R)將找到在他們建模的領域上,即在符號CLP(*)中表示什麼*。這些算法可以達到quantifier elimination

再見