我可以通过C ++ API检查变量是否具有确定性值

时间:2013-07-26 00:33:50

标签: c++ z3

我注意到Z3可以从一些纸张中完成所有操作。在我的项目中,我必须在SMT公式中搜索确定性变量。通过确定性我的意思是变量只能取一个int值来使公式可满足。是否有可以执行此任务的c ++ / c API函数?

到目前为止,我能做的最好的事情是多次调用solver.check()函数来否定我感兴趣的每个变量。使用API​​有更快的方法吗?

基本上,我想做allsmt和谓词抽象/投影。

1 个答案:

答案 0 :(得分:0)

没有专门的API来检查给定变量的所有模型是否必须就相同的值达成一致。您可以在Z3之上实现更高效或更低效的算法来解决这个问题。 这是一个可能的算法:

  1. 从Z3获得模型M.
  2. 对于您感兴趣的变量断言:不(和([(M.eval(x)== x)对于Vars中的x]))
  3. 重新检查可满足性。如果新状态不可满足,则Vars中的剩余变量必须具有相同的值。否则,从Vars中删除变量,这些变量计算为与旧M.eval(x)不同的新值,并重复(2)直到Vars为空或上下文不可满足为止。