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

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

型演算子のまとめ

「各レベルの構成子、演算記号」にだいたいまとめたが、別な観点からまとめておく。

型の全体を代数系と考える。これは2ソート代数で、「ラベル型」ソートと「データ型」ソートを持つが、単に「ラベル」と「データ」と言ってしまうこともある。Lをラベル型の全体、Dをデータ型の全体として、色々な演算を持つ。説明欄に×が付いているのは実装がないもの。

演算の説明 演算のプロファイル 演算記号 Catyスキーマ
ラベルの連接× L×L → L >>
ラベル連接の単位× 1 → L ε []
ラベルのミート× L×L → L &
ラベルミートの単位× 1 → L L * (string)
タギング L×D → D @, >@
タギングの右単位× 1 → L ε []
タギングの左擬単位 1 → D υ undefined
タグのデータへの埋め込み L → D -・υ 単項の @
直積 D×D → D × [-, -], >>
公平有限直積 D2+ → D 複数の× [-, ..., -], 複数の>>
直積の単位 1 → D 1× null
無限直積× D*∞ → D Π なし
有限台無限直積 D*∞ → D Π × [-, ..., -*]
ラベル付き直積 D×D → D (×) ++
ラベル付き公平有限直積 D2+ → D 複数の(×) 複数の++
ラベル付き直積の単位 1 → D 1(×) {}
無限ラベル付き直積× D*∞ → D Π なし
有限台無限ラベル付き直積 D*∞ → D Π × {-:-, ..., *:-}
直和× D×D ⊃→ D + なし
公平有限直和× D2+ ⊃→ D 複数の+ なし
直和の単位 1 → D 0 never
無限直和× D*∞ ⊃→ D Σ なし
有限台無限直和× D*∞ ⊃→ D Σ + なし
ラベル付き直和 D×D ⊃→ D (+) |
ラベル付き公平有限直和 D2+ ⊃→ D 複数の(+) 複数の|
ラベル付き直和の単位 1 → D 0 never
無限ラベル付き直和× D*∞ ⊃→ D Π なし
有限台無限ラベル付き直和 D*∞ ⊃→ D Π + (@- -| ..., |@* -)
ミート(集合の共通部分) D×D → D &
ミートの単位 1 → D U any?
ジョイン(集合の合併)× D×D → D ||
ジョインの単位 1 → D 0 never
クリーネスタ D → D -* [-*]
0のクリーネスタ 1 → D 0* = 1 []

単位だけ取り出してみる。

ラベル連接の単位× 1 → L ε []
ラベルミートの単位× 1 → L L * (string)
タギングの右単位× 1 → L ε []
タギングの左擬単位 1 → D υ undefined
直積の単位 1 → D 1× null
ラベル付き直積の単位 1 → D 1(×) {}
ラベル付き直和の単位 1 → D 0 never
ミートの単位 1 → D U any?
ジョインの単位 1 → D 0 never
0のクリーネスタ 1 → D 0* = 1 []

随分とたくさんの演算があるもんんだ。

以上に出てこないが他にも重要な演算がある。

Catyの型演算子 説明
? オプショナル
! 必須(required)
(, ) スキーマ属性付与
{, } バッグ型の出現回数

オプショナル'?'は、代数的には x? = x∨υ と書ける。同様に、x! = x - υ (- は集合差として)

他に、Catyスキーマで出てくる記号は:

演算子の構文上の形式から整理すると以下。

Catyの型演算子 説明 形式 備考
>> 連接 中置二項演算子 実装はない
|| 合併 中置二項演算子 実装はない
& ミート 中置二項演算子
++ マージ 中置二項演算子
| ユニオン(排他的) 中置二項演算子
[ ] 配列 特殊形式多項演算子
[ ,-*] 可変配列 特殊形式多項演算子
{ } オブジェクト 特殊形式多項演算子
{ ,*:-} 可変オブジェクト 特殊形式多項演算子
do { } DOオブジェクト 特殊形式多項演算子
do {,:>*} DO可変オブジェクト 特殊形式多項演算子
@ タグング 前置二項演算子
>@ タグング 中置二項演算子 タグが右
? オプショナル 後置単項演算子
! 必須(required) 後置単項演算子 未実装
(, ) スキーマ属性付与 後置単項演算子