python - 如何在 Z3py 中创建一个约束来检查一个列表是否是另一个列表的排列?

标签 python z3 z3py

我是 Z3py 的初学者,现在我已经为此苦苦挣扎了将近一个星期......我没有找到足够的信息来帮助我在教程中找到一个很好的例子(函数存在)可以帮我。

最佳答案

免责声明:如果您的问题只是您正在努力使用 Z3py 编码问题,那么我的建议不会帮助您,因为它们不是 关于 Z3py。但是,我认为您的问题实际上更为根本。

答案:公理化 Z3/SMTLIB 中的列表一点也不简单,特别是因为您的公理化需要针对您的(forall-quantified)公理的良好触发策略(模式),这样您的公理化就不会产生匹配循环。

我建议查看 Boogie prelude of Dafny看看序列的公理化看起来如何。 Dafny是一个自动化的软件验证器和Boogie是一种中间验证语言。 Boogie 的语法很容易理解(对于熟悉 SMTLIB 语法的人来说),您应该能够使用表达序列排列的公理(或多个公理)扩展现有的序列公理化。

其他灵感来源可能是 thisthis论文,这两篇论文都讨论了公理触发器和匹配循环。

关于python - 如何在 Z3py 中创建一个约束来检查一个列表是否是另一个列表的排列?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28357526/

相关文章:

Z3 表明如果 a^3=x*y*z 那么 3a <= x+y+z

z3 - 尝试在 python 中使用 Z3 找到 bool 公式的所有解决方案

python - Pandas 中的间隔数据类型 - 查找中点、左侧、中心等

Python 以精确的像素大小保存 matplotlib 图

python - 以 numpy 行索引为标记的 Matplotlib 散点图

python - 在样本空间的开始和结束处使用更多样本进行采样

python - python Z3 API 的性能

z3 - 是否存在不可解释函数的理论(同余分析)?

python - z3py 示例不适用于 macOS

python - Z3 中的精确 n 编码