종료가 Peano 산술과 독립적 인 프로그램 작성


29

도전

“P의 실행이 결국 종료된다”라는 제안 이 Peano 산술과 무관 하도록 입력을받지 않고 프로그램 P를 작성하십시오 .

공식적인 규칙

(위의 설명이 너무 비공식적이라고 생각하는 수학적 논리학자인 경우)

하나는, 원칙적으로, 수 변환 일부 범용 튜링 기계 U 에 (예를 들어 좋아하는 프로그래밍 언어) 페 아노 산술 변수를 통해 공식 HALT P HALT ( p는 ) 명제 "인코딩 U이 프로그램에서 종료를 ( 괴델 인코딩 에 의해) ”. 문제는 발견하는 도 HALT (있도록 P )도 ¬HALT ( P는 ) 페 아노 산술 입증 할 수있다.

당신은 프로그램이 무제한 메모리와 그것에 접근하기에 충분히 큰 정수 / 포인터를 가진 이상적인 머신에서 실행된다고 가정 할 수 있습니다.

그러한 프로그램이 존재한다는 것을 알기 위해 한 가지 예는 0 = 1의 Peano 산술 증명을 철저히 검색하는 프로그램입니다. Peano 산술은 Peano 산술이 일관성이없는 경우에만이 프로그램이 중지됨을 증명합니다. Peano 산술 은 일관성이 있지만 자체 일관성을 증명할 수 없으므로이 프로그램이 중지되는지 여부를 결정할 수 없습니다.

그러나 Peano 산술과 무관하게 프로그램을 기반으로 할 수있는 다른 많은 제안이 있습니다.

자극

이 도전은 Yedidia와 Aaronson (2016) 의 새로운 논문 에서 영감을 받았으며, 그 결과 종료 가 Peano 산술보다 훨씬 강력한 시스템 인 ZFC 와 무관 한 7,918 개의 상태의 Turing 기계를 전시했습니다 . 인용에 관심이있을 수도 있습니다 [22]. 물론이 문제를 해결하기 위해 실제 튜링 기계 대신 선택한 프로그래밍 언어를 사용할 수 있습니다.


6
(a) 프로그램이 중단되지 않고 (b) PA에서 프로그램의 중단이 불가능하다는 것을 증명하기 위해 어떤 공리 시스템을 사용할 수 있습니까?
feersum

5
이 질문에 수학 논리에 필요한 모든 배경이 포함되어 있어야한다고 생각하는 것이 합리적이라고 생각하지 않습니다. 약간의 정보가 있으며 관련 정보에 대한 링크가 있습니다. 혼란스럽지 않고 기술적 인 주제 일뿐입니다. 나는 코드가 특히 고려해야 할 페 아노 독립적 인 문장의 몇 가지 예에 튜링 기계 및 링크에 관련된 동기 분리에 대한 접근이 요구 사항을 명시하는 것이 도움이 될 생각 굿 스타 인의 정리 ( 관련 골프 )
XNOR

이를 위해서는 메모리가 무제한 인 이상적인 머신에서 코드를 실행한다고 가정해야합니다. 기계에 임의의 실제 정밀도가 있다고 가정 할 수 있습니까?
xnor

1
@feersum 나는 (a)와 (b)의 공리적 증거를 기대하지 않는다. 프로그램을 작성하고 다른 도전과 마찬가지로 주장이 사실이라고 합리적으로 확신 할 수 있도록 충분한 설명 / 인수 / 인용을 제공하십시오. 당신은 당신이 필요로하는 표준 적으로 인정 된 공리와 정리에 의존 할 수 있습니다.
Anders Kaseorg

2
@xnor 당신은 무제한 메모리, 그리고 그것에 접근 할 수있는 무한 포인터를 가정 할 수 있습니다. 그러나 귀하의 언어가 실제로 제공하지 않는 한 임의의 실제 정밀도를 가정하는 것이 합리적이라고 생각하지 않습니다. 대부분의 언어에서 같은 프로그램 x = 1.0; while (x) { x = x / 2.0; }은 실제로 매우 빨리 중단됩니다.
Anders Kaseorg

답변:


27

하스켈, 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

설명

이 프로그램은 Peano 산술 증명 0 = 1을 직접 검색합니다. PA가 일관되므로이 프로그램은 종료되지 않습니다. 그러나 PA는 자체 일관성을 입증 할 수 없으므로이 프로그램의 종료는 PA와 무관합니다.

T 표현과 제안의 유형입니다.

  • A P명제 ∀ x [ P ( x )]를 나타냅니다 .
  • (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 자유 변수가 있는 환경에서 표현식, 제안 및 증명을 2x2 정수 행렬로 인코딩합니다 [1, 0; , B ]로서 다음과 같다 :

  • M ( i , ∀ x [ P ( x )]) = [1, 0; 1, 4] ⋅ M ( i , λ x [P (x)])
  • M ( i , λ x [ F ( x )]) = M ( i + 1, F ( x )) 여기서 M ( j , x ) = [1, 0; 모든 j > i에 대해 5 + i , 4 + j ]
  • M ( i , PQ ) = [1, 0; 2, 4] ⋅ M ( i , P ) ⋅ M ( i , Q )
  • M ( I , ¬ P ) = 1, 0; 3, 4] ⋅ M ( i , P )
  • M ( i , x = y ) = [1, 0; 4, 4] ⋅ M ( i , x ) ⋅ M ( i , y )
  • M ( i , x + y ) = [1, 0; 1, 4 + i ] ⋅ M ( i , x ) ⋅ M ( i , y )
  • M ( i , xy ) = [1, 0; 2, 4 + i ] ⋅ M ( i , x ) ⋅ M ( i , y )
  • M ( i가 , S는 X ) = 1, 0; 3, 4 + i ] ⋅ M ( i , x )
  • M ( i , 0) = [1,0; 4, 4 + i ]
  • M ( I ( Γ , P ) ⊢ P ) = 1, 0; 1, 4]
  • M ( i , ΓP ) = [1, 0; 2, 4] ⋅ M ( i , Q ) ⋅ M ( i , ΓQ ) ⋅ M ( i , ΓQP )
  • M ( I , ΓP ( X )) = 1, 0; 3, 4] ⋅ M ( i , λ x [P (x)]) ⋅ M ( i , x ) ⋅ [1, 0; 1, 2] ⋅ M ( i , Γ ⊢ ∀ x P (x))
  • M ( I , ΓP ( X )) = 1, 0; 3, 4] ⋅ M ( i , λ x [P (x)]) ⋅ M ( i , x ) ⋅ [1, 0; 2, 2] ⋅ M ( i , y ) ⋅ M ( i , Γy = x ) ⋅ M ( i , ΓP ( y ))
  • M ( I , Γ ⊢ ∀ X , P ( X )) = 1, 0; 8, 8] ⋅ M ( i , λ x [ ΓP ( x )])
  • M ( I , Γ ⊢ ∀ X , P ( X )) = 1, 0; 12, 8] ⋅ M ( i , ΓP (0)) ⋅ M ( i , λ x [( Γ , P ( x )) ⊢ 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 ] 체크 만 왼쪽 모서리들 수 (또는 어떤 다른 값 합동 모듈로 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 그들은 가능한 모든 증거 트리에 번호를 매기는 편리하고 비교적 간단한 Gödel 방법입니다. 또한 각 단계에서 가능한 선택 수에 따라 div 및 mod를 사용하여 가장 중요하지 않은면에서 디코딩되는 혼합 기수로 생각할 수 있습니다.
Anders Kaseorg

유도 공리를 어떻게 인코딩 했습니까?
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

Calculus of Constructions를 대신 사용하면 이것을 작게 만들 수 있다고 생각합니다 (Colculus of Constructions에는 1 차 논리가 내장되어 있고 매우 작기 때문에). 미적분학은 ZFC만큼 강력하므로 일관성은 PA와 독립적입니다. 그 구성 요소를 확인하려면 빈 유형의 용어를 찾으십시오.
PyRulez
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.