Сокращение количества используемых предложений с использованием цели доказательства в Z3

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

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

1 ответ

Решение

Да, удаление не относящихся к делу фактов может иметь большое значение. Предположим, что у нас есть неудовлетворительная формула вида F_1 and F_2 and (not G), Более того, допустим, что F_1 and (not G) неудовлетворительно, и F_2 выполнимо. F_2 это то, что вы называете не имеет значения. Если есть дешевый способ удалить F_2 перед отправкой формулы в Z3, это, вероятно, будет иметь большое значение.

У Z3 есть эвристика для "игнорирования" не относящихся к делу фактов, но это всего лишь эвристика. Для нашего примера наихудший сценарий F_2 это действительно трудно для Z3 удовлетворить. Z3, по сути, пытается построить интерпретацию / решение, которое удовлетворяет формуле ввода (формула F_1 an F_2 and (not G) в нашем рабочем примере). Формула является неудовлетворительной, когда Z3 может показать, что невозможно построить интерпретацию. На практике формула F_2 не имеет значения для Z3, только если он может быстро показать, что он выполним, и интерпретация / решение для F_2 не конфликтует F_1 and (not G), Если это не так, Z3 может тратить много ресурсов с F_2,

Другие вопросы по тегам