हिंडले-मिलनर का कौन सा हिस्सा आपको समझ नहीं आ रहा है?


850

मैं कसम खाता हूं कि अमर शब्दों की बिक्री के लिए एक टी-शर्ट हुआ करती थी :


का क्या हिस्सा?

Hindley-मिलनर

क्या आपको समझ नहीं आया?


मेरे मामले में, इसका उत्तर होगा ... यह सब!

विशेष रूप से, मैं अक्सर हास्केल पत्रों में इस तरह का अंकन देखता हूं, लेकिन मुझे कोई सुराग नहीं है कि इसका कोई मतलब क्या है। मुझे पता नहीं है कि गणित की कौन सी शाखा होनी चाहिए।

मैं निश्चित रूप से ग्रीक वर्णमाला के अक्षरों और प्रतीकों को पहचानता हूं जैसे "∉" (जिसका आमतौर पर मतलब है कि कुछ एक सेट का तत्व नहीं है)।

दूसरी ओर, मैंने पहले कभी "⊢" नहीं देखा ( विकिपीडिया का दावा है कि इसका अर्थ "विभाजन" हो सकता है )। मैं यहाँ पर विनकुलम के उपयोग से भी अपरिचित हूँ। (आमतौर पर, यह एक अंश को दर्शाता है, लेकिन यहाँ ऐसा प्रतीत नहीं होता है।)

अगर कोई कम से कम मुझे बता सकता है कि प्रतीकों के इस समुद्र का अर्थ समझने के लिए कहां से शुरू करना है, तो यह उपयोगी होगा।


8
यदि आप एल्गोरिथ्म की एक अच्छी व्याख्या की तलाश कर रहे हैं , तो मैंने अब तक जो सबसे अच्छा पाया है वह श्रीराम कृष्णमूर्ति की प्रोग्रामिंग भाषाओं के अध्याय 30 में है : एप्लिकेशन और इंटरप्रिटेशन (सीसी लाइसेंस!)।
लसलोह

2
@laslowh धन्यवाद! मैं इसे पढ़ रहा हूं। नया संस्करण: cs.brown.edu/courses/cs173/2012/book/book.pdf
स्नोयन

जवाबों:


652
  • क्षैतिज पट्टी का मतलब है कि "[ऊपर] का तात्पर्य [नीचे]"।
  • तो देखते हैं कई भाव [ऊपर] में है, तो विचार करना उन्हें anded एक साथ; [नीचे] की गारंटी देने के लिए [उपरोक्त] के सभी सत्य होने चाहिए।
  • :का मतलब प्रकार है
  • साधन में है । (इसी तरह "का अर्थ" में नहीं है।)
  • Γआमतौर पर एक पर्यावरण या संदर्भ को संदर्भित करने के लिए उपयोग किया जाता है ; इस मामले में इसे एक प्रकार के एनोटेशन के रूप में माना जा सकता है, अपने प्रकार के साथ एक पहचानकर्ता की जोड़ी। इसलिए x : σ ∈ Γइसका मतलब है कि पर्यावरण Γमें वह तथ्य शामिल है xजिसके प्रकार हैं σ
  • साबित या निर्धारित के रूप में पढ़ा जा सकता है । Γ ⊢ x : σइसका मतलब है कि पर्यावरण Γनिर्धारित करता है कि xप्रकार है σ
  • ,पर्यावरण में विशिष्ट अतिरिक्त मान्यताओं को शामिल करने का एक तरीका है Γ
    इसलिए, Γ, x : τ ⊢ e : τ'उस पर्यावरण का अर्थ है Γ, अतिरिक्त, अतिव्यापी धारणा के साथ जो xप्रकार हैτ , यह साबित करता है कि eप्रकार है τ'

अनुरोध के अनुसार: ऑपरेटर पूर्वता, उच्चतम से निम्नतम:

  • जैसे भाषा-विशिष्ट इन्फ़िक्स और mixfix ऑपरेटरों, λ x . e, ∀ α . σ, और τ → τ', let x = e0 in e1और समारोह आवेदन के लिए खाली स्थान के।
  • :
  • तथा
  • , (बाएं साहचर्य)
  • व्हॉट्सएप कई प्रस्तावों को अलग कर (साहचर्य)
  • क्षैतिज पट्टी

19
ऑपरेटरों की पूर्ववर्ती नियम क्या हैं?
Randomblue

:और बहुत समान हैं, इसमें उनका मतलब है कि एक चीज एक और चीज में निहित है - एक सेट में तत्व शामिल हैं, और एक प्रकार में मूल्य शामिल हैं, एक अर्थ में। महत्वपूर्ण अंतर यह है कि x ∈ Sइसका मतलब है कि एक सेट में Sशाब्दिक रूप से एक तत्व होता है x, जबकि Γ ⊢ x : Tइसका मतलब है कि संदर्भ में xनिवासियों के प्रकार के लिए कटौती की जा सकती Tहै Γ। इस पर विचार करते हुए, वर नियम पढ़ता है: »यदि x का शाब्दिक संदर्भ में निहित है, तो यह (तुच्छ रूप से) इसका अनुमान लगाया जा सकता है«।
डेविड

@Randomblue मैं हर जगह कोष्ठकों जोड़ने, जैसे द्वारा प्रतीकों में से पूर्वता स्पष्ट किया (Γ,(x:τ))⊢(x:σ), देखने overleaf.com/read/ddmnkzjtnqbd#/61990222
SnowOnion

327

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

प्रतीक

एक और बात ध्यान में रखना है कि कुछ अक्षरों के पारंपरिक अर्थ हैं; विशेष रूप से, in उस "संदर्भ" का प्रतिनिधित्व करता है जिसमें आप हैं - यानी, आपके द्वारा देखी गई अन्य चीजों के प्रकार क्या हैं। तो कुछ का Γ ⊢ ...अर्थ है "अभिव्यक्ति ...जब आप हर अभिव्यक्ति के प्रकार को जानते हैं Γ

प्रतीक अनिवार्य रूप से मतलब है कि आप कुछ साबित कर सकते हैं। तो Γ ⊢ ...एक बयान है "मैं ...एक संदर्भ में साबित कर सकता हूं Γ। इन बयानों को प्रकार के निर्णय भी कहा जाता है।

एक और बात ध्यान में रखना: गणित में, एमएल और स्काला की तरह, x : σइसका मतलब है कि xप्रकार है σ। आप इसे हास्केल की तरह ही पढ़ सकते हैं x :: σ

प्रत्येक नियम का क्या अर्थ है

तो, यह जानकर, पहली अभिव्यक्ति को समझना आसान हो जाता है: यदि हम जानते हैं कि x : σ ∈ Γ( अर्थात् , किसी संदर्भ में कुछ xप्रकार σहै Γ), तो हम जानते हैं कि Γ ⊢ x : σ(अर्थात Γ, xप्रकार में है σ)। तो वास्तव में, यह आपको कुछ भी दिलचस्प नहीं बता रहा है; यह आपको बताता है कि आपको अपने संदर्भ का उपयोग कैसे करना है।

अन्य नियम भी सरल हैं। उदाहरण के लिए, ले लो [App]। इस नियम की दो शर्तें हैं: e₀एक प्रकार से कुछ प्रकार के τलिए एक फ़ंक्शन है τ'और प्रकार e₁का एक मूल्य है τ। अब आप जानते हैं कि आवेदन करने e₀से आपको किस प्रकार मिलेगा e₁! उम्मीद है कि यह आश्चर्य की बात नहीं है :)।

अगले नियम में कुछ और नए वाक्यविन्यास हैं। विशेष रूप से, Γ, x : τबस का अर्थ है संदर्भ Γऔर निर्णय से बना है x : τ। इसलिए, यदि हम जानते हैं कि चर xका एक प्रकार है τऔर अभिव्यक्ति eका एक प्रकार है τ', तो हम उस फ़ंक्शन का प्रकार भी जानते हैं जो लेता है xऔर वापस लौटता है e। यह सिर्फ हमें बताता है कि अगर हमें पता चल गया है कि कोई फ़ंक्शन किस प्रकार लेता है और किस प्रकार का रिटर्न देता है, तो यह आश्चर्य की बात नहीं है।

अगला केवल आपको बताता है कि letबयानों को कैसे संभालना है। क्या आप जानते हैं कुछ अभिव्यक्ति है कि अगर e₁एक प्रकार है τ, जब तक कि xएक प्रकार है σ, तो एक letअभिव्यक्ति जो स्थानीय स्तर पर बांध xप्रकार के एक मूल्य के लिए σकर देगा e₁एक प्रकार है τ। वास्तव में, यह आपको बताता है कि एक कथन अनिवार्य रूप से आपको एक नए बंधन के साथ संदर्भ का विस्तार करने देता है - जो वास्तव में यही letकरता है!

[Inst]शासन उप टाइपिंग से संबंधित है। यह कहता है कि यदि आपके पास प्रकार का मूल्य है σ'और यह एक उप-प्रकार का है σ( आंशिक आदेश देने वाले संबंध का प्रतिनिधित्व करता है) तो वह अभिव्यक्ति भी प्रकार की है σ

अंतिम नियम सामान्यीकरण प्रकारों से संबंधित है। एक तरफ एक त्वरित: एक मुफ्त चर वह चर है जिसे कुछ अभिव्यक्ति के अंदर लेट-स्टेटमेंट या लैम्ब्डा द्वारा पेश नहीं किया जाता है; यह अभिव्यक्ति अब इसके संदर्भ से मुक्त चर के मूल्य पर निर्भर करती है। नियम कह रहा है कि अगर कुछ चर है αजो आपके संदर्भ में किसी भी चीज में "मुक्त" नहीं है, तो यह कहना सुरक्षित है कि कोई भी अभिव्यक्ति जिसका प्रकार आप जानते हैं e : σके किसी भी मूल्य के लिए उस प्रकार होगा α

नियमों का उपयोग कैसे करें

तो, अब जब आप प्रतीकों को समझते हैं, तो आप इन नियमों का क्या करते हैं? खैर, आप इन नियमों का उपयोग विभिन्न मूल्यों के प्रकार का पता लगाने के लिए कर सकते हैं। ऐसा करने के लिए, अपनी अभिव्यक्ति को देखें (कहें f x y) और एक नियम ढूंढें जिसमें एक निष्कर्ष (निचला भाग) हो जो आपके कथन से मेल खाता हो। आइए उस चीज़ को कहते हैं जिसे आप अपना "लक्ष्य" खोजने की कोशिश कर रहे हैं। इस मामले में, आप उस नियम को देखेंगे जो समाप्त होता है e₀ e₁। जब आपको यह मिल गया है, तो आपको अब इस नियम की रेखा के ऊपर सब कुछ साबित करने वाले नियम ढूंढने होंगे। ये चीजें आम तौर पर उप-अभिव्यक्तियों के प्रकारों के अनुरूप होती हैं, इसलिए आप अनिवार्य रूप से अभिव्यक्ति के कुछ हिस्सों पर दोहरा रहे हैं। आप ऐसा तब तक करते हैं जब तक आप अपने प्रूफ ट्री को खत्म नहीं कर देते, जो आपको अपनी अभिव्यक्ति के प्रकार का प्रमाण देता है।

तो ये सभी नियम सटीक रूप से निर्दिष्ट हैं - और सामान्य रूप से गणितीय रूप से पांडित्यपूर्ण विवरण में: पी - कैसे अभिव्यक्ति के प्रकारों का पता लगाना है।

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

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


5
\ अल्फा एक गैर-मुक्त प्रकार चर है, सामान्य चर नहीं है। इसलिए सामान्यीकरण नियम को समझाने के लिए और अधिक समझाया जाना चाहिए।
नुप्पेकेपॉप

2
@nponeccop: हम्म, अच्छी बात। मैंने वास्तव में उस विशेष नियम को पहले नहीं देखा है। क्या आप मुझे इसे ठीक से समझाने में मदद कर सकते हैं?
तिखन जेल्विस

8
@TikhonJelvis: यह वास्तव में बहुत सरल है, यह आप (यह मानते हुए सामान्यीकरण करने के लिए अनुमति देता है Γ = {x : τ}) λy.x : σ → τकरने के लिए ∀ σ. σ → τ, लेकिन करने के लिए नहीं ∀ τ. σ → τहै, क्योंकि τमें नि: शुल्क चर रहा है Γएचएम पर विकिपीडिया लेख इसे काफी अच्छी तरह से समझाता है।
विटस

7
मेरा मानना ​​है कि इससे संबंधित उत्तर का हिस्सा [Inst]थोड़ा गलत है। यह अब तक केवल मेरी समझ है, लेकिन नियमों [Inst]और [Gen]नियमों के सिगमा प्रकार के लिए नहीं, बल्कि टाइप-स्कीम के लिए संदर्भित करते हैं । इसलिए ऑपरेटर एक आंशिक आदेश है जो उप-टाइपिंग से असंबंधित है जैसा कि हम इसे OO भाषाओं से जानते हैं। यह बहुरूपी मूल्यों से संबंधित है जैसे कि id = λx. x। इस तरह के एक समारोह के लिए पूर्ण वाक्यविन्यास होगा id = ∀x. λx. x। अब, हम स्पष्ट रूप से एक id2 = ∀xy. λx. x, जहां yउपयोग नहीं किया जाता है हो सकता है। फिर id2 ⊑ id, जो [Inst]नियम कहता है।
इओनु

71

अगर कोई कम से कम मुझे बता सकता है कि प्रतीकों के इस समुद्र का मतलब समझने के लिए कहां से शुरू करना है

"देखो प्रोग्रामिंग भाषाएं के व्यावहारिक नींव। ", अध्याय 2 और 3, निर्णय और derivations के माध्यम से तर्क की शैली पर। पूरी किताब अब अमेज़न पर उपलब्ध है।

अध्याय 2

आगमनात्मक परिभाषाएँ

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

२.१ निर्णय

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

  • n nat - n एक प्राकृतिक संख्या है
  • n = n1 + n2 - n , n1 और n2 का योग है
  • τ प्रकार - τ एक प्रकार है
  • : τ - अभिव्यक्ति प्रकार है τ
  • वी - अभिव्यक्ति महत्व है v

एक निर्णय में कहा गया है कि एक या एक से अधिक वाक्यात्मक वस्तुओं के पास एक संपत्ति है या एक दूसरे के संबंध में कुछ है। संपत्ति या संबंध को ही एक निर्णय रूप कहा जाता है , और उस वस्तु या वस्तु के संबंध में जो निर्णय होता है, वह उस निर्णय प्रपत्र का एक उदाहरण कहा जाता है । एक निर्णय फॉर्म को एक विधेय भी कहा जाता है , और एक उदाहरण बनाने वाली वस्तुएं इसके विषय हैं । हम लिखना एक जम्मू निर्णय दृढ़तापूर्वक कहा कि इस के लिए जम्मू की रखती है एक । जब निर्णय के विषय पर जोर देना महत्वपूर्ण नहीं है, (पाठ यहाँ से कट जाता है)


53

मैं हिंदली-मिलनर नियमों को कैसे समझ सकता हूँ?

हिंडले-मिलनर अनुक्रमिक पथरी (प्राकृतिक कटौती नहीं) के रूप में नियमों का एक सेट है जो दर्शाता है कि हम कार्यक्रम के निर्माण से (सबसे सामान्य) प्रकार के कार्यक्रमों को स्पष्ट प्रकार की घोषणाओं के बिना घटा सकते हैं।

प्रतीकों और संकेतन

सबसे पहले, आइए प्रतीकों की व्याख्या करें, और ऑपरेटर की पूर्वता पर चर्चा करें

  • ifier एक पहचानकर्ता (अनौपचारिक रूप से, एक चर नाम) है।
  • : का अर्थ है एक प्रकार का (अनौपचारिक रूप से, का एक उदाहरण, या "है-एक")।
  • ma (सिग्मा) एक अभिव्यक्ति है जो या तो एक चर या कार्य है।
  • इस प्रकार 𝜎: 𝜎 पढ़ा जाता है " 𝑥 is-a 𝜎 "
  • ∈ का अर्थ है "एक तत्व है"
  • ) (गामा) एक वातावरण है।
  • Sert (जोर का संकेत) का अर्थ है जोर लगाना ( या साबित होता है, लेकिन प्रासंगिक रूप से "जोर देता है" बेहतर पढ़ता है।)
  • ⊦ Γ 𝑥 : σ इस प्रकार पढ़ा जाता है "Γ कि 𝑥 का दावा है, है-एक σ "
  • 𝑒 प्रकार का एक वास्तविक उदाहरण (तत्व) है σ
  • τ (ताऊ) एक प्रकार है: या तो बुनियादी, चर ( α ), क्रियात्मक τ → τ ' , या उत्पाद τ × τ' (उत्पाद यहाँ नहीं किया जाता है)
  • 𝜏 → 𝜏 ' एक कार्यात्मक प्रकार है जहाँ 𝜏 और 𝜏' संभवतः भिन्न प्रकार के होते हैं।
  • 𝜆𝑥. is का अर्थ है 𝜆 (लैम्ब्डा) एक अनाम फ़ंक्शन है जो एक तर्क लेता है, 𝑒 , और एक अभिव्यक्ति देता है, 𝜆

  • जाने 𝑥 = 𝑒₀ में 𝑒₁ अभिव्यक्ति, में साधन 𝑒₁ , विकल्प 𝑒₀ जहाँ भी 𝑥 दिखाई देता है।

  • ⊑ का अर्थ है पूर्व तत्व बाद वाले तत्व का एक उपप्रकार (अनौपचारिक रूप से - उपवर्ग) है।

  • α एक प्रकार चर रहा है।
  • α.σ एक प्रकार, ∀ (सभी के लिए) तर्क चर, है α , लौटने σ अभिव्यक्ति
  • मुक्त () का अर्थ बाहरी संदर्भ में परिभाषित 𝚪 के मुक्त प्रकार चर का तत्व नहीं है। (बन्धे चर प्रतिस्थापन योग्य हैं।)

लाइन के ऊपर सब कुछ आधार है, नीचे सब कुछ निष्कर्ष है ( प्रति मार्टिन-लोफ )

मिसाल के तौर पर, मिसाल

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

  • 𝑥: σ ∈ Γ लिखा जा सकता है (𝑥: σ) ∈ Γ
  • ⊦ गामा 𝑥 : σ गामा लिखा जा सकता है ⊦ ( 𝑥 : σ )

  • Γ ⊦ जाने 𝑥 = 𝑒₀ में 𝑒₁ : τ समतुल्य रूप Γ है ⊦ (( चलो ( 𝑥 = 𝑒₀ ) में 𝑒₁ ): τ )

  • 𝜆𝑥 𝜏 𝚪.𝑒 : 𝜏 → is ' समकक्ष है ⊦ 𝜆𝑥 (( 𝜆𝑥.𝜏 ): ( 𝑒 → 𝜏' ))

फिर, बड़े बयानों और अन्य प्राथमिकताओं को अलग करने वाले स्थान इस तरह के पूर्व शर्त का संकेत देते हैं, और अंत में निष्कर्ष से आधार को अलग करने वाली क्षैतिज रेखा पूर्ववर्ती क्रम के अंत को सामने लाती है।

नियम

यहाँ निम्न प्रकार से नियमों की अंग्रेजी व्याख्या है, प्रत्येक के बाद एक ढीला प्रतिबंध और एक स्पष्टीकरण है।

परिवर्तनशील

VAR तर्क आरेख

दिया गया Given एक प्रकार का 𝜎 (सिग्मा) है,
Gam (गामा) का एक तत्व है, निष्कर्ष 𝑥 मुखर 𝚪 एक type है।

एक और तरीका रखो, 𝚪 में, हम जानते हैं way टाइप 𝚪 का है क्योंकि of, type में टाइप 𝚪 का है।

यह मूल रूप से एक तनातनी है। एक पहचानकर्ता नाम एक चर या एक फ़ंक्शन है।

समारोह आवेदन

एपीपी तर्क आरेख

दिया गया है Given asserts 𝑒₀ एक कार्यात्मक प्रकार है और ts asserts a एक e
निष्कर्ष है 𝚪 asserts फ़ंक्शन को लागू करने के लिए ts से 𝑒₁ एक प्रकार है type '

नियम को पुनर्स्थापित करने के लिए, हम जानते हैं कि फ़ंक्शन एप्लिकेशन रिटर्न because 'टाइप करता है क्योंकि फ़ंक्शन में the → 𝜏' टाइप होता है और टाइप argument का तर्क मिलता है।

इसका मतलब यह है कि अगर हम जानते हैं कि एक फ़ंक्शन एक प्रकार देता है, और हम इसे एक तर्क पर लागू करते हैं, तो परिणाम उस प्रकार का एक उदाहरण होगा जिसे हम जानते हैं कि यह रिटर्न देता है।

समारोह अमूर्तता

ABS तर्क आरेख

दिए गए Given और 𝚪 प्रकार के 𝚪 asserts a एक प्रकार है, e
𝚪 𝚪 𝜆 𝜆 एक अनाम फ़ंक्शन का दावा करता है, expression expression रिटर्निंग एक्सप्रेशन का, 𝑒 टाइप 𝑥 → 𝜏 ’का है।

फिर, जब हम एक फ़ंक्शन देखते हैं जो 𝑥 लेता है और एक अभिव्यक्ति देता है a, हम जानते हैं कि यह प्रकार 𝜏 → 𝑥 'है क्योंकि 𝜏 (𝜏) का दावा है कि 𝑒 𝜏' है।

अगर हम जानते हैं कि 𝑥 टाइप 𝑥 का है और इस प्रकार एक एक्सप्रेशन 𝜏 टाइप, ’का है, तो 𝑒 रिटर्निंग एक्सप्रेशन का एक फंक्शन 𝜏 → 𝜏’ टाइप का है।

परिवर्तनीय घोषणा करते हैं

तर्क तर्क आरेख

यह देखते हुए Γ 𝑒₀ का दावा है, प्रकार σ की, और Γ और 𝑥, प्रकार σ का दावा प्रकार τ की 𝑒₁
Γ निष्कर्ष निकालना दावा let𝑥 = 𝑒₀ inप्रकार τ की 𝑒₁

शिथिल, os bound से a (because) में बंधता है क्योंकि a एक 𝑥 है, और 𝑥 एक 𝑥 है जो कि ser का दावा करता है 𝑥 है।

इसका मतलब है कि अगर हमारे पास एक अभिव्यक्ति है an जो एक being है (एक चर या एक फ़ंक्शन है), और कुछ नाम, 𝜎, भी एक an, और एक प्रकार का अभिव्यक्ति an है, तो हम appears के लिए 𝑒₀ को स्थानापन्न कर सकते हैं जहाँ भी वह अंदर दिखाई देता है। की 𝑒₁

प्रारंभ

INST तर्क आरेख

दिए गए प्रकार के and and asserts 𝑒 'और' 𝑒 'का एक प्रकार
है e निष्कर्ष 𝑒 asserts ype का प्रकार है ts

एक अभिव्यक्ति, type मूल प्रकार का है, क्योंकि अभिव्यक्ति 𝑒 उपप्रकार, 'है, और 𝜎 the' का मूल प्रकार है।

यदि एक उदाहरण एक प्रकार का है जो किसी अन्य प्रकार का उप-प्रकार है, तो यह उस सुपर-प्रकार का भी उदाहरण है - अधिक सामान्य प्रकार।

सामान्यकरण

जनरल तर्क आरेख

यह देखते हुए Γ दावा 𝑒 एक σ है और α Γ से मुक्त चर का एक भाग नहीं होता,
निष्कर्ष निकालना Γ सभी तर्क भाव के लिए 𝑒, प्रकार का दावा है एक σ अभिव्यक्ति लौटने अल्फा

इसलिए सामान्य तौर पर, ables सभी लॉजिक वेरिएबल्स (returning) के लिए 𝜎 टाइप किया जाता है, क्योंकि हम जानते हैं कि 𝜎 𝜎 एक 𝑒 है और free एक फ्री वैरिएबल नहीं है।

इसका मतलब है कि हम सभी प्रकार के तर्कों को स्वीकार करने के लिए एक कार्यक्रम को सामान्य कर सकते हैं, जिसमें पहले से ही कोई गुंजाइश नहीं है (चर जो गैर-स्थानीय नहीं हैं)। ये बाध्य चर प्रतिस्थापन योग्य हैं।

यह सब एक साथ डालें

कुछ मान्यताओं (जैसे कोई मुक्त / अपरिभाषित चर, एक ज्ञात वातावरण) को देखते हुए, हम निम्न प्रकार जानते हैं:

  • हमारे कार्यक्रमों के परमाणु तत्व (चर),
  • फ़ंक्शन (फ़ंक्शन अनुप्रयोग) द्वारा दिए गए मान,
  • कार्यात्मक निर्माण (समारोह अमूर्त),
  • बाइंडिंग दें (वेरिएबल डिक्लेरेशन करें),
  • माता-पिता के उदाहरण (इंस्टेंटेशन), और
  • सभी अभिव्यक्तियाँ (सामान्यीकरण)।

निष्कर्ष

ये नियम संयुक्त प्रकार के एनोटेशन की आवश्यकता के बिना, हमें एक सामान्य प्रोग्राम के सबसे सामान्य प्रकार को साबित करने की अनुमति देते हैं।


1
इतना अच्छा रिकैप हारून!
भोरलो

48

अंकन प्राकृतिक कटौती से आता है ।

⊢ प्रतीक को टर्नस्टाइल कहा जाता है ।

6 नियम बहुत आसान हैं।

Var नियम बल्कि तुच्छ नियम है - यह कहता है कि यदि पहचानकर्ता के लिए प्रकार पहले से ही आपके प्रकार के वातावरण में मौजूद है, तो उस प्रकार का अनुमान लगाने के लिए जिस तरह से आप इसे पर्यावरण से लेते हैं।

Appनियम कहता है कि यदि आपके पास दो पहचानकर्ता हैं e0और e1उनके प्रकारों का पता लगा सकते हैं, तो आप आवेदन के प्रकार का अनुमान लगा सकते हैं e0 e1। नियम इस तरह से पढ़ता है यदि आप जानते हैं कि e0 :: t0 -> t1और e1 :: t0(वही t0!), तो आवेदन अच्छी तरह से टाइप किया गया है और टाइप है t1

Absऔर Letलैम्ब्डा-एब्स्ट्रैक्शन और लेट-इन के लिए अनुमान लगाने के प्रकार के नियम हैं।

Inst नियम कहता है कि आप एक प्रकार का कम सामान्य वाला विकल्प चुन सकते हैं।


4
यह अनुक्रमिक पथरी है, प्राकृतिक कटौती नहीं।
रोमन चेपलाका

12
@RomanCheplyaka अच्छी तरह से, अंकन समान है। विकिपीडिया लेख में दो तकनीकों की दिलचस्प तुलना है: en.wikipedia.org/wiki/Natural_deduction#Sequent_calculus । सीक्वेंस कैलकुलस का जन्म प्राकृतिक कटौती की विफलताओं के सीधे जवाब में हुआ था, इसलिए यदि प्रश्न "यह अंकन कहां से आया है", तो "प्राकृतिक कटौती" तकनीकी रूप से अधिक सही उत्तर है।
डैन बर्टन

2
@RomanCheplyaka एक अन्य विचार यह है कि सीक्वेंस कैलकुलस पूरी तरह से सिंटैक्टिक है (इसीलिए इसमें बहुत सारे संरचनात्मक नियम हैं) जबकि यह नोटेशन नहीं है। पहला नियम मानता है कि संदर्भ एक सेट है, जबकि सीक्वेंस कैलकुलस में यह एक सरल वाक्य रचना है।
nponeccop

@Cheplyaka वास्तव में, नहीं, यह कुछ ऐसा है जो "अनुक्रम" जैसा दिखता है, लेकिन यह अनुक्रमिक पथरी नहीं है। हापर ने अपनी पाठ्य पुस्तक में इसे "उच्चतर आदेश निर्णय" के रूप में समझा। यह वास्तव में प्राकृतिक कटौती है।
फिलिप जेएफ

15

E: think के सोचने के दो तरीके हैं। एक है "अभिव्यक्ति ई में टाइप σ" है, दूसरा "अभिव्यक्ति ई और टाइप e का क्रमबद्ध युग्म है"।

अभिव्यक्ति के प्रकारों के प्रकार के रूप में लागू किए गए भावों के प्रकारों के बारे में ज्ञान के रूप में View देखें: e: Γ।

टर्नस्टाइल that का अर्थ है कि बाईं ओर के ज्ञान से, हम यह काट सकते हैं कि दाईं ओर क्या है।

पहला नियम [वार] इस प्रकार पढ़ा जा सकता है:
यदि हमारे ज्ञान में σ जोड़ी ई: [शामिल है, तो हम type से कटौती कर सकते हैं कि ई में टाइप] है।

दूसरा नियम [ऐप] पढ़ा जा सकता है:
यदि हम ded से यह घटा सकते हैं कि e_0 का प्रकार τ → we 'है, और हम Γ से यह घटा सकते हैं कि e_1 का प्रकार τ है, तो हम Γ से e_0 e_1 में कटौती कर सकते हैं: टाइप करें ''।

Γ: {e:।} के बजाय common, e: Γ लिखना आम है।

तीसरा नियम [Abs] इस प्रकार पढ़ा जा सकता है:
यदि हम x से विस्तारित with: [घटा सकते हैं कि e में टाइप we है, तो हम Γ से यह घटा सकते हैं कि λx.e का प्रकार τ → τ 'है।

चौथे नियम [Let] को एक अभ्यास के रूप में छोड़ दिया गया है। :-)

पाँचवाँ नियम [Inst] पढ़ा जा सकता है:
यदि हम ded से यह घटा सकते हैं कि e में टाइप σ 'है, और subt' σ का उप-प्रकार है, तो हम Γ से यह घटा सकते हैं कि e में टाइप] है।

छठा और अंतिम नियम [Gen] पढ़ा जा सकता है:
यदि हम ded से यह घटा सकते हैं कि e में टाइप σ है, और α Γ में से किसी भी प्रकार में एक फ्री टाइप वेरिएबल नहीं है, तो हम Γ से टाइप कर सकते हैं। ∀α σ।

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