項と項集合、もっと
項空間に代数構造が入るは入るので、これを項代数と呼んでおく。項代数の演算は、項構成子(コンストラクタ)となる。項空間は余代数構造も持っていて(たいていそういうもんだ)、項の分解とか項の特性とかが余代数構造を定義する。
項集合空間はもっと代数らしい。項=インスタンス、項集合=型だから、項集合代数(termset algebra)は型代数と言ってもよい。型代数の演算は、「項代数演算の持ち上げ+集合演算」だが、集合演算には次がある。
- ∪
- ∩
- + (排他的なときの合併)
- - (集合の差)
- ~ (補集合)
もちろん、これらは独立ではない。
最近気がついたのだが、型表現という構文構造の操作(加工)から導かれる演算というのもあるみたい。Catyの型で言えば、パスにより型表現の部分表現を抜き出すとか、部分表現を置換するとかの構文的操作に対応する型演算。
オブジェクトのmergeとか配列のconcatは、項代数の演算(インスタンスの演算)の持ち上げと考えることができる。
Catyの場合、項演算じゃなくて型演算(集合演算)というのは、最終的には+(排他的合併)しかないような気がする。∩は出てくるのだが、割と早い段階で消してしまう。一般的な∪は難しいので扱わない。「型代数=項代数に'+'演算」という事実は、物事を簡略化するのにすごく役だっている。