В самом деле, есть ли в стандарте SMT-LIB рациональная (а не только реальная) сортировка? Судя по его веб-сайту, это не так.
Если x — рациональное число, и мы есть ограничение x^2 = 2, тогда мы должны вернуться к ``неудовлетворительному''. Самое близкое, что я мог бы получить для кодирования этого ограничения, это следующее:
;;(set-logic QF_NRA) ;; intentionally commented out
(declare-const x Real)
(assert (= (* x x) 2.0))
(check-sat)
(get-model)
для которого z3 возвращает решение, так как есть решение (иррациональное) в вещественных числах. Я понимаю, что у z3 есть своя рациональная библиотека, которую он использует, например, при решении ограничений QF_LRA с помощью адаптации алгоритма Simplex. Кстати, есть ли решатель SMT, который поддерживает рациональные числа на входном уровне?