Неограниченная форма в ограниченную форму(CNF)

#optimization #boolean #z3 #n-queens #sat

#оптимизация #логический #z3 #n-королевы #сидел

Вопрос:

Мне нужно преобразовать неограниченную пропозициональную формулу в CNF, а затем в 3-SAT. Я знаю Правила переписывания для перевода формул в Конъюнктивную Нормальную форму

 α ↔ β (¬α ∨ β) ∧ (¬β ∨ α)  α → β ¬α ∨ β (4.2) ¬(α ∨ β) ¬α ∧ ¬β (4.3) ¬(α ∧ β) ¬α ∨ ¬β (4.4) ¬¬α α (4.5) α ∨ (β ∧ γ) (α ∨ β) ∧ (α ∨ γ) (4.6) (α ∧ β) ∨ γ (α ∨ γ) ∧ (β ∨ γ   

Но я не понимаю, как я нахожу реальный жизненный пример концепции. Не могли бы вы помочь в реализации. Я не могу найти примера из реальной жизни. Спасибо.

На самом деле я пытаюсь показать, что неограниченные формулы могут быть преобразованы в ограниченные формы, и решение для обоих одинаково. Поэтому я пишу любую неограниченную пропозициональную формулу, преобразую ее в CNF, а затем в 3-SAT(вручную), таким образом, я могу показать аналогичный результат. Таким образом, мне нужны USAT-org и USAT-converted, где org-это неограниченная формула, а преобразованная формула в 3-CNF в качестве синтаксиса SMT (файлы SMT-LIB2)

Ответ №1:

Вы можете делать это по одному за раз. Давайте возьмем, к примеру, второй:

 α → β  

становится:

 ¬α ∨ β  

В SMTLib вы докажете эквивалентность этих двух выражений, подтвердив отрицание их эквивалентности и проверив unsat . Идея состоит в том, что если отрицание неудовлетворительно, то эквивалентность должна соблюдаться для всех значений.

 (set-option :produce-models true) (set-logic QF_BV) (declare-fun alpha () Bool) (declare-fun beta () Bool)  (define-fun lhs () Bool (=gt; alpha beta)) (define-fun rhs () Bool (or (not alpha) beta))  (assert (not (= lhs rhs))) (check-sat)  

Это печатает:

 unsat  

Таким образом, вышеизложенное означает, что преобразование корректно для произвольных значений alpha и beta .

Используя один и тот же трюк, вы должны доказать каждое из своих превращений. Затем это немного мета-рассуждения (или вы можете сделать ручную индукцию самостоятельно), чтобы показать, что если вы примените эти преобразования ко всем подформулам, пока все они не будут записаны, вы сможете преобразовать произвольные формулы в эту форму. Обратите внимание, что этот последний шаг не может быть выполнен непосредственно с помощью решателя SMT, так как он нуждается в индукции; но вы можете либо выполнить ручное доказательство использования правильного доказательства теоремы, такого как Isabelle/ACL2/Hol/Lean и т. Д.