是否使用util / ordering与通常方式对总订单进行公理化完全相同?

时间:2015-07-23 12:19:45

标签: alloy

util/ordering模块在​​文件顶部包含一条注释,指出模块参数的界限被约束为完全该范围所允许的界限签名。

我已经阅读了几次(例如here)这是一个优化,它允许生成一个很好的对称破坏谓词,我可以掌握。 (顺便说一下,关于the said post,我是否正确地推断出模块参数规范中的exactly关键字在这里明确地强制执行这个精确的界限(虽然它隐含在4.x之前的合金中)版本)?)

但是,评论还包含一个似乎没有引用优化的部分,但实际上是一个具有语义风格的问题:

 * Technical comment:
 * An important constraint: elem must contain all atoms permitted by the scope.
 * This is to let the analyzer optimize the analysis by setting all fields of each
 * instantiation of Ord to predefined values: e.g. by setting 'last' to the highest
 * atom of elem and by setting 'next' to {<T0,T1>,<T1,T2>,...<Tn-1,Tn>}, where n is
 * the scope of elem. Without this constraint, it might not be true that Ord.last is
 * a subset of elem, and that the domain and range of Ord.next lie inside elem.  

所以,我不明白这一点,特别是关于Ord.lastOrd.next的最后一句话...假设我以经典的方式建模一个完全有序的签名S(< em> ie 在S -> S中指定一个完全的,反身的,反对称的,传递的关系,所有这一切都可以使用简单的一阶逻辑),并且我注意指定{{1}的精确界限它是否等同于陈述S(忽略效率和混淆原子命名问题)?

1 个答案:

答案 0 :(得分:1)

很抱歉对此反应迟钝。这不是很清楚,是吗?这意味着,由于对称性的破坏,last,prev和next的值是硬连线的。如果这样做,并且独立elem被绑定到一个小于elem的所有可能原子的集合的集合,那么你就会有奇怪的声明违反声明,例如Ord.last不在集合中ELEM。所以除了之外没有什么可以理解的:(1)确切的关键字强制elem包含给定范围内的所有原子,(2)有序关系是硬连线的,以便原子出现在&#34;天然&#34;顺序。