आश्रित प्रकार

From alpha
Jump to navigation Jump to search

कंप्यूटर विज्ञान और तर्क में, आश्रित प्रकार एक प्रकार है जिसकी परिभाषा मूल्य पर निर्भर करती है। यह प्रकार सिद्धांत और प्रकार प्रणाली की एक अतिव्यापी विशेषता है। अंतर्ज्ञानवादी प्रकार के सिद्धांत में, तर्क के सामान्यीकृत क्वांटिफायर को सांकेतिक शब्दों में बदलने के लिए आश्रित प्रकारों का उपयोग किया जाता है और वहां मौजूद होता है। एग्डा (प्रमेय प्रोवर), एटीएस (प्रोग्रामिंग भाषा), Coq, F* (प्रोग्रामिंग लैंग्वेज) | F*, एपिग्राम (प्रोग्रामिंग लैंग्वेज), और इदरीस (प्रोग्रामिंग लैंग्वेज) जैसी कार्यात्मक प्रोग्रामिंग भाषाएं में, आश्रित प्रकार सक्षम करके बग को कम करने में मदद करते हैं। प्रोग्रामर उन प्रकारों को असाइन करने के लिए जो संभावित कार्यान्वयन के सेट को और प्रतिबंधित करते हैं।

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

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


इतिहास

1934 में, हास्केल करी ने देखा कि टाइप किए गए लैम्ब्डा कैलकुलस में उपयोग किए जाने वाले प्रकार, और इसके संयोजन तर्क प्रतिरूप में, प्रस्तावक कलन में स्वयंसिद्धों के समान पैटर्न का पालन किया। आगे जाकर, तर्क में प्रत्येक प्रमाण के लिए, प्रोग्रामिंग भाषा में एक मिलान कार्य (शब्द) था। करी के उदाहरणों में से एक केवल टाइप किए गए लैम्ब्डा कैलकुस और अंतर्ज्ञानवादी तर्क के बीच पत्राचार था।Cite error: Closing </ref> missing for <ref> tag[full citation needed] अधिक ठोस उदाहरण के लिए, लेना A फिर से 0 से 255 तक अहस्ताक्षरित पूर्णांकों के परिवार के बराबर होना, और B(a) फिर से बराबर होना Xa 256 और मनमानी के लिए Xa, तब योग में जाता है X0 + X1 + X2 + ... + X253 + X254 + X255 उन्हीं कारणों से जो आश्रित फलन के कोडोमेन का हुआ।

अस्तित्वगत परिमाणीकरण के रूप में उदाहरण

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

उदाहरण के लिए, से कम या बराबर है यदि और केवल यदि कोई अन्य प्राकृतिक संख्या मौजूद है ऐसा है कि m + k = n. तर्क में, यह कथन अस्तित्वगत परिमाणीकरण द्वारा संहिताबद्ध है:

यह प्रस्ताव निर्भर जोड़ी प्रकार से मेल खाता है:

अर्थात् इस कथन का प्रमाण है कि m से कम या बराबर है n एक जोड़ी है जिसमें एक गैर-ऋणात्मक संख्या दोनों होती है k, जो बीच का अंतर है m और n, और समानता का प्रमाण m + k = n.

लैम्ब्डा घन के सिस्टम

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

प्रथम क्रम आश्रित प्रकार सिद्धांत

प्रणाली तार्किक ढांचे एलएफ (तार्किक ढांचे) के अनुरूप शुद्ध प्रथम क्रम निर्भर प्रकार, केवल टाइप किए गए लैम्ब्डा कैलकुस के फ़ंक्शन स्पेस प्रकार को आश्रित उत्पाद प्रकार के सामान्यीकरण द्वारा प्राप्त किया जाता है।

दूसरे क्रम पर निर्भर प्रकार का सिद्धांत

प्रणाली दूसरे क्रम के आश्रित प्रकार से प्राप्त किया जाता है टाइप कंस्ट्रक्टर्स पर परिमाणीकरण की अनुमति देकर। इस सिद्धांत में निर्भर उत्पाद ऑपरेटर दोनों को शामिल करता है बस टाइप किए गए लैम्ब्डा कैलकुस के ऑपरेटर और सिस्टम एफ की बाइंडर।

उच्च क्रम निर्भर रूप से टाइप किए गए बहुरूपी लैम्ब्डा कैलकुलस

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

एक साथ प्रोग्रामिंग भाषा और तर्क

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

आश्रित प्रकारों के साथ भाषाओं की तुलना

Language Actively developed Paradigm[lower-alpha 1] Tactics Proof terms Termination checking Types can depend on[lower-alpha 2] Universes Proof irrelevance Program extraction Extraction erases irrelevant terms
Ada 2012 Yes[2] Imperative Yes[3] No ? Any term[lower-alpha 3] ? ? Ada ?
Agda Yes[4] Purely functional Few/limited[lower-alpha 4] Yes Yes (optional) Any term Yes (optional)[lower-alpha 5] Proof-irrelevant arguments[6] Proof-irrelevant propositions[7] Haskell, JavaScript Yes[6]
ATS Yes[8] Functional / imperative No[9] Yes Yes Static terms[10] ? Yes Yes Yes
Cayenne No Purely functional No Yes No Any term No No ? ?
Gallina
(Coq)
Yes[11] Purely functional Yes Yes Yes Any term Yes[lower-alpha 6] Yes[12] Haskell, Scheme and OCaml Yes
Dependent ML No[lower-alpha 7] ? ? Yes ? Natural numbers ? ? ? ?
F* Yes[13] Functional and imperative Yes[14] Yes Yes (optional) Any pure term Yes Yes OCaml, F#, and C Yes
Guru No[15] Purely functional[16] hypjoin[17] Yes[16] Yes Any term No Yes Carraway Yes
Idris Yes[18] Purely functional[19] Yes[20] Yes Yes (optional) Any term Yes No Yes Yes, aggressively[20]
Lean Yes Purely functional Yes Yes Yes Any term Yes Yes Yes Yes
Matita Yes[21] Purely functional Yes Yes Yes Any term Yes Yes OCaml Yes
NuPRL Yes Purely functional Yes Yes Yes Any term Yes ? Yes ?
PVS Yes ? Yes ? ? ? ? ? ? ?
Sage No[lower-alpha 8] Purely functional No No No ? No ? ? ?
Twelf Yes Logic programming ? Yes Yes (optional) Any (LF) term No No ? ?
  1. This refers to the core language, not to any tactic (theorem proving procedure) or code generation sublanguage.
  2. Subject to semantic constraints, such as universe constraints
  3. Static_Predicate for restricted terms, Dynamic_Predicate for Assert-like checking of any term in type cast
  4. Ring solver[5]
  5. Optional universes, optional universe polymorphism, and optional explicitly specified universes
  6. Universes, automatically inferred universe constraints (not the same as Agda's universe polymorphism) and optional explicit printing of universe constraints
  7. Has been superseded by ATS
  8. Last Sage paper and last code snapshot are both dated 2006


यह भी देखें

  • टाइप किया हुआ लैम्ब्डा कैलकुलस
  • अंतर्ज्ञानवादी प्रकार सिद्धांत

संदर्भ

  1. Hofmann, Martin (1995), Extensional concepts in intensional type theory (PDF)
  2. "GNAT Community download page".
  3. "§3.2.4 Subtype Predicates". Ada Reference Manual (2012 ed.).
  4. "Agda download page".
  5. "Agda Ring Solver".
  6. 6.0 6.1 "Announce: Agda 2.2.8". Archived from the original on 2011-07-18. Retrieved 2010-09-28.
  7. "Agda 2.6.0 changelog".
  8. "ATS2 downloads".
  9. "email from ATS inventor Hongwei Xi".
  10. Xi, Hongwei (March 2017). "Applied Type System: An Approach to Practical Programming with Theorem-Proving" (PDF). arXiv:1703.08683.
  11. "Coq CHANGES in Subversion repository".
  12. "Introduction of SProp in Coq 8.10".
  13. "F* changes on GitHub". GitHub.
  14. "F* v0.9.5.0 release notes on GitHub". GitHub.
  15. "Guru SVN".
  16. 16.0 16.1 Aaron Stump (6 April 2009). "Verified Programming in Guru" (PDF). Archived from the original (PDF) on 29 December 2009. Retrieved 28 September 2010.
  17. Petcher, Adam (May 2008). Deciding Joinability Modulo Ground Equations in Operational Type Theory (PDF) (MSc). Washington University. Retrieved 14 October 2010.
  18. "Idris git repository". GitHub. 17 May 2022.
  19. Brady, Edwin. "Idris, a language with dependent types — extended abstract" (PDF). CiteSeerX 10.1.1.150.9442.
  20. 20.0 20.1 Brady, Edwin. "How does Idris compare to other dependently-typed programming languages?".
  21. "Matita SVN". Archived from the original on 2006-05-08. Retrieved 2010-09-29.


आगे की पढाई


इस पेज में लापता आंतरिक लिंक की सूची

  • अंतर्ज्ञानवादी प्रकार सिद्धांत
  • इदरीस (प्रोग्रामिंग भाषा)
  • एपिग्राम (प्रोग्रामिंग भाषा)
  • एफ * (प्रोग्रामिंग भाषा)
  • Agda (प्रमेय प्रमाण)
  • विस्तार प्रकार सिद्धांत
  • टाइप लैम्ब्डा कैलकुस
  • बस लैम्ब्डा कैलकुलस टाइप किया
  • समारोह प्रकार
  • कार्तीय गुणन
  • वास्तविक संख्याये
  • दोहरी (श्रेणी सिद्धांत)
  • उत्पाद का प्रकार
  • शुद्ध प्रकार प्रणाली
  • एलएफ (तार्किक ढांचा)
  • आगमनात्मक निर्माण की गणना
  • कार्यक्रम सत्यापन

बाहरी कड़ियाँ

श्रेणी:गणित की बुनियाद श्रेणी:प्ररूप सिद्धांत श्रेणी:टाइप सिस्टम