Переписывание формул

В этой статье (раздел 3.2) говорится, что z3 применяется переписывание/упрощение формул перед выполнением каких-либо других шагов.

Предположим, у меня есть формула в QF_UF, состоящая из нескольких операторов assert. Есть ли какое-либо правило перезаписи, которое каким-то образом «разрушило бы барьер» между различными утверждениями утверждения? Или, спрашивая наоборот: могу ли я быть уверен, что правила перезаписи применяются только локально, «внутри» одного утверждения утверждения?

Например, рассмотрим следующую формулу:

(set-logic QF_UF)
(set-option :auto-config false)
(set-option :PROOF_MODE  2)

(declare-fun a () Bool)
(assert a)
(assert (not a))

(check-sat)
(get-proof)

Могу ли я быть уверен, что доказательство будет содержать шаг решения для доказательства False, или возможно, что False будет завершено шагом перезаписи/упрощения?

Причина, по которой я спрашиваю, заключается в том, что для моего приложения каждый оператор assert имеет особую семантику. Переписывание/упрощение нескольких операторов assert сделало бы результирующее доказательство неудовлетворительности непригодным для использования (или, по крайней мере, очень трудным для использования) для меня.


z3
person Georg    schedule 24.04.2012    source источник
comment
Не могли бы вы описать, что вы пытаетесь сделать? Почему переписывание/упрощение нескольких утверждений сделает результаты непригодными для использования? Обратите внимание, что во время поиска Z3 будет выполнять шаги рассуждений по нескольким утверждениям. Не сделает ли это доказательства непригодными?   -  person Leonardo de Moura    schedule 24.04.2012
comment
Я пытаюсь переписать доказательство на чистое доказательство разрешения. По причинам, связанным с конкретным приложением, упрощения и перезаписи, происходящие внутри одного оператора assert, меня не интересуют. То есть я просто предположу, что оператор assert уже содержал упрощенную версию формулы. Меня интересуют все шаги рассуждений в утверждениях assert, и я должен как-то с ними справиться. Если бы я мог быть уверен, что между утверждениями не происходит упрощения, у меня было бы на один (трудный) случай меньше, пока я переписывал. Я надеюсь, что это делает это немного более ясным.   -  person Georg    schedule 25.04.2012


Ответы (1)


Z3 3.2 применяет несколько этапов предварительной обработки. Использование (set-option :auto-config false) отключит большинство из них. Вы также должны включить следующие два параметра:

(set-option :propagate-booleans false)

(set-option :propagate-values ​​false)

person Leonardo de Moura    schedule 25.04.2012
comment
Спасибо за информацию. Будут ли эти параметры гарантировать отсутствие перезаписи/упрощения утверждений утверждений? - person Georg; 02.05.2012
comment
Да, это гарантирует, что в Z3 3.2. - person Leonardo de Moura; 02.05.2012