在某些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。
再見
正確。 OP試圖實現的東西似乎是自然數的一個定理證明,這一點在哥德爾定理中是不完全的。 – 2010-11-11 13:02:24