2

使用带有文本格式的 Z3,我可以使用 define-fun 来定义函数以供以后重用。例如:

 (define-fun test((a Int) (b Int)) Int
      (ite  (and (> a 2) (<= b 3))
             1
             (ite (and (<= a 2)(> b 10))
                  2
                  a
             )
       )
  )

所以我想知道如何使用 C# api 定义乐趣,因为 Context.MkFuncDecl 仅用于生成未解释的函数。

4

1 回答 1

2

define-fun只是在 SMT 2.0 中定义宏的一种机制。它不会为 SMT 求解器增加任何功能。我们确实在 API 中支持它,因为用户可以创建一个函数,以自己喜欢的语言实现宏。也就是说,我们可以创建一个名为test给定的 C# 函数ab返回您问题中的 ite 表达式。这是一个关于如何在 Python 中执行此操作的示例:

http://rise4fun.com/Z3Py/to1

这是另一个定义min接收任意数量参数的函数的示例:

http://rise4fun.com/Z3Py/Vvp

于 2012-06-28T21:19:00.027 回答