使用 python api 打印 z3 表达式

Printing z3 expressions using the python api

我正在尝试使用 z3 来简化由 S2E/KLEE

生成的一些表达式
from z3 import *

f = open("query.smt2").read()
expr = parse_smt2_string(f)

print(expr)
print(simplify(expr))

但是好像只记录了200行。我也试过将它写入文件,但结果相同。

g = open("simplified_query.smt2", 'w')
g.write(str(simplify(expr)))
g.close();

我应该如何记录整个表达式?

示例 input/output:https://paste.ee/p/tRwxQ

您可以像您一样使用Python漂亮的打印机打印表达式。如果它们变得非常大并且漂亮的打印机效率不高,它会切断表达式。您可以将一些设置添加到漂亮的打印机中,以强制它打印完整的表达式。该函数称为 set_pp_option 并在 z3printer.py 中定义。主要选项称为max_depth。其他选项定义为格式化程序中的字段 class.

您还可以使用方法 "sexpr()".

以 SMT2 格式打印表达式

顺便说一句,您上传的文件没有处理,因为它是 UTF8 格式,但这与您的问题正交,并且可能是您上传重现的方式的产物。