Напишите программу, неопределенность которой не зависит от арифметики Пеано


29

Вызов

Напишите программу P, не требующую ввода данных, такую, чтобы предложение «выполнение P в конечном итоге завершается» не зависит от арифметики Пеано .

Формальные правила

(Если вы математический логик, который считает приведенное выше описание слишком неформальным.)

В принципе, можно преобразовать некоторую универсальную машину Тьюринга U (например, ваш любимый язык программирования) в арифметическую формулу Пеано HALT над переменной p , где HALT ( p ) кодирует предложение « U заканчивается в программе ( кодируется по Гёделю ) р ». Задача состоит в том, чтобы найти p таким, чтобы ни HALT ( p ), ни ¬HALT ( p ) не могли быть доказаны в арифметике Пеано.

Вы можете предположить, что ваша программа работает на идеальной машине с неограниченной памятью и целыми числами / указателями, достаточно большими для доступа к ней.

пример

Чтобы увидеть, что такие программы существуют, одним примером является программа, которая исчерпывающе ищет арифметическое доказательство Пеано 0 = 1. Арифметическое Пеано доказывает, что эта программа останавливается тогда и только тогда, когда арифметика Пеано не соответствует. Поскольку арифметика Пеано непротиворечива, но не может доказать свою непротиворечивость , она не может решить, останавливается ли эта программа.

Однако есть много других предложений, не зависящих от арифметики Пеано, на которых вы могли бы основывать свою программу.

мотивация

Эта проблема была вдохновлена ​​новой работой Yedidia and Aaronson (2016), в которой демонстрируется машина Тьюринга с 7 918 состояниями, чье недопущение не зависит от ZFC , гораздо более сильной системы, чем арифметика Пеано. Вы можете быть заинтересованы в его цитировании [22]. Конечно, для этой задачи вы можете использовать ваш язык программирования вместо реальных машин Тьюринга.


6
Какие системы аксиом можно использовать, чтобы доказать, что (а) программа не останавливается, и (б) не прерывание программы недоказуемо в PA?
feersum

5
Я не думаю, что разумно требовать, чтобы этот вопрос содержал всю необходимую информацию по математической логике. Там довольно много, и есть ссылки на соответствующую информацию. Это не запутано, это просто техническая тема. Я думаю, что для доступности было бы полезно сформулировать требование к коду отдельно от мотивации, связанной с машинами Тьюринга, и дать ссылку на некоторый пример независимых от Пеано операторов для рассмотрения, в частности теорему Гудштейна ( связанный гольф )
xnor

Чтобы это имело смысл, нам нужно предположить, что код работает на идеализированной машине с неограниченной памятью. Можем ли мы также предположить, что машина обладает произвольной реальной точностью?
xnor

1
@feersum Я не ожидаю аксиоматического доказательства (а) и (б). Просто напишите программу и предоставьте достаточно описания / аргументов / цитат, чтобы быть достаточно убедительными в том, что утверждения верны, как и в случае с любым другим вызовом. Вы можете полагаться на любые общепринятые аксиомы и теоремы, которые вам нужны.
Андерс Касеорг

2
@xnor Вы можете использовать неограниченную память и неограниченные указатели для доступа к ней. Но я не думаю, что разумно предполагать произвольную реальную точность, если ваш язык на самом деле не обеспечивает ее; на большинстве языков такая программа x = 1.0; while (x) { x = x / 2.0; }действительно очень быстро останавливается.
Андерс Касеорг

Ответы:


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. Поскольку PA согласовано, эта программа никогда не завершается; но так как PA не может доказать свою собственную последовательность, нетерминация этой программы не зависит от PA.

T это тип выражений и предложений:

  • A Pпредставляет собой предложение ∀ x [ P ( x )].
  • (V 1 :$ P) :$ Qпредставляет собой предложение РQ .
  • V 2 :$ Pпредставляет предложения ¬ P .
  • (V 3 :$ x) :$ yпредставляет предложение х = у .
  • (V 4 :$ x) :$ yпредставляет натуральный х + у .
  • (V 5 :$ x) :$ yпредставляет собой натуральное xy .
  • V 6 :$ xпредставляет собой натуральное S ( x ) = x + 1.
  • V 7 представляет естественный 0.

В среде с i свободными переменными мы кодируем выражения, предложения и доказательства в виде целочисленных матриц 2 × 2 [1, 0; а , б ], следующим образом:

  • 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; 5 + i , 4 + j ] для всех j > i
  • 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 + я ]
  • 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]
  • М (0, ∀ ху [S ( х ) = S ( у ) → х = у ]) = [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]
  • М (0, ∀ ху [ х ⋅ S ( у ) = ху + х ]) = [1, 0; 661072709, 644972544]

Доказательство с матрицей [1, 0; , Ь ] может быть проверена с учетом только левый нижний угол A (или любое другое значение конгруэнтно с по модулю б ); другие значения позволяют составлять доказательства.

Например, вот доказательство того, что сложение коммутативно.

  • 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))]) - аксиома индукции.
Андерс Касеорг

Я думаю, вы могли бы сделать это меньше, если бы вместо этого использовали исчисление конструкций (поскольку в исчислении конструкций встроена логика первого порядка, и она очень мала). Исчисление конструкций примерно такое же сильное, как ZFC, поэтому его согласованность, безусловно, не зависит от PA. Чтобы проверить, является ли он согласованным, вы просто ищете термин пустого типа.
PyRulez
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.