Z3 从模型中获取具体数组值

Z3 从模型中获取具体数组值,z3,z3py,Z3,Z3py,我使用Z3检查数组属性片段中公式的可满足性。Z3返回的数组变量模型通常使用其他if表达式、if-then-else案例分析等表示。我想以某种方式解析Z3输出的模型,并显式创建满足输入SMT-LIB公式的数组 例如,我希望能够以某种方式将Z3输出的模型简化为以下形式: A -> { 1 -> 3 2 -> 4 else -> 6 } 是否有一些简单的方法来遍历模型(使用C API?)并创建一个表示模型的显式数组 不幸的是,消息中描述的输出格式不足以描述数组属性

我使用Z3检查数组属性片段中公式的可满足性。Z3返回的数组变量模型通常使用其他if表达式、if-then-else案例分析等表示。我想以某种方式解析Z3输出的模型,并显式创建满足输入SMT-LIB公式的数组

例如,我希望能够以某种方式将Z3输出的模型简化为以下形式:

A -> {
  1 -> 3
  2 -> 4
  else -> 6
}

是否有一些简单的方法来遍历模型(使用C API?)并创建一个表示模型的显式数组

不幸的是,消息中描述的输出格式不足以描述数组属性片段中每个可满足公式的模型。例如,考虑以下简单示例

(declare-fun f (Int) Int)
(declare-const a Int)
(declare-const b Int)

(assert (forall ((i Int) (j Int)) (=> (<= i j) (<= (f i) (f j)))))
(assert (< (f a) (f b)))

(check-sat)
(get-model)
(声明f(Int)Int)
(声明常量为Int)
(声明常量b Int)
(断言(对于所有((i Int)(j Int))(=>(