deniok: (typed lambda)
deniok ([personal profile] deniok) wrote2010-01-22 04:21 pm

Побочные результаты

В ходе трудов над статьёй для журнала Практика функционального программирования (по материалам этого поста) и параллельных размышлений над постом [livejournal.com profile] beroal'а обнаружил следующий факт. Равенство
(f .) . (. h) = (. h) . (f .)
вылезшее в этом комментарии из преобразований
f (g (h x)) = (f . (g . h)) x = ((f .) ((. h) g)) x = ((f .) . (. h)) g x
f (g (h x)) = ((f . g) . h) x = ((. h) ((f .) g)) x = ((. h) . (f .)) g x
имеет явную категорийную интерпретацию. А именно, указанное равенство выражает (в категории Hask) факт естественной связи Hom-функторов: ковариантного Hom(A,–) и контравариантного Hom(–,B), задаваемой коммутативной диаграммой



(UPD: В комментах велели добавить f : B → B′, h : A′ → A, g ↦ f . g . h. Добавляю.)

В категории Hask ковариантным Hom-функтором является левое сечение композиции (f .), а контравариантным - правое (. h). Соответственно указанное равенство описывает на другом языке коммутативность диаграммы.

Думаю скрыть этот факт от читателей статьи в журнале, но с читателями блога не могу не поделиться.

[identity profile] beroal.livejournal.com 2010-01-31 10:18 am (UTC)(link)
Я предпочитаю запись с помощью лямбда-абстракции:
Hom(A,−)λB. Hom(A,B)
Hom(−,B)λA. Hom(A,B)

[identity profile] nivanych.livejournal.com 2010-01-31 10:31 am (UTC)(link)
С одной стороны, не могу не согласиться
с тем, что такая запись выглядит чётче,
но с другой стороны, запись Hom(A,-)
весьма и весьма устоявшаяся.

[identity profile] kurilka.livejournal.com 2010-01-31 03:41 pm (UTC)(link)
ну да, прочерки как-то совсем неинтуитивны, да и вообще первый раз вижу (правда в ТК я всё в первой половине книжек застреваю)