Начальная алгебра

Нача́льная а́лгебра — в математике (в первую очередь в теории категорий) начальный объект категории F-алгебр для заданного эндофунктора F.

ПримерПравить

Пусть эндофунктор F : Set Set F: \mathbf{Set} \longrightarrow \mathbf{Set} отображает X X в 1 + X 1 + X . В этом случае множество натуральных чисел N N совместно с функциями [ z e r o , s u c c ] : 1 + N N [zero, succ] : 1 + N \longrightarrow N , где z e r o : 1 N zero : 1 \longrightarrow N и s u c c : N N succ : N \longrightarrow N — функции, смысл которых понятен из их наименования; является начальной F F -алгеброй. Начальность (универсальное свойство в этом случае) несложно установить — уникальный гомоморфизм в произвольную F F -алгебру ( A , [ e , f ] ) (A, [e, f]) , для e : 1 A e : 1 \longrightarrow A элемента A A , и f : A A f : A \longrightarrow A функция над A A ; является функцией, отображающей натуральное число n n в f n ( e ) f^n (e) , т. е. f ( f ( ( f ( e ) ) ) ) f (f (\ldots(f (e))\ldots)) n n -арное применение функции f f к аргументу e e .

Использование в теории программированияПравить

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

Для получения типа L i s t ( A ) List (A) — списка над элементами множества A A , необходимо иметь следующие операции конструирования списка:

  • n i l : 1 L i s t ( A ) nil : 1 \longrightarrow List (A)
  • c o n s : A × L i s t ( A ) L i s t ( A ) cons : A \times List (A) \longrightarrow List (A)

Преобразованные в функции они выглядят следующим образом:

  • [ n i l , c o n s ] : 1 + ( A × L i s t ( A ) ) L i s t ( A ) [nil, cons] : 1 + (A \times List (A)) \longrightarrow List (A) ,

что делает эту F F -алгебру эндофунктора F F отображающей X X в 1 + ( A × X ) 1 + (A \times X) . Это, фактически, и является начальной F F -алгеброй. Первоначально основана на функции, известной как foldr в функциональном программировании в таких языках программирования как Haskell и ML.

Таким же образом бинарные деревья с элементами в листьевых вершинах могут быть получены в виде начальной алгебры.

  • [ t i p , j o i n ] : A + ( T r e e ( A ) × T r e e ( A ) ) T r e e ( A ) [tip, join] : A + (Tree (A) \times Tree (A)) \longrightarrow Tree (A) .

Типы данных, получаемые подобным образом, называются алгебраическими типами данных.

См. такжеПравить