C Z3:提取阵列解释

C Z3:提取阵列解释,c,arrays,z3,C,Arrays,Z3,如何使用C API提取Z3中数组的函数解释?当我使用以下实例查询Rise4Fun时: (declare-fun arr () (Array Int Int)) (assert (= 5 (select arr 3))) (check-sat) (get-model) (exit) ,我得到: sat (model (define-fun arr () (Array Int Int) (_ as-array k!0)) (define-fun k!0 ((x!1 Int))

如何使用C API提取Z3中数组的函数解释?当我使用以下实例查询Rise4Fun时:

(declare-fun arr () (Array Int Int))
(assert (= 5 (select arr 3)))
(check-sat)
(get-model)
(exit)
,我得到:

sat 
(model 
    (define-fun arr () (Array Int Int) (_ as-array k!0))
    (define-fun k!0 ((x!1 Int)) Int (ite (= x!1 3) 5 5))
)

是否可以提取
k!的函数解释!0是否仅使用C API?我尝试对数组常量声明以及SAT模型中为数组返回的术语应用
Z3\u model\u get\u func\u interp
,但始终得到
错误:无效参数

是的,这是可能的。最近有人提出了一个非常类似的问题,可以在这里找到答案和示例: