c - 在 SMT-LIB 中表示 C 结构
问题描述
我正在尝试使用 Z3 求解器(在 SMT-LIB 上工作)来推理涉及结构的 C 程序。我想要某种方式来表示该结构是一个包含 SMT-LIB 中其他变量的变量,但我找不到这样做的方法。有谁知道在 SMT-LIB 中表示 C 结构的方法?
解决方案
您可以使用 SMTLib 2.6 的代数数据类型功能对结构进行建模。请参阅http://smtlib.cs.uiowa.edu/papers/smt-lib-reference-v2.6-r2017-07-18.pdf的第 4.2.3 节
此功能不仅允许常规结构声明,还允许递归声明;即,您还可以对具有相同类型字段的结构进行建模。
我应该补充一点,SMT 中的代数数据类型实际上比您需要的更通用,它们实际上可用于对使用不同代数构造函数构造的值进行建模。(对于简单的记录案例,您只需使用一个构造函数。)
代数数据类型是 SMTLib 中的一项新功能,但 Z3 和 CVC4 都支持它。求解器质量可能因您使用的功能而异,但如果您只是使用数据类型来构造和解构值,它应该可以开箱即用。
推荐阅读
- node.js - 邮递员显示的结果与发送的 ExpressJS 不同
- angular - 如何在角度延迟加载的组件中使用另一个组件
- java - 为spring kafka应用程序设置代理
- excel - 使用输入规范生成 SAS 代码
- expo - 在 EXPO 工作时,如何制作这个网页弹出菜单?
- flutter - 是否可以计算firestore中文档中有多少张地图?如果是,是否可以使用 ListView.builder?
- ruby - 将 sqlite3 与 Ruby 一起使用,有没有办法将每一行读取为哈希而不是数组?
- ajax - 带有图像 base64 的 Ajax 请求在 Laravel 中显示 403 Forbidden
- php - 如何在 php 中使用正则表达式从 html 数据中获取一些值
- python-3.x - Anaconda Python Jupyter Notebook 中的内核错误