在Scala ^ Z3 DSL中,如何声明未解释的函数?

时间:2012-06-13 05:32:35

标签: scala dsl z3

我有一个小型Scala程序,可将Scala ^ Z3 DSL表达式转换为乳胶,以便于阅读。但我不知道如何使用DSL声明一个未解释的函数。有许多方法可以使用其他结构来破解函数的行为,并且很容易打印出被破解的函数,因此它看起来像是乳胶中的普通函数。但我宁愿只是声明一个未解释的函数,如果可能的话。

1 个答案:

答案 0 :(得分:1)

使用未解释函数解决的一种方法是在Val[_]类型构造函数中使用Scala函数类型。例如:

import z3.scala._
import z3.scala.dsl._

choose(
  (x : Val[Int], f : Val[Int=>Int]) => x < f(x)
)

> res0: (Int, Int=>Int) = (0,<function1>)

然后该函数由实际的Scala函数建模:

val f = res0._2
f(0)

> 1