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

Материал из свободной русской энциклопедии «Традиция». Вы можете дополнить или исправить его.
Перейти к навигации Перейти к поиску

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

Пример[править | править код]

Пусть эндофунктор F:SetSetF: \mathbf{Set} \longrightarrow \mathbf{Set} отображает XX в 1+X1 + X. В этом случае множество натуральных чисел NN совместно с функциями [zero,succ]:1+NN[zero, succ] : 1 + N \longrightarrow N, где zero:1Nzero : 1 \longrightarrow N и succ:NNsucc : N \longrightarrow N — функции, смысл которых понятен из их наименования; является начальной FF-алгеброй. Начальность (универсальное свойство в этом случае) несложно установить — уникальный гомоморфизм в произвольную FF-алгебру (A,[e,f])(A, [e, f]), для e:1Ae : 1 \longrightarrow A элемента AA, и f:AAf : A \longrightarrow Aфункция над AA; является функцией, отображающей натуральное число nn в fn(e)f^n (e), т. е. f(f((f(e))))f (f (\ldots(f (e))\ldots))nn-арное применение функции ff к аргументу ee.

Использование в теории программирования[править | править код]

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

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

  • nil:1List(A)nil : 1 \longrightarrow List (A)
  • cons:A×List(A)List(A)cons : A \times List (A) \longrightarrow List (A)

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

  • [nil,cons]:1+(A×List(A))List(A)[nil, cons] : 1 + (A \times List (A)) \longrightarrow List (A),

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

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

  • [tip,join]:A+(Tree(A)×Tree(A))Tree(A)[tip, join] : A + (Tree (A) \times Tree (A)) \longrightarrow Tree (A).

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

См. также[править | править код]