Alloyの(.)
結合
関係の合成、関数の合成などを統一的に扱う演算子
例
集合sと二項関係rに対し、
s.rは、関係rの下での集合sの像
r.sは、逆方向に辿った像になる
スカラxと二項関係rに対し、
x.rは、 xが対応付けているアトムの集合
関数fとその定義域にあるスカラxに対し、
x.fは、fによりxに対応付けられるスカラ
関数適用f xのようなもの
A.Bのarityは、Aのarity + Bのarity - 2になるmrsekut.icon
Aの最後とBの最初が消えるので-2
例えば、2つのタプルが以下のようにある時
code:_
a = {(1, X), (2, Y)}
b = {(X, A), (Y, B)}
code:_
a.b = {(1, A), (2, B)}
1 ↦ XとX ↦ Aを結合したら、1 ↦ Aになっている
関係もスカラも、b -> n -> a -> tだったり、tだったりで表現できるので、
それを頭の中で思い出しながら、単に結合してるだけ、と考えれば理解しやすいmrsekut.icon
addr: b -> n -> a -> t
t: t
b: b
があるとき、b.addr.t : n -> aになる
スカラを1項の関数と捉えれば、単なる関数結合のように読める
二項関係のrの定義域と値域の表現
r.univは定義域
univ.rは値域になる