Z3 模型与递归函数

Z3 模型与递归函数,z3,Z3,因为Z3不能提供递归函数的模型。但是,是否可以告诉Z3(最好通过JavaAPI)没有递归函数定义的模型就足够了(或者确实可以选择我感兴趣的函数,基本上我不需要非常量函数的模型)?显然,这可能会导致返回sat的查询,尽管有些函数没有模型。基本上,用户必须确保这些函数确实具有某种模型。 然而,我会假设Z3或SMT解算器的工作方式并不能真正实现这一点,也就是说,我会假设Z3需要一个(部分)递归函数模型来计算表达式。量词的MBQI实现并不能很好地与递归函数配合使用。 有一件事可能会帮到你:用有界递归函数

因为Z3不能提供递归函数的模型。但是,是否可以告诉Z3(最好通过JavaAPI)没有递归函数定义的模型就足够了(或者确实可以选择我感兴趣的函数,基本上我不需要非常量函数的模型)?显然,这可能会导致返回sat的查询,尽管有些函数没有模型。基本上,用户必须确保这些函数确实具有某种模型。
然而,我会假设Z3或SMT解算器的工作方式并不能真正实现这一点,也就是说,我会假设Z3需要一个(部分)递归函数模型来计算表达式。

量词的MBQI实现并不能很好地与递归函数配合使用。 有一件事可能会帮到你:用有界递归函数替换递归函数定义。您添加了一个额外的参数,用于计算您愿意探索函数的展开次数。每当您在输入的其余部分应用递归函数时,设置深度参数。可以使用代数数据类型Peano数或整数。
例如,符号自动机工具包使用了这种方法。

我发现一篇论文进一步探讨了Nikolaj Bjorner的回答中给出的想法:Amin、Leino和Rompf(2014)的“使用SMT解算器进行计算”

此外,我发现Suter、Köksal和Kuncak(2011)的“可满足性模递归程序”,它依次展开对递归函数的调用,直到可以确定可满足性