使用 util/ordering 与以通常方式公理化全序完全相同吗?
Is using util/ordering exactly the same as axiomatizing a total order in the usual way?
util/ordering
模块在文件顶部包含一条注释,说明模块参数的界限被限制为完全 允许的界限所述签名的范围。
我已经读过几遍了(here for instance) that it is an optimization that allows to generate a nice symmetry-breaking predicate, which I can grasp. (BTW, with respect to the said post,我推断模块参数规范中的 exactly
关键字在这里是为了明确强制执行这个确切的界限(虽然它隐含在4.x Alloy 之前的版本)?)
但是,评论中还有一部分似乎没有提到优化,而是真正提到了一个具有语义味道的问题:
* 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
建模( 即 在 S -> S
中指定了总的、自反的、反对称的、可传递的关系,所有这些都可以使用简单的一阶逻辑实现)并且我注意指定一个精确的界限对于 S
:是否等同于声明 open util/ordering[S]
(忽略效率和混淆原子命名问题)?
很抱歉对此回复缓慢。这不是很清楚,是吗?这意味着由于对称性破缺,last、prev 和 next 的值是固定的。如果这样做了,并且 elem 独立地绑定到一个小于 elem 的所有可能原子的集合的集合,那么你就会奇怪地违反声明,例如 Ord.last 不在集合中元素。因此,除了:(1) exactly 关键字强制 elem 包含给定范围内的所有原子,以及 (2) 顺序关系是硬连线的,因此原子以 "natural" 顺序出现。
util/ordering
模块在文件顶部包含一条注释,说明模块参数的界限被限制为完全 允许的界限所述签名的范围。
我已经读过几遍了(here for instance) that it is an optimization that allows to generate a nice symmetry-breaking predicate, which I can grasp. (BTW, with respect to the said post,我推断模块参数规范中的 exactly
关键字在这里是为了明确强制执行这个确切的界限(虽然它隐含在4.x Alloy 之前的版本)?)
但是,评论中还有一部分似乎没有提到优化,而是真正提到了一个具有语义味道的问题:
* 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
建模( 即 在 S -> S
中指定了总的、自反的、反对称的、可传递的关系,所有这些都可以使用简单的一阶逻辑实现)并且我注意指定一个精确的界限对于 S
:是否等同于声明 open util/ordering[S]
(忽略效率和混淆原子命名问题)?
很抱歉对此回复缓慢。这不是很清楚,是吗?这意味着由于对称性破缺,last、prev 和 next 的值是固定的。如果这样做了,并且 elem 独立地绑定到一个小于 elem 的所有可能原子的集合的集合,那么你就会奇怪地违反声明,例如 Ord.last 不在集合中元素。因此,除了:(1) exactly 关键字强制 elem 包含给定范围内的所有原子,以及 (2) 顺序关系是硬连线的,因此原子以 "natural" 顺序出现。