z3 - smtlib 是否支持一流的功能?
问题描述
假设为 haskellmap
函数建模,它接受一个“映射器”函数,该函数应用于列表的所有元素。如何map
在 smtlib 中声明?
解决方案
不; SMTLib 本质上是一阶理论;根本不支持高阶函数。
然而,Z3 允许通过(_ map f)
扩展名映射函数到数组上。请参阅https://rise4fun.com/Z3/tutorial/guide,搜索“数组上的映射函数”。这不会为您提供任意的高阶函数,但可以用来模拟那些在 SMTLib 数组上运行的函数。
如果您确实打算推理高阶函数,那么 SMTLib 对您来说可能是错误的逻辑。使用更传统的定理证明器(如 HOL/Isabelle)或 Agda/Coq 中的现代化身会更合适。您还可以查看精益,它在功能和自动化方面取得了很好的折衷。
推荐阅读
- javascript - 如何将数据库对象传递给 ApolloServer
- socrata - 芝加哥数据门户 API 格式,用于具有多个条件的过滤器
- sqlite - sqlite PRAGMA 设置是永久的还是在数据库关闭后“消失”?
- c# - 单击其中一项时如何获取上下文菜单结束的表单控件
- excel - 根据 x x y x z 单元格值填充单元格
- c# - C#:可空结构的默认文字和类型推断
- javascript - 从另一个嵌套的 json 对象创建一个嵌套的 json 对象 [HOLD]
- amazon-web-services - 我可以让 Amazon SageMaker 根据历史数据而不是概率分数来提供推荐吗?
- javascript - 在 img 标签中显示 blob (javascript)
- linux - 在ubuntu14.04上安装vscode 1.32的依赖是什么