Я пытаюсь определить теорию множеств (объединение, пересечение и т. Д.) для Z3 с использованием интерфейса SMTLIB. К сожалению, мое текущее определение зависает z3 для тривиального запроса, поэтому, я думаю, мне не хватает некоторых простых опций/флагов.Определение теории наборов с Z3/SMT-LIB2
вот постоянную ссылку: http://rise4fun.com/Z3/JomY
(declare-sort Set) (declare-fun emp() Set) (declare-fun add (Set Int) Set) (declare-fun cup (Set Set) Set) (declare-fun cap (Set Set) Set) (declare-fun dif (Set Set) Set) (declare-fun sub (Set Set) Bool) (declare-fun mem (Int Set) Bool) (assert (forall ((x Int)) (not (mem x emp)))) (assert (forall ((x Int) (s1 Set) (s2 Set)) (= (mem x (cup s1 s2)) (or (mem x s1) (mem x s2))))) (assert (forall ((x Int) (s1 Set) (s2 Set)) (= (mem x (cap s1 s2)) (and (mem x s1) (mem x s2))))) (assert (forall ((x Int) (s1 Set) (s2 Set)) (= (mem x (dif s1 s2)) (and (mem x s1) (not (mem x s2)))))) (assert (forall ((x Int) (s Set) (y Int)) (= (mem x (add s y)) (or (mem x s) (= x y))))) (declare-fun z3v8() Bool) (assert (not z3v8)) (check-sat)
Любой намек на то, что я не хватает?
Кроме того, из того, что я могу сказать, нет стандартного кодирования заданных операций, например, SMT-LIB2 . Z3.mk_set_{add,del,empty,...}
(вот почему я пытаюсь получить эту функциональность с помощью квантификаторов.) Верно ли это? Или есть другой маршрут?
Спасибо!
Ranjit.
Thanks Leo! Вариант 1 выглядит великолепно. Поддерживается ли опция 2 в SMTLIB? (т. е. являются map и const в SMTLIB2)? –
Нет, опция 2 не входит в стандарт SMT-LIB :( –
привет, добавлена ссылка на пример, показывающий вариант 2. ваши операторы сотовой связи и карты ДЕЙСТВИТЕЛЬНО аккуратные! Спасибо! –