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


13

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

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

Тепер давайте подумаємо про те , як ми можемо перетворити двійкове відображення , тобто, ми хочемо . Швидко з'являється Це має сенс і з точки зору програмування.γ f : β A → β B → β C γf:A→B→Cγ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⟶¬¬(A⊗B)

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


4

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

f:A→B→Cuncurry(f):A×B→CTdblstr:TA×TB→T(A×B)

TA×TB→dblstrT(A×B)→uncurry(f)TC

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

n

πnπstrπ:TA1×⋯×TAn→T(A1×⋯×An)nf:A1×⋯×An→Cγf:TA1×⋯×TAn→strπT(A1×⋯×An)→TfTC

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

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