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)
添加括号解决了问题。
我尝试在 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)
添加括号解决了问题。