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

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

データ型と型シノニム

HaskellやMLで、データ型と型シノニムの違いがある。この違いは、関数定義において、“再帰スキーマイプシロン式で定義する”のと、“通常の関数定義する”のとの違いと類似だろう。スキーマとは、「これこれの性質を持つモノ」という性質記述をすると、その存在物を取り出す手順のこと。背後にはなんらかの一意存在定理がある。一意存在定理がないと、性質記述からモノを取り出せない。

スキーマを使う定義は、コンプリヘンションによる定義と言ってもいい。それに対して、通常の定義は組み合わせ(コンビネーション)方式と言える。

  • コンプリヘンション:素材はない。なにもないところからモノを出現させる。
  • コンビネーション:素材がある。それらの素材を組み合わせて作る。

再帰不動点だからか、再帰関係は不動点の一意存在定理に頼る気がする。

イプシロンスキーマ不動点と違うが、イプシロンなしでは関数の最初の定義ができない。関数のイプシロンによる定義は、引き算の定義、割り算の定義、平方根の定義などで使われる。モノイドの単位元に名前を付けられる、群の逆元を関数と思える、などもイプシロンがあるからこそ出来ることだ。

関数定義も、スキーマによって無から引っ張り出すのと、既存の材料の組み合わせは区別すべきかもしれない。CoqのDefinitionとFixpointはそういう差か。