用正确的战术加速z3解算器

用正确的战术加速z3解算器,z3,z3py,Z3,Z3py,我创建了大约20k个约束,在我的机器上解决它们大约需要3分钟。我有不同类型的约束,下面我给出示例并解释它们。我将断言上传到 我对解决更大的约束系统感兴趣,因此我想加快这个过程。我想问一下,您是否有关于如何更快地解决这些问题的建议,例如使用适当的策略。从战略教程中我知道了战术,但我似乎并没有通过运用战术得到积极的区别 li是树的标签。第一种类型对标签的值进行限制。标签值通常在10-20个不同值之间 Or(l6 == 11, Or(l6 == 0, l6 == 1, l6 == 2, l6 == 3

我创建了大约20k个约束,在我的机器上解决它们大约需要3分钟。我有不同类型的约束,下面我给出示例并解释它们。我将断言上传到

我对解决更大的约束系统感兴趣,因此我想加快这个过程。我想问一下,您是否有关于如何更快地解决这些问题的建议,例如使用适当的策略。从战略教程中我知道了战术,但我似乎并没有通过运用战术得到积极的区别

li
是树的标签。第一种类型对标签的值进行限制。标签值通常在10-20个不同值之间

Or(l6 == 11, Or(l6 == 0, l6 == 1, l6 == 2, l6 == 3, l6 == 4,
      l6 == 5, l6 == 6, l6 == 7, l6 == 8, l6 == 9, l6 == 10))
第二种类型将不同的标签相互关联

Implies(l12 == 0, Or(l10 == 2, l10 == 5, l10 == 7, l10 == 8, l10 == 10,
           False, False))
第三种类型定义并关联函数
f:Int-->Int
(或
f:BitVector-->BitVector
,在不完整的情况下),其中
bound{s,v}
只是一个函数名,
n
是一个节点的ID。目标是为绑定的函数
找到一个令人满意的赋值

Implies(And(bound_s_v (18) >= 0, l18 == 0),
        And(bound_s_v (19) >= 0,
            bound_s_v (19) >=
            bound_s_v (18),
            bound_s_v (26) >= 0,
            bound_s_v (26) >=
            bound_s_v (18)))
最后一种类型确定是否需要绑定(
=0
)或不需要(
==-1
,)

此外,对于某些初始状态,还需要边界:

`bound_s0_v0(0) >= 0`

可导出文件的描述:在前2-3行中,脚本启动解算器,导入z3,并在最后一行调用
print s.check()

假设,您可以尝试使用解算器“qflia”,因为我在您的逻辑中看不到任何量词

编辑:


我试过“qflia”,但没有加快速度。也许,您也应该尝试其他解决方案。

您发布的文件被截断。我们不能执行它。声明不见了。例如,它不包含
l6
等声明。感谢您的评论!我现在使该文件可执行。
`bound_s0_v0(0) >= 0`