如何在Z3中打印出整个符号表达式?

时间:2016-09-22 17:49:29

标签: z3 z3py

我正在使用Z3Py进行一些分析任务,而且我想多次打印出符号表达式。例如,

a = BitVecVal("test", 32) + 13
print a

但是,我发现一旦Z3表达式变得非常大,就无法完全打印出来。相反,“省略号”将经常用于简化表达式...

所以这是我的问题,我怎样才能完全打印出Z3表达式?我可以使用任何特定的API吗?

1 个答案:

答案 0 :(得分:1)

最具扩展性的方法是使用SMT-LIB打印机。 例如:

 x = Int('x')
 for i in range(12):
    x = x + x

 print x.sexpr()

将打印:

(let ((a!1 (+ (+ (+ x x) (+ x x)) (+ (+ x x) (+ x x)))))
(let ((a!2 (+ (+ (+ a!1 a!1) (+ a!1 a!1)) (+ (+ a!1 a!1) (+ a!1 a!1)))))
(let ((a!3 (+ (+ (+ a!2 a!2) (+ a!2 a!2)) (+ (+ a!2 a!2) (+ a!2 a!2)))))
  (+ (+ (+ a!3 a!3) (+ a!3 a!3)) (+ (+ a!3 a!3) (+ a!3 a!3))))))

您可以使用函数'set_pp_option'控制漂亮打印机使用的格式化程序上的参数。您必须查看z3printer.py的源代码,以确定哪些选项可以解决问题。