52700.fb2 Учебник по Haskell - читать онлайн бесплатно полную версию книги . Страница 260

Учебник по Haskell - читать онлайн бесплатно полную версию книги . Страница 260

coreturn

:: c a -> a

cobind

:: c b -> (c b -> a) -> c a

15.6 Начальный и конечный объекты

Начальный объект

Представим, что в нашей категории есть такой объект 0, который соединён со всеми объектами. При-

чём стрелка начинается из этого объекта и для каждого объекта может быть только одна стрелка которая

соединят данный объект с 0. Графически эту ситуацию можно изобразить так:

. . .

A 1

A 2

. . .

0

A 3

. . .

. . .

A 4

Такой объект называют начальным (initial object). Его принято обозначать нулём, словно это начало от-

счёта. Для любого объекта A из категории A с начальным объектом 0 существует и только одна стрел-

ка f : 0 → B. Можно сказать, что начальный объект определяет функцию, которая переводит объекты A в

стрелки f : 0 → A. Эту функцию обозначают специальными скобками ( | · |), она называется катаморфизмом

(catamorphism).

( | A |) = f : 0 → A

У начального объекта есть несколько важных свойств. Они очень часто встречаются в разных вариациях,

в понятиях, которые определяются через понятие начального объекта:

( | 0 |) = id 0

тождество

f, g : 0 → A ⇒ f = g

уникальность

f : A → B

( | A |) ; f = ( | B |)

слияние (fusion)

Эти свойства следуют из определения начального объекта. Свойство тождества говорит о том, что стрелка

ведущая из начального объекта в начальный является тождественной стрелкой. В самом деле по определе-

нию начального объекта для каждого объекта может быть только одна стрелка, которая начинается в 0 и

заканчивается в этом объекте. Стрелка ( | 0 |) начинается в 0 и заканчивается в 0, но у нас уже есть одна та-

кая стрелка, по определению категории для каждого объекта определена тождественная стрелка, значит эта

стрелка является единственной.

Второе свойство следует из единственности стрелки, ведущей из начального объекта в данный. Третье

свойство лучше изобразить графически:

f

A

B

( | A |)

( | B |)

0

Поскольку стрелки ( | A |) и f можно соединить, то должна быть определена стрелка ( | A |) ; f : 0 → B, но

поскольку в категории с начальным объектом из начального объекта 0 в объект B может вести лишь одна

стрелка, то стрелка ( | A |) ; f должна совпадать с ( | B |).