सहसंयोजन: Difference between revisions
No edit summary |
No edit summary |
||
(8 intermediate revisions by 3 users not shown) | |||
Line 1: | Line 1: | ||
{{about| | {{about|कंप्यूटर विज्ञान|एब्स्ट्रेक्ट बीजगणित में शब्द|वलय का परिवर्तन|चिकित्सा और एनेस्थेसिया में इस शब्द का उपयोग|सहसंयोजन (एनेस्थेटिक्स)}} | ||
[[कंप्यूटर विज्ञान]] में, सहसंयोजन | [[कंप्यूटर विज्ञान]] में, '''सहसंयोजन''' कंकर्रेंट इंटरैक्टिंग [[ऑब्जेक्ट (कंप्यूटिंग)]] के सिस्टम के गुणों को परिभाषित करने और सिद्ध करने की तकनीक है। | ||
सहसंयोजन [[संरचनात्मक प्रेरण]] का [[गणित]] | सहसंयोजन [[संरचनात्मक प्रेरण]] का [[गणित|गणितीय]] द्वैत (श्रेणी सिद्धांत) है। संयोगात्मक रूप से परिभाषित प्रकारों को कोडाटा के रूप में जाना जाता है और सामान्यतः [[अनंतता]] [[डेटा संरचनाएं]] होती हैं, जैसे [[स्ट्रीम (कंप्यूटिंग)]] होती हैं।। | ||
एक परिभाषा या विनिर्देश (कंप्यूटिंग) के रूप में, सहसंयोजन वर्णन करता है कि किसी वस्तु को कैसे देखा जा सकता है, तोड़ा जा सकता है या सरल वस्तुओं में नष्ट किया जा सकता है। [[प्रमाण (गणित)]] तकनीक के रूप में, इसका उपयोग यह दिखाने के लिए किया जा सकता है कि समीकरण ऐसे विनिर्देश के सभी संभावित [[कार्यान्वयन (कंप्यूटिंग)]] से संतुष्ट है। | एक परिभाषा या विनिर्देश (कंप्यूटिंग) के रूप में, सहसंयोजन वर्णन करता है कि किसी वस्तु को कैसे देखा जा सकता है, तोड़ा जा सकता है या सरल वस्तुओं में नष्ट किया जा सकता है। [[प्रमाण (गणित)]] तकनीक के रूप में, इसका उपयोग यह दिखाने के लिए किया जा सकता है कि समीकरण ऐसे विनिर्देश के सभी संभावित [[कार्यान्वयन (कंप्यूटिंग)]] से संतुष्ट है। | ||
कोडाटा उत्पन्न करने और उसमें | कोडाटा उत्पन्न करने और उसमें परिवर्तन करने के लिए, सामान्यतः [[आलसी मूल्यांकन|लेजी मूल्यांकन]] के साथ, [[corecursion|कोरकर्शन]] फ़ंक्शंस का उपयोग किया जाता है। अनौपचारिक रूप से, प्रत्येक प्रेरणिक कंस्ट्रक्टर पर पैटर्न-मिलान द्वारा फ़ंक्शन को परिभाषित करने के अतिरिक्त, प्रत्येक डिस्ट्रक्टर या सुपरवाइज़र को फ़ंक्शन परिणाम पर परिभाषित किया जाता है। | ||
प्रोग्रामिंग में, सह- | प्रोग्रामिंग में, सह-लॉजिक प्रोग्रामिंग (संक्षिप्तता के लिए सह-एलपी) लॉजिक प्रोग्रामिंग और संयोगात्मक लॉजिक प्रोग्रामिंग का प्राकृतिक सामान्यीकरण है, इस प्रकार जो परिवर्तन में लॉजिक प्रोग्रामिंग के अन्य विस्तारों को सामान्यीकृत करता है, जैसे कि अनंत लेजी, लेजी विधेय, और कंकर्रेंट संचार विधेय सह-एलपी में लॉजिकसंगत ट्री, अनंत गुणों की पुष्टि, लेजी मूल्यांकन, कंकर्रेंट लॉजिक प्रोग्रामिंग, मॉडल जांच, [[द्विसमानता]] प्रमाण इत्यादि के अनुप्रयोग हैं।<ref>{{Cite web|url=http://lambda-the-ultimate.org/node/2513|title = Co-Logic Programming | Lambda the Ultimate}}</ref> इस प्रकार सह-एलपी के प्रायोगिक कार्यान्वयन [[डलास में टेक्सास विश्वविद्यालय]] से उपलब्ध हैं <ref>{{Cite web|url=http://www.utdallas.edu/~gupta/|title = Gopal Gupta's Home Page}}</ref> और [[लॉगटॉक]] में (उदाहरण के लिए और [[एसडब्ल्यूआई-प्रोलॉग]] देखें <ref>{{Cite web|url=https://github.com/LogtalkDotOrg/logtalk3/tree/master/examples/coinduction|title = Logtalk3/Examples/Coinduction at master · LogtalkDotOrg/Logtalk3|website = [[GitHub]]}}</ref>)। | ||
== विवरण == | == विवरण == | ||
प्रेरण के सिद्धांत और सह-आगमन के सिद्धांत दोनों का संक्षिप्त विवरण दिया गया है।<ref>{{Cite web|url=https://mitpress.mit.edu/9780262303828/types-and-programming-languages/|title = प्रकार और प्रोग्रामिंग भाषाएँ|author = Benjamin Pierce|website = The MIT Press}}</ref> चूँकि यह लेख मुख्य रूप से प्रेरण से संबंधित नहीं है, फिर भी उनके कुछ सीमा तक सामान्यीकृत रूपों पर एक साथ विचार करना उपयोगी है। इस प्रकार सिद्धांतों को बताने के लिए कुछ प्रारंभिक बातों की आवश्यकता होती है। | |||
=== प्रारंभिक === | === प्रारंभिक === | ||
मान लीजिए कि <math>U</math> एक समुच्चय है और <math>F</math> एक मोनोटोन फलन <math>2^U \rightarrow 2^U</math> है, अर्थात: | |||
: <math> X \subseteq Y \Rightarrow F(X) \subseteq F(Y) </math> | : <math> X \subseteq Y \Rightarrow F(X) \subseteq F(Y) </math> | ||
जब तक अन्यथा न कहा जाए, <math>F</math> | जब तक अन्यथा न कहा जाए, <math>F</math> को एकसमान माना जाएगा। | ||
: X, F- | :X, F-संवृत है यदि <math>F(X) \subseteq X </math> | ||
: यदि X, F-संगत है <math>X \subseteq F(X) </math> | : यदि X, F-संगत है <math>X \subseteq F(X) </math> | ||
: <math>X = F(X) </math> | : <math>X = F(X) </math> | ||
इन शब्दों को निम्नलिखित | इन शब्दों को निम्नलिखित विधि से सामान्यतः समझा जा सकता है। मान लीजिए कि <math>X</math> अभिकथनों का एक सेट है, और <math>F(X)</math> वह ऑपरेशन है जो <math>X</math> के निहितार्थ लेता है। तब <math>X</math> 𝐹-संवृत है जब आप पहले से बताए गए निष्कर्ष से अधिक निष्कर्ष नहीं निकाल सकते हैं, जबकि <math>X</math> <math>F</math>-संगत है जब आपके सभी प्रमाण अन्य प्रमाणों द्वारा समर्थित हैं (अर्थात कोई "गैर-𝐹-तार्किक धारणाएं नहीं हैं")। | ||
नैस्टर-टार्स्की प्रमेय हमें बताता है कि | नैस्टर-टार्स्की प्रमेय हमें बताता है कि <math>F</math> का सबसे कम निश्चित-बिंदु (जिसे <math>\mu F</math> दर्शाया गया है) सभी <math>F</math>-संवृत सेटों के प्रतिच्छेदन द्वारा दिया जाता है, जबकि सबसे बड़ा निश्चित-बिंदु (जिसे <math>\nu F</math> दर्शाया गया है) सभी F- के मिलन द्वारा दिया जाता है। सुसंगत सेट अब हम प्रेरण और सह-आगमन के सिद्धांतों को बता सकते हैं। | ||
=== परिभाषा === | === परिभाषा === | ||
: प्रेरण का सिद्धांत | :प्रेरण का सिद्धांत यदि <math>X</math> F-संवृत है तो <math>\mu F \subseteq X</math> | ||
सह-आगमन का सिद्धांत यदि <math>X</math>, F-संगत है तो <math>X \subseteq \nu F</math> | |||
==विचार== | |||
जैसा कि कहा गया है, सिद्धांत कुछ सीमा तक अपारदर्शी हैं, किन्तु निम्नलिखित विधि से उपयोगी विधि से सोचा जा सकता है। मान लीजिए आप <math>\mu F</math> की प्रोपर्टी सिद्ध करना चाहते हैं। प्रेरण के सिद्धांत के अनुसार, यह एक 𝐹-संवृत सेट <math>x</math> प्रदर्शित करने के लिए पर्याप्त है जिसके लिए प्रोपर्टी धारण करती है। जैसे, मान लीजिए आप यह दिखाना चाहते हैं कि <math>x \in \nu F</math> फिर यह एक 𝐹-संगत सेट प्रदर्शित करने के लिए पर्याप्त है जिसका <math>x</math> को सदस्य माना जाता है। | |||
जैसा कि कहा गया है, सिद्धांत कुछ | |||
== उदाहरण == | == उदाहरण == | ||
Line 44: | Line 43: | ||
: <math> T = \bot \;|\;\top \;|\; T \times T </math> | : <math> T = \bot \;|\;\top \;|\; T \times T </math> | ||
अर्थात्, प्रकारों के सेट में निचला प्रकार | |||
अर्थात्, प्रकारों के सेट में "निचला प्रकार" <math>\bot</math>, "शीर्ष प्रकार" <math>\top</math>, और (गैर-समरूप) सूचियाँ सम्मिलित हैं। इन प्रकारों को <math>\Sigma = \{\bot, \top, \times\}</math> अक्षर के ऊपर तारों से पहचाना जा सकता है। मान लीजिए <math>\Sigma^*</math> पर सभी स्ट्रिंग्स <math>\Sigma</math> को दर्शाता है। <math>F: 2^{\Sigma^*} \rightarrow 2^{\Sigma^*}</math> फ़ंक्शन पर विचार करें | |||
: <math> F(X) = \{\bot, \top\} \cup \{ x \times y : x,y \in X \} </math> | : <math> F(X) = \{\bot, \top\} \cup \{ x \times y : x,y \in X \} </math> | ||
इस संदर्भ में, <math>x \times y</math> | इस संदर्भ में, <math>x \times y</math> का अर्थ है "स्ट्रिंग <math>x</math>, प्रतीक <math>\times</math> और स्ट्रिंग <math>y</math> का संयोजन" अब हमें अपने डेटाटाइप्स के सेट को <math>F</math> के फिक्सपॉइंट के रूप में परिभाषित करना चाहिए, किन्तु यह मायने रखता है कि हम सबसे कम या सबसे बड़ा फिक्सपॉइंट लेते हैं या नहीं है। | ||
मान लीजिए हम | मान लीजिए कि हम डेटाटाइप्स के अपने सेट के रूप में <math>\mu F</math> लेते हैं। प्रेरण के सिद्धांत का उपयोग करके, हम निम्नलिखित प्रमाण को सिद्ध कर सकते हैं: | ||
: | :<math>\mu F</math> में सभी डेटाटाइप सीमित हैं | ||
इस निष्कर्ष पर पहुंचने के लिए | इस निष्कर्ष पर पहुंचने के लिए <math>\Sigma</math> पर सभी परिमित स्ट्रिंग्स के सेट पर विचार करें। स्पष्ट रूप से <math>F</math> एक अनंत स्ट्रिंग उत्पन्न नहीं कर सकता है, इसलिए यह पता चलता है कि यह सेट F-संवृत है और निष्कर्ष इस प्रकार है। | ||
अब मान लीजिए कि हम | अब मान लीजिए कि हम डेटाटाइप्स के अपने सेट के रूप में <math>\nu F</math> लेते हैं। हम निम्नलिखित प्रमाण को सिद्ध करने के लिए सह-आगमन के सिद्धांत का उपयोग करना चाहेंगे: | ||
: प्ररूप <math>\bot \times \bot \times \cdots \in \nu F</math> | : प्ररूप <math>\bot \times \bot \times \cdots \in \nu F</math> | ||
यहाँ <math>\bot \times \bot \times \cdots </math> सभी | यहाँ <math>\bot \times \bot \times \cdots </math> सभी <math>\bot</math> से युक्त अनंत सूची को दर्शाता है। सहसंयोजन के सिद्धांत का उपयोग करने के लिए, सेट पर विचार करें: | ||
: <math> \{\bot \times \bot \times \cdots \} </math> | : <math> \{\bot \times \bot \times \cdots \} </math> | ||
यह सेट | यह सेट 𝐹-संगत हो जाता है, और इसलिए <math> \bot \times \bot \times \cdots \in \nu F </math> यह उस संदिग्ध कथन पर निर्भर करता है | ||
: <math> \bot \times \bot \times \cdots = \bot \times \bot \times \cdots \times \bot \times \bot \times \cdots </math> | : <math> \bot \times \bot \times \cdots = \bot \times \bot \times \cdots \times \bot \times \bot \times \cdots </math> | ||
इसका औपचारिक औचित्य तकनीकी है और स्ट्रिंग्स को अनुक्रम के रूप में व्याख्या करने पर निर्भर करता है, अर्थात <math>\mathbb{N} \rightarrow \Sigma</math> से कार्य करता है। सामान्यतः, यह तर्क उस तर्क के समान है जो <math>0.\bar{0}1 = 0</math> (दशमलव को दोहराते हुए देखें)। | |||
=== प्रोग्रामिंग लैंग्वेज में सहवर्ती डेटाप्रकार === | |||
स्ट्रीम (कंप्यूटिंग) की निम्नलिखित परिभाषा पर विचार करें:<ref>{{Cite CiteSeerX|title = प्रैक्टिकल कॉइंडक्शन|author = Dexter Kozen , Alexandra Silva | citeseerx=10.1.1.252.3961 }}</ref> | |||
<syntaxhighlight lang="haskell"> | <syntaxhighlight lang="haskell"> | ||
Line 77: | Line 78: | ||
tail (S a astream) = astream | tail (S a astream) = astream | ||
</syntaxhighlight> | </syntaxhighlight> | ||
यह ऐसी परिभाषा प्रतीत होती है जो गैर-अच्छी तरह से | यह ऐसी परिभाषा प्रतीत होती है जो गैर-अच्छी तरह से स्थापित सेट सिद्धांत है | अच्छी तरह से स्थापित नहीं है, किन्तु फिर भी यह प्रोग्रामिंग में उपयोगी है और इसके बारे में लॉजिक किया जा सकता है। किसी भी स्थिति में, स्ट्रीम अवयवो की अनंत सूची है जिसमें से आप पहले अवयव का निरीक्षण कर सकते हैं, या दूसरी स्ट्रीम प्राप्त करने के लिए अवयव को सामने रख सकते हैं। | ||
=== [[ कोलजेब्रा में ]] | === [[ कोलजेब्रा में | '''कोलजेब्रा में''']] 𝐹-कोलजेब्रा के साथ संबंध<ref>{{Cite book|chapter-url=https://link.springer.com/chapter/10.1007/978-3-642-32202-0_2|chapter = Generic Programming with Adjunctions|author = Ralf Hinze| title=सामान्य और अनुक्रमित प्रोग्रामिंग|website = Springer| series=Lecture Notes in Computer Science | year=2012 | volume=7470 | pages=47–129 | doi=10.1007/978-3-642-32202-0_2 | isbn=978-3-642-32201-3 }}</ref> === | ||
सेट की श्रेणी में एंडोफंक्टर <math>F</math> पर विचार करें: | |||
: <math>F(x) = A \times x</math> | : <math>F(x) = A \times x</math> | ||
: <math>F(f) = \langle \mathrm{id}_A, f \rangle </math> | : <math>F(f) = \langle \mathrm{id}_A, f \rangle </math> | ||
अंतिम | अंतिम 𝐹-कोलजेब्रा <math>\nu F</math> के साथ निम्नलिखित मोर्फिस्म जुड़ा हुआ है | ||
: <math> \mathrm{out}: \nu F \rightarrow F(\nu F) = A \times \nu F </math> | : <math> \mathrm{out}: \nu F \rightarrow F(\nu F) = A \times \nu F </math> | ||
यह | |||
यह संबंधित मोर्फिस्म <math>F(\nu F)</math> के साथ एक और कोलजेब्रा <math>F(\mathrm{out})</math> को प्रेरित करता है। क्योंकि <math>\nu F</math> अंतिम है, एक अद्वितीय मोर्फिस्म है | |||
: <math> \overline{F(\mathrm{out})}: F(\nu F) \rightarrow \nu F </math> | : <math> \overline{F(\mathrm{out})}: F(\nu F) \rightarrow \nu F </math> | ||
Line 95: | Line 97: | ||
: <math> \mathrm{out} \circ \overline{F(\mathrm{out})} = F\left(\overline{F(\mathrm{out})}\right) \circ F(\mathrm{out}) | : <math> \mathrm{out} \circ \overline{F(\mathrm{out})} = F\left(\overline{F(\mathrm{out})}\right) \circ F(\mathrm{out}) | ||
= F\left(\overline{F(\mathrm{out})} \circ \mathrm{out}\right)</math> | = F\left(\overline{F(\mathrm{out})} \circ \mathrm{out}\right)</math> | ||
रचना <math>\overline{F(\mathrm{out})} \circ \mathrm{out}</math> और एफ-कोलजेब्रा समरूपता | रचना <math>\overline{F(\mathrm{out})} \circ \mathrm{out}</math> एक और एफ-कोलजेब्रा समरूपता <math>\nu F \rightarrow \nu F</math> प्रेरित करती है। चूँकि <math>\nu F</math> अंतिम है, यह समरूपता अद्वितीय है और इसलिए <math>\mathrm{id}_{\nu F}</math> है। कुल मिलाकर हमारे पास है: | ||
: <math> \overline{F(\mathrm{out})} \circ \mathrm{out} = \mathrm{id}_{\nu F} </math> | : <math> \overline{F(\mathrm{out})} \circ \mathrm{out} = \mathrm{id}_{\nu F} </math> | ||
: <math> \mathrm{out} \circ \overline{F(\mathrm{out})} = F\left(\overline{F(\mathrm{out})}\right) \circ \mathrm{out}) = \mathrm{id}_{F(\nu F)} </math> | : <math> \mathrm{out} \circ \overline{F(\mathrm{out})} = F\left(\overline{F(\mathrm{out})}\right) \circ \mathrm{out}) = \mathrm{id}_{F(\nu F)} </math> | ||
यह समरूपता | यह समरूपता <math>\nu F \simeq F(\nu F)</math> का साक्षी है, जो स्पष्ट शब्दों में संकेत करता है कि <math>\nu F</math> <math>F</math> का एक निश्चित बिंदु है और अंकन को उचित ठहराता है। | ||
==== अंतिम कोलजेब्रा के रूप में स्ट्रीम करें ==== | ==== अंतिम कोलजेब्रा के रूप में स्ट्रीम करें ==== | ||
हम दिखाएंगे कि <syntaxhighlight lang="abl"> | |||
Stream A | |||
</syntaxhighlight> | |||
फ़ैक्टर <math>F(x) = A \times x</math> का अंतिम कोलजेब्रा है। निम्नलिखित कार्यान्वयन पर विचार करें: | |||
<syntaxhighlight lang="haskell"> | <syntaxhighlight lang="haskell"> | ||
Line 109: | Line 115: | ||
out' (a, astream) = S a astream | out' (a, astream) = S a astream | ||
</syntaxhighlight> | </syntaxhighlight> | ||
इन्हें | इन्हें सरलता से परस्पर विपरीत देखा जा सकता है, जिससे समरूपता देखी जा सकती है। अधिक विवरण के लिए संदर्भ देखें. | ||
===[[गणितीय प्रेरण]] के साथ संबंध === | ===[[गणितीय प्रेरण]] के साथ संबंध === | ||
हम प्रदर्शित करेंगे कि कैसे प्रेरण का सिद्धांत गणितीय प्रेरण को समाहित करता है। | हम प्रदर्शित करेंगे कि कैसे प्रेरण का सिद्धांत गणितीय प्रेरण को समाहित करता है। माना <math>P</math> [[प्राकृतिक संख्या]]ओं का कुछ गुण है। हम गणितीय प्रेरण की निम्नलिखित परिभाषा लेंगे: | ||
: <math>P(0) \and (P(n) \Rightarrow P(n+1)) \Rightarrow P(\mathbb{N})</math> | : <math>P(0) \and (P(n) \Rightarrow P(n+1)) \Rightarrow P(\mathbb{N})</math> | ||
अब फ़ंक्शन | अब फ़ंक्शन <math>F: 2^{\mathbb{N}} \rightarrow 2^{\mathbb{N}}</math> पर विचार करें | ||
: <math>F(X) = \{0\} \cup \{x + 1 : x \in X \}</math> | : <math>F(X) = \{0\} \cup \{x + 1 : x \in X \}</math> | ||
यह देखना कठिन नहीं होना चाहिए <math>\mu F = \mathbb{N}</math>. इसलिए, प्रेरण के सिद्धांत के अनुसार, यदि हम <math>\mathbb{N}</math> के कुछ गुण <math>P</math> को सिद्ध करना चाहते हैं, तो यह दिखाना पर्याप्त है कि <math>P</math>, F-संवृत है। विस्तार से, हमें चाहिए: | |||
: <math>F(P) \subseteq P</math> | : <math>F(P) \subseteq P</math> | ||
वह है, | वह है, | ||
: <math>\{0\} \cup \{x + 1 : x \in P \} \subseteq P </math> | : <math>\{0\} \cup \{x + 1 : x \in P \} \subseteq P </math> | ||
जैसा कि कहा गया है, यह | जैसा कि कहा गया है, यह पूर्णतः गणितीय प्रेरण है। | ||
==यह भी देखें== | ==यह भी देखें== | ||
* | * 𝐹-कोलजेब्रा | ||
* कोरकर्शन | * कोरकर्शन | ||
* [[द्विसिमुलेशन]] | * [[द्विसिमुलेशन]] | ||
Line 136: | Line 141: | ||
==संदर्भ== | ==संदर्भ== | ||
{{Reflist}} | {{Reflist}} | ||
== अग्रिम पठन == | == अग्रिम पठन == | ||
;Textbooks | ;Textbooks | ||
Line 154: | Line 157: | ||
;Miscellaneous | ;Miscellaneous | ||
* [http://www.utdallas.edu/~gupta/ppdp06.pdf Co-Logic Programming: Extending Logic Programming with Coinduction] — describes the co-logic programming paradigm | * [http://www.utdallas.edu/~gupta/ppdp06.pdf Co-Logic Programming: Extending Logic Programming with Coinduction] — describes the co-logic programming paradigm | ||
[[Category: | [[Category:Articles with hatnote templates targeting a nonexistent page]] | ||
[[Category:Created On 24/07/2023]] | [[Category:Created On 24/07/2023]] | ||
[[Category:Machine Translated Page]] | |||
[[Category:Pages that use a deprecated format of the math tags]] | |||
[[Category:Pages with script errors]] | |||
[[Category:Templates Vigyan Ready]] | |||
[[Category:कार्यात्मक प्रोग्रामिंग]] | |||
[[Category:गणितीय प्रेरण]] | |||
[[Category:तर्क प्रोग्रामिंग]] | |||
[[Category:श्रेणी सिद्धांत]] | |||
[[Category:सैद्धांतिक कंप्यूटर विज्ञान]] |
Latest revision as of 14:25, 14 August 2023
कंप्यूटर विज्ञान में, सहसंयोजन कंकर्रेंट इंटरैक्टिंग ऑब्जेक्ट (कंप्यूटिंग) के सिस्टम के गुणों को परिभाषित करने और सिद्ध करने की तकनीक है।
सहसंयोजन संरचनात्मक प्रेरण का गणितीय द्वैत (श्रेणी सिद्धांत) है। संयोगात्मक रूप से परिभाषित प्रकारों को कोडाटा के रूप में जाना जाता है और सामान्यतः अनंतता डेटा संरचनाएं होती हैं, जैसे स्ट्रीम (कंप्यूटिंग) होती हैं।।
एक परिभाषा या विनिर्देश (कंप्यूटिंग) के रूप में, सहसंयोजन वर्णन करता है कि किसी वस्तु को कैसे देखा जा सकता है, तोड़ा जा सकता है या सरल वस्तुओं में नष्ट किया जा सकता है। प्रमाण (गणित) तकनीक के रूप में, इसका उपयोग यह दिखाने के लिए किया जा सकता है कि समीकरण ऐसे विनिर्देश के सभी संभावित कार्यान्वयन (कंप्यूटिंग) से संतुष्ट है।
कोडाटा उत्पन्न करने और उसमें परिवर्तन करने के लिए, सामान्यतः लेजी मूल्यांकन के साथ, कोरकर्शन फ़ंक्शंस का उपयोग किया जाता है। अनौपचारिक रूप से, प्रत्येक प्रेरणिक कंस्ट्रक्टर पर पैटर्न-मिलान द्वारा फ़ंक्शन को परिभाषित करने के अतिरिक्त, प्रत्येक डिस्ट्रक्टर या सुपरवाइज़र को फ़ंक्शन परिणाम पर परिभाषित किया जाता है।
प्रोग्रामिंग में, सह-लॉजिक प्रोग्रामिंग (संक्षिप्तता के लिए सह-एलपी) लॉजिक प्रोग्रामिंग और संयोगात्मक लॉजिक प्रोग्रामिंग का प्राकृतिक सामान्यीकरण है, इस प्रकार जो परिवर्तन में लॉजिक प्रोग्रामिंग के अन्य विस्तारों को सामान्यीकृत करता है, जैसे कि अनंत लेजी, लेजी विधेय, और कंकर्रेंट संचार विधेय सह-एलपी में लॉजिकसंगत ट्री, अनंत गुणों की पुष्टि, लेजी मूल्यांकन, कंकर्रेंट लॉजिक प्रोग्रामिंग, मॉडल जांच, द्विसमानता प्रमाण इत्यादि के अनुप्रयोग हैं।[1] इस प्रकार सह-एलपी के प्रायोगिक कार्यान्वयन डलास में टेक्सास विश्वविद्यालय से उपलब्ध हैं [2] और लॉगटॉक में (उदाहरण के लिए और एसडब्ल्यूआई-प्रोलॉग देखें [3])।
विवरण
प्रेरण के सिद्धांत और सह-आगमन के सिद्धांत दोनों का संक्षिप्त विवरण दिया गया है।[4] चूँकि यह लेख मुख्य रूप से प्रेरण से संबंधित नहीं है, फिर भी उनके कुछ सीमा तक सामान्यीकृत रूपों पर एक साथ विचार करना उपयोगी है। इस प्रकार सिद्धांतों को बताने के लिए कुछ प्रारंभिक बातों की आवश्यकता होती है।
प्रारंभिक
मान लीजिए कि एक समुच्चय है और एक मोनोटोन फलन है, अर्थात:
जब तक अन्यथा न कहा जाए, को एकसमान माना जाएगा।
- X, F-संवृत है यदि
- यदि X, F-संगत है
इन शब्दों को निम्नलिखित विधि से सामान्यतः समझा जा सकता है। मान लीजिए कि अभिकथनों का एक सेट है, और वह ऑपरेशन है जो के निहितार्थ लेता है। तब 𝐹-संवृत है जब आप पहले से बताए गए निष्कर्ष से अधिक निष्कर्ष नहीं निकाल सकते हैं, जबकि -संगत है जब आपके सभी प्रमाण अन्य प्रमाणों द्वारा समर्थित हैं (अर्थात कोई "गैर-𝐹-तार्किक धारणाएं नहीं हैं")।
नैस्टर-टार्स्की प्रमेय हमें बताता है कि का सबसे कम निश्चित-बिंदु (जिसे दर्शाया गया है) सभी -संवृत सेटों के प्रतिच्छेदन द्वारा दिया जाता है, जबकि सबसे बड़ा निश्चित-बिंदु (जिसे दर्शाया गया है) सभी F- के मिलन द्वारा दिया जाता है। सुसंगत सेट अब हम प्रेरण और सह-आगमन के सिद्धांतों को बता सकते हैं।
परिभाषा
- प्रेरण का सिद्धांत यदि F-संवृत है तो
सह-आगमन का सिद्धांत यदि , F-संगत है तो
विचार
जैसा कि कहा गया है, सिद्धांत कुछ सीमा तक अपारदर्शी हैं, किन्तु निम्नलिखित विधि से उपयोगी विधि से सोचा जा सकता है। मान लीजिए आप की प्रोपर्टी सिद्ध करना चाहते हैं। प्रेरण के सिद्धांत के अनुसार, यह एक 𝐹-संवृत सेट प्रदर्शित करने के लिए पर्याप्त है जिसके लिए प्रोपर्टी धारण करती है। जैसे, मान लीजिए आप यह दिखाना चाहते हैं कि फिर यह एक 𝐹-संगत सेट प्रदर्शित करने के लिए पर्याप्त है जिसका को सदस्य माना जाता है।
उदाहरण
डेटा प्रकार के सेट को परिभाषित करना
डेटाटाइप के निम्नलिखित व्याकरण पर विचार करें:
अर्थात्, प्रकारों के सेट में "निचला प्रकार" , "शीर्ष प्रकार" , और (गैर-समरूप) सूचियाँ सम्मिलित हैं। इन प्रकारों को अक्षर के ऊपर तारों से पहचाना जा सकता है। मान लीजिए पर सभी स्ट्रिंग्स को दर्शाता है। फ़ंक्शन पर विचार करें
इस संदर्भ में, का अर्थ है "स्ट्रिंग , प्रतीक और स्ट्रिंग का संयोजन" अब हमें अपने डेटाटाइप्स के सेट को के फिक्सपॉइंट के रूप में परिभाषित करना चाहिए, किन्तु यह मायने रखता है कि हम सबसे कम या सबसे बड़ा फिक्सपॉइंट लेते हैं या नहीं है।
मान लीजिए कि हम डेटाटाइप्स के अपने सेट के रूप में लेते हैं। प्रेरण के सिद्धांत का उपयोग करके, हम निम्नलिखित प्रमाण को सिद्ध कर सकते हैं:
- में सभी डेटाटाइप सीमित हैं
इस निष्कर्ष पर पहुंचने के लिए पर सभी परिमित स्ट्रिंग्स के सेट पर विचार करें। स्पष्ट रूप से एक अनंत स्ट्रिंग उत्पन्न नहीं कर सकता है, इसलिए यह पता चलता है कि यह सेट F-संवृत है और निष्कर्ष इस प्रकार है।
अब मान लीजिए कि हम डेटाटाइप्स के अपने सेट के रूप में लेते हैं। हम निम्नलिखित प्रमाण को सिद्ध करने के लिए सह-आगमन के सिद्धांत का उपयोग करना चाहेंगे:
- प्ररूप
यहाँ सभी से युक्त अनंत सूची को दर्शाता है। सहसंयोजन के सिद्धांत का उपयोग करने के लिए, सेट पर विचार करें:
यह सेट 𝐹-संगत हो जाता है, और इसलिए यह उस संदिग्ध कथन पर निर्भर करता है
इसका औपचारिक औचित्य तकनीकी है और स्ट्रिंग्स को अनुक्रम के रूप में व्याख्या करने पर निर्भर करता है, अर्थात से कार्य करता है। सामान्यतः, यह तर्क उस तर्क के समान है जो (दशमलव को दोहराते हुए देखें)।
प्रोग्रामिंग लैंग्वेज में सहवर्ती डेटाप्रकार
स्ट्रीम (कंप्यूटिंग) की निम्नलिखित परिभाषा पर विचार करें:[5]
data Stream a = S a (Stream a)
-- Stream "destructors"
head (S a astream) = a
tail (S a astream) = astream
यह ऐसी परिभाषा प्रतीत होती है जो गैर-अच्छी तरह से स्थापित सेट सिद्धांत है | अच्छी तरह से स्थापित नहीं है, किन्तु फिर भी यह प्रोग्रामिंग में उपयोगी है और इसके बारे में लॉजिक किया जा सकता है। किसी भी स्थिति में, स्ट्रीम अवयवो की अनंत सूची है जिसमें से आप पहले अवयव का निरीक्षण कर सकते हैं, या दूसरी स्ट्रीम प्राप्त करने के लिए अवयव को सामने रख सकते हैं।
कोलजेब्रा में 𝐹-कोलजेब्रा के साथ संबंध[6]
सेट की श्रेणी में एंडोफंक्टर पर विचार करें:
अंतिम 𝐹-कोलजेब्रा के साथ निम्नलिखित मोर्फिस्म जुड़ा हुआ है
यह संबंधित मोर्फिस्म के साथ एक और कोलजेब्रा को प्रेरित करता है। क्योंकि अंतिम है, एक अद्वितीय मोर्फिस्म है
ऐसा है कि
रचना एक और एफ-कोलजेब्रा समरूपता प्रेरित करती है। चूँकि अंतिम है, यह समरूपता अद्वितीय है और इसलिए है। कुल मिलाकर हमारे पास है:
यह समरूपता का साक्षी है, जो स्पष्ट शब्दों में संकेत करता है कि का एक निश्चित बिंदु है और अंकन को उचित ठहराता है।
अंतिम कोलजेब्रा के रूप में स्ट्रीम करें
हम दिखाएंगे कि
Stream A
फ़ैक्टर का अंतिम कोलजेब्रा है। निम्नलिखित कार्यान्वयन पर विचार करें:
out astream = (head astream, tail astream)
out' (a, astream) = S a astream
इन्हें सरलता से परस्पर विपरीत देखा जा सकता है, जिससे समरूपता देखी जा सकती है। अधिक विवरण के लिए संदर्भ देखें.
गणितीय प्रेरण के साथ संबंध
हम प्रदर्शित करेंगे कि कैसे प्रेरण का सिद्धांत गणितीय प्रेरण को समाहित करता है। माना प्राकृतिक संख्याओं का कुछ गुण है। हम गणितीय प्रेरण की निम्नलिखित परिभाषा लेंगे:
अब फ़ंक्शन पर विचार करें
यह देखना कठिन नहीं होना चाहिए . इसलिए, प्रेरण के सिद्धांत के अनुसार, यदि हम के कुछ गुण को सिद्ध करना चाहते हैं, तो यह दिखाना पर्याप्त है कि , F-संवृत है। विस्तार से, हमें चाहिए:
वह है,
जैसा कि कहा गया है, यह पूर्णतः गणितीय प्रेरण है।
यह भी देखें
- 𝐹-कोलजेब्रा
- कोरकर्शन
- द्विसिमुलेशन
- एनामोर्फिज्म
- कुल कार्यात्मक प्रोग्रामिंग
संदर्भ
- ↑ "Co-Logic Programming | Lambda the Ultimate".
- ↑ "Gopal Gupta's Home Page".
- ↑ "Logtalk3/Examples/Coinduction at master · LogtalkDotOrg/Logtalk3". GitHub.
- ↑ Benjamin Pierce. "प्रकार और प्रोग्रामिंग भाषाएँ". The MIT Press.
- ↑ Dexter Kozen , Alexandra Silva. "प्रैक्टिकल कॉइंडक्शन". CiteSeerX 10.1.1.252.3961.
- ↑ Ralf Hinze (2012). "Generic Programming with Adjunctions". सामान्य और अनुक्रमित प्रोग्रामिंग. pp. 47–129. doi:10.1007/978-3-642-32202-0_2. ISBN 978-3-642-32201-3.
{{cite book}}
:|website=
ignored (help)
अग्रिम पठन
- Textbooks
- Davide Sangiorgi (2012). Introduction to Bisimulation and Coinduction. Cambridge University Press.
- Davide Sangiorgi and Jan Rutten (2011). Advanced Topics in Bisimulation and Coinduction. Cambridge University Press.
- Introductory texts
- Andrew D. Gordon (1994). "A Tutorial on Co-induction and Functional Programming". 1994. pp. 78–95. CiteSeerX 10.1.1.37.3914. — mathematically oriented description
- Bart Jacobs and Jan Rutten (1997). A Tutorial on (Co)Algebras and (Co)Induction (alternate link) — describes induction and coinduction simultaneously
- Eduardo Giménez and Pierre Castéran (2007). "A Tutorial on [Co-]Inductive Types in Coq"
- Coinduction — short introduction
- History
- Davide Sangiorgi. "On the Origins of Bisimulation and Coinduction", ACM Transactions on Programming Languages and Systems, Vol. 31, Nb 4, Mai 2009.
- Miscellaneous
- Co-Logic Programming: Extending Logic Programming with Coinduction — describes the co-logic programming paradigm