การส่งผ่านการแปลงต่อเนื่องของฟังก์ชันไบนารี


13

เรียกคืนการแปลงสภาพต่อเนื่อง (การแปลง CPS) ซึ่งใช้ถึงβ A : = R R A (โดยที่คงที่R ) และf : A Bถึงβ f : β A β B ที่กำหนดโดย βAβA:=RRARf:ABβf:βAβB ในความเป็นจริงเรามีmonad ต่อเนื่องกับหน่วย η : →การบีตากำหนดโดย η x : = λ R R

βfκr:=κ(rf).
ηA:AβA และการคูณ μ A : β ( β A ) β Aกำหนดโดย μ A
ηAx:=λr.rx
μA:β(βA)βA
μAKr:=K(λf.fr).

ตอนนี้ให้เราคิดเกี่ยวกับวิธีการที่เราสามารถเปลี่ยนไบนารีแผนที่คือเราต้องการγ F : β β B β C หนึ่งเกิดขึ้นอย่างรวดเร็วด้วย γf:ABCγf:βAβBβC สิ่งนี้สมเหตุสมผลจากมุมมองการเขียนโปรแกรมเช่นกัน

γfκνr:=κ(λx.β(fx)νr).

นี่คือคำถามของฉัน: มีเหตุผลที่ลึกกว่าสำหรับนอกเหนือจากข้อเท็จจริงที่ว่ามันดูถูกต้องจากมุมมองการเขียนโปรแกรมหรือไม่? ยกตัวอย่างเช่นมีหมวดหมู่ตามทฤษฎีหรือเหตุผล "เชิงทฤษฎี" อื่น ๆ สำหรับการคิดว่าγสมเหตุสมผลหรือไม่? ตัวอย่างเช่นเราสามารถปรุงγจาก monad อย่างเป็นระบบได้หรือไม่?γγγ

ฉันกำลังมองหาข้อมูลเชิงลึกเกี่ยวกับการแปลง CPS ของฟังก์ชัน -aryn


2
คุณกำลังมองหาบางสิ่งที่นอกเหนือจาก Haskell liftM2หรือการสรุปทั่วไปApplicativeใช่หรือไม่ คุณสามารถรับ n-ary เวอร์ชั่นของสิ่งที่คุณอธิบาย (ในภาษาที่ให้คุณพูดถึงฟังก์ชั่น polymorphic n-ary) โดยตรงจากโครงสร้างการประยุกต์ต่อเนื่อง
copumpkin

1
ฉันรู้วิธีเขียนภาพรวมเหล่านี้ฉันต้องการรู้ว่าทำไมพวกเขาถึงเป็นอย่างนั้น นักทฤษฎีหมวดจะเข้าใจสิ่งที่ฉันขอ
Andrej Bauer

1
ApplicativeliftA2γ

3
ใช่liftA2เป็นส่วนหนึ่งของสิ่งที่ฉันแนะนำ แนวคิด "วงเล็บเหลี่ยม" ( (| f x y z ... |)แปลเป็นpure f <*> x <*> y <*> z <*> ...) Applicativeดูเหมือนว่าเป็นวิธีที่เป็นระบบในการรับแบบฟอร์มคำถามของคุณ ฉันรู้ CT แต่ดูเหมือนง่ายที่สุดที่จะพูดถึงมันในแง่การเขียนโปรแกรมมาตรฐาน หากคุณไม่เคยเจอมาApplicativeก่อนคุณอาจต้องการดู lone monoidal functors (แม้ว่าคำสั่งของ Haskell เกี่ยวกับมันจะ<*>เกี่ยวข้องกับ exponentials เช่นกัน) อย่างไรก็ตามผมไม่ได้มีคำตอบสำหรับคุณ แต่ก็พยายามที่จะเข้าใจสิ่งที่คุณได้รับที่ :)
copumpkin

2
วิทยานิพนธ์ปริญญาเอกของ Hayo Thielecke อยู่ในโครงสร้างหมวดหมู่ของ CPS บางทีคำตอบอยู่ที่นั่นหรือในสิ่งพิมพ์อื่น ๆ ของเขา cs.bham.ac.uk/~hxt/research/hayo-thielecke-publications.shtml
Dave Clarke

คำตอบ:



4

การเพิ่มคำตอบของ Noam:

f:ABCuncurry(f):A×BCTdblstr:TA×TBT(A×B)

TA×TBdblstrT(A×B)uncurry(f)TC

หากเราสร้างอินสแตนซ์นี้ให้กับ Monad ที่ต่อเนื่องเราจะได้สิ่งที่คุณสร้าง

n

πnπstrπ:TA1××TAnT(A1××An)nf:A1××AnCγf:TA1××TAnstrπT(A1××An)TfTC

แต่ฉันก็ยังไม่คิดว่านี่เป็นคำตอบที่คุณต้องการ ...

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