我想找出一个最大的区间,在这个区间内,表达式e对于所有的x都为真。编写这样一个公式的方法应该是:Exists d : ForAll x in (-d,d) . e and ForAll x not in (-d,d) . !e。要获得这样的d,Z3中的公式f (查看上面的公式)可能如下所示:delta = Real('d')
e =另外:通过指定delta
我正在使用CNF4.0中的以下代码片段将公式转换为z3。,也就是说,所有这些表达式都应该连接在一起,以产生实际的公式。显然,原始公式和编码后的公式不等价,因为编码后的公式包含执行Tseitin编码的新变量k!0, k!1, ...。然而,我期望它们是可均衡化的,或者实际上它们是由相同的模型满足的(当忽略k!也就是说,我认为(encoded formula) AND (NOT original formula)是无法满足的</e
当我使用Z3 C++ API构建一组特定的约束时,我会得到“未知”作为响应。但是,如果我使用z3::solver ()序列化operator<<对象并将输出传递给z3二进制文件,它将产生"unsat“。有趣的是,如果我使用z3::solver::to_smt2()而不是operator<<(),那么Z3二进制文件就会输出“Uniting”。
为什么会发生这种事?如何让Z3使用C++
我用Python语言从输入文件中读取z3表达式。然后,在稍后的代码中,我对它们调用__deepcopy__()。问题是,有时输入的z3表达式是True或False,然后Python会感到困惑,认为它们是bool,并拒绝调用__deepcopy__()。错误消息是 AttributeError: 'bool' object has no attribute '__deepcopy__' 在这种情况下,我如何区分bool和z3表达式?