我们可以从字符串中评估 z3py 表达式吗?

Can we evaluate z3py expressions from a string?

我在文档中找不到关于该主题的任何内容。我试过:s.add("Or(a==1, a==2, a==3), Or(b==1, b==2, b==3), Or(c==1, c==2, c==3)"),但这不起作用。可能吗?

在 sympy 中,我们可以使用 sympifyparse_expr

编辑:

我知道我可以只使用 pythons eval。它也有 parse_smt2_string(),但没有参考 SMT2 的工作原理。

eval 是要走的路。 z3py 不支持以任何方式解析本质上是 Python 程序的内容。请注意,为了使它起作用,您应该以某种方式在环境中包含变量 a/bc,通过显式声明或通过 eval'ing 他们的声明像 "a, b, c = Ints('a b c')"

这样的字符串

关于您的评论“没有参考 SMT2 的工作原理:”SMTLib 是所有 SMT-solvers 接受的标准格式,包括 z3。看这里:http://smtlib.cs.uiowa.edu/