Alloy 合金不可逆性

Alloy 合金不可逆性,alloy,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 {} 为什么第二个“我的关系”不起作用?我的想法是,例如 MyS

我刚开始使用合金。我有一个关于以下最小示例的问题:

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 {}
为什么第二个“我的关系”不起作用?我的想法是,例如

MySig={N0,N1,N2} iden={(N0,N0),(N1,N1),(N2,N2)}

如果有一个元素(x,x),其中x在关系my_rel的MySig中,那么它也必须在iden中

然而,我得到了这个模型:


也就是说,我的关系是自反的。

我的关系不在iden中
表示
我的关系
不是
iden的子集。由于my_rel中的
N0->N1
N0->N1不在iden中
my_rel
不是子集,事实仍然成立。

my_rel不在iden中
my_rel
不是
iden的子集。由于my_rel中的
N0->N1和iden中的
N0->N1都不在
my_rel
不是子集,事实仍然成立。

提示:与其将这两个事实都设为谓词,不如将它们设为
检查{pred1 pred2}
。这将给你一个反例,其中一个是真的,另一个不是。提示:与其让这两个事实都成为事实,不如让它们成为谓词,然后做
检查{pred1 pred2}
。这将给你一个反例,其中一个是真的,另一个不是。谢谢,那是我的哑巴,我应该知道基本集合论。^^谢谢,那是我的哑巴,我应该知道基本集合论^^