चर्च एन्कोडिंग: Difference between revisions

From Vigyanwiki
No edit summary
No edit summary
Line 2: Line 2:
गणित में, चर्च एन्कोडिंग [[लैम्ब्डा कैलकुलस]] में डेटा और ऑपरेटरों का प्रतिनिधित्व करने का एक साधन है। चर्च अंक लैम्ब्डा संकेतन का उपयोग करते हुए प्राकृतिक संख्याओं का प्रतिनिधित्व करते हैं। विधि का नाम [[अलोंजो चर्च]] के नाम पर रखा गया है, जिसने सबसे पहले लैम्ब्डा कैलकुलस में डेटा को इस तरह से एनकोड किया था।
गणित में, चर्च एन्कोडिंग [[लैम्ब्डा कैलकुलस]] में डेटा और ऑपरेटरों का प्रतिनिधित्व करने का एक साधन है। चर्च अंक लैम्ब्डा संकेतन का उपयोग करते हुए प्राकृतिक संख्याओं का प्रतिनिधित्व करते हैं। विधि का नाम [[अलोंजो चर्च]] के नाम पर रखा गया है, जिसने सबसे पहले लैम्ब्डा कैलकुलस में डेटा को इस तरह से एनकोड किया था।


सामान्यतः अन्य संकेतन (जैसे पूर्णांक, बूलियन, जोड़े, सूचियाँ और टैग किए गए संघ) में आदिम माने जाने वाले शब्दों को चर्च एन्कोडिंग के अनुसार  उच्च-क्रम के कार्यों में मैप किया जाता है। [[चर्च-ट्यूरिंग थीसिस]] का दावा है कि किसी भी संगणनीय ऑपरेटर (और उसके संचालन) को चर्च एन्कोडिंग के अनुसार  प्रदर्शित किया जा सकता है।{{dubious|reason=The Church-Turing thesis is that lambda calculus is [[Turing complete]].|date=March 2022}} लैम्ब्डा कैलकुलस में एकमात्र आदिम डेटा प्रकार फ़ंक्शन है।
सामान्यतः अन्य संकेतन (जैसे पूर्णांक, बूलियन, जोड़े, सूचियाँ और टैग किए गए संघ) में आदिम माने जाने वाले शब्दों को चर्च एन्कोडिंग के अनुसार  उच्च-क्रम के कार्यों में मैप किया जाता है। [[चर्च-ट्यूरिंग थीसिस]] का दावा है कि किसी भी संगणनीय ऑपरेटर (और उसके संचालन) को चर्च एन्कोडिंग के अनुसार  प्रदर्शित किया जा सकता है।{{dubious|reason=The Church-Turing thesis is that lambda calculus is [[Turing complete]].|date=March 2022}} लैम्ब्डा कैलकुलस में एकमात्र आदिम डेटा प्रकार फलन  है।


== प्रयोग ==
== प्रयोग ==
Line 8: Line 8:
चर्च एन्कोडिंग का एक सीधा कार्यान्वयन कुछ एक्सेस ऑपरेशंस को धीमा कर देता है <math>O(1)</math> को <math>O(n)</math>, कहाँ <math>n</math> डेटा संरचना का आकार है, जो चर्च एन्कोडिंग को अव्यावहारिक बनाता है।<ref name=Widemann>{{cite journal |last1=Trancón y Widemann |first1=Baltasar |last2=Parnas |first2=David Lorge |title=सारणीबद्ध भाव और कुल कार्यात्मक प्रोग्रामिंग|journal=Implementation and Application of Functional Languages |series=Lecture Notes in Computer Science |date=2008 |volume=5083 |pages=228–229 |doi=10.1007/978-3-540-85373-2_13|isbn=978-3-540-85372-5 |url=https://books.google.com/books?id=E1zuY1Q6sOsC&pg=PA228}}</ref> शोध से पता चला है कि इसे लक्षित अनुकूलन द्वारा संबोधित किया जा सकता है, लेकिन अधिकांश [[कार्यात्मक प्रोग्रामिंग]] भाषाएं इसके अतिरिक्त  [[बीजगणितीय डेटा प्रकार]]ों को सम्मिलित  करने के लिए अपने मध्यवर्ती प्रतिनिधित्वों का विस्तार करती हैं।<ref>{{cite book |last1=Jansen |first1=Jan Martin |last2=Koopman |first2=Pieter W. M. |last3=Plasmeijer |first3=Marinus J. |editor1-last=Nilsson |editor1-first=Henrik |title=Trends in functional programming. Volume 7 |date=2006 |publisher=Intellect |location=Bristol |isbn=978-1-84150-188-8 |chapter=Efficient interpretation by transforming data types and patterns to functions|pages=73–90|citeseerx=10.1.1.73.9841}}</ref> बहरहाल, चर्च एन्कोडिंग अधिकांशतः सैद्धांतिक तर्कों में प्रयोग किया जाता है, क्योंकि यह आंशिक मूल्यांकन और प्रमेय सिद्ध  करने के लिए एक प्राकृतिक प्रतिनिधित्व है।<ref name=Widemann/> ऑपरेशंस को उच्च-रैंक वाले प्रकारों का उपयोग करके टाइप किया जा सकता है,<ref>{{cite web |work=Lambda Calculus and Lambda Calculators |url=https://okmij.org/ftp/Computation/lambda-calc.html#predecessor |publisher=okmij.org|title=Predecessor and lists are not representable in simply typed lambda calculus}}</ref> और आदिम पुनरावर्तन आसानी से सुलभ है।<ref name=Widemann/> यह धारणा कि कार्य केवल आदिम डेटा प्रकार हैं, कई प्रमाणों को सुव्यवस्थित करते हैं।
चर्च एन्कोडिंग का एक सीधा कार्यान्वयन कुछ एक्सेस ऑपरेशंस को धीमा कर देता है <math>O(1)</math> को <math>O(n)</math>, कहाँ <math>n</math> डेटा संरचना का आकार है, जो चर्च एन्कोडिंग को अव्यावहारिक बनाता है।<ref name=Widemann>{{cite journal |last1=Trancón y Widemann |first1=Baltasar |last2=Parnas |first2=David Lorge |title=सारणीबद्ध भाव और कुल कार्यात्मक प्रोग्रामिंग|journal=Implementation and Application of Functional Languages |series=Lecture Notes in Computer Science |date=2008 |volume=5083 |pages=228–229 |doi=10.1007/978-3-540-85373-2_13|isbn=978-3-540-85372-5 |url=https://books.google.com/books?id=E1zuY1Q6sOsC&pg=PA228}}</ref> शोध से पता चला है कि इसे लक्षित अनुकूलन द्वारा संबोधित किया जा सकता है, लेकिन अधिकांश [[कार्यात्मक प्रोग्रामिंग]] भाषाएं इसके अतिरिक्त  [[बीजगणितीय डेटा प्रकार]]ों को सम्मिलित  करने के लिए अपने मध्यवर्ती प्रतिनिधित्वों का विस्तार करती हैं।<ref>{{cite book |last1=Jansen |first1=Jan Martin |last2=Koopman |first2=Pieter W. M. |last3=Plasmeijer |first3=Marinus J. |editor1-last=Nilsson |editor1-first=Henrik |title=Trends in functional programming. Volume 7 |date=2006 |publisher=Intellect |location=Bristol |isbn=978-1-84150-188-8 |chapter=Efficient interpretation by transforming data types and patterns to functions|pages=73–90|citeseerx=10.1.1.73.9841}}</ref> बहरहाल, चर्च एन्कोडिंग अधिकांशतः सैद्धांतिक तर्कों में प्रयोग किया जाता है, क्योंकि यह आंशिक मूल्यांकन और प्रमेय सिद्ध  करने के लिए एक प्राकृतिक प्रतिनिधित्व है।<ref name=Widemann/> ऑपरेशंस को उच्च-रैंक वाले प्रकारों का उपयोग करके टाइप किया जा सकता है,<ref>{{cite web |work=Lambda Calculus and Lambda Calculators |url=https://okmij.org/ftp/Computation/lambda-calc.html#predecessor |publisher=okmij.org|title=Predecessor and lists are not representable in simply typed lambda calculus}}</ref> और आदिम पुनरावर्तन आसानी से सुलभ है।<ref name=Widemann/> यह धारणा कि कार्य केवल आदिम डेटा प्रकार हैं, कई प्रमाणों को सुव्यवस्थित करते हैं।


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


== चर्च अंक ==
== चर्च अंक ==


चर्च अंक चर्च एन्कोडिंग के अनुसार  [[प्राकृतिक संख्या]]ओं का प्रतिनिधित्व करते हैं। प्राकृतिक संख्या n का प्रतिनिधित्व करने वाला उच्च-क्रम फ़ंक्शन एक ऐसा फ़ंक्शन है जो किसी फ़ंक्शन को मैप करता है <math>f</math> इसकी एन-गुना फ़ंक्शन संरचना के लिए। सरल शब्दों में, अंक का मान उस संख्या के बराबर होता है जितनी बार फ़ंक्शन अपने तर्क को समाहित करता है।
चर्च अंक चर्च एन्कोडिंग के अनुसार  [[प्राकृतिक संख्या]]ओं का प्रतिनिधित्व करते हैं। प्राकृतिक संख्या n का प्रतिनिधित्व करने वाला उच्च-क्रम फलन  एक ऐसा फलन  है जो किसी फलन  को मैप करता है <math>f</math> इसकी एन-गुना फलन  संरचना के लिए। सरल शब्दों में, अंक का मान उस संख्या के बराबर होता है जितनी बार फलन  अपने तर्क को समाहित करता है।


: <math>f^{\circ n} = \underbrace{f \circ f \circ \cdots \circ f}_{n\text{ times}}.\,</math>
: <math>f^{\circ n} = \underbrace{f \circ f \circ \cdots \circ f}_{n\text{ times}}.\,</math>
सभी चर्च अंक ऐसे कार्य हैं जो दो पैरामीटर लेते हैं। चर्च अंक 0, 1, 2, ..., को लैम्ब्डा कैलकुस में निम्नानुसार परिभाषित किया गया है।
सभी चर्च अंक ऐसे कार्य हैं जो दो पैरामीटर लेते हैं। चर्च अंक 0, 1, 2, ..., को लैम्ब्डा कैलकुस में निम्नानुसार परिभाषित किया गया है।


''शुरुआत'' 0 ''फ़ंक्शन को बिल्कुल भी लागू नहीं करना'' 1 ''फ़ंक्शन को एक बार लागू करना, 2 ''फ़ंक्शन को दो बार लागू करना, 3 ''फ़ंक्शन को तीन बार लागू करना आदि'':
''शुरुआत'' 0 ''फलन  को बिल्कुल भी लागू नहीं करना'' 1 ''फलन  को एक बार लागू करना, 2 '' फलन  को दो बार लागू करना, 3 ''फलन  को तीन बार लागू करना आदि'':


:<math>
:<math>
Line 36: Line 36:
\end{array}
\end{array}
</math>
</math>
चर्च अंक 3 किसी दिए गए फ़ंक्शन को तीन बार मान पर लागू करने की क्रिया का प्रतिनिधित्व करता है। आपूर्ति किया गया फ़ंक्शन पहले एक आपूर्ति किए गए पैरामीटर पर लागू होता है और उसके बाद क्रमिक रूप से अपने परिणाम पर लागू होता है। अंतिम परिणाम अंक 3 नहीं है (जब तक आपूर्ति पैरामीटर 0 नहीं होता है और फ़ंक्शन एक उत्तराधिकारी फ़ंक्शन होता है)। कार्य स्वयं, और इसका अंतिम परिणाम नहीं, चर्च अंक 3 है। चर्च अंक 3 का अर्थ केवल तीन बार कुछ भी करना है। यह तीन बार से क्या मतलब है इसका एक व्यापक परिभाषा प्रदर्शन है।
चर्च अंक 3 किसी दिए गए फलन  को तीन बार मान पर लागू करने की क्रिया का प्रतिनिधित्व करता है। आपूर्ति किया गया फलन  पहले एक आपूर्ति किए गए पैरामीटर पर लागू होता है और उसके बाद क्रमिक रूप से अपने परिणाम पर लागू होता है। अंतिम परिणाम अंक 3 नहीं है (जब तक आपूर्ति पैरामीटर 0 नहीं होता है और फलन  एक उत्तराधिकारी फलन  होता है)। कार्य स्वयं, और इसका अंतिम परिणाम नहीं, चर्च अंक 3 है। चर्च अंक 3 का अर्थ केवल तीन बार कुछ भी करना है। यह तीन बार से क्या मतलब है इसका एक व्यापक परिभाषा प्रदर्शन है।


=== चर्च अंकों के साथ गणना ===
=== चर्च अंकों के साथ गणना ===
Line 56: Line 56:
: <math>\operatorname{exp} \equiv \lambda m.\lambda n. n\ m</math>
: <math>\operatorname{exp} \equiv \lambda m.\lambda n. n\ m</math>


  <math>\operatorname{pred}(n)</math> h> फ़ंक्शन को समझना अधिक कठिन है।
  <math>\operatorname{pred}(n)</math> h> फलन  को समझना अधिक कठिन है।


: <math>\operatorname{pred} \equiv \lambda n.\lambda f.\lambda x. n\ (\lambda g.\lambda h. h\ (g\ f))\ (\lambda u. x)\ (\lambda u. u)</math>
: <math>\operatorname{pred} \equiv \lambda n.\lambda f.\lambda x. n\ (\lambda g.\lambda h. h\ (g\ f))\ (\lambda u. x)\ (\lambda u. u)</math>
एक चर्च अंक n बार फ़ंक्शन लागू करता है। पूर्ववर्ती फ़ंक्शन को एक फ़ंक्शन वापस करना चाहिए जो इसके पैरामीटर n - 1 बार लागू करता है। यह f और x के चारों ओर एक कंटेनर बनाकर हासिल किया जाता है, जिसे इस तरह से प्रारंभ किया जाता है कि फ़ंक्शन के आवेदन को पहली बार छोड़ दिया जाता है। अधिक विस्तृत विवरण के लिए पूर्ववर्ती कार्य की  या  व्युत्पत्ति देखें।
एक चर्च अंक n बार फलन  लागू करता है। पूर्ववर्ती फलन  को एक फलन  वापस करना चाहिए जो इसके पैरामीटर n - 1 बार लागू करता है। यह f और x के चारों ओर एक कंटेनर बनाकर हासिल किया जाता है, जिसे इस तरह से प्रारंभ किया जाता है कि फलन  के आवेदन को पहली बार छोड़ दिया जाता है। अधिक विस्तृत विवरण के लिए पूर्ववर्ती कार्य की  या  व्युत्पत्ति देखें।


घटाव  फलन  पूर्ववर्ती  फलन  के आधार पर लिखा जा सकता है।
घटाव  फलन  पूर्ववर्ती  फलन  के आधार पर लिखा जा सकता है।
Line 99: Line 99:
:<math>\operatorname{pred}(n) = \begin{cases} 0 & \mbox{if }n=0, \\ n-1 & \mbox{otherwise}\end{cases}</math>.
:<math>\operatorname{pred}(n) = \begin{cases} 0 & \mbox{if }n=0, \\ n-1 & \mbox{otherwise}\end{cases}</math>.


पूर्ववर्ती बनाने के लिए हमें फ़ंक्शन को 1 कम समय में लागू करने का एक तरीका चाहिए। एक अंक {{mvar|n}} फ़ंक्शन लागू करता है {{mvar|f}} {{mvar|n}} बार {{mvar|x}}. पूर्ववर्ती फ़ंक्शन को अंक का उपयोग करना चाहिए {{mvar|n}}  फलन  लागू करने के लिए {{math|''n''-1}} बार।
पूर्ववर्ती बनाने के लिए हमें फलन  को 1 कम समय में लागू करने का एक तरीका चाहिए। एक अंक {{mvar|n}} फलन  लागू करता है {{mvar|f}} {{mvar|n}} बार {{mvar|x}}. पूर्ववर्ती फलन  को अंक का उपयोग करना चाहिए {{mvar|n}}  फलन  लागू करने के लिए {{math|''n''-1}} बार।


पूर्ववर्ती फ़ंक्शन को लागू करने से पहले, यहां एक योजना है जो मान को कंटेनर फ़ंक्शन में लपेटती है। हम इसके स्थान पर उपयोग करने के लिए नए कार्यों को परिभाषित करेंगे {{mvar|f}} और {{mvar|x}}, बुलाया {{math|inc}} और {{math|init}}. कंटेनर फ़ंक्शन कहा जाता है {{math|value}}. तालिका के बाईं ओर एक अंक दिखाता है {{mvar|n}} के लिए आवेदन किया {{math|inc}} और {{math|init}}.
पूर्ववर्ती फलन  को लागू करने से पहले, यहां एक योजना है जो मान को कंटेनर फलन  में लपेटती है। हम इसके स्थान पर उपयोग करने के लिए नए कार्यों को परिभाषित करेंगे {{mvar|f}} और {{mvar|x}}, बुलाया {{math|inc}} और {{math|init}}. कंटेनर फलन  कहा जाता है {{math|value}}. तालिका के बाईं ओर एक अंक दिखाता है {{mvar|n}} के लिए आवेदन किया {{math|inc}} और {{math|init}}.


:<math>
:<math>
Line 132: Line 132:
सामान्य पुनरावृत्ति नियम है,
सामान्य पुनरावृत्ति नियम है,
:<math> \operatorname{inc}\ (\operatorname{value}\ v) = \operatorname{value}\ (f\ v)</math>
:<math> \operatorname{inc}\ (\operatorname{value}\ v) = \operatorname{value}\ (f\ v)</math>
यदि कंटेनर से मान प्राप्त करने के लिए कोई फ़ंक्शन भी है (कहा जाता है {{math|extract}}),
यदि कंटेनर से मान प्राप्त करने के लिए कोई फलन  भी है (कहा जाता है {{math|extract}}),
:<math> \operatorname{extract}\ (\operatorname{value}\ v) = v</math>
:<math> \operatorname{extract}\ (\operatorname{value}\ v) = v</math>
तब {{math|extract}} को परिभाषित करने के लिए उपयोग  किया जा सकता है {{math|samenum}} ऐसे काम करता है,
तब {{math|extract}} को परिभाषित करने के लिए उपयोग  किया जा सकता है {{math|samenum}} ऐसे काम करता है,
: <math>\operatorname{samenum} = \lambda n.\lambda f.\lambda x.\operatorname{extract}\ (n \operatorname{inc} \operatorname{init})  = \lambda n.\lambda f.\lambda x.\operatorname{extract}\ (\operatorname{value}\ (n\ f\ x)) = \lambda n.\lambda f.\lambda x.n\ f\ x = \lambda n.n</math>
: <math>\operatorname{samenum} = \lambda n.\lambda f.\lambda x.\operatorname{extract}\ (n \operatorname{inc} \operatorname{init})  = \lambda n.\lambda f.\lambda x.\operatorname{extract}\ (\operatorname{value}\ (n\ f\ x)) = \lambda n.\lambda f.\lambda x.n\ f\ x = \lambda n.n</math>


  {{math|samenum}um}} फ़ंक्शन आंतरिक रूप से उपयोगी नहीं है। चूँकि , जैसा {{math|inc}} प्रतिनिधि बुला रहे हैं {{mvar|f}} इसके कंटेनर तर्क के लिए, हम इसे पहले आवेदन पर व्यवस्थित कर सकते हैं {{math|inc}} एक विशेष कंटेनर प्राप्त करता है जो इसके तर्क को अनदेखा करता है जिससे पहले आवेदन को छोड़ दिया जा सके {{mvar|f}}. इस नए प्रारंभिक कंटेनर को कॉल करें {{math|const}}. उपरोक्त तालिका के दाहिने हाथ की ओर के विस्तार को दर्शाता है {{mvar|n}} {{math|inc}} {{math|const}}. फिर रिप्लेस करके {{math|init}} साथ {{math|const}} के लिए अभिव्यक्ति में {{math|same}} फ़ंक्शन हमें पूर्ववर्ती फ़ंक्शन मिलता है,
  {{math|samenum}um}} फलन  आंतरिक रूप से उपयोगी नहीं है। चूँकि , जैसा {{math|inc}} प्रतिनिधि बुला रहे हैं {{mvar|f}} इसके कंटेनर तर्क के लिए, हम इसे पहले आवेदन पर व्यवस्थित कर सकते हैं {{math|inc}} एक विशेष कंटेनर प्राप्त करता है जो इसके तर्क को अनदेखा करता है जिससे पहले आवेदन को छोड़ दिया जा सके {{mvar|f}}. इस नए प्रारंभिक कंटेनर को कॉल करें {{math|const}}. उपरोक्त तालिका के दाहिने हाथ की ओर के विस्तार को दर्शाता है {{mvar|n}} {{math|inc}} {{math|const}}. फिर रिप्लेस करके {{math|init}} साथ {{math|const}} के लिए अभिव्यक्ति में {{math|same}} फलन  हमें पूर्ववर्ती फलन  मिलता है,


: <math>\operatorname{pred} = \lambda n.\lambda f.\lambda x.\operatorname{extract}\ (n \operatorname{inc} \operatorname{const}) = \lambda n.\lambda f.\lambda x.\operatorname{extract}\ (\operatorname{value}\ ((n-1)\ f\ x)) = \lambda n.\lambda f.\lambda x.(n-1)\ f\ x = \lambda n.(n-1)</math>
: <math>\operatorname{pred} = \lambda n.\lambda f.\lambda x.\operatorname{extract}\ (n \operatorname{inc} \operatorname{const}) = \lambda n.\lambda f.\lambda x.\operatorname{extract}\ (\operatorname{value}\ ((n-1)\ f\ x)) = \lambda n.\lambda f.\lambda x.(n-1)\ f\ x = \lambda n.(n-1)</math>
Line 157: Line 157:
==== वैल्यू कंटेनर ====
==== वैल्यू कंटेनर ====


मान कंटेनर फ़ंक्शन को उसके मान पर लागू करता है। इसके द्वारा परिभाषित किया गया है,
मान कंटेनर फलन  को उसके मान पर लागू करता है। इसके द्वारा परिभाषित किया गया है,
:<math> \operatorname{value}\ v\ h = h\ v </math>
:<math> \operatorname{value}\ v\ h = h\ v </math>
इसलिए,
इसलिए,
Line 163: Line 163:




==== इंक ==== {{math|inc}nc}} फ़ंक्शन में एक मान होना चाहिए {{mvar|v}}, और युक्त एक नया मान लौटाएँ {{mvar|f v}}.
==== इंक ==== {{math|inc}nc}} फलन  में एक मान होना चाहिए {{mvar|v}}, और युक्त एक नया मान लौटाएँ {{mvar|f v}}.
:<math> \operatorname{inc}\ (\operatorname{value}\ v) = \operatorname{value}\ (f\ v)</math>
:<math> \operatorname{inc}\ (\operatorname{value}\ v) = \operatorname{value}\ (f\ v)</math>
जी को मूल्य कंटेनर होने दें,
जी को मूल्य कंटेनर होने दें,
Line 176: Line 176:
==== निकालें ====
==== निकालें ====


पहचान फ़ंक्शन लागू करके मान निकाला जा सकता है,
पहचान फलन  लागू करके मान निकाला जा सकता है,
:<math> I = \lambda u.u </math>
:<math> I = \lambda u.u </math>
का उपयोग करते हुए {{mvar|I}},
का उपयोग करते हुए {{mvar|I}},
Line 186: Line 186:
==== स्थिरांक ====
==== स्थिरांक ====


अमल करना {{math|pred}} द {{math|init}} फ़ंक्शन को इसके साथ बदल दिया गया है {{math|const}} जो लागू नहीं होता {{mvar|f}}. ज़रुरत है {{math|const}} को पूरा करने के,
अमल करना {{math|pred}} द {{math|init}} फलन  को इसके साथ बदल दिया गया है {{math|const}} जो लागू नहीं होता {{mvar|f}}. ज़रुरत है {{math|const}} को पूरा करने के,
:<math> \operatorname{inc}\ \operatorname{const} = \operatorname{value}\ x </math>
:<math> \operatorname{inc}\ \operatorname{const} = \operatorname{value}\ x </math>
:<math> \lambda h.h\ (\operatorname{const}\ f) = \lambda h.h\ x </math>
:<math> \lambda h.h\ (\operatorname{const}\ f) = \lambda h.h\ x </math>
Line 233: Line 233:
डिवाइड कॉल करने से पहले n में 1 जोड़कर इस समस्या को ठीक किया जा सकता है। विभाजन की परिभाषा तब है,
डिवाइड कॉल करने से पहले n में 1 जोड़कर इस समस्या को ठीक किया जा सकता है। विभाजन की परिभाषा तब है,
: <math> \operatorname{divide}\ n = \operatorname{divide1}\ (\operatorname{succ}\ n) </math>
: <math> \operatorname{divide}\ n = \operatorname{divide1}\ (\operatorname{succ}\ n) </math>
डिवाइड 1 एक पुनरावर्ती परिभाषा है। रिकर्सन को लागू करने के लिए [[फिक्स्ड-पॉइंट कॉम्बिनेटर]] का उपयोग किया जा सकता है। Div by नामक एक नया फ़ंक्शन बनाएँ;
डिवाइड 1 एक पुनरावर्ती परिभाषा है। रिकर्सन को लागू करने के लिए [[फिक्स्ड-पॉइंट कॉम्बिनेटर]] का उपयोग किया जा सकता है। Div by नामक एक नया फलन  बनाएँ;
* वाम भाग में <math> \operatorname{divide1} \rightarrow \operatorname{div} \ c</math>
* वाम भाग में <math> \operatorname{divide1} \rightarrow \operatorname{div} \ c</math>
* दाहिने हाथ में <math> \operatorname{divide1} \rightarrow c </math>
* दाहिने हाथ में <math> \operatorname{divide1} \rightarrow c </math>
Line 283: Line 283:


:<math>\operatorname{neg}_s = \lambda x.\operatorname{pair}\ (\operatorname{second}\ x)\ (\operatorname{first}\ x) </math>
:<math>\operatorname{neg}_s = \lambda x.\operatorname{pair}\ (\operatorname{second}\ x)\ (\operatorname{first}\ x) </math>
यदि जोड़ी में से एक शून्य है तो पूर्णांक मान अधिक स्वाभाविक रूप से प्रदर्शित होता है। OneZero फ़ंक्शन इस स्थिति को प्राप्त करता है,
यदि जोड़ी में से एक शून्य है तो पूर्णांक मान अधिक स्वाभाविक रूप से प्रदर्शित होता है। OneZero फलन  इस स्थिति को प्राप्त करता है,


:<math>\operatorname{OneZero} = \lambda x.\operatorname{IsZero}\ (\operatorname{first}\ x)\ x\ (\operatorname{IsZero}\ (\operatorname{second}\ x)\ x\ (\operatorname{OneZero}\ \operatorname{pair}\ (\operatorname{pred}\ (\operatorname{first}\ x))\ (\operatorname{pred}\ (\operatorname{second}\ x))))</math>
:<math>\operatorname{OneZero} = \lambda x.\operatorname{IsZero}\ (\operatorname{first}\ x)\ x\ (\operatorname{IsZero}\ (\operatorname{second}\ x)\ x\ (\operatorname{OneZero}\ \operatorname{pair}\ (\operatorname{pred}\ (\operatorname{first}\ x))\ (\operatorname{pred}\ (\operatorname{second}\ x))))</math>
Line 315: Line 315:
(\operatorname{mult}\ (\operatorname{first}\ x)\ (\operatorname{second}\ y))\  
(\operatorname{mult}\ (\operatorname{first}\ x)\ (\operatorname{second}\ y))\  
(\operatorname{mult}\ (\operatorname{second}\ x)\ (\operatorname{first}\ y))) </math>
(\operatorname{mult}\ (\operatorname{second}\ x)\ (\operatorname{first}\ y))) </math>
विभाजन के लिए यहाँ एक समान परिभाषा दी गई है, इस परिभाषा को छोड़कर, प्रत्येक जोड़ी में एक मान शून्य होना चाहिए (ऊपर OneZero देखें)। DivZ फ़ंक्शन हमें शून्य घटक वाले मान को अनदेखा करने की अनुमति देता है।
विभाजन के लिए यहाँ एक समान परिभाषा दी गई है, इस परिभाषा को छोड़कर, प्रत्येक जोड़ी में एक मान शून्य होना चाहिए (ऊपर OneZero देखें)। DivZ फलन  हमें शून्य घटक वाले मान को अनदेखा करने की अनुमति देता है।
:<math>\operatorname{divZ} = \lambda x.\lambda y.\operatorname{IsZero}\ y\ 0 \ (\operatorname{divide}\ x\ y) </math>
:<math>\operatorname{divZ} = \lambda x.\lambda y.\operatorname{IsZero}\ y\ 0 \ (\operatorname{divide}\ x\ y) </math>
divZ का उपयोग तब निम्न सूत्र में किया जाता है, जो गुणन के समान है, लेकिन divZ द्वारा प्रतिस्थापित बहु के साथ।
divZ का उपयोग तब निम्न सूत्र में किया जाता है, जो गुणन के समान है, लेकिन divZ द्वारा प्रतिस्थापित बहु के साथ।
Line 343: Line 343:
</ref> दिए गए संदर्भ सॉफ्टवेयर का वर्णन करते हैं, जो सैद्धांतिक रूप से लैम्ब्डा कैलकुलस में अनुवादित हो सकते हैं। एक बार वास्तविक संख्या परिभाषित हो जाने के बाद, जटिल संख्याएं स्वाभाविक रूप से वास्तविक संख्याओं की एक जोड़ी के रूप में एन्कोडेड होती हैं।
</ref> दिए गए संदर्भ सॉफ्टवेयर का वर्णन करते हैं, जो सैद्धांतिक रूप से लैम्ब्डा कैलकुलस में अनुवादित हो सकते हैं। एक बार वास्तविक संख्या परिभाषित हो जाने के बाद, जटिल संख्याएं स्वाभाविक रूप से वास्तविक संख्याओं की एक जोड़ी के रूप में एन्कोडेड होती हैं।


ऊपर वर्णित डेटा प्रकार और फ़ंक्शन प्रदर्शित करते हैं कि लैम्ब्डा कैलकुलस में किसी भी डेटा प्रकार या गणना को एन्कोड किया जा सकता है। यह चर्च-ट्यूरिंग थीसिस है।
ऊपर वर्णित डेटा प्रकार और फलन  प्रदर्शित करते हैं कि लैम्ब्डा कैलकुलस में किसी भी डेटा प्रकार या गणना को एन्कोड किया जा सकता है। यह चर्च-ट्यूरिंग थीसिस है।


=== अन्य अभ्यावेदन के साथ अनुवाद ===
=== अन्य अभ्यावेदन के साथ अनुवाद ===
Line 374: Line 374:
\operatorname{false} &\equiv \lambda a.\lambda b.b
\operatorname{false} &\equiv \lambda a.\lambda b.b
\end{align}</math>
\end{align}</math>
यह परिभाषा विधेय (अर्थात सत्य मान लौटाने वाले कार्य) को सीधे-सीधे क्रिया-खंड के रूप में कार्य करने की अनुमति देती है। बूलियन लौटाने वाला एक फ़ंक्शन, जिसे दो पैरामीटर पर लागू किया जाता है, या तो पहला या दूसरा पैरामीटर देता है:
यह परिभाषा विधेय (अर्थात सत्य मान लौटाने वाले कार्य) को सीधे-सीधे क्रिया-खंड के रूप में कार्य करने की अनुमति देती है। बूलियन लौटाने वाला एक फलन , जिसे दो पैरामीटर पर लागू किया जाता है, या तो पहला या दूसरा पैरामीटर देता है:
: <math>\operatorname{predicate-}x\ \operatorname{then-clause}\ \operatorname{else-clause} </math>
: <math>\operatorname{predicate-}x\ \operatorname{then-clause}\ \operatorname{else-clause} </math>
तत्कालीन खंड का मूल्यांकन करता है यदि विधेय-एक्स सत्य का मूल्यांकन करता है, और अन्य-खंड का मूल्यांकन करता है यदि विधेय-एक्स गलत का मूल्यांकन करता है।
तत्कालीन खंड का मूल्यांकन करता है यदि विधेय-एक्स सत्य का मूल्यांकन करता है, और अन्य-खंड का मूल्यांकन करता है यदि विधेय-एक्स गलत का मूल्यांकन करता है।
Line 416: Line 416:
== चर्च जोड़े ==
== चर्च जोड़े ==
{{see also|दोष}}
{{see also|दोष}}
चर्च जोड़े विपक्ष (दो-टुपल) प्रकार के चर्च एन्कोडिंग हैं। जोड़ी को एक फ़ंक्शन के रूप में दर्शाया गया है जो फ़ंक्शन तर्क लेता है। जब इसका तर्क दिया जाता है तो यह तर्क जोड़ी के दो घटकों पर लागू होगा। लैम्ब्डा कैलकुस में परिभाषा है,
चर्च जोड़े विपक्ष (दो-टुपल) प्रकार के चर्च एन्कोडिंग हैं। जोड़ी को एक फलन  के रूप में दर्शाया गया है जो फलन  तर्क लेता है। जब इसका तर्क दिया जाता है तो यह तर्क जोड़ी के दो घटकों पर लागू होगा। लैम्ब्डा कैलकुस में परिभाषा है,


: <math>\begin{align}
: <math>\begin{align}
Line 456: Line 456:
* प्रत्येक सूची नोड को दो जोड़े से बनाएं (खाली सूचियों की अनुमति देने के लिए)।
* प्रत्येक सूची नोड को दो जोड़े से बनाएं (खाली सूचियों की अनुमति देने के लिए)।
* प्रत्येक सूची नोड को एक जोड़ी से बनाएँ।
* प्रत्येक सूची नोड को एक जोड़ी से बनाएँ।
* फोल्ड (उच्च-क्रम फ़ंक्शन) का उपयोग करके सूची का प्रतिनिधित्व करें।
* फोल्ड (उच्च-क्रम फलन ) का उपयोग करके सूची का प्रतिनिधित्व करें।
* स्कॉट के एन्कोडिंग का उपयोग करके सूची का प्रतिनिधित्व करें जो मिलान अभिव्यक्ति के स्थितियों  को तर्क के रूप में लेता है
* स्कॉट के एन्कोडिंग का उपयोग करके सूची का प्रतिनिधित्व करें जो मिलान अभिव्यक्ति के स्थितियों  को तर्क के रूप में लेता है


Line 517: Line 517:
=== राइट फोल्ड === का उपयोग करके सूची का प्रतिनिधित्व करें
=== राइट फोल्ड === का उपयोग करके सूची का प्रतिनिधित्व करें


चर्च जोड़े का उपयोग करके एन्कोडिंग के विकल्प के रूप में, एक सूची को इसके फोल्ड (उच्च-क्रम फ़ंक्शन) के साथ पहचान कर एन्कोड किया जा सकता है। उदाहरण के लिए, तीन तत्वों x, y और z की एक सूची को एक उच्च-क्रम फ़ंक्शन द्वारा एन्कोड किया जा सकता है, जब एक कॉम्बिनेटर c पर लागू किया जाता है और एक मान n रिटर्न c x (c y (c z n)) देता है।
चर्च जोड़े का उपयोग करके एन्कोडिंग के विकल्प के रूप में, एक सूची को इसके फोल्ड (उच्च-क्रम फलन ) के साथ पहचान कर एन्कोड किया जा सकता है। उदाहरण के लिए, तीन तत्वों x, y और z की एक सूची को एक उच्च-क्रम फलन  द्वारा एन्कोड किया जा सकता है, जब एक कॉम्बिनेटर c पर लागू किया जाता है और एक मान n रिटर्न c x (c y (c z n)) देता है।


: <math>
: <math>
Line 568: Line 568:
अधिक सामान्यतः, एक बीजगणितीय डेटा प्रकार के साथ <math>m</math> विकल्प के साथ एक  फलन  बन जाता है <math>m</math> पैरामीटर। जब <math>i</math>वें निर्माता है <math>n_i</math> तर्क, एन्कोडिंग के संबंधित पैरामीटर लेता है <math>n_i</math> तर्क भी।
अधिक सामान्यतः, एक बीजगणितीय डेटा प्रकार के साथ <math>m</math> विकल्प के साथ एक  फलन  बन जाता है <math>m</math> पैरामीटर। जब <math>i</math>वें निर्माता है <math>n_i</math> तर्क, एन्कोडिंग के संबंधित पैरामीटर लेता है <math>n_i</math> तर्क भी।


स्कॉट एन्कोडिंग अनटाइप्ड लैम्ब्डा कैलकुलस में किया जा सकता है, जबकि टाइप्स के साथ इसके उपयोग के लिए रिकर्सन और टाइप पॉलीमोर्फिज्म के साथ एक टाइप प्रणाली की आवश्यकता होती है। इस प्रतिनिधित्व में तत्व प्रकार ई के साथ एक सूची जिसका उपयोग प्रकार सी के मूल्यों की गणना करने के लिए किया जाता है, निम्नलिखित पुनरावर्ती प्रकार की परिभाषा होगी, जहां '=>' फ़ंक्शन प्रकार को दर्शाता है:
स्कॉट एन्कोडिंग अनटाइप्ड लैम्ब्डा कैलकुलस में किया जा सकता है, जबकि टाइप्स के साथ इसके उपयोग के लिए रिकर्सन और टाइप पॉलीमोर्फिज्म के साथ एक टाइप प्रणाली की आवश्यकता होती है। इस प्रतिनिधित्व में तत्व प्रकार ई के साथ एक सूची जिसका उपयोग प्रकार सी के मूल्यों की गणना करने के लिए किया जाता है, निम्नलिखित पुनरावर्ती प्रकार की परिभाषा होगी, जहां '=>' फलन  प्रकार को दर्शाता है:
<syntaxhighlight lang="scala">
<syntaxhighlight lang="scala">
type List =  
type List =  

Revision as of 23:05, 19 May 2023

गणित में, चर्च एन्कोडिंग लैम्ब्डा कैलकुलस में डेटा और ऑपरेटरों का प्रतिनिधित्व करने का एक साधन है। चर्च अंक लैम्ब्डा संकेतन का उपयोग करते हुए प्राकृतिक संख्याओं का प्रतिनिधित्व करते हैं। विधि का नाम अलोंजो चर्च के नाम पर रखा गया है, जिसने सबसे पहले लैम्ब्डा कैलकुलस में डेटा को इस तरह से एनकोड किया था।

सामान्यतः अन्य संकेतन (जैसे पूर्णांक, बूलियन, जोड़े, सूचियाँ और टैग किए गए संघ) में आदिम माने जाने वाले शब्दों को चर्च एन्कोडिंग के अनुसार उच्च-क्रम के कार्यों में मैप किया जाता है। चर्च-ट्यूरिंग थीसिस का दावा है कि किसी भी संगणनीय ऑपरेटर (और उसके संचालन) को चर्च एन्कोडिंग के अनुसार प्रदर्शित किया जा सकता है।[dubious ] लैम्ब्डा कैलकुलस में एकमात्र आदिम डेटा प्रकार फलन है।

प्रयोग

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

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

चर्च अंक

चर्च अंक चर्च एन्कोडिंग के अनुसार प्राकृतिक संख्याओं का प्रतिनिधित्व करते हैं। प्राकृतिक संख्या n का प्रतिनिधित्व करने वाला उच्च-क्रम फलन एक ऐसा फलन है जो किसी फलन को मैप करता है इसकी एन-गुना फलन संरचना के लिए। सरल शब्दों में, अंक का मान उस संख्या के बराबर होता है जितनी बार फलन अपने तर्क को समाहित करता है।

सभी चर्च अंक ऐसे कार्य हैं जो दो पैरामीटर लेते हैं। चर्च अंक 0, 1, 2, ..., को लैम्ब्डा कैलकुस में निम्नानुसार परिभाषित किया गया है।

शुरुआत 0 फलन को बिल्कुल भी लागू नहीं करना 1 फलन को एक बार लागू करना, 2 फलन को दो बार लागू करना, 3 फलन को तीन बार लागू करना आदि:

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

चर्च अंकों के साथ गणना

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

अतिरिक्त फलन पहचान का उपयोग करता है .

उत्तराधिकारी फलन बीटा रिडक्शन या .सीई.बी2-रिडक्शन|β-समतुल्य है .

गुणन फलन पहचान का उपयोग करता है .

घातांक फलन चर्च अंकों की परिभाषा द्वारा दिया गया है, . परिभाषा में स्थानापन्न पाने के और,

जो लैम्ब्डा अभिव्यक्ति देता है,

 h>  फलन  को समझना अधिक कठिन है।

एक चर्च अंक n बार फलन लागू करता है। पूर्ववर्ती फलन को एक फलन वापस करना चाहिए जो इसके पैरामीटर n - 1 बार लागू करता है। यह f और x के चारों ओर एक कंटेनर बनाकर हासिल किया जाता है, जिसे इस तरह से प्रारंभ किया जाता है कि फलन के आवेदन को पहली बार छोड़ दिया जाता है। अधिक विस्तृत विवरण के लिए पूर्ववर्ती कार्य की या व्युत्पत्ति देखें।

घटाव फलन पूर्ववर्ती फलन के आधार पर लिखा जा सकता है।


चर्च अंकों पर कार्यों की तालिका

कार्य बीजगणित पहचान फलन परिभाषा लैम्ब्डा भाव
उत्तराधिकारी ...
जोड़ना
गुणन
घातांक [lower-alpha 1]
पूर्वाधिकारी[lower-alpha 2]

घटाव[lower-alpha 2] (मोनस) ...

information Note:

  1. This formula is the definition of a Church numeral n with .
  2. 2.0 2.1 In the Church encoding,

पूर्ववर्ती फलन की व्युत्पत्ति

चर्च एन्कोडिंग में प्रयुक्त पूर्ववर्ती कार्य है,

.

पूर्ववर्ती बनाने के लिए हमें फलन को 1 कम समय में लागू करने का एक तरीका चाहिए। एक अंक n फलन लागू करता है f n बार x. पूर्ववर्ती फलन को अंक का उपयोग करना चाहिए n फलन लागू करने के लिए n-1 बार।

पूर्ववर्ती फलन को लागू करने से पहले, यहां एक योजना है जो मान को कंटेनर फलन में लपेटती है। हम इसके स्थान पर उपयोग करने के लिए नए कार्यों को परिभाषित करेंगे f और x, बुलाया inc और init. कंटेनर फलन कहा जाता है value. तालिका के बाईं ओर एक अंक दिखाता है n के लिए आवेदन किया inc और init.

सामान्य पुनरावृत्ति नियम है,

यदि कंटेनर से मान प्राप्त करने के लिए कोई फलन भी है (कहा जाता है extract),

तब extract को परिभाषित करने के लिए उपयोग किया जा सकता है samenum ऐसे काम करता है,

samenum}um  फलन  आंतरिक रूप से उपयोगी नहीं है। चूँकि , जैसा inc प्रतिनिधि बुला रहे हैं f इसके कंटेनर तर्क के लिए, हम इसे पहले आवेदन पर व्यवस्थित कर सकते हैं inc एक विशेष कंटेनर प्राप्त करता है जो इसके तर्क को अनदेखा करता है जिससे पहले आवेदन को छोड़ दिया जा सके f. इस नए प्रारंभिक कंटेनर को कॉल करें const. उपरोक्त तालिका के दाहिने हाथ की ओर के विस्तार को दर्शाता है n inc const. फिर रिप्लेस करके init साथ const के लिए अभिव्यक्ति में same  फलन  हमें पूर्ववर्ती  फलन  मिलता है,

जैसा कि कार्यों के नीचे समझाया गया है inc, init, const, value और extract के रूप में परिभाषित किया जा सकता है,

जो के लिए लैम्ब्डा अभिव्यक्ति देता है pred जैसा,

वैल्यू कंटेनर

मान कंटेनर फलन को उसके मान पर लागू करता है। इसके द्वारा परिभाषित किया गया है,

इसलिए,


==== इंक ==== inc}nc फलन में एक मान होना चाहिए v, और युक्त एक नया मान लौटाएँ f v.

जी को मूल्य कंटेनर होने दें,

तब,

इसलिए,

निकालें

पहचान फलन लागू करके मान निकाला जा सकता है,

का उपयोग करते हुए I,

इसलिए,


स्थिरांक

अमल करना predinit फलन को इसके साथ बदल दिया गया है const जो लागू नहीं होता f. ज़रुरत है const को पूरा करने के,

जो संतुष्ट है यदि ,

या लैम्ब्डा अभिव्यक्ति के रूप में,

पूर्व को परिभाषित करने का एक अन्य तरीका

जोड़े का उपयोग करके पूर्व को भी परिभाषित किया जा सकता है:

यह एक सरल परिभाषा है, लेकिन पूर्व के लिए एक अधिक जटिल अभिव्यक्ति की ओर ले जाती है। के लिए विस्तार :


विभाग

प्राकृतिक संख्याओं का विभाजन (गणित) किसके द्वारा कार्यान्वित किया जा सकता है,[4]

गिना जा रहा है कई बीटा कटौती लेता है। जब तक हाथ से कटौती नहीं कर रहा है, इससे कोई फर्क नहीं पड़ता, लेकिन यह उत्तम है कि इस गणना को दो बार न करना पड़े। परीक्षण संख्याओं के लिए सबसे सरल विधेय IsZero है इसलिए स्थिति पर विचार करें।

लेकिन यह स्थिति बराबर है , नहीं . यदि इस अभिव्यक्ति का उपयोग किया जाता है तो ऊपर दी गई विभाजन की गणितीय परिभाषा को चर्च के अंकों पर कार्य में अनुवादित किया जाता है,

वांछित के रूप में, इस परिभाषा में एक ही कॉल है . चूँकि परिणाम यह है कि यह सूत्र का मान देता है .

डिवाइड कॉल करने से पहले n में 1 जोड़कर इस समस्या को ठीक किया जा सकता है। विभाजन की परिभाषा तब है,

डिवाइड 1 एक पुनरावर्ती परिभाषा है। रिकर्सन को लागू करने के लिए फिक्स्ड-पॉइंट कॉम्बिनेटर का उपयोग किया जा सकता है। Div by नामक एक नया फलन बनाएँ;

  • वाम भाग में
  • दाहिने हाथ में

पाने के लिए और,

तब,

कहाँ,

देता है,

या पाठ के रूप में \ के लिए का उपयोग करना λ,

डिवाइड = (\n.((\f.(\x.x x) (\x.f (x x))) (\c.\n.\m.\f.\x.(\d.(\n.n (\x) .(\a.\b.b)) (\a.\b.a)) d ((\f.\x.x) f x) (f (c d m f x))) ((\m.\n.n (\n.\f.\) x.n (\g.\h.h (g f)) (\u.x) (\u.u)) m) n m))) ((\n.\f.\x. f (n f x)) n))

उदाहरण के लिए, 9/3 द्वारा दर्शाया गया है

डिवाइड (\f.\x.f (f (f (f (f (f (f (f (f x)))))))) (\f.\x.f (f (f x)))

लैम्ब्डा कैलकुलस कैलकुलेटर का उपयोग करते हुए, सामान्य क्रम का उपयोग करते हुए, उपरोक्त अभिव्यक्ति 3 तक कम हो जाती है।

\f.\x.f (f (f (x)))

हस्ताक्षरित संख्या

चर्च अंकों को पूर्णांक तक विस्तारित करने के लिए एक सरल दृष्टिकोण एक चर्च जोड़ी का उपयोग करना है, जिसमें चर्च अंक सकारात्मक और नकारात्मक मान का प्रतिनिधित्व करते हैं।[5] पूर्णांक मान दो चर्च अंकों के बीच का अंतर है।

एक प्राकृतिक संख्या को एक हस्ताक्षरित संख्या में परिवर्तित किया जाता है,

मूल्यों की अदला-बदली करके नकारात्मकता का प्रदर्शन किया जाता है।

यदि जोड़ी में से एक शून्य है तो पूर्णांक मान अधिक स्वाभाविक रूप से प्रदर्शित होता है। OneZero फलन इस स्थिति को प्राप्त करता है,

रिकर्सन को वाई कॉम्बिनेटर का उपयोग करके कार्यान्वित किया जा सकता है,


प्लस और माइनस

जोड़ी पर जोड़ को गणितीय रूप से परिभाषित किया गया है,

अंतिम अभिव्यक्ति का लैम्ब्डा कैलकुलस में अनुवाद किया गया है,

इसी प्रकार घटाव परिभाषित किया गया है,

देना,


गुणा और भाग

गुणन द्वारा परिभाषित किया जा सकता है,

अंतिम अभिव्यक्ति का लैम्ब्डा कैलकुलस में अनुवाद किया गया है,

विभाजन के लिए यहाँ एक समान परिभाषा दी गई है, इस परिभाषा को छोड़कर, प्रत्येक जोड़ी में एक मान शून्य होना चाहिए (ऊपर OneZero देखें)। DivZ फलन हमें शून्य घटक वाले मान को अनदेखा करने की अनुमति देता है।

divZ का उपयोग तब निम्न सूत्र में किया जाता है, जो गुणन के समान है, लेकिन divZ द्वारा प्रतिस्थापित बहु के साथ।


परिमेय और वास्तविक संख्याएं

लैम्ब्डा कैलकुस में तर्कसंगत और गणना योग्य संख्या भी एन्कोड की जा सकती है। तर्कसंगत संख्याओं को हस्ताक्षरित संख्याओं की एक जोड़ी के रूप में एन्कोड किया जा सकता है। संगणनीय वास्तविक संख्याओं को एक सीमित प्रक्रिया द्वारा एन्कोड किया जा सकता है जो गारंटी देता है कि वास्तविक मूल्य से अंतर एक संख्या से भिन्न होता है जो कि हमारी आवश्यकता के अनुसार छोटा हो सकता है।[6]

[7] दिए गए संदर्भ सॉफ्टवेयर का वर्णन करते हैं, जो सैद्धांतिक रूप से लैम्ब्डा कैलकुलस में अनुवादित हो सकते हैं। एक बार वास्तविक संख्या परिभाषित हो जाने के बाद, जटिल संख्याएं स्वाभाविक रूप से वास्तविक संख्याओं की एक जोड़ी के रूप में एन्कोडेड होती हैं।

ऊपर वर्णित डेटा प्रकार और फलन प्रदर्शित करते हैं कि लैम्ब्डा कैलकुलस में किसी भी डेटा प्रकार या गणना को एन्कोड किया जा सकता है। यह चर्च-ट्यूरिंग थीसिस है।

अन्य अभ्यावेदन के साथ अनुवाद

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

type Church a = (a -> a) -> a -> a

church :: Integer -> Church Integer
church 0 = \f -> \x -> x
church n = \f -> \x -> f (church (n-1) f x)

unchurch :: Church Integer -> Integer
unchurch cn = cn (+ 1) 0


चर्च बूलियन्स

चर्च बूलियन सच्चे और झूठे बूलियन मूल्यों के चर्च एन्कोडिंग हैं। कुछ प्रोग्रामिंग भाषाएं इन्हें बूलियन अंकगणित के कार्यान्वयन मॉडल के रूप में उपयोग करती हैं; उदाहरण स्मालटाक और पिको (प्रोग्रामिंग भाषा) हैं।

बूलियन तर्क को एक विकल्प के रूप में माना जा सकता है। सच और झूठ का चर्च एन्कोडिंग दो मापदंडों के कार्य हैं:

  • सच पहला पैरामीटर चुनता है।
  • झूठा दूसरा पैरामीटर चुनता है।

दो परिभाषाओं को चर्च बूलियंस के रूप में जाना जाता है:

यह परिभाषा विधेय (अर्थात सत्य मान लौटाने वाले कार्य) को सीधे-सीधे क्रिया-खंड के रूप में कार्य करने की अनुमति देती है। बूलियन लौटाने वाला एक फलन , जिसे दो पैरामीटर पर लागू किया जाता है, या तो पहला या दूसरा पैरामीटर देता है:

तत्कालीन खंड का मूल्यांकन करता है यदि विधेय-एक्स सत्य का मूल्यांकन करता है, और अन्य-खंड का मूल्यांकन करता है यदि विधेय-एक्स गलत का मूल्यांकन करता है।

क्योंकि सत्य और असत्य पहले या दूसरे पैरामीटर का चयन करते हैं, उन्हें लॉजिक ऑपरेटर प्रदान करने के लिए संयोजित किया जा सकता है। ध्यान दें कि नहीं के कई संभावित कार्यान्वयन हैं।

कुछ उदाहरण: