Tiếp tục chuyển đổi các hàm nhị phân


13

Nhớ lại việc thông qua việc tiếp tục chuyển đổi (CPS transform) mà mất để beta Một : = R R A (nơi R là cố định) và f : A B để β f : β Một β B được định nghĩa bởi βMộtβMột:= =RRMộtRf:MộtBβf:βMộtβB Trong thực tế chúng ta cóđơn nguyên tiếpvới các đơn vị η Một : Một beta Một định nghĩa bởi η Một x : = λ r . r

βfκr:=κ(rf).
ηA:AβA và nhân μ A : β ( β Một ) β Một định nghĩa bởi μ A
ηAx:=λr.rx
μA:β(βA)βA
μAKr:=K(λf.fr).

Bây giờ chúng ta hãy suy nghĩ về cách chúng ta có thể biến đổi một nhị phân bản đồ , tức là, chúng tôi muốn γ f : β Một β B β C . Một cách nhanh chóng đi lên với γf:ABCγf:βAβBβC Điều này có ý nghĩa từ quan điểm lập trình là tốt.

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

Đây là câu hỏi của tôi: là có một lý do sâu xa hơn cho , khác hơn so với thực tế là nó có vẻ đúng từ một quan điểm lập trình của xem? Ví dụ, có một loại lý thuyết hoặc khác "lý thuyết" lý do để nghĩ rằng γ làm cho tinh thần? Chẳng hạn, chúng ta có thể nấu ăn γ từ đơn nguyên một cách có hệ thống không?γγγ

Tôi đang tìm kiếm một cái nhìn sâu sắc vào CPS biến đổi của chức năng -ary.n


2
Bạn đang tìm kiếm một cái gì đó ngoài Haskell liftM2hoặc khái quát đến Applicative? Bạn có thể lấy được một phiên bản n-ary của những gì bạn mô tả (bằng ngôn ngữ cho phép bạn nói về các hàm đa hình n-ary) trực tiếp từ cấu trúc ứng dụng tiếp tục.
copumpkin

1
Tôi biết làm thế nào để viết những khái quát này, tôi muốn biết tại sao chúng lại như vậy. Chuyên gia lý thuyết sẽ hiểu những gì tôi đang hỏi.
Andrej Bauer

1
Hmm, cảm ơn đã chỉ ra Applicative. Nó có liftA2đó là tôi , xem hackage.haskell.org/packages/archive/base/4.2.0.0/doc/html/...γ
Andrej Bauer

3
Vâng, liftA2là một phần của những gì tôi đã đề nghị. Khái niệm "khung thành ngữ" ( (| f x y z ... |)dịch sang pure f <*> x <*> y <*> z <*> ...) Applicativedường như là cách có hệ thống để có được dạng n-ary trong câu hỏi của bạn. Tôi biết CT, nhưng có vẻ đơn giản nhất để nói về nó trong các điều khoản lập trình tiêu chuẩn. Nếu bạn chưa từng đi qua Applicativetrước đây, bạn có thể muốn xem xét các functor đơn hình lỏng lẻo (mặc dù tuyên bố của Haskell về nó cũng <*>liên quan đến số mũ). Dù sao, tôi không có câu trả lời cho bạn nhưng đã cố gắng hiểu rõ hơn những gì bạn đang nhận được :)
copumpkin

2
Luận án tiến sĩ của Hayo Thielecke là về cấu trúc phân loại của CPS. Có lẽ câu trả lời nằm ở đó hoặc trong các ấn phẩm khác của ông. cs.bham.ac.uk/~hxt/research/hayo-thielecke-publications.shtml
Dave Clarke

Câu trả lời:


7

Gần nhất tôi đã nhìn thấy một câu trả lời cho câu hỏi này là hình ảnh đầu tiên trong Bộ sưu tập của Doctor Melliès , ~ ~ A * ~ ~ B | - ~ ~ (A * B) minh họa bản đồ mà tồn tại trong bất kỳ loại đối thoại (ví dụ, một thể loại đơn hình với các bao đóng vào một đối tượng cố định). Lưu ý rằng biến đổi CPS từ trái sang phải của các hàm nhị phân chung làm giảm việc áp dụng bản đồ này và sau đó kết hợp với hành động functorial của đơn nguyên phủ định kép.

¬¬Một¬¬B¬¬(MộtB)

κε


4

Trả lời câu trả lời của Noam:

f:MộtBCbạnncbạnrry(f):Một×BCTdbtôiStr:TMột×TBT(Một×B)

TMột×TBdbtôiStrT(Một×B)bạnncbạnrry(f)TC

Nếu chúng tôi khởi tạo điều này cho đơn nguyên tiếp tục, chúng tôi có được công trình của bạn.

n

πnπStrπ:TMột1××TMộtnT(Một1××Mộtn)nf:Một1××MộtnCγf:TMột1××TMộtnStrπT(Một1××Mộtn)TfTC

Nhưng tôi vẫn không nghĩ rằng điều này thực sự mang đến cho bạn câu trả lời mà bạn đang tìm kiếm ...

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.