Alloy 断言暗示命令

Alloy assertion on implies command

我尝试在 Alloy 上实现分体学论文中描述的公理系统:“Bennett,Having a Part Twice Over,2013”​​。

我实现了所有的公理,我认为如果我正确地实现它们,我可以断言和检查定理。

我尝试编码定理 (T9)。这是论文中的定理:

这就是我的编码方式:

/* (T9) Conditional Reflexivity */
assert conditional_reflexivity {
  all x: Filler |  some z: Slot | z in x.slots implies x in x.parts
}

(Ps(z, x) 表示 z 是 x 的槽,而 P(x, x) 表示 x 是 x 的一部分。我将槽和部分都编码为集合。)

但是,当我检查断言时,似乎有些东西不起作用。我得到了以下反例:

但是我不明白这是一个蕴涵的反例。前提甚至没有实现。它唯一有意义的方式是它要求每个 x 都有一个 z。在这种情况下,这肯定是一个反例。在这种情况下,我如何检查定理?

(如果需要,我可以分享完整的代码。)

正如 Hovercouch 所解释的,这是一个优先问题:

you got AE(p impl q) when you wanted A((Ep) impl q)

添加括号解决了问题。