python - z3.parse_smt2_string 在 int2bv 上失败
问题描述
当我使用parse_smt2_string
文档中的示例字符串时,它可以正常工作。但是,在 int2bv 上解析失败。我该如何诊断?
>>> import z3
>>> z3.parse_smt2_string('(declare-const x Int) (assert (> x 0)) (assert (< x 10))')
[x > 0, x < 10]
>>> z3.parse_smt2_string('((_ int2bv 1) 1)')
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/home/elliot/miniconda3/envs/angr/lib/python3.6/site-packages/z3_solver-4.8.7.0-py3.6-linux-x86_64.egg/z3/z3.py", line 8601, in parse_smt2_string
return AstVector(Z3_parse_smtlib2_string(ctx.ref(), s, ssz, snames, ssorts, dsz, dnames, ddecls), ctx)
File "/home/elliot/miniconda3/envs/angr/lib/python3.6/site-packages/z3_solver-4.8.7.0-py3.6-linux-x86_64.egg/z3/z3core.py", line 3222, in Z3_parse_smtlib2_string
_elems.Check(a0)
File "/home/elliot/miniconda3/envs/angr/lib/python3.6/site-packages/z3_solver-4.8.7.0-py3.6-linux-x86_64.egg/z3/z3core.py", line 1381, in Check
raise self.Exception(self.get_error_message(ctx, err))
z3.z3types.Z3Exception: b'(error "line 1 column 2: invalid command, symbol expected")\n'
解决方案
这与 无关int2bv
,而是因为您没有在顶层提供有效的 SMTLib 行。例如,以下是有效的:
>>> z3.parse_smt2_string('(assert (= #b1 ((_ int2bv 1) 1)))')
[1 == int2bv(1)]
在顶层,您可以拥有声明、断言或通用 SMTLib 命令,而不是独立的表达式。
推荐阅读
- sitecore - 爬虫在 Coveo 重建索引中的作用是什么
- python - 如何使用 python 与 NetBox API 交互
- java - Quarkus 延迟初始化
- java - Cloud Vision API 快速入门代码不起作用:java.lang.NoSuchMethodError
- reactjs - react-select onChange 在更改选项后不起作用
- java - ListView 中的 java.lang.NullPointerException 问题
- r - 在同一图中编辑 stat_smooth 线和 geom_points
- java - 如何使用流加入非字符串对象列表
- vue.js - 在动作 vuex 中访问 getter
- python - 烧瓶:方法'jinja_env'没有'globals'成员pylint(无成员)