我使用Z3检查逻辑中的可满足性,使用线性整数运算,未解释的函数和布尔变量的量词。 Z3不提供可满足问题的模型,我想这是因为量词(或我选择的逻辑:AUFLIA)。
有没有办法让Z3给我这些问题的模型,除了自己实例化所有的布尔变量?
答案 0 :(得分:2)
Z3原则上可以决定这个片段。我说“原则上”,因为这个片段的决策问题的复杂性非常高。例如,它包含Bernays-Schönfinkel片段(又名EPR),它是NEXPTIME完整的。可以在以下位置找到Z3可以决定的片段列表:http://rise4fun.com/z3/tutorial/guide
我们必须确保在Z3中启用基于模型的量词实例化(MBQI)。您可以使用命令行选项MBQI=true
或SMT2命令
(set-option :mbqi true)
Z3在MBQI步骤的迭代次数上也有一个阈值。我们可以使用命令行选项MBQI_MAX_ITERATIONS=<value>
或命令
(set-option :mbqi-max-iterations 1000000)
对于每个MBQI步骤,我们可以要求Z3显示当前候选模型不满足哪些量词。选项MBQI_TRACE=true
话虽这么说,我最近修复了你发给我的SMT2脚本暴露的错误(崩溃)。该修复程序将在Z3 3.2中提供。