मैं हिंदली-मिलनर नियमों को कैसे समझ सकता हूँ?
हिंडले-मिलनर अनुक्रमिक पथरी (प्राकृतिक कटौती नहीं) के रूप में नियमों का एक सेट है जो दर्शाता है कि हम कार्यक्रम के निर्माण से (सबसे सामान्य) प्रकार के कार्यक्रमों को स्पष्ट प्रकार की घोषणाओं के बिना घटा सकते हैं।
प्रतीकों और संकेतन
सबसे पहले, आइए प्रतीकों की व्याख्या करें, और ऑपरेटर की पूर्वता पर चर्चा करें
- ifier एक पहचानकर्ता (अनौपचारिक रूप से, एक चर नाम) है।
- : का अर्थ है एक प्रकार का (अनौपचारिक रूप से, का एक उदाहरण, या "है-एक")।
- ma (सिग्मा) एक अभिव्यक्ति है जो या तो एक चर या कार्य है।
- इस प्रकार 𝜎: 𝜎 पढ़ा जाता है " 𝑥 is-a 𝜎 "
- ∈ का अर्थ है "एक तत्व है"
- ) (गामा) एक वातावरण है।
- Sert (जोर का संकेत) का अर्थ है जोर लगाना ( या साबित होता है, लेकिन प्रासंगिक रूप से "जोर देता है" बेहतर पढ़ता है।)
- ⊦ Γ 𝑥 : σ इस प्रकार पढ़ा जाता है "Γ कि 𝑥 का दावा है, है-एक σ "
- 𝑒 प्रकार का एक वास्तविक उदाहरण (तत्व) है σ ।
- τ (ताऊ) एक प्रकार है: या तो बुनियादी, चर ( α ), क्रियात्मक τ → τ ' , या उत्पाद τ × τ' (उत्पाद यहाँ नहीं किया जाता है)
- 𝜏 → 𝜏 ' एक कार्यात्मक प्रकार है जहाँ 𝜏 और 𝜏' संभवतः भिन्न प्रकार के होते हैं।
𝜆𝑥. is का अर्थ है 𝜆 (लैम्ब्डा) एक अनाम फ़ंक्शन है जो एक तर्क लेता है, 𝑒 , और एक अभिव्यक्ति देता है, 𝜆 ।
जाने 𝑥 = 𝑒₀ में 𝑒₁ अभिव्यक्ति, में साधन 𝑒₁ , विकल्प 𝑒₀ जहाँ भी 𝑥 दिखाई देता है।
⊑ का अर्थ है पूर्व तत्व बाद वाले तत्व का एक उपप्रकार (अनौपचारिक रूप से - उपवर्ग) है।
- α एक प्रकार चर रहा है।
- ∀ α.σ एक प्रकार, ∀ (सभी के लिए) तर्क चर, है α , लौटने σ अभिव्यक्ति
- ∉ मुक्त ( ∉ ) का अर्थ बाहरी संदर्भ में परिभाषित 𝚪 के मुक्त प्रकार चर का तत्व नहीं है। (बन्धे चर प्रतिस्थापन योग्य हैं।)
लाइन के ऊपर सब कुछ आधार है, नीचे सब कुछ निष्कर्ष है ( प्रति मार्टिन-लोफ )
मिसाल के तौर पर, मिसाल
मैंने नियमों में से कुछ अधिक जटिल उदाहरण लिए हैं और निरर्थक कोष्ठक सम्मिलित किए हैं जो पूर्वता दिखाते हैं:
- 𝑥: σ ∈ Γ लिखा जा सकता है (𝑥: σ) ∈ Γ
⊦ गामा 𝑥 : σ गामा लिखा जा सकता है ⊦ ( 𝑥 : σ )
Γ ⊦ जाने 𝑥 = 𝑒₀ में 𝑒₁ : τ
समतुल्य रूप Γ है ⊦ (( चलो ( 𝑥 = 𝑒₀ ) में 𝑒₁ ): τ )
𝜆𝑥 𝜏 𝚪.𝑒 : 𝜏 → is ' समकक्ष है ⊦ 𝜆𝑥 (( 𝜆𝑥.𝜏 ): ( 𝑒 → 𝜏' ))
फिर, बड़े बयानों और अन्य प्राथमिकताओं को अलग करने वाले स्थान इस तरह के पूर्व शर्त का संकेत देते हैं, और अंत में निष्कर्ष से आधार को अलग करने वाली क्षैतिज रेखा पूर्ववर्ती क्रम के अंत को सामने लाती है।
नियम
यहाँ निम्न प्रकार से नियमों की अंग्रेजी व्याख्या है, प्रत्येक के बाद एक ढीला प्रतिबंध और एक स्पष्टीकरण है।
परिवर्तनशील
दिया गया Given एक प्रकार का 𝜎 (सिग्मा) है,
Gam (गामा) का एक तत्व है, निष्कर्ष 𝑥 मुखर 𝚪 एक type है।
एक और तरीका रखो, 𝚪 में, हम जानते हैं way टाइप 𝚪 का है क्योंकि of, type में टाइप 𝚪 का है।
यह मूल रूप से एक तनातनी है। एक पहचानकर्ता नाम एक चर या एक फ़ंक्शन है।
समारोह आवेदन
दिया गया है Given asserts 𝑒₀ एक कार्यात्मक प्रकार है और ts asserts a एक e
निष्कर्ष है 𝚪 asserts फ़ंक्शन को लागू करने के लिए ts से 𝑒₁ एक प्रकार है type '
नियम को पुनर्स्थापित करने के लिए, हम जानते हैं कि फ़ंक्शन एप्लिकेशन रिटर्न because 'टाइप करता है क्योंकि फ़ंक्शन में the → 𝜏' टाइप होता है और टाइप argument का तर्क मिलता है।
इसका मतलब यह है कि अगर हम जानते हैं कि एक फ़ंक्शन एक प्रकार देता है, और हम इसे एक तर्क पर लागू करते हैं, तो परिणाम उस प्रकार का एक उदाहरण होगा जिसे हम जानते हैं कि यह रिटर्न देता है।
समारोह अमूर्तता
दिए गए Given और 𝚪 प्रकार के 𝚪 asserts a एक प्रकार है, e
𝚪 𝚪 𝜆 𝜆 एक अनाम फ़ंक्शन का दावा करता है, expression expression रिटर्निंग एक्सप्रेशन का, 𝑒 टाइप 𝑥 → 𝜏 ’का है।
फिर, जब हम एक फ़ंक्शन देखते हैं जो 𝑥 लेता है और एक अभिव्यक्ति देता है a, हम जानते हैं कि यह प्रकार 𝜏 → 𝑥 'है क्योंकि 𝜏 (𝜏) का दावा है कि 𝑒 𝜏' है।
अगर हम जानते हैं कि 𝑥 टाइप 𝑥 का है और इस प्रकार एक एक्सप्रेशन 𝜏 टाइप, ’का है, तो 𝑒 रिटर्निंग एक्सप्रेशन का एक फंक्शन 𝜏 → 𝜏’ टाइप का है।
परिवर्तनीय घोषणा करते हैं
यह देखते हुए Γ 𝑒₀ का दावा है, प्रकार σ की, और Γ और 𝑥, प्रकार σ का दावा प्रकार τ की 𝑒₁
Γ निष्कर्ष निकालना दावा let
𝑥 = 𝑒₀ in
प्रकार τ की 𝑒₁
शिथिल, os bound से a (because) में बंधता है क्योंकि a एक 𝑥 है, और 𝑥 एक 𝑥 है जो कि ser का दावा करता है 𝑥 है।
इसका मतलब है कि अगर हमारे पास एक अभिव्यक्ति है an जो एक being है (एक चर या एक फ़ंक्शन है), और कुछ नाम, 𝜎, भी एक an, और एक प्रकार का अभिव्यक्ति an है, तो हम appears के लिए 𝑒₀ को स्थानापन्न कर सकते हैं जहाँ भी वह अंदर दिखाई देता है। की 𝑒₁
प्रारंभ
दिए गए प्रकार के and and asserts 𝑒 'और' 𝑒 'का एक प्रकार
है e निष्कर्ष 𝑒 asserts ype का प्रकार है ts
एक अभिव्यक्ति, type मूल प्रकार का है, क्योंकि अभिव्यक्ति 𝑒 उपप्रकार, 'है, और 𝜎 the' का मूल प्रकार है।
यदि एक उदाहरण एक प्रकार का है जो किसी अन्य प्रकार का उप-प्रकार है, तो यह उस सुपर-प्रकार का भी उदाहरण है - अधिक सामान्य प्रकार।
सामान्यकरण
यह देखते हुए Γ दावा 𝑒 एक σ है और α Γ से मुक्त चर का एक भाग नहीं होता,
निष्कर्ष निकालना Γ सभी तर्क भाव के लिए 𝑒, प्रकार का दावा है एक σ अभिव्यक्ति लौटने अल्फा
इसलिए सामान्य तौर पर, ables सभी लॉजिक वेरिएबल्स (returning) के लिए 𝜎 टाइप किया जाता है, क्योंकि हम जानते हैं कि 𝜎 𝜎 एक 𝑒 है और free एक फ्री वैरिएबल नहीं है।
इसका मतलब है कि हम सभी प्रकार के तर्कों को स्वीकार करने के लिए एक कार्यक्रम को सामान्य कर सकते हैं, जिसमें पहले से ही कोई गुंजाइश नहीं है (चर जो गैर-स्थानीय नहीं हैं)। ये बाध्य चर प्रतिस्थापन योग्य हैं।
यह सब एक साथ डालें
कुछ मान्यताओं (जैसे कोई मुक्त / अपरिभाषित चर, एक ज्ञात वातावरण) को देखते हुए, हम निम्न प्रकार जानते हैं:
- हमारे कार्यक्रमों के परमाणु तत्व (चर),
- फ़ंक्शन (फ़ंक्शन अनुप्रयोग) द्वारा दिए गए मान,
- कार्यात्मक निर्माण (समारोह अमूर्त),
- बाइंडिंग दें (वेरिएबल डिक्लेरेशन करें),
- माता-पिता के उदाहरण (इंस्टेंटेशन), और
- सभी अभिव्यक्तियाँ (सामान्यीकरण)।
निष्कर्ष
ये नियम संयुक्त प्रकार के एनोटेशन की आवश्यकता के बिना, हमें एक सामान्य प्रोग्राम के सबसे सामान्य प्रकार को साबित करने की अनुमति देते हैं।