Z3/SMT-LIB 评估功能并收集结果

Z3/SMT-LIB Evaluating function and collecting results

我正在尝试以自动查询所有可用值的方式从 Z3 中获取一些值:

(define-fun-rec out ((p Pkg) (t Time)) (List Bool)
  (ite (< t 0) (as nil (List Bool)) (insert (eval (installed p t)) (out p (- t 1)))))

(eval (out a t-final))

不幸的是,这给了我错误 unknown function/constant eval

我还尝试在函数中执行 eval 副作用而不是构建列表,但这也不起作用,因为我无法对语句(eval 和递归调用)进行排序。

有人有什么想法吗?

this page,我发现了以下引用:

The command eval evaluates an expression in the last model produced by Z3. It is essentially executing the "function program" produced by Z3.

由于 eval 是 <command>,因此它不能在 <term> 表达式中使用。


我相信 model-enumeration 使用一些 API 接口而不是 SmtLibv2 format 应该更容易,因为可以很容易地编写一个循环来交替进行可满足性检查和学习阻塞子句从搜索 space.

中删除之前找到的解决方案