CVC4-эквивалент Z3 seq.unit

Я пытаюсь запустить следующий пример unsat как с Z3, так и с CVC4. Если я заменю "\x00" на (seq.unit #x00), то это не проблема для Z3, но CVC4 жалуется, что не знает seq.unit.

(declare-fun AB_serial_1_version_0 () String)
(declare-fun AB_serial_1_version_1 () String)

(assert (= (str.len AB_serial_1_version_0) 16))
(assert (= (str.len AB_serial_1_version_1) (str.len AB_serial_1_version_0)))
(assert (= (str.at AB_serial_1_version_1 15) "\x00"))
;;; (assert (= (str.at AB_serial_1_version_1 15) (seq.unit #x00)))

(assert (= (str.indexof (str.substr AB_serial_1_version_1 0 (- 16 0)) "\x00" 0) (- 0 1)))
(check-sat)

Вот вызов командной строки:

cvc4 --strings-exp --quiet --produce-models --lang=smt2 ./example.txt

И вот на что жалуется cvc4, когда я вместо этого использую строку seq.unit:

(error "Parse Error: ./example.txt:7.54: Symbol 'seq.unit' not declared as a variable

...= (str.at AB_serial_1_version_1 15) (seq.unit #x00)))
                                        ^
")

person OrenIshShalom    schedule 16.06.2018    source источник
comment
Вы можете попробовать задать вопрос по адресу: github.com/CVC4/CVC4/issues.   -  person alias    schedule 18.06.2018
comment
Спасибо, тоже разместил там: github.com/CVC4/CVC4/issues/2075   -  person OrenIshShalom    schedule 18.06.2018


Ответы (1)


Это ответ от CVC4/issues (приведен здесь для полноты):

Спасибо за эталон. К сожалению, на данный момент нет ничего, что могло бы конвертировать битовые векторы в строки.

В ближайшее время мы планируем добавить поддержку последовательностей (issue #1122). Хотя, конечно, стандарта SMT для последовательностей пока нет. Я буду помнить об этом, когда мы добавим поддержку последовательностей.

person OrenIshShalom    schedule 26.06.2018