Продовження, що проходить перетворення двійкових функцій


13

Нагадаємо продовжуючу передачу перетворення (CPS перетворення), яка приймає від до (де закріплено) і до визначено Насправді у нас є монада продовження з одиницею визначена і множення визначене β A : = R R A R f : A B β f : β A β B βAβA:=RRARf:ABβf:βAβBη A : A β A η A x : = λ r . r

βfκr:=κ(rf).
ηA:AβAμ A : β ( β A ) β A μ A
ηAx:=λr.rx
μA:β(βA)βA
μAKr:=K(λf.fr).

Тепер давайте подумаємо про те , як ми можемо перетворити двійкове відображення , тобто, ми хочемо . Швидко з'являється Це має сенс і з точки зору програмування.γ f : β A β B β C γf:ABCγf:βAβBβC

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

Ось моє запитання: чи є глибша причина , крім того, що вона виглядає правильно з точки зору програмування? Наприклад, чи є теоретична категорія чи інша "теоретична" причина думати, що має сенс? Наприклад, чи можемо ми готувати з монади систематично?γ γγγγ

Я шукаю уявлення про перетворення CPS -ary функцій.n


2
Ви шукаєте щось, що виходить за рамки Хаскелла liftM2чи узагальнення Applicative? Ви можете отримати n-ary-версію описаного вами (мовою, яка дозволяє говорити про n-ary поліморфні функції) безпосередньо з додаткової структури продовження.
гарбуз

1
Я вмію писати ці узагальнення, хочу знати, чому вони такі. Теоретики категорій зрозуміють, про що я прошу.
Андрій Бауер

1
Хм, спасибі за вказівку Applicative. Тут liftA2є моя , див. Hackage.haskell.org/packages/archive/base/4.2.0.0/doc/html/…γ
Андрій Бауер

3
Так, liftA2було частиною того, що я пропонував. Поняття "дужка ідіоми" ( (| f x y z ... |)перекладається з pure f <*> x <*> y <*> z <*> ...) Applicativeздається систематичним способом отримання n-арної форми вашого запитання. Я знаю КТ, але здавалося, що простіше говорити про це у стандартних програмування. Якщо ви раніше не стикалися Applicative, ви, можливо, захочете поглянути на в'ялі моноїдальні функтори (хоча заява Хаскелла про це <*>містить і експоненти). У всякому разі, у мене немає відповіді для вас, але я намагався краще зрозуміти, що ви отримуєте :)
copumpkin

2
Кандидатська дисертація Хайо Тілеке наводить категоричну структуру CPS. Можливо, відповідь лежить там чи в інших його публікаціях. cs.bham.ac.uk/~hxt/research/hayo-thielecke-publications.shtml
Дейв Кларк

Відповіді:


7

Найближче, що я бачив, щоб відповісти на це питання - це перша картина в Галереї доктора Мельєса , що ~~ A * ~~ B | - ~~ (A * B) ілюструє карту яка існує в будь-якій категорії діалогу (тобто моноїдна категорія із замиканнями на нерухомий об'єкт). Зауважимо, що перетворення CPS зліва направо на загальні бінарні функції зводиться до застосування цієї карти, а потім до складання функціональної дії монади подвійного заперечення.

¬¬A¬¬B¬¬(AB)

Ілюстрація в основному відповідає стандартним умовам рядкових діаграм (модульно поляризація проводів, які мають на увазі потік управління). Зокрема, карта побудована в три етапи: двічі застосувавши силу ( ) монади, викликану запереченням самовідрахування, а потім застосувавши лічильник доповнення ( ). На цьому рівні абстракції деривація є загальною для будь-якої доповнення, що породжує сильну монаду, і ви можете потім попросити більш абстрактну характеристику таких пристосувань, про яку також писав Меллієс .ϵκϵ


4

Додавання відповіді Ноама:

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

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

Якщо ми подамо це до монади продовження, ми отримаємо вашу конструкцію.

n

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

Але я все ще не думаю, що це справді дає тобі відповідь, яку ти шукаєш ...

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.