我目前正在尝试使用define-fun-rec 编写SMT 脚本。我已经使用 Z3 4.4.2 版和 CVC4 1.4 版进行了测试。据我所知,这些是两者的最新版本,并且都支持该功能*。但是,两者似乎都不认识该命令。
(我根据 Nikolaj 的回复对此进行了一些更改。它仍然给出错误消息。)具体来说,给定:
(define-fun-rec
fac ((x Int)) Int
(
ite (<= x 1)
1
(* x (fac (- x 1)))
)
)
(assert (= (fac 4) 24))
(check-sat)
Z3 输出:
unsupported
; define-fun-rec
(error "line 10 column 17: unknown function/constant fac")
sat
CVC4 输出:
(error "Parse Error: fac.smt2:1.15: expected SMT-LIBv2 command, got `define-fun-rec'.
(define-fun-rec
^
")
我最好的猜测是我需要设置某种标志,或者我需要使用一些特定的逻辑,但是我在使用 define-fun-rec 找到任何类型的详细说明或示例时遇到了很多麻烦。任何意见,将不胜感激。谢谢!
*Z3 支持:Z3 中如何处理递归函数?