Преобразувайте формулата в CNF

Има ли начин да се използва z3 за преобразуване на формула в CNF (използвайки кодиране в стил Tseitsin)? Търся нещо като командата simplify, но гарантираща, че върнатата формула е CNF.


z3
person Georg    schedule 12.06.2012    source източник


Отговори (1)


Можете да използвате командата apply, за да го направите. Можем да предоставим произволни тактики/стратегии на тази команда. За повече информация относно тактиките и стратегиите в Z3 4.0 вижте урока http://rise4fun.com/Z3/tutorial/strategies

Командата (help-tactic) може да се използва за показване на всички налични тактики в Z3 4.0 и техните параметри. Programmatic е по-удобен за използване и гъвкав. Ето урок, базиран на новия API на Python: http://rise4fun.com/Z3Py/tutorial/strategies. Същите възможности са налични в .Net и C/C++ API.

Следният скрипт демонстрира как да конвертирате формула в CNF с помощта на тази рамка:

http://rise4fun.com/Z3/TEu6

person Leonardo de Moura    schedule 12.06.2012
comment
Страхотно благодаря! Точно това търсех. Само още една забележка: Има ли начин да накарам z3 да ми каже функцията, която представлява всяка от новите променливи (k!0, k!1, ...)? Или трябва да направя обратен инженеринг на това от аксиомите на Цейтин? - person Georg; 12.06.2012
comment
Не, ние не предоставяме тази информация. Z3 обаче произвежда конвертор на модел за всяка стъпка на предварителна обработка. Конверторът на модел е функция, която преобразува модела за получената формула в модел за оригиналната формула. За преобразуване на CNF, конверторът на модела е прост. Той просто премахва интерпретацията на новите променливи k!0, k!1, ... По този начин не предоставя информацията, която искате. - person Leonardo de Moura; 13.06.2012
comment
Добре, все пак много благодаря. Реконструирането на функцията за новите променливи от аксиомите на Цейтин така или иначе изглежда доста лесно. - person Georg; 13.06.2012
comment
@LeonardodeMoura Последната връзка е повредена ;( - person RexYuan; 13.11.2017