Z3量词实例化调优指南(带SMT-LIB接口)

Z3量词实例化调优指南(带SMT-LIB接口),z3,smt,Z3,Smt,我试图在机器产生的问题上调整z3 不满意, 包含与证明无关的断言 无关断言包含量词 其中,由于这些无关的断言,z3无法找到不可满足性证明(手动删除它们会显示这一点) 是否有处理这种情况的一般准则 通过查看命令行选项,我想我可以尝试: mbqi.id(string)仅对id以string开头的量词使用基于模型的实例化(默认值:) 但我不知道如何使用SMT-LIB语法将id附加到量词。有线索的人能和我分享一下吗?这里提到的id只是量化变量的名称。如果您有: (declare-sort S 0)

我试图在机器产生的问题上调整z3

  • 不满意,
  • 包含与证明无关的断言
  • 无关断言包含量词
  • 其中,由于这些无关的断言,z3无法找到不可满足性证明(手动删除它们会显示这一点)
是否有处理这种情况的一般准则

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

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


但我不知道如何使用SMT-LIB语法将id附加到量词。有线索的人能和我分享一下吗?

这里提到的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。如果使用此调用,那么z3将仅在上述示例中量化变量以
inst
开头时实例化一个模式。

这里提到的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。如果您使用这个调用,那么z3将仅在上面示例中量化变量以
inst
开头时实例化一个模式