Елиминиране на квантификатор - Още въпроси

Много благодаря на Джош и Леонардо за отговора на предишния въпрос.

Имам още няколко въпроса.

‹1> Помислете за друг пример.

(exists k) i * k > = 4 and k > 1.

Това има просто решение i > 0. (както за Int, така и за Real случай)

Въпреки това, когато се опитах да следвам,

(declare-const i Int)
(assert (exists ((k Int)) (and (>= (* i k)  4) (> k 1))))
(apply (using-params qe :qe-nonlinear true))

Z3 Не може да елиминира квантификатора тук.

Въпреки това, това може да елиминира за истински случай. (когато i и k са реални) Елиминирането на квантора по-трудно ли е за цели числа?

‹2> Използвам Z3 C API в моята система. Добавям някои нелинейни ограничения за цели числа с квантори в моята система. Z3 в момента проверява за задоволимост и ми дава правилен модел, когато системата е задоволителна.

Знам, че след елиминирането на квантора тези ограничения се редуцират до линейни ограничения.

Мислех, че z3 автоматично елиминира квантора, преди да провери задоволимостта. Но тъй като не можеше да направи това в случай 1 по-горе, сега мисля, че обикновено намира модел без елиминиране на квантификатор. Прав ли съм?

В момента z3 може да разреши ограниченията в моята система. Но може да се провали при сложни системи. В такъв случай, добра идея ли е да се направи елиминиране на квантора по някакъв друг метод без z3 и да се добавят ограничения към z3 по-късно?

‹3> Мога да се сетя да добавя реални нелинейни ограничения вместо целочислени нелинейни ограничения в моята система. В такъв случай, как мога да наложа z3 да извършва Quantifier Elimination с помощта на C-API?

‹4> И накрая, това добра идея ли е да наложите z3 да извършва Quantifier Elimination? Или обикновено намира модел по-интелигентно, без да прави Quantifier Elimination?

Благодаря.


z3
person Kaustubh Nimkar    schedule 03.05.2012    source източник


Отговори (1)


‹1> Теорията на нелинейната целочислена аритметика не допуска елиминиране на квантора (qe). Освен това проблемът с решението за нелинейна целочислена аритметика е неразрешим.

Спомнете си, че Z3 има ограничена поддръжка за елиминиране на квантори на нелинейни реални аритметични формули. Настоящата процедура се основава на виртуално заместване на термина. Бъдещите версии може да имат пълна поддръжка за нелинейна реална аритметика.

‹2> Елиминирането на квантификатора не е активирано по подразбиране. Потребителят трябва да го поиска. Z3 може да намери модели за задоволителни формули, дори когато елиминирането на квантора не е активирано. Той използва техника, наречена екземпляр на квантификатор, базиран на модел (MBQI). Онлайн урокът за Z3 има няколко примера, описващи възможностите и ограниченията на тази техника.

‹3> Трябва да го активирате, когато създавате обекта Z3_context. Всяка опция, зададена в командния ред, може да бъде предоставена по време на създаването на обект Z3_context. Ето един пример, който позволява изграждане на модел и елиминиране на квантора:

Z3_config cfg = Z3_mk_config();
Z3_context ctx;
Z3_set_param_value(cfg, "MODEL", "true");
Z3_set_param_value(cfg, "ELIM_QUANTIFIERS", "true");
Z3_set_param_value(cfg, "ELIM_NLARITH_QUANTIFIERS", "true");
ctx = mk_context_custom(cfg, throw_z3_error);
Z3_del_config(cfg);

След това ctx сочи към контекстен обект на Z3, който поддържа изграждане на модел и елиминиране на квантора.

‹4> MBQI модулът не е пълен дори за линейния аритметичен фрагмент. Онлайн урокът за Z3 описва фрагментите, които е пълен. MBQI модулът е добра опция за проблеми, които съдържат неинтерпретирани функции. Ако вашите проблеми използват само аритметика, тогава елиминирането на квантора обикновено е по-добро и по-ефективно. Като се има предвид това, няколко проблема могат бързо да бъдат решени с помощта на MBQI.

person Leonardo de Moura    schedule 03.05.2012
comment
Мисля, че в първия ред имате предвид нелинейната целочислена аритметика не допуска елиминиране на квантора. - person pad; 03.05.2012
comment
Благодаря много Леонардо. Само един въпрос - можете ли да обясните защо теорията на нелинейната целочислена аритметика не допуска елиминиране на квантора (qe)? - person Kaustubh Nimkar; 08.05.2012
comment
Това е следствие от първата теорема за непълнотата на Гьодел. Ако потърсите първата теорема за непълнотата на Гьодел, ще намерите няколко хубави (неофициални и формални) презентации на този резултат. - person Leonardo de Moura; 08.05.2012
comment
Още по-лошо е. Изпълнимостта в теорията на нелинейната (да се чете: полиномна) целочислена аритметика е неразрешима; тоест, доказано е (чрез поредица от резултати от Дейвис, Пътнам, Робинсън и Матиясевич), че нито един алгоритъм не може да каже, при даден полином с множество варианти, дали той има цели нули. Така човек дори не се нуждае от редуване на квантори; единичен блок от екзистенциални квантори го прави неразрешим. - person David Monniaux; 15.07.2013
comment
Дейвид (известен още като monniaux) е прав, проблемът е неразрешим дори без квантори. Следната свързана публикация има допълнителна информация: stackoverflow.com/questions/13898175/ - person Leonardo de Moura; 15.07.2013