आश्रित प्रकार
Type systems |
---|
General concepts |
Major categories |
|
Minor categories |
कंप्यूटर विज्ञान और तर्क में, आश्रित प्रकार एक प्रकार है जिसकी परिभाषा मूल्य पर निर्भर करती है। यह प्रकार सिद्धांत और प्रकार प्रणाली की एक अतिव्यापी विशेषता है। अंतर्ज्ञानवादी प्रकार के सिद्धांत में, तर्क के सामान्यीकृत क्वांटिफायर को सांकेतिक शब्दों में बदलने के लिए आश्रित प्रकारों का उपयोग किया जाता है और वहां मौजूद होता है। एग्डा (प्रमेय प्रोवर), एटीएस (प्रोग्रामिंग भाषा), 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. तर्क में, यह कथन अस्तित्वगत परिमाणीकरण द्वारा संहिताबद्ध है:
लैम्ब्डा घन के सिस्टम
हेंक बारेंड्रेगट ने लैम्ब्डा क्यूब को तीन अक्षों के साथ प्रकार प्रणालियों को वर्गीकृत करने के साधन के रूप में विकसित किया। परिणामी क्यूब-आकार के आरेख के आठ कोने एक प्रकार की प्रणाली के अनुरूप होते हैं, कम से कम अभिव्यंजक कोने में केवल टाइप किए गए लैम्ब्डा कैलकुलस और सबसे अभिव्यंजक में निर्माण की गणना। घन के तीन अक्ष सरल रूप से टाइप किए गए लैम्ब्डा कैलकुलस के तीन अलग-अलग संवर्द्धन के अनुरूप हैं: आश्रित प्रकारों का जोड़, बहुरूपता का जोड़, और उच्च प्रकार (प्रकार सिद्धांत) प्रकार के निर्माणकर्ताओं का जोड़ (उदाहरण के लिए प्रकार से कार्य, उदाहरण के लिए) ). लैम्ब्डा क्यूब को शुद्ध प्रकार की प्रणालियों द्वारा आगे सामान्यीकृत किया जाता है।
प्रथम क्रम आश्रित प्रकार सिद्धांत
प्रणाली तार्किक ढांचे एलएफ (तार्किक ढांचे) के अनुरूप शुद्ध प्रथम क्रम निर्भर प्रकार, केवल टाइप किए गए लैम्ब्डा कैलकुस के फ़ंक्शन स्पेस प्रकार को आश्रित उत्पाद प्रकार के सामान्यीकरण द्वारा प्राप्त किया जाता है।
दूसरे क्रम पर निर्भर प्रकार का सिद्धांत
प्रणाली दूसरे क्रम के आश्रित प्रकार से प्राप्त किया जाता है टाइप कंस्ट्रक्टर्स पर परिमाणीकरण की अनुमति देकर। इस सिद्धांत में निर्भर उत्पाद ऑपरेटर दोनों को शामिल करता है बस टाइप किए गए लैम्ब्डा कैलकुस के ऑपरेटर और सिस्टम एफ की बाइंडर।
उच्च क्रम निर्भर रूप से टाइप किए गए बहुरूपी लैम्ब्डा कैलकुलस
उच्च आदेश प्रणाली फैली लैम्ब्डा क्यूब से अबास्ट्रक्शन के सभी चार रूपों के लिए: शब्दों से शब्दों तक, प्रकार से प्रकार, शब्दों से प्रकार और प्रकार से शर्तों तक कार्य करता है। प्रणाली निर्माणों की गणना से मेल खाती है जिसका व्युत्पन्न, आगमनात्मक निर्माणों की गणना 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 | ? | ? |
- ↑ This refers to the core language, not to any tactic (theorem proving procedure) or code generation sublanguage.
- ↑ Subject to semantic constraints, such as universe constraints
- ↑ Static_Predicate for restricted terms, Dynamic_Predicate for Assert-like checking of any term in type cast
- ↑ Ring solver[5]
- ↑ Optional universes, optional universe polymorphism, and optional explicitly specified universes
- ↑ Universes, automatically inferred universe constraints (not the same as Agda's universe polymorphism) and optional explicit printing of universe constraints
- ↑ Has been superseded by ATS
- ↑ Last Sage paper and last code snapshot are both dated 2006
यह भी देखें
- टाइप किया हुआ लैम्ब्डा कैलकुलस
- अंतर्ज्ञानवादी प्रकार सिद्धांत
संदर्भ
- ↑ Hofmann, Martin (1995), Extensional concepts in intensional type theory (PDF)
- ↑ "GNAT Community download page".
- ↑ "§3.2.4 Subtype Predicates". Ada Reference Manual (2012 ed.).
- ↑ "Agda download page".
- ↑ "Agda Ring Solver".
- ↑ 6.0 6.1 "Announce: Agda 2.2.8". Archived from the original on 2011-07-18. Retrieved 2010-09-28.
- ↑ "Agda 2.6.0 changelog".
- ↑ "ATS2 downloads".
- ↑ "email from ATS inventor Hongwei Xi".
- ↑ Xi, Hongwei (March 2017). "Applied Type System: An Approach to Practical Programming with Theorem-Proving" (PDF). arXiv:1703.08683.
- ↑ "Coq CHANGES in Subversion repository".
- ↑ "Introduction of SProp in Coq 8.10".
- ↑ "F* changes on GitHub". GitHub.
- ↑ "F* v0.9.5.0 release notes on GitHub". GitHub.
- ↑ "Guru SVN".
- ↑ 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.
- ↑ Petcher, Adam (May 2008). Deciding Joinability Modulo Ground Equations in Operational Type Theory (PDF) (MSc). Washington University. Retrieved 14 October 2010.
- ↑ "Idris git repository". GitHub. 17 May 2022.
- ↑ Brady, Edwin. "Idris, a language with dependent types — extended abstract" (PDF). CiteSeerX 10.1.1.150.9442.
- ↑ 20.0 20.1 Brady, Edwin. "How does Idris compare to other dependently-typed programming languages?".
- ↑ "Matita SVN". Archived from the original on 2006-05-08. Retrieved 2010-09-29.
आगे की पढाई
- Martin-Löf, Per (1984). Intuitionistic Type Theory (PDF). Bibliopolis.
- Nordström, Bengt; Petersson, Kent; Smith, Jan M. (1990). Programming in Martin-Löf's Type Theory: An Introduction. Oxford University Press. ISBN 9780198538141.
- Barendregt, H. (1992). "Lambda calculi with types". In Abramsky, S.; Gabbay, D.; Maibaum, T. (eds.). Handbook of Logic in Computer Science. Oxford Science Publications.
- Brandl, Helmut (2022). Calculus of Constructions
- McBride, Conor; McKinna, James (January 2004). "The view from the left". Journal of Functional Programming. 14 (1): 69–111. doi:10.1017/s0956796803004829. S2CID 6232997.
- Altenkirch, Thorsten; McBride, Conor; McKinna, James (2006). "Why dependent types matter" (PDF). Proceedings of the 33rd ACM SIGPLAN-SIGACT Symposium on Principles of Programming Languages, POPL 2006, Charleston, South Carolina, USA, January 11-13. ISBN 1-59593-027-2.
- Norell, Ulf (September 2007). Towards a practical programming language based on dependent type theory (PDF) (PhD). Göteborg, Sweden: Department of Computer Science and Engineering, Chalmers University of Technology. ISBN 978-91-7291-996-9.
- Oury, Nicolas; Swierstra, Wouter (2008). "The Power of Pi" (PDF). ICFP '08: Proceedings of the 13th ACM SIGPLAN international conference on Functional programming. pp. 39–50. doi:10.1145/1411204.1411213. ISBN 9781595939197. S2CID 16176901.
- Norell, Ulf (2009). "Dependently Typed Programming in Agda" (PDF). In Koopman, P.; Plasmeijer, R.; Swierstra, D. (eds.). Advanced Functional Programming. AFP 2008. Lecture Notes in Computer Science. Vol. 5832. Springer. pp. 230–266. doi:10.1007/978-3-642-04652-0_5. ISBN 978-3-642-04651-3.
- Sitnikovski, Boro (2018). Gentle Introduction to Dependent Types with Idris. Lean Publishing. ISBN 978-1723139413.
- McBride, Conor; Nordvall-Forsberg, Fredrik (2022). "Type systems for programs respecting dimensions" (PDF). Advanced Mathematical and Computational Tools in Metrology and Testing XII. Advances in Mathematics for Applied Sciences. World Scientific. pp. 331–345. doi:10.1142/9789811242380_0020. ISBN 9789811242380. S2CID 243831207.
इस पेज में लापता आंतरिक लिंक की सूची
- अंतर्ज्ञानवादी प्रकार सिद्धांत
- इदरीस (प्रोग्रामिंग भाषा)
- एपिग्राम (प्रोग्रामिंग भाषा)
- एफ * (प्रोग्रामिंग भाषा)
- Agda (प्रमेय प्रमाण)
- विस्तार प्रकार सिद्धांत
- टाइप लैम्ब्डा कैलकुस
- बस लैम्ब्डा कैलकुलस टाइप किया
- समारोह प्रकार
- कार्तीय गुणन
- वास्तविक संख्याये
- दोहरी (श्रेणी सिद्धांत)
- उत्पाद का प्रकार
- शुद्ध प्रकार प्रणाली
- एलएफ (तार्किक ढांचा)
- आगमनात्मक निर्माण की गणना
- कार्यक्रम सत्यापन
बाहरी कड़ियाँ
- Dependently Typed Programming 2008
- Dependently Typed Programming 2010
- Dependently Typed Programming 2011
- "Dependent type" at the Haskell Wiki
- dependent type theory in nLab
- dependent type in nLab
- dependent product type in nLab
- dependent sum type in nLab
- dependent product in nLab
- dependent sum in nLab
श्रेणी:गणित की बुनियाद श्रेणी:प्ररूप सिद्धांत श्रेणी:टाइप सिस्टम
- Templates that generate short descriptions
- All articles with incomplete citations
- Articles with incomplete citations from June 2022
- Collapse templates
- Navigational boxes
- Navigational boxes without horizontal lists
- Sidebars with styles needing conversion
- Templates generating microformats
- Templates that are not mobile friendly
- Wikipedia metatemplates
- Machine Translated Page
- Created On 02/01/2023