Как использовать кортежи в SMT-lib?

Я совершенно уверен, что можно будет описывать кортежи с использованием синтаксиса SMT-lib, особенно для решателя Z3. Однако я не могу найти способ сделать это. Я нашел только эту страницу документации , но не понимаю, как ее использовать в z3 -in.

Мои проблемы до сих пор:

      (declare-const t (Prod Int Bool))
(error "line 1 column 19: unknown sort 'Prod'")
(declare-const t (Tuple Int Bool))
(error "line 2 column 18: unknown sort 'Tuple'")
(declare-const t (Pair Int Bool))
(error "line 3 column 18: unknown sort 'Pair'")

2 ответа

В дополнение к тому, что сказал Кристоф, прямо в документе SMTLib есть пример: http://smtlib.cs.uiowa.edu/papers/smt-lib-reference-v2.6-r2021-05-12.pdf

В Разделе 4.2.3 вы можете найти:

      (declare-datatype Pair (par (X Y) ((pair (first X) (second Y)))))

Если ты просто хочешь IntxBool, то вы можете упростить:

      (declare-datatype PairIntBool (par () ((pair (first Int) (second Bool)))))

В общем, вы должны прочитать Раздел 4.2.3, чтобы узнать, как объявлять и использовать новые типы данных.

Ваша ссылка указывает на OCAML API, т.е. это не имеет ничего общего с SMT. Кортежи - это особый случай типов данных, для которых есть раздел в по РуководствеZ3 .

Другие вопросы по тегам