我们可以提取z3当前使用的策略,然后配置另一个类似的实例吗?

我们可以提取z3当前使用的策略,然后配置另一个类似的实例吗?,z3,Z3,我希望在设置特定逻辑时重用使用/激活的策略,但我需要避免使用set logic 那么,有没有办法让Z3以可重用的形式显示它正在使用的战术/配置 e、 g.(获取策略)将回答一些我可以用作应用或使用检查sat的参数的问题 否则,有什么可能的方法来推断作为我的set逻辑指令的副作用而部署的策略 一些背景 我不能使用(设置逻辑QF_LIA),因为这会阻止我使用特殊功能,如偏序。但是,一旦我删除了设置逻辑,我以前很快(200毫秒)的UNSAT查询就变成了“未知”,例如,除了QF_LIA之外,我什么都不用

我希望在设置特定逻辑时重用使用/激活的策略,但我需要避免使用
set logic

那么,有没有办法让Z3以可重用的形式显示它正在使用的战术/配置

e、 g.
(获取策略)
将回答一些我可以用作
应用
使用
检查sat的参数的问题

否则,有什么可能的方法来推断作为我的set逻辑指令的副作用而部署的策略

一些背景 我不能使用
(设置逻辑QF_LIA)
,因为这会阻止我使用
特殊功能,如偏序。但是,一旦我删除了
设置逻辑
,我以前很快(200毫秒)的UNSAT查询就变成了“未知”,例如,除了QF_LIA之外,我什么都不用

所以我知道设置逻辑有助于配置解算器,但我现在需要绕过这个内置配置机制,因为我不能使用设置逻辑

我试过的 我尝试过使用
检查sat,但没有设置逻辑,结果好坏参半:

  • smt
    是相当快的400毫秒
  • qflia
    令人惊讶的是,它与设置逻辑不一样,速度慢20秒,但找到了答案
  • default
    正如预期的那样给出未知,我认为(希望)它与basic
    check-sat
这些都不如设置QF_LIA(200 ms)好


当在详细模式下运行Z3时,
-v:10
我可以看到它在更快的运行中使用
nnf cnf
,这有助于触发一些简化。显然,较慢的版本开始分支(在本例中,结果是不正确的)。但是这个信息很难利用,我知道Z3对我的问题有正确的设置,但是我如何触发它们呢?

逻辑选择和策略只是松散相关:选择一个逻辑决定哪些名称在范围内。战术决定如何实际解决问题。总的来说,这两者在其他方面是不相关的


但我确实明白你的观点,如果z3能列出它所采用的战术那就太好了。我担心您从详细的输出中所能收集到的信息至少在目前是您所拥有的,因为没有
(获取策略)
或类似的命令。当然,你可以在他们的问题追踪器中询问,也许他们可以指出你可以使用的其他电话。()

显然,所采用的Z3策略对设置逻辑非常敏感,例如,请参见本例。谢谢你的回答,我会继续寻找,如果我不能解决这个问题,我可能会对Z3提出一个功能请求。