AlloyはRelationを順序付けられたタプルの集合として表現する
AlloyはRelationを順序付けられたタプルの集合として表現する
https://alloytools.org/tutorials/online/sidenote-relations-are-ordered-pairs.html
a ↦ b ↦ cという関数がある時(a,b,c)と表現できる
集合なので、集合上の演算や->や.も得られる
例えば、2つのタプルが以下のようにある時
code:_
a = {(1, X), (2, Y)}
b = {(X, A), (Y, B)}
Alloyの(.)は、aの最後とbの最初がマッチして消えたもの
code:_
a.b = {(1, A), (2, B)}
1 ↦ XとX ↦ Aを結合したら、1 ↦ Aになっている
https://alloytools.org/tutorials/online/sidenote-relational-join.html
Alloyの(->)は、タプル同士の積
単に全ての組み合わせになる
code:_
a->b = {(1, X, X, A), (1, X, Y, B), (2, Y, X, A), (2, Y, Y, B)}
https://alloytools.org/tutorials/online/sidenote-format-arrow.html
(1 ↦ X) ↦ (X ↦ A)なので、当然(1,X,X,A)が得られる
したがって、集合もスカラも関係も内部では同じ表現なので、同じ演算子を適用できる
/mrsekut-book-4274068587/050 (第3章 論理系)
Alloyはスカラも集合も関係も統一的に扱う