我有以下程序,它将字符串转换为布尔公式 ( string_to_formula),我在其中定义expr_vector b(c)。这段代码有效,但我无法推理context. a 的作用是什么context?有什么方法可以b只定义一次变量吗?为什么我们需要将 发送context给函数?这段代码可以写得更简洁吗?
int main() { try {
context c;
expr form(c);
form = string_to_formula("x1x00xx011",c);
expr form1(c);
form1 = string_to_formula("1100x1x0",c);
solver s(c);
s.add(form && form1);
s.check();
model m = s.get_model();
cout << m << "\n";
}
expr string_to_formula(string str, context& c )
{
expr_vector b(c) ;
for ( unsigned i = 0; i < str.length(); i++)
{ stringstream b_name;
b_name << "b_" << i;
b.push_back(c.bool_const(b_name.str().c_str())); …Run Code Online (Sandbox Code Playgroud) 我有 LLVM 字节码中的描述,我需要作为 Z3 输入传递。如果可以的话,是怎么做到的呢??如果没有的话有什么工具可以做到吗?
我正在研究研究工具的一个组成部分;我有兴趣检索(对于 QF_LRA)
- 多个(最小或其他)UNSAT 核心和
- 多个 SAT 作业
我已经查看了论坛上有关此主题的早期讨论,例如, 如何在逻辑 QF_LRA 上使用 z3 时获得不同的未饱和内核
他们指的是 z3 Python 教程,例如http://rise4fun.com/Z3Py/tutorial/musmss
现在似乎处于离线状态。我已经尝试了 github 等的其他建议来找到提到的教程,但没有运气。
我正在使用 z3 Java API;但很高兴转向替代品。
我注意到Z3 C++(和 C)API 允许您提供要使用的逻辑。
我有两个问题在网上查不到答案:
QF_LRA我的上下文主要是 QF,没有 BV,但其他一切都可能,我正在逐步使用 SMT 求解器,并且我始终可以计算出我将在开始时使用的逻辑。
我注意到有一些 SMT2 基准测试,像(_ bv0 32), (_ bv16 32), ... 这样的符号被使用,例如,在:
QF_FP/schanda/spark/zeros_consistent_2.smt2
但是,这不是在理论声明中提及此类符号:
http://smtlib.cs.uiowa.edu/theories.shtml
对此有何评论?它们的含义是什么?
谢谢 !
是否可以让 Z3 序列化某个断言的证明,并在以后的调用中重放证明而不是再次运行证明搜索?我知道 Z3 可以输出 的反例unsat,但它可以为 的模型提供证明sat吗?
我正在学习 Z3 求解器。我有一个关于数组和相关条件的问题。特别是,我必须创建 Z3py 代码来解决以下 if 条件:
totalAccounts = [ 1, 2, 3, 4, 5 ]
def (myAccounts):
cnt = len(myAccounts)
if (cnt > 10) doSomething()
Run Code Online (Sandbox Code Playgroud)
myAccounts是一个整数列表,是列表的子集totalAccounts。通过的条件cnt > 10取决于列表的长度myAccounts。
我想我需要表示为 Z3 的数组并使用函数myAccounts复制其中的值。totalAccountsStore
MYACCOUNTS = Array ('MYACCOUNTS', IntSort(), IntSort())
I = Int('I')
i = 0
for elem in totalAccounts:
MYACCOUNTS = Store(MYACCOUNTS, i, elem)
i = i + 1
Run Code Online (Sandbox Code Playgroud)
但我不知道如何在创建添加到求解器的条件时表示此类数组的长度:
solver = Solver()
solver.add( ??? > 10 )
Run Code Online (Sandbox Code Playgroud)
我做对了吗?
我正在使用 Z3 源目录中的以下(标准)命令从源代码中使用 OCaml 编译 Z3:
> python scripts/mk_make.py --prefix=$OPAM_SWITCH_PREFIX --ml
然后从build/目录中构建和安装。
然后运行
> utop
和
> #require "z3";;
给了我以下错误:
Cannot load required shared library dllz3ml.
Reason: /home/foobar/.opam/my_opam/lib/stublibs/dllz3ml.so: undefined symbol: Z3_rcf_del.
我对如何调试这些类型的错误感到困惑。是否有任何建议可以确定问题以及如何解决?
我正在使用 TPTP 语法测试一些定理证明器(例如 Z3、Alt-Ergo、Vampire 等)的归纳能力。令我惊讶的是,他们都没有能够证明以下简单的猜想:
tff(t1, type, (fun: $int > $int )).
tff(ax1, axiom, (
! [A: $int] : (
$less(A, 1) => (fun(A) = 123)
)
)).
tff(ax2, axiom, (
! [A: $int] : (
$greatereq(A, 1) => (fun(A) = fun($difference(A, 1)))
)
)).
tff(conj1, conjecture, ! [A: $int] : ($greatereq(A, 1) => (fun(A) = 123))).
% END OF SYSTEM OUTPUT
% RESULT: SOT_EWCr1V - Z3---4.8.9.0 says Timeout - CPU = 60.09 WC = 35.47
% OUTPUT: SOT_EWCr1V - …Run Code Online (Sandbox Code Playgroud) 考虑证明以下 while 循环的正确性,即我想表明,给定循环条件开始时,它最终将终止并导致最终断言为真。
int x = 0;
while(x>=0 && x<10){
x = x + 1;
}
assert x==10;
Run Code Online (Sandbox Code Playgroud)
在不使用循环展开的情况下,用于检查正确性的 SMT-LIB 的正确翻译是什么?