我正在做一些验证工作,我已经将常规树语法作为基础理论。
Z3允许您使用未解释的函数定义自己的东西,但是在您的决策过程递归时,这并不能很好地工作。他们曾经允许使用插件,但我认为这已经被删除了。
我想知道,是否有人建议使用体面的SMT解算器来编写自定义理论的决策程序?
答案 0 :(得分:6)
有几种选择,大多数合理的SMT求解器都是开源的,您可以根据您需要花费多少时间和精力,将理论求解器集成到任何细节中。
同样,我会说,对于第一个版本,你应该通过外部集成得到很好的结果,你可以让SMT求解器处理命题SAT和未解释的函数(如果需要的话还算算术)。然后,您可以向求解器询问模型并添加理论公理,直到您从求解器返回的命题模型与您的理论一致(或者您获得UNSAT)。 并非所有命题模型中的任务都具有相关性。您可以通过应用双重传播(http://www.cs.utexas.edu/users/hunt/FMCAD/FMCAD14/proceedings/29_niemetz.pdf)来最小化您考虑的分配数量。