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

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

項と項集合、もっと

項空間に代数構造が入るは入るので、これを項代数と呼んでおく。項代数の演算は、項構成子(コンストラクタ)となる。項空間は余代数構造も持っていて(たいていそういうもんだ)、項の分解とか項の特性とかが余代数構造を定義する。

項集合空間はもっと代数らしい。項=インスタンス、項集合=型だから、項集合代数(termset algebra)は型代数と言ってもよい。型代数の演算は、「項代数演算の持ち上げ+集合演算」だが、集合演算には次がある。

  1. + (排他的なときの合併)
  2. - (集合の差)
  3. ~ (補集合)

もちろん、これらは独立ではない。

最近気がついたのだが、型表現という構文構造の操作(加工)から導かれる演算というのもあるみたい。Catyの型で言えば、パスにより型表現の部分表現を抜き出すとか、部分表現を置換するとかの構文的操作に対応する型演算。

オブジェクトのmergeとか配列のconcatは、項代数の演算(インスタンスの演算)の持ち上げと考えることができる。

Catyの場合、項演算じゃなくて型演算(集合演算)というのは、最終的には+(排他的合併)しかないような気がする。∩は出てくるのだが、割と早い段階で消してしまう。一般的な∪は難しいので扱わない。「型代数=項代数に'+'演算」という事実は、物事を簡略化するのにすごく役だっている。