Я создал собственный плагин теории, который на данный момент ничего не делает. Все обратные вызовы реализованы и зарегистрированы, но они просто возвращаются. Затем я считываю набор из declare-consts, declare-funs и asserts, используя Z3_parse_smtlib2_string, и передаю полученный ast в Z3_assert_cnstr. Последующий вызов Z3_check_and_get_model завершается со следующей ошибкой:
Обратный вызов mk_fresh_ext_data не был установлен для пользовательской теории, вы должны использовать Z3_theory_set_mk_fresh_ext_data_callback
Насколько я могу судить, Z3_theory_set_mk_fresh_ext_data_callback не существует.
Используя ту же строку, но без регистрации теоретического плагина, Z3_check_and_get_model возвращает sat и выдает ожидаемую модель.
Я использую версию 4 и 64-битные библиотеки Linux.
Полный пример находится здесь: http://pastebin.com/hLJ8hFf1.