करी-हावर्ड इसोर्फिज्म से उत्पन्न होने वाले सबसे दिलचस्प समानताएं क्या हैं?


97

मैं अपने प्रोग्रामिंग जीवन में अपेक्षाकृत देर से करी-हावर्ड आइसोमोर्फिज्म पर आया , और शायद यह मेरे द्वारा पूरी तरह से मोहित होने में योगदान देता है। तात्पर्य यह है कि प्रत्येक प्रोग्रामिंग अवधारणा के लिए औपचारिक तर्क में एक सटीक एनालॉग मौजूद है, और इसके विपरीत। यहाँ मेरे सिर के ऊपर से ऐसी उपमाओं की "मूल" सूची है:

program/definition        | proof
type/declaration          | proposition
inhabited type            | theorem/lemma
function                  | implication
function argument         | hypothesis/antecedent
function result           | conclusion/consequent
function application      | modus ponens
recursion                 | induction
identity function         | tautology
non-terminating function  | absurdity/contradiction
tuple                     | conjunction (and)
disjoint union            | disjunction (or)          -- corrected by Antal S-Z
parametric polymorphism   | universal quantification

तो, मेरे प्रश्न के लिए: इस समरूपता के कुछ और अधिक रोचक / अस्पष्ट प्रभाव क्या हैं? मैं कोई तर्कवादी नहीं हूं इसलिए मुझे यकीन है कि मैंने केवल इस सूची के साथ सतह को खरोंच दिया है।

उदाहरण के लिए, यहां कुछ प्रोग्रामिंग धारणाएं हैं जिनके लिए मैं तर्क में पिट्ठू नामों से अनजान हूं:

currying                  | "((a & b) => c) iff (a => (b => c))"
scope                     | "known theory + hypotheses"

और यहाँ कुछ तार्किक अवधारणाएँ हैं, जिन्हें मैंने प्रोग्रामिंग शब्दों में नहीं बताया है:

primitive type?           | axiom
set of valid programs?    | theory

संपादित करें:

यहां प्रतिक्रियाओं से कुछ और समकक्षों को एकत्र किया गया है:

function composition      | syllogism                -- from Apocalisp
continuation-passing      | double negation          -- from camccann

बंद ~ = स्वयंसिद्धों का सेट
सर्वनाश

+1 यह सवाल और सभी गुणवत्ता के उत्तर और टिप्पणियों ने मुझे CHI पर अधिक सिखाया है जो मैं इंटरनेट के माध्यम से सीख सकता हूं।
अलेक्जेंड्रे सी।

24
@ पाओल नाथन:goto | jumping to conclusions
जॉय एडम्स

मुझे लगता है कि सभी वैध कार्यक्रमों का सेट एक मॉडल होगा
डेनियल

1
fst / snd | संयोजन उन्मूलन, वाम / अधिकार | अस्वीकरण परिचय
टोनी मॉरिस

जवाबों:


33

चूंकि आपने स्पष्ट रूप से सबसे दिलचस्प और अस्पष्ट लोगों के लिए कहा है:

आप कई दिलचस्प लॉजिक्स और कई प्रकार के पत्राचार प्राप्त करने के लिए लॉजिक्स के योगों के लिए CH का विस्तार कर सकते हैं। यहाँ मैंने कुछ अधिक रोचक लोगों पर ध्यान केंद्रित करने की बजाय अस्पष्ट पर ध्यान केंद्रित करने की कोशिश की है, साथ ही कुछ मूलभूत बातें जो अभी तक सामने नहीं आई हैं।

evaluation             | proof normalisation/cut-elimination
variable               | assumption
S K combinators        | axiomatic formulation of logic   
pattern matching       | left-sequent rules 
subtyping              | implicit entailment (not reflected in expressions)
intersection types     | implicit conjunction
union types            | implicit disjunction
open code              | temporal next
closed code            | necessity
effects                | possibility
reachable state        | possible world
monadic metalanguage   | lax logic
non-termination        | truth in an unobservable possible world
distributed programs   | modal logic S5/Hybrid logic
meta variables         | modal assumptions
explicit substitutions | contextual modal necessity
pi-calculus            | linear logic

संपादित करें: CH के एक्सटेंशन के बारे में अधिक जानने के इच्छुक किसी भी व्यक्ति को मैं एक संदर्भ सुझाऊंगा:

"मोडल लॉजिक का एक जजमेंट रीकंस्ट्रक्शन" http://www.cs.cmu.edu/~fp/papers/mscs00.pdf - यह शुरू करने के लिए एक शानदार जगह है क्योंकि यह पहले सिद्धांतों से शुरू होता है और इसमें से अधिकांश का उद्देश्य है गैर-तर्कवादियों / भाषा सिद्धांतकारों के लिए सुलभ। (हालांकि मैं दूसरा लेखक हूं, इसलिए मैं पक्षपाती हूं।)


कुछ कम तुच्छ उदाहरण प्रदान करने के लिए धन्यवाद (जो वास्तव में मूल प्रश्न की भावना थी), हालांकि मैं मानता हूं कि इनमें से कई मेरे सिर के ऊपर हैं ... क्या शब्द "आवश्यकता" और "संभावना" तर्क में सटीक रूप से परिभाषित हैं? वे अपने कम्प्यूटेशनल समकक्षों का अनुवाद कैसे करते हैं?
टॉम क्रॉकेट

2
मैं इनमें से प्रत्येक के लिए प्रकाशित कागजात को इंगित कर सकता हूं, इसलिए वे सटीक रूप से परिभाषित हैं। मोडल तर्क का अधिक अध्ययन किया जाता है (अरस्तू के बाद से) और सत्य के विभिन्न तरीकों से संबंधित है - "ए जरूरी है सच" का अर्थ है "हर संभव दुनिया में ए सत्य है", जबकि "ए संभवतः सत्य है" का अर्थ है "एक संभव दुनिया में सच है" । आप "(आवश्यक रूप से (ए -> बी) और संभवतः ए) -> संभवतः बी" जैसी चीजों को साबित कर सकते हैं। सामान्य अनुमान नियम सीधे CH में हमेशा की तरह अभिव्यक्ति के निर्माण, टाइपिंग और कमी के नियमों का पालन करते हैं। देखें: en.wikipedia.org/wiki/Modal_logic और cs.cmu.edu/~fp/papers/mscs00.pdf
RD1

2
@pelotom: आप अन्य प्रकार के तर्क के बारे में थोड़ा पढ़ना चाह सकते हैं । सादा शास्त्रीय तर्क अक्सर इस संदर्भ में उपयोगी नहीं है - मैंने अपने उत्तर में अंतर्ज्ञानवादी तर्क का उल्लेख किया, लेकिन मोडल और रैखिक तर्क "वीडर" भी हैं, लेकिन वास्तव में भयानक भी हैं।
सीए मैककेन

1
संकेत के लिए धन्यवाद, लगता है जैसे मुझे कुछ पढ़ना है!
टॉम क्रॉकेट

2
@ RD1: आपको लगता है कि यह बुरा है, मैंने हास्केल में सोचने में इतना समय बिताया है कि मुझे समझ में आने से पहले तर्क के तर्क के सूत्रों का मानसिक रूप से अनुवाद करना होगा। :( इस बात का उल्लेख नहीं है कि बहिष्कृत मध्य का कानून और इस तरह से वास्तव में भ्रामक और शायद संदिग्ध लगने लगता है।
सीए मैककैन

26

आप नॉनटर्मिनेशन के बारे में थोड़ी-बहुत बातें कर रहे हैं। मिथ्यात्व निर्जन प्रकारों द्वारा दर्शाया जाता है , जो परिभाषा के अनुसार गैर-समाप्त नहीं हो सकता है क्योंकि पहली जगह में मूल्यांकन करने के लिए उस प्रकार का कुछ भी नहीं है।

गैर-समाप्ति विरोधाभास का प्रतिनिधित्व करती है - एक असंगत तर्क। एक असंगत तर्क बेशक आपको मिथ्यात्व सहित कुछ भी साबित करने की अनुमति देगा

विसंगतियों की अनदेखी करते हुए प्रकार प्रणाली आम तौर पर एक के अनुरूप intuitionistic तर्क है, और आवश्यकता से कर रहे हैं रचनावादी , जो सभी पर अगर शास्त्रीय तर्क के कुछ हिस्से, सीधे व्यक्त नहीं किया जा सकता है। दूसरी ओर यह उपयोगी है, क्योंकि यदि एक प्रकार एक वैध रचनात्मक प्रमाण है, तो उस प्रकार का एक शब्द आपके अस्तित्व के सिद्ध होने के निर्माण का एक साधन है

रचनावादी स्वाद की एक प्रमुख विशेषता यह है कि दोहरा नकार गैर-नकारात्मक के बराबर नहीं है। वास्तव में, नकारात्मकता एक प्रकार की प्रणाली में शायद ही कभी एक आदिम है, इसलिए इसके बजाय हम इसे झूठेपन को लागू करने के रूप में दर्शा सकते हैं, उदाहरण के लिए, not Pबन जाता है P -> Falsity। इस प्रकार डबल नकार एक प्रकार के साथ एक फ़ंक्शन होगा (P -> Falsity) -> Falsity, जो स्पष्ट रूप से केवल प्रकार के कुछ के बराबर नहीं है P

हालाँकि, इस पर एक दिलचस्प मोड़ है! पैरामीट्रिक बहुरूपता के साथ एक भाषा में, प्रकार चर सभी संभावित प्रकारों पर होते हैं, जिसमें निर्जन शामिल हैं, इसलिए पूरी तरह से बहुरूप प्रकार जैसे कि ∀a. a, कुछ अर्थों में, लगभग-झूठ है। तो क्या हुआ अगर हम बहुरूपता का उपयोग करके दोहरा-नकारात्मक लिखते हैं? हमें एक प्रकार मिलता है जो इस तरह दिखता है ∀a. (P -> a) -> a:। क्या यह किसी प्रकार के समतुल्य है P? वास्तव में यह है , इसे पहचान समारोह में लागू करें।

पर बात क्या है? ऐसा क्यों लिखें? क्या प्रोग्रामिंग शब्दों में इसका कोई मतलब है? ठीक है, आप इसे एक फ़ंक्शन के रूप में सोच सकते हैं, जिसमें पहले से ही कुछ प्रकार Pहै, और आपको इसे एक ऐसा फ़ंक्शन देने की ज़रूरत है, जो Pएक तर्क के रूप में लेती है, साथ ही पूरी बात अंतिम परिणाम प्रकार में बहुरूपी है। एक अर्थ में, यह एक निलंबित संगणना का प्रतिनिधित्व करता है , बाकी प्रदान किए जाने की प्रतीक्षा करता है। इस अर्थ में, इन निलंबित संगणनाओं की रचना एक साथ की जा सकती है, चारों ओर पारित की जाती है, आह्वान किया जाता है, जो भी हो। यह कुछ भाषाओं के प्रशंसकों से परिचित होना शुरू हो जाना चाहिए, जैसे स्कीम या रूबी - क्योंकि इसका क्या मतलब है कि दोहरे-निषेध निरंतरता-शैली से मेल खाते हैं, और वास्तव में मैंने जिस प्रकार का ऊपर दिया वह वास्तव में हास्केल में जारी रहने वाला मोनाड है।


सुधार के लिए धन्यवाद, मैंने "मिथ्यात्व" को गैर-मान्यता के पर्याय के रूप में हटा दिया है। डबल-नकार के लिए +1 <=> सीपीएस!
टॉम क्रोकेट

मैं काफी representingp के रूप में प्रतिनिधित्व करने के पीछे अंतर्ज्ञान नहीं मिलता है P -> Falsity। मैं समझता हूं कि यह क्यों काम करता है (¬p why p →,), लेकिन मुझे कोड संस्करण नहीं मिलता है। P -> ⊥जब ठीक Pनहीं है, ठीक से बसा होना चाहिए ? लेकिन क्या यह समारोह हमेशा आबाद नहीं होना चाहिए? या संभव नहीं है, वास्तव में, क्योंकि आप एक उदाहरण नहीं लौटा सकते हैं ? मैं इसकी स्थिति नहीं देख रहा हूँ। यहाँ क्या अंतर्ज्ञान है?
एंटाल स्पेक्टर-जैबुस्की 22

1
@Antal SZ: अंतर्ज्ञान बेशक तर्क है,! लेकिन हां, वास्तव में ऐसा फ़ंक्शन लिखना मुश्किल है। मैं आपकी प्रोफ़ाइल में देखता हूं कि आप हास्केल को जानते हैं, इसलिए शायद आप बीजीय डेटा प्रकार और पैटर्न मिलान में सोच रहे हैं? इस बात पर विचार करें कि एक निर्जन प्रकार के पास कोई रचनाकार नहीं होना चाहिए और, इस प्रकार, खिलाफ मैच करने के लिए कुछ भी नहीं है। आपको बिना किसी निकाय के "फ़ंक्शन" लिखना होगा, जो कानूनी हास्केल नहीं है। वास्तव में, मेरे ज्ञान के लिए, रनटाइम अपवाद या गैर-समाप्ति का उपयोग किए बिना हास्केल में नकारात्मक प्रकार का शब्द लिखने का कोई तरीका नहीं है।
सीए मैककैन

1
@Antal SZ: दूसरी ओर, यदि समतुल्य तर्क संगत है, तो सभी फ़ंक्शन कुल होने चाहिए, जैसे, सभी पैटर्न का मिलान संपूर्ण होना चाहिए। तो कोई पैटर्न के साथ एक फ़ंक्शन लिखने के लिए, पैरामीटर प्रकार में कोई निर्माता नहीं होना चाहिए, जैसे, निर्जन होना। इसलिए, इस तरह के एक समारोह कानूनी होगा - और इस प्रकार अपने स्वयं के निवास - ठीक है और केवल जब इसका तर्क निर्जन है। इसलिए, एक फ़ंक्शन गलत होने के P -> Falsityबराबर है P
सीए मैककैन

अहा, मुझे लगता है कि मुझे मिल गया। जो संस्करण मैं मनोरंजक था f x = x, वह कुछ ऐसा था , जो तत्काल iff होगा P = ⊥, लेकिन यह स्पष्ट रूप से पर्याप्त सामान्य नहीं था। तो विचार यह है कि एक वैधता प्रकार वापस करने के लिए , आपको कोई शरीर नहीं चाहिए; लेकिन फ़ंक्शन निश्चित और कुल होने के लिए, आपको किसी भी मामले की आवश्यकता नहीं है , और इसलिए यदि Pनिर्जन है, तो सब कुछ काम करता है? यह थोड़ा विस्की है, लेकिन मुझे लगता है कि मैं इसे देखता हूं। ऐसा लगता है कि मेरे Xorप्रकार की परिभाषा के साथ अजीब तरह से बातचीत करना ... मुझे इसके बारे में सोचना होगा। धन्यवाद!
एंटाल स्पेक्टर-जैबुस्की 22

15

आपका चार्ट बिल्कुल सही नहीं है; कई मामलों में आपने शर्तों के साथ भ्रमित किया है।

function type              implication
function                   proof of implication
function argument          proof of hypothesis
function result            proof of conclusion
function application RULE  modus ponens
recursion                  n/a [1]
structural induction       fold (foldr for lists)
mathematical induction     fold for naturals (data N = Z | S N)
identity function          proof of A -> A, for all A
non-terminating function   n/a [2]
tuple                      normal proof of conjunction
sum                        disjunction
n/a [3]                    first-order universal quantification
parametric polymorphism    second-order universal quantification
currying                   (A,B) -> C -||- A -> (B -> C), for all A,B,C
primitive type             axiom
types of typeable terms    theory
function composition       syllogism
substitution               cut rule
value                      normal proof

[१] ट्यूरिंग-पूर्ण कार्यात्मक भाषा के लिए तर्क असंगत है। सुसंगत सिद्धांतों में रिकर्सन का कोई पत्राचार नहीं है। एक असंगत तर्क / असत्य प्रमाण सिद्धांत में आप इसे एक नियम कह सकते हैं जो असंगतता / अकारणता का कारण बनता है।

[२] फिर, यह पूर्णता का परिणाम है। यह एक विरोधी प्रमेय का प्रमाण होगा यदि तर्क संगत थे - इस प्रकार, यह मौजूद नहीं हो सकता है।

[३] कार्यात्मक भाषाओं में मौजूद नहीं है, क्योंकि वे पहले-क्रम की तार्किक विशेषताओं को समाप्त करते हैं: सभी परिमाणीकरण और पैराड्राइज़ेशन सूत्रों के द्वारा किया जाता है। आप पहले क्रम सुविधाओं था, तो वहाँ से एक प्रकार अन्य होगा *, * -> *, आदि .; प्रवचन के क्षेत्र के तत्वों की तरह। उदाहरण के लिए, में Father(X,Y) :- Parent(X,Y), Male(X), Xऔर Yप्रवचन (इसे कहते के डोमेन से अधिक रेंज Dom), और Male :: Dom -> *


[१] - हाँ, मुझे अधिक विशिष्ट होना चाहिए था। मेरा मतलब था कि असंवैधानिक पुनरावृत्ति के बजाय "संरचनात्मक पुनरावृत्ति", जो मुझे लगता है कि "गुना" के समान है। [३] - यह निर्भर-टाइप की गई भाषाओं में मौजूद है
टॉम क्रकेट

[१] तथ्य यह है कि यदि एक रिकर्सन फंक्शन कॉल (मोडस पोन्सन) प्रोग्राम को गैर-समाप्त करने का कारण नहीं बनता है, तो कॉल या पर्यावरण को दिए गए पैरामीटर (परिकल्पना) उन कॉलों के बीच अलग होना चाहिए। तो, पुनरावृत्ति केवल एक ही प्रमेय को कई बार लागू कर रहा है। यदि कुछ विशेष हैं, तो यह आम तौर पर बढ़ती संख्या / घटते कदम (आगमनात्मक कदम) और एक मौजूदा मामले (आधार मामले) के साथ जांच कर रहा है, जो तर्क में गणितीय संकेतक के समान है।
पृथ्वी इंजन

मैं वास्तव में इस चार्ट को पसंद करता हूं, लेकिन मैं "n / a" नहीं कहूंगा, क्योंकि लगातार तर्क केवल एक प्रकार का तर्क नहीं है, जैसे कि प्रोग्राम को समाप्त करना एकमात्र प्रकार का कार्यक्रम नहीं है। एक गैर-समाप्ति समारोह "परिपत्र तर्क" के अनुरूप होगा, और करी-हावर्ड समरूपता का एक उत्कृष्ट चित्रण है: एक परिपत्र तर्क "निम्नलिखित" आपको एक अंतहीन लूप में रखता है।
जॉय एडम्स


13

मुझे वास्तव में यह सवाल पसंद है। मुझे पूरी जानकारी नहीं है, लेकिन मेरे पास कुछ चीजें हैं (सहायता के द्वारा) विकिपीडिया लेख है , जिसमें कुछ साफ-सुथरी मेजें हैं और खुद भी):

  1. मुझे लगता है कि योग प्रकार / संघ प्रकार ( जैसे data Either a b = Left a | Right b ) के बराबर हैं समावेशी अस्वीकृति के । और, हालांकि मैं करी-हावर्ड से बहुत अच्छी तरह से परिचित नहीं हूं, लेकिन मुझे लगता है कि यह इसे प्रदर्शित करता है। निम्नलिखित कार्य पर विचार करें:

    andImpliesOr :: (a,b) -> Either a b
    andImpliesOr (a,_) = Left a
    

    अगर मैं चीजों को सही ढंग से समझ, प्रकार का कहना है कि ( एक  ∧  ) → ( एक  ★  ,) और परिभाषा का कहना है कि यह सच है जहां ★ या तो समावेशी या अनन्य जो भी है या, Eitherका प्रतिनिधित्व करता है। आपने Eitherअनन्य या, You का प्रतिनिधित्व किया है; हालांकि, ( एक  ∧  ) ↛ ( एक  ⊕  )। उदाहरण के लिए, ⊤ ⊤ ⊤ ⊤ ⊤, लेकिन ⊤ ⊤ ⊤ ⊤ ⊤, और ⊤ ⊤ ⊤। दूसरे शब्दों में, यदि a और b दोनों सत्य हैं, तो परिकल्पना सत्य है लेकिन निष्कर्ष गलत है, और इसलिए यह निहितार्थ गलत है। हालांकि, स्पष्ट रूप से, ( एक  ∧  ) → ( एक  ∨ b ), चूँकि a और b दोनों सत्य हैं, तो कम से कम एक सत्य है। इस प्रकार, यदि भेदभाव वाली यूनियनें किसी प्रकार की अव्यवस्था हैं, तो वे समावेशी किस्म की होनी चाहिए। मुझे लगता है कि यह एक प्रमाण के रूप में है, लेकिन मुझे इस धारणा से मुक्त करने के लिए स्वतंत्र महसूस करने से अधिक लगता है।

  2. इसी तरह, पहचान समारोह और गैर-समाप्ति वाले कार्यों के रूप में तना विज्ञान और गैरबराबरी के लिए आपकी परिभाषाएं थोड़ी दूर हैं। सच्चा सूत्र इकाई प्रकार द्वारा दर्शाया गया है , जो कि प्रकार है जिसमें केवल एक तत्व है ( data ⊤ = ⊤, अक्सर वर्तनी ()और / या Unitकार्यात्मक प्रोग्रामिंग भाषाओं में)। यह समझ में आता है: चूंकि उस प्रकार का निवास करने की गारंटी है, और चूंकि केवल एक ही संभव निवासी है, यह सच होना चाहिए। पहचान समारोह केवल उस विशेष टैटोलॉजी का प्रतिनिधित्व करता है जो एक  → 

    नॉन-टर्मिनेटिंग फंक्शन्स के बारे में आपकी टिप्पणी, इस बात पर निर्भर करती है कि आपका मतलब क्या है, अधिक बंद। करी-हावर्ड प्रकार प्रणाली पर कार्य करता है, लेकिन गैर-समाप्ति वहां एन्कोड नहीं की जाती है। के अनुसार विकिपीडिया , गैर समाप्ति के साथ काम कर, एक मुद्दा है जोड़ने के रूप में यह असंगत लॉजिक्स (पैदा करता है जैसे , मैं परिभाषित कर सकते हैं wrong :: a -> bद्वारा wrong x = wrong x, और इस तरह "साबित" कि एक  →  किसी के लिए एक और )। यदि आप "बेतुकेपन" से यही मतलब रखते हैं, तो आप बिल्कुल सही हैं। यदि इसके बजाय आप गलत बयान का मतलब है, तो आप क्या चाहते हैं इसके बजाय किसी भी निर्जन प्रकार, जैसे कुछ परिभाषित किया गया हैdata ⊥यह क्या है, इसका निर्माण करने का कोई तरीका नहीं है। यह सुनिश्चित करता है कि इसका कोई मूल्य नहीं है, और इसलिए इसे निर्जन होना चाहिए, जो झूठ के बराबर है। मुझे लगता है कि आप शायद इसका उपयोग भी कर सकते हैं a -> b, क्योंकि अगर हम गैर-समाप्ति वाले कार्यों को मना करते हैं, तो यह भी निर्जन है, लेकिन मुझे 100% यकीन नहीं है।

  3. विकिपीडिया कहता है कि आप दो अलग-अलग तरीकों से स्वयंसिद्ध हैं, यह इस बात पर निर्भर करता है कि आप करी-हावर्ड की व्याख्या कैसे करते हैं: या तो कॉम्बिनेटरों में या चर में। मुझे लगता है कि कॉम्बिनेटर दृश्य का अर्थ है कि हमें दिए गए आदिम कार्यों को डिफ़ॉल्ट रूप से कह सकने वाली चीजों को सांकेतिक शब्दों में बदलना है (जिस तरह से मोडस पोनेंस एक स्वयंसिद्ध है क्योंकि फ़ंक्शन अनुप्रयोग आदिम है)। और मुझे लगता है कि परिवर्तनीय दृश्य का वास्तव में एक ही मतलब हो सकता है- कॉम्बिनेटर, आखिरकार, केवल वैश्विक चर हैं जो विशेष कार्य हैं। आदिम प्रकारों के लिए: यदि मैं इस बारे में सही ढंग से सोच रहा हूं, तो मुझे लगता है कि आदिम प्रकार की संस्थाएं हैं- आदिम वस्तुएं जिनके बारे में हम चीजों को साबित करने की कोशिश कर रहे हैं।

  4. मेरे तर्क और अर्थ विज्ञान वर्ग, वास्तव के अनुसार कि ( एक  ∧  ) →  सी  ≡  एक  → (  →  ) (और यह भी कि  → ( एक  →  )) निर्यात तुल्यता कानून कहा जाता है, प्राकृतिक कटौती में कम से कम सबूत। मैंने उस समय नोटिस नहीं किया था कि यह सिर्फ करी गई थी - काश, मेरे पास होता, क्योंकि यह अच्छा है!

  5. हालांकि अब हमारे पास समावेशी अस्वीकृति का प्रतिनिधित्व करने का एक तरीका है , हमारे पास अनन्य विविधता का प्रतिनिधित्व करने का एक तरीका नहीं है। : हम अनन्य अलगाव की परिभाषा का उपयोग करने के लिए यह प्रतिनिधित्व करने के लिए सक्षम होना चाहिए एक  ⊕   ≡ ( एक  ∨  ) ∧ ¬ ( एक  ∧  )। मैं कैसे लिख निषेध करने के लिए पता नहीं है, लेकिन मैं पता चलेगा कि ¬ पी  ≡  पी  → ⊥, और दोनों निहितार्थ और झूठ आसान है। इस प्रकार हमें विशेष छूट का प्रतिनिधित्व करने में सक्षम होना चाहिए:

    data ⊥
    data Xor a b = Xor (Either a b) ((a,b) -> ⊥)
    

    यह बिना मूल्यों वाले खाली प्रकार को परिभाषित करता है, जो मिथ्यात्व से मेल खाता है; Xorतो शामिल करने के लिए परिभाषित किया गया है दोनों ( और ) Eitherएक एक या एक ( या ) और एक समारोह ( निहितार्थ से) (क, ख) ( और ) नीचे प्रकार (करने के लिए झूठी )। हालांकि, मुझे इसका कोई मतलब नहीं है कि इसका क्या मतलब है ( 1 संपादित करें: अब मैं करता हूँ, अगला पैराग्राफ देखें!) चूंकि कोई प्रकार के मूल्य नहीं हैं (a,b) -> ⊥(वहाँ हैं?), मैं थाह नहीं लगा सकता कि इसका किसी कार्यक्रम में क्या अर्थ होगा। क्या किसी को इस परिभाषा या किसी अन्य के बारे में सोचने का एक बेहतर तरीका पता है? ( संपादन 1: हां, कैमकैन ।)

    संपादित करें 1: कैमकैन के जवाब के लिए धन्यवाद (अधिक विशेष रूप से, वह टिप्पणी जो उस पर मेरी मदद करने के लिए छोड़ दी), मुझे लगता है कि मैं देख रहा हूं कि यहां क्या हो रहा है। मूल्य के प्रकार का निर्माण करने के लिए Xor a b, आपको दो चीजें प्रदान करने की आवश्यकता है। सबसे पहले, aया तो bपहले तर्क के तत्व के अस्तित्व का साक्षी ; वह है, एक Left aया एक Right b। और दूसरा, एक प्रमाण कि दोनों प्रकार के तत्व नहीं हैं — aऔर bदूसरे शब्दों में, एक प्रमाण जो (a,b)निर्जन है — दूसरे तर्क के रूप में। जब से तुम ही से एक समारोह में लिखने के लिए सक्षम हो जाएगा (a,b) -> ⊥, तो (a,b)निर्जन है, इसका क्या मतलब है कि मामला होने के लिए? इसका मतलब यह होगा कि कुछ प्रकार की वस्तु(a,b)निर्माण नहीं किया जा सका; दूसरे शब्दों में, कि कम से कम एक, और संभवतः दोनों, aऔर bसाथ ही निर्जन हैं! इस मामले में, यदि हम पैटर्न मिलान के बारे में सोच रहे हैं, तो आप संभवतः इस तरह के ट्यूपल पर पैटर्न-मैच नहीं कर सकते: यह मानते हुए कि bनिर्जन है, हम क्या लिखेंगे जो उस ट्यूपल के दूसरे भाग से मेल खा सके? इस प्रकार, हम इसके खिलाफ मैच पैटर्न नहीं कर सकते हैं, जो आपको यह देखने में मदद कर सकता है कि यह इसे निर्जन क्यों बनाता है। अब, कुल कार्य करने का एकमात्र तरीका जो कोई तर्क नहीं लेता है (जैसा कि यह एक होना चाहिए, क्योंकि (a,b)निर्जन है) परिणाम के लिए एक निर्जन प्रकार का है - अगर हम इस बारे में एक पैटर्न-मिलान परिप्रेक्ष्य से सोच रहे हैं, इसका मतलब यह है कि भले ही फ़ंक्शन के कोई मामले नहीं हैं, फिर भी कोई संभव शरीर नहीं है यह भी हो सकता है, और इसलिए सब कुछ ठीक है।

इसमें से बहुत कुछ मुझे उड़ने पर जोर से / साबित (उम्मीद) बातें सोच रहा है, लेकिन मुझे आशा है कि यह उपयोगी है। मैं वास्तव में विकिपीडिया लेख की सिफारिश करता हूं ; मैंने इसके बारे में किसी भी प्रकार से विस्तार से नहीं पढ़ा है, लेकिन इसकी सारणियाँ बहुत अच्छा सारांश हैं, और यह बहुत गहन है।


1
+1 इंगित करने के लिए कि या तो समावेशी है या। ध्यान दें कि (या तो आ) एक प्रमेय है (सभी के लिए)।
एपोकैलिस्प

प्रश्न पुनः। 2 (बी): एक फ़ंक्शन प्रकार के बीच का अंतर क्या है जिसका एकमात्र निवासी गैर-समाप्ति है, और एक निर्जन फ़ंक्शन प्रकार है? उदाहरण के लिए, यदि मैंने कोई निर्माता नहीं के साथ एक प्रकार बी घोषित किया है, तो एक फ़ंक्शन ए-> बी को परिभाषित करें जैसे: मज़ेदार (ए: ए): बी: = एफ (ए) यह कई भाषाओं में टाइप करेगा, भले ही यह हो। एक बी को वापस करना असंभव है। इसलिए यह फ़ंक्शन एक अर्थ में "आबाद" है, लेकिन इसका "निवासी" बेतुका है ... इसलिए यह वास्तव में बिल्कुल आबाद नहीं है। उम्मीद है कि यह कुछ समझ में आता है :)
टॉम क्रोकेट

3
बोतलें सबूत नहीं हैं। "यह अस्वाभाविक और असंभव है कि अनजानी और अनिश्चितता को समाहित किया जाए और निर्धारित किया जाए।" - अरिस्टोटेलिस
एपोकैलिस्प

2
@ टोम: नॉन-टर्मिनेशन के बारे में घर पर बात करने के लिए, यदि तर्क संगत है, तो सभी प्रोग्राम समाप्त हो जाते हैं । गैर-समाप्ति केवल प्रकार की प्रणालियों में होती है जो असंगत लॉजिक्स का प्रतिनिधित्व करती है, या समकक्ष रूप से, ट्यूरिंग-पूर्ण भाषाओं के लिए सिस्टम टाइप करती है।
सीए मैककैन

1
Apocalisp: Either a a काफी एक प्रमेय नहीं होना चाहिए: Either ⊥ ⊥अभी भी निर्जन है। टॉम: जैसा कि कैमकैन ने कहा, संगति से तात्पर्य समाप्ति से है। इस प्रकार, एक सुसंगत प्रकार प्रणाली आपको व्यक्त करने की अनुमति नहीं देगी f :: a -> b, और इसलिए यह प्रकार निर्जन होगा; एक असंगत प्रकार की प्रणाली के प्रकार के लिए एक निवासी होगा , लेकिन एक जो समाप्त नहीं होगा। कैमकैन: क्या असंगत प्रकार के सिस्टम हैं जो ट्यूरिंग-पूर्ण नहीं हैं, पदानुक्रम पर कुछ के बीच में कब्जा कर रहे हैं? या वह अंतिम चरण (सामान्य पुनरावृत्ति या जो कुछ भी है) ठीक असंगतता के बराबर है?
एंटाल स्पेक्टर-जैबुस्की 22

12

यहाँ थोड़ा अस्पष्ट है जो मुझे आश्चर्य है कि पहले नहीं लाया गया था: "शास्त्रीय" कार्यात्मक प्रतिक्रियाशील प्रोग्रामिंग लौकिक तर्क से मेल खाती है।

बेशक, जब तक आप एक दार्शनिक, गणितज्ञ या जुनूनी कार्यात्मक प्रोग्रामर नहीं होते हैं, यह संभवतः कई और प्रश्न लाता है।

तो, पहले बंद: कार्यात्मक प्रतिक्रियाशील प्रोग्रामिंग क्या है? यह समय-बदलती मूल्यों के साथ काम करने का एक घोषणात्मक तरीका है । यह उपयोगकर्ता इंटरफेस जैसी चीजों को लिखने के लिए उपयोगी है क्योंकि उपयोगकर्ता के इनपुट समय के अनुसार बदलते मूल्य हैं। "क्लासिकल" एफआरपी में दो बुनियादी डेटा प्रकार हैं: घटनाएं और व्यवहार।

ईवेंट उन मूल्यों का प्रतिनिधित्व करते हैं जो केवल असतत समय पर मौजूद हैं। कीस्ट्रोक्स एक बेहतरीन उदाहरण हैं: आप कीबोर्ड से इनपुट के बारे में एक निश्चित समय में एक चरित्र के रूप में सोच सकते हैं। प्रत्येक की-वर्ड तब कुंजी के चरित्र के साथ एक जोड़ी है और जिस समय इसे दबाया गया था।

व्यवहार वे मूल्य हैं जो लगातार मौजूद होते हैं लेकिन लगातार बदलते रह सकते हैं। माउस स्थिति एक महान उदाहरण है: यह सिर्फ x, y निर्देशांक का व्यवहार है। आखिरकार, माउस में हमेशा एक स्थिति होती है और, वैचारिक रूप से, यह स्थिति माउस को स्थानांतरित करने के बाद लगातार बदलती रहती है । सब के बाद, माउस को स्थानांतरित करना एक एकल लंबी कार्रवाई है, न कि असतत चरणों का एक गुच्छा।

और लौकिक तर्क क्या है? उचित रूप से पर्याप्त है, यह समय के साथ निर्धारित प्रस्तावों से निपटने के लिए तार्किक नियमों का एक सेट है। अनिवार्य रूप से, यह दो क्वांटिफायर के साथ सामान्य प्रथम-क्रम तर्क का विस्तार करता है: ends और ends। पहला अर्थ है "हमेशा": "□ हमेशा धारण" के रूप में □ □ पढ़ें। दूसरा है "अंततः": "" का अर्थ है कि "" अंत में धारण करेगा "। यह एक विशेष प्रकार का मोडल लॉजिक है । निम्नलिखित दो कानून क्वांटिफायर से संबंधित हैं:

□φ ⇔ ¬◇¬φ
◇φ ⇔ ¬□¬φ

तो So और □ एक दूसरे के समान ∃ और ◇ के समान दोहरे हैं।

ये दोनों क्वांटिफायर दो प्रकार के एफआरपी के अनुरूप हैं। विशेष रूप से, behaviors व्यवहार से मेल खाती है और। घटनाओं से मेल खाती है। यदि हम सोचते हैं कि इन प्रकारों का निवास कैसे होता है, तो यह समझ में आना चाहिए: एक व्यवहार हर संभव समय पर बसा हुआ है , जबकि एक घटना केवल एक बार होती है।


8

निरंतरता और दोहरे नकार के बीच संबंध, कॉल / cc का प्रकार Peirce का नियम है http://en.wikipedia.org/wiki/Call-with-current-continuation

सीएच को आमतौर पर अंतर्ज्ञानवादी तर्क और कार्यक्रमों के बीच पत्राचार के रूप में कहा जाता है। हालाँकि अगर हम कॉल-विथ-करेंट-कंटीन्यूएशन (कॉलसीसी) ऑपरेटर (जिसका प्रकार Peirce के नियम से मेल खाता है) को जोड़ते हैं, तो हमें कॉलसीसी के साथ शास्त्रीय तर्क और कार्यक्रमों के बीच एक पत्राचार मिलता है ।


4

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


4

प्रथम श्रेणी की निरंतरता समर्थन आपको $ P \ lor \ negative P $ व्यक्त करने की अनुमति देता है। चाल इस तथ्य पर आधारित है कि निरंतरता को न बुलाना और कुछ अभिव्यक्ति के साथ बाहर निकलना उसी अभिव्यक्ति के साथ निरंतरता को कॉल करने के बराबर है।

अधिक विस्तृत दृश्य के लिए कृपया देखें: http://www.cs.cmu.edu/~rwh/courses/logic/www-old/handouts/callcc.pdf


उस अंतर्दृष्टि के लिए धन्यवाद!
पॉलोत्रेन्स

4
2-continuation           | Sheffer stoke
n-continuation language  | Existential graph
Recursion                | Mathematical Induction

एक चीज जो महत्वपूर्ण है, लेकिन अभी तक जांच नहीं की गई है वह है 2-निरंतरता (निरंतरता जो 2 मापदंडों को लेती है) और शेफर स्ट्रोक का संबंध है । क्लासिक तर्क में, शेफ़र स्ट्रोक अपने आप में एक पूर्ण तर्क प्रणाली बना सकता है (साथ ही कुछ गैर-ऑपरेटर अवधारणाएं)। कौन परिचित का मतलब है and, or, notकेवल Sheffer स्टोक या का उपयोग कर कार्यान्वित किया जा सकता nand

यह इसके प्रोग्रामिंग प्रकार के पत्राचार का एक महत्वपूर्ण तथ्य है क्योंकि यह संकेत देता है कि सभी प्रकारों को बनाने के लिए एक ही प्रकार के कॉम्बिनेटर का उपयोग किया जा सकता है।

2-निरंतरता का प्रकार हस्ताक्षर है (a,b) -> Void। इस कार्यान्वयन के द्वारा हम 1-निरंतरता (सामान्य निरंतरता) को परिभाषित कर सकते हैं (a,a)-> शून्य, उत्पाद प्रकार जैसे ((a,b)->Void,(a,b)->Void)->Void, राशि प्रकार ((a,a)->Void,(b,b)->Void)->Void। यह हमें अपनी अभिव्यक्ति की शक्ति का प्रभावशाली अनुभव कराता है।

यदि हम आगे खुदाई करते हैं, तो हमें पता चलेगा कि टुकड़ा का अस्तित्व ग्राफ केवल डेटा प्रकार n- निरंतरता वाली भाषा के बराबर है, लेकिन मैंने नहीं देखा कि कोई मौजूदा भाषा इस रूप में है। तो एक का आविष्कार करना दिलचस्प हो सकता है, मुझे लगता है।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.