可以对haskell map
函数进行建模,该函数采用了一个适用于列表所有元素的“映射器”函数。如何在smtlib中声明map
?
答案 0 :(得分:1)
否; SMTLib本质上是一阶理论。根本不支持高阶函数。
但是, Z3允许使用扩展名(_ map f)
在数组上映射函数。请参见https://rise4fun.com/Z3/tutorial/guide,搜索“在数组上映射函数”。这不会为您提供任意的高阶函数,但是可以用来模拟对SMTLib数组进行操作的函数。
如果您确实想推理高阶函数,那么SMTLib对于您来说可能是错误的逻辑。使用更传统的定理证明者(例如HOL / Isabelle)或Agda / Coq中的现代化身会更合适。您也可以看看精益,它在功能和自动化方面都有很好的折衷。