Entry tags:
Напишу щоб не забути
У ТК є така штука - hom-функтори. У мене постійно виникають проблеми з контраваріантним hom-функтором, тому запишу.
hom(A, B) це проста штука. Це просто множина морфізмів A → B. Функтор теж проста штука - це морфізм між категоріями. Що ж таке hom-функтор?
hom(A, -) це функтор. Він відображає кожний об’єкт A категорії на множину морфізмів hom(A, X), а кожний морфізм X → Y на морфізм hom(A, X) → hom(A, Y). Фактично, це композиція зліва. Для f: A → X і g: X → Y маємо композицію g ∘ f: A → Y. Все ще нічого складного, еге-ж? :)
hom(-, B) це теж функтор. Як і попередній, він відображає кожний об’єкт B категорії на множину hom(X, B), а кожний морфізм Y → X на морфізм hom(X, B) → hom(Y, B). Ні, я не помилився. Мофізм Y → X відображається на морфізм hom(X, B) → hom(Y, B). Трошки незвично, але все правильно - це композиція справа. Для f: X → B і g: Y → X маємо f ∘ g: Y → B.
Для прикладу візьмемо оператор композиції у Haskell і просту функцію типу a → [a]:
Функтор hom(A, -) називається коваріантним, а функтор hom(-, B) - контраваріантним. hom(A, -) можна записати як C → Set, а hom(-, B) як Cop → Set, де Cop - категорія зворотня (двоїста?) до C. Зворотня категорія нічим не відрізняється від звичайної крім того що всі її стрілки повернені у зворотньому напрямку (замість A → B там буде B → A і т.д.). Що, власне, ми і спостерігаємо у hom(-, B).
З hom-функторами пов’язана ще одна цікава штука - комутативна діаграма:

Діаграма відображає той факт, що для g із hom(A, B) не має значення порядок композиції: (f ∘ g) ∘ h = f ∘ (g ∘ h), де f: B → B' і h: A' → A.
Коротше кажучи, в одному випадку (hom(A, -)) у нас зберігається домен, а в іншому (hom(-, B)) - кодомен. Мабуть, саме це і означає літера у позначенні.
Приклад мені не дуже подобається. Мабуть, більш правильним було б показати fmap, але я не зміг придумати як його просто розірвати на дві частини :( Адже по суті це і є композиція: (b → f b) ∘ (a → b) ∘ (f a → a) і ми можемо спочатку підмінити домен, а можемо почати з кодомена.
hom(A, B) це проста штука. Це просто множина морфізмів A → B. Функтор теж проста штука - це морфізм між категоріями. Що ж таке hom-функтор?
hom(A, -) це функтор. Він відображає кожний об’єкт A категорії на множину морфізмів hom(A, X), а кожний морфізм X → Y на морфізм hom(A, X) → hom(A, Y). Фактично, це композиція зліва. Для f: A → X і g: X → Y маємо композицію g ∘ f: A → Y. Все ще нічого складного, еге-ж? :)
hom(-, B) це теж функтор. Як і попередній, він відображає кожний об’єкт B категорії на множину hom(X, B), а кожний морфізм Y → X на морфізм hom(X, B) → hom(Y, B). Ні, я не помилився. Мофізм Y → X відображається на морфізм hom(X, B) → hom(Y, B). Трошки незвично, але все правильно - це композиція справа. Для f: X → B і g: Y → X маємо f ∘ g: Y → B.
Для прикладу візьмемо оператор композиції у Haskell і просту функцію типу a → [a]:
Prelude> let g a = [a] Prelude> :t g g :: t -> [t] Prelude> :t (g .) (g .) :: (a -> b) -> a -> [b] Prelude> :t (. g) (. g) :: ([a] -> c) -> a -> c
Функтор hom(A, -) називається коваріантним, а функтор hom(-, B) - контраваріантним. hom(A, -) можна записати як C → Set, а hom(-, B) як Cop → Set, де Cop - категорія зворотня (двоїста?) до C. Зворотня категорія нічим не відрізняється від звичайної крім того що всі її стрілки повернені у зворотньому напрямку (замість A → B там буде B → A і т.д.). Що, власне, ми і спостерігаємо у hom(-, B).
З hom-функторами пов’язана ще одна цікава штука - комутативна діаграма:

Діаграма відображає той факт, що для g із hom(A, B) не має значення порядок композиції: (f ∘ g) ∘ h = f ∘ (g ∘ h), де f: B → B' і h: A' → A.
Коротше кажучи, в одному випадку (hom(A, -)) у нас зберігається домен, а в іншому (hom(-, B)) - кодомен. Мабуть, саме це і означає літера у позначенні.
Приклад мені не дуже подобається. Мабуть, більш правильним було б показати fmap, але я не зміг придумати як його просто розірвати на дві частини :( Адже по суті це і є композиція: (b → f b) ∘ (a → b) ∘ (f a → a) і ми можемо спочатку підмінити домен, а можемо почати з кодомена.