圏論と数式の練習
変な議論してたら教えてください!
命題0
を集合、を圏、を忘却関手、を自由関手とすると、以下が成り立つ。
証明
米田の補題からなので、を示せば良い。
はの左随伴だから、単位と余単位が存在して以下が成り立つ。
以下で具体的に同型射を構成する。写像とを次のように定義する。
とが互いに逆であることを示せば良い。
(定義から)
(hの自然性)
(が関手なので)
(単位と余単位の合成)
(が関手なので)
(定義から)
(rの自然性)
(|-|が関手なので)
(単位と余単位の合成)
(|-|が関手なので)
これで示された。
以下はインフォーマルな(というよりいい加減な)議論。
主張1
forall m. (Monoid m) => (A -> m) -> mという型は、Vector Aとだいたい同型である。
forall m. (CommutativeIdempotentMonoid m) => (A -> m) -> mという型は、Set Aとだいたい同型である。
説得
これらの型は多相型なので、パラメトリシティの制約を受ける。Theorems for free!によると、以下の命題が成り立つ
閉じた項tが型Tを持つならば、(t,t) ∈ R(T)である。
ただし、Rは型を値の集合間の関係に写す写像で、以下のように再帰的に定義される。(この説得に関係ありそうなところだけ)
(f0, f1) ∈ R(A -> B) iff ∀ (a0, a1) ∈ R(A). (f0 a0, f1 a1) ∈ R(B) (t0, t1) ∈ R(∀a. F(a)) iff ∀ A : A0 <=> A1. (t0[a=A0], t1[a=A1]) ∈ R(F)A TがInt,Charなどの基本型なら、 (x0, x1) ∈ R(T, T) iff x0 = x1ただし、X <=> YはXの値の集合とYの値の集合の関係を表す。
これに従って上の型が課す制約を同値変形していく。
(t, t) ∈ R(forall m. (Monoid m) => (A -> m) -> m) (t, t) ∈ R(forall m. (m -> m -> m) -> m -> (A -> m) -> m) -- Monoidを辞書渡しに ∀M : M0 <=> M1. (t, t) ∈ ((M -> M -> M) -> M -> (A -> M) -> M) -- forallを処理 ∀M : M0 <=> M1. ∀(<>, <>') ∈ R(M -> M -> M). (t (<>), t (<>')) ∈ R(M -> (A -> M) -> M) -- ->を処理 ∀M : M0 <=> M1. ∀(<>, <>') ∈ R(M -> M -> M). ∀(e, e') ∈ R(M). (t (<>) e, t (<>') e') ∈ R((A -> M) -> M) ∀M : M0 <=> M1. ∀(<>, <>') ∈ R(M -> M -> M). ∀(e, e') ∈ M. ∀(f, f') ∈ R(A -> M). (t (<>) e f, t (<>') e' f') ∈ M
さらに、
(<>, <>') ∈ R(M -> M -> M) ∀(a, a') ∈ M. (<> a, <>' a') ∈ R(M -> M) ∀(a, a') ∈ M. ∀(b, b') ∈ M. (<> a b, <>' a' b') ∈ M
(f, f') ∈ R(A -> M) ∀(x, x') ∈ R(A). (f x, f' x') ∈ M ∀x :: A. (f x, f' x) ∈ M -- Aを基本型として扱う
ここで、Mが(関係の特別な場合としての)関数の場合だけを考える*1。すなわち、この関数をuと書くことにして、
(a, a') ∈ M iff a' = u a
すると、さらに以下のように簡略化できる。
(<>, <>') ∈ R(M -> M -> M) ∀a,b. u (a <> b) = u a <> u b
(f, f') ∈ R(A -> M) ∀x :: A. u (f x) = f' x u . f = f'
元の条件に代入する。
(t, t) ∈ R(forall m. (Monoid m) => (A -> m) -> m) ∀u :: M0 -> M1. ∀(<>, <>'). (∀a,b. u (a <> b) = u a <> u b) => ∀(e, e'). (u e = e') => ∀(f, f'). (u . f = f') => u (t (<>) e f) = t (<>') e' f' ∀u :: M0 -> M1. ∀(<>, <>'). ∀(e, e'). ∀(f, f'). (uがモノイド準同型) => u (t (<>) e f) = t (<>') e' (u . f) ∀u :: M0 -> M1. ∀f. (uがモノイド準同型) => u (t f) = t (u . f) -- 辞書渡しを暗黙に
結局、満たされるべき条件は、fが任意の関数で、uが任意のモノイド準同型のとき、u (t f) = t (u . f)が成り立つことである。
これは要するに、tの要素がからへの自然変換だということである。命題0より、このような自然変換の集合はと同型である。におけるAの自由対象はAの有限列だから、これはVector Aに同型。
制約がMonoidでなくCommutativeIdempotentMonoidの場合も同様の議論。
以上が説得されるべきことであった。
感想と反省
- 圏論の議論が面倒。全部Haskellの等式推論でやりたい。(実際fとgの構成はHaskellでやった)。たぶん圏論上手い人はもっとうまく証明できるはずなんだけど、どうしていいか分からない。
- 米田の補題を使わずにやろうとしたらひどいことになった。なぜかは分からない。
- パラメトリシティから自然性にもっていく議論があやしい。必要性しか示してない。
- seqどころか⊥の存在すら無視している。モノイド則を満たさないMonoidインスタンスの存在も。
- Lens' s a (定義は forall f. (Functor f) => (a -> f a) -> s -> f s)が(s -> (a, (a -> s)))と同型であることも似た議論で示せる?
- 集合としての同型しか示してないけど、実際には命題0の左辺の自然変換の集合には(CがMonなら)モノイド構造が入るはず。本当はこれを主張したかったが、述べる方法すら分からなかった。もしかして同型が存在するだけでなく自然であることを示せばいい?
*1:こうするとなぜかうまくいくらしい