Z3 имеет несколько механизмов для обработки квантификаторов: E-match, MBQI, суперпозиция и т. Д.
Хотя QBVF является разрешимым фрагментом, только механизм MBQI может решить это.
Модуль электронного соответствия эффективен только для того, чтобы показать, что формулы являются неудовлетворительными.
Он всегда будет неудачным (вернет неизвестное) для удовлетворительных случаев.
Модуль суперпозиции эффективен в чистых (без теорий) логических формулах первого порядка.
В некоторых версиях Z3 модуль MBQI не включен по умолчанию, поскольку он очень дорогой.
Некоторые приложения, такие как VCC и Spec #, используют очень сложные количественные формулы, которых нет ни в одном разрешаемом фрагменте, который может поддерживаться MBQI.
Таким образом, модуль MBQI просто накладные расходы для этих приложений.
В Z3 3.1 (доступно для загрузки на веб-сайте Z3) MBQI включен по умолчанию.
В грядущем Z3 3.2 будет официально поддерживаться логика UFBV. UFBV - это имя SMT-LIB для QBVF.
Таким образом, вы сможете использовать (set-logic UFBV)
, и Z3 автоматически настроится для этой логики.
Что касается команды eval
, это ошибка, я ее исправлю. Исправление будет доступно в Z3 3.2.