是否可以使用LLVM字节码作为Z3输入?

是否可以使用LLVM字节码作为Z3输入?,llvm,z3,Llvm,Z3,我有一个LLVM字节码的描述,我需要作为Z3输入传递。如果可以做到,怎么做到??如果没有,有什么工具可以做到这一点吗?这个问题并不完全明确,但不妨看看SMACK工具(),它使用LLVM的clang编译C程序(带有断言),并使用Boogie的中间表示法(),这样您就可以查询Z3程序中的断言了 如果这不能直接满足您的需要,那么源代码是可用的,因此您可以看到它是如何将断言和LLVM位代码文件转换为Boogie的中间表示形式的。问题并不完全明确,但可以查看编译C程序(带有断言)的SMACK工具()使用L

我有一个LLVM字节码的描述,我需要作为Z3输入传递。如果可以做到,怎么做到??如果没有,有什么工具可以做到这一点吗?

这个问题并不完全明确,但不妨看看SMACK工具(),它使用LLVM的clang编译C程序(带有断言),并使用Boogie的中间表示法(),这样您就可以查询Z3程序中的断言了


如果这不能直接满足您的需要,那么源代码是可用的,因此您可以看到它是如何将断言和LLVM位代码文件转换为Boogie的中间表示形式的。

问题并不完全明确,但可以查看编译C程序(带有断言)的SMACK工具()使用LLVM的clang并使用Boogie的中间表示(),这样您就可以查询Z3程序中的断言


如果这不能直接满足您的需要,那么源代码是可用的,因此您可以看到它如何将断言和LLVM位代码文件转换为Boogie的中间表示形式。

两个可以将C代码转换为Z3格式的工具可以处理:

1) 打()

这将使用LLVM位代码作为中间表示,将带注释的C代码转换为Boogie语言。然后可以使用Boogie工具()生成Z3可以检查的验证条件。然而,手动注释代码可能是一项要求很高的任务。特别是,您必须为所有循环编写归纳不变量,并为您的C函数编写充分的前置/后置条件,以证明您的程序满足其规范

2) 不明飞行物()


该工具可以通过LLVM位代码将C转换为SMT-LIB Horn逻辑。结果可以通过Z3的一个定点引擎进行检查。在这种方法中,您不必手动注释循环和过程(因为Z3自己会发现这些注释),但该工具的容量要小得多。

两个可以将C代码转换为Z3格式的工具可以处理:

1) 打()

这将使用LLVM位代码作为中间表示,将带注释的C代码转换为Boogie语言。然后可以使用Boogie工具()生成Z3可以检查的验证条件。然而,手动注释代码可能是一项要求很高的任务。特别是,您必须为所有循环编写归纳不变量,并为您的C函数编写充分的前置/后置条件,以证明您的程序满足其规范

2) 不明飞行物()


该工具可以通过LLVM位代码将C转换为SMT-LIB Horn逻辑。结果可以通过Z3的一个定点引擎进行检查。在这种方法中,您不必手动注释循环和过程(因为Z3自己会发现这些注释),但该工具的容量要小得多。

对LLVM位代码执行静态分析。它自动计算循环不变量并检查某些故障条件(如UFO)的可达性;您可以使用断言和假设。它在内部做的一件事是将LLVM位代码中的无循环程序转换为表示其语义的SMT公式。

对LLVM位代码执行静态分析。它自动计算循环不变量并检查某些故障条件(如UFO)的可达性;您可以使用断言和假设。它在内部做的一件事是将LLVM位代码中的无循环程序转换为表示其语义的SMT公式。

LLVM IR描述过程程序。Z3证明了定理。这两件事显然不是同构的,所以你必须给出更多关于你想做什么的细节。您是否试图证明某个程序的某些内容(在LLVM IR中给出)?你想用LLVM IR编码一个定理/证明吗?我有一部分程序是用LLVM字节码编写的,需要用Z3来证明。你可能用的是我不熟悉的Z3术语,但我要冒一个险,声称这毫无意义:程序不是定理。您想证明程序的某些属性/语句吗?如果是,哪一个?LLVM IR描述程序性程序。Z3证明了定理。这两件事显然不是同构的,所以你必须给出更多关于你想做什么的细节。您是否试图证明某个程序的某些内容(在LLVM IR中给出)?你想用LLVM IR编码一个定理/证明吗?我有一部分程序是用LLVM字节码编写的,需要用Z3来证明。你可能用的是我不熟悉的Z3术语,但我要冒一个险,声称这毫无意义:程序不是定理。您想证明程序的某些属性/语句吗?如果是,哪一个?