叠加演算和方程式排序

时间:2019-07-05 16:20:36

标签: algorithm language-agnostic theorem-proving first-order-logic

叠加演算是一种定理证明技术,它通过施加归约次序而不是在两个方向上均应用每个方程,从而使副调制的产值降低。

对于一个非常简单的测试用例,请考虑以下子句(使用小写字母表示常量而非变量的表示法):

a=b
a=c
b!=c

显然,可以从这些条款中得出矛盾之处。

在这种情况下,我们只有基本原子项的单位子句,因此可以以大大简化的形式陈述叠加规则。

叠加,左:

s=t, s!=v => t!=v

其中s > tt >= v在所选缩减顺序中。 (叠加的完整版本需要将子句作为文字的多集来处理,具有变量替换项,并且归约顺序仅基于基本条件进行合计,但不适用于此处讨论的简单测试用例。)

类似地,

叠加,右:

s=t, s=v => t=v

其中s > tt >= v在所选的降序中。

假设我们使用归约顺序a > b > c。然后:

a=b, a=c => b=c
b=c, b!=c => false

但是,对于任何降阶排序选择,演算都必须完整。假设改为c > b > a,则不允许上面的第一个推断。

候选替代推论:

c=a, c!=b => a=b

也因为b > a而被禁止。

备用版本:

c=a, c!=b => b=a

这需要在归约顺序允许的方向上尝试输入方程,然后翻转输出方程以同样匹配归约顺序。当您这样做时,它会起作用。

可以吗?换句话说,叠加演算的定义的意图是方程是无序的,因此每个方程都应以与归约顺序匹配的任何顺序生成和使用?

1 个答案:

答案 0 :(得分:1)

仅作记录:在叠加演算的标准理论解释中(我的论文是Leo Bachmair和Harald Ganzinger,“基于选择和简化的基于重写的等式定理证明”,《逻辑与计算杂志》,1994年, 3(4):217-247),所有文字都是等式或不等式。它们要么被明确定义为无序对,然后在多集编码中进行比较,要么直接被定义为多集(具体细节取决于您阅读的论文,但这些大多只是对同一基本概念的不同描述)。

是的,您对方程无序的假设是正确的。我知道的所有实现方式都是固有的方向性,因此需要明确考虑所有与术语排序兼容的方向。