このブログは、旧・はてなダイアリー「檜山正幸のキマイラ飼育記 メモ編」(http://d.hatena.ne.jp/m-hiyama-memo/)のデータを移行・保存したものであり、今後(2019年1月以降)更新の予定はありません。

今後の更新は、新しいブログ http://m-hiyama-memo.hatenablog.com/ で行います。

ニョロニョロの確認

本編 随伴のニョロニョロ関係をTypeScriptで確認する - 檜山正幸のキマイラ飼育記 の手計算

  • εP(X) \circ P(ηX) = idP(X)

まず定義:

A:Type;

η<X> :: X => A->X×A :=
  x:X => λa:A.(x, a);

ε<X> :: (A->X)×A => X :=
  (f, a):(A->X)×A => (f a);

ηとεはラムダ項じゃなくて射なので大きなラムダ式。=> は、射のプロファイル宣言でも射の記述でも使う。=>は大きなラムダΛの中置記法でもある。

  η<X>×A :: X×A => (A->X×A)×A
  ------------------- 定義
  (x:X => λa:A.(x, a))×A
  ------------------- 掛け算
  ((x, a'):X×A => (λa:A.(x, a), a'))

  ε<X×A> :: (A->X×A)×A => X×A
  ------------------- パラメータの置換
  (f, a):(A->X×A)×A => (f a)

セミコロンを文の終端に使ってしまったので、射の結合は|とする。

  η<X>×A | ε<X×A>
  ------------------- 定義
  ((x, a'):X×A => (λa:A.(x, a), a')) |  (f, a):(A->X×A)×A => (f a)
  -------------------  結合
  ((x, a'):X×A => (λa:A.(x, a), a'))
  -------------------  β変換
  ((x, a'):X×A => (x, a'))
  -------------------  カリー化
  ( =>λ(x, a'):X×A. (x, a'))