在SMT-LIB中表示C结构

在SMT-LIB中表示C结构,c,smt,C,Smt,我试图使用Z3解算器(它在SMT-LIB上工作)在涉及结构的C程序上进行推理。我想用某种方式来表示struct是一个包含SMT-LIB中其他变量的变量,但我找不到这样做的方法。有人知道在SMT-LIB中表示C结构的方法吗?您可以使用SMTLib 2.6的代数数据类型功能来建模结构。见本规范第4.2.3节 该特性不仅允许常规结构声明,还允许递归声明;i、 例如,您还可以为具有相同类型字段的结构建模 我应该补充一点,SMT中的代数数据类型实际上比您需要的更一般,它们实际上可以用于对使用不同代数构造函

我试图使用Z3解算器(它在SMT-LIB上工作)在涉及结构的C程序上进行推理。我想用某种方式来表示struct是一个包含SMT-LIB中其他变量的变量,但我找不到这样做的方法。有人知道在SMT-LIB中表示C结构的方法吗?

您可以使用SMTLib 2.6的代数数据类型功能来建模结构。见本规范第4.2.3节

该特性不仅允许常规结构声明,还允许递归声明;i、 例如,您还可以为具有相同类型字段的结构建模

我应该补充一点,SMT中的代数数据类型实际上比您需要的更一般,它们实际上可以用于对使用不同代数构造函数构造的值进行建模。(对于简单的记录情况,只需使用一个构造函数即可。)

代数数据类型是SMTLib中的一个新特性,但Z3和CVC4都支持它。解算器的质量可能因您使用的功能而异,但如果您只是使用数据类型来构造和解构值,那么它应该可以很方便地工作