【发布时间】:2017-07-12 12:30:38
【问题描述】:
我正在使用 Z3 .Net API。我有一段简单的代码,我想在其中创建所有令人满意的模型。代码是这样的:
Solver solver = ctx.MkSolver();
Expr x = ctx.MkConst("x", ctx.MkBoolSort());
Expr y = ctx.MkConst("y", ctx.MkBoolSort());
BoolExpr constraint1 = ctx.MkBoolConst("Constraint1");
solver.AssertAndTrack(ctx.MkOr((BoolExpr)x, (BoolExpr)y), constraint1);
问题是,稍后在代码中,当我想枚举我使用此代码的所有模型时:
Model resultModel = pSolver.Model;
Console.WriteLine("x = {0}, y = {1}",
resultModel.Evaluate(pX),
resultModel.Evaluate(pY));
但也有一些模型,例如 if (X = true) then (Y = Y)。对于这些情况,我想表明实际上有两种模型,例如:
X = true, Y = true
X = true, Y = false
API 中是否有可以给我这些答案的功能,或者我应该使用内部编码来获得这些答案。
【问题讨论】:
标签: z3