z3 преобразование из битовых векторов в целые числа

Есть несколько сообщений, касающихся преобразования битовых векторов в целые числа (и наоборот) в z3. См., Например, здесь, здесь и здесь.

В документации говорится, что Z3_mk_bv2int не интерпретируется:

«... Эта функция, по сути, считается неинтерпретируемой. Поэтому нельзя ожидать, что Z3 точно отразит семантику этой функции при решении ограничений с помощью этой функции ...»

Однако я не смог найти простого примера, где он не соответствует ожидаемой семантике. Например, всякий раз, когда я использую такие запросы:

(declare-const s String)
(declare-const someBitVec10 (_ BitVec 10))

(assert (= s "74g\x00!!#2#$$"))

(assert (str.in.re (str.at s (bv2int someBitVec10)) (re.range "1" "3")))

(check-sat)
(get-value (s someBitVec10))

Я получаю правильный ответ (в индексе должно быть 7, и это так)

sat
((s "74g\x00!!#2#$$")
 (someBitVec10 #b0000000111))

Может ли кто-нибудь предоставить простой пример, когда z3 bv2int и / или int2bv терпят неудачу ?? Благодарность!


person OrenIshShalom    schedule 18.01.2018    source источник


Ответы (1)


Теперь эта проблема решена, поскольку оказывается, что и int2bv, и bv2int действительно интерпретируются. Документация не обновлялась, и это могло вызвать путаницу (по крайней мере, в моем случае). Все подробности можно найти в этом сообщении GitHub / z3 / issues.

person OrenIshShalom    schedule 13.02.2018