Python z3 smt solver采用什么形式的输入?如何使用文件读取需要求解的方程?

Python z3 smt solver采用什么形式的输入?如何使用文件读取需要求解的方程?,python,z3,z3py,Python,Z3,Z3py,我写了上面的代码,但它不工作。它不接受字符串作为输入,我无法找到它接受什么类型的输入。我们基本上可以按照。请记住,这是一个很大的漏洞,而且不安全,因为文件read.txt可能包含任意Python命令。无论如何,下面的代码将计算输入文件的每一行,并将结果对象添加到解算器s。如果文件read.txt包含x+y==2,则输出为: from z3 import * x = Int('x') y = Int('y') s = Solver() try: f = open("read.txt","r

我写了上面的代码,但它不工作。它不接受字符串作为输入,我无法找到它接受什么类型的输入。

我们基本上可以按照。请记住,这是一个很大的漏洞,而且不安全,因为文件
read.txt
可能包含任意Python命令。无论如何,下面的代码将计算输入文件的每一行,并将结果对象添加到解算器
s
。如果文件
read.txt
包含
x+y==2
,则输出为:

from z3 import *
x = Int('x')
y = Int('y')
s = Solver()
try:
    f = open("read.txt","r")
    try:
        str = f.read()
        length = len(str)
        s.add(str)
    finally:
        f.close()
except IOError:
    pass
以下是更新的代码:

从z3导入*
x=Int('x')
y=Int('y')
s=解算器()
尝试:
f=打开(“read.txt”、“r”)
尝试:
对于f中的l:
s、 添加(eval(l))
最后:
f、 关闭()
除IOError外:
通过
打印s.检查()
打印s.model()
另一个解决方案是以SMT-LIB 2.0格式创建文件,并使用以下文章中描述的方法:


read.txt的内容看起来怎么样?您是否尝试过以SMTLib2格式加载断言?请尝试执行类似于
eval('s.add({})').format(str.strip())
的操作。顺便说一句,
str
是内置变量的名称,不应用作变量的名称。read.txt包含形式为x+y==2的方程式
sat
[y = 0, x = 2]