日記 (2020 年 5 月 31 日)
再帰的定義は関数型プログラミングにおいて欠かせない重要な要素であるが、 その実現方法には主に 2 種類ある。 1 つ目の方法は、 不動点コンビネータを用いるものである。 例えば、 以下は全ての要素が 0 であるような無限リストを作る Haskell のプログラムである。
fix $ \list -> 0 : list
Haskell では let 束縛における定義式でこれから定義する識別子が使えるので、 以下のようにも書ける。 数学において形式的な計算体系を扱う場合、 このような再帰的な let 束縛は、 上記の不動点コンビネータを用いた式のシンタックスシュガーとすることも多い (例えば Pierce†4 の 11.11 節ではそのような定義がなされている)。
let list = 0 : list in list
2 つ目の方法は、 値のフィードバックを利用するものである。
Haskell では、 この方法で再帰関数を定義するためのコンビネータとして loop
が用意されている。
これを用いて、 全ての要素が 0 であるような無限リストは以下のようにも作ることができる。
loop func $ 0
where func = \(a, l) -> (l, a : l)
さて、 この 2 つの再帰の方法それぞれに対して、 その圏論的対応物がいくつか提唱されている。
この記事では、 前者に対応するものとして Bloom–Ésik†1 による Conway 演算子を、 後者に対応するものとして Joyal–Street–Verity†3 によるトレースを紹介し、 その同値性を示す。
なお、 以下では射の合成は左から右に行い、 記号を変えて
まず、 Bloom–Ésik による Conway 演算子の定義を行う。 これには様々な同値な定式化があるが、 ここでは Hasegawa†2 に従って不動点演算子であることが分かりやすいものを採用する。
カルテシアン圏
- 任意の射
に対し、f : A × X → X が成り立つ。 すなわち、( id A , fix A X f ) f = fix A X f はパラメータ付き不動点演算子である。fix - 任意の射
に対し、f : A × X → X , g : A → A が成り立つ。 すなわち、fix A X ( ( g × id X ) f ) = g fix A X f はfix に関して自然である。A - 任意の射
に対し、f : A × X → X , g : X → X が成り立つ。 すなわち、fix A X ( f g ) = fix A X ( ( id A × g ) f ) g はfix に関して自然である。X - 任意の射
に対し、f : A × X × Y → X , g : A × X × Y → Y が成り立つ。fix A X × Y ( f , g ) = ( id A , fix A X ( ( id A × X , fix A × X Y g ) f ) ) ( snd A X , fix A × X Y g )
を全て満たすとする。
このとき、
次に、 Joyal–Street–Verity によるトレースの定義を行う。
もともとの論文では、 組み紐付きモノイダル圏 (テンソル積の左右を入れ替える射
対称モノイダル圏
- 任意の射
に対し、f : A ⊗ X → B ⊗ X , g : A → A が成り立つ。 すなわち、tr A B X ( ( g ⊗ id X ) f ) = g tr A B X f はtr に関して自然である。A - 任意の射
に対し、f : A ⊗ X → B ⊗ X , g : B → B が成り立つ。 すなわち、tr A B X ( f ( g ⊗ id X ) ) = tr A B X f g はtr に関して自然である。B - 任意の射
に対し、f : A ⊗ X → B ⊗ X , g : X → X が成り立つ。 すなわち、tr A B X ( f ( id B ⊗ g ) ) = tr A B X ( ( id A ⊗ g ) f ) はtr に関して自然である。X - 任意の射
に対し、f : A → B が成り立つ。 なお、tr A B ⊤ ( ρ A f ρ B − 1 ) = f は対称モノイダル圏に定まる同型射である。ρ A : A ⊗ ⊤ → A - 任意の射
に対し、f : A ⊗ X ⊗ Y → B ⊗ X ⊗ Y が成り立つ。tr A B X ( tr A ⊗ X , B ⊗ X Y f ) = tr A B X ⊗ Y f - 任意の射
に対し、f : A ⊗ X → B ⊗ X が成り立つ。tr C ⊗ A , C ⊗ B X ( id C ⊗ f ) = id C ⊗ tr A B X f - 常に
が成り立つ。 なお、tr X X X ( σ X ) = id X は対称モノイダル圏に定まるテンソル積の左右を入れ替える同型射である。σ X : X ⊗ X → X ⊗ X
を全て満たすとする。
このとき、
そして、 この 2 つの概念は実質同じものである。
カルテシアン圏
Conway 演算子
参考文献
- S. Bloom, Z. Ésik (1993) 「Fixed-point operations on ccc's. part I」 『Theoretical Computer Science』 155(1):1–38
- M. Hasegawa (1997) 「Models of sharing graphs: a categorical semantics of let and letrec」 Ph. D. thesis, The University of Edinburgh
- A. Joyal, R. Street, D. Verity (1996) 「Traced monoidal categories」 『Mathematical Proceedings of the Cambridge Philosophical Society』 119(3):447–468
- B. C. Pierce (2002) 『Types and Programming Languages』 The MIT Press