调整Z3量词实例化的准则(使用SMT-LIB接口)

时间:2020-06-10 13:12:41

标签: z3 smt

我正在尝试针对机器生成的问题调整z3

  • 不满意,
  • 包含与证据无关的断言
  • 不相关的断言包含量词
  • 由于这些不相关的断言,z3无法找到不满足的证据(手动删除它们就可以证明这一点)。

是否存在处理这种情况的一般准则?

通过命令行选项,我想我可以尝试:

mbqi.id(字符串)仅对ID以字符串开头的量词使用基于模型的实例化(默认值:)

但是,我还看不到如何使用SMT-LIB语法将ID附加到量词上。有线索的人可以和我分享吗?

1 个答案:

答案 0 :(得分:2)

此处提到的ID只是量化变量的名称。如果您有:

(declare-sort S 0)
(declare-fun gt (S S) bool)

(assert (forall ((inst_a S) (inst_b S))
          (or (gt inst_a inst_b) (gt inst_b inst_a))))

(check-sat)

那么你可以说:

z3 smt.mbqi=true smt.mbqi.id=inst a.smt2

请不要忘记使用smt.mbqi=true打开MBQI。如果使用此调用,则在上面的示例中,如果量化变量以inst开头,则z3将仅实例化模式。

相关问题