首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >满足Z3Py中的K/N约束

满足Z3Py中的K/N约束
EN

Stack Overflow用户
提问于 2019-10-21 22:11:52
回答 1查看 151关注 0票数 0

我有一个带有逻辑的程序,如下面的伪代码所述。x是一个字符串,x[k]将返回索引k处字符的十进制字符代码。^运算符返回操作数的十进制异或结果。

代码语言:javascript
运行
复制
x = input
int checksum = x[0] ^ x[1] ^ x[2]
int sum = 0

sum += x[36] ^ x[23] == 111
sum += x[23] ^ x[29] == 101
sum += x[29] ^ x[30] == 116
sum += x[30] ^ x[9] == 115
sum += x[9] ^ x[25] == 0

return sum == checksum and x[0] ^ x[29] == 100 and x[1] ^ x[30] == 200

我希望找到使此程序返回true的输入。如果我想用Z3Py解决这个问题,有没有办法呢?我需要一些K of N约束,它允许我将约束表达为表达式,但我还没有找到对此的支持。

我想用Z3做什么的伪代码:

代码语言:javascript
运行
复制
int checksum = x[0] ^ x[1] ^ x[2]

bools = []

bools.append(Bool(x[36] ^ x[23] == 111))
bools.append(Bool(x[23] ^ x[29] == 101))
bools.append(Bool(x[29] ^ x[30] == 116))
bools.append(Bool(x[30] ^ x[9] == 115))
bools.append(Bool(x[9] ^ x[25] == 0))

state.add(bools[0])
state.add(bools[1])
state.add(bools[2])
state.add(bools[3])
state.add(bools[4])
state.add(x[0] ^ x[29] == 100)
state.add(x[1] ^ x[30] == 200)

state.add(PbEq([boolean for boolean in bools], checksum))
EN

回答 1

Stack Overflow用户

发布于 2019-10-21 23:37:44

读了你的问题描述,我不明白为什么这个问题需要K-of-of-N约束。这看起来像是使用位向量理论的简单编码。但也许我不太理解你想要解决的问题。这将有助于显示您尝试过的内容,以及失败的内容。

在任何情况下,如果您确实需要K-of-of-N约束,那么Z3以各种形式为它们提供了特殊支持:

这样的约束称为“伪布尔值”,因此称为Pb前缀。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/58488120

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档