集合と Oid について
[Q1] oid として集合を使うことはできるのでしょうか?
例えばこんな感じです.
{a} と {a,b} は異なる oid である.
オブジェクト {a} の属性 l の値は v であることを {a}.l = v と書く.
という具合です. やっぱりこう考えることは間違っているのでしょうか?
[A1] 現在の Quixote の実装ではできません。
一般的な答としては、集合を oid にすることは可能だと思います。
(ただし上の例は当初 Quixote で考えていた意味論とは異なってますが。)
[Q2] 集合を Oid に用いた場合、継承はできないのでしょうか?
例えば {a} =<_H {a,b} であるなら inheritance の規則から
{a}.l =< {a,b}.l
が導かれます. ここで l として例えば要素数を考えると,
{a}.要素数 = 1
{a,b}.要素数 = 2
となりますけど, 整数 1,2 の間には =< が成立しないとすると,
{a}.要素数 !=< {a,b}.要素数
{a,b}.要素数 !=< {a}.要素数
となり, inheritance が成立しません.
やっぱり oid として集合を使ったことが間違いなんでしょうか?
[A2] 間違いではありません。
{a}/[要素数 = 3]
という記述を許すならば、継承があってもよいのではないでしょうか?
しかし「要素数」というのは集合にとって immutable であるのなら、
それは継承の対象外の属性として位置付けるべきでしょう。
つまり、
ある集合の各要素を代表している立場としての集合が持っている属性
と、
集合そのものが持っている属性
とを分けて考える必要があって、そうしないと上記の「inheritance が成立しない」
現象が起きてしまうのではないのでしょうか。