【发布时间】:2012-10-19 14:55:27
【问题描述】:
我有两个类 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
}
其中包含B 的所有实例,其中A 和B 之间存在关系,并且数据类型为True。
我想将以下逻辑陈述表达为合金事实:
(来源:dropproxy.com)
我在这里假设True == 1 和False != 1 以及集合A 和R 分别包含A 和R 的所有实例。
到目前为止,我尝试定义一个 fun trueR(a : A),它应该返回所有 R 的 R.a = a and r.data = True 和一个 fact allbIsRTrue,它声明每个 A allb 应该是R.b 由 trueR 返回的总和。
但是,这就是我卡住的地方,我找不到正确的构造来对引用中的集合求和,并尝试使用 sum 导致语法错误。
如何将我的正式约束指定为合金事实?
【问题讨论】:
标签: alloy