【问题标题】:How to add new logics via Z3 or SMT-Lib?如何通过 Z3 或 SMT-Lib 添加新逻辑?
【发布时间】:2019-03-12 20:34:01
【问题描述】:

我有一个理论部分,我描述了新的逻辑并且我想实现它。但我不想从头开始做所有事情。

我看到了 SMT-Lib/Z3 的巨大潜力,那么如何使用这些工具实现我的逻辑?

在实现之后,我打算根据我的逻辑运行几个示例。

【问题讨论】:

  • 使用比 SMT-LIB 支持的更丰富的逻辑的证明/验证通常被编码到 SMT-LIB 中。例如,Viper (viper.ethz.ch) 将基于分离逻辑的证明编码到 SMT-LIB 中,这是一个非常复杂的过程。这启用了一个工具堆栈,其中甚至“更高”的工具使用更丰富的逻辑将证明编码到 Viper 中,并最终编码到 SMT-LIB 中,例如这里:描述link.springer.com/chapter/10.1007/978-3-319-89960-2_11

标签: z3 smt z3py lib


【解决方案1】:
  • 在排序的一阶逻辑中公理化您的逻辑。
  • 声明逻辑排序和符号,并添加 SMT-LIB 格式的公理。
  • 将这些命令用作示例的序言。

根据您的逻辑,您也可以尝试使用预定义的逻辑(例如数组)来表达它们,而不是简单的一阶逻辑。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-11-09
    • 1970-01-01
    • 2011-12-09
    • 2018-08-11
    相关资源
    最近更新 更多