लैम्ब्डा कैलकुलस में अज्ञात कार्यों के लिए कार्यात्मक समीकरणों को हल करना


14

क्या लैम्ब्डा कैलकुलस में अज्ञात कार्यों के लिए कार्यात्मक समीकरणों को हल करने की कोई तकनीक है?

मान लीजिए कि मेरे पास पहचान का कार्य अत्यधिक रूप से परिभाषित है:

Ix=x

(है कि है कि समारोह से अपेक्षित व्यवहार के लिए एक समीकरण नीचे लिख कर, है) और अब मैं के लिए इसे हल करना चाहते हैं कुछ बीजगणित संबंधी परिवर्तन कर कि समारोह के लिए intensional सूत्र प्राप्त करने के लिए द्वारा:I

I=λx.x

यह बताता है कि कार्य वास्तव में वह कैसे करता है जो अपेक्षित था (यानी, लैम्ब्डा कैलकुलस में इसे कैसे लागू किया जाए)।

बेशक पहचान समारोह केवल एक उदाहरण के रूप में प्रयोग किया जाता है। मुझे इस तरह के समीकरणों को हल करने के अधिक सामान्य तरीकों में दिलचस्पी है। विशेष रूप से, मैं एक फ़ंक्शन खोजना चाहूंगाB जो निम्नलिखित आवश्यकता को पूरा करे:

Bf(λx.M)=(λx.fM)

वह है, दिए गए फ़ंक्शन को दिए गए लैम्ब्डा फंक्शन उसके "बॉडी" M (जो कि कुछ मनमाना लैम्ब्डा एक्सप्रेशन है) से पहले " करता है" , संभवतः इसे अलग करके और एक नया निर्माण करके, ताकि यह बन जाए। एक फंक्शन पैरामीटर जिसे पर लागू किया जाता है।f(λx.M)Mf

जवाबों:


13

यह एक ज्ञात समस्या है, जिसे उच्च आदेश एकीकरण के रूप में जाना जाता है ।

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

यह पत्र एक महान ट्यूटोरियल प्रदान करता है कि उच्चतर क्रम एकीकरण कैसे काम करता है, और इसके (अपेक्षाकृत) सरल कार्यान्वयन के माध्यम से चलता है।

दुर्भाग्य से, ऐसा नहीं लगता है कि आपका कार्य इस पैटर्न के टुकड़े में आता है। उस ने कहा, मैं जो देख रहा हूं वह फंक्शन रचना के समान है। क्या निम्न फ़ंक्शन आपकी संपत्ति को संतुष्ट करता है?

B=λf g x .f (g x)

हमारे पास है:

  • B f (λx.M)
  • द्वारा α -equivalence=B f (λy.[y/x]M)α
  • =λx.f ((λy.[y/x]M)x)
  • =λx.f ([x/y][y/x]M)
  • =λx.f M

1
हाँ, यह की तरह लगता है :) अजीब बात है, मैं लगभग कि समाधान है, लेकिन किसी कारण से मैंने सोचा था कि बुला कुछ पर "निष्पादित" होता है, अभिव्यक्ति अप खिलवाड़: q क्या मैं यह है याद किया कि हम वेरिएबल को किसी अन्य वेरिएबल के साथ बाहर से स्थानापन्न कर सकते हैं। (λx.M)
बारबराकर्क

1
पेपर के लिंक के लिए भी धन्यवाद, मैं इसकी जांच करूंगा, और मैं कुछ दिनों में आपके जवाब को स्वीकार करूंगा ताकि अन्य लोगों को भी मौका दिया जा सके।
बारबराक्वार्क

3
क्या यह उच्चतर आदेश एकीकरण है? यह सवाल केवल टाइप किए गए लैंबडा कैलकुलस की बजाय अनकैप्ड लैम्ब्डा कैलकुलस के बारे में लगता है।
पीटर टेलर

2

मुझे लगता है कि मेरे पास एक आंशिक उत्तर है, पहचान समारोह के साथ समीकरण के बारे में:

Ix=x

हम के लिए सूत्र का पता लगाकर इसे हल करना चाहते हैं , जो फार्म का होगा ( λ पी एम ) कुछ अभी तक अज्ञात अभिव्यक्ति के साथ एम उसके शरीर के रूप में। आइए इसे मूल समीकरण में I के लिए स्थानापन्न करें :I(λp.M)MI

(λp.M)x=x

फिर फ़ंक्शन को बाएँ हाथ की तरफ पर लागू करें :x

M[p/x]=x

लेकिन हमारे यहाँ क्या है? :> यह समीकरण उस अभिव्यक्ति के लिए सूत्र है जिसे हम तलाश कर रहे हैं, एक्स के साथ इसमें पी की हर घटना को प्रतिस्थापित करने के बाद , और यह कहता है कि यह दाहिने हाथ की तरफ की तरह दिखना चाहिए बाद में :) दूसरे शब्दों में, फ़ंक्शन हम के लिए देख रहे हैं:Mpx

I=(λx.x)

सही उत्तर कौन सा है :)


आइए कॉम्बीनेटर के सूत्र को खोजने के लिए समान दृष्टिकोण का प्रयास करें । हम चाहते हैं कि यह इस तरह से काम करे, जब खुद पर लागू हो, खुद पर लागू होगा:ω

ωω=ωω

आइए अब के लिए सूत्र खोजने के फार्म की है जो ( λ एक्स एम ) कुछ अभी तक अज्ञात अभिव्यक्ति के लिए एम । इसे हमें प्राप्त समीकरण में प्रतिस्थापित करना:ω(λx.M)M

(λx.M)ω=ωω

इसे बाएं हाथ की ओर पैरामीटर पर लागू करने से लिए सूत्र मिलता है :M

M[x/ω]=ωω

यह कहना है कि की प्रत्येक पुनरावृत्ति प्रतिस्थापन के बाद में एम के साथ ω यह उत्पादन ωxMω , तो हम मान सकते हैं कि मूल अभिव्यक्ति एम प्रतिस्थापन से पहले किया जाना चाहिए था एक्सωωM , इसलिए जिस फ़ंक्शन की हमें तलाश थी वह इस तरह दिखना चाहिए:xx

ω=(λx.xx)

जो वास्तव में मामला है :)


हालाँकि, मुझे लग रहा है, कि यह इतना आसान हो सकता है क्योंकि दाहिने हाथ की तरफ पहले से ही हम जिस रूप में देख रहे हैं, वह पहले से ही था।


वहाँ से जाने का एक एल्गोरिथम तरीका है M[x/ω]=ωωω=(λx.xx)

इन दो सरल मामलों में - हाँ, वहाँ है: बस प्रतिस्थापन को उल्टा करें। लेकिन जैसा कि मैंने कहा, ये मामले शुद्ध "भाग्य" द्वारा काम कर सकते हैं: यह कि दाहिने हाथ की तरफ पहले से ही आवश्यक रूप में है। जब मैंने इसे कुछ और जटिल उदाहरणों के साथ आज़माया, तो यह काम नहीं किया। हालांकि, मैं यह देख रहा हूं: एक एल्गोरिथम तरीके के लिए।
बारबराकर्क 12

1
ωω=ωωωω
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.