16.2 Индуктивные и коиндуктивные типы
С точки зрения теории категорий функция свёртки является катаморфизмом, а функция развёртки – ана-
морфизмом. Напомню, что катаморфизм – это функция которая ставит в соответствие объектам категории
с начальным объектом стрелки, которые начинаются из начального объекта, а заканчиваются в данном объ-
екте. Анаморфизм – это перевёрнутый наизнанку катаморфизм.
Начальным и конечным объектом будет рекурсивный тип. Вспомним тип свёртки:
fold :: Functor f => (f a -> a) -> (Fix f -> a)
Функция свёртки строит функции, которые ведут из рекурсивного типа в произвольный тип, поэтому в
данном случае рекурсивный тип будет начальным объектом. Функция развёртки строит из произвольного
типа данный рекурсивный тип, на языке теории категорий она строит стрелку из произвольного объекта в
рекурсивный, это означает что рекурсивный тип будет конечным объектом.
unfold :: Functor f => (a -> f a) -> (a -> Fix f)
Категории, которые определяют рекурсивные типы таким образом называются (ко)алгебрами функторов.
Видите в типе и той и другой функции стоит требование о том, что f является функтором. Катаморфизм и
анаморфизм отображают объекты в стрелки. По типу функций fold и unfold мы можем сделать вывод, что
объектами в нашей категории будут стрелки вида
f a -> a
или для свёрток:
a -> f a
А стрелками будут обычные функции одного аргумента. Теперь дадим более формальное определение.
Эндофунктор
Или можно сказать по другому, для
Это свойство совпадает со свойством естественного преобразования только вместо одного из функторов
мы подставили тождественный функтор
• Объектами являются
• Два объекта
• Композиция и тождественная стрелка взяты из категории
Если в этой категории есть начальный объект
переводит объекты
(
Этот катаморфизм и будет функцией свёртки для рекурсивного типа . Понятие Alg(
и получить категорию CoAlg(
244 | Глава 16: Категориальные типы
• Объектами являются
• Два объекта
из
• Композиция и тождественная стрелка взяты из категории
Если в этой категории есть конечный объект, его называют
который переводит объекты
Причём следующая диаграмма коммутирует:
[(
Если для категории
и определяют изоморфизм
=
объект определяется функтором
Типы, которые являются начальными объектами, принято называть индуктивными, а типы, которые яв-
ляются конечными объектами – коиндуктивными.
Существование начальных и конечных объектов
Мы говорили, что если начальный(конечный) объект существует, а когда он существует? Рассмотрим
один важный случай. Если категория является категорией, в которой объектами являются полные частично
упорядоченные множества, а стрелками являются монотонные функции, такие категории называют CPO, и
функтор – полиномиальный, то начальный и конечный объекты существуют.
Полные частично упорядоченные множества
Оказывается на значениях можно ввести частичный порядок. Порядок называется частичным, если отно-
шение
отражает степень неопределённости значения. Самый маленький объект это полностью неопределённое зна-
чение
Для того чтобы не путать упорядочивание значений по степени определённости с обычным числовым
порядком, пользуются специальным символом . Запись
означает, что
Так для логических значений определены два нетривиальных сравнения:
Мы будем называть нетривиальными сравнения в которых, компоненты слева и справа от не равны. На-
пример ясно, что