微软Z3导入SMT文件
Microsoft Z3 import SMT file
我想将 Z3(版本 4.5.0.1)与 .net 一起使用,想知道我是否可以使用 SMTLIB 文件。
所以我有这个简单的 smt 文件,我想在我的程序中加载它:
(declare-const x Int)
(declare-const y Int)
(assert (< x 4))
(assert (< (- y x) 1))
(assert (> y 1))
在 C# 中,我尝试了以下操作:
using(Context context = new Context(new Dictionary<string, string>() { { "model", "true" } })) {
context.ParseSMTLIB2String(Resources.SampleSMT2);
var solver = context.MkOptimize();
solver.Check();
Console.WriteLine($"model: {solver.Model}"); // empty
//BigInteger x = (solver.Model.Evaluate(...) as IntNum).BigInteger;
//BigInteger y = (solver.Model.Evaluate(...) as IntNum).BigInteger;
}
但我不知道如何解决 smt 文件中提供的问题,因为在
这个例子模型是空的。
ParseSMTLIB2String
returns 一个 BoolExpr
包含 smt2 文件中的断言,即类似于
BoolExpr be = context.ParseSMTLIB2String(...);
solver.Add(be);
solver.Check();
...
应该可以带你到那里。
我想将 Z3(版本 4.5.0.1)与 .net 一起使用,想知道我是否可以使用 SMTLIB 文件。 所以我有这个简单的 smt 文件,我想在我的程序中加载它:
(declare-const x Int)
(declare-const y Int)
(assert (< x 4))
(assert (< (- y x) 1))
(assert (> y 1))
在 C# 中,我尝试了以下操作:
using(Context context = new Context(new Dictionary<string, string>() { { "model", "true" } })) {
context.ParseSMTLIB2String(Resources.SampleSMT2);
var solver = context.MkOptimize();
solver.Check();
Console.WriteLine($"model: {solver.Model}"); // empty
//BigInteger x = (solver.Model.Evaluate(...) as IntNum).BigInteger;
//BigInteger y = (solver.Model.Evaluate(...) as IntNum).BigInteger;
}
但我不知道如何解决 smt 文件中提供的问题,因为在 这个例子模型是空的。
ParseSMTLIB2String
returns 一个 BoolExpr
包含 smt2 文件中的断言,即类似于
BoolExpr be = context.ParseSMTLIB2String(...);
solver.Add(be);
solver.Check();
...
应该可以带你到那里。