草庐IT

java - 关于实数的推理

我正在尝试将OpenJML与Z3结合使用,我正在尝试推理double或float值:classTest{//@requiresb>0;voida(doubleb){}voidb(){a(2.4);}}我已经发现OpenJML使用AUFLIA作为默认逻辑,它不支持reals。我现在正在使用AUFNIRA。很遗憾,该工具无法证明这个类:→java-jaropenjml.jar-esc-proverz3_4_3-exec./z3Test.java-noInternalSpecs-logicAUFNIRATest.java:8:warning:Theprovercannotestablisha

c++ - 建议具有良好 C++ 接口(interface)的高效 SAT 求解器(或 : is Z3 good for me)?

对于我要开始的项目,我需要使用SAT求解器。我以前使用过其中一些,但主要用于实验,而这里项目的主要限制是良好的性能。我正在尝试寻找替代方案,并试图了解每个替代方案如何根据我的具体要求进行定位。特别是:我需要提取令人满意的赋值,而不仅仅是检查可满足性,求解器应该允许我重复求解相同的公式以寻找不同的可能令人满意的赋值,最终迭代所有这些赋值,在一个高效的方式(例如,我不必添加一个子句并重新开始)。该项目应该仍在积极维护并且具有相当的生产质量,而不是自发布以来放弃的一些获奖研究项目(参见picosat)。此外,由于我使用的是C++,求解器应该提供一个高效且(可能)编写良好的C++接口(inte

c++ - 将 Z3 整数表达式转换为 C/C++ int

我是Z3的新手,在这里和在Google上搜索了我的问题的答案。不幸的是,我没有成功。我正在使用Z34.0C/C++API。我声明了一个未定义的函数d:(IntInt)Int,添加了一些断言,并计算了一个模型。到目前为止,一切正常。现在,我想提取模型定义的函数d的某些值,比如d(0,0)。以下语句有效,但返回一个表达式而不是函数值,即d(0,0)的整数。z3::exprargs[]={c.int_val(0),c.int_val(0)};z3::exprresult=m.eval(d(2,args));支票result.is_int();返回真。我(希望不要太愚蠢)的问题是如何将返回的表

python - python package namespaces : z3c, zc, collective 背后是什么?

所以它们都以某种方式与zope相关。问题是如何?我不熟悉Zope。我猜zc、z3c代表ZopeComponent和Zope3Component但我想确定一下。还有一个collective命名空间。它下面有什么样的包裹?还有哪些其他众所周知的python包命名空间?当包应该使用zc、z3c和其他命名空间时,是否有任何约定?有时我看到包以zc开头,但我无法理解为什么它们要命名空间。例如z3c.sqlalchemy有命名空间,因为它是用于zope项目的sqlalchemy的包装器。但是另一个例子zc.buildout看起来像是一个完全独立的项目。它获得命名空间仅仅是因为它是由在Zope上工作

python - z3python : converting string to expression

鉴于x,y,z=Ints('xyz')和像s='x+y+2*z=5'这样的字符串,有没有一种快速的方法可以将s转换为z3表达式?如果不可能,那么我似乎必须做很多字符串操作才能进行转换。 最佳答案 您可以使用Pythoneval函数。这是一个例子:fromz3import*x,y,z=Ints('xyz')s='x+y+2*z==5'F=eval(s)solve(F)此脚本在我的机器上显示[y=0,z=0,x=5]。很遗憾,我们无法在http://rise4fun.com/z3py处执行此脚本.rise4fun网站拒绝包含eval的P

python - Z3/Python 从模型中获取 python 值

如何从Z3模型中获取真实的Python值?例如p=Bool('p')x=Real('x')s=Solver()s.add(Or(x10),Or(p,x**2==2),Not(p))s.check()prints.model()[x]prints.model()[p]打印-1.4142135623?False但那些是Z3对象而不是pythonfloat/bool对象。我知道我可以使用is_true/is_false检查bool值,但是我怎样才能优雅地将ints/reals/...转换回可用值(不去通过字符串并删除这个额外的?符号,例如)。 最佳答案

python - (Z3Py) 检查方程的所有解

在Z3Py中,如何检查给定约束的方程是否只有一个解?如果有多个解决方案,我该如何列举它们? 最佳答案 您可以通过添加一个新的约束来阻止Z3返回的模型来做到这一点。例如,假设在Z3返回的模型中我们有x=0和y=1。然后,我们可以通过添加约束Or(x!=0,y!=1)来阻止此模型。以下脚本可以解决问题。您可以在线试用:http://rise4fun.com/Z3Py/4blB请注意,以下脚本有一些限制。输入公式不能包含未解释的函数、数组或未解释的排序。fromz3import*#Returnthefirst"M"modelsofform
12