【问题标题】:How to define a predicate in SMT-LIB如何在 SMT-LIB 中定义谓词
【发布时间】:2015-05-02 08:09:04
【问题描述】:

如何定义一个谓词,例如even: Int -> Bool,它接受一个整数并输出它是否是偶数?

我尝试了类似的东西

(set-logic AUFNIRA)
(declare-fun even (Int) Bool)

我想知道如何声明,例如,even(2) 是真的。

【问题讨论】:

    标签: predicate smt


    【解决方案1】:

    大约有 3 种方法可以做到这一点。

    1. 您可以使用解释谓词(_ divisible 2)

      (assert ((_ divisible 2) 6))
      

      您可以使用define-fun 来精确捕捉。

      (define-fun even ((x Int)) Bool ((_ divisible 2) x))
      

      请注意,这可能不在您选择的逻辑范围内,例如 QF_LIA

    2. 您可以声明一个未解释的谓词,并定义 它的语义逐点。

      (declare-fun even (Int) Bool)
      (assert (even 2))
      (assert (not (even 3)))
      
    3. 您可以声明一个未解释的谓词并定义 它的语义通过量词。

      (declare-fun even (Int) Bool)
      (assert (forall ((x Int)) (= (even x) (exists ((y Int)) (= x (* 2 y))))))
      

    【讨论】:

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