यह दिखाने के लिए कि निर्भर प्रकार की जाँच करने के लिए सबूत तकनीक निर्णायक है


10

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

मेरे द्वारा पढ़े गए कई संदर्भों में, टाइपेकिटेकिंग की निर्णायक क्षमता को सामान्य सामान्यीकरण के एक समूह के रूप में सूचीबद्ध किया गया है, और मैं इसे उन मामलों में मानता हूं, लेकिन मैं सोच रहा हूं कि वास्तव में यह दिखाने के बारे में कैसे जाना जाता है।

विशेष रूप से, मैं निम्नलिखित पर अटक गया हूं:

  • सिर्फ इसलिए कि अच्छी तरह से टाइप किए गए शब्द दृढ़ता से सामान्य हो रहे हैं, इसका मतलब यह नहीं है कि एल्गोरिथ्म गैर-अच्छी तरह से टाइप किए गए इनपुट पर हमेशा के लिए लूप नहीं करेगा
  • चूँकि तार्किक संबंध आमतौर पर मजबूत सामान्यीकरण दिखाने के लिए उपयोग किए जाते हैं, इसलिए सुविधाजनक टाइपिंग मीट्रिक नहीं है क्योंकि हम टाइपकास्टिंग की शर्तों को आगे बढ़ाते हैं। यहां तक ​​कि अगर मेरे प्रकार के नियम वाक्यविन्यास निर्देशित हैं, तो कोई गारंटी नहीं है कि नियमों को लागू करना अंततः समाप्त हो जाएगा।

मैं सोच रहा हूँ, क्या किसी के पास एक भरोसेमंद टाइप की गई भाषा के लिए टंकण की विकलता के प्रमाण का अच्छा संदर्भ है? यदि यह एक छोटा कोर पथरी है, तो यह ठीक है। कुछ भी है कि decidability दिखाने के लिए सबूत तकनीक पर चर्चा महान होगा।


7
सामान्य द्विदिश प्रकार की जाँच करने वाले एल्गोरिदम कभी भी पहले जाँच के बिना किसी शब्द (या एक प्रकार) को सामान्य करने का प्रयास नहीं करते हैं कि यह अच्छी तरह से टाइप किया गया है (या अच्छी तरह से गठित)। आपको अनकही शर्तों को सामान्य करने की चिंता करने की आवश्यकता नहीं है।
बाउर

7
नियमों को लागू करने के बारे में: सभी प्रकार और प्रकार के नियम लक्ष्य को कम करते हैं, प्रकार रूपांतरण को छोड़कर। इस प्रकार हमें टाइप रूपांतरण को नियंत्रित करने की आवश्यकता है, जिसे हम द्वि-दिशात्मक दृष्टिकोण का उपयोग करके करते हैं।
बाउर

जवाबों:


9

यहां वास्तव में एक सूक्ष्मता है, हालांकि प्रकार की जाँच के मामले में चीजें अच्छी तरह से काम करती हैं। मैं इस मुद्दे को यहाँ लिखूंगा, क्योंकि यह कई संबंधित थ्रेड्स में आता है, और यह समझाने की कोशिश करता है कि "मानक" आश्रित प्रकार के सिद्धांत में टाइप-चेक करने पर चीजें ठीक से काम क्यों करती हैं (मैं जानबूझकर अस्पष्ट हो जाऊंगा,) चूंकि ये मुद्दे परवाह किए बिना फसल करते हैं):

DΓt:ADΓA:ssutBΔDΔu:B

यह अच्छा तथ्य साबित करने के लिए कुछ कठिन है, और एक बहुत बुरा काउंटर तथ्य से ऑफसेट:

तथ्य 2: सामान्य में, और नहीं कर रहे हैं के उप derivations !DD डीD

यह आपके प्रकार प्रणाली के सटीक निर्माण पर थोड़ा निर्भर करता है, लेकिन व्यवहार में लागू अधिकांश "परिचालन" सिस्टम तथ्य 2 को संतुष्ट करते हैं।

इसका मतलब यह है कि आप व्युत्पत्तियों पर शामिल होने का तर्क देते समय "उप-शर्तों को पारित नहीं कर सकते हैं" या निष्कर्ष निकाल सकते हैं कि जिस तरह का शब्द आपके बारे में कुछ साबित करने की कोशिश कर रहा है, उस प्रकार के बारे में प्रेरक कथन सही है।

यह तथ्य आपको काफी कठोर रूप से काटता है जब प्रतीत होता है कि निर्दोष बयानों को साबित करने की कोशिश कर रहा है, उदाहरण के लिए टाइप किए गए रूपांतरण वाले सिस्टम बिना रूपांतरण वाले लोगों के बराबर हैं।

हालाँकि , टाइप इंट्रेंस के मामले में, आप शब्द की संरचना पर इंडक्शन द्वारा एक साथ टाइप और सॉर्ट (प्रकार के प्रकार) इनविज़न एल्गोरिथ्म दे सकते हैं, जिसमें एक प्रकार का निर्देशित एल्गोरिथ्म शामिल हो सकता है जैसा कि लेडी सुझाती है। किसी दिए गए शब्द (और संदर्भ , आप या तो विफल रहते हैं या ऐसा और । आपको बाद की खोज के लिए आगमनात्मक परिकल्पना का उपयोग करने की आवश्यकता नहीं है। व्युत्पत्ति, और इसलिए विशेष रूप से आप ऊपर बताई गई समस्या से बचते हैं।tΓA,sΓt:AΓA:s

महत्वपूर्ण मामला (और एकमात्र मामला जिसे वास्तव में रूपांतरण की आवश्यकता है) आवेदन है:

infer(t u):
   type_t, sort_t <- infer(t)
   type_t' <- normalize(type_t)
   type_u, sort_u <- infer(u)
   type_u' <- normalize(type_u)
   if (type_t' = Pi(A, B) and type_u' = A' and alpha_equal(A, A') then
      return B, sort_t (or the appropriate sort)
   else fail

सामान्य करने के लिए हर कॉल अच्छी तरह से टाइप की गई शर्तों पर किया गया था, क्योंकि यह inferसफलता के लिए अपरिवर्तनीय है ।


वैसे, जैसा कि इसे लागू किया गया है, कोक के पास निर्णायक प्रकार की जाँच नहीं है, क्योंकि यह fixउन्हें जाँचने का प्रयास करने से पहले बयानों के शरीर को सामान्य करता है।

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


मुझे आपका उत्तर बहुत उपयोगी लगा, धन्यवाद। मेरे दो प्रश्न हैं: 1. इसका क्या मतलब है "परिचालन प्रणाली"? विकल्प क्या है? 2. क्या आप उदाहरण के साथ और अधिक स्पष्ट हो सकते हैं: इसका क्या मतलब है (हम किस तथ्य को साबित करने की कोशिश कर रहे हैं?) "टाइप किए गए रूपांतरण वाले सिस्टम बिना रूपांतरण वाले लोगों के बराबर हैं।" धन्यवाद!
Łukasz ल्यू

1
@ OperationalukaszLew एक ऑपरेशनल सिस्टम का विकल्प (जैसे कि Coq या Agda सॉफ्टवेयर में प्रैक्टिस के लिए लागू किया गया) एक सैद्धांतिक प्रणाली होगी, जो मेटा-थियेट्रिक गुणों को साबित करने के लिए उपयोगी है, लेकिन व्यवहार में उपयोग करने के लिए अक्षम या असुविधाजनक है। एक संचालन और एक सैद्धांतिक प्रणाली की समानता को साबित करना अक्सर सिस्टम डिज़ाइन का एक महत्वपूर्ण हिस्सा होता है। मैं यहाँ इसके बारे में अधिक बात करता हूं: cstheory.stackexchange.com/a/41457/3984
cody

मुझे लगता है कि यह लेनार्ट आगस्टसन के सरल, आसान का उल्लेख करने योग्य है ! । यह प्रकार की जाँच का एक न्यूनतम हास्केल कार्यान्वयन और भरोसेमंद रूप से टाइप किए गए लैम्ब्डा कैलकुलस के लिए कुछ अनुमान है। कोड है जो कोडी के निकट है infer(t u):; इसे खोजने के लिए, " tCheck r (App f a) =" के लिए खोजें। अधिक पूर्ण लेकिन अभी भी सरल कार्यान्वयन के लिए आप मोर्टे कीtypeWith जांच कर सकते हैं ।
लेव

1
@ UntukaszLew टाइप की गई बनाम अनकैप्ड रूपांतरण समस्या एक प्रसिद्ध खुला प्रश्न है, जो टाइप के सिद्धांतों के 2 योगों से संबंधित है, और हाल ही में हल किया गया था: pauillac.inria.fr/~herbelin/articles-…
cody

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