Утверждения именования Microsoft Z3

Мне нужно назвать некоторые утверждения в моей модели z3, чтобы она могла генерировать ненасыщенные ядра.

Я могу сделать это вручную следующим образом:

(assert (! (assertion) :named x))

Мне просто нужно сделать это напрямую с помощью .NET API.

любая помощь?


person Daniel    schedule 22.04.2013    source источник


Ответы (1)


Z3 не поддерживает это напрямую через .NET API. Вместо этого следует создать логическую константу (имя, например, x), которую затем можно использовать для утверждения условных ограничений, например,

solver.AssertAndTrack(constraint, x);

Затем ограничение получает имя x, и эта константа используется для ссылки на него в ненасыщенных ядрах. Пример на Python см. также в этом другом вопросе; стратегия та же самая в .NET API, только имена функций немного отличаются.

person Christoph Wintersteiger    schedule 23.04.2013
comment
Кристоф: метод существует, и его вызов работает нормально. Однако, когда unsat, все еще не генерируется unsat-core. - person Cristiano Sousa; 24.04.2013
comment
Я полагаю, вы тогда не включили генерацию ядра unsat. Обратите внимание, что MkGoal принимает логические параметры, которые включают модели, ненасыщенные ядра или доказательства. Также должна быть включена глобальная опция unsat_core. - person Christoph Wintersteiger; 29.04.2013
comment
Кристоф: опция включена. проблема заключается в самом JAVA API, он немного ошибочен. Иногда он генерирует unsatcore, а иногда нет. - person Cristiano Sousa; 15.05.2013
comment
Я понимаю. Не знаю, как это могло произойти. У вас есть пример, который показывает это неустойчивое поведение? - person Christoph Wintersteiger; 17.05.2013