解析和存储涉及数组的表达式

时间:2017-10-06 05:11:41

标签: arrays parsing z3 equivalent

我有两个涉及文件中数组的整数算术表达式。将每个表达式存储到内存中的最佳方法是什么。所以等效公式在语法上是等价的。比较那种结构,我们可以找到等价。 要检查等效性,首先要比较结构,如果相同,那么它们是等效的,否则使用SMT求解器。

实施例。 a [i + 2] +5和a [i + 3-1] + 4 + 1是等价的。

目前我代表a [i] = b [i] + z为wr(a,i,rd(b,i)+ z)。其中Write(wr)和Read(rd)是函数。

1 个答案:

答案 0 :(得分:1)

有点难以理解你在问什么。但是数组理论已经支持读/写操作。您作为示例放下的相等可以这样编码:

(set-logic AUFLIA)

(declare-const i Int)
(declare-const a (Array Int Int))

(define-fun eq () Bool (= (+ (select a (+ i 2))       5)
                          (+ (select a (+ i (- 3 1))) (+ 4 1))))

; To prove equivalence, assert the negation and make sure the result is unsat:
(assert (not eq))

(check-sat)

这将导致unsat证明所有数组a的相等性为真。 (请注意,我们主张否定平等。)

这就是你想要的吗?