करी-हावर्ड और गैर-रचनात्मक प्रमाण से कार्यक्रम


29

यह एक अनुवर्ती प्रश्न है

साक्ष्यों और कार्यक्रमों (या प्रस्तावों और प्रकारों के बीच) में क्या अंतर है?

फॉर्म की एक गैर-रचनात्मक (शास्त्रीय) सबूत के लिए क्या कार्यक्रम के अनुरूप होगा k T(e,k)¬k T(e,k) ? (मान लें कि कुछ दिलचस्प निर्णायक संबंध है जैसे -th TM चरणों में नहीं रुकता है ।)Tकेeकश्मीर

(पुनश्च: मैं इस सवाल का आंशिक रूप से, क्योंकि मैं क्या नील साधन के बारे में जानने में दिलचस्पी है पोस्टिंग कर रहा हूँ " गोडेल-Gentzen अनुवाद में एक निरंतरता-गुजर परिवर्तन है" उसकी टिप्पणी ।)


2
इनमें से पृष्ठ 2 पर आंशिक जवाब व्याख्यान नोट्स । यह थोड़ा गूढ़ है; मैं कुछ और पूरा करने की कोशिश करूँगा।
डेव क्लार्क

मुझे अपना उत्तर लिखने की योजना बनाने में थोड़ा अधिक समय लग रहा है, क्योंकि मैंने उन चीजों को साबित करने का निर्णय लेने की गलती की, जिन्हें मैं जानता था कि केवल उन्हें मुखर करना था। :)
नील कृष्णास्वामी

1
सबसे हालिया जेएसएल का यह लेख था । सार यह है कि शास्त्रीय साक्ष्यों की कम्प्यूटेशनल सामग्री दृढ़ता से इस बात पर निर्भर करती है कि आपने इसे कैसे निकाला। मैं वास्तव में इसे अभी तक पचा नहीं पाया, लेकिन मुझे लगा कि मैं इसे वहीं फेंक दूंगा।
मार्क रीटब्लाट

लेकिन आपने निर्दिष्ट किया है कि टी एक निर्णायक संबंध है, इसलिए यह इस प्रकार है कि आपके प्रस्ताव के रचनात्मक प्रमाण हैं। शास्त्रीय तर्क अंतर्ज्ञानवादी तर्क का एक सबसेट है और आपने यह निर्दिष्ट किया है कि T उस उपसमूह के अंतर्गत आता है जिसे वह निर्णायक कहते हैं।
wren romano

wren, यही मैंने पहले भी सोचा था! लेकिन प्रश्न में पी / / ~ पी उदाहरण में प्रस्ताव यदि वास्तव में सभी के पर मात्रा निर्धारित किया गया है, और टी का यह परिमाण जरूरी नहीं है।
जप्‍पल

जवाबों:


25

यह एक दिलचस्प सवाल है। जाहिर है एक एक प्रोग्राम है जो प्रत्येक के लिए फैसला करता है करने के लिए उम्मीद नहीं कर सकते है कि क्या कश्मीर टी ( , कश्मीर ) , इस लंगड़ा समस्या तय करेगा के रूप में रखती है या नहीं। जैसा कि पहले ही उल्लेख किया गया है, कम्प्यूटेशनल रूप से साक्ष्यों की व्याख्या करने के कई तरीके हैं: करी-हावर्ड, रियलिज़ेबिलिटी, डायलेक्टिका और इतने पर विस्तार। लेकिन वे सभी कम्प्यूटेशनल रूप से आपके द्वारा बताए गए प्रमेय की व्याख्या निम्न तरीके से करेंगे।ekT(e,k)

सादगी के लिए समकक्ष शास्त्रीय प्रमेय पर विचार करें

(1) ij(¬T(e,j)¬T(e,i))

यह (रचनात्मक) का उल्लेख है क्योंकि दिए गए एक के बराबर है हम तय कर सकते हैं कश्मीर टी ( , कश्मीर ) रखती है या नहीं बस के मान की जाँच करके ¬ टी ( , मैं ) । यदि ¬ टी ( , मैं ) तो रखती है मैं ¬ टी ( , मैं ) और इसलिए ¬ मैं टी ( , मैं ) । अगर दूसरी तरफikT(e,k)¬T(e,i)¬T(e,i)i¬T(e,i)¬iT(e,i) तब तक (1) नहीं रखता है हमारे पासj ( ¬ टी ( , जे ) ) जिसका मतलबजे टी ( , जे )¬T(e,i)j(¬T(e,j))jT(e,j)

अब, फिर से हम प्रत्येक दिए गए e के लिए (1) में गणना नहीं कर सकते क्योंकि हम फिर से Halting Problem को हल करेंगे। ऊपर उल्लिखित सभी व्याख्याएं समान प्रमेय को देखने के लिए क्या करेंगीie

(2) fi(¬T(e,f(i))¬T(e,i))

फ़ंक्शन को हर्ब्रांड फ़ंक्शन कहा जाता है। यह प्रत्येक दिए गए संभावित गवाह के लिए एक काउंटर उदाहरण j की गणना करने की कोशिश करता है i । यह स्पष्ट है कि (1) और (2) समतुल्य हैं। बाएं से दाएं यह रचनात्मक है, बस मैं = i (2) में ले जाता हूं , जहां मैं (1) का गवाह हूं । दाएं से बाएं एक को शास्त्रीय रूप से तर्क करना होगा। मान लें (1) सच नहीं था। फिर,fjii=ii

(3) ij¬(¬T(e,j)¬T(e,i))

चलो एक समारोह इस साक्षी हो, यानीf

(4) i¬(¬T(e,f(i))¬T(e,i))

अब, ले में (2) और हमारे पास ( ¬ टी ( , एफ ' ( मैंf=f , कुछ के लिए मैं ' । लेकिन i = i को (4) में लेने से हम उस का खंडन, विरोधाभास प्राप्त करते हैं। इसलिए (2) का तात्पर्य (1) है।(¬T(e,f(i))¬T(e,i))ii=i

तो, हमारे पास वह (1) और (2) शास्त्रीय रूप से समतुल्य हैं। लेकिन दिलचस्प बात यह है कि (2) अब एक बहुत ही सरल रचनात्मक गवाह है। सीधे शब्दों में ले अगर टी ( , एफ ( 0 ) ) नहीं रखता है, क्योंकि तब (2) के समापन सही है; वरना ले मैं ' = 0 यदि टी ( , एफ ( 0 ) ) रखती है, क्योंकि तब ¬ टी ( , एफ ( 0 )i=f(0)T(e,f(0))i=0T(e,f(0)) धारण नहीं करता है और (2) का आधार गलत है, जिससे यह फिर से सच हो जाता है।¬T(e,f(0))

इसलिए, (1) शास्त्रीय प्रमेय जैसे कम्प्यूटेशनल रूप से व्याख्या करने का तरीका एक (शास्त्रीय) समकक्ष सूत्रीकरण को देखना है जो रचनात्मक रूप से, हमारे मामले में (2) साबित हो सकता है।

ऊपर वर्णित विभिन्न व्याख्याएं जिस तरह से फ़ंक्शन पॉप अप करती हैं, उसी पर विचलन करती हैं । वास्तविकता और द्वंद्वात्मक व्याख्या के मामले में, यह स्पष्ट रूप से व्याख्या द्वारा दिया गया है, जब कुछ प्रकार के नकारात्मक अनुवाद (जैसे गोएडेल-जेंटजेन के) के साथ जोड़ा जाता है। कॉल-सीसी और निरंतरता ऑपरेटरों समारोह के साथ करी-हावर्ड एक्सटेंशन के मामले में तथ्य यह है कि कार्यक्रम के लिए अनुमति दी है से उत्पन्न होती है "पता" कैसे एक निश्चित मूल्य (हमारे मामले में मैं ) का उपयोग किया जाएगा, तो निरंतरता है उस बिंदु के आसपास के कार्यक्रम में जहां मैं गणना करता हूंffifi

एक और महत्वपूर्ण बिंदु यह है कि आप (1) से (2) तक का मार्ग "मॉड्यूलर" चाहते हैं, अर्थात यदि (1) का उपयोग (1 ') सिद्ध करने के लिए किया जाता है, तो इसकी व्याख्या (2) का उपयोग इसी तरह किया जाना चाहिए (1 ') की व्याख्या को साबित करने के लिए, (2') कहें। ऊपर बताई गई सभी व्याख्याएं हैं, जिसमें गोएडेल-जेंटजेन नकारात्मक अनुवाद भी शामिल है।


8
स्वागत हे! यहां एक विशेषज्ञ प्रमाण सिद्धांतकार को देखना बहुत अच्छा है।
नील कृष्णस्वामी

1
धन्यवाद पाउलो, आपके जवाब ने संबंधित समस्या में तस्वीर के एक हिस्से को स्पष्ट किया है जिस पर मैं काम कर रहा हूं।
केव

17

यह सर्वविदित है कि शास्त्रीय और अंतर्ज्ञान अंकगणित समवर्ती हैं।

इसे दिखाने का एक तरीका शास्त्रीय तर्क के "नकारात्मक एम्बेडिंग" के माध्यम से अंतर्ज्ञानवादी तर्क में है। तो, मान लीजिए शास्त्रीय प्रथम-क्रम अंकगणित के सूत्र हैं। अब, हम निम्नलिखित के रूप में अंतर्ज्ञान तर्क के एक सूत्र को परिभाषित कर सकते हैं:ϕ

G()=¬¬G(ϕψ)=¬¬(G(ϕ)G(ψ))G()=¬G(¬ϕ)=¬G(ϕ)G(ϕψ)=¬(¬G(ϕ)¬G(ψ))G(x.ϕ)=x.¬¬G(ϕ)G(x.ϕ)=¬x.¬(G(ϕ))G(P)=¬¬P

ध्यान दें कि मूल रूप से एक समरूपता है कि में अतिरिक्त नहीं-नहीं लाठी, हर जगह है कि disjunctions और existentials पर छोड़कर है, यह डी मॉर्गन द्वंद्व का उपयोग करता है उन्हें संयोजक और सार्वभौमिक में बदलने के लिए। (मुझे पूरा विश्वास है कि यह सटीक Godel-Gentzen अनुवाद नहीं है, क्योंकि मैंने इसे इस उत्तर के लिए पकाया है - मूल रूप से आप जो भी दोहरा-नकारात्मक + डे मॉर्गन द्वैत का उपयोग करते हुए लिखते हैं वह काम करेगा। यह विविधता वास्तव में महत्वपूर्ण हो जाती है। शास्त्रीय तर्क की कम्प्यूटेशनल व्याख्याएं; नीचे देखें;)G(ϕ)

सबसे पहले: यह स्पष्ट है कि इस अनुवाद शास्त्रीय सच्चाई को बरकरार रखता है, इसलिए है कि सच यदि और केवल यदि है φ है, प्रतिष्ठित बोल।G(ϕ)ϕ

दूसरा: यह कम स्पष्ट है, लेकिन अभी भी मामला है, कि में सूत्रों के लिए टुकड़ा, intuitionistic और शास्त्रीय तर्क मेल खाना में Provability। इसे साबित करने का तरीका सबसे पहले इस व्याकरण से तैयार किए गए सूत्रों को देखना है:,,,¬

A,B::=x.A(x)|AB|AB|¬A|¬¬P

और फिर हम एक लेम्मा के रूप में साबित कर सकते हैं ( पर प्रेरण द्वारा ) कि जी ( )A व्युत्पन्न अंतर्ज्ञान है। तो अब, हम प्रमाण की संरचना (, कहते हैं, अनुक्रम पथरी) पर एक प्रेरण करके नकारात्मक सूत्रों की समानता को दिखा सकते हैं और बहिष्कृत मध्य के कानून का अनुकरण करने के लिए पिछले लेम्मा का उपयोग कर सकते हैं।G(A)A

तो, आपको इस बारे में सहज रूप से कैसे सोचना चाहिए?

  • Second, there's a topological view. Now, the model of a classical logic (as a family of sets) is a Boolean algebra (ie, a family of subsets closed under arbitrary unions, intersections and complements). It turns out that the model of intuitionsitic logic is as a topological space, with the propositions being interpreted as open sets. Them the interpretation of negation is the interior of the complement, and then it's easy to show that ¬¬¬P=¬P, which means that double-negation sends us into the smallest clopen covering each open --- and the clopens form a Boolean algebra.

Now, thanks to Curry-Howard, we know how to interpret proofs in intuitionistic logic as functional programs. So, one possible answer (but not the only one) to the question of "what is the constructive content of a classical proof?" is the following:

The computational content of a classical proof is whatever the computational content of the translation of its proof (according to the negative translation) is.

So let's look at the translation of G(A¬A)=¬(¬G(A)¬¬G(A)). So this says that the constructive content of the excluded middle is the same as saying that it's not the case that ¬P and and ¬¬P hold -- ie, noncontradiction. So in this sense, there's not actually very much computational content to the law of the excluded middle.

To see what it is concretely, recall that constructively, negation is defined as ¬A==A. So this formula is ((G(A))((G(A)))). The following bit of Ocaml code will illustrate:

type bot = Void of bot
type 'a not = 'a -> bot

let excluded_middle : ('a not * 'a not not) not = fun (u, k) -> k u 

That is, if you get not-A and not-not-A, you can just pass the first negation to the second to derive the contradiction you want.

Now, what is a continuation passing-style transformations?

  • A continuation of type τ is something that takes a value of type τ and computes a final answer from it.
  • Continuations are used to model program contexts. That is we might have a term 3+5 evaluating as part of a much larger program C[3+5]. All that stuff around it will take the result of computing 3+5 and compute the final answer.
  • So you can think of a continuation of type τ as a function τα, where α is whatever the answer type is.
  • So if you have a program e of type τ, we can "CPS-convert" it by finding a term of type (τα)α, which will end up passing whatever e would have computed to its continuation. (Basically, this just makes control flow explicit.)
  • But we have to do this hereditarily, so that every subterm of the program has made its continuation explicit.

Now,

  • The negative translation basically hereditarily sends ϕ to ¬¬ϕ.
  • However, while our translation uses negation, it never actually eliminates the false proposition -- so the translation works parametrically in that proposition.
  • In particular, we can replace with any answer type α.
  • So we hereditarily replace ϕ with (ϕα)α.
  • This is a CPS transformation.

I saw "a" CPS transformation, since as I mentioned earlier, there are many negative translations which let you prove this theorem, and each one corresponds to a different CPS trasnformation. In operational terms, each transformation corresponds to a different evaluation order. So there is no unique computational interpretation of classical logic, since you've got choices to make and the difference choices have very different operational characteristics.


3
This is a great answer. It reminded me of Wadler's paper "Call-by-value is dual to call-by-name": homepages.inf.ed.ac.uk/wadler/topics/call-by-need.html, which includes a very memorable anecdote in section 4 to explain the relationship between callCC and the excluded middle.
sclv

8

There are whole conferences on the subject of non-constructive proofs as programs, and I am no expert on the subject. Above, Neel Krishnaswami alluded to a longer answer he is preparing, which, judging from his work here, will be excellent. This is just a taste of an answer.

It turns out the the type of call-with-current-continuation corresponds to the proposition known as Peirce's law, which can be used to prove the Law of Excluded Middle (P,P¬P). An LEM program can be written using callcc. In Coq:

Set Implicit Arguments.

Axiom callcc : forall (A B : Set), ((A -> B) -> A) -> A.

Lemma lem : forall (A B:Set), sum A (A -> B).
Proof.
  intros.
  eapply callcc.
  intros H.
  right.
  intros.
  apply H.
  left.
  assumption.
Defined.

Recursive Extraction lem.

gives the O'Caml code:

type ('a, 'b) sum =
  | Inl of 'a
  | Inr of 'b

(** val callcc : (('a1 -> 'a2) -> 'a1) -> 'a1 **)

let callcc =
  failwith "AXIOM TO BE REALIZED"

(** val lem : ('a1, 'a1 -> no) sum **)

let lem =
    callcc (fun h -> Inr (fun h0 -> h (Inl h0)))

The cleanest introduction to this I have seen is in Tim Griffin's "A formulae-as-types notion of control".


3
You should try extracting into Scheme and tell the extraction procedure should extract your callcc to Scheme's callcc. Then you can actually try things out.
Andrej Bauer
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.