始代数

出典: フリー百科事典『ウィキペディア(Wikipedia)』
移動: 案内検索

数学において、始代数(しだいすう。:initial algebra)とは、与えられた自己関手FF-代数における始対象である。Initiality帰納再帰のための一般的な枠組みを提供する。

例えば、1を圏の終対象である一点集合とした場合の集合圏上の自己関手1+(-)について考える。 この自己関手の代数は、集合X(代数の台集合(carrier)と呼ばれる)の点xXと、関数XXである。点を0、関数は後者関数とすると、自然数の集合は、そのような始代数の台集合である。

二つ目の例として、集合圏上の自己関手1+N×(-)を考える。ここで、N自然数集合である。 この自己関手の代数は、集合XxXと、関数 N×XXである。点を空リスト、関数を「数と有限リストを取り、新しい有限リストと先頭の数を返す関数cons」とすると、自然数のリストはそのような始代数の台集合である。

目次

[編集] 終余代数

始代数の双対終余代数(final coalgebra)はF-余代数の圏終対象である。finality余帰納余再帰のための一般的な枠組みを提供する。

例えば、前と同じ関手 1+(-)を使い、集合Xの真理値判定関数p : X → 2と部分関数f : XX定義域xXp(x) = 0で形作られる。

新しい要素ωで拡張された自然数からなる集合N ∪ {ω}は圏の終余代数の台集合である。

ここで、

p(0) = 1, p(n+1) = p(ω) = 0

pは0のため、fは正の数の場合は、前者関数(後者関数の逆関数)である。 しかし、新しい要素ωの場合は恒等関数のように振る舞う。

f(n+1) = n, f(ω) = ω

二つ目の例の同じ関手1+N×(-)について考えると、この場合の終余代数の台集合は、全ての自然数のリストからなる。これは有限リストだけでなく、無限リストも含む。演算は「リストが空かどうか判定する関数」と「空でないリストについて、先頭の数とリストの残りの組を返す解体関数」である。

[編集] 定理

  • 始代数は最小である。(すなわち、部分代数を持たない[1]
  • 終余代数は単純である。 (すなわち、商を持たない)[2][1]

[編集]

X1+Xに対応づける自己関手F: \mathbf{Set} \longrightarrow \mathbf{Set}について考える。

自然数の集合と、関数zero : 1 \longrightarrow Nsucc : N \longrightarrow NF-始代数である。

ここで、zero1を自然数集合の任意の一者集合に対応づける関数で、succは後者関数である。

Initiality(この場合は普遍性)を確立することは難しくなく、任意のF-代数(A, [e,f])のユニークな準同型射は、Aの要素e : 1 \longrightarrow Aと、A関数 f : A \longrightarrow Aとすると、これは自然数nをf^n(e)に対応づけ、f(f(...(f(e))...))となり、eをfにn回-畳み込み適用した関数になる。

[編集] 計算機科学での利用

リスト木構造の様な、プログラミングで使われる様々な有限データ構造は、特定の関手の始代数として得られる。与えられた自己関手にいくつかの始代数があるかもしれないが、それらは同型射同士の違いを除いて一意であり、これは直感的にはデータ構造の可視的な属性は、始代数によって適切に補足されることを意味する。

集合Aを要素とするリストのデータ型List(A)を得るには、リストを構成する演算として、

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

これらの関数を組み合わせた、一つの関数を

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

によって与える。 これは自己関手FXから1+(A\times X)へのF-algebraになる。

これは、名実ともに唯一のF-始代数である。

HaskellMLのような関数型プログラミング言語では、Initialityはfoldrとして知られる関数によって確立されている。

同様に、葉に要素を持つ二分木は始代数として得ることが出来る。

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

このタイプは代数的データ型として知られる方法で得られる。

最小不動点と関手Fによって定義された型は、F-代数と見なすことが出来き、パラメトリシティ(en:parametricity)を保持した型を提供する。[3]

双対的な方法で、同様の関係が最大不動点とF-終余代数の間に存在する。これらは強正規化性を維持しながら、潜在的に無限のオブジェクトを扱うことを可能にする。[3] 強正規化を行うプログラミング言語Charityの、余帰納的データ型は驚くべき結果を得ることが出来る。 例えば、アッカーマン関数のような"強い"関数を実装するために参照の構成要素を定義する。[4]

[編集] 関連項目

[編集] 脚注

  1. ^ a b Initiality and finality from CLiki
  2. ^ Induction and Co-induction from CLiki
  3. ^ a b Philip Wadler: Recursive types for free! University of Glasgow, July 1998. Draft.
  4. ^ Robin Cockett: Charitable Thoughts (ps and ps.gz)

[編集] 外部リンク