我正在寻找有关如何将各种编程语言结构转换为Z3的讨论,而不会限制求解器的效率。
特别是,是否有一个算法和一套最佳实践规则,用于将以连续传递方式表示的函数/程序转换为Z3?
使用上下文是使用Z3实现编程语言的类型系统,因此解决方案必须高效且增量(例如,在Z3实例中保留以前的Z3 AST)。
我知道Boogie,但是如果可能的话,我正在寻找更轻量级的东西。
在某种程度上限制输入语言的语义是可以接受的,但目前还不能在SMTLIB中轻易表达。
我基本上正在寻找可以考虑用于各种典型语言结构的不同策略的讨论。
编辑:可以接受限制使输入语言不完整,并且只对小型程序片段(如库中的函数)合理有效。例如。输入语言可以是用于编写“静态检查”库的语言,这些库稍后会被编译为库,用于现有的动态编程语言,并在适当的情况下使用动态运行时断言。