Как я могу сказать Z3, с чего начать при решении формулы?

В настоящее время я имею дело с ситуацией, когда утверждения Z3 содержат большое количество неравенств и равенств. Они зависят друг от друга таким образом, что наиболее эффективно начать решение формулы с присвоения значений переменным, используемым в равенствах.

Есть ли способ изменить эвристику Z3 таким образом, чтобы решатель всегда предпочитал «начинать» с этих формул?

Мое предположение состояло бы в том, чтобы использовать тактику, которая изначально обрабатывает цель, содержащую упомянутые равенства. Затем он продолжит работу с другими утверждениями, при необходимости перезапустив весь процесс.

Однако я не знаю, как это реализовать. Как создать собственные цели на основе наборов формул?


person Community    schedule 10.05.2017    source источник


Ответы (1)


Вы можете попробовать утвердить первый набор формул, который вам нужен, затем выдать чек-сат, выдать следующий набор, выдать чек-сат; повторять по мере необходимости. Вы также можете использовать push-pop, чтобы вернуться к этим точкам, если хотите.

Выдавая таким образом несколько проверок, вы заставите решатель исследовать формулы, которые вы утверждали до этого момента. Будет ли это на самом деле достигать того, что вы хотите, конечно, зависит от того, как именно выглядят ваши формулы и сколько решатель может получить при каждом вызове check-sat.

person alias    schedule 12.05.2017
comment
Спасибо, я попробую это! - person ; 12.05.2017