我们这里的问题是要证明
使用带有测试的 Kleene 代数。
在 b 的值被 p 保留的情况下,我们有交换律条件 bp = pb;并且两个程序之间的等价性简化为等式
在 p 不保留 b 的值的情况下,我们有交换律条件 pc = cp;并且两个程序之间的等价性简化为等式
我正在尝试使用以下 SMT-LIB 代码证明第一个等式
(declare-sort S)
(declare-fun sum (S S) S)
(declare-fun mult (S S) S)
(declare-fun neg (S) S)
(assert (forall ((x S) (y S) (z S)) (= (mult x (sum y z)) (sum (mult x y) (mult y z))) ) )
(assert (forall ((x S) (y S) (z S)) (= (mult (sum y z) x) (sum (mult y x) (mult z x))) ) )
(assert (forall ((x S) (y S) (z S)) (= (mult x (mult y z)) (mult (mult x y) z)) ))
(check-sat)
(push)
(declare-fun b () S)
(declare-fun p () S)
(declare-fun q () S)
(declare-fun r () S)
(assert (= (mult b p) (mult p b)) )
(check-sat)
(pop)
但我正在获得timeout
;就是说Z3不能处理交换性条件bp=pb。请在此处在线运行此示例。
Z3 无法证明这些方程,但 Mathematica 和 Reduce 能够。Z3 没有定理证明器那么强大。你同意吗?