Quine ในแคลคูลัสแลมบ์ดาบริสุทธิ์


13

ฉันต้องการตัวอย่างของหนึ่งควินบริสุทธิ์แคลคูลัสแลมบ์ดา ฉันค่อนข้างแปลกใจที่ฉันไม่สามารถหาได้โดย googling หน้า quine แสดงรายการ quines สำหรับภาษา "ของจริง" มากมาย แต่ไม่ใช่สำหรับแคลคูลัสแลมบ์ดา

แน่นอนนี่หมายถึงการกำหนดสิ่งที่ฉันหมายถึงโดยควินินในแลมบ์ดาแคลคูลัสซึ่งฉันทำด้านล่าง (ฉันขอสิ่งที่เฉพาะเจาะจงมาก)

ในบางแห่งเช่น Larkin และ Stocks (2004) ฉันเห็นข้อความต่อไปนี้ว่าเป็น "การเลียนแบบตัวเอง": (λx.xx)(λx.xx) ) สิ่งนี้จะลดตัวเองลงหลังจากขั้นตอนการลดเบต้าเพียงครั้งเดียว อย่างไรก็ตามมันไม่เหมือนควินินในที่มันไม่ยุติ: การลดเบต้าเพิ่มเติมจะทำให้เกิดนิพจน์เดียวกันดังนั้นมันจะไม่ลดลงเป็นรูปแบบปกติ สำหรับฉันควินเป็นโปรแกรมที่ยกเลิกและส่งออกตัวเองและดังนั้นฉันต้องการแสดงออกแลมบ์ดาที่มีคุณสมบัตินั้น

แน่นอนว่าการแสดงออกใด ๆ ที่ไม่มี redexes อยู่ในรูปแบบปกติแล้วจึงจะยุติและส่งออกเอง แต่นั่นเป็นเรื่องเล็กน้อย ดังนั้นฉันจึงเสนอคำนิยามต่อไปนี้ด้วยความหวังว่ามันจะยอมรับวิธีแก้ปัญหาที่ไม่สำคัญ:

คำนิยาม (เบื้องต้น): เป็นควินในแลมบ์ดาแคลคูลัสคือการแสดงออกของรูปแบบ

(λx.A)
(ที่ยืนสำหรับบางคนการแสดงออกเฉพาะแลมบ์ดาแคลคูลัส) เช่นที่( ( λ x . )A((λx.A)y)จะกลายเป็น(λx.A)หรือสิ่งที่เทียบเท่ากับมันภายใต้การเปลี่ยนแปลงของชื่อตัวแปรเมื่อลดลงไปแบบปกติสำหรับการใด ๆการป้อนข้อมูลYy

เนื่องจากแคลคูลัสแลมบ์ดานั้นมีทัวริงเทียบเท่ากับภาษาอื่น ๆ ดูเหมือนว่าจะเป็นไปได้ แต่แคลคูลัสแลมบ์ดาของฉันนั้นเป็นสนิมดังนั้นฉันจึงไม่สามารถคิดตัวอย่างได้

การอ้างอิง

James Larkin และ Phil Stocks (2004) "การแสดงออกของการจำลองตัวเองในแลมบ์ดาแคลคูลัส" การประชุมในการวิจัยและการปฏิบัติในเทคโนโลยีสารสนเทศ, 26 (1), 167-173 http://epublications.bond.edu.au/infotech_pubs/158


ไม่ใช่คำตอบสำหรับคำถามของฉัน แต่สำหรับการอ้างอิงในอนาคตของฉันเอง (และสำหรับผู้เยี่ยมชมในอนาคต) มันจะมีประโยชน์ที่จะมีลิงก์ไปยังwiki.haskell.org/Combinatory_logicซึ่งบางคนมีความคิดที่ลึกซึ้งกว่าเรื่องที่ฉันทำ
นาธาเนียล

ทราบว่าควินความต้องการในการผลิตของตัวเองรหัสที่มา การผลิตฟังก์ชั่นที่มันหมายถึงไม่เพียงพอ
PyRulez

@PyRulez รหัสแหล่งที่มาสำหรับการแสดงออกแลมบ์ดาคืออะไร? ถ้ามันเป็นลำดับของตัวละครมันเป็นไปไม่ได้ที่แลมบ์ดาจะแสดงออกมันออกมาและดังนั้นเราจึงสามารถนิยามคำว่า "ควิน" เพื่อหมายถึงบางสิ่งที่แตกต่างกันเล็กน้อยสำหรับการแสดงออกแลมบ์ดาโดยไม่ต้องกลัวความกำกวม ในทางตรงกันข้ามถ้าคุณคิดว่าซอร์สโค้ดเป็นแลมบ์ดา expesssion ตัวเองแล้ว "ซอร์สโค้ด" และ "ฟังก์ชั่นมันหมายถึง" เป็นสิ่งเดียวกัน ดังนั้นฉันคิดว่าฉันโอเคที่นี่
นาธาเนียล

มีการเข้ารหัสคริสตจักรสำหรับสตริง แคลคูลัสแลมบ์ดาควินินควรส่งออกการเข้ารหัสคริสตจักรของสตริงของตัวละครที่เป็นตัวแทนของมัน
PyRulez

แน่นอนว่าไม่ใช่เรื่องยากที่จะทำถ้าคุณกำหนดไว้อย่างนั้น คำถามนี้เกี่ยวกับสิ่งอื่น
นาธาเนียล

คำตอบ:


8

QMΛ

QMβQ

ฉันจะระบุข้อ จำกัด เพิ่มเติมเกี่ยวกับ (เช่นเกี่ยวกับรูปแบบของมันและไม่ว่าจะเป็นมาตรฐาน) และฉันจะแสดงให้คุณเห็นว่ามันจะต้องไม่เป็นมาตรฐานQ

  1. สมมติว่าอยู่ในรูปแบบปกติ เลือก (เราสามารถทำได้เพราะทฤษฎีบทนั้นต้องมีไว้สำหรับทั้งหมด) จากนั้นมีสามกรณีQMxM

    • Qบางอะตอม จากนั้นขวาน นี้ไม่ได้เป็นออกซิเจนaQMaxa
    • Qเป็นบางโปรแกรมประยุกต์(RS)จากนั้น x เป็นรูปแบบปกติโดยสมมติฐานดังนั้นยังอยู่ในรูปแบบปกติและไม่สามารถลดได้(RS)QM(RS)x(RS)(RS)x(RS)
    • Qคือสิ่งที่เป็นนามธรรม (ถ้าควรจะเป็นอิสระในจากนั้นเพื่อความง่ายเราสามารถเลือกเทียบเท่ากับตัวแปรอะไรก็ได้ abstracts มากกว่า) จากนั้นตั้งแต่อยู่ในรูปแบบปกติเพื่อให้เป็น ดังนั้นเราไม่สามารถลดไปxA)(λx.A)xAMλQM(λx.A)xβA[x/x]A(λx.A)AA(λx.A)

    ดังนั้นหากมีดังกล่าวอยู่ก็ไม่สามารถอยู่ในรูปแบบปกติได้Q

  2. เพื่อความสมบูรณ์สมมติว่ามีรูปแบบปกติ แต่ไม่ได้อยู่ในรูปแบบปกติ (อาจจะเป็นรูปแบบที่อ่อนแอ) คือด้วยเช่นนั้น : Q Nβ-nfNQMΛ

    QMβQβN

    จากนั้นด้วยจะต้องมีลำดับการลดเนื่องจาก:MxQxβNxβN

    • QxβNxเป็นไปได้โดยความจริงที่ว่าNQβN
    • Nxจะต้องทำให้ปกติเนื่องจากคือ -nf และเป็นเพียงอะตอมNβx
    • ถ้าจะทำให้ปกติเป็นอย่างอื่นที่ไม่ใช่ดังนั้นมีสอง -nfs ซึ่งเป็นไปไม่ได้โดยข้อพิสูจน์ของทฤษฎีบท Church-Rosser (ทฤษฎีบท Church-Rosser เป็นหลักระบุว่าการลดลงมารวมกันอย่างที่คุณอาจรู้อยู่แล้ว)NxNQxβ

    แต่โปรดทราบว่าเป็นไปไม่ได้โดยการโต้แย้ง (1) ข้างต้นดังนั้นสมมติฐานของเราว่ามีรูปแบบปกติไม่สามารถใช้การได้NxβNQ

  3. หากเราอนุญาตให้มีดังกล่าวเรามั่นใจว่าจะต้องไม่ทำให้เป็นมาตรฐาน ในกรณีนี้เราสามารถใช้ combinator ที่กำจัดการโต้แย้งใด ๆ ที่ได้รับ ข้อเสนอแนะของเดนิสใช้ได้ดี: จากนั้นในสองลดราคา: start 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.x)


2
นั่นเป็นจุดที่น่าสนใจ ในคำถามที่ฉันพยายามที่จะให้คำจำกัดความของสิ่งที่อาจนับเป็นควินินที่ไม่ใช่เรื่องไร้สาระในแลมบ์ดาแคลคูลัส: ฟังก์ชั่นที่เมื่อนำไปใช้กับอินพุตใด ๆ เบต้าจะลดตัวเองลงไป (แทนชื่อตัวแปร) อาจเป็นได้ว่าสิ่งนี้เป็นไปไม่ได้ แต่อย่างน้อยก็ไม่เป็นที่ชัดเจนสำหรับฉัน
นาธาเนียล

8

นี่คือข้อเสนอ:

เราเลือกเพื่อเป็น fixpoint ของฟังก์ชันZT)Af=λt.(λz.t)

สิ่งนี้สามารถทำได้โดยใช้ fixpoint combinatorและการตั้งค่าx))Y=λg.((λx.g (x x)) (λx.g (x x)))A=Yf=(λx.λz.(x x)) (λx.λz.(x x))

ตอนนี้เราแสดงให้เห็นว่าเป็นควิน แท้จริงลดดังนั้นจึงหมายความว่าสำหรับการใด ๆ ,zA)AAλz.Ay(λz.A)yβAβ(λz.A)


นี่ค่อนข้างเรียบร้อยและตอบคำถามตามที่ฉันถามดังนั้นฉันรู้สึกไม่ดีที่ไม่ยอมรับ --- แต่น่าเสียดายที่ฉันทำผิดเล็กน้อยในการระบุสิ่งที่ฉันต้องการ ฉันต้องการเป็น เมื่อถูกลดขนาดให้เป็นรูปแบบปกติไม่ใช่แค่หลังจากขั้นตอนการลดเบต้า (ดูคำถามที่ปรับปรุงเพื่อหาสาเหตุ) ซึ่งหมายความว่าไม่สามารถมี redexes ใด ๆ ได้เพราะถ้ามันเกิดขึ้นการลดลงจะไม่ยุติลง (λz.A)y(λz.A)A
นาธาเนียล

1
Ah ในกรณีนี้ผมค่อนข้างมั่นใจว่ามันเป็นไปไม่ได้เพราะสัญชาตญาณดังต่อไปนี้ (ไม่ได้เป็นหลักฐาน แต่เกือบ): คุณต้องการจะมีบทบาทสำคัญไม่มีเพราะมันมีการทำงานสำหรับทุกดังนั้นไม่ควรจะเป็นอิสระใน. จากนั้นเพียงแค่ลด ตอนนี้คุณต้องการเพื่อลดการzA นี้การแสดงออกที่ผ่านมาไม่สามารถเป็นรูปแบบปกติตั้งแต่ภายในสามารถอีกครั้งจะลดลง ...yyyA(λz.A)yAAλz.AA
เดนิส

1
ลักษณะการทำงานนี้ไม่น่าแปลกใจมากเพราะเจ้า "พิมพ์" ของ lambda- เป็นคำแนะนำอีกครั้งควินพิมพ์รหัสของตัวเองจะดำเนินการได้เสมอ สิ่งที่คุณถามคล้ายกับการถามควินินที่ว่าถ้าคุณดำเนินการผลลัพธ์มันพิมพ์อะไร (ซึ่งเป็นไปไม่ได้ตามคำนิยาม) λcalculus
เดนิส

อ่าคุณพูดถูกแล้ว ฉันควรจะเห็นว่า ฉันไม่แน่ใจว่าจะยอมรับคำตอบของคุณหรือแก้ไขคำถามเพื่อขอคำจำกัดความที่ดีขึ้นหรือไม่ ฉันจะให้ความคิดเล็กน้อย (ดูเหมือนว่าสำหรับฉันแล้วมันน่าจะเป็นไปได้ที่จะให้คำจำกัดความที่ไม่ใช่เรื่องไร้สาระซึ่งคุณกำลังถามหาสิ่งที่จะยุติ แต่ฉันไม่แน่ใจว่าเป็นอย่างไร)
นาธาเนียล

แม้ว่าจะต้องบอกว่ามันเป็นความจริงหรือไม่ที่ (ฉันถือว่าคุณหมายถึง ) จะต้องไม่ว่างใน ? เช่นอาจเป็นสิ่งที่ตามสายของ (. pseudocode เพราะผมไม่แน่ใจว่ามันเป็นไปได้ที่จะกำหนดผู้ประกอบการความเท่าเทียมกันในการแสดงออกโดยพลการในแลมบ์ดาแคลคูลัส แต่ฉันคิดว่าคุณเห็นสิ่งที่ฉันหมายความว่า)zzAAif z==p then return q, otherwise return q
นาธาเนียล
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.