आश्रित प्रकार के सिद्धांत और 'मनमाने' प्रकार के कार्य
इस सवाल का मेरा पहला जवाब अवधारणाओं पर अधिक था और विवरणों पर कम और उप-भाग पर प्रतिबिंबित, 'क्या चल रहा है'; यह उत्तर एक ही होगा लेकिन उपवर्ग पर केंद्रित होगा, 'क्या हम मनमाने प्रकार के कार्य कर सकते हैं?'।
योग और उत्पाद के बीजीय संचालन के लिए एक विस्तार तथाकथित 'बड़े ऑपरेटर' हैं, जो एक अनुक्रम के योग और उत्पाद का प्रतिनिधित्व करते हैं (या अधिक सामान्यतः, एक डोमेन पर एक फ़ंक्शन का योग और उत्पाद) आमतौर पर लिखा Σ
और Π
क्रमशः। सिग्मा नोटेशन देखें ।
तो योग है
a₀ + a₁X + a₂X² + ...
लिखा जा सकता है
Σ[i ∈ ℕ]aᵢXⁱ
a
उदाहरण के लिए वास्तविक संख्याओं का कुछ क्रम कहां है। उत्पाद के Π
बजाय के साथ इसी तरह का प्रतिनिधित्व किया जाएगा Σ
।
जब आप दूर से देखते हैं, तो इस तरह की अभिव्यक्ति 'मनमाने' कार्य में बहुत कुछ दिखती है X
; हम पाठ्यक्रम से अभिव्यंजक श्रृंखला और उनके संबंधित विश्लेषणात्मक कार्यों तक सीमित हैं। क्या यह एक प्रकार के सिद्धांत में प्रतिनिधित्व के लिए एक उम्मीदवार है? निश्चित रूप से!
इन अभिव्यक्तियों के प्रकारों का वर्ग, जो इन अभिव्यक्तियों का तत्काल प्रतिनिधित्व करता है, 'आश्रित' प्रकार के सिद्धांतों का वर्ग है: आश्रित प्रकारों के साथ सिद्धांत। स्वाभाविक रूप से हमारे पास शब्दों पर निर्भर है, और प्रकार के कार्यों के साथ हास्केल जैसी भाषाओं में और प्रकारों के आधार पर मात्रा का ठहराव, शब्द और प्रकार। एक निर्भर सेटिंग में, हमारे पास शर्तों के आधार पर अतिरिक्त प्रकार होते हैं। हास्केल एक भरोसेमंद टाइप की गई भाषा नहीं है, हालाँकि निर्भर प्रकारों की कई विशेषताओं का अनुकरण किया जा सकता है को भाषा को थोड़ा यातना देकर जोड़ा ।
करी-हावर्ड और आश्रित प्रकार
'करी-हावर्ड आइसोमॉर्फिज्म' ने जीवन को एक अवलोकन के रूप में शुरू किया कि बस टाइप किए गए लैम्ब्डा कैलकुलस के नियम और प्रकार-जजिंग नियम बिल्कुल प्राकृतिक कटौती के अनुरूप हैं (जैसा कि जेंटजेन द्वारा तैयार किया गया) अंतर्ज्ञान प्रस्ताव तर्क पर लागू होता है, प्रकारों के प्रस्तावों की जगह लेने के साथ। , और दोनों की स्वतंत्र रूप से खोज / खोज होने के बावजूद प्रमाणों की जगह लेने की शर्तें। तब से, यह प्रकार सिद्धांतकारों के लिए प्रेरणा का एक बड़ा स्रोत रहा है। विचार करने के लिए सबसे स्पष्ट चीजों में से एक है कि क्या और कैसे, प्रस्तावक तर्क के लिए यह पत्राचार भविष्यवाणी या उच्चतर आदेश लॉगिक्स के लिए बढ़ाया जा सकता है। आश्रित प्रकार के सिद्धांत आरंभ में अन्वेषण के इस आय से उत्पन्न हुए।
बस टाइप किए गए लैम्ब्डा कैलकुलस के लिए करी-हावर्ड आइसोमोर्फिज्म के लिए एक परिचय के लिए, यहां देखें । एक उदाहरण के रूप में, अगर हम साबित करना चाहते हैं तो हमें साबित A ∧ B
करना होगा A
और साबित करना होगा B
; एक संयुक्त प्रमाण केवल प्रमाणों की एक जोड़ी है: प्रत्येक संयोजन के लिए एक।
प्राकृतिक कटौती में:
Γ ⊢ A Γ ⊢ B
Γ ⊢ A ∧ B
और बस टाइप किए गए लैम्ब्डा कैलकुलस में:
Γ ⊢ a : A Γ ⊢ b : B
Γ ⊢ (a, b) : A × B
इसी तरह के पत्राचार मौजूद हैं ∨
और योग प्रकार, →
और फ़ंक्शन प्रकार, और विभिन्न उन्मूलन नियम।
एक अप्राप्य (सहज रूप से गलत) प्रस्ताव एक निर्जन प्रकार से मेल खाता है।
मन में तार्किक प्रस्ताव के रूप में प्रकारों की सादृश्यता के साथ, हम यह विचार करना शुरू कर सकते हैं कि मॉडल किस प्रकार की दुनिया में भविष्यवाणी करता है। ऐसे कई तरीके हैं जिनसे इसे औपचारिक रूप दिया गया है ( इस परिचय को देखें एक व्यापक रूप से उपयोग किए जाने वाले मानक के लिए मार्टिन-लोफ के अंतर्ज्ञानवादी प्रकार के सिद्धांत के लिए को ) लेकिन अमूर्त दृष्टिकोण आमतौर पर यह देखता है कि एक विधेय मुक्त वैकल्पिक चर के साथ एक प्रस्ताव की तरह है, या, वैकल्पिक रूप से एक समारोह प्रस्तावों की शर्तें। यदि हम प्रकार के भावों को शब्दों को रखने की अनुमति देते हैं, तो लैम्ब्डा कैलकुलस शैली में एक उपचार तुरंत एक संभावना के रूप में प्रस्तुत करता है!
केवल रचनात्मक प्रमाणों को ध्यान में रखते हुए, क्या प्रमाण बनता है ∀x ∈ X.P(x)
? हम इसे x
अपने प्रस्तावित प्रस्तावों ( P(x)
) के प्रमाणों के रूप में लेते हुए, प्रमाण समारोह के रूप में सोच सकते हैं । तो प्रकार के सदस्य (प्रमाण) (प्रस्ताव) ∀x : X.P(x)
'आश्रित कार्य' होते हैं, जो प्रत्येक x
के X
लिए एक प्रकार का शब्द देते हैं P(x)
।
किस बारे में ∃x ∈ X.P(x)
? हम के किसी भी सदस्य की जरूरत है X
, x
एक साथ का कोई प्रमाण P(x)
। तो सदस्यों का प्रकार (प्रस्ताव) के (सबूत) ∃x : X.P(x)
एक प्रतिष्ठित अवधि: 'निर्भर जोड़े' कर रहे हैं x
में X
, एक साथ प्रकार के एक पद के साथ P(x)
।
संकेतन: मैं उपयोग करूँगा
∀x ∈ X...
वर्ग के सदस्यों के बारे में वास्तविक विवरण के लिए X
, और
∀x : X...
प्रकार के लिए सार्वभौमिक परिमाण के अनुरूप प्रकार के भाव X
। इसी तरह के लिए ∃
।
संयुक्त विचार: उत्पाद और रकम
साथ ही प्रस्ताव के साथ प्रकारों के करी-हावर्ड पत्राचार, हमारे पास संख्याओं और कार्यों के साथ बीजीय प्रकार के दहनशील पत्राचार हैं, जो इस प्रश्न का मुख्य बिंदु है। खुशी से, यह ऊपर उल्लिखित निर्भर प्रकारों तक बढ़ाया जा सकता है!
मैं मापांक अंकन का उपयोग करूंगा
|A|
प्रकार के 'आकार' का प्रतिनिधित्व A
करने के लिए, प्रकार और संख्याओं के बीच प्रश्न में उल्लिखित पत्राचार को स्पष्ट करने के लिए। ध्यान दें कि यह सिद्धांत के बाहर एक अवधारणा है; मैं यह दावा नहीं करता कि भाषा के भीतर ऐसे किसी ऑपरेटर की जरूरत है।
आइए हम प्रकार के संभावित (पूरी तरह से कम, विहित) सदस्यों की गणना करें
∀x : X.P(x)
जो कि प्रकार के प्रकारों की शर्तों x
को लेते हुए आश्रित कार्यों X
का प्रकार है P(x)
। इस तरह के प्रत्येक फंक्शन में हर टर्म के लिए एक आउटपुट होना चाहिए X
, और यह आउटपुट एक विशेष प्रकार का होना चाहिए। प्रत्येक x
के लिए X
, तब, यह |P(x)|
आउटपुट के 'विकल्प' देता है ।
पंचलाइन है
|∀x : X.P(x)| = Π[x : X]|P(x)|
बेशक जो समझ में नहीं आता X
है IO ()
, लेकिन बीजीय प्रकार पर लागू होता है।
इसी प्रकार, एक शब्द का प्रकार
∃x : X.P(x)
जोड़े के प्रकार है (x, p)
के साथ p : P(x)
है, इसलिए दिए गए किसी भी x
में X
हम के किसी भी सदस्य के साथ एक उपयुक्त जोड़ी का निर्माण कर सकते P(x)
, दे रही है |P(x)|
'विकल्प'।
अत,
|∃x : X.P(x)| = Σ[x : X]|P(x)|
उसी के साथ।
यह सही ठहराते प्रतीकों का उपयोग सिद्धांतों में निर्भर प्रकार के लिए आम अंकन Π
और Σ
, और वास्तव में कई सिद्धांतों उपर्युक्त पत्राचार के कारण, 'है' और 'योग' और 'उत्पाद' 'सभी के लिए' और के बीच के बीच के अंतर को धुंधला।
हम करीब हो रहे हैं!
वैक्टर: निर्भर ट्यूपल्स का प्रतिनिधित्व करना
क्या अब हम जैसे संख्यात्मक भावों को एनकोड कर सकते हैं
Σ[n ∈ ℕ]Xⁿ
प्रकार के रूप में?
काफी नहीं। यद्यपि हम अनौपचारिक रूप Xⁿ
से हास्केल जैसे भावों के अर्थ पर विचार कर सकते हैं , जहां X
एक प्रकार और n
एक प्राकृतिक संख्या है, यह संकेतन का दुरुपयोग है; यह एक प्रकार की अभिव्यक्ति है जिसमें एक संख्या है: विशिष्ट रूप से मान्य अभिव्यक्ति नहीं है।
दूसरी ओर, चित्र में आश्रित प्रकारों के साथ, संख्याओं वाले प्रकार ठीक बिंदु है; वास्तव में, निर्भर ट्यूपल्स या 'वैक्टर' इस बात का एक बहुत ही सामान्य रूप से उद्धृत उदाहरण हैं कि निर्भर प्रकार सूची पहुंच जैसे संचालन के लिए व्यावहारिक प्रकार-स्तरीय सुरक्षा कैसे प्रदान कर सकते हैं । एक वेक्टर केवल एक सूची है जिसमें इसकी लंबाई के बारे में टाइप-स्तर की जानकारी है: ठीक उसी प्रकार जैसे हम अभिव्यक्ति के प्रकार के लिए हैं Xⁿ
।
इस उत्तर की अवधि के लिए, चलो
Vec X n
लंबाई के प्रकार हो -Type मूल्यों के n
वैक्टर X
।
तकनीकी रूप से n
यहां एक वास्तविक प्राकृतिक संख्या के बजाय एक प्राकृतिक संख्या की प्रणाली में एक प्रतिनिधित्व है। हम Nat
पीनो शैली में प्राकृतिक संख्या ( ) को या तो शून्य ( 0
) या S
किसी अन्य प्राकृतिक संख्या के उत्तराधिकारी ( ) के रूप में दर्शा सकते हैं , और n ∈ ℕ
मैं ˻n˼
उस शब्द का अर्थ लिखने के लिए Nat
जिसमें प्रतिनिधित्व करता है n
। उदाहरण के लिए, ˻3˼
है S (S (S 0))
।
तो हमारे पास हैं
|Vec X ˻n˼| = |X|ⁿ
किसी के लिए n ∈ ℕ
।
नेट प्रकार: प्रकार के लिए to शब्दों को बढ़ावा देना
अब हम जैसे भावों को सांकेतिक शब्दों में बदल सकते हैं
Σ[n ∈ ℕ]Xⁿ
प्रकार के। यह विशेष अभिव्यक्ति एक प्रकार को जन्म देती है जो निश्चित रूप से इस प्रकार की सूचियों के प्रकार के समरूप है X
, जैसा कि प्रश्न में पहचाना गया है। (केवल इतना ही नहीं, बल्कि एक श्रेणी-सिद्धांत के दृष्टिकोण से, प्रकार का कार्य - जो कि एक फ़नकार है - X
उपरोक्त प्रकार पर ले जाना स्वाभाविक रूप से लिस्ट फ़नकार के लिए आइसोमोर्फिक है।)
'मनमाना' कार्यों के लिए पहेली का एक अंतिम टुकड़ा कैसे सांकेतिक शब्दों में बदलना है, के लिए
f : ℕ → ℕ
जैसे भाव
Σ[n ∈ ℕ]f(n)Xⁿ
ताकि हम एक बिजली श्रृंखला के लिए मनमाने ढंग से गुणांक लागू कर सकें।
हम पहले से ही संख्याओं के साथ बीजीय प्रकारों के पत्राचार को समझते हैं, जिससे हम प्रकारों से संख्याओं तक मैप कर सकते हैं और कार्यों को संख्यात्मक कार्यों के लिए टाइप कर सकते हैं। हम दूसरे रास्ते भी जा सकते हैं! - एक प्राकृतिक संख्या लेते हुए, स्पष्ट रूप से एक निश्चित बीजीय प्रकार होता है, जिसमें कई शब्द सदस्य होते हैं, हमारे पास निर्भर प्रकार होते हैं या नहीं। हम इसे आसानी से इंडक्शन के प्रकार सिद्धांत के बाहर साबित कर सकते हैं । सिस्टम के अंदर हमें प्राकृतिक नंबरों से लेकर प्रकारों तक के नक्शे की जरूरत है ।
एक मनभावन अहसास यह है कि, एक बार जब हमारे पास आश्रित प्रकार होते हैं, तो पुनरावृत्ति द्वारा निर्माण और निर्माण द्वारा प्रमाण समान रूप से समान हो जाते हैं - वास्तव में वे कई सिद्धांतों में एक ही चीज हैं। चूँकि हम प्रेरण द्वारा सिद्ध कर सकते हैं कि प्रकार मौजूद हैं जो हमारी आवश्यकताओं को पूरा करते हैं, तो क्या हमें उनका निर्माण करने में सक्षम नहीं होना चाहिए?
टर्म स्तर पर प्रकारों का प्रतिनिधित्व करने के कई तरीके हैं। मैं यहाँ एक काल्पनिक हास्केलिश संकेतन का उपयोग करूँगा *
, जो कि प्रकारों के ब्रह्मांड के लिए है, खुद को आमतौर पर एक निर्भर सेटिंग में एक प्रकार माना जाता है। 1
इसी तरह, ' ℕ
-Limination' को नोट करने के कम से कम उतने ही तरीके हैं, जितने निर्भर प्रकार के सिद्धांत हैं। मैं एक हास्केलिश पैटर्न-मिलान संकेतन का उपयोग करूंगा।
हम एक मानचित्रण की जरूरत है, α
से Nat
करने के लिए *
, संपत्ति के साथ
∀n ∈ ℕ.|α ˻n˼| = n.
निम्नलिखित स्यूडोडेफिनिशन पर्याप्त है।
data Zero -- empty type
data Successor a = Z | Suc a -- Successor ≅ Maybe
α : Nat -> *
α 0 = Zero
α (S n) = Successor (α n)
तो हम देखते हैं कि α
उत्तराधिकारी के व्यवहार को दर्पण करता है S
, जिससे यह एक प्रकार का समरूपता बन जाता है। Successor
एक प्रकार्य फ़ंक्शन है जो एक प्रकार के सदस्यों की संख्या में 'एक जोड़ता है'; वह है, |Successor a| = 1 + |a|
किसी भी a
परिभाषित आकार के साथ।
उदाहरण के लिए α ˻4˼
(जो है α (S (S (S (S 0))))
), है
Successor (Successor (Successor (Successor Zero)))
और इस प्रकार की शर्तें हैं
Z
Suc Z
Suc (Suc Z)
Suc (Suc (Suc Z))
हमें बिल्कुल चार तत्व दे रहा है |α ˻4˼| = 4
:।
इसी तरह, किसी के लिए भी n ∈ ℕ
, हमारे पास है
|α ˻n˼| = n
जैसी ज़रूरत।
- कई सिद्धांतों की आवश्यकता है कि सदस्य
*
केवल प्रकार के प्रतिनिधि हैं, और एक ऑपरेशन *
को उनके संबंधित प्रकारों के प्रकार से स्पष्ट मानचित्रण के रूप में प्रदान किया जाता है । अन्य सिद्धांत शाब्दिक प्रकारों को स्वयं को अवधि-स्तरीय निकाय होने की अनुमति देते हैं।
'मनमाना' कार्य?
अब हमारे पास एक प्रकार के रूप में पूरी तरह से सामान्य बिजली श्रृंखला को व्यक्त करने का उपकरण है!
श्रृंखला
Σ[n ∈ ℕ]f(n)Xⁿ
प्रकार बन जाता है
∃n : Nat.α (˻f˼ n) × (Vec X n)
˻f˼ : Nat → Nat
समारोह की भाषा के भीतर कुछ उपयुक्त प्रतिनिधित्व कहाँ है f
। हम इसे इस प्रकार देख सकते हैं।
|∃n : Nat.α (˻f˼ n) × (Vec X n)|
= Σ[n : Nat]|α (˻f˼ n) × (Vec X n)| (property of ∃ types)
= Σ[n ∈ ℕ]|α (˻f˼ ˻n˼) × (Vec X ˻n˼)| (switching Nat for ℕ)
= Σ[n ∈ ℕ]|α ˻f(n)˼ × (Vec X ˻n˼)| (applying ˻f˼ to ˻n˼)
= Σ[n ∈ ℕ]|α ˻f(n)˼||Vec X ˻n˼| (splitting product)
= Σ[n ∈ ℕ]f(n)|X|ⁿ (properties of α and Vec)
बस यह 'मनमानी' कैसे है? हम केवल इस विधि द्वारा पूर्णांक गुणांक तक ही सीमित नहीं हैं, बल्कि प्राकृतिक संख्या तक सीमित हैं। इसके अलावा, f
कुछ भी हो सकता है, निर्भर प्रकारों के साथ एक ट्यूरिंग पूरी भाषा को देखते हुए , हम प्राकृतिक संख्या गुणांक के साथ किसी भी विश्लेषणात्मक कार्य का प्रतिनिधित्व कर सकते हैं।
मैंने इस के साथ बातचीत की जांच नहीं की है, उदाहरण के लिए, List X ≅ 1/(1 - X)
इस संदर्भ में इस तरह के नकारात्मक और गैर-पूर्णांक 'प्रकार' के बारे में क्या संभव हो सकता है।
उम्मीद है कि यह उत्तर किसी तरह से यह पता लगाने के लिए जाता है कि हम कितने प्रकार के मनमाने कार्यों के साथ जा सकते हैं।