एसकेआई कॉम्बिनेटर कैलकुलस: Difference between revisions

From Vigyanwiki
No edit summary
No edit summary
Line 1: Line 1:
{{Short description|Simple Turing complete logic}}
{{Short description|Simple Turing complete logic}}
एसकेआई कॉम्बिनेटर कैलकुलस संयोजन तर्क और गणना का मॉडल है। इसे कंप्यूटर प्रोग्रामिंग भाषा के रूप में सोचा जा सकता है, हालांकि यह सॉफ्टवेयर लिखने के लिए सुविधाजनक नहीं है। इसके बजाय, यह [[कलन विधि]] के गणितीय सिद्धांत में महत्वपूर्ण है क्योंकि यह अत्यंत सरल [[ट्यूरिंग पूर्ण]] भाषा है। इसकी तुलना अनटाइप्ड [[लैम्ब्डा कैलकुलस]] के संक्षिप्त संस्करण से की जा सकती है। इसे मोसेस शॉनफिंकेल द्वारा पेश किया गया था<ref>{{cite journal |first=M. |last=Schönfinkel |date=1924 |title=Über die Bausteine der mathematischen Logik |journal=Mathematische Annalen |volume=92 |issue=3–4 |pages=305–316 |doi=10.1007/BF01448013|s2cid=118507515 }} Translated by Stefan Bauer-Mengelberg as {{cite book |chapter=On the building blocks of mathematical logic |chapter-url=https://books.google.com/books?id=v4tBTBlU05sC&pg=PA355 |editor-link=Jean van Heijenoort |editor-first=Jean |editor-last=van Heijenoort |orig-year=1967 |title=A Source Book in Mathematical Logic 1879–1931 |publisher=Harvard University Press |pages=355–366 |date=2002 |isbn=9780674324497}}</ref> और [[हास्केल करी]].<ref>{{cite journal|last=Curry|first=Haskell Brooks|title=संयोजक तर्क की मूल बातें|journal=American Journal of Mathematics|year=1930|volume=52|issue=3|pages=509–536|authorlink=Haskell Curry|trans-title=Foundations of combinatorial logic|publisher=Johns Hopkins University Press|language=German|doi=10.2307/2370619|jstor=2370619}}</ref>
'''एसकेआई कॉम्बिनेटर कैलकुलस''' संयोजन तर्क और गणना का मुख्य प्रारूप है। इसे कंप्यूटर प्रोग्रामिंग भाषा के रूप में उपयोग किया जा सकता है, चूंकि यह सॉफ्टवेयर लिखने के लिए सुविधाजनक नहीं है। इसके अतिरिक्त, यह [[कलन विधि]] के गणितीय सिद्धांत में महत्वपूर्ण भूमिका निभाता है, क्योंकि यह अत्यंत सरल [[ट्यूरिंग पूर्ण]] भाषा को व्यक्त करता है। इसकी तुलना अनटाइप्ड [[लैम्ब्डा कैलकुलस]] के संक्षिप्त संस्करण से की जा सकती है। इसे मोसेस शॉनफिंकेल और [[हास्केल करी]] द्वारा प्रस्तुत किया गया था<ref>{{cite journal |first=M. |last=Schönfinkel |date=1924 |title=Über die Bausteine der mathematischen Logik |journal=Mathematische Annalen |volume=92 |issue=3–4 |pages=305–316 |doi=10.1007/BF01448013|s2cid=118507515 }} Translated by Stefan Bauer-Mengelberg as {{cite book |chapter=On the building blocks of mathematical logic |chapter-url=https://books.google.com/books?id=v4tBTBlU05sC&pg=PA355 |editor-link=Jean van Heijenoort |editor-first=Jean |editor-last=van Heijenoort |orig-year=1967 |title=A Source Book in Mathematical Logic 1879–1931 |publisher=Harvard University Press |pages=355–366 |date=2002 |isbn=9780674324497}}</ref><ref>{{cite journal|last=Curry|first=Haskell Brooks|title=संयोजक तर्क की मूल बातें|journal=American Journal of Mathematics|year=1930|volume=52|issue=3|pages=509–536|authorlink=Haskell Curry|trans-title=Foundations of combinatorial logic|publisher=Johns Hopkins University Press|language=German|doi=10.2307/2370619|jstor=2370619}}</ref>
लैम्ब्डा कैलकुलस में सभी ऑपरेशनों को कॉम्बिनेटरी लॉजिक#एस-के आधार की पूर्णता के माध्यम से एसकेआई कैलकुलस में [[ द्विआधारी वृक्ष |द्विआधारी वृक्ष]] के रूप में एन्कोड किया जा सकता है, जिनकी पत्तियाँ तीन प्रतीकों एस, के, और आई (जिन्हें ''कॉम्बिनेटर'' कहा जाता है) में से हैं।
 
लैम्ब्डा कैलकुलस में सभी ऑपरेशनों को कॉम्बिनेटरी लॉजिक S-के आधार के पूर्ण स्वरूप के माध्यम से SKI कैलकुलस में [[ द्विआधारी वृक्ष |द्विआधारी ट्री]] के रूप में एन्कोड किया जा सकता है, जिनकी पत्तियाँ तीन प्रतीकों S, के, और आई में से हैं, जिन्हें ''कॉम्बिनेटर'' कहा जाता है।


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


==अनौपचारिक विवरण==
==अनौपचारिक विवरण==
अनौपचारिक रूप से, और प्रोग्रामिंग भाषा शब्दजाल का उपयोग करते हुए, पेड़ (xy) को तर्क y पर लागू फ़ंक्शन x के रूप में सोचा जा सकता है। जब मूल्यांकन किया जाता है (यानी, जब फ़ंक्शन को तर्क पर लागू किया जाता है), तो पेड़ मान लौटाता है, यानी, दूसरे पेड़ में बदल जाता है। फ़ंक्शन, तर्क और मान या तो कॉम्बिनेटर या बाइनरी ट्री हैं। यदि वे द्विआधारी वृक्ष हैं, तो आवश्यकता पड़ने पर उन्हें फ़ंक्शन के रूप में भी सोचा जा सकता है।
अनौपचारिक रूप से प्रोग्रामिंग भाषा की शब्दावली का उपयोग करते हुए उपयोग किए जाने वाले ट्री (XY) को तर्क Y पर लागू होने वाले फलन x के रूप में उपयोग किया जा सकता है। जब इसका मूल्यांकन किया जाता है, अर्ताथ जब फलन को तर्क पर लागू किया जाता है, तो यह ट्री मान रिटर्न करता है, अर्ताथ, दूसरे ट्री में इसे परिवर्तित कर दिया जाता है। इस प्रकार के फलन, तर्क और मान या तो कॉम्बिनेटर या बाइनरी ट्री को प्रदर्शित करते हैं। यदि वे द्विआधारी ट्री हैं, तो आवश्यकता पड़ने पर उन्हें फलन के रूप में भी उपयोग किया जा सकता हैं।


'मूल्यांकन' ऑपरेशन को इस प्रकार परिभाषित किया गया है:
'मूल्यांकन' ऑपरेशन को इस प्रकार परिभाषित किया गया है:


(x, y, और z 'S', 'K', और 'I' फ़ंक्शंस से बनी अभिव्यक्तियों का प्रतिनिधित्व करते हैं और मान निर्धारित करते हैं):
(x, Y, और z 'S', 'K', और 'I' फलन से बनी अभिव्यक्तियों का प्रतिनिधित्व करते हैं, और इसके फलस्वरूप प्राप्त होने वाले मान को निर्धारित भी करते हैं):


'मैं' अपना तर्क लौटाता है:
'I' अपना तर्क लौटाता है:
:'आई'एक्स = एक्स
:'I'X = X


'K', जब किसी तर्क x पर लागू किया जाता है, तो एक-तर्क स्थिर फ़ंक्शन 'K'y प्राप्त होता है, जो किसी भी तर्क पर लागू होने पर, x लौटाता है:
'K', जब किसी तर्क x पर लागू किया जाता है, तो एक-तर्क स्थिर फलन 'K'Y प्राप्त होता है, जो किसी भी तर्क पर लागू होने पर, x लौटाता है:
:'K'xy = x
:'K'XY = x


'S' प्रतिस्थापन संचालिका है। यह तीन तर्क लेता है और फिर पहले तर्क को तीसरे पर लागू करता है, जिसे फिर तीसरे पर लागू दूसरे तर्क के परिणाम पर लागू किया जाता है। और स्पष्टता से:
'S' प्रतिस्थापन संचालिका को प्रदर्शित करता है। यह तीन तर्क लेता है और फिर पहले तर्क को तीसरे पर लागू करता है, जिसे फिर तीसरे पर लागू दूसरे तर्क के परिणाम पर लागू किया जाता है। और स्पष्टता से:
:'S'xyz = xz(yz)
:'S'XYz = xz(Yz)


उदाहरण गणना: 'एसकेएसके' 'एस'-नियम द्वारा 'केके'('एसके') का मूल्यांकन करता है। फिर यदि हम 'केके' ('एसके') का मूल्यांकन करते हैं, तो हमें 'के'-नियम से 'के' मिलता है। चूँकि कोई और नियम लागू नहीं किया जा सकता, गणना यहीं रुक जाती है।
उदाहरण के लिए उक्त गणना के आधार पर 'SKSK' 'S'-नियम द्वारा 'केके'('SK') का मूल्यांकन करता है। फिर यदि हम 'केके' ('SK') का मूल्यांकन करते हैं, तो हमें 'K'-नियम से 'K' मिलता है। चूँकि कोई और नियम लागू नहीं किया जा सकता हैं जिसके द्वारा यह गणना यहीं रुक जाती है।


सभी पेड़ों x और सभी पेड़ों y के लिए, 'SK'xy हमेशा दो चरणों में y का मूल्यांकन करेगा, 'K'y(xy) = y, इसलिए 'SK'xy के मूल्यांकन का अंतिम परिणाम हमेशा y के मूल्यांकन के परिणाम के बराबर होगा। . हम कहते हैं कि 'एसके'एक्स और 'आई' कार्यात्मक रूप से समतुल्य हैं क्योंकि किसी भी वाई पर लागू होने पर वे हमेशा ही परिणाम देते हैं।
सभी ट्री x और सभी ट्री Y के लिए, 'SK'XY सदैव दो चरणों में Y का मूल्यांकन करेगा, इस प्रकार 'K'Y(XY) = Y, इसलिए 'SK'XY के मूल्यांकन का अंतिम परिणाम सदैव Y के मूल्यांकन के परिणाम के बराबर होगा। इस प्रकार हम कहते हैं कि 'SK'X और 'I' कार्यात्मक रूप से समतुल्य हैं क्योंकि किसी भी Y पर लागू होने पर वे सदैव ही परिणाम देते हैं।


इन परिभाषाओं से यह दिखाया जा सकता है कि एसकेआई कैलकुलस न्यूनतम प्रणाली नहीं है जो लैम्ब्डा कैलकुलस की गणना पूरी तरह से कर सकती है, क्योंकि किसी भी अभिव्यक्ति में 'आई' की सभी घटनाओं को ('एसकेके') या ('एसकेएस') द्वारा प्रतिस्थापित किया जा सकता है। या ('एसके' जो भी हो) और परिणामी अभिव्यक्ति समान परिणाम देगी। तो 'मैं' केवल [[वाक्यात्मक शर्करा]] है। चूँकि 'I' वैकल्पिक है, इसलिए सिस्टम को SK कैलकुलस या SK कॉम्बिनेटर कैलकुलस भी कहा जाता है।
इन परिभाषाओं से यह दिखाया जा सकता है कि SK कैलकुलस न्यूनतम प्रणाली के समान नहीं है जो लैम्ब्डा कैलकुलस की गणना पूर्ण रूप से कर सकती है, क्योंकि किसी भी अभिव्यक्ति में 'I' की सभी घटनाओं को ('SKके') या ('SKS') द्वारा प्रतिस्थापित किया जा सकता है। इस प्रकार 'SK' जो भी हो और परिणामी अभिव्यक्ति समान परिणाम देती हैं। इसके आधार पर 'I' केवल [[वाक्यात्मक शर्करा]] को प्रदर्शित करता है। चूँकि 'I' वैकल्पिक है, इसलिए सिस्टम को SK कैलकुलस या SK कॉम्बिनेटर कैलकुलस भी कहा जाता है।


केवल (अनुचित) कॉम्बिनेटर का उपयोग करके संपूर्ण सिस्टम को परिभाषित करना संभव है। उदाहरण क्रिस बार्कर का [[इओटा और जोट]] कॉम्बिनेटर है, जिसे 'एस' और 'के' के संदर्भ में निम्नानुसार व्यक्त किया जा सकता है:
केवल (अनुचित) कॉम्बिनेटर का उपयोग करके संपूर्ण सिस्टम को परिभाषित करना संभव है। उदाहरण क्रिस बार्कर का [[इओटा और जोट]] कॉम्बिनेटर है, जिसे 'S' और 'K' के संदर्भ में निम्नानुसार व्यक्त किया जा सकता है:
: ιx = x'SK'
: ιx = x'SK'
आईओटा कॉम्बिनेटर से 'एस', 'के' और 'आई' का पुनर्निर्माण संभव है। ι को स्वयं पर लागू करने से ιι = ι'SK' = 'SSKK' = 'SK'('KK') प्राप्त होता है जो कार्यात्मक रूप से 'I' के समतुल्य है। 'K' का निर्माण 'I' में दो बार ι लगाने से किया जा सकता है (जो स्वयं पर ι लगाने के बराबर है): ι(ι(ιι)) = ι(ιι'SK') = ι('ISK') = ι ('एसके') = 'एसकेएसके' = 'के'। ι को बार और लगाने पर ι(ι(ι(ιι))) = ι'K' = 'KSK' = 'S' प्राप्त होता है।
आईओटा कॉम्बिनेटर से 'S', 'K' और 'I' का पुनर्निर्माण संभव है। इस प्रकार ι को स्वयं पर लागू करने से ιι = ι'SK' = 'SSKK' = 'SK'('KK') प्राप्त होता है जो कार्यात्मक रूप से 'I' के समतुल्य है। इस प्रकार 'K' का निर्माण 'I' में दो बार ι लगाने से किया जा सकता है, जो स्वयं पर ι लगाने के बराबर है: इसके आधार पर ι(ι(ιι)) = ι(ιι'SK') = ι('ISK') = ι ('SK') = 'SKSK' = 'K'। ι को बार और लगाने पर ι(ι(ι(ιι))) = ι'K' = 'KSK' = 'S' प्राप्त होता है।


==औपचारिक परिभाषा==
==औपचारिक परिभाषा==
इस प्रणाली में शब्दों और व्युत्पत्तियों को अधिक औपचारिक रूप से परिभाषित किया जा सकता है:
इस प्रणाली में शब्दों और व्युत्पत्तियों को अधिक औपचारिक रूप से परिभाषित किया जा सकता है:


शर्तें:
शर्तें: पदों के समुच्चय ''T'' को निम्नलिखित नियमों द्वारा पुनरावर्ती रूप से परिभाषित किया गया है।
पदों के समुच्चय ''T'' को निम्नलिखित नियमों द्वारा पुनरावर्ती रूप से परिभाषित किया गया है।
# S, K, और I पद हैं।
# S, K, और I पद हैं।
# यदि τ<sub>1</sub> और टी<sub>2</sub> पद हैं, तो (τ<sub>1</sub>τ<sub>2</sub>) शब्द है.
# यदि τ<sub>1</sub> और T<sub>2</sub> पद हैं, तो (τ<sub>1</sub>τ<sub>2</sub>) शब्द है.
# यदि पहले दो नियमों के अनुसार ऐसा होना आवश्यक न हो तो कोई भी चीज़ शब्द नहीं है।
# यदि पहले दो नियमों के अनुसार ऐसा होना आवश्यक न हो तो कोई भी चीज़ शब्द नहीं है।


व्युत्पत्तियाँ:
व्युत्पत्तियाँ: व्युत्पत्ति निम्नलिखित नियमों द्वारा पुनरावर्ती रूप से परिभाषित शब्दों का सीमित अनुक्रम है, जहां α और ι वर्णमाला {S, K, I, (, )} पर शब्द हैं जबकि β, γ और δ शब्द हैं:
व्युत्पत्ति निम्नलिखित नियमों द्वारा पुनरावर्ती रूप से परिभाषित शब्दों का सीमित अनुक्रम है (जहां α और ι वर्णमाला {S, K, I, (, )} पर शब्द हैं जबकि β, γ और δ शब्द हैं):
# यदि Δ, α(Iβ)ι रूप की अभिव्यक्ति में समाप्त होने वाली व्युत्पत्ति है, तो Δ के बाद αβι शब्द व्युत्पत्ति है।
# यदि Δ, α(Iβ)ι रूप की अभिव्यक्ति में समाप्त होने वाली व्युत्पत्ति है, तो Δ के बाद αβι शब्द व्युत्पत्ति है।
# यदि Δ, α((Kβ)γ)ι रूप की अभिव्यक्ति में समाप्त होने वाली व्युत्पत्ति है, तो Δ के बाद αβι शब्द व्युत्पत्ति है।
# यदि Δ, α((Kβ)γ)ι रूप की अभिव्यक्ति में समाप्त होने वाली व्युत्पत्ति है, तो Δ के बाद αβι शब्द व्युत्पत्ति है।
# यदि Δ, α(((Sβ)γ)δ)ι रूप की अभिव्यक्ति में समाप्त होने वाली व्युत्पत्ति है, तो Δ के बाद α((βδ)(γδ))ι शब्द व्युत्पत्ति है।
# यदि Δ, α(((Sβ)γ)δ)ι रूप की अभिव्यक्ति में समाप्त होने वाली व्युत्पत्ति है, तो Δ के बाद α((βδ)(γδ))ι शब्द व्युत्पत्ति है।
यह मानते हुए कि किसी अनुक्रम को आरंभ करने के लिए वैध व्युत्पत्ति है, इसे इन नियमों का उपयोग करके बढ़ाया जा सकता है। लंबाई 1 की सभी व्युत्पत्तियाँ वैध व्युत्पत्तियाँ हैं।
यह मानते हुए कि किसी अनुक्रम को आरंभ करने के लिए वैध व्युत्पत्ति है, इसे इन नियमों का उपयोग करके बढ़ाया जा सकता है। इसकी लंबाई 1 की सभी व्युत्पत्तियाँ वैध व्युत्पत्तियाँ विभक्त करती हैं।


==पुनरावर्ती पैरामीटर पास करना और उद्धृत करना==
==पुनरावर्ती पैरामीटर पास करना और उद्धृत करना==


;{{nobold|1=K=λq.λi.q}} : q को उद्धृत करता है और i को अनदेखा करता है
;{{nobold|1=K=λq.λi.q}} : q को उद्धृत करता है और I को अप्रत्यक्ष करता है


;{{nobold|1=S=λx.λy.λz.((xz)(yz))}}: एक बाइनरी ट्री बनाता है जो पैरामीटर रूट से शाखाओं तक प्रवाहित हो सकता है और पहचानFunc=((SK)K) द्वारा पढ़ा जा सकता है या Kq का उपयोग करके उद्धृत लैम्ब्डा q पढ़ा जा सकता है।
;{{nobold|1=S=λx.λy.λz.((xz)(yz))}}: यह एक बाइनरी ट्री बनाता है, जो पैरामीटर रूट से शाखाओं तक प्रवाहित हो सकता है और इसकी पहचान Func=((SK)K) द्वारा पढ़ा जा सकता है या Kq का उपयोग करके उद्धृत लैम्ब्डा q पढ़ा जा सकता है।


==एसकेआई अभिव्यक्ति==
==SKI अभिव्यक्ति==


===स्वयं-अनुप्रयोग और पुनरावर्तन===
===स्वयं-अनुप्रयोग और पुनरावर्तन===
Line 60: Line 59:
: SIIα = Iα(Iα) = αα
: SIIα = Iα(Iα) = αα


इसे यू कॉम्बिनेटर के नाम से जाना जाता है। इसका दिलचस्प गुण यह है कि इसका स्व-प्रयोग अपरिवर्तनीय है:
इसे U कॉम्बिनेटर के नाम से जाना जाता है। इसका गुण यह है कि इसका स्व-प्रयोग अपरिवर्तनीय है:
: SII(SII) = I(SII)(I(SII)) = SII(I(SII)) = SII(SII)
: SII(SII) = I(SII)(I(SII)) = SII(I(SII)) = SII(SII)


दूसरी बात यह है कि यह किसी को फ़ंक्शन लिखने की अनुमति देता है जो चीज़ को दूसरी चीज़ के स्वयं अनुप्रयोग पर लागू करता है:
दूसरी बात यह है कि यह किसी को फलन लिखने की अनुमति देता है जो चीज़ को दूसरी चीज़ के स्वयं अनुप्रयोग पर लागू करता है:
: (S(Kα)(SII))β = Kαβ(SIIβ) = α(Iβ(Iβ)) = α(ββ)
: (S(Kα)(SII))β = Kαβ(SIIβ) = α(Iβ(Iβ)) = α(ββ)


इस फ़ंक्शन का उपयोग [[ प्रत्यावर्तन |प्रत्यावर्तन]] प्राप्त करने के लिए किया जा सकता है। यदि β वह फ़ंक्शन है जो α को किसी अन्य चीज़ के स्वयं अनुप्रयोग पर लागू करता है,
इस फलन का उपयोग [[ प्रत्यावर्तन |प्रत्यावर्तन]] प्राप्त करने के लिए किया जा सकता है। यदि β वह फलन है जो α को किसी अन्य चीज़ के स्वयं अनुप्रयोग पर लागू करता है,
: β = S(Kα)(SII)
: β = S(Kα)(SII)
तो इस β का स्व-अनुप्रयोग उस α का निश्चित बिंदु है:
तो इस β का स्व-अनुप्रयोग उस α का निश्चित बिंदु है:
: SIIβ = ββ = α(ββ) = α(α(ββ)) = <math>\ldots</math>
: SIIβ = ββ = α(ββ) = α(α(ββ)) = <math>\ldots</math>
यदि α कुछ ρ और ν के लिए αρν द्वारा गणना किए गए कम्प्यूटेशनल चरण को व्यक्त करता है, जो मानता है कि ρν' शेष गणना को व्यक्त करता है (कुछ ν' के लिए जो α ν से गणना करेगा), तो इसका निश्चित बिंदु ββ संपूर्ण पुनरावर्ती गणना को व्यक्त करता है, क्योंकि शेष गणना कॉल के लिए समान फ़ंक्शन ββ का उपयोग करना (ββν = α(ββ)ν के साथ) रिकर्सन की परिभाषा है: ρν' = ββν' = α(ββ)ν' = ...विचलन से बचने के लिए α को किसी आधार मामले पर रुकने और पुनरावर्ती कॉल न करने के लिए किसी प्रकार की सशर्तता का उपयोग करना होगा।
यदि α कुछ ρ और ν के लिए αρν द्वारा गणना किए गए कम्प्यूटरीकृत भाग को व्यक्त करता है, जो यह मानता है कि ρν' शेष गणना को व्यक्त करता है, इसका ν' मान के लिए जो α ν से गणना करेगा, तो इसका निश्चित बिंदु ββ संपूर्ण पुनरावर्ती गणना को व्यक्त करता है, क्योंकि शेष गणना कॉल के लिए समान फलन ββ का उपयोग करना ββν = α(ββ)ν के साथ रिकर्सन की परिभाषा ρν' = ββν' = α(ββ)ν' = ... को व्यक्त करता है। इसके विचलन से बचने के लिए α को किसी आधार पर इस स्थिति के लिए रुकने और पुनरावर्ती कॉल न करने के लिए किसी प्रकार की सशर्तता का उपयोग करना आवश्यक होता हैं।


इसे औपचारिक रूप दिया जा सकता है
इसे औपचारिक रूप दिया जा सकता है
: β = 'H'α = 'S'('K'α)('SII') = 'S'('KS')'K'α('SII') = 'S'('S'(' केएस')'के')('के'('एसआईआई')) α
: β = 'H'α = 'S'('K'α)('SII') = 'S'('KS')'K'α('SII') = 'S'('S'(' केS')'K')('K'('Sआईआई')) α
जैसा
जैसा
: 'Y'α = 'SII'β = 'SII'('H'α) = 'S'('K'('SII'))'H' α = 'S'('K'('SII') ))('एस'('एस'('केएस')'के')('के'('एसआईआई'))) α
: 'Y'α = 'SII'β = 'SII'('H'α) = 'S'('K'('SII'))'H' α = 'S'('K'('SII') ))('S'('S'('केS')'K')('K'('Sआईआई'))) α
जो हमें 'Y' कॉम्बिनेटर का फिक्स्ड-पॉइंट_कॉम्बिनेटर#अन्य_फिक्स्ड-पॉइंट_कॉम्बिनेटर देता है।
जो हमें 'Y' कॉम्बिनेटर का फिक्स्ड-पॉइंट_कॉम्बिनेटर जिसके लिए अन्य_फिक्स्ड-पॉइंट_कॉम्बिनेटर देता है।


===उलट अभिव्यक्ति===
===व्युत्क्रम अभिव्यक्ति===
S(K(SI))K निम्नलिखित दो शब्दों को उलट देता है:
S(K(SI))K निम्नलिखित दो शब्दों को उलट देता है:
: S(K(SI))Kαβ
:: '''S'''('''K'''('''SI'''))'''K'''αβ
: K(SI)α()β →
:: '''K'''('''SI''')α('''K'''α)β →
: SI()β →
:: '''SI'''('''K'''α)β →
: (Kαβ) →
:: '''I'''β('''K'''αβ) →
: इबा
:: '''I'''βα
: बहुत खूब
:: βα


===[[बूलियन तर्क]]===
===[[बूलियन तर्क]]===
एसकेआई कॉम्बिनेटर कैलकुलस बूलियन तर्क को यदि-तब-अन्यथा संरचना के रूप में भी कार्यान्वित कर सकता है। यदि-तब-अन्यथा संरचना में बूलियन अभिव्यक्ति शामिल होती है जो या तो सत्य ('टी') या गलत ('एफ') और दो तर्क होते हैं, जैसे:
SKI कॉम्बिनेटर कैलकुलस बूलियन तर्क को if-then-else संरचना के रूप में भी कार्यान्वित कर सकता है। if-then-else संरचना में बूलियन अभिव्यक्ति सम्मिलित होती है जो या तो सत्य ('T') या गलत ('F') और दो तर्क होते हैं, जैसे:
: 'T'xy = x
: 'T'XY = x
और
और
: 'F'xy = y
: 'F'XY = Y


कुंजी दो बूलियन अभिव्यक्तियों को परिभाषित करने में है। पहला हमारे बुनियादी कॉम्बिनेटरों में से की तरह ही काम करता है:
कुंजी दो बूलियन अभिव्यक्तियों को परिभाषित करने में है। इसका पहला स्वरूप हमारे मौलिक कॉम्बिनेटरों की तरह कार्य करता है:
: 'टी' = 'के'
: 'T' = 'K'
: 'K'xy = x
: 'K'XY = x


दूसरा भी काफी सरल है:
इसके लिए दूसरा मान भी अत्यधिक सरल है:
: 'एफ' = 'एसके'
: 'F' = 'SK'
: 'SK'xy = 'K'y(xy) = y
: 'SK'XY = 'K'Y(XY) = Y


एक बार सत्य और असत्य परिभाषित हो जाने के बाद, सभी बूलियन तर्क को यदि-तब-अन्यथा संरचनाओं के संदर्भ में कार्यान्वित किया जा सकता है।
एक बार सत्य और असत्य परिभाषित हो जाने के पश्चात सभी बूलियन तर्क को if-then-else संरचनाओं के संदर्भ में कार्यान्वित किया जा सकता है।


बूलियन 'NOT' (जो किसी दिए गए बूलियन के विपरीत रिटर्न देता है) if-then-else संरचना के समान काम करता है, जिसमें 'F' और 'T' दूसरे और तीसरे मान होते हैं, इसलिए इसे पोस्टफ़िक्स ऑपरेशन के रूप में कार्यान्वित किया जा सकता है :
बूलियन 'NOT' जो किसी दिए गए बूलियन के विपरीत रिटर्न देता है, if-then-else संरचना के समान काम करता है, जिसमें 'F' और 'T' दूसरे और तीसरे मान होते हैं, इसलिए इसे पोस्टफ़िक्स ऑपरेशन के रूप में कार्यान्वित किया जा सकता है :
: 'नहीं' = ('एफ')('टी') = ('एसके')('के')
: '''NOT''' = ('''F''')('''T''') = ('''SK''')('''K''')
यदि इसे यदि-तब-अन्यथा संरचना में रखा जाता है, तो यह दिखाया जा सकता है कि इसका अपेक्षित परिणाम है
यदि इसे if-then-else संरचना में रखा जाता है, तो यह दिखाया जा सकता है कि इसका अपेक्षित परिणाम है
: ('टी')'नहीं' = 'टी'('एफ')('टी') = 'एफ'
:: ('''T''')'''NOT''' = '''T'''('''F''')('''T''') = '''F'''
: ('एफ')'नहीं' = 'एफ'('एफ')('टी') = 'टी'
:: ('''F''')'''NOT''' = '''F'''('''F''')('''T''') = '''T'''


बूलियन 'OR' (जो 'T' लौटाता है यदि इसके आसपास के दो बूलियन मानों में से कोई भी 'T' है) दूसरे मान के रूप में 'T' के साथ if-then-else संरचना के समान काम करता है, इसलिए इसे इस प्रकार कार्यान्वित किया जा सकता है इन्फिक्स ऑपरेशन:
बूलियन 'OR' जो 'T' लौटाता है, यदि इसके आसपास के दो बूलियन मानों में से कोई भी 'T' है, इसके दूसरे मान को 'T' के साथ if-then-else संरचना के समान काम करता है, इसलिए इसे इस प्रकार कार्यान्वित किया जा सकता है इन्फिक्स ऑपरेशन:
: 'या' = 'टी' = 'के'
: '''OR''' = '''T''' = '''K'''
यदि इसे यदि-तब-अन्यथा संरचना में रखा जाता है, तो यह दिखाया जा सकता है कि इसका अपेक्षित परिणाम है:
यदि इसे if-then-else संरचना में रखा जाता है, तो यह दिखाया जा सकता है कि इसका अपेक्षित परिणाम है:
: ('टी')'या'('टी') = 'टी'('टी')('टी') = 'टी'
:: ('''T''')'''OR'''('''T''') = '''T'''('''T''')('''T''') = '''T'''
: ('टी')'या'('एफ') = 'टी'('टी')('एफ') = 'टी'
:: ('''T''')'''OR'''('''F''') = '''T'''('''T''')('''F''') = '''T'''
: ('एफ')'या'('टी') = 'एफ'('टी')('टी') = 'टी'
:: ('''F''')'''OR'''('''T''') = '''F'''('''T''')('''T''') = '''T'''
: ('एफ')'या'('एफ') = 'एफ'('टी')('एफ') = 'एफ'
:: ('''F''')'''OR'''('''F''') = '''F'''('''T''')('''F''') = '''F'''


बूलियन 'AND' (जो 'T' लौटाता है यदि इसके आसपास के दो बूलियन मान 'T' हैं) तीसरे मान के रूप में 'F' के साथ if-then-else संरचना के समान काम करता है, इसलिए इसे इस प्रकार कार्यान्वित किया जा सकता है पोस्टफ़िक्स ऑपरेशन:
बूलियन 'AND' जो 'T' लौटाता है यदि इसके आसपास के दो बूलियन मान 'T' हैं, जो तीसरे मान के रूप में 'F' के साथ if-then-else संरचना के समान काम करता है, इसलिए इसे इस प्रकार कार्यान्वित किया जा सकता है, इसके लिए पोस्टफ़िक्स ऑपरेशन इस प्रकार हैं:
: 'और' = 'एफ' = 'एसके'
: '''AND''' = '''F''' = '''SK'''
यदि इसे यदि-तब-अन्यथा संरचना में रखा जाता है, तो यह दिखाया जा सकता है कि इसका अपेक्षित परिणाम है:
यदि इसे if-then-else संरचना में रखा जाता है, तो यह दिखाया जा सकता है कि इसका अपेक्षित परिणाम है:
: ('टी')('टी')'और' = 'टी'('टी')('एफ') = 'टी'
:: ('''T''')('''T''')'''AND''' = '''T'''('''T''')('''F''') = '''T'''
: ('टी')('एफ')'और' = 'टी'('एफ')('एफ') = 'एफ'
:: ('''T''')('''F''')'''AND''' = '''T'''('''F''')('''F''') = '''F'''
: ('एफ')('टी')'और' = 'एफ'('टी')('एफ') = 'एफ'
:: ('''F''')('''T''')'''AND''' = '''F'''('''T''')('''F''') = '''F'''
: ('एफ')('एफ')'और' = 'एफ'('एफ')('एफ') = 'एफ'
:: ('''F''')('''F''')'''AND''' = '''F'''('''F''')('''F''') = '''F'''


क्योंकि यह SKI नोटेशन के संदर्भ में 'T', 'F', 'NOT' (पोस्टफ़िक्स ऑपरेटर के रूप में), 'OR' (इन्फिक्स ऑपरेटर के रूप में), और 'AND' (पोस्टफ़िक्स ऑपरेटर के रूप में) को परिभाषित करता है, इससे यह साबित होता है SKI प्रणाली बूलियन तर्क को पूरी तरह से व्यक्त कर सकती है।
क्योंकि यह SKI नोटेशन के संदर्भ में 'T', 'F', 'NOT' पोस्टफ़िक्स ऑपरेटर के रूप में, 'OR' इन्फिक्स ऑपरेटर के रूप में, और 'AND' पोस्टफ़िक्स ऑपरेटर के रूप को परिभाषित करता है, इससे यह प्रमाणित होता है SKI प्रणाली बूलियन तर्क को पूरी तरह से व्यक्त कर सकती है।


चूँकि SKI कैलकुलस S-K आधार का कॉम्बिनेटरी लॉजिक#पूर्णता है, इसलिए 'NOT', 'OR' और 'AND' को उपसर्ग ऑपरेटरों के रूप में व्यक्त करना भी संभव है:
चूँकि SKI कैलकुलस S-K आधार का कॉम्बिनेटरी लॉजिक पूर्णता है, इसलिए 'NOT', 'OR' और 'AND' को उपसर्ग ऑपरेटरों के रूप में व्यक्त करना भी संभव है:
: 'नहीं' = 'एस'('एसआई'('केएफ'))('केटी') (जैसा कि 'एस'('एसआई'('केएफ'))('केटी')x = 'एसआई'(' KF')x('KT'x) = 'I'x('KF'x)'T' = x'FT')
:: '''NOT''' = '''S'''('''SI'''('''KF'''))('''KT''') (as '''S'''('''SI'''('''KF'''))('''KT''')''x'' = '''SI'''('''KF''')''x''('''KT'''''x'') = '''I'''''x''('''KF'''''x'')'''T''' = ''x'''''FT''')
: 'OR' = 'SI'('KT') (जैसा कि 'SI'('KT')xy = 'I'x('KT'x)y = x'T'y)
:: '''OR''' = '''SI'''('''KT''') (as '''SI'''('''KT''')''xy'' = '''I'''''x''('''KT'''''x'')''y'' = ''x'''''T'''''y'')
: 'AND' = 'SS'('K'('KF')) (as 'SS'('K'('KF'))xy = 'S'x('K'('KF')x) y = xy('KF'y) = xy'F')
:: '''AND''' = '''SS'''('''K'''('''KF''')) (as '''SS'''('''K'''('''KF'''))''xy'' = '''S'''''x''('''K'''('''KF''')''x'')''y'' = ''xy''('''KF'''''y'') = ''xy'''''F''')


==अंतर्ज्ञानवादी तर्क से संबंध==
==अंतर्ज्ञानवादी तर्क से संबंध==
Line 138: Line 137:
:{{math|'''AS''': (''A'' &rarr; (''B'' &rarr; ''C'')) &rarr; ((''A'' &rarr; ''B'') &rarr; (''A'' &rarr; ''C''))}}.
:{{math|'''AS''': (''A'' &rarr; (''B'' &rarr; ''C'')) &rarr; ((''A'' &rarr; ''B'') &rarr; (''A'' &rarr; ''C''))}}.


फ़ंक्शन एप्लिकेशन नियम [[ मूड सेट करना |मूड सेट करना]] से मेल खाता है:
फलन एप्लिकेशन नियम [[ मूड सेट करना |मूड सेट करना]] से मेल खाता है:


:{{math|'''MP'''}}: से {{mvar|A}} और {{math|''A'' &rarr; ''B''}}, अनुमान लगाएं {{mvar|B}}.
:{{math|'''MP'''}}: से {{mvar|A}} और {{math|''A'' &rarr; ''B''}}, अनुमान लगाएं {{mvar|B}}.


[[अंतर्ज्ञानवादी तर्क]] के निहितार्थ खंड के लिए स्वयंसिद्ध एके और एएस, और नियम एमपी पूर्ण हैं। संयोजनात्मक तर्क को मॉडल के रूप में रखने के लिए:
[[अंतर्ज्ञानवादी तर्क]] के निहितार्थ खंड के लिए स्वयंसिद्ध AK और AS, और नियम एमपी पूर्ण हैं। संयोजनात्मक तर्क को मॉडल के रूप में रखने के लिए:
*[[शास्त्रीय तर्क]] के [[निहितार्थ प्रस्तावात्मक कलन]] के लिए, बहिष्कृत मध्य के नियम के संयोजन एनालॉग की आवश्यकता होगी, ''अर्थात्'', पीयर्स का नियम;
*[[शास्त्रीय तर्क|मौलिक तर्क]] के [[निहितार्थ प्रस्तावात्मक कलन]] के लिए, बहिष्कृत मध्य के नियम के संयोजन एनालॉग की आवश्यकता होगी, ''अर्थात्'', पीयर्स का नियम;
*भावात्मक तर्क, भावात्मक अभिगृहीत के संयोजनात्मक एनालॉग की आवश्यकता होगी {{math|'''F''' &rarr; ''A''}}.
*भावात्मक तर्क, भावात्मक अभिगृहीत के संयोजनात्मक एनालॉग {{math|'''F''' &rarr; ''A''}}. की आवश्यकता होगी।


कॉम्बिनेटर के प्रकार और संबंधित तार्किक सिद्धांतों के बीच यह संबंध करी-हावर्ड आइसोमोर्फिज्म का उदाहरण है।
कॉम्बिनेटर के प्रकार और संबंधित तार्किक सिद्धांतों के बीच यह संबंध करी-हावर्ड आइसोमोर्फिज्म का उदाहरण है।
Line 150: Line 149:
== कमी के उदाहरण ==
== कमी के उदाहरण ==


कटौती करने के कई तरीके हो सकते हैं। सभी समान हैं, जब तक आप संचालन के क्रम को नहीं तोड़ते
इसमें कमी करने के कई तरीके हो सकते हैं। सभी यदि समान हैं, जब तक आप संचालन के क्रम को नहीं तोड़ते हैं-


* <math>\textrm{SKI(KIS)}</math>
* <math>\textrm{SKI(KIS)}</math>
Line 178: Line 177:


==बाहरी संबंध==
==बाहरी संबंध==
* O'Donnell, Mike "[http://people.cs.uchicago.edu/~odonnell/Teacher/Lectures/Formal_Organization_of_Knowledge/Examples/combinator_calculus/ The SKI Combinator Calculus as a Universal System.]"
* O'Donnell, Mike "[http://people.cs.uchicago.edu/~odonnell/Teacher/Lectures/Formal_Organization_of_Knowledge/Examples/combinator_calculus/ The SKI Combinator Calculus as a Universal SYstem.]"
* Keenan, David C. (2001) "[http://dkeenan.com/Lambda/index.htm To Dissect a Mockingbird.]"
* Keenan, David C. (2001) "[http://dkeenan.com/Lambda/index.htm To Dissect a Mockingbird.]"
* Rathman, Chris, "[http://www.angelfire.com/tx4/cus/combinator/birds.html Combinator Birds.]"
* Rathman, Chris, "[http://www.angelfire.com/tx4/cus/combinator/birds.html Combinator Birds.]"
* "[https://web.archive.org/web/20081029051502/http://cstein.kings.cam.ac.uk/~chris/combinators.html "Drag 'n' Drop Combinators (Java Applet).]"
* "[https://web.archive.org/web/20081029051502/http://cstein.kings.cam.ac.uk/~chris/combinators.html "Drag 'n' Drop Combinators (Java Applet).]"
* [http://www.lfcs.inf.ed.ac.uk/reports/89/ECS-LFCS-89-85/ A Calculus of Mobile Processes, Part I] (PostScript) (by Milner, Parrow, and Walker) shows a scheme for ''combinator [[graph reduction]]'' for the SKI calculus in pages 25–28.
* [http://www.lfcs.inf.ed.ac.uk/reports/89/ECS-LFCS-89-85/ A Calculus of Mobile Processes, Part I] (PostScript) (bY Milner, Parrow, and Walker) shows a scheme for ''combinator [[graph reduction]]'' for the SKI calculus in pages 25–28.
* the [https://web.archive.org/web/20131014210033/http://www.urbit.org/2013/08/22/Chapter-2-nock.html Nock programming language] may be seen as an assembly language based on SK combinator calculus in the same way that traditional assembly language is based on Turing machines. Nock instruction 2 (the "Nock operator") is the S combinator and Nock instruction 1 is the K combinator. The other primitive instructions in Nock (instructions 0,3,4,5, and the pseudo-instruction "implicit cons") are not necessary for universal computation, but make programming more convenient by providing facilities for dealing with binary tree data structures and arithmetic; Nock also provides 5 more instructions (6,7,8,9,10) that could have been built out of these primitives.
* the [https://web.archive.org/web/20131014210033/http://www.urbit.org/2013/08/22/Chapter-2-nock.html Nock programming language] maY be seen as an assemblY language based on SK combinator calculus in the same waY that traditional assemblY language is based on Turing machines. Nock instruction 2 (the "Nock operator") is the S combinator and Nock instruction 1 is the K combinator. The other primitive instructions in Nock (instructions 0,3,4,5, and the pseudo-instruction "implicit cons") are not necessarY for universal computation, but make programming more convenient bY providing facilities for dealing with binarY tree data structures and arithmetic; Nock also provides 5 more instructions (6,7,8,9,10) that could have been built out of these primitives.
[[Category: लैम्ब्डा कैलकुलस]] [[Category: संयोजनात्मक तर्क]]  
[[Category: लैम्ब्डा कैलकुलस]] [[Category: संयोजनात्मक तर्क]]  



Revision as of 16:02, 16 July 2023

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

लैम्ब्डा कैलकुलस में सभी ऑपरेशनों को कॉम्बिनेटरी लॉजिक S-के आधार के पूर्ण स्वरूप के माध्यम से SKI कैलकुलस में द्विआधारी ट्री के रूप में एन्कोड किया जा सकता है, जिनकी पत्तियाँ तीन प्रतीकों S, के, और आई में से हैं, जिन्हें कॉम्बिनेटर कहा जाता है।

संकेतन

यद्यपि इस प्रणाली में उपयोग की जाने वाली विभिन्न वस्तुओं के सबसे औपचारिक प्रतिनिधित्व के लिए बाइनरी ट्री की आवश्यकता होती है, इसके कारण सरल टाइपसेटिंग के लिए उन्हें अधिकांशतः कोष्ठक में अभिव्यक्ति के रूप में दर्शाया जाता है, जिस ट्री का वे प्रतिनिधित्व करते हैं उसके लिए शॉर्टहैंड के रूप में उपयोग करते हैं। इस प्रकार किसी भी सब-ट्री को कोष्ठक में रखा जा सकता है, अपितु अधिकांशतः केवल दाहिनी ओर के सब-ट्री को कोष्ठक में रखा जाता है, किसी भी अकोष्ठकीकृत अनुप्रयोगों के लिए बाईं ओर की संबद्धता इसमें निहित होती है। उदाहरण के लिए, ISK का अर्थ है ((IS)K), इस नोटेशन का उपयोग करते हुए, ट्री जिसका बायां सब-ट्री ट्री केS है, और जिसका दायां सब-ट्री ट्री SK है, उसे केS(SK) के रूप में लिखा जा सकता है। यदि इसके लिए अधिक स्पष्टता वांछित होती है, तो निहित कोष्ठकों को भी ((केS)(SK)) के रूप में सम्मिलित किया जा सकता है।

अनौपचारिक विवरण

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

'मूल्यांकन' ऑपरेशन को इस प्रकार परिभाषित किया गया है:

(x, Y, और z 'S', 'K', और 'I' फलन से बनी अभिव्यक्तियों का प्रतिनिधित्व करते हैं, और इसके फलस्वरूप प्राप्त होने वाले मान को निर्धारित भी करते हैं):

'I' अपना तर्क लौटाता है:

'I'X = X

'K', जब किसी तर्क x पर लागू किया जाता है, तो एक-तर्क स्थिर फलन 'K'Y प्राप्त होता है, जो किसी भी तर्क पर लागू होने पर, x लौटाता है:

'K'XY = x

'S' प्रतिस्थापन संचालिका को प्रदर्शित करता है। यह तीन तर्क लेता है और फिर पहले तर्क को तीसरे पर लागू करता है, जिसे फिर तीसरे पर लागू दूसरे तर्क के परिणाम पर लागू किया जाता है। और स्पष्टता से:

'S'XYz = xz(Yz)

उदाहरण के लिए उक्त गणना के आधार पर 'SKSK' 'S'-नियम द्वारा 'केके'('SK') का मूल्यांकन करता है। फिर यदि हम 'केके' ('SK') का मूल्यांकन करते हैं, तो हमें 'K'-नियम से 'K' मिलता है। चूँकि कोई और नियम लागू नहीं किया जा सकता हैं जिसके द्वारा यह गणना यहीं रुक जाती है।

सभी ट्री x और सभी ट्री Y के लिए, 'SK'XY सदैव दो चरणों में Y का मूल्यांकन करेगा, इस प्रकार 'K'Y(XY) = Y, इसलिए 'SK'XY के मूल्यांकन का अंतिम परिणाम सदैव Y के मूल्यांकन के परिणाम के बराबर होगा। इस प्रकार हम कहते हैं कि 'SK'X और 'I' कार्यात्मक रूप से समतुल्य हैं क्योंकि किसी भी Y पर लागू होने पर वे सदैव ही परिणाम देते हैं।

इन परिभाषाओं से यह दिखाया जा सकता है कि SK कैलकुलस न्यूनतम प्रणाली के समान नहीं है जो लैम्ब्डा कैलकुलस की गणना पूर्ण रूप से कर सकती है, क्योंकि किसी भी अभिव्यक्ति में 'I' की सभी घटनाओं को ('SKके') या ('SKS') द्वारा प्रतिस्थापित किया जा सकता है। इस प्रकार 'SK' जो भी हो और परिणामी अभिव्यक्ति समान परिणाम देती हैं। इसके आधार पर 'I' केवल वाक्यात्मक शर्करा को प्रदर्शित करता है। चूँकि 'I' वैकल्पिक है, इसलिए सिस्टम को SK कैलकुलस या SK कॉम्बिनेटर कैलकुलस भी कहा जाता है।

केवल (अनुचित) कॉम्बिनेटर का उपयोग करके संपूर्ण सिस्टम को परिभाषित करना संभव है। उदाहरण क्रिस बार्कर का इओटा और जोट कॉम्बिनेटर है, जिसे 'S' और 'K' के संदर्भ में निम्नानुसार व्यक्त किया जा सकता है:

ιx = x'SK'

आईओटा कॉम्बिनेटर से 'S', 'K' और 'I' का पुनर्निर्माण संभव है। इस प्रकार ι को स्वयं पर लागू करने से ιι = ι'SK' = 'SSKK' = 'SK'('KK') प्राप्त होता है जो कार्यात्मक रूप से 'I' के समतुल्य है। इस प्रकार 'K' का निर्माण 'I' में दो बार ι लगाने से किया जा सकता है, जो स्वयं पर ι लगाने के बराबर है: इसके आधार पर ι(ι(ιι)) = ι(ιι'SK') = ι('ISK') = ι ('SK') = 'SKSK' = 'K'। ι को बार और लगाने पर ι(ι(ι(ιι))) = ι'K' = 'KSK' = 'S' प्राप्त होता है।

औपचारिक परिभाषा

इस प्रणाली में शब्दों और व्युत्पत्तियों को अधिक औपचारिक रूप से परिभाषित किया जा सकता है:

शर्तें: पदों के समुच्चय T को निम्नलिखित नियमों द्वारा पुनरावर्ती रूप से परिभाषित किया गया है।

  1. S, K, और I पद हैं।
  2. यदि τ1 और T2 पद हैं, तो (τ1τ2) शब्द है.
  3. यदि पहले दो नियमों के अनुसार ऐसा होना आवश्यक न हो तो कोई भी चीज़ शब्द नहीं है।

व्युत्पत्तियाँ: व्युत्पत्ति निम्नलिखित नियमों द्वारा पुनरावर्ती रूप से परिभाषित शब्दों का सीमित अनुक्रम है, जहां α और ι वर्णमाला {S, K, I, (, )} पर शब्द हैं जबकि β, γ और δ शब्द हैं:

  1. यदि Δ, α(Iβ)ι रूप की अभिव्यक्ति में समाप्त होने वाली व्युत्पत्ति है, तो Δ के बाद αβι शब्द व्युत्पत्ति है।
  2. यदि Δ, α((Kβ)γ)ι रूप की अभिव्यक्ति में समाप्त होने वाली व्युत्पत्ति है, तो Δ के बाद αβι शब्द व्युत्पत्ति है।
  3. यदि Δ, α(((Sβ)γ)δ)ι रूप की अभिव्यक्ति में समाप्त होने वाली व्युत्पत्ति है, तो Δ के बाद α((βδ)(γδ))ι शब्द व्युत्पत्ति है।

यह मानते हुए कि किसी अनुक्रम को आरंभ करने के लिए वैध व्युत्पत्ति है, इसे इन नियमों का उपयोग करके बढ़ाया जा सकता है। इसकी लंबाई 1 की सभी व्युत्पत्तियाँ वैध व्युत्पत्तियाँ विभक्त करती हैं।

पुनरावर्ती पैरामीटर पास करना और उद्धृत करना

K=λq.λi.q
q को उद्धृत करता है और I को अप्रत्यक्ष करता है
S=λx.λy.λz.((xz)(yz))
यह एक बाइनरी ट्री बनाता है, जो पैरामीटर रूट से शाखाओं तक प्रवाहित हो सकता है और इसकी पहचान Func=((SK)K) द्वारा पढ़ा जा सकता है या Kq का उपयोग करके उद्धृत लैम्ब्डा q पढ़ा जा सकता है।

SKI अभिव्यक्ति

स्वयं-अनुप्रयोग और पुनरावर्तन

SII अभिव्यक्ति है जो तर्क लेती है और उस तर्क को स्वयं पर लागू करती है:

SIIα = Iα(Iα) = αα

इसे U कॉम्बिनेटर के नाम से जाना जाता है। इसका गुण यह है कि इसका स्व-प्रयोग अपरिवर्तनीय है:

SII(SII) = I(SII)(I(SII)) = SII(I(SII)) = SII(SII)

दूसरी बात यह है कि यह किसी को फलन लिखने की अनुमति देता है जो चीज़ को दूसरी चीज़ के स्वयं अनुप्रयोग पर लागू करता है:

(S(Kα)(SII))β = Kαβ(SIIβ) = α(Iβ(Iβ)) = α(ββ)

इस फलन का उपयोग प्रत्यावर्तन प्राप्त करने के लिए किया जा सकता है। यदि β वह फलन है जो α को किसी अन्य चीज़ के स्वयं अनुप्रयोग पर लागू करता है,

β = S(Kα)(SII)

तो इस β का स्व-अनुप्रयोग उस α का निश्चित बिंदु है:

SIIβ = ββ = α(ββ) = α(α(ββ)) =

यदि α कुछ ρ और ν के लिए αρν द्वारा गणना किए गए कम्प्यूटरीकृत भाग को व्यक्त करता है, जो यह मानता है कि ρν' शेष गणना को व्यक्त करता है, इसका ν' मान के लिए जो α ν से गणना करेगा, तो इसका निश्चित बिंदु ββ संपूर्ण पुनरावर्ती गणना को व्यक्त करता है, क्योंकि शेष गणना कॉल के लिए समान फलन ββ का उपयोग करना ββν = α(ββ)ν के साथ रिकर्सन की परिभाषा ρν' = ββν' = α(ββ)ν' = ... को व्यक्त करता है। इसके विचलन से बचने के लिए α को किसी आधार पर इस स्थिति के लिए रुकने और पुनरावर्ती कॉल न करने के लिए किसी प्रकार की सशर्तता का उपयोग करना आवश्यक होता हैं।

इसे औपचारिक रूप दिया जा सकता है

β = 'H'α = 'S'('K'α)('SII') = 'S'('KS')'K'α('SII') = 'S'('S'(' केS')'K')('K'('Sआईआई')) α

जैसा

'Y'α = 'SII'β = 'SII'('H'α) = 'S'('K'('SII'))'H' α = 'S'('K'('SII') ))('S'('S'('केS')'K')('K'('Sआईआई'))) α

जो हमें 'Y' कॉम्बिनेटर का फिक्स्ड-पॉइंट_कॉम्बिनेटर जिसके लिए अन्य_फिक्स्ड-पॉइंट_कॉम्बिनेटर देता है।

व्युत्क्रम अभिव्यक्ति

S(K(SI))K निम्नलिखित दो शब्दों को उलट देता है:

S(K(SI))Kαβ →
K(SI)α(Kα)β →
SI(Kα)β →
Iβ(Kαβ) →
Iβα →
βα

बूलियन तर्क

SKI कॉम्बिनेटर कैलकुलस बूलियन तर्क को if-then-else संरचना के रूप में भी कार्यान्वित कर सकता है। if-then-else संरचना में बूलियन अभिव्यक्ति सम्मिलित होती है जो या तो सत्य ('T') या गलत ('F') और दो तर्क होते हैं, जैसे:

'T'XY = x

और

'F'XY = Y

कुंजी दो बूलियन अभिव्यक्तियों को परिभाषित करने में है। इसका पहला स्वरूप हमारे मौलिक कॉम्बिनेटरों की तरह कार्य करता है:

'T' = 'K'
'K'XY = x

इसके लिए दूसरा मान भी अत्यधिक सरल है:

'F' = 'SK'
'SK'XY = 'K'Y(XY) = Y

एक बार सत्य और असत्य परिभाषित हो जाने के पश्चात सभी बूलियन तर्क को if-then-else संरचनाओं के संदर्भ में कार्यान्वित किया जा सकता है।

बूलियन 'NOT' जो किसी दिए गए बूलियन के विपरीत रिटर्न देता है, if-then-else संरचना के समान काम करता है, जिसमें 'F' और 'T' दूसरे और तीसरे मान होते हैं, इसलिए इसे पोस्टफ़िक्स ऑपरेशन के रूप में कार्यान्वित किया जा सकता है :

NOT = (F)(T) = (SK)(K)

यदि इसे if-then-else संरचना में रखा जाता है, तो यह दिखाया जा सकता है कि इसका अपेक्षित परिणाम है

(T)NOT = T(F)(T) = F
(F)NOT = F(F)(T) = T

बूलियन 'OR' जो 'T' लौटाता है, यदि इसके आसपास के दो बूलियन मानों में से कोई भी 'T' है, इसके दूसरे मान को 'T' के साथ if-then-else संरचना के समान काम करता है, इसलिए इसे इस प्रकार कार्यान्वित किया जा सकता है इन्फिक्स ऑपरेशन:

OR = T = K

यदि इसे if-then-else संरचना में रखा जाता है, तो यह दिखाया जा सकता है कि इसका अपेक्षित परिणाम है:

(T)OR(T) = T(T)(T) = T
(T)OR(F) = T(T)(F) = T
(F)OR(T) = F(T)(T) = T
(F)OR(F) = F(T)(F) = F

बूलियन 'AND' जो 'T' लौटाता है यदि इसके आसपास के दो बूलियन मान 'T' हैं, जो तीसरे मान के रूप में 'F' के साथ if-then-else संरचना के समान काम करता है, इसलिए इसे इस प्रकार कार्यान्वित किया जा सकता है, इसके लिए पोस्टफ़िक्स ऑपरेशन इस प्रकार हैं:

AND = F = SK

यदि इसे if-then-else संरचना में रखा जाता है, तो यह दिखाया जा सकता है कि इसका अपेक्षित परिणाम है:

(T)(T)AND = T(T)(F) = T
(T)(F)AND = T(F)(F) = F
(F)(T)AND = F(T)(F) = F
(F)(F)AND = F(F)(F) = F

क्योंकि यह SKI नोटेशन के संदर्भ में 'T', 'F', 'NOT' पोस्टफ़िक्स ऑपरेटर के रूप में, 'OR' इन्फिक्स ऑपरेटर के रूप में, और 'AND' पोस्टफ़िक्स ऑपरेटर के रूप को परिभाषित करता है, इससे यह प्रमाणित होता है SKI प्रणाली बूलियन तर्क को पूरी तरह से व्यक्त कर सकती है।

चूँकि SKI कैलकुलस S-K आधार का कॉम्बिनेटरी लॉजिक पूर्णता है, इसलिए 'NOT', 'OR' और 'AND' को उपसर्ग ऑपरेटरों के रूप में व्यक्त करना भी संभव है:

NOT = S(SI(KF))(KT) (as S(SI(KF))(KT)x = SI(KF)x(KTx) = Ix(KFx)T = xFT)
OR = SI(KT) (as SI(KT)xy = Ix(KTx)y = xTy)
AND = SS(K(KF)) (as SS(K(KF))xy = Sx(K(KF)x)y = xy(KFy) = xyF)

अंतर्ज्ञानवादी तर्क से संबंध

कॉम्बिनेटर K और S, भावनात्मक तर्क के दो प्रसिद्ध सिद्धांतों के अनुरूप हैं:

AK: A → (BA),
AS: (A → (BC)) → ((AB) → (AC)).

फलन एप्लिकेशन नियम मूड सेट करना से मेल खाता है:

MP: से A और AB, अनुमान लगाएं B.

अंतर्ज्ञानवादी तर्क के निहितार्थ खंड के लिए स्वयंसिद्ध AK और AS, और नियम एमपी पूर्ण हैं। संयोजनात्मक तर्क को मॉडल के रूप में रखने के लिए:

  • मौलिक तर्क के निहितार्थ प्रस्तावात्मक कलन के लिए, बहिष्कृत मध्य के नियम के संयोजन एनालॉग की आवश्यकता होगी, अर्थात्, पीयर्स का नियम;
  • भावात्मक तर्क, भावात्मक अभिगृहीत के संयोजनात्मक एनालॉग FA. की आवश्यकता होगी।

कॉम्बिनेटर के प्रकार और संबंधित तार्किक सिद्धांतों के बीच यह संबंध करी-हावर्ड आइसोमोर्फिज्म का उदाहरण है।

कमी के उदाहरण

इसमें कमी करने के कई तरीके हो सकते हैं। सभी यदि समान हैं, जब तक आप संचालन के क्रम को नहीं तोड़ते हैं-

यह भी देखें

संदर्भ

  1. Schönfinkel, M. (1924). "Über die Bausteine der mathematischen Logik". Mathematische Annalen. 92 (3–4): 305–316. doi:10.1007/BF01448013. S2CID 118507515. Translated by Stefan Bauer-Mengelberg as van Heijenoort, Jean, ed. (2002) [1967]. "On the building blocks of mathematical logic". A Source Book in Mathematical Logic 1879–1931. Harvard University Press. pp. 355–366. ISBN 9780674324497.
  2. Curry, Haskell Brooks (1930). "संयोजक तर्क की मूल बातें" [Foundations of combinatorial logic]. American Journal of Mathematics (in German). Johns Hopkins University Press. 52 (3): 509–536. doi:10.2307/2370619. JSTOR 2370619.{{cite journal}}: CS1 maint: unrecognized language (link)


बाहरी संबंध