डिडक्टिव लैम्ब्डा कैलकुलस

डिडक्टिव लैम्ब्डा कैलकुलस इस बात पर विचार करता है कि क्या होता है जब लैम्ब्डा कैलकुलस#परिभाषा को गणितीय अभिव्यक्ति के रूप में माना जाता है। लैम्ब्डा कैलकुलस की एक व्याख्या एक प्रोग्रामिंग भाषा के रूप में है जहां मूल्यांकन एक अभिव्यक्ति पर कटौती करके आगे बढ़ता है जब तक कि यह सामान्य रूप में न हो। इस व्याख्या में, यदि अभिव्यक्ति कभी भी सामान्य रूप में कम नहीं होती है तो प्रोग्राम कभी समाप्त नहीं होता है, और मान अपरिभाषित होता है। गणितीय निगमन प्रणाली के रूप में माने जाने पर, प्रत्येक कमी से अभिव्यक्ति के मूल्य में कोई बदलाव नहीं आएगा। अभिव्यक्ति अभिव्यक्ति की कमी के बराबर होगी।

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

बाद में प्रोग्रामिंग भाषा की परिभाषा के रूप में लैम्ब्डा कैलकुलस को पुनर्जीवित किया गया।

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

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

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

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

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

निम्नलिखित तालिका सारांशित करती है;

गणित के रूप में लैम्ब्डा कैलकुलस की व्याख्या
गणित की व्याख्या में, लैम्ब्डा शब्द मूल्यों का प्रतिनिधित्व करते हैं। बीटा रिडक्शन#रिडक्शन डिडक्टिव चरण हैं जो अभिव्यक्तियों के मूल्यों में परिवर्तन नहीं करते हैं।
 * $$\operatorname{eta-reduct}[X] = X $$
 * $$\operatorname{beta-reduct}[X] = X $$

गणित के रूप में एटा कमी
एक ईटा-रिडक्ट द्वारा परिभाषित किया गया है,
 * $$x \not \in \operatorname{FV}(f) \to \operatorname{eta-reduct}[\lambda x.(f\ x)] = f $$

गणितीय व्याख्या में,
 * $$\operatorname{eta-reduct}[X] = X $$

f को एक चर मानते हुए,
 * $$\lambda x.(f\ x) = f $$

या देने से $$f\ x = y $$
 * $$f\ x = y \iff f = \lambda x.y $$

यह परिभाषा परिभाषित करती है $$ \lambda x.y $$ समीकरण में f का समाधान होने के लिए,
 * $$f\ x = y $$

गणित के रूप में बीटा कमी
एक बीटा कमी है,
 * $$\operatorname{beta-reduct}[(\lambda x.b)\ z] = b[x:=z] $$

और के रूप में,
 * $$\operatorname{beta-reduct}[X] = X $$

तब,
 * $$(\lambda x.b)\ z = b[x:=z] $$

यह नियम सार्वभौमिक परिमाणीकरण चर के सार्वभौमिक तात्कालिकता द्वारा निहित है। अगर,
 * $$\forall x: f\ x = y $$

तब $$f\ z $$ परिमाणित चर x के साथ अभिव्यक्ति y है जिसे z के रूप में त्वरित किया गया है।
 * $$f\ z = y[x:=z] $$

इसलिए,
 * $$(\lambda x.y)\ z = y[x:=z] $$

चूँकि बीटा कमी ईटा कमी से निहित है, दोनों परिभाषाओं के बीच कोई विरोधाभास नहीं है।

द्विसंयोजकता के सिद्धांत के साथ असंगति
मान लीजिए z एक बूलियन बीजगणित (संरचना) है; तब हम बिना किसी समाधान वाला समीकरण बना सकते हैं,
 * $$ z = \neg z $$

इस समीकरण को पुनरावर्तन द्वारा हल करने के लिए, हम एक नया फ़ंक्शन प्रस्तुत करते हैं $f$ द्वारा परिभाषित,
 * $$f\ n = \neg (n\ n)$$

कहाँ $n$ रिकर्सन मान रखने के लिए एक सहायक चर है। (हम इसे लेते हैं $$\neg$$ फिर भी एक बूलियन लौटाता है, भले ही उसे गैर-बूलियन तर्क दिया गया हो।) ईटा-कमी से, हम प्राप्त करते हैं,
 * $$f = \lambda x.\neg (x\ x) $$

और तब,
 * $$\begin{align} f\ f

&= (\lambda x.\neg (x\ x)) (\lambda x.\neg (x\ x)) \\ &= \neg ((\lambda x.\neg (x\ x)) (\lambda x.\neg (x\ x))) \\ &= \neg (f\ f) \end{align}$$ तब $f f$ न तो सत्य है और न ही असत्य, और जैसे $f f$ एक बूलियन मान है (किसी पर भी)। $x$, $f$ बूलियन लौटाता है $$\neg (x\ x)$$) तो हम उसे देखते हैं $f f$ न तो सत्य है और न ही असत्य; यह यह भी दर्शाता है कि गैर-तार्किक मूल्यों पर लागू होने पर नकार का अर्थ कम होता है।

गहन बनाम विस्तारित समानता
डिडक्टिव सिस्टम के रूप में लैम्ब्डा कैलकुलस की व्याख्या के लिए एक और कठिनाई लैम्ब्डा शब्दों के रूप में मूल्यों का प्रतिनिधित्व है, जो कार्यों का प्रतिनिधित्व करते हैं। अनटाइप्ड लैम्ब्डा कैलकुलस को लैम्ब्डा टर्म पर कटौती करके लागू किया जाता है, जब तक कि यह शब्द सामान्य रूप में न हो। विस्तारात्मक व्याख्या समानता का अर्थ यह है कि लैम्ब्डा शब्द को सामान्य रूप में कम करना लैम्ब्डा शब्द का मान है।

यह व्याख्या लैम्ब्डा अभिव्यक्ति की पहचान को उसकी संरचना मानती है। दो लैम्ब्डा पद समान हैं यदि वे अल्फ़ा परिवर्तनीय हैं।

फ़ंक्शन समानता की विस्तारात्मक परिभाषा यह है कि यदि दो फ़ंक्शन समान मैपिंग करते हैं तो वे समान होते हैं;
 * $$f = g \iff (\forall x f\ x = g\ x)$$

इसका वर्णन करने का एक तरीका यह है कि विस्तारित समानता कार्यों की समानता का वर्णन करती है, जबकि गहन समानता फ़ंक्शन कार्यान्वयन की समानता का वर्णन करती है।

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

उदाहरण
अंकगणित में, वितरण गुण का तात्पर्य यह है $$2 * (r + s) = 2*r + 2*s$$. चर्च एन्कोडिंग#चर्च अंकों का उपयोग करके बाएँ और दाएँ पक्ष को लैम्ब्डा शब्दों के रूप में दर्शाया जा सकता है।

तो वितरणात्मक कानून कहता है कि दो कार्य,
 * $$\lambda r.\lambda s.2 * (r + s) = \lambda r.\lambda s.2*r + 2*s$$

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


 * $$\begin{align}

\lambda r.\lambda s.\operatorname{mult}\ 2\ (\operatorname{plus}\ r\ s) &= \lambda r.\lambda s.\operatorname{plus}\ (\operatorname{mult}\ 2\ r)\ (\operatorname{mult}\ 2\ s) \\ {\scriptstyle \lambda r.\lambda s.(\lambda m.\lambda n.\lambda f. m\ (n\ f))\ (\lambda f.\lambda x.f\ (f\ x))\ ((\lambda m.\lambda n.\lambda f.\lambda x. m\ f\ (n\ f\ x))\ r\ s)} &=

{\scriptstyle \lambda r.\lambda s.(\lambda m.\lambda n.\lambda f.\lambda x. m\ f\ (n\ f\ x))\ ((\lambda m.\lambda n.\lambda f. m\ (n\ f))\ (\lambda f.\lambda x.f\ (f\ x))\ r)\ ((\lambda m.\lambda n.\lambda f. m\ (n\ f))\ (\lambda f.\lambda x.f\ (f\ x))\ s)} \\ \lambda r.\lambda s.\lambda f.\lambda x.r\ f\ (s\ f\ (r\ f\ (s\ f\ x))) &= \lambda r.\lambda s.\lambda f.\lambda x.r\ f\ (r\ f\ (s\ f\ (s\ f\ x))) \end{align}$$ दो शब्द बीटा समान अभिव्यक्तियों को कम करते हैं। फिर भी वे अल्फ़ा परिवर्तनीय नहीं हैं, या यहाँ तक कि ईटा परिवर्तनीय भी नहीं हैं (बाद वाला अनुसरण करता है क्योंकि दोनों शब्द पहले से ही ईटा-लॉन्ग रूप में हैं)। अत: समानता की गहन परिभाषा के अनुसार, भाव समान नहीं हैं। लेकिन यदि दोनों कार्यों को समान चर्च अंकों पर लागू किया जाता है तो वे वितरणात्मक कानून द्वारा समान परिणाम उत्पन्न करते हैं; इस प्रकार वे विस्तारित रूप से समान हैं।

यह एक महत्वपूर्ण समस्या है, क्योंकि इसका मतलब है कि लैम्ब्डा-टर्म का गहन मूल्य विस्तारित रूप से मान्य परिवर्तनों के तहत बदल सकता है। इस समस्या का समाधान एक ओमेगा-नियम लागू करना है,


 * यदि, सभी लैम्ब्डा-अभिव्यक्तियों के लिए $t$ अपने पास $$f\ t \ \underset{\beta}=\ g\ t$$, तब $$f \ \underset{\beta}=\ g$$.

हमारी स्थिति में, सभी लैम्ब्डा-अभिव्यक्तियों का अर्थ सभी चर्च अंक हैं, इसलिए यह मानक अर्थ में भी एक ओमेगा-नियम है। ध्यान दें कि ओमेगा-नियम का तात्पर्य ईटा-नियम से है $$f\ t \ \underset{\beta}=\ (\lambda x.f\ x)\ t$$ दाहिनी ओर बीटा-कमी द्वारा।

सैद्धांतिक डोमेन सेट करें
लैम्ब्डा अमूर्तन कार्यों के कार्य हैं। सभी कार्यों के एक सेट के रूप में लैम्ब्डा एब्स्ट्रैक्शन के लिए एक डोमेन को परिभाषित करना एक स्वाभाविक कदम है।

डोमेन D से रेंज R तक सभी फ़ंक्शंस का सेट K द्वारा दिया गया है,
 * $$f \in K \iff (\forall x : x \in D \implies f\ x \in R) $$

फिर कार्यों के सभी कार्यों के सेट की (काल्पनिक) परिभाषा एफ द्वारा दी गई है,


 * $$f \in F \iff (\forall x : x \in F \implies f\ x \in F) $$

यह परिभाषा किसी स्वयंसिद्ध समुच्चय सिद्धांत में तैयार नहीं की जा सकती; और यह अनुभवहीन समीकरण, भले ही इसे एक सेट सिद्धांत में लिखा जा सकता है, इसका कोई समाधान नहीं है।

अब लैम्ब्डा कैलकुलस को बीटा कटौती और ईटा कटौती द्वारा परिभाषित किया गया है। समानता को परिभाषित करने के रूप में कमी की व्याख्या करने से लैम्ब्डा कैलकुलस के लिए एक अंतर्निहित डोमेन मिलता है। नियम हैं,
 * प्रत्येक लैम्ब्डा एब्स्ट्रैक्शन का एक मान होता है।
 * लैम्ब्डा शब्द की बीटा कमी का मान समान होता है।
 * लैम्ब्डा पद की ईटा कमी का मान समान होता है।
 * अल्फ़ा परिवर्तनीय लैम्ब्डा पद समान हैं।
 * [यदि ओमेगा-नियम मौजूद है] ओमेगा-समतुल्य लैम्ब्डा पद बराबर हैं।
 * यदि उपरोक्त नियमों द्वारा दो लैम्ब्डा पदों को समान नहीं दिखाया जा सकता है, तो वे समान नहीं हैं।

यदि दो लैम्ब्डा शब्दों को सामान्य रूप में घटाया जा सकता है तो चर्च-रोसेर प्रमेय का उपयोग यह दिखाने के लिए किया जा सकता है कि वे समान हैं यदि उनके सामान्य रूप अल्फा परिवर्तनीय हैं।

यदि एक या दोनों पद सामान्य नहीं हो रहे हैं तो लैम्ब्डा कैलकुलस#समतुल्यता की अनिश्चितता दर्शाती है कि सामान्य तौर पर यह निर्धारित करने के लिए कोई एल्गोरिदम नहीं है कि दो लैम्ब्डा पद समान हैं या नहीं। सामान्य तौर पर इससे यह जानना असंभव हो जाता है कि लैम्ब्डा कैलकुलस डोमेन के विशिष्ट तत्व क्या हैं।

उदाहरण: कोई समाधान नहीं → एक समाधान
उदाहरण के लिए समीकरण $$x = \neg x$$ चर्च एन्कोडिंग के साथ कोडित किया जा सकता है और लैम्ब्डा कैलकुलस में फिक्स्ड-पॉइंट कॉम्बिनेटर#फिक्स्ड पॉइंट कॉम्बिनेटर का उपयोग किया जा सकता है|करी के वाई कॉम्बिनेटर के रूप में,
 * $$\operatorname{not}_1 = \lambda p.\lambda a.\lambda b.p\ b\ a$$
 * $$(\lambda f.(\lambda x.f\ (x\ x))\ (\lambda x.f\ (x\ x))) (\lambda p.\lambda a.\lambda b.p\ b\ a) $$

और प्रत्यावर्तन है,
 * $$(\lambda x.(\lambda p.\lambda a.\lambda b.p\ b\ a)\ (x\ x))\ (\lambda x.(\lambda p.\lambda a.\lambda b.p\ b\ a)\ (x\ x)) $$
 * $$(\lambda p.\lambda a.\lambda b.p\ b\ a)\ ((\lambda x.(\lambda p.\lambda a.\lambda b.p\ b\ a)\ (x\ x))\ (\lambda x.(\lambda p.\lambda a.\lambda b.p\ b\ a)\ (x\ x))) $$
 * $$\lambda a.\lambda b.((\lambda x.(\lambda p.\lambda a.\lambda b.p\ b\ a)\ (x\ x))\ (\lambda x.(\lambda p.\lambda a.\lambda b.p\ b\ a)\ (x\ x)))\ b\ a $$
 * $$\lambda a.\lambda b.(\lambda a.\lambda b.((\lambda x.(\lambda p.\lambda a.\lambda b.p\ b\ a)\ (x\ x))\ (\lambda x.(\lambda p.\lambda a.\lambda b.p\ b\ a)\ (x\ x)))\ b\ a)\ b\ a $$
 * ... (बीटा और फिर ईटा कमी)
 * $$(\lambda x.(\lambda p.\lambda a.\lambda b.p\ b\ a)\ (x\ x))\ (\lambda x.(\lambda p.\lambda a.\lambda b.p\ b\ a)\ (x\ x)) $$
 * $$(\lambda x.(\lambda p.\lambda a.\lambda b.p\ b\ a)\ (x\ x))\ (\lambda x.(\lambda p.\lambda a.\lambda b.p\ b\ a)\ (x\ x)) $$

जो पहली पंक्ति है और अनिश्चित काल तक दोहराई जाएगी। अभिव्यक्ति कभी भी सामान्य रूप में कम नहीं होती। हालाँकि कमी में प्रत्येक लैम्ब्डा शब्द समान मान का प्रतिनिधित्व करता है। यह मान सत्य या असत्य के एन्कोडिंग से भिन्न है। यह बूलियन डोमेन का हिस्सा नहीं है लेकिन यह लैम्ब्डा कैलकुलस डोमेन में मौजूद है।

उदाहरण: एकाधिक समाधान → एक समाधान
चर्च एन्कोडिंग#डिवीजन और चर्च एन्कोडिंग#हस्ताक्षरित संख्याओं का उपयोग करते हुए, वाई कॉम्बिनेटर का उपयोग पूर्ण संख्या वर्गमूल का प्रतिनिधित्व करने वाले अभिव्यक्ति को परिभाषित करने के लिए किया जा सकता है। चर्च एन्कोडिंग को तर्कसंगत और वास्तविक संख्या संख्याओं तक भी बढ़ाया जा सकता है, ताकि वास्तविक वर्गमूल को परिभाषित किया जा सके। चर्च-ट्यूरिंग थीसिस का तात्पर्य है कि किसी भी गणना योग्य ऑपरेटर (और उसके ऑपरेंड) को लैम्ब्डा कैलकुलस में दर्शाया जा सकता है।

ऐसी एन्कोडिंग का उपयोग करते हुए,
 * $$ x^2 = n \Rightarrow x = \frac{n}{x} \Rightarrow f\ x = \frac{n}{x} \land Y\ f = x$$

चर्च एन्कोडिंग#डिवीजन के कार्यान्वयन का उपयोग करते हुए,
 * $$ Y (\operatorname{divide} n) $$

यदि n शून्य के बराबर नहीं है, तो हस्ताक्षरित संख्याओं के डोमेन में दो मानों का प्रतिनिधित्व करता है। हालाँकि यह एक लैम्ब्डा एक्सप्रेशन है इसलिए लैम्ब्डा कैलकुलस डोमेन में इसका केवल एक ही मान है। इस लैम्ब्डा शब्द की बीटा कमी कभी भी सामान्य रूप तक नहीं पहुँचती है। हालाँकि यह एक मान का प्रतिनिधित्व करता है, इसलिए लैम्ब्डा कैलकुलस डोमेन में एक एकल मान हस्ताक्षरित संख्या डोमेन में दो मानों का प्रतिनिधित्व करता है।

यह भी देखें

 * लैम्ब्डा कैलकुलस
 * आओ अभिव्यक्ति
 * चर्च एन्कोडिंग