gpt4 book ai didi

z3 - z3 的解决方法不支持注入(inject)性

转载 作者:行者123 更新时间:2023-12-01 13:30:03 27 4
gpt4 key购买 nike

我想在 z3 中表示一个哈希函数,比如 SHA(x)。在做了一些研究之后,似乎 z3 不能很好地支持注入(inject)性,所以我不能有像这样的约束(虽然我意识到这并不是严格意义上的碰撞,但作为一种启发式方法,它对我的项目)

forall([x, y],Implies(SHA(x)==SHA(y), x==y))

并期望求解器终止。

我的问题是,对于这个问题是否有任何已知的最佳实践解决方法?例如,如果我在不使用量词的情况下为每对 x 和 y 添加 Implies(SHA(x)==SHA(y), x==y) 约束,这会解决问题吗?

最佳答案

对于未解释的函数,我们使用以下形式的编码:

Forall([x], inverse_f(f(x)) = x)

所以当 f 是单射的时候,我们可以引入一个函数来实现 f 的范围的部分逆。具有成对等式的量化公理非常常见,以至于 Z3 会寻找它们并添加上述公理。
每次出现 f 时都会实例化它。
当然,对于通常使用位向量编码的 SHA,引入未解释的函数意味着 Z3 不使用纯 SAT 求解器。在最好的情况下,它会恢复为阿克曼编码,即重新引入原始的成对编码。

关于z3 - z3 的解决方法不支持注入(inject)性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46418908/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com