微软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(); ...

应该可以带你到那里。