Alloy - 反身性
Alloy - Irreflexivity
我刚开始使用 Alloy。我对以下最小示例有疑问:
module test
abstract sig MySig {
my_rel : set MySig
}
//fact my_rel_irrefl {no iden & my_rel } // this works
fact my_rel_irrelfl {my_rel not in iden} // this does not work
run {}
为什么第二个 my_rel_irrelfl 不起作用?我的想法是,例如
MySig = {N0,N1,N2}
iden = {(N0,N0),(N1,N1),(N2,N2)}
如果有一个元素 (x,x),其中 x 在关系 my_rel 中的 MySig 中,那么它也必须在 iden 中。
但是,我得到了这个模型:
model found by alloy
即其中 my_rel 是自反的。
my_rel not in iden
表示 my_rel
不是 iden
的 子集 。由于 N0 -> N1 in my_rel
和 N0 -> N1 not in iden
,my_rel
不是子集,事实仍然成立。
我刚开始使用 Alloy。我对以下最小示例有疑问:
module test
abstract sig MySig {
my_rel : set MySig
}
//fact my_rel_irrefl {no iden & my_rel } // this works
fact my_rel_irrelfl {my_rel not in iden} // this does not work
run {}
为什么第二个 my_rel_irrelfl 不起作用?我的想法是,例如
MySig = {N0,N1,N2} iden = {(N0,N0),(N1,N1),(N2,N2)}
如果有一个元素 (x,x),其中 x 在关系 my_rel 中的 MySig 中,那么它也必须在 iden 中。
但是,我得到了这个模型:
model found by alloy
即其中 my_rel 是自反的。
my_rel not in iden
表示 my_rel
不是 iden
的 子集 。由于 N0 -> N1 in my_rel
和 N0 -> N1 not in iden
,my_rel
不是子集,事实仍然成立。