标签: z3

Z3的反例输出

当Z3中的公式不饱和并且(防止出现)时,有一个输出,我找不到任何关于它是什么的信息.我在哪里可以找到有关它的任何文件?

在我看来相当难以理解,是否有可能将此作为输入的工具?

干杯,马特

z3

5
推荐指数
1
解决办法
1338
查看次数

z3中"简化"和"ctx-solver-simplified"之间的区别是什么

从当前版本开始,"ctx-solver-simplified"中存在一些问题,例如http://rise4fun.com/Z3/CqRv中的 z3给出了错误的答案.我将"ctx-solver-simplified"替换为"简化",如http://rise4fun.com/Z3/x9X4 我想知道,这两种策略"简化"和"ctx-solver-simplified"之间有什么区别?

z3

5
推荐指数
1
解决办法
1373
查看次数

学习Z3py - 是否支持数组和循环

我正在浏览Z3py,并在一些特定情况下对如何使用API​​提出疑问.下面的代码是我最终想要使用Z3的简化版本.我的一些问题是:1.有没有办法创建一个任意长的值数组,如下面的变量'a'?2.你能通过Z3py在循环中访问数组的每个元素吗?3.是否可以将结果分配回原始变量或是否需要新变量?转换为CNF会自动添加唯一ID吗?(即a + = b)

总的来说,我迷失了如何将Z3py API应用于以下算法,其中解决方案依赖于'b'.任何帮助或提示都表示赞赏,谢谢.

import sys
import struct

a = "\xff\x33\x01\x88\x02\x11\x03\x55"
b = sys.stdin.read(1) #a byte of user input - value 'a' is good
c = ''
d = ''

for x in range(len(a)):
    c +=  struct.pack( 'B', int(a[x].encode('hex'), 16)^int(b.encode('hex'), 16) )

print c.encode('hex')

second = '\x23\x23'
x = 0
while x < len(c):
    d += struct.pack( 'h', int(c[x:x+1].encode('hex'), 16)^int(second.encode('hex'), 16) )
    x += 2

print d.encode('hex')

if d == '\xbd\x23\x43\x23\x40\x23\x41\x23':
    print "Good"
else:
    print "Bad"
Run Code Online (Sandbox Code Playgroud)

python smt z3

5
推荐指数
1
解决办法
2090
查看次数

Z3py:如何扩展和截断变量?

我有两个不同大小的'a'和'b'变量,见下文.我有几个问题:

(1)如何将'a'的值复制为'b'?(即延长操作)

(2)如何将'b'的值复制为'a'?(即截断操作)

谢谢.

a = BitVec('a', 1)
b = BitVec('b', 32)
Run Code Online (Sandbox Code Playgroud)

z3

5
推荐指数
1
解决办法
1337
查看次数

Z3:将Z3py表达式转换为SMT-LIB2?

给定Z3py中的表达式,我可以将其转换为SMT-LIB2语言吗?(所以我可以将这个SMT-LIB2表达式提供给支持SMT-LIB2的其他SMT求解器)

如果可以,请举一个例子.

非常感谢.

z3

5
推荐指数
1
解决办法
1433
查看次数

Haskell:绑定到快速简单的SAT求解器

今天我也想看看在haskell中解决SAT的选项.首先,我想把自己的接口写入picosat求解器.

然后我发现有SBV库.它是Z3,Yices,CVC4和Boolector的接口.

此外,我在github上进行了谷歌搜索,它甚至可以使用Picosat绑定.

考虑到快速/高性能的限制,是否有任何其他针对SAT求解器的haskell绑定值得关注.Carification:适用于高性能SAT解决(例如,运行数天的问题,以及需要在检查2 ^ 20或更多SAT问题时尽快完成的问题).例如,我在hackage上特别缺少的是绑定到像Plingeling这样的快速并行 SAT求解器.(另外,我在github上发现了当前更新的picosat绑定更多的意外,我很可能会错过其他选项)

SBV库的默认选项是Z3 SMT解算器.在我受过良好教育的猜测中,我是否正确,对于简单的SAT解决而言,picosat比Z3更快?

haskell satisfiability smt z3 picosat

5
推荐指数
2
解决办法
2070
查看次数

为什么0 = 0.5?

在使用.smt2文件时,我注意到Z3 4.3.1有一些奇怪的行为.

如果我这样做(assert (= 0 0.5))将是令人满意的.但是,如果我切换订单并且(assert (= 0.5 0))不满意.

我对正在发生的事情的猜测是,如果第一个参数是一个整数,它将它们都转换为整数(将0.5舍入为0),然后进行比较.如果我将"0"更改为"0.0",它将按预期工作.这与我使用的大多数编程语言形成对比,如果其中一个参数是浮点数,它们都被转换为浮点数并进行比较.这真的是Z3中的预期行为吗?

z3

5
推荐指数
2
解决办法
485
查看次数

在Z3中有效地检验两个约束的句法等价

假设我有两个约束(c1,c2),我想检查它们是否语法相同:

c1: f(x)>1 && g(y)=2
c2: f(x)>1 && g(y)=2
Run Code Online (Sandbox Code Playgroud)

选项1:我们可以把这变成一个可满足性问题,就像这篇文章: 两个boolexpr是否相等

选项2:我们也可以将它们变成字符串并比较相等:

if(c1.toString().equals(c2.toString()))
    ///do somthing
Run Code Online (Sandbox Code Playgroud)

但随着约束的大小增加,这两个选项都有很大的开销.例如,在Expr中调用toString()方法对于大型约束非常昂贵.

两个问题:

  1. 如何在Z3(Java版本)中检查两个约束在语法上是否完全相同?

  2. 如果我们没有1的好解决方案,我正在考虑为Expr对象编写一个包装器并使用工厂方法来避免从Z3生成重复(语法)对象.然后我必须设计自己的equal()和hashCode()函数.但到目前为止,我仍然无法找到一种有效的方法.

java performance z3

5
推荐指数
1
解决办法
256
查看次数

建议一个有效的SAT求解器具有良好的C++接口(或者:Z3对我有用)?

对于我正在开始的项目,我将需要使用SAT求解器.我之前使用过其中一些但主要用于实验,而这里项目的主要约束是良好的性能.我正在尝试寻找替代方案,并尝试了解每种方案如何根据我的具体要求定位.特别是:

  1. 我需要提取令人满意的任务,不仅要检查是否满足,而且解算器应该允许我重复求解相同的公式,寻找不同的可能令人满意的任务,最终以有效的方式迭代所有这些,(例如,没有我)必须添加一个条款并重新开始).

  2. 该项目应该仍然是积极维护和相当的生产质量,而不是自出版以来放弃的一些竞争获胜的研究项目(见picosat).

  3. 此外,由于我使用的是C++,解算器应该提供一个高效且(可能)良好的编写C++接口.

我考虑的第一个候选人是Z3,但我对文档感到困惑,如果上面的第1点得到支持则无法理解,如果我只需要SAT而不是SMT就可能有点过分.C++界面似乎也很容易使用,但我无法忍受这样一个事实:我必须使用普通字符串命名变量(这与我周围的算法配对非常糟糕.这是不是可以避免?).

那么你能否给我一些关于哪个SAT求解器使用的建议,或者对Z3的怀疑有所启发?

c++ z3 sat

5
推荐指数
1
解决办法
1584
查看次数

Z3或Smt2的While循环

如何while循环(C-代码)一个简单SMT2语言或Z3转换?例如:

int x,a;
while(x > 10 && x < 100){
    a = x + a;
    x++;
}
Run Code Online (Sandbox Code Playgroud)

smt z3

5
推荐指数
1
解决办法
714
查看次数

标签 统计

z3 ×10

smt ×3

c++ ×1

haskell ×1

java ×1

performance ×1

picosat ×1

python ×1

sat ×1

satisfiability ×1