z3相关内容

将循环语义转换为 SMT-LIB

是否有将命令式语言(例如 C 或 Java)中的 for 循环语义转换为 SMT-LIB 的标准方法?我正在考虑将它们定义为 SMT-LIB 公理,但它似乎是临时的,而且我知道解算器并不总是可以确定翻译,比如 z3. 解决方案 经典的“技巧"是在边界内展开循环.这个想法源于硬件社区,在那里有界证明更为常见.但它也适用于软件.CBMC (https://www.cprover.org/cbm ..
发布时间:2021-10-04 20:41:15 其他开发

Z3py:将值添加到计算结果并进行另一次检查

我想用 Z3 解决下面的例子: 输入 = 0如果输入5:返回真别的:返回错误 如何将这个逻辑转换为 Z3?这是我目前所拥有的. input = Int(“输入")v1 = Int(“v1")求解器 = 求解器()solver.add(v1 == 5)solver.add(输入 如何将 5 添加到输入中,并将多个输入添加到 5,以便稍后检查它是否大于 5? 解决方案 建模此类命令式程 ..
发布时间:2021-10-04 20:41:13 其他开发

是否可以证明这个定义的函数是 z3 的对合?

我试图了解如何定义断言,以证明已定义函数的某些数学特性.如 this post SMT 求解器不太适合用于证明数学质量的归纳法. 在我的例子中,我有一个 identity function f(x) = x 的递归函数定义(只是一个简单的例子): (define-fun-rec identity-rec((l String)) String(ite (= 0 (str.len l))“"( ..
发布时间:2021-10-04 20:41:10 其他开发

使用 MAXSMT 进行增量学习

我们能否在 z3 中以增量方式使用 MaxSMT 求解器(优化)的先前解决方案?另外,有没有办法打印出优化器上的软断言? 解决方案 如果您问技术上是否可以运行任一,答案是YESz3 或 OptiMathSAT 增量 与 MaxSMT 问题.(使用 API). 具有相同id 的所有软子句--在执行check-sat--的那一刻被认为是一部分相同的 MaxSMT 目标.本质上,OMT 求 ..
发布时间:2021-10-04 20:41:07 其他开发

Z3:定义类层次结构的更方便和有效的方法是什么?

作为之前与 Z3 相关的问题的扩展 使用分辨率定理证明 Z3 并建立在 @alias 之上在 https://stackoverflow.com/a/62721185/13861050 上的回答 我添加了更多函数和关系: FEMALE = Function('FEMALE', Thing, BoolSort())动物 = 函数('动物',东西,布尔排序())LIVING_THING = Fu ..
发布时间:2021-10-04 20:41:01 C/C++开发

是否可以在 z3(使用 SMT-LIB2 接口)中定义一个具有全量化断言的函数?

我的目标是定义一个函数,它接受一个输入整数序列并输出一个相同长度的整数序列,但只包含输入的第一个元素序列.例如(在伪代码中): f([7,5,6]) = [7,7,7] 为此,我在 z3 中声明了一个函数: (declare-fun f ((Seq Int)) (Seq Int)) 并尝试通过断言强制预期行为: (断言(forall ((arr (Seq Int)))(和(=(seq.l ..
发布时间:2021-10-04 20:40:58 其他开发

z3 - 意外输出/不确定输出意味着什么

我问了一个问题并得到了一个具体答案.但是,我不得不扩展这个答案以处理大量数据(下面的代码).但是,这样做时,我得到了一个我不明白的输出. 有时,我得到一个unsat,有时我得到一个sat s.check();有时 s.check() 和 s.model() 需要很长时间才能运行,而其他时间则是几秒钟.但是,我不明白的是当我得到这样的输出时: [else ->或(变量(0)== 7,变量(0 ..
发布时间:2021-10-04 20:40:56 Python

Z3检查python字符串可满足性

有没有办法检查像'p或p这样的python字符串的可满足性->如果您事先不知道变量名称,则 Z3 中的 p' ?例如我见过这个: p = Bool('p')解决(暗示(或(p,p),p)) 但是我无法提前定义 Z3 中的变量,因为该命题是作为字符串提供给我的.我怎样才能用 z3 做到这一点? 我也看过 python 的 eval 函数,但似乎我也需要在之前的 z3 中定义变量名 解 ..
发布时间:2021-10-04 20:40:53 Python

如何在 Z3py 中建模

我一共有七个(A, B, C, D, E, r, c) Z3个布尔变量,其中A, B, C, D, E代表从一个点开始的边,用黑点表示如下图1. 剩下的两个变量,即r和c是黑点点的变量,其值取决于边缘值如下: 变量‘r’的条件:情况 1:如果 A 为真,则只有来自 C 或 D 的一个变量可以为真情况 2:同样,如果 B 为真,则只有变量 C 或 D 为真.只有在情况 1 或情况 2 之 ..
发布时间:2021-10-04 20:40:50 Python

Z3 证明中的命名断言

是否可以在 Z3(版本 4.8.9)证明中获取断言名称?作为一个最小的例子: (set-option :produce-proofs true)(断言(!假:命名名称))(检查周六)(得到证明) 我想要以下输出: unsat((证明(声称的名称))) 然而,这是实际输出: unsat((证明(断言为假))) 是否可以参考断言名称而不是实际公式来证明? 通过实验,我发现可以添加(s ..
发布时间:2021-10-04 20:40:47 其他开发

Z3python异或总和?

我目前正在尝试使用 z3python 求解一些方程,但遇到了我无法处理的情况. 我需要对某些 ​​BitVecs 与特定的非 ascii 字符值进行异或,并将它们相加以检查校验和.这是一个例子: pbInput = [BitVec("{}".format(i), 8) for i in range(KEY_LEN)]密码 = "\xff\xff\xde\x8e\xae"solver.add ..
发布时间:2021-10-04 20:40:44 Python

Z3 字符串/字符异或?

我正在 Python 中使用 Z3,并试图弄清楚如何进行字符串操作.通常,我将 z3.String 作为对象进行了尝试,执行了诸如 str1 + str2 == 'hello world' 之类的操作.但是,我一直无法完成以下行为: solver.add(str1[1] ^ str1[2] == 12) # -- 或 --solver.add(str1[1] ^ str1[2] == str2[ ..
发布时间:2021-10-04 20:40:41 Python

Z3Py 中的替换

似乎Z3Py中的substitute(f,t)函数在进行替换之前先对f进行了简化.有没有办法禁止这种情况? 我希望发生以下行为: f = And(x,Not(x))结果 = 替代(f,*[(Not(x),BoolVal(True))]) #sub Not(x) =>真的#如果我们先简化 f 则 result = False,但如果我们先进行替换则 result = x 解决方案 不幸的 ..
发布时间:2021-10-04 20:40:38 Python

Z3 可以调用外部定义的函数吗?

我正在使用 Z3opt.我的大部分模型都可以用标准 SMTLIB 表示,但其中一部分需要用通用编程语言来实现,其中包含字符串处理、关联数组等结构. 是否可以在 Z3 模型中使用外部定义的函数?我知道这会降低求解器的性能,但这只是模型的一小部分. -- 编辑澄清-- 我希望提供约束的实现(作为函数指针或等效函数),以支持 Z3 不支持的函数(例如触发函数).当使用像这样的黑盒约束时 ..
发布时间:2021-10-04 20:40:35 其他开发

获取 SMT 公式的较小模型

假设我有一些可以设置的公式,但我想获得更小(或更大)的可能值,因此请设置该公式. 有没有办法告诉 SMT 求解器给出那种小的解决方案? 示例: a+1>10 在那个例子中,我希望 SMT 求解器给我解决方案 10 而不是 100. 干杯 注意:我刚刚看到一个类似的问题z3 作者说,三年前,他们正在 z3 中实现该功能.你知道它是否已经实施了吗? 解决方案 ..
发布时间:2021-10-04 20:40:33 其他开发

SMT:检查功能的唯一性和整体性

Give 是一个函数及其行为的描述: add: (ℤ ∪ {Error, None})² → (ℤ ∪ {Error, None})对于 x ∈ (ℤ ∪ {Error, None}):添加(x,无)=添加(无,x)=无对于 x ∈ (ℤ ∪ {Error}):添加(x,错误)=添加(错误,x)=错误对于 x, y ∈ ℤ:添加(x,y)= x + y 如何将此描述转换为 SMT(我使用的是 ..
发布时间:2021-10-04 20:40:30 其他开发

QF_NRA 中是否包含除以零?

QF_NRA 中是否包含除以零? SMT-LIB 标准在这方面令人困惑.定义标准的论文根本没有讨论这一点,事实上 NRA和 QF_NRA 没有出现在该文档的任何地方.标准网站上提供了一些信息.实数定义为包括: - 形式为 (/m n) 或 (/(- m) n) 的所有术语,其中- m 是 0 以外的数字,- n 是 0 和 1 以外的数字,- 作为整数,m 和 n 除了 1 没有公因数. ..
发布时间:2021-10-04 20:40:27 其他开发

Z3:可以总结一个BitVec和一个Real吗?

我正在使用 Z3py 尝试对舍入误差问题进行一些实验,结果证明我必须总结一个 BitVec 和一个 Real.但是,当我尝试这样做时,出现“排序不匹配"错误.这是我的代码: x = BitVecVal(8, 6)y = Real('y')解决(y + x == 5) 有没有办法将 BitVec 和 Real 相加?还是只是为了获取 BitVec 的 Int 值? 解决方案 基于 Z3 ..
发布时间:2021-10-04 20:40:21 其他开发