如何在SMT 2.0中定义一个函数,它返回4个参数的最小值

时间:2012-04-09 16:33:26

标签: z3 smt

我想在SMT 2.0中定义一个函数,它返回4个整数值的最小值。

1 个答案:

答案 0 :(得分:4)

min4函数(4个整数值中的最小值)可以在SMT 2.0语言中定义为:

(define-fun min2 ((a Int) (b Int)) Int
    (ite (<= a b) a b))

(define-fun min3 ((a Int) (b Int) (c Int)) Int
    (min2 a (min2 b c)))

(define-fun min4 ((a Int) (b Int) (c Int) (d Int)) Int
    (min2 a (min3 b c d)))

以下链接包含使用此功能的示例: http://rise4fun.com/Z3/wuyU

在SMT 2.0中,define-fun本质上是一个宏定义。 SMT 2.0语言不支持期望任意数量的参数的函数的定义。您可以考虑为SMT解算器使用编程API,例如Scala^Z3SBVZ3Py。它们比SMT 2.0更方便使用。 以下是Z3Py中的相同示例:http://rise4fun.com/Z3Py/2vy