Z3中的简化

结果是: (declare-datatypes () ((SE BROKEN ON OFF))) (declare-const s SE) (declare-const a Int) (simplify (or (= s ON) (= s OFF) (= s BROKEN))) (simplify (and (> a 0) (> a 1))) 是否可以在Z3中简化这些表达式(这些表达式的组合)? 谢谢大家! 简化命令只是一个自下而上的重写器。它速度很快,但无法简化您的帖子中的表达式

Z3 我应该如何定义闭合谓词?

我感兴趣的是证明关于某些假设的陈述的有效性。然而,似乎默认情况下Z3采用“开放”模型。例如,假设我们假设 傅(4) 对于这句话,我想表明,在“foo”中,事情是平衡的。所以我从声明foo开始 (declare-fun foo (Int) Bool) 接下来,因为我对一个假设很感兴趣。我构建了一个含义: (implies (foo 4) (not (exists ((x Int)) (and (foo x) (not (= (mod x 2) 0)))))) 最后,因为我感兴趣的是有效性,而不

Z3中内射函数的定义

我的目标是定义一个内射函数f:Int->Term,其中Term是一种新的排序。参考了内射函数的定义,我写了以下内容: (declare-sort Term) (declare-fun f (Int) Term) (assert (forall ((x Int) (y Int)) (=> (= (f x) (f y)) (= x y)))) (check-sat) 这会导致超时。我怀疑这是因为解算器试图验证Int域中所有值的断言,该域是无限的 我还检查了上述

Z3:是否可以只简化断言的一部分?

我在Windows7上使用的是Z3版本4.3.2 64位的JavaAPI以及Java7 64位,但我不认为必须使用Java来回答这个问题 现在,我正在使用以下Java代码简化Z3中断言的一个子集: Tactic simplifyTactic = ctx.mkTactic("ctx-solver-simplify"); Goal goal = ctx.mkGoal(true, false, false); goal.add(bel.toArray(new BoolExpr[0])); // bel

Z3:使用非线性算法的奇怪行为

我刚刚开始使用Z3(v4.4.0),我想尝试教程中的一个示例: (declare-const a Int) (assert (> (* a a) 3)) (check-sat) (get-model) (echo "Z3 will fail in the next example...") (declare-const b Real) (declare-const c Real) (assert (= (+ (* b b b) (* b c)) 3.0)) (check-sat) 如前

简化表达式:Z3 SMT求解器

使用Z3解算器执行以下查询: (declare-const c0 Int) (declare-const c1 Int) (declare-const c2 Int) (assert (exists ((c0_s Int) (c1_s Int) (c2_s Int)) (and (= (+ c0 c1 c2) 5) (>= c0 0) (>= c1 1) (>= c2 1) (= c0_s c0)

z3py在`Int(';x';上引发异常`

在python中,在导入z3之后,我做了x=Int('x')。这给了我回溯 In [16]: x = Int('x') --------------------------------------------------------------------------- ArgumentError Traceback (most recent call last) <ipython-input-16-adbc8f7df7ed>

Z3(API)中解算器的设置逻辑 < >我注意到C++(和C)API允许你提供所使用的逻辑。

关于这一点,我有两个问题在网上无法回答: 这些应该是标准吗,即QF_LRA 这些信息何时值得提供,即Z3何时实际使用这些信息 我的环境主要是QF no BV,但其他一切可能的情况都是如此,我正在逐步使用SMT解算器,并且我总能在开始时确定我将使用什么逻辑。试试看 通常情况下,这确实会带来很大的不同。设置逻辑意味着解算器将使用专门的策略来解算公式,而不是通过通用循环。Z3还将尝试猜测逻辑,但通常最好只是预先提供它。Z3还将尝试找出逻辑是什么(使用默认选项运行时),但它没有针对所有理论组合的自定义策

Z3的运行时间分析

我使用的是通过python实现的Z3 SMT解算器。我有源代码,我想有一些,任何,进程正在运行的迹象。是否可以使用一些详细的命令或任何东西来了解进程当前正在做什么?我知道它背后的算法,但我想可视化,即使使用printf,代码中发生了什么 谢谢 您可以使用: set_option(verbose=10) 获取标准错误的详细输出 解算器完成后,可以使用 statistics() 方法 在调试模式下,您可以使用 enable_trace("arith") 获取

Z3获取最后一个有效模型 我使用Z3C++ API找到一个满足一些布尔变量(我们称之为B0,…,BN)为最小的可满足公式。p>

我有一个包含布尔变量b0,…,bn的公式,我想找到一个可满足的公式,其中b0,…,bn的最小值设置为true 我首先找到b0,…,bn的子集,该子集可以指定为true并满足我的公式,然后我递增地要求解算器找到更小的子集(即其中一个布尔变量翻转为false) 当我找不到更小的子集时,我找到了我的局部最小值,即,我从Z3得到了一个未统计的结果。此时,我想访问最后一个有效的模型 可能吗?当调用“check”时,Z3是否修改模型? 如果是这样,我怎么能使用C++ API? 非常感谢,如果解算器返回“sa

z3数据日志中表示最优性的否定

我将Z3与:fixedpoint.engine设置为datalog。 我有一个枚举过滤器关系(f pos min max)。假设我们有(f#x10#x100000#x200000),(f#x20#x150000#x200000)和(f#x20#x30000#x500000) 对于给定的x,我搜索最大的pos,这样(f pos min max)和minZ3的默认数据日志表都超过了具体的值,因此如果使用大位向量,Z3可能最终会创建巨大的表。 您可以尝试一种更简单的表数据结构,它支持更少的操作,但它是

为什么z3中的以下表达式需要很长时间?

这个z3表达式有什么问题 (declare-const arg_1 Int) (assert (and (not (= 0 (mod arg_1 10))) (= 0 (mod (+ 1 arg_1) 10)))) (check-sat) (get-model) 试图用z3评估它永远挂起。另一方面,如果我尝试下面的任何一种方法,它会立即返回 (declare-const arg_1 Int) (declare-const arg_2 Int) (assert (= 0

为什么z3 horn解算器结果未知,为什么这是未知原因

我正在使用z3进行等价性检查。我尝试使用z3 horn solver来加快z3求解时间,但遇到以下问题: 我想检查两个程序是否相同。两个程序的逻辑是 P1:a2=a1+2,其中a1为输入,a2为输出 P2:b2=b1+2,其中b1为输入,b2为输出 a1、a2、b1、b2的类型是位向量64。 公式是,对于所有(a1,b1),(a1==b1)和(a2==a1+2)和(b2==b1+2)=>(a2==b2) 如果使用bv解算器,结果是sat。但是,如果使用horn解算器,解算结果是未知的,原因是 u

如何将Z3Py代码转换为C#代码(Z3,SAT)

以前我写过一些Z3Py代码,现在我想把它们转换成C#.NetCore。我检查了许多示例,但我有一些问题:-) 我定义了一个名为MyFun的函数,它接受参数并基于值返回变量。简单的例子: H0 = BitVec('H0', 8) H1 = BitVec('H1', 8) H2 = BitVec('H2', 8) H3 = BitVec('H3', 8) I1 = BitVec('I1', 8) T1 = BitVec('T1', 8) def MyFun(N): return z3.If(N

Can';t使用Z3生成模型

我在一个名为“knapsack.smt2”的文件中有关于背包问题的以下示例代码,我相信它是smt2格式的,我有最新版本的Z3: (declare-const s1 Int) (declare-const o1 Int) (declare-const b1 Bool) (declare-const s2 Int) (declare-const o2 Int) (declare-const b2 Bool) (declare-const s3 Int) (declare-const o3 Int

Z3 数组和量词

我试图在Z3中使用数组和量词来查找给定文本中的子字符串 我的代码如下: (declare-const a (Array Int Int)) (declare-const x Int) ;; a|A (assert (or (= (select a 0) 61) (= (select a 0) 41))) ;; b|B (assert (or (= (select a 1) 62) (= (select a 1) 42))) ;; c|C (assert (or (= (select a 2)

Z3 约束规划网状网络

我有一个网状网络,如图所示。 现在,我正在为sat网络中的所有边分配值。我想在我的计划中提出,在我的分配中没有闭环。例如,最左上角正方形的约束可以写为- E0=0或E3=0或E4=0或E7=0,因此任何一条链路都必须处于非活动状态才能不形成环路。然而,在这种网络中,有许多可能的环路 例如,由边构成的环-E0、E3、E7、E11、E15、E12、E5、E1 现在我的问题是,我必须描述在这个网络中可能出现的每个可能的循环组合。我试图在一个可能的公式中编写约束条件,但未能成功 如果有一种可能的方式来编

Z3 我可以从Pex获得SMT 2格式的路径条件吗?

我使用z3_logdir和z3_loglevel环境变量使Pex以*.z3文件格式记录路径条件。 有没有办法强制pex以SMT 2格式导出路径条件? 或者将.Z3文件格式转换为SMT 2?Pex随Z3:Microsoft.Z3.DLL的DLL一起提供。 这对应于Z3版本2.5(可从下载)。 Z3v2.5中的API包含解析支持 将Z3文件转换为内部格式,并且有API函数用于将这些文件转储到SMT-LIB(1)。 新版本的Z3和其他工具用于将SMT-LIB1基准转换为SMT-LIB2

z3中的DPLL(T)型SMT求解是否记录了线性实数运算?

我正试图设计一些方法来改善z3在我的问题上的性能。我知道CAV'06和。z3 v4.3.1的相关部分是否与这些文件中描述的内容不同,如果不同,在哪些方面不同?此外,在z3中,默认情况下,决定何时检查线性实数运算的一致性的策略是什么?对应于已确定(和传播)的命题文字的理论原子的一致性?线性运算在src/smt/theory\u arith*的文件中实现。 看 关于您指出的文件,在实施过程中使用了这些想法。然而,实际的代码包含了对线性整数、非线性算法和证明生成的许多扩展。如果你只关心线性实数算术,你

z3中的独占数据类型(后续)

我在z3中声明了一个独占数据类型,以及一个常量和一个小断言: (declare-datatypes () ((IntOrBool (bpart (b Bool)) (ipart (i Int))))) (declare-fun iob () (IntOrBool)) (assert (= true (b iob))) 我得到了预期的结果(bpart true),但是 (assert (= 1 (i iob))) z3报告(bpart false)。 z3是否忽略了我给出的断言?如果他

多线程Z3?

我正在从事一个Python项目,目前我正试图以一些可怕的方式加快速度:我设置我的Z3解算器,然后我分叉这个过程,让Z3在子进程中执行解算,并将模型的可pickle表示形式传递回父进程 这非常有效,代表了我尝试做的第一个阶段:父进程现在不再受CPU限制。下一步是对父线程进行多线程处理,以便我们可以并行求解多个Z3解算器 我很确定我已经在安装阶段屏蔽了Z3的所有并发访问,并且每次只有一个线程接触Z3。然而,尽管如此,我在libz3.so中得到了随机的segfaults。重要的是要注意,在这一点上,接

Z3 如何获取添加到解算器中任何约束的所有变量?

我正在使用Z3py,并试图获得解算器中任何约束中的所有变量集。我可以调用Solver.assertions()来获取ASTVector,然后循环该向量并获取类型为BoolRef的对象,例如,但是我被卡住了。我如何递归地迭代断言,例如BoolRef实例,以获得单个变量?谢谢Taylor的回答。我认为第二个链接解决了这个问题。 更详细地说,Leo在前面的回答中添加的python脚本遍历AST,AstMap确保共享子表达式只遍历一次。变量/声明集存在于解算器内部,尽管我上次检查了,但在C/C++API

造型";交换数组中的两个元素会产生置换;在Z3中

我想在Z3中建模,在一个数组中交换两个元素会创建一个置换 交换两个元素可以非常自然地建模: (declare-sort Obj) ; a0 is original array, a2 is array after swap (declare-const a0 (Array Int Obj)) (declare-const a1 (Array Int Obj)) (declare-const a2 (Array Int Obj)) (declare-const i Int) (declare-co

Z3 是否有不可解释函数的理论(同余分析)?

我有一组符号变量: int a, b, c, d, e; 受许多公理约束的一组未知函数: f1(a, b) = f2(c, b) f1(d, e) = f1(e, d) f3(b, c, e) = f1(b, e) c = f1(a, b) b = d 此处函数f1、f2、f3未知,但已修复。因此,它不是一个关于未解释函数的理论 我想证明以下断言的有效性: c = f2(f1(a, b), b) f3(d, f2(c, b), e) = f1(e, b) 使用基于上述公理等式的替换 对于这

Z3实数和十进制值的精度

Z3中实数变量的通常精度是多少?是否使用精确算法 有没有办法手动设置精度级别 如果Real意味着必须使用精确的算术运算,那么是否有其他精度有限的浮点值数据类型 最后:从这个角度来看,z3与其他流行的SMT解决方案不同,还是在SMT-LIB定义中标准化了 关于打印精度,请参见以下内容: 简言之,是的,它们被精确地表示为多项式的根。不是每个实数都可以用real类型(超越数、e、pi等)表示;但所有多项式根都是可表示的 讨论如何处理超验的问题 非常感谢Levent!那么默认情况下,z3总是试图找到精确

z3中的部分解释常数

在z3中,可以声明一个完全未解释的常量,如下所示: (declare-const x Int) 类似地,可以这样定义一个完整的解释: (define-fun y () Int 3) ; y == 3 给定代数数据类型,可以使用完全解释的元组,如下所示: (declare-datatypes () ((Item (mk-item (size Int) (weight Int))))) (define-fun z () Item (mk-item 3 4)) ; z == Item(size=3

Z3的Prove()方法?

Z3有一个prove()方法,可以证明两个公式的等价性 但是,我找不到此prove()方法的技术文档。prove()在幕后使用的“等价性”的定义是什么?这是“部分等价”(在“回归验证”论文中提出)还是更强大的东西 需要提醒的是,“部分等价”保证了两个公式是等价的,如果给定相同的输入,它们会产生相同的输出。在“回归验证”中,我们检查程序的较新版本是否会产生与较早版本相同的输出。也就是说,它是一种检查程序等价性的方法。 在这种方法中,使用了定理证明器(SMT解算器),如Z3。也就是说,我们不应该混淆

如何使用Z3 SMT-LIB证明群D3的定理

D3组的产品表如下: 使用以下Z3 SMT-LIB代码可以获得表示: (set-option :mbqi true) (declare-sort S) (declare-fun f (S S) S) (declare-fun g (S) S) (declare-const E S) (declare-const R1 S) (declare-const R2 S) (declare-const R3 S) (declare-const R4 S) (declare-const R5 S) (a

在z3中,哪些技术用于处理非线性整数实问题?

以下是非线性整数实数片段中a的z3统计信息(我的许多问题与此类似): 由于问题是非线性的,我相信单纯形技术并没有直接用于解决这个问题(尽管我在输出中看到了一些类似单纯形的统计数据)。根据回答,我了解到整数存在时的非线性实数技术基于Grobner基,相关函数在理论算术*中。是否有一篇论文/一些文档可以让我找到关于在z3中为这个片段实现的技术的具体信息 此外,尽管问题本身是非线性的,但非线性的唯一发生涉及两个变量的乘法(并且有一些这样的表达式),其中一个变量只能取二的幂,并由一些简单约束约束约束/定

Z3 有没有办法从SMT表达式中获取系数值?

我想知道是否有一些SMT命令可以获得与表达式相关联的系数值,如下所示 (assert (>= (+ x (* (/ -1 2) y)) 0.0)) 所以得到值1和-0.5 谢谢您的提示。SMT-LIB2命令语言通常具有任何编程功能。 Z3公开了一个python API,使您能够以可读的方式编写公式。 此外,还可以使用python和API编写遍历表达式的函数。 上有一个Python API的在线版本 还有一个相关教程介绍了该界面的主要功能

Z3 线性算术证明中Skolem函数的引入

给定以下SMT2脚本: (set-option :produce-proofs true) (set-logic AUFLIRA) (declare-sort Complex$ 0) (declare-fun r$ () Real) (declare-fun s$ () Complex$) (declare-fun re$ (Complex$) Real) (declare-fun norm$ (Complex$) Real) (assert (! (not (=> (and (foral

Z3:消除don';不关心变量

我有一个test.smt2文件: (set-logic QF_IDL) (declare-const a Int) (declare-const b Int) (declare-const c Int) (assert (or (< a 2) (< b 2 )) ) (check-sat) (get-model) (exit) 谢谢大家! 在对所提到问题的回答中给出的例子有点过时。一个Solver()将选择一个合适的策略来解决问题,现在看来它选择了一个不同的策略。我们仍然可以通过使

Z3 WhyML映射到SMT逻辑的精确机制

你好,自动扣除和验证黑客 为了更深入地理解WhyML是如何为ACSL注释的C程序提供证明的,我试图手动“复制”Why3对WhyML程序所做的工作,同时将其翻译成SMT逻辑并输入Z3验证程序 假设我们有以下C片段: const int L = 3; int a[L] = {0}; int i = 0; while (i < L) { a[i] = i; i++; } assert (a[1] == 1); const int L=3; int a[L]={0}; int i=0;

Z3 发出多个(检查sat)调用,直到返回unsat

z3版本4.6的发行说明中提到了一个新特性“发出多个(检查sat)调用,直到返回unsat”。 这是否等同于ALLSAT? 在哪里可以找到此功能的其他文档或示例?否,这是为了解决此问题: z3不支持ALLSAT命令;尽管使用“断言前一个模型的否定并重新检查”循环很容易对其进行编码。大多数高级接口在SMT-Lib2的基础上提供这一层。如果您确实希望获得支持,那么最好首先说服SMTLib人员(),以便开发一种标准的方法,并由多个解算器实现。是的,这是关于优化调用的。它与AllSAT无关。ALL-SA

如何使用z3位向量或Int作为数组索引?

我想使用Int向量作为数组索引 蟒蛇 array = [12,45,66,34] s= Solver() x = Int('x') s.add(array[x] == 66) 所以x应该是2 我该怎么做呢?这里有一种方法: from z3 import * s = Solver () array = [12, 45, 66, 34] A = Array ('A', IntSort(), IntSort()) i = 0 for elem in array: A = Store(A,

使用数据日志输入格式在Z3中的BitVec中计算1

是否有一种使用数据日志输入格式计算Z3中BitVec中设置为1的位数的紧凑方法 $ z3 -h # most of the lines below omited for clarity Input format: -dl use parser for Datalog input format. 对于这个问题,目前公认的答案是:在SMT 2输入格式中没有很好的方法 对于这个问题,目前公认的答案是:显示如何在Python中执行此操作。对于32位向量,您可以尝试将以下伪代码转换

Z3返回的模型不可用

如果可能的话,我想对我的代码发表第二个意见 这一问题的制约因素有: a、b、c、d、e、f是非零整数 s1=[a,b,c]和s2=[d,e,f]是集合 i,j=0..2的和s1_i+s2_j必须是一个完美的平方 我不明白为什么,但我的代码返回的模型不可用。此外,在注释以下行时: (assert (and (> sqrtx4 1) (= x4 (* sqrtx4 sqrtx4)))) (assert (and (> sqrtx5 1) (= x5 (* sqrtx5 sqrtx5)

为Z3'设置超时;s ctx解算器简化策略

我是Z3的新手。这是我的代码: void timeout_c_api() { Z3_config cfg; cfg = Z3_mk_config(); Z3_set_param_value(cfg, "model", "true"); Z3_set_param_value(cfg, "timeout", "1"); Z3_global_param_set("timeout","1"); Z3_context ctx; ctx = Z3

如何将这些附加约束添加到我的零售产品/购物Z3规范中?

所以我创建了一个基本的Z3规范来指导我购买一些特定的零售产品。到目前为止,它所能做的只是在不超过我可用资金的情况下任意告诉我该买什么: (declare-datatypes () ((Retailer FooMart BazTrading))) (declare-datatypes () ((Cartridge .223Rem .7.62x39mm))) (declare-datatypes () ((Casing Brass Steel))) (declare-datatypes () ((O

Z3 不可满足模型的性能问题

我正在使用Z3构建一个有界模型检查器。在尝试实现完整性测试时,我遇到了一个奇怪的性能问题。完整性测试必须确保每个路径最多包含一次每个状态的所有状态。如果仍然存在满足此属性的路径,那么Z3的回答很快,但是在考虑了所有路径的情况下,Z3的速度似乎是指数级的慢 我已将测试用例缩减为以下内容: ; Set the problem size (length of path) (define-fun sz () Int 5) ; Used to define valid states (define-fu

Z3 C API在运行时更改超时

是否可以使用C API在运行时更改解算器的超时值? 为了设置超时,可以执行以下操作- Z3_config cfg = Z3_mk_config(); Z3_set_param_value(cfg, "SOFT_TIMEOUT", "10000") // set timeout to 10 seconds Z3_context ctx = Z3_mk_context(cfg); .... Z3_check_and_get_model(ctx); .... .... Z3_check_and_ge

在Z3中使用量词消除时出现SEGFULT

我在MacOS X 10.8下使用Z3 4.3.1(来自主分支)。 我在以下示例中遇到了分段错误: (declare-const a Int) (declare-const b Int) (assert (exists ((k Int)) (and (= (- (* 2 k) a) 0) (= (- (* 2 k) b) 0) ) ) ) (check-sat-using qe) 你知道怎么解决这个问题吗 以下功能在Windows XP+Z3

检索z3py中提取节点的边界

我用的是z3py。我的问题是,如何检索Extract节点的边界?我以为Extract将是一个具有arity 3的函数,但它不是: >>> x = BitVecVal(3, 32) >>> e = Extract(15, 0, x) >>> e.decl() Extract >>> e.decl().arity() 1 >>> e2 = Extract(7, 0, x) >>> e2.dec

z3是否通过名称区分变量?

假设我们有以下代码: context c; solver s(c); expr x=c.bool_const("a"); expr y=c.bool_const("a"); expr z=c.bool_const("b"); s.add(x&&!y); std::cout<<s.check(); s.reset(); s.add(x&&!z); std::cout<<s.check(); 函数“test1”和“test2”的剂量“操纵同一

Z3中未解释的数据类型

我想在Z3中创建一个不奇怪的数据类型,我们称之为“A”。根据z3文件,我可以使用“DeclareSort”声明如下: A = DeclareSort('A') a, b = Consts('a b', A) s = Solver() s.add(a != b) s.check() 但是,我看到一些人在使用以下工具: A = Datatype('Event') A.declare('A0') A = A.create() a, b = Consts('a b', A) 我的问题是,这两者之

在Z3中创建传递函数而非自反函数

我试图在Z3中创建一个传递函数,但不是自反函数。也就是说,如果(及物性ab)和(及物性bc)保持不变,则(及物性ac)应该保持不变,但(及物性aa)不应该保持不变 我试着用下面的方法做,有5个“测试”。第一个实现了我所期望的,但第二个失败并导致unknown (declare-datatypes () ((T T1 T2 T3))) (declare-fun f (T T) Bool) (assert(f T1 T2)) (assert(f T2 T3)) ; Make sure that

z3运行时:直接调用常量与作为参数传递

我在z3中遇到了一些不寻常的运行时行为,我想问一下为什么会发生这种情况: 例1: (set-info :smt-lib-version 2.6) (set-info :status unknown) (define-sort FPN () (Float32)) (declare-const a1 FPN) (assert (fp.eq a1 ((_ to_fp 8 24) RNE 1))) (declare-const a2 FPN) (assert (fp.eq a2 ((_ to_fp

  1    2   3   4   5   6  ... 下一页 最后一页 共 19 页