编写一个非终止独立于Peano算术的程序


29

挑战

编写一个不带输入的程序P,使命题“ P的执行最终终止” 与Peano算术无关

正式规则

(如果您是一位数学逻辑学家,但认为以上描述过于非正式。)

原则上,可以某些通用图灵机 U(例如,您喜欢的编程语言)转换为Peano算术公式HALT到变量p上,其中HALT(p)编码命题“ U终止于程序(由Gödel编码p ”。面临的挑战是找到p,以便无法在Peano算术中证明HALT(p)和¬HALT(p)。

您可能会假设您的程序运行在理想的计算机上,该计算机具有无限的内存和足够大的整数/指针来访问它。

为了查看此类程序的存在,一个示例是穷举搜索0 = 1的Peano算术证明的程序。Peano算术证明仅当Peano算术不一致时,该程序才会暂停。由于Peano算法是一致的,无法证明其自身的一致性,因此无法确定该程序是否暂停。

但是,还有许多独立于Peano算术的命题,您可以在这些命题上建立程序。

动机

这项挑战的灵感来自Yedidia和Aaronson(2016)的一篇新论文,该论文展示了具有7918个状态的图灵机,其不端接独立于ZFC,而ZFC比Peano算术更强大。您可能对其引文感兴趣[22]。当然,面对这一挑战,您可以使用自己选择的编程语言代替实际的图灵机。


6
可以使用哪些公理系统来证明(a)该程序没有停止,并且(b)该程序的非停止在PA中无法证明?
feersum '16

5
我认为要求这个问题包含数学逻辑的所有背景知识是不合理的。有很多,并且有指向相关信息的链接。不会混淆,这只是一个技术主题。我认为这有助于使可访问性陈述与Turing机器动机无关的代码要求,并链接到一些涉及Peano独立陈述的示例以进行考虑,尤其是Goodstein定理相关高尔夫球
xnor,

为此,我们需要假设代码在具有无限内存的理想计算机上运行。我们还可以假设机器具有任意的实际精度吗?
xnor

1
@feersum我没有期望(a)和(b)的公理证明。只需编写一个程序,并提供足够的描述/参数/引用即可合理地说服您的主张是正确的,就像您面临其他挑战一样。您可以依赖于您需要的任何标准接受的公理和定理。
Anders Kaseorg '16

2
@xnor您可能会假设内存是无限的,并且可以访问无限制的指针。但是我认为除非您的语言实际提供了任意精确的精度,否则假设是不合理的。在大多数语言中,类似这样的程序x = 1.0; while (x) { x = x / 2.0; }实际上会很快停止。
Anders Kaseorg '16

Answers:


27

Haskell,838字节

“如果您想做点什么,……”

import Control.Monad.State
data T=V Int|T:$T|A(T->T)
g=guard
r=runStateT
s!a@(V i)=maybe a id$lookup i s
s!(a:$b)=(s!a):$(s!b)
s@((i,_):_)!A f=A(\a->((i+1,a):s)!f(V$i+1))
c l=do(m,k)<-(`divMod`sum(1<$l)).pred<$>get;g$m>=0;put m;l!!fromEnum k
i&a=V i:$a
i%t=(:$).(i&)<$>t<*>t
x i=c$[4%x i,5%x i,(6&)<$>x i]++map(pure.V)[7..i-1]
y i=c[A<$>z i,1%y i,(2&)<$>y i,3%x i]
z i=(\a e->[(i,e)]!a)<$>y(i+1)
(i?h)p=c[g$any(p#i)h,do q<-y i;i?h$q;i?h$1&q:$p,do f<-z i;a<-x i;g$p#i$f a;c[i?h$A f,do b<-x i;i?h$3&b:$a;i?h$f b],case p of A f->c[(i+1)?h$f$V i,do i?h$f$V 7;(i+1)?(f(V i):h)$f$6&V i];V 1:$q:$r->c[i?(q:h)$r,i?(2&r:h)$V 2:$q];_->mzero]
(V a#i)(V b)=a==b
((a:$b)#i)(c:$d)=(a#i)c&&(b#i)d
(A f#i)(A g)=f(V i)#(i+1)$g$V i
(_#_)_=0<0
main=print$(r(8?map fst(r(y 8)=<<[497,8269,56106533,12033,123263749,10049,661072709])$3&V 7:$(6&V 7))=<<[0..])!!0

说明

该程序直接搜索0 = 1的Peano算术证明。由于PA是一致的,所以该程序永远不会终止;但是由于PA无法证明其自身的一致性,因此该程序的终止独立于PA。

T 是表达和命题的类型:

  • A P表示命题∀ X [ PX)]。
  • (V 1 :$ P) :$ Q表示命题PQ
  • V 2 :$ P表示命题¬ P
  • (V 3 :$ x) :$ y表示命题x = y
  • (V 4 :$ x) :$ y代表自然x + y
  • (V 5 :$ x) :$ y表示自然Xÿ
  • V 6 :$ x代表自然S(x)= x + 1。
  • V 7 表示自然0。

在具有i个自由变量的环境中,我们将表达式,命题和证明编码为2×2整数矩阵[1,0; ab ],如下所示:

  • M(,∀ X [ PX)])= [1,0; 1,4]⋅M(,λ X [P(x)]的)
  • M(,λ X [ ˚FX)])= M( + 1,˚FX)),其中M(ĴX)= [1,0; 所有j > i的 5 + i,4 + j ]
  • M(iPQ)= [1,0; 2,4]⋅M(iP)⋅M(iQ
  • M(,¬ P)= [1,0; 3,4]⋅M(iP
  • M(ix = y)= [1,0; 4,4]⋅M(ix)⋅M(iy
  • M(ix + y)= [1,0; 1,4 + i ]⋅M(ix)⋅M(iy
  • M(Xÿ)= [1,0; 2,4 + i ]⋅M(ix)⋅M(iy
  • M(i,S x)= [1,0; 3,4 + i ]⋅M(ix
  • M(i,0)= [1,0; 4,4 + ]
  • M(,(ΓP)⊢ P)= [1,0; 1,4]
  • M(ΓP)= [1,0; 2,4]⋅M(Q)⋅M(ΓQ)⋅M(ΓQP
  • M(Γ PX))= [1,0; 3,4]⋅M(,λ X [P(x)]的)⋅M(X)⋅[1,0; 1,2]⋅M(Γ ⊢&ForAll; X P(x)的)
  • M(ΓPX))= [1,0; 3,4]⋅M(,λ X [P(x)]的)⋅M(X)⋅[1,0; 2,2]⋅M(iy)⋅M(Γÿ = X)⋅M(ΓPÝ))
  • M(Γ ⊢&ForAll; XPX))= [1,0; 8,8]⋅M(,λ X [ ΓPX)])
  • M(Γ ⊢&ForAll; XPX))= [1,0; 12,8]⋅M(Γ P(0))⋅M(,λ X [(ΓPX))⊢ P(S(X))])
  • M(ΓPQ)= [1,0; 8,8]⋅M(,(ΓP)⊢ Q
  • M( ΓPQ)= [1,0; 12,8]⋅M(,(Γ,¬ Q)⊢¬ P

剩余的公理被数字编码并包含在初始环境Γ中

  • M(0,∀ X [ X = X ])= [1,0; 497、400]
  • M(0,∀ X [¬(S(X)= 0)])= [1,0; 8269、8000]
  • M(0,∀ Xÿ [S(X)= S(Ý)→ X = Ý ])= [1,0; 56106533,47775744]
  • M(0,∀ X [ X + 0 = X ])= [1,0; 12033,10000]
  • M(0,∀ ÿ [ x + S(y)= S(x + y)])= [1,0; 123263749,107495424]
  • M(0,∀ X [ X ⋅0 = 0])= [1,0; 10049,10000]
  • M(0,∀ Xÿ [ X ⋅S( Ý)= Xÿ + X ])= [1,0; 661072709,644972544]

矩阵为[1,0; 一种b ]可以检查仅给出左下角一个(或任何其他值全等一个b); 还有其他值可用来构成证明。

例如,这里证明加法是可交换的。

  • M(0,Γ ⊢∀ Xÿ [ X + ý = ÿ + X])= [1,0; 6651439985424903472274778830412211286042729801174124932726010503641310445578492460637276210966154277204244776748283051731165114392766752978964153601068040044362776324924904132311711526476930755026298356469866717434090029353415862307981531900946916847172554628759434336793920402956876846292776619877110678804972343426850350512203833644,14010499234317302152403198529613715336094817740448888109376168978138227692104106788277363562889534501599380268163213618740021570705080096139804941973102814335632180523847407060058534443254569282138051511292576687428837652027900127452656255880653718107444964680660904752950049505280000000000000000000000000000000000000000000000000000000]

您可以使用以下程序验证它:

*Main> let p = A $ \x -> A $ \y -> V 3 :$ (V 4 :$ x :$ y) :$ (V 4 :$ y :$ x)
*Main> let a = 6651439985424903472274778830412211286042729801174124932726010503641310445578492460637276210966154277204244776748283051731165114392766752978964153601068040044362776324924904132311711526476930755026298356469866717434090029353415862307981531900946916847172554628759434336793920402956876846292776619877110678804972343426850350512203833644
*Main> r(8?map fst(r(y 8)=<<[497,8269,56106533,12033,123263749,10049,661072709])$p)a :: [((),Integer)]
[((),0)]

如果证明无效,您将得到一个空列表。


1
请解释矩阵背后的想法。
骄傲的haskeller

2
@proudhaskeller它们只是Gödel给所有可能的证明树编号的一种方便,相对紧凑的方式。您也可以将它们视为混合基数,并使用div和mod从每一步的最低有效位开始解码。
Anders Kaseorg '16

您如何编码归纳公理?
PyRulez

@PyRulez M(i,Γx,P(x))= [1,0; [12,8]⋅M(i,Γ⊢P(0))⋅M(i,λx[(Γ,P(x))⊢P(S(x))])是归纳公理。
Anders Kaseorg '17

我认为,如果您改用构造微积分(因为构造微积分具有内置的一阶逻辑并且非常小),则可以将其缩小。结构演算的强度与ZFC差不多,因此其一致性肯定独立于PA。要检查其一致性,您只需查找一个空类型的术语。
PyRulez
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.