运行 boolector 二进制
Running boolector binary
我尝试 运行 下面的代码(直接取自 how to print output in hexadecimal format,他声称它有效):
(set-logic QF_BV)
(set-info :smt-lib-version 2.0)
(declare-const val1 (_ BitVec 16))
(declare-const val2 (_ BitVec 16))
(declare-const gen_mul (_ BitVec 16))
(declare-const eval1 (_ BitVec 32))
(declare-const eval2 (_ BitVec 32))
(declare-const org_mul (_ BitVec 32))
(declare-const rem17 (_ BitVec 32))
(declare-const res (_ BitVec 16))
(assert (= gen_mul (bvmul val1 val2)))
(assert (= eval1 (concat #x0000 val1)))
(assert (= eval2 (concat #x0000 val2)))
(assert (= org_mul (bvmul eval1 eval2)))
(assert (= rem17 (bvurem org_mul #x00010001)))
(assert (= res ((_ extract 15 0) rem17)))
(assert (= val1 #xb621))
(assert (= val2 #xd620))
(check-sat)
(get-value (val1))
(get-value (val2))
(get-value (org_mul))
(get-value (gen_mul))
(get-value (eval1))
(get-value (eval2))
(get-value (org_mul))
(get-value (rem17))
(get-value (res))
(exit)
我尝试了 运行ning ./boolector ex.smt2,但出现了以下错误:
boolector:ex.smt2:4:2:'declare-const'
处的预期命令
有谁知道这有什么问题吗?
Boolector 似乎不支持 declare-const
。而是使用 declare-fun
。也就是说,而不是写:
(declare-const val1 (_ BitVec 16))
写入:
(declare-fun val1 () (_ BitVec 16))
注意名称后面的一对括号。您需要为每个 declare-const
执行此操作,否则无需进行其他更改。
严格来说这是布尔函数的缺点,因为 declare-const
是 SMTLib 规范的一部分。请参阅 http://smtlib.cs.uiowa.edu/papers/smt-lib-reference-v2.6-r2017-07-18.pdf 的第 4.2.3 节。通知他们可能是个好主意。
我尝试 运行 下面的代码(直接取自 how to print output in hexadecimal format,他声称它有效):
(set-logic QF_BV)
(set-info :smt-lib-version 2.0)
(declare-const val1 (_ BitVec 16))
(declare-const val2 (_ BitVec 16))
(declare-const gen_mul (_ BitVec 16))
(declare-const eval1 (_ BitVec 32))
(declare-const eval2 (_ BitVec 32))
(declare-const org_mul (_ BitVec 32))
(declare-const rem17 (_ BitVec 32))
(declare-const res (_ BitVec 16))
(assert (= gen_mul (bvmul val1 val2)))
(assert (= eval1 (concat #x0000 val1)))
(assert (= eval2 (concat #x0000 val2)))
(assert (= org_mul (bvmul eval1 eval2)))
(assert (= rem17 (bvurem org_mul #x00010001)))
(assert (= res ((_ extract 15 0) rem17)))
(assert (= val1 #xb621))
(assert (= val2 #xd620))
(check-sat)
(get-value (val1))
(get-value (val2))
(get-value (org_mul))
(get-value (gen_mul))
(get-value (eval1))
(get-value (eval2))
(get-value (org_mul))
(get-value (rem17))
(get-value (res))
(exit)
我尝试了 运行ning ./boolector ex.smt2,但出现了以下错误: boolector:ex.smt2:4:2:'declare-const'
处的预期命令有谁知道这有什么问题吗?
Boolector 似乎不支持 declare-const
。而是使用 declare-fun
。也就是说,而不是写:
(declare-const val1 (_ BitVec 16))
写入:
(declare-fun val1 () (_ BitVec 16))
注意名称后面的一对括号。您需要为每个 declare-const
执行此操作,否则无需进行其他更改。
严格来说这是布尔函数的缺点,因为 declare-const
是 SMTLib 规范的一部分。请参阅 http://smtlib.cs.uiowa.edu/papers/smt-lib-reference-v2.6-r2017-07-18.pdf 的第 4.2.3 节。通知他们可能是个好主意。