如何在 SMT-LIB 中定义谓词
How to define a predicate in SMT-LIB
我如何定义一个谓词,例如 even: Int -> Bool
,它接受一个整数并输出它是否为偶数?
我试过
(set-logic AUFNIRA)
(declare-fun even (Int) Bool)
我想知道如何声明,例如,even(2)
为真。
大致有3种方法可以做到这一点。
可以使用解释谓词(_整除
2).
(assert ((_ divisible 2) 6))
您甚至可以使用定义函数来精确捕获。
(define-fun even ((x Int)) Bool ((_ divisible 2) x))
请注意,这可能不符合您的选择逻辑,比如 QF_LIA。
您可以声明一个未解释的谓词,并定义
它的语义逐点。
(declare-fun even (Int) Bool)
(assert (even 2))
(assert (not (even 3)))
您可以声明一个未解释的谓词并定义
它的语义通过量词。
(declare-fun even (Int) Bool)
(assert (forall ((x Int)) (= (even x) (exists ((y Int)) (= x (* 2 y))))))
我如何定义一个谓词,例如 even: Int -> Bool
,它接受一个整数并输出它是否为偶数?
我试过
(set-logic AUFNIRA)
(declare-fun even (Int) Bool)
我想知道如何声明,例如,even(2)
为真。
大致有3种方法可以做到这一点。
可以使用解释谓词(_整除 2).
(assert ((_ divisible 2) 6))
您甚至可以使用定义函数来精确捕获。
(define-fun even ((x Int)) Bool ((_ divisible 2) x))
请注意,这可能不符合您的选择逻辑,比如 QF_LIA。
您可以声明一个未解释的谓词,并定义 它的语义逐点。
(declare-fun even (Int) Bool) (assert (even 2)) (assert (not (even 3)))
您可以声明一个未解释的谓词并定义 它的语义通过量词。
(declare-fun even (Int) Bool) (assert (forall ((x Int)) (= (even x) (exists ((y Int)) (= x (* 2 y))))))