การแก้สมการเชิงฟังก์ชันสำหรับฟังก์ชันที่ไม่รู้จักในแลมบ์ดาแคลคูลัส


14

มีเทคนิคใดบ้างในการแก้สมการการทำงานสำหรับฟังก์ชันที่ไม่รู้จักในแคลคูลัสแลมบ์ดา?

สมมติว่าฉันมีฟังก์ชั่นระบุตัวตนที่ขยายเพิ่มเติมเช่น:

Ix=x

(นั่นคือโดยการเขียนสมการสำหรับพฤติกรรมที่คาดหวังของฟังก์ชันนั้น) และตอนนี้ฉันต้องการแก้มันสำหรับโดยทำการแปลงพีชคณิตบางอย่างเพื่อให้ได้สูตร intensional สำหรับฟังก์ชันนั้น:I

I=λx.x

ที่บอกว่าฟังก์ชั่นทำสิ่งที่คาดหวังได้อย่างไร (นั่นคือวิธีการนำไปใช้ในแลมบ์ดาแคลคูลัส)

แน่นอนฟังก์ชั่นตัวตนที่ใช้เป็นเพียงตัวอย่าง ฉันสนใจวิธีการทั่วไปในการแก้สมการดังกล่าว โดยเฉพาะฉันต้องการค้นหาฟังก์ชันที่ตรงตามข้อกำหนดต่อไปนี้:B

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

นั่นคือ "injects" ฟังก์ชั่นที่กำหนดลงในฟังก์ชั่นแลมบ์ดาต่อหน้า "ร่างกาย" (ซึ่งเป็นนิพจน์แลมบ์ดาโดยพลการ) ซึ่งอาจแยกออกจากกันและสร้างใหม่ขึ้นมา พารามิเตอร์ของฟังก์ชันที่ถูกนำไปใช้f(λx.M)Mf

คำตอบ:


13

ปัญหานี้เป็นปัญหาที่รู้จักกันที่รู้จักกันในการสั่งซื้อที่สูงขึ้นความสามัคคี

น่าเสียดายที่ปัญหานี้ไม่สามารถอธิบายได้โดยทั่วไป มีชิ้นส่วนที่เรียกคืนได้ซึ่งรู้จักกันในชื่อ Pattern Pattern Fragment มันถูกใช้อย่างกว้างขวางในด้านอื่น ๆ การตรวจสอบชนิดของโปรแกรมที่พิมพ์ขึ้นอยู่กับ 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
Yup, ดูเหมือนว่า :) สิ่งที่ตลกคือฉันเกือบจะได้รับการแก้ปัญหานั้น แต่ด้วยเหตุผลบางอย่างที่ฉันคิดว่าการโทรในบางสิ่งจะ "ดำเนินการ" ทำให้เกิดการแสดงออก: q สิ่งที่ฉันพลาดคือ ที่เราสามารถแทนที่ตัวแปรด้วยตัวแปรอื่นที่ถูกผูกไว้ภายนอก (λx.M)
BarbaraKwarc

1
ขอบคุณสำหรับลิงค์ไปยังกระดาษด้วยฉันจะตรวจสอบและฉันจะยอมรับคำตอบของคุณในอีกสองสามวันเพื่อให้โอกาสคนอื่นด้วย
BarbaraKwarc

3
การรวมคำสั่งนี้สูงขึ้นหรือไม่ คำถามน่าจะเกี่ยวกับแคลคูลัสแลมบ์ดาที่ไม่ได้พิมพ์มากกว่าแคลคูลัสแลมบ์ดาที่พิมพ์แล้ว
Peter Taylor

2

ฉันคิดว่าฉันมีคำตอบบางส่วนเกี่ยวกับสมการกับฟังก์ชันเอกลักษณ์:

Ix=x

เราต้องการแก้ปัญหาโดยค้นหาสูตรสำหรับซึ่งจะอยู่ในรูปแบบ( λ p . M )โดยมีนิพจน์Mบางส่วนที่ยังไม่ทราบในร่างกาย ลองแทนมันสำหรับฉันในสมการเดิม:I(λp.M)MI

(λp.M)x=x

จากนั้นใช้ฟังก์ชั่นกับที่ด้านซ้ายมือ:x

M[p/x]=x

แต่เรามีอะไรที่นี่? :> สมการนี้เป็นสูตรสำหรับนิพจน์เรามองหาหลังจากแทนที่ทุกเหตุการณ์ที่เกิดขึ้นของpด้วยxและมันบอกว่ามันควรจะดูเหมือนทางด้านขวามือหลังจากนั้น :) กล่าวอีกนัยหนึ่งฟังก์ชันที่เรา กำลังมองหาคือ:Mpx

I=(λx.x)

แน่นอนคำตอบที่ถูกต้อง :)


ลองวิธีการเดียวกันเพื่อหาสูตรสำหรับ Combinator เราต้องการให้มันทำงานในลักษณะที่เมื่อนำไปใช้กับตัวเองจะผลิตตัวเองที่นำไปใช้กับตัวเอง:ω

ωω=ωω

ตอนนี้เรามาหาสูตรสำหรับซึ่งเป็นรูปแบบ( λ x . M )สำหรับบางคนยังไม่ทราบการแสดงออกM แทนสิ่งนี้ในสมการที่เราได้รับ:ω(λx.M)M

(λx.M)ω=ωω

การนำไปใช้กับพารามิเตอร์ทางด้านซ้ายมือจะให้สูตรสำหรับ :M

M[x/ω]=ωω

นี่บอกว่าหลังจากการแทนที่ของในMทุกครั้งด้วยωมันสร้างωxMωดังนั้นเราสามารถอนุมานได้ว่านิพจน์ดั้งเดิม Mก่อนการแทนที่ควรเป็น xωωMดังนั้นฟังก์ชันที่เราค้นหาควรมีลักษณะเช่นนี้:xx

ω=(λx.xx)

ซึ่งเป็นกรณี :)


แม้ว่าฉันจะมีความรู้สึกว่ามันอาจจะง่ายมากเพราะทางด้านขวามือนั้นอยู่ในรูปแบบที่เรากำลังมองหาอยู่แล้ว


M[x/ω]=ωωω=(λx.xx)

ในทั้งสองกรณีง่าย ๆ - ใช่มี: เพียงย้อนกลับการทดแทน แต่อย่างที่ฉันพูดกรณีเหล่านี้อาจทำงานได้โดย "โชค" บริสุทธิ์: ด้านขวามือมีรูปแบบที่ต้องการอยู่แล้ว เมื่อฉันลองด้วยตัวอย่างที่ซับซ้อนกว่านี้มันไม่ทำงาน นั่นคือสิ่งที่ฉันกำลังมองหา: สำหรับวิธีอัลกอริทึม
BarbaraKwarc

1
ωω=ωωωω
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.