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

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

構文的なdom/cod

これは、あくまで構文的であり、決して意味的ではないことに注意。意味的な議論は解釈を決めないとできないし、解釈は色々あり、解釈ごとに定義は変わる。

基底:コマンド呼び出しと定数

  1. Dom(f::S -> T) = S
  2. Dom(c) = null
  1. Cod(f::S -> T) = T
  2. Cod(c) = sing(c)

帰納ステップ:

  1. Dom(E | F) = Dom(E)
  2. Dom([E, F]) = Dom(E)∩Dom(F) (∩は & に還元可能)
  3. Dom({α:E, β:F}) = Dom(E)∩Dom(F)
  4. Dom(when {α=>E, β=>F}) = (@α Dom(E) | @β Dom(F))
  5. Dom(each{E}) = list[Dom(E)]
  6. Dom(@α E) = Dom(E)
  1. Cod(E | F) = Cod(F)
  2. Cod([E, F]) = tuple [Cod(E), Cod(F)]
  3. Cod({α:E, β:F}) = object {α: Cod(E), β:Cod(F)}
  4. Cod(when {α=>E, β=>F}) = Cod(E)∪Cod(F) (還元不可能)
  5. Cod(each{E}) = list[Cod(E)]
  6. Cod(@α E) = @α Cod(E)

集合の合併∪は、型表現に還元不可能なので、プロファイルは一般に次の形になる。

  • S -> T1, T2, ..., Tn