我使用了expr.Substitute的Z3 Java API(Expr [] oldArgs,Expr [] newArgs),并且卡住了。想知道替换过程中是否存在错误。
这里有一些声明:
(declare-const addr_of_s (_ BitVec 16))
(declare-const m_10 (Array (_ BitVec 16) (_ BitVec 16)))
(declare-const size_10 (Array (_ BitVec 16) (_ BitVec 16)))
(declare-const pre_disjoint_10 Bool)
(declare-fun disjoint_10 ((_ BitVec 16) (_ BitVec 16)) Bool)
(declare-const label (_ BitVec 16))
(declare-const label_0 (_ BitVec 16))
这是要替换的表达式:
(= (select m_10 (bvadd addr_of_s (bvmul #x0003 #x0001))) #x0000)
oldArgs:{m_10, size_10, pre_disjoint_10}
newArgs:
{(store (store (store (store m_10 addr_of_s #x0031)
(bvadd #x0001 addr_of_s)
#x0032)
(bvadd #x0002 addr_of_s)
#x0033)
addr_of_s
#x0032),
size_10,
(and pre_disjoint_10
(disjoint_10 label label_0)
(bvuge (bvadd label label_0) label)
(not (= label #x0000)))}