我一直在研究各种SMT求解器,主要是Z3,CVC4和VeriT。他们对用量词解决SMT问题的能力都有模糊的描述。他们的文档主要基于示例(Z3),或由学术论文组成,描述了可能会或可能不会实际实现的更改。

我知道一阶逻辑存在可确定的片段,例如:

  • 有限边界量词
  • Monadic一阶逻辑

  • 我想知道的是,各种SMT求解器可以保证完成哪些FOL类(如果有)?我怎么知道我要解决的问题是在完整的片段中?

    最佳答案

    CVC4完成了两类量化公式。

    (1)具有有限域的量化公式。

    CVC4对未解释的排序上的量词是有限模型完成的,这意味着如果存在一个模型,其中所有未解释的排序都被解释为有限的,那么CVC4最终会找到它。有关详细信息,您可以查看本文:
    http://homepage.divms.uiowa.edu/~ajreynol/tplp17.pdf
    这里总结了 session 文件:
    http://homepage.divms.uiowa.edu/~ajreynol/cav13.pdf
    http://homepage.divms.uiowa.edu/~ajreynol/cade24.pdf
    请注意,这些技术与CVC4支持的任何理论相结合。假设理论是可判定的,并且量化不涉及(无限)解释的排序,则保留有限模型完整性保证。

    对于某些片段,例如Bernays-Schoenfinkel-Ramsey片段(EPR),该方法也是完全驳斥的,这意味着对于该片段中任何无法满足的问题,CVC4最终都会回答“不满意”。

    如果您对此功能感兴趣,则默认情况下,CVC4不会在输入问题上使用有限模型查找。命令行选项“--finite-model-find”将启用这些技术。

    (2)一些理论中的量化公式发出了量词消除法。

    例如,对于(纯)量化线性算术,CVC4是完整的。有关详细信息,请参见本文:
    http://homepage.divms.uiowa.edu/~ajreynol/fmsd17-instla.pdf
    它基于较早的 session 论文:
    http://homepage.divms.uiowa.edu/~ajreynol/cav15a.pdf

    这在本质上与其他方法类似,例如在Z3中:
    https://www.microsoft.com/en-us/research/wp-content/uploads/2016/02/nbjorner-qplay-lpar20.pdf

    10-08 17:04