एक कार्यक्रम लिखें जिसका गैर-संयोजन पीनो अंकगणित से स्वतंत्र है


29

चुनौती

कोई प्रोग्राम P लिखें, जिसमें कोई इनपुट न हो, जैसे कि "P का निष्पादन अंततः समाप्त हो जाता है" यह प्रस्ताव Peano Armetmetic से स्वतंत्र है ।

औपचारिक नियम

(यदि आप एक गणितीय तर्कशास्त्री हैं जो सोचते हैं कि उपरोक्त विवरण बहुत अनौपचारिक है।)

एक, सिद्धांत रूप में, कुछ यूनिवर्सल ट्यूरिंग मशीन यू (जैसे आपकी पसंदीदा प्रोग्रामिंग भाषा) को वेरिएबल p पर एक Peano अंकगणितीय सूत्र HALT में परिवर्तित कर सकते हैं, जहाँ HALT ( p ) प्रस्ताव को एनकोड करता है " U प्रोग्राम पर समाप्त होता है ( Gödel-encoded द्वारा) पी ”। चुनौती मिल रहा है पी ऐसी है कि न तो पड़ाव ( पी ) और न ही ¬HALT ( पी ) Peano अंकगणित में सिद्ध किया जा सकता।

आप मान सकते हैं कि आपका प्रोग्राम एक आदर्श मशीन पर चलता है जिसमें असीमित मेमोरी और पूर्णांक / पॉइंटर्स हैं जो इसे एक्सेस करने के लिए पर्याप्त है।

उदाहरण

यह देखने के लिए कि इस तरह के कार्यक्रम मौजूद हैं, एक उदाहरण एक ऐसा कार्यक्रम है जो 0 = 1. 1 के पीनो अंकगणितीय प्रमाण के लिए पूरी तरह से खोज करता है। पीनो अंकगणित यह साबित करता है कि यह कार्यक्रम रुकता है अगर और केवल अगर पीनो अंकगणित असंगत है। चूंकि पीनो अंकगणित सुसंगत है, लेकिन अपनी स्वयं की स्थिरता साबित नहीं कर सकता है , यह तय नहीं कर सकता है कि यह कार्यक्रम रुकता है या नहीं।

हालाँकि, Peano अंकगणित से स्वतंत्र कई अन्य प्रस्ताव हैं, जिन पर आप अपने कार्यक्रम को आधार बना सकते हैं।

प्रेरणा

यह चुनौती एक नया से प्रेरित था Yedidia और Aaronson (2016) से कागज एक 7918-राज्य ट्यूरिंग मशीन जिसका nontermination से स्वतंत्र है का प्रदर्शन करते ZFC , Peano अंकगणित की तुलना में एक बहुत मजबूत प्रणाली। आपको इसके उद्धरण [22] में रुचि हो सकती है। इस चुनौती के लिए, आप वास्तविक ट्यूरिंग मशीनों के स्थान पर अपनी प्रोग्रामिंग भाषा का उपयोग कर सकते हैं।


6
क्या स्वयंसिद्ध प्रणाली का उपयोग यह साबित करने के लिए किया जा सकता है कि (ए) कार्यक्रम बंद नहीं करता है, और (बी) कार्यक्रम के गैर-ठहराव पीए में अप्राप्य है?
feersum

5
मुझे नहीं लगता कि यह उचित है कि इस प्रश्न में गणितीय तर्क में सभी आवश्यक पृष्ठभूमि हो। इसमें काफी कुछ है, और संबंधित जानकारी के लिंक हैं। यह बाधित नहीं है, यह सिर्फ एक तकनीकी विषय है। मुझे लगता है कि यह ट्यूरिंग मशीनों से जुड़े प्रेरणा से अलग कोड की आवश्यकता को बताने के लिए और विशेष रूप से गुडस्टीन के प्रमेय ( संबंधित गोल्फ ) में
xeanor

इसे समझने के लिए, हमें असीमित मेमोरी के साथ कोड को आदर्श मशीन पर चलाने की आवश्यकता होगी। क्या हम यह भी मान सकते हैं कि मशीन में वास्तविक परिशुद्धता है?
xnor

1
@ फ़ेर्सम मैं एक (ए) और (बी) के स्वयंसिद्ध प्रमाण की उम्मीद नहीं कर रहा हूं। बस एक कार्यक्रम लिखें, और पर्याप्त विवरण / तर्क / उद्धरण प्रदान करें ताकि यह दावा किया जा सके कि दावे सही हैं, जैसा कि आप किसी अन्य चुनौती के साथ करेंगे। आप किसी भी मानक रूप से स्वीकृत स्वयंसिद्ध और प्रमेयों पर भरोसा कर सकते हैं जिनकी आपको आवश्यकता है।
एंडर्स कासोर्ग

2
@xnor आप असीमित मेमोरी और अनबाउंड पॉइंटर्स मान सकते हैं जिसके साथ इसे एक्सेस करना है। लेकिन मुझे नहीं लगता कि जब तक आपकी भाषा वास्तव में इसे उपलब्ध नहीं कराती है, तब तक वास्तविक रूप से मनमानी करना उचित नहीं है; अधिकांश भाषाओं में, x = 1.0; while (x) { x = x / 2.0; }वास्तव में बहुत जल्दी एक कार्यक्रम की तरह रुक जाएगा।
एंडर्स केसरग

जवाबों:


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

व्याख्या

यह प्रोग्राम सीधे 0 = 1. पीनो अंकगणितीय प्रमाण के लिए खोज करता है क्योंकि पीए सुसंगत है, यह कार्यक्रम कभी समाप्त नहीं होता है; लेकिन चूंकि पीए अपनी स्वयं की स्थिरता साबित नहीं कर सकता है, इसलिए इस कार्यक्रम की गैर-व्यवस्था पीए से स्वतंत्र है।

T अभिव्यक्ति और प्रस्ताव का प्रकार है:

  • A Pप्रस्ताव का प्रतिनिधित्व करता है [ x [ P ( x )]।
  • (V 1 :$ P) :$ Qप्रस्ताव का प्रतिनिधित्व करता है पीक्यू
  • V 2 :$ Pप्रस्ताव का प्रतिनिधित्व करता है । पी
  • (V 3 :$ x) :$ yप्रस्ताव x = y का प्रतिनिधित्व करता है ।
  • (V 4 :$ x) :$ yप्राकृतिक x + y का प्रतिनिधित्व करता है ।
  • (V 5 :$ x) :$ yप्राकृतिक का प्रतिनिधित्व करता है एक्सy
  • 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 के लिए
  • एम ( i , पीक्यू ) = [1, 0; 2, 4] ⋅ M ( i , P ) i M ( i , Q )
  • एम ( i , ( P ) = [1, 0; 3, 4] ⋅ एम ( i , P )
  • एम ( i , x = y ) = [1, 0; 4, 4] ⋅ M ( i , x ) i M ( i , y )
  • एम ( i , x + y ) = [1, 0; 1, 4 + i ] (M ( i , x ) i M ( i , y )
  • एम ( i , xy ) = [1, 0; 2, 4 + i ] (M ( i , x ) i M ( i , y )
  • एम ( i , एस एक्स ) = [1, 0; 3, 4 + i ] (M ( i , x )
  • एम ( i , 0) = [1, 0; 4, 4 + i ]
  • एम ( मैं , ( Γ , पी ) ⊢ पी ) = [1, 0; 1, 4]
  • एम ( मैं , गामापी ) = [1, 0; 2, 4] ⋅ एम ( मैं , क्यू ) ⋅ एम ( मैं , गामाक्यू ) ⋅ एम ( मैं , गामाक्यूपी )
  • एम ( मैं , गामापी ( एक्स )) = [1, 0; 3, 4] (M ( i , λ x [P (x)])] M ( i , x ) 0 [1, 0; 1, 2] ⋅ एम ( मैं , गामा ⊢ ∀ एक्स पी (x))
  • एम ( मैं , गामापी ( एक्स )) = [1, 0; 3, 4] (M ( i , λ x [P (x)])] M ( i , x ) 0 [1, 0; 2, 2] ⋅ एम ( मैं , y ) ⋅ एम ( मैं , गामाy = एक्स ) ⋅ एम ( मैं , गामापी ( y ))
  • एम ( मैं , गामा ⊢ ∀ एक्स , पी ( एक्स )) = [1, 0; 8, 8] ⋅ एम ( मैं , λ एक्स [ गामापी ( एक्स )])
  • एम ( मैं , गामा ⊢ ∀ एक्स , पी ( एक्स )) = [1, 0; 12, 8] ⋅ एम ( मैं , Γपी (0)) ⋅ एम ( मैं , λ एक्स [( Γ , पी ( एक्स )) ⊢ पी (एस ( एक्स ))])
  • एम ( मैं , गामापीक्यू ) = [1, 0; 8, 8] ⋅ एम ( मैं , ( Γ , पी ) ⊢ क्यू )
  • एम ( मैं , गामापीक्यू ) = [1, 0; 12, 8] ⋅ एम ( मैं , ( Γ , ¬ क्यू ) ⊢ ¬ पी )

शेष स्वयंसिद्ध संख्यात्मक रूप से एन्कोड किए गए हैं और प्रारंभिक वातावरण में शामिल हैं oms :

  • एम (0, ( x [ x = x ]) = [1, 0; 497, 400]
  • एम (0, ( x [¬ (एस ( एक्स ) = 0)]) = [1, 0; 8269, 8000]
  • एम (0, ∀ एक्सy [एस ( एक्स ) = एस ( y ) → एक्स = y ]) = [1, 0; 56106533, 47775744]
  • एम (0, ( x [ x + 0 = x ]) = [1, 0; 12033, 10000]
  • एम (0, [ y [ x + S ( y ) = S ( x + y )]) = [1, 0; 123263749, 107495424]
  • एम (0, ( x [ x 0 0 = 0]) = [1, 0; 10049, 10000]
  • एम (0, ∀ एक्सy [ एक्स ⋅ एस ( y ) = एक्सy + x ]) = [1, 0; 661072709, 644972544]

मैट्रिक्स के साथ एक सबूत [1, 0; एक , ] किया जा सकता है की जाँच की केवल नीचे-बाएं कोने दिया एक (या करने के लिए किसी अन्य मान अनुकूल एक सापेक्ष ); अन्य मान प्रमाणों की संरचना को सक्षम करने के लिए हैं।

उदाहरण के लिए, यहां एक प्रमाण है कि इसके अलावा सराहनीय है।

  • एम (0, गामा ⊢ ∀ एक्सy [ x + y = y + एक्स]) = [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
कृपया मैट्रीस के पीछे के विचार को स्पष्ट करें।
गर्व हैस्केलर

2
@proudhaskeller वे Gödel के सभी संभावित प्रूफ पेड़ों की संख्या का एक सुविधाजनक, अपेक्षाकृत कॉम्पैक्ट तरीका हैं। आप उन्हें मिश्रित-मूलांक अंक के रूप में भी सोच सकते हैं जो प्रत्येक चरण में संभव विकल्पों की संख्या से div और mod का उपयोग करके कम से कम महत्वपूर्ण पक्ष से डिकोड हो जाते हैं।
एंडर्स कासोर्ग

आपने इंडक्शन एक्सिओम्स को कैसे एनकोड किया?
PyRulez

@PyRulez M (i, y ∀ ,x, P (x)) = [1, 0; 12, 8] (M (i, 8 0 P (0)) i M (i, λx [(x, P (x)) (P (S (x))] इंडक्शन स्वयंसिद्ध है।
एंडर्स कासोर्ग

मुझे लगता है कि अगर आप कंस्ट्रकशन ऑफ़ कंस्ट्रक्शंस का उपयोग करते हैं तो आप इसे छोटा बना सकते हैं (क्योंकि कैलकुलस ऑफ़ कंस्ट्रक्शंस में पहले-क्रम का लॉजिक है, और यह बहुत छोटा है)। कंस्ट्रक्शंस की गणना ZFC जितनी मजबूत है, इसलिए इसकी स्थिरता निश्चित रूप से PA से स्वतंत्र है। यह जांचने के लिए कि क्या इसकी संगति है, आप बस एक खाली प्रकार के शब्द की तलाश करते हैं।
1
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.