शुद्ध लैम्ब्डा कैलकुलस में एक क्वीन


13

मैं एक का एक उदाहरण चाहते हैं Quine शुद्ध में लैम्ब्डा पथरी । मुझे काफी हैरानी हुई कि मैं गोग्लिंग से एक नहीं मिला। क्वीन पेज कई "वास्तविक" भाषाओं के लिए सूचीबद्ध करता है, लेकिन लैम्ब्डा कैलकुलस के लिए नहीं।

बेशक, इसका मतलब है कि लंबोदा पथरी में एक क्वीन द्वारा मेरा मतलब परिभाषित करना, जो मैं नीचे करता हूं। (मैं कुछ विशिष्ट के लिए पूछ रहा हूँ।)

कुछ स्थानों पर, जैसे लार्किन और स्टॉक्स (2004) में, मैं एक "स्वयं नकल" अभिव्यक्ति के रूप में उद्धृत निम्न देखें: (λx.xx)(λx.xx) । यह एक एकल बीटा-कमी कदम के बाद खुद को कम कर देता है, जिससे यह किसी तरह से क्विन जैसी भावना देता है। हालाँकि, यह अन-क्विन-लाइक है जिसमें यह समाप्त नहीं होता है: आगे बीटा-रिडक्शन समान अभिव्यक्ति का उत्पादन करते रहेंगे, इसलिए यह सामान्य रूप में कभी कम नहीं होगा। मेरे लिए एक क्वीन एक प्रोग्राम है जो स्वयं को समाप्त और आउटपुट करता है, और इसलिए मैं उस संपत्ति के साथ एक लंबोदर अभिव्यक्ति चाहूंगा।

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

परिभाषा (जांच): लैम्ब्डा पथरी में एक Quine प्रपत्र की एक अभिव्यक्ति है

(λx.A)
(जहां A कुछ विशिष्ट लैम्ब्डा पथरी अभिव्यक्ति के लिए खड़ा है) ऐसा है कि ((λx.A)y) बन जाता है(λx.A) , या चर नाम के परिवर्तन के तहत इसके बराबर कुछ, जबकिसीइनपुट लिए सामान्य रूप में घटाया जाता हैy

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

संदर्भ

जेम्स लार्किन और फिल स्टॉक्स। (2004) "लेम्बडा कैलकुलस में सेल्फ-रेप्लिकेटिंग एक्सप्रेशंस" कॉन्फ्रेंस इन रिसर्च एंड प्रैक्टिस इन इंफॉर्मेशन टेक्नोलॉजी, 26 (1), 167-173। http://epublications.bond.edu.au/infotech_pubs/158


मेरे प्रश्न का उत्तर नहीं है, लेकिन मेरे स्वयं के भविष्य के संदर्भ के लिए (और भविष्य के आगंतुकों के लिए) यह wiki.haskell.org/Combinatory_logic का लिंक होना उपयोगी होगा , जिसमें किसी के पास मेरे बारे में किए गए उद्धरणों के बारे में बहुत गहरे विचार हैं।
नथानिएल

ध्यान दें कि एक क्वीन को अपने स्वयं के सोर्स कोड का उत्पादन करने की आवश्यकता होती है । फ़ंक्शन का प्रतिनिधित्व करता है यह पर्याप्त नहीं है।
PyRulez

@PyRulez लैम्बडा एक्सप्रेशन के लिए सोर्स कोड क्या है? यदि यह वर्णों का एक क्रम है, तो एक लैम्बडा अभिव्यक्ति के लिए इसे आउटपुट करना असंभव है, और परिणामस्वरूप हम अस्पष्टता के डर के बिना लैम्ब्डा के भावों के लिए कुछ अलग करने के लिए "क्वीन" शब्द को परिभाषित कर सकते हैं। दूसरी ओर, यदि आप स्रोत कोड को लैम्ब्डा एक्सपेसिसियन होने के रूप में मानते हैं तो "स्रोत कोड" और "यह जिस फ़ंक्शन का प्रतिनिधित्व करता है" वही चीज हैं। इसलिए मुझे लगता है कि मैं यहां ठीक हूं।
नथानिएल

तार के लिए एक चर्च एन्कोडिंग है। एक लैम्ब्डा कैलकुलस क्वाइन को प्रतिनिधित्व करने वाले पात्रों के तार के चर्च एन्कोडिंग का उत्पादन करना चाहिए।
PyRulez

यकीन है, यह करना मुश्किल नहीं है, अगर आप इसे इस तरह से परिभाषित करते हैं। यह सवाल एक अलग चीज के बारे में था।
नथानिएल

जवाबों:


8

आप एक शब्द चाहते ऐसी है कि एम Λ :QMΛ

QMβQ

मैं पर कोई और प्रतिबंध नहीं निर्दिष्ट करूंगा (जैसे इसके स्वरूप के बारे में और क्या यह सामान्य हो रहा है) और मैं आपको दिखाऊंगा कि यह निश्चित रूप से गैर-सामान्य होना चाहिए।Q

  1. मान लें है में सामान्य रूप। चुनें (हम ऐसा कर सकते हैं क्योंकि प्रमेय को सभी लिए पकड़ना होगा )। फिर तीन मामले हैं।एम एक्स एमQMxM

    • एक क्यू एम एक एक्स एकQ कुछ परमाणु । फिर । यह reducible नहीं है ।aQMaxa
    • ( R S ) Q M ( R S ) x ( R S ) ( R S ) x ( R S )Q कुछ एप्लिकेशन । फिर । परिकल्पना द्वारा एक सामान्य रूप है, इसलिए भी सामान्य रूप में है और लिए reducible नहीं है ।(RS)QM(RS)x(RS)(RS)x(RS)
    • ( λ एक्स एक ) x एक एम λ क्यू एम ( λ एक्स एक ) एक्स बीटा एक [ एक्स / एक्स ] एक ( λ एक्स एक ) एक एक ( λ एक्स एक )Q कुछ अमूर्त है (यदि को में मुक्त माना जाता है , तो सादगी के लिए हम बस जो भी चर abstracts के बराबर चुन सकते हैं )। तब । चूंकि सामान्य रूप में है, इसलिए । नतीजतन हम to को कम नहीं कर सकते ।(λx.A)xAMλQM(λx.A)xβA[x/x]A(λx.A)AA(λx.A)

    इसलिए यदि ऐसा मौजूद है, तो यह सामान्य रूप में नहीं हो सकता हैQ

  2. पूर्णता के लिए, मान है एक सामान्य रूप है, लेकिन नहीं है में सामान्य रूप (शायद वह कमजोर सामान्य है), अर्थात् के साथ ऐसी है कि : एन बीटा -nf एन क्यू एम Λ क्यू एम बीटा क्यू बीटा एनQ Nβ-nfNQMΛ

    QMβQβN

    फिर साथ एक क्रम भी होना चाहिए , क्योंकि:MxQxβNxβN

    • QxβNx तथ्य यह है कि संभव है ।QβN
    • Nx को सामान्य करना चाहिए के बाद से एक है -nf और सिर्फ एक परमाणु है।Nβx
    • यदि को अलावा किसी अन्य चीज़ के लिए सामान्य किया जाता है , तो पास दो -nfs हैं, जो कि चर्च-रोज़र प्रमेय के लिए एक कोरोलरी द्वारा संभव नहीं है। (चर्च-रोसेर प्रमेय अनिवार्य रूप से बताता है कि कटौती संगम है, जैसा कि आप शायद पहले से ही जानते हैं।)NxNQxβ

    लेकिन ध्यान दें कि ऊपर दिए गए तर्क (1) से संभव नहीं है, इसलिए हमारी धारणा कि का एक सामान्य रूप है, संभव नहीं है।NxβNQ

  3. यदि हम इस तरह के अनुमति देते हैं, तो, हम निश्चित हैं कि यह गैर-सामान्य होना चाहिए। उस मामले में हम बस एक कॉम्बिनेटर का उपयोग कर सकते हैं जो किसी भी तर्क को समाप्त करता है। डेनिस का सुझाव ठीक काम करता है: तब केवल दो निर्धारणों में: Q

    Q(λz.(λx.λz.(xx))(λx.λz.(xx)))
    β
    QM(λz.(λx.λz.(xx))(λx.λz.(xx)))M1β(λx.λz.(xx))(λx.λz.(xx))1β(λz.((λx.λz.(xx))(λx.λz.(xx)))Q

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


अगर मैं डेनिस का जवाब भी स्वीकार कर सकता था तो मैं करूंगा, लेकिन (बाद में मैं थोड़ा और सीखूंगा और इसे पूरी तरह से समझ पाऊंगा) यह जवाब था कि वास्तव में मुझे यकीन था कि इस "क्वीन कॉम्बिनेटर" को किसी द्वारा लागू नहीं किया जा सकता है सामान्य रूप में लंबोदर अभिव्यक्ति।
नथानिएल

9

एक हाथ यह असंभव है, क्योंकि एक क्वीन को अपने कोड का उत्पादन करना है, और शुद्ध लैम्ब्डा कैलकुलस का आउटपुट प्रदर्शन करने का कोई मतलब नहीं है।

दूसरी ओर, यदि आप मानते हैं कि परिणामी शब्द आउटपुट है, तो हर सामान्य रूप एक क्वीन है।

उदाहरण के लिए, लैम्ब्डा शब्द पहले से ही एक सामान्य रूप है, फिर यह मानते हुए कि इसका आउटपुट परिणामी सामान्य रूप है, आउटपुट । इस प्रकार एक क्वीन है।(λx.x)(λx.x)(λx.x)


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

8

यहाँ एक प्रस्ताव है:

हम को फ़ंक्शन का एक निश्चित बिंदु चुनते हैं ।Af=λt.(λz.t)

यह फ़िक्सपॉइंट कॉम्बीनेटर का उपयोग करके किया जा सकता है , और सेट करके किया जा सकता है ।Y=λg.((λx.g (x x)) (λx.g (x x)))A=Yf=(λx.λz.(x x)) (λx.λz.(x x))

अब हम दिखाते हैं कि एक क्वीन है। वास्तव में , को कम कर देता है , इसलिए इसका अर्थ है कि किसी भी , ।AAλz.Ay(λz.A)yβAβ(λz.A)


यह बहुत साफ-सुथरा है, और इस प्रश्न का उत्तर देता है जैसा मैंने पूछा था, इसलिए मुझे इसे स्वीकार नहीं करने के लिए बुरा लगता है --- लेकिन दुर्भाग्य से मैंने जो मुझे चाहिए उसे निर्दिष्ट करने में थोड़ी गलती की। मैं वास्तव में चाहते हैं बनने के लिए जब सामान्य रूप से कम है, बस नहीं एक बीटा कमी कदम के बाद। (क्यों के लिए अद्यतन प्रश्न देखें।) इसका मतलब है कि में कोई भी रीडेक्स नहीं हो सकता है, क्योंकि अगर यह होता है तो कमी समाप्त नहीं होगी। (λz.A)y(λz.A)A
नथानिएल

1
इस मामले में आह मैं कर रहा हूँ यकीन है कि यह निम्नलिखित अंतर्ज्ञान (नहीं एक सबूत लेकिन लगभग) की वजह से असंभव है,: यदि आप चाहते हर के लिए के बाद से यह काम करने के लिए कोई भूमिका निभाने के लिए , तो में मुक्त नहीं होना चाहिए । तब सिर्फ को कम करता है । अब आप चाहते हैं कि to to कम करे । यह अंतिम अभिव्यक्ति एक सामान्य रूप नहीं हो सकती है, क्योंकि अंदर फिर से कम हो सकती है ...yyyA(λz.A)yAAλz.AA
डेनिस

1
यह व्यवहार बहुत आश्चर्यचकित करने वाला नहीं है, क्योंकि " " की "प्रिंटिंग" फिर से निर्देश है, एक क्विन प्रिंटिंग का अपना कोड हमेशा निष्पादन योग्य होता है। आप जो पूछ रहे हैं, वह एक क्वीन के लिए पूछने के समान है जैसे कि यदि आप आउटपुट निष्पादित करते हैं, तो यह कुछ भी प्रिंट नहीं करता है (जो परिभाषा द्वारा असंभव है)। λcalculus
डेनिस

आह, तुम बिल्कुल सही हो। मुझे वह देखना चाहिए था। मुझे यकीन नहीं है कि आपके उत्तर को स्वीकार करना है या बेहतर परिभाषा के लिए प्रश्न को संपादित करना है। मैं इसे थोड़ा विचार करूँगा। (यह अभी भी मुझे लगता है कि गैर-तुच्छ परिभाषा देना संभव होना चाहिए जहां आप कुछ मांग रहे हैं जो समाप्त हो जाएगा, लेकिन मुझे यकीन नहीं है कि कैसे।)
नथानिएल

हालांकि कहा जा रहा है कि, क्या यह सच है कि (मुझे लगता है कि आप मतलब है ) में मुक्त नहीं होना है ? उदाहरण के लिए कुछ हो सकता है । (स्यूडोकोड क्योंकि मुझे यकीन नहीं है कि अगर लैम्ब्डा कैलकुलस में मनमानी अभिव्यक्तियों के लिए समानता ऑपरेटर को परिभाषित करना संभव है, लेकिन मुझे लगता है कि आप देखें कि मेरा क्या मतलब है।)zzAAif z==p then return q, otherwise return q
नथानिएल
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.