У меня вопрос о том, как Z3 постепенно решает проблемы. Прочитав некоторые ответы здесь, я нашел следующее:
- Существует два способа использования Z3 для инкрементного решения: один - режим push/pop (stack), другой - предположения. Мягкие/жесткие ограничения в Z3.
- В режиме стека z3 забудет все изученные леммы в области глобальной (я прав?) даже после того, как один локальный "поп" Эффективность усиления ограничений в решателях SMT
- В режиме допущений (я не знаю имени, это имя, которое приходит мне на ум), z3 не упростит некоторые формулы, например. распространение значения. изменение поведения z3 по запросу для unsat core
Я сделал некоторое сравнение (вы можете запросить формулы, они просто слишком велики, чтобы поставить на рост 4fun), но вот мои наблюдения: по некоторым формулам, включая кванторы, режим допущений выполняется быстрее. В некоторых формулах с большим количеством логических переменных (переменные допущений) режим стека быстрее, чем режим допущений.
Выполняются ли они для определенных целей? Как работает инкрементное решение в Z3?