我正在用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为假,似乎给出了正确的答案。但是为什么它以这种奇怪的形式呈现呢?
答案 0 :(得分:1)
SMTLib中并未对模型打印进行标准化,并且取决于您使用的底层类型(函数,数组,标量类型等),Z3将以某种内部格式进行打印。
要获取单个值,您可以随时执行以下操作:
(eval (D 0))
等检索单个值。