由于previously asked Z3无法为递归函数提供模型。但是,是否有可能告诉Z3(最好通过Java API)没有递归函数定义的模型就足够了(或者确实选择我感兴趣的函数,基本上我不需要非常量函数的模型) ?显然,这可能会导致返回sat的查询,尽管某些函数没有模型。基本上,用户必须确保这些功能确实具有某种模型。 但是,我认为这不是Z3或SMT求解器工作方式的真正实现,即我认为Z3需要(部分)递归函数模型来评估表达式。
答案 0 :(得分:1)
量词的MBQI实现并不能很好地与递归函数一起工作。 有一件事可能适合你:用有界递归函数替换递归函数定义。您添加了一个额外的参数,该参数计算您愿意探索该函数的展开次数。每当在其余输入中应用递归函数时,请设置depth参数。您可以使用代数数据类型的Peano数或整数。 例如,符号自动机工具包使用这种方法。
答案 1 :(得分:0)
我发现了一篇论文,探讨了Nikolaj Bjorner的答案:“使用SMT解算器进行计算”,Amin,Leino和Rompf(2014)。
此外,我发现了Suter,Köksal和Kuncak(2011)的“Satisfiability Modulo Recursive Programs”,它连续地将调用展开到递归函数,直到可以确定可满足性为止。