出于好奇,我想知道如何通过OCaml API为Z3求解器添加一个自由常量,即对应的内容
(declare-const k!0 (_ BitVec 5))
以下尝试产生invalid argument
例外。
let cfg = [("model", "true"); ("proof", "false")] in
let ctx = mk_context cfg in
let solver = Solver.mk_solver ctx None in
Solver.add solver [Expr.mk_const ctx (Symbol.mk_int ctx 0) (BitVector.mk_sort ctx 5)]
有没有办法在不添加包含常量的约束的情况下执行此操作并简化为true?
答案 0 :(得分:1)
Solver.add
期望一个布尔排序项,即一个断言,但在这个例子中添加了一个位向量类型的常量,这就是它抱怨无效参数的原因。
通常,常量(或任何其他函数)不需要通过API在单独的步骤中显式声明,它们可以在表达式/断言中构造和使用,而无需声明它们。
默认情况下,这些常量将被假定为存在性,否则它们必须明确量化(参见Quantifier模块)。