Я пытаюсь решить проблему, связанную с пропозициональной выполнимостью (с кванторами) и линейной арифметикой.
Я сформулировал задачу, и Z3 в состоянии ее решить, но это занимает неоправданно много времени.
Я пытался помочь Z3, указав тактику, но не добился большого прогресса (я не разбираюсь в логических теориях).
Ниже приведена очень упрощенная проблема, которая отражает суть того, что я пытаюсь решить. Может ли кто-нибудь дать предложения?
Я пытался читать о таких вещах, как метод Нельсона Оппена, но там было много незнакомых обозначений, и чтобы их выучить, потребуется много времени.
Кроме того, позволяет ли Z3 пользователям настраивать эти конфигурации? Наконец, как я могу использовать эту тактику с z3py?
(declare-datatypes () ((newtype (item1) (item2) (item3))))
(declare-fun f (newtype newtype) Bool)
(declare-fun cost (newtype newtype) Real)
(assert (exists ((x newtype)(y newtype)) (f x y)))
(assert (forall ((x newtype)(y newtype)) (=> (f x y) (> (cost x y) 0))))
(assert (forall ((x newtype) (y newtype)) (<= (cost x y) 5)))
(check-sat)
(get-model)