我有两个类A
,B
并且与它们的额外类数据有关系R
。
因此,A
和B
通过 相互关联R
。
sig A {}
sig B {}
sig R {
a : A,
b : B,
data : Bool
}
这里,Bool 定义为:
sig Bool {}
sig True, False extends Bool {}
现在,我这样扩展A
:
sig A{
allb : some B
}
其中包含 this和 thatB
之间存在关系以及数据类型为 的所有实例。A
B
True
我想将以下逻辑陈述表达为合金事实:
(来源:dropproxy.com)
我在这里假设True == 1
andFalse != 1
集合A
和分别R
包含 and 的所有A
实例R
。
到目前为止,我尝试的是定义 a fun trueR(a : A)
which 应该返回所有R
's for whichR.a = a and r.data = True
和 a fact allbIsRTrue
which 声明 for eachA
allb
应该是R.b
's 返回的总和 by trueR
。
但是,这就是我卡住的地方,我找不到正确的构造来对引用中的集合求和,并尝试sum
导致语法错误。
我如何将我的正式约束指定为合金事实?