Eliminacja kwantyfikatora - więcej pytań

Wielkie dzięki Joshowi i Leonardo za udzielenie odpowiedzi na poprzednie pytanie.

Mam jeszcze kilka pytań.

<1> Rozważ inny przykład.

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

Ma to proste rozwiązanie i> 0. (zarówno w przypadku Int i Real)

Jednak kiedy próbowałem postępować,

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

Z3 Nie można tutaj wyeliminować kwantyfikatora.

Jednak może to wyeliminować rzeczywisty przypadek. (kiedy i i k są obydwoma rzeczywistymi) Czy eliminacja kwantyfikatora jest trudniejsza dla liczb całkowitych?

<2> Używam interfejsu API Z3 C w moim systemie. Dodaję pewne nieliniowe ograniczenia na liczbach całkowitych z kwantyfikatorami w moim systemie. Z3 sprawdza obecnie, czy jest spełniony, i daje mi poprawny model, gdy system jest zadowalający.

Wiem, że po eliminacji kwantyfikatora ograniczenia te zostają zredukowane do ograniczeń liniowych.

Pomyślałem, że z3 usuwa kwantyfikator automatycznie przed sprawdzeniem spełnienia. Ale ponieważ nie mogło tego zrobić w przypadku 1 powyżej, sądzę, że zwykle znajduje model bez eliminacji kwantyfikatora. Mam rację?

Obecnie z3 może rozwiązać ograniczenia w moim systemie. Ale może się nie udać w złożonych systemach. W takim przypadku, czy dobrym pomysłem jest wyeliminowanie kwantyfikatora inną metodą bez z3 i dodanie ograniczeń do z3 później?

<3> Mogę pomyśleć o dodaniu nieliniowych więzów rzeczywistych zamiast całkowitych nieliniowych ograniczeń w moim systemie. W takim przypadku, w jaki sposób mogę wymusić z3 wykonanie eliminacji kwantyfikatora przy użyciu C-API?

<4> Na koniec, czy dobrym pomysłem jest wymuszenie z3 na eliminację kwantyfikatora? Lub zwykle znajduje model bardziej inteligentnie bez eliminacji kwantyfikatora?

Dzięki.

questionAnswers(1)

yourAnswerToTheQuestion