微软Z3解决方案格式理解

Microsoft Z3 solution format understanding

我正在用 Z3 解决 SAT 问题。我得到了这份作业表格 Z3:

(model 
(define-fun B ((x!0 Int))
(ite (= x!0 1) false
(ite (= x!0 2) false
  true)))
(define-fun D ((x!0 Int))
 (or (= x!0 3) (= x!0 1))
(define-fun A ((x!0 Int))
  (ite (= x!0 1) false
  (ite (= x!0 4) false
    true)))
(define-fun C ((x!0 Int))
(ite (= x!0 5) false
  true))

我能理解B、D、C(B1、B2为假,其他(B3、B4、B5)为真)。 但是,您如何才能有意义地解释 D 的这个 OR 公式呢?应该是 D1 和 D3 是真的,D2、D4、D5 是假的,看起来它给出了正确的答案。但是为什么会以如此奇怪的形式呈现呢?

模型打印在 SMTLib 中未标准化,并且取决于您使用的底层类型(函数、数组、标量类型等)。Z3 将以某种内部格式打印。

要获取单个值,您可以随时执行以下操作:

(eval (D 0))

等检索单个值。