标签: z3

Z3 带有字符串表达式

我正在尝试使用 Z3 来确定表达式是否可满足。我可以通过定义上下文然后定义 int_const 变量和公式来轻松地做到这一点。要以编程方式计算表达式,您必须用代码编写所有内容。假设逻辑表达式以字符串的形式给出,那么呢?例如,

“x == y &&!x == z”

在 C API 中将表示为:

context c;
expr x = c.int_const("x")
//Same for other variables
...
formula = (x == y) && (!x == z);
solver s(c);
s.add(formula);
//s.check() ...etc etc
Run Code Online (Sandbox Code Playgroud)

好的,我可以为这个特定的公式编写代码,但是如何在给定字符串的情况下以编程方式执行此操作。我对你能想到的任何事情都持开放态度。

谢谢 :)

string z3

3
推荐指数
1
解决办法
4683
查看次数

Z3模式和注入性

在Z3教程的第13.2.3节中,有一个很好的例子,说明如何减少在处理注入的公理化时必须实例化的模式数量.在该示例中,必须以单数形式表示的函数f将类型A的对象作为输入并返回类型B的对象.据我所知,排序A和B是分离的.

我有一个SMT问题(FOL + EUF)Z3似乎没有终止,我试图找出原因.我有一个函数f:A-> A我认为是单射的.问题可能是f的域和codomain重合吗?

提前感谢任何建议.

smt z3

3
推荐指数
1
解决办法
568
查看次数

Z3:将Z3py表达式从Solver对象转换为SMT-LIB2

这个问题非常类似于:Z3:将Z3py表达式转换为SMT-LIB2?

是否可以从Solver对象生成SMT-LIB2输出?

z3

3
推荐指数
1
解决办法
855
查看次数

当我输入正确时,为什么 Z3 说这个方程是不可满足的?

给定一个简单的移位和异或运算,其中“输入”是符号:

input    = BitVec('input',32)
feedback = 0x8049d30
shiftreg = input ^ feedback
shiftreg = 0xffffffff & ((shiftreg << 8) | (shiftreg >> 24))
shiftreg = shiftreg ^ 0xcafebabe

s = Solver()
s.add(shiftreg == 0x804a008)
s.check()
# unsat
Run Code Online (Sandbox Code Playgroud)

我们被告知这个方程是不可解的。如果打印,s包含:

[4294967295 &
 ((input ^ 134520112) << 8 | (input ^ 134520112) >> 24) ^
 3405691582 ==
 134520840]
Run Code Online (Sandbox Code Playgroud)

但是,我可以轻松地创建一个示例来解决“输入”的这个方程。

want = 0x804a008
want ^= 0xcafebabe
want = 0xffffffff & ((want >> 8) | (want << 24))
want ^= 0x8049d30
print hex(want) …
Run Code Online (Sandbox Code Playgroud)

math xor solver smt z3

3
推荐指数
1
解决办法
1417
查看次数

在命令行提示符下执行Z3脚本

我有一个非常简单的示例Z3程序,如下所示:

(declare-const a Int)
(declare-fun f (Int Bool) Int)
(assert (> a 10))
(assert (< (f a true) 100))
(check-sat)
Run Code Online (Sandbox Code Playgroud)

此示例程序可以在Z3在线编译器中执行,没有问题。但是当我想使用以下命令使用命令行提示符执行同一程序时:

Z3 <script path>
Run Code Online (Sandbox Code Playgroud)

我收到错误消息:

ERROR: line 1 column 21: could not match expression to benchmark .
Run Code Online (Sandbox Code Playgroud)

并对程序中的每一行重复此错误。谁能帮我看看我在做什么错?

z3

3
推荐指数
1
解决办法
1407
查看次数

z3 支持证明归纳事实吗?

据我所知,z3 一般无法验证归纳证明。但我很好奇是否有一种方法可以让它检查一些简单的事情,例如:

; returns the same input list after iterating through each element
(declare-fun iterate ((List Int)) (List Int))

(declare-const l (List Int))

(assert (forall ((l (List Int)))
  (ite (= l nil)
    (= (iterate l) nil)
    (= (iterate l) (insert (head l) (iterate (tail l))))
  )
))

(assert (not (= l (iterate l))))
(check-sat)
Run Code Online (Sandbox Code Playgroud)

现在它只是在我的机器上永远循环。

z3

3
推荐指数
1
解决办法
293
查看次数

EPR 片段中 prenex 定量的顺序重要吗?

一阶逻辑的有效命题 (EPR) 片段通常被定义为以下形式的 prenex 量化公式集\xe2\x88\x83X.\xe2\x88\x80Y.\xce\xa6(X,Y),其中XY是(可能为空)变量序列。量化的顺序(即 )\xe2\x88\x83*\xe2\x88\x80*对于 EPR 的可判定性重要吗?如果改变量化顺序,我们会失去可判定性吗?

\n\n

特别是,我对捕获可判定逻辑中的 set-monadic 绑定操作的语义感兴趣。给定S1类型的元素集T1(即S1具有类型)和类型的T1 Set函数,set-monad 的绑定操作通过应用于每个元素来构造一个新的类型集fT1 -> T2 SetS2T2 SetfS1并联合结果集可以在以下 SMT-LIB 代码/公式中捕获此行为:

\n\n
(declare-sort T1)\n(declare-sort T2)\n;; We encode T1 Set as a boolean function on T1\n(declare-fun S1 (T1) Bool)\n(declare-fun S2 (T2) Bool)\n;; Thus, f becomes a binary predicate on (T1,T2)\n(declare-fun f (T1 T2) Bool)\n(assert (forall ((x T1)(y T2)) (=> …
Run Code Online (Sandbox Code Playgroud)

first-order-logic decidable smt z3

3
推荐指数
1
解决办法
154
查看次数

Z3: how to improve performance?

In following Python code:

from itertools import product
from z3 import *

def get_sp(v0, v1):
    res = sum([v0[i] * v1[i] for i in range(len(v0))])
    return res

def get_is_mod_partition(numbers):
    n = len(numbers)
    mod_power = 2**n
    for signs in product((1, -1), repeat = len(numbers)):
        if get_sp(numbers, signs) % mod_power == 0:
            return 1
    return 0

def check_sat(numbers):
    n = len(numbers)
    s = Solver()
    signs = [Int("s" + str(i)) for i in range(n)]
    for i in range(n):
        s.add(Or(signs[i] == -1, signs[i] == 1)) …
Run Code Online (Sandbox Code Playgroud)

performance z3 z3py

3
推荐指数
1
解决办法
1191
查看次数

如何使用 z3 BitVec 或 Int 作为数组索引?

我想使用 Int 向量作为数组索引。

Python。

array = [12,45,66,34]
s= Solver()
x = Int('x')
s.add(array[x] == 66)
Run Code Online (Sandbox Code Playgroud)

所以 x 应该是 2..

我该怎么做?

symbolic-math z3 z3py

3
推荐指数
1
解决办法
1872
查看次数

z3 的可扩展性

我想提高 SMT 求解的可扩展性。我实际上已经实现了增量求解。但我想提高更多。在不了解问题本身的情况下,还有其他一般方法可以改进它吗?

z3 z3py

3
推荐指数
1
解决办法
241
查看次数

标签 统计

z3 ×10

smt ×3

z3py ×3

decidable ×1

first-order-logic ×1

math ×1

performance ×1

solver ×1

string ×1

symbolic-math ×1

xor ×1