检查Z3型号是否满足约束的最快方法? BitVectors,Z3 3.2,C#API,x64,多线程

时间:2012-08-04 01:56:28

标签: z3

在Z3中给出一组约束(断言),我想知道检查我已经完成这些断言的模型的最有效方法是什么。该模型是从类似的约束集中获得的。我需要一个是/否答案,而不是Specifying initial model values for Z3中的软约束。

我使用x64版本的Z3 3.2操作位向量,在Windows 7 x64上使用C#API。我通过实例化多个Z3 Context对象进行多线程处理,每个线程一个。由于缺乏对多线程的支持,我没有使用Z3 4.0。

我目前的方法是使用Context.AssertCnstr(Term)将模型断言为一组额外的约束,然后简单地调用Context.Check()

1 个答案:

答案 0 :(得分:1)

Z3公开了一个名为“Z3_model_eval”或“Model.Eval”的方法(来自C#) 需要一个模型和一个表达式。如果是,评估可能会失败 表达式包含量词,评估者无法确定 量化公式的真值以模型为模。 如果模型评估成功,您可以检查返回的值以确定 该模型是否强制断言为真。 Z3_model_eval的文档更详细地详述了合同:

http://research.microsoft.com/en-us/um/redmond/projects/z3/group__capi.html#ga86670c291a16640b932e7892176a9d1b

模型评估不会检测重言式,因此将模型序列化为 公式和Z3检查模型和断言之间的含义 可能更适合某些用途。