非終端がPeano算術に依存しないプログラムを作成する


29

チャレンジ

「Pの実行が最終的に終了する」という命題がPeano算術に依存しないように、入力を行わずにプログラムPを作成します。

正式な規則

(上記の説明はあまりにも非公式だと思う数理論理学者である場合。)

一つは、原則として、できる変換するいくつかのユニバーサルチューリングマシン Uに(例えば、お気に入りのプログラミング言語を)ペアノ算術変数の上式HALT P HALT(、pは)命題「コードUがプログラムに終了を(ゲーデルエンコードさによって)p」。課題は、PALT 演算でHALT(p)も¬HALT(p)も証明できないようなpを見つけることです。

プログラムは、無制限のメモリとそれにアクセスするのに十分な整数/ポインタを備えた理想的なマシン上で実行されると仮定できます。

そのようなプログラムが存在することを確認するための1つの例は、0 = 1のペアノ算術証明を徹底的に検索するプログラムです。ペアノ算術は、ペアノ算術が矛盾する場合にのみこのプログラムが停止することを証明します。Peano算術は一貫性がありますが、独自の一貫性を証明できないため、このプログラムが停止するかどうかを判断できません。

ただし、プログラムの基礎となるPeano算術とは独立した他の多くの命題があります。

動機

この課題は、非終端がZFCに依存しない7,918ステートのチューリングマシンを示す、Yedidia and Aaronson(2016)による新しい論文に触発されました。あなたはその引用に興味があるかもしれません[22]。もちろん、この課題のために、実際のチューリングマシンの代わりに選択したプログラミング言語を使用することもできます。


6
(a)プログラムが停止しないこと、および(b)プログラムの停止がPAで証明できないことを証明するために、どの公理システムを使用できますか?
feersum

5
この質問に数学論理で必要なすべての背景が含まれていることを要求するのは合理的ではないと思います。かなりの量があり、関連情報へのリンクがあります。これは難読化されたものではなく、単なる技術的なトピックです。私は考慮すべきペアノの独立した書類、特にいくつかの例にチューリングマシンが関与する動機からとリンクに分けることがコードの要件を述べるために、アクセシビリティのために役立つと思うグッドスタインの定理関連ゴルフ
XNOR

これを理解するには、メモリが無制限の理想的なマシン上でコードが実行されると想定する必要があります。マシンに任意の実精度があると仮定することもできますか?
-xnor

1
@feersum(a)と(b)の公理的証明は期待していません。プログラムを書いて、他の課題と同様に、主張が真実であると合理的に納得させるのに十分な説明/引数/引用を提供してください。必要な標準的に受け入れられた公理と定理に頼ることができます。
アンデルスカセオルグ16

2
@xnor無制限のメモリと、それにアクセスするための無制限のポインタを想定できます。しかし、あなたの言語が実際にそれを提供しない限り、任意の実数精度を仮定することは合理的ではないと思います。ほとんどの言語では、このようなプログラムx = 1.0; while (x) { x = x / 2.0; }は実際に非常に速く停止します。
アンデルスカセオルグ16

回答:


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天然表すXyは
  • V 6 :$ x自然なS(x)= x + 1を表します。
  • V 7 自然な0を繰り返します。

i個の自由変数がある環境では、式、命題、および証明を2×2整数行列[1、0; ab ]、次のとおり:

  • M(I、∀ X [ PX)])= [1、0。1、4]⋅M(I、λ X [P(X)])
  • M(I、λ X [ FX))= M(I + 1、FX))M(JX)= [1、0。5 + i、4 + j ]すべてのj > i
  • M(iPQ)= [1、0; 2、4]⋅M(iP)⋅M(iQ
  • M(I、¬ 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(IXY)= [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 + i ]
  • M(I、(ΓP)⊢ P)= [1、0。1、4]
  • M(IΓP)= [1、0。2、4]⋅M(IQ)⋅M(IΓQ)⋅M(IΓQP
  • M(IΓPX))= [1、0。3、4]⋅M(I、λ X [P(X)])⋅M(IX)⋅[1,0; 1、2]⋅M(IΓ ⊢∀ X P(X))
  • M(IΓPX))= [1、0。3、4]⋅M(I、λ X [P(X)])⋅M(IX)⋅[1,0; 2,2]⋅M(IY)⋅M(IΓY = X)⋅M(IΓPY))
  • M(IΓ ⊢∀ XPX))= [1、0。8,8]⋅M(I、λ X [ ΓPX)])
  • M(IΓ ⊢∀ XPX))= [1、0。12、8]⋅M(IΓP(0))⋅M(I、λ X [(ΓPX))⊢ P(S(X))])
  • M(IΓPQ)= [1、0。8,8]⋅M(I、(ΓP)⊢ Q
  • M(IΓPQ)= [1、0。12、8]⋅M(I、(Γ、¬ Q)⊢¬ P

残りの公理は数値的にエンコードされ、初期環境Γに含まれます。

  • M(0、∀ X [ X = X ])= [1、0。497、400]
  • M(0、∀ X [¬(S(X)= 0)])= [1、0。8269、8000]
  • M(0、∀ XY [S(X)= S(Y)→ X = Y ])= [1、0。56106533、47775744]
  • M(0、∀ X [ X + 0 = X ])= [1、0。12033、10000]
  • M(0、∀ Y [ X + S(Y)= S(X + Y)])= [1、0。123263749、107495424]
  • M(0、∀ X [ X ⋅0 = 0])= [1、0。10049、10000]
  • M(0、∀ XY [ X ⋅S(Y)= XY + X ])= [1、0。661072709、644972544]

行列[1、0; 、Bは ]のみ左下の所与確認することができ、A(またはそれに他の値合同モジュロB)。他の値は、証明の構成を可能にするためにあります。

たとえば、次は加算が可換であることの証明です。

  • M(0、Γ ⊢∀ XY [ X + Y = Y + 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これらは、ゲーデルがすべての可能な証明木に番号を付ける便利で比較的コンパクトな方法です。それらは、divおよびmodを使用して各ステップで可能な選択肢の数で最下位側からデコードされる混合基数の数字と考えることもできます。
アンデルスカセオルグ

誘導公理をどのようにエンコードしましたか?
PyRulez

@PyRulez M(i、Γ⊢∀x、P(x))= [1、0; 12、8]⋅M(i、Γ⊢P(0))⋅M(i、λx[(Γ、P(x))⊢P(S(x))])は帰納公理です。
アンダースカセオルグ

代わりにCalculus of Constructionsを使用すると、これを小さくできると思います(Calculus of Constructionsには1次ロジックが組み込まれており、非常に小さいため)。Calculus of ConstructionsはZFCとほぼ同じくらい強力であるため、その一貫性は確かにPAに依存しません。一貫性があるかどうかを確認するには、空のタイプの用語を探します。
PyRulez
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.