util/ordering
模块在文件顶部包含一条注释,指出模块参数的界限被约束为完全该范围所允许的界限1>签名。
我已经阅读了几次(例如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.last
和Ord.next
的最后一句话...假设我以经典的方式建模一个完全有序的签名S
(< em> ie 在S -> S
中指定一个完全的,反身的,反对称的,传递的关系,所有这一切都可以使用简单的一阶逻辑),并且我注意指定{{1}的精确界限它是否等同于陈述S
(忽略效率和混淆原子命名问题)?
答案 0 :(得分:1)
很抱歉对此反应迟钝。这不是很清楚,是吗?这意味着,由于对称性的破坏,last,prev和next的值是硬连线的。如果这样做,并且独立elem被绑定到一个小于elem的所有可能原子的集合的集合,那么你就会有奇怪的声明违反声明,例如Ord.last不在集合中ELEM。所以除了之外没有什么可以理解的:(1)确切的关键字强制elem包含给定范围内的所有原子,(2)有序关系是硬连线的,以便原子出现在&#34;天然&#34;顺序。