Я пытаюсь использовать формат SMTLIB для выражения членства в Z3:
(declare-const a (Set Int))
;; the next two lines parse correctly in CVC4, but not Z3:
(assert (= a (as emptyset (Set Int))))
(assert (member 12 a))
;; these work in both solvers
(assert (= a (union a a)))
(assert (subset a a))
(assert (= a (intersection a a)))
(check-sat)
Похоже, что функции emptyset
и member
анализируются, как и ожидалось, в CVC4, но не в Z3.
Из проверки API (например, здесь: https://z3prover.github.io/api/html/group__capi.html), Z3 поддерживает пустые наборы и членство программно, но как это выразить в синтаксисе SMTLIB?