我已经安装了 python 和 Z3 并设置了 PYTHONPATH 与 Z3 python 目录的路径。
我通过运行 from z3 import * 导入 Z3
但在此之后,我收到一条持续的长错误消息,其以以下方式结束:
File "C:\Program Files\Microsoft Research\Z3-4.1\python\z3core.py", line 34, in init
_lib = ctypes.CDLL(PATH)
File "C:\Python27\lib\ctypes\__init__.py", line 365, in __init__
self._handle = _dlopen(self._name, mode)
WindowsError: [Error 126] The specified module could not be found
Run Code Online (Sandbox Code Playgroud)
有趣的是,一切都正常,直到我重新安装了 python 和 Z3。
我的问题是“Distinct”在 z3 python 中有效吗?。我比较了以下代码,但似乎没有给出相同的结果:
(declare-const x Int)
(declare-const y Int)
(assert (distinct x y))
(check-sat)
(get-model)
Run Code Online (Sandbox Code Playgroud)
结果是:
sat
(model
(define-fun y () Int
0)
(define-fun x () Int
1)
)
Run Code Online (Sandbox Code Playgroud)
我添加了否定断言只是为了测试,结果未满足,这是正确的:
(assert (= x y))
unsat
Z3(6, 10): ERROR: model is not available
Run Code Online (Sandbox Code Playgroud)
但是当我在 python 中使用 z3 时,它总是给我如下所示:
x = Int('x')
y = Int('y')
Distinct(x, y)
s = Solver
s = Solver()
s.check()
Run Code Online (Sandbox Code Playgroud)
当我添加以下断言时,它应该给我 unsat 但它返回 sat:
s.add(x == y)
[y = 0, x = 0]
Run Code Online (Sandbox Code Playgroud)
这是否意味着我使用了错误的语法?
【新手】。根据http://rise4fun.com/Z3/tutorialcontent/strategies,“smt”是 Z3 的主要策略。但是,明确地使用它甚至可以解决微不足道的问题。如何在战术序列中引用默认的 Z3 求解器?
(declare-fun var1 () Real)
(assert (= (* var1 var1) 9.0))
(assert (< var1 0.0))
; Works
;(check-sat)
;(get-model)
; Breaks
(check-sat-using smt)
(get-info :reason-unknown)
Run Code Online (Sandbox Code Playgroud) Microsoft Research 的 Z3 SMT 求解器被广泛视为该领域的领导者。
“Z3”这个名字背后有什么含义还是纯粹是一个随机的项目名称?我浏览了几篇介绍该项目的论文和幻灯片,但似乎都没有解释这个名称。
我目前正在使用 ocaml 4.06.0 并且我正在尝试使用 Z3 sat 求解器。我正在使用 opam 的 oasis 来编译文件(它成功地构建了所有内容)。但是,当我运行生成的本机代码时,出现以下错误:error while loading shared libraries: libz3.so. 我尝试重新安装 z3 软件包,但错误仍然存在。谁能帮我解决这个问题,因为我不知道还能尝试什么?
在阅读了https://www.rise4fun.com/Z3/tutorial上的优秀教程后,我开始尝试 Z3 。但现在我想了解Z3 的 SMTLIB2 方言中可用的所有命令的概述。
不幸的是,我只找到了不同语言绑定的参考手册,但没有找到 SMTLIB2 本身的参考手册。
你能告诉我如何逐步使用求解器Z3吗?而且,当我使用时v.name(),如何才能获得没有命题价值的模型?比如,在调用程序后cout<<v.name()<<m.get_const_interp(v);,我们可以得到模型
x = 3, p = true, y = 4,因为我不需要p = true,可以从模型集中删除吗?
证明的代码是
x, d = Reals('x d')
t = (simplify(simplify(((x + d)**2 - x**2)/d, som = True), mul_to_power=True))
print t
prove(Implies(d != 0, t == 2*x + d))
prove(Implies(d == 0, 2 * x + d == 2*x))
Run Code Online (Sandbox Code Playgroud)
而输出是
(2·d·x + d2)/d
proved
proved
Run Code Online (Sandbox Code Playgroud)
如果你知道使用Z3Py的更紧凑的证据,请告诉我.非常感谢.
我想在我的C++程序中使用z3 API.我想知道要包含哪些头文件以及如何运行包含z3函数等的程序.
我看到了example.cppz3源代码附带的文件,为了运行这个文件,我不得不make examples在内部执行命令的build目录中运行
g++ -o cpp_example -I../src/api -I../src/api/c++
../examples/c++/example.cpp libz3.so -lpthread -fopenmp -lrt
Run Code Online (Sandbox Code Playgroud)
现在,如果我创建任何程序,../src/api每次需要编译程序时,是否需要像这样编译它(包含和链接lib文件)?
请帮帮我,我之前从未使用过z3.任何帮助是极大的赞赏.:)
我需要 z3 中的一些临时变量,我不需要计算值,只需要检查它是否存在就足够了。
这是我正在做的(简单形式):
import z3
def maj(a, b, c):
return (a & b) ^ (a & c) ^ (b & c)
def func(a, b, c):
a = z3.RotateRight(a, 5) ^ z3.BitVecVal(0xafaf, 16)
b = z3.RotateRight(b, 2) ^ z3.RotateRight(b, 7)
c = z3.RotateRight(c, 11) ^ z3.LShR(c, 3)
return a + c, b + c, maj(a + b, a + c, b + c)
solver = z3.SolverFor('QF_BV')
some_var = 0x0000
_x = z3.BitVec('x', 16)
x = _x
y = z3.BitVecVal(some_var, 16) …Run Code Online (Sandbox Code Playgroud)