Я использую решатель Z3 SMT для решения проблемы, которую я выразил в логике QF_BV, используя язык SMTLIB 2.Получение «хорошего» unsat-core с z3 (логика QF_BV)
Модель неудовлетворительна, и я пытаюсь получить решатель для создания unsat-core.
Моя модель состоит из нескольких обязательных ограничений, которые я указываю с помощью операторов assert
.
Утверждения, которые я хочу рассматривать для ненасыщенных генераторов, были указаны с использованием конструкции (assert (! (EXPR) :named NAME))
.
Z3 дает мне unsat
, как и ожидалось. Тем не менее, Z3 всегда, кажется, сбрасывает «тривиальное» unsat-core, состоящее из ВСЕХ названных утверждений.
Я знаю, что существует подмножество моих названных утверждений, которое является ненасыщенным ядром. Я нашел это ядро с помощью Yices SMT solver, что часто дает мне относительно небольшие unsat-core. Модель Yices такая же, как модель Z3 (в значительной степени линейный перевод с SMT2 на входной язык Yices).
Производит «хорошие» ненасыщенные сердечники специальную функцию, или есть какие-либо общие предложения/изменения, которые я мог бы сделать, чтобы помочь Z3 дать мне лучшее ядро?
Спасибо, что ответили! Я загрузил образец сценария [здесь] (https://gist.github.com/2fe5ce8cf42af9ffaf59). Я привел краткое описание, чтобы помочь понять. Не могли бы вы посмотреть, есть ли у вас какие-либо указатели на меня? – dhrumeel
Я получил ваш скрипт, я обновлю ответ. BTW, отсутствуют некоторые символы '' '' перед некоторыми битовыми векторами. –