Ответ зависит от того, что именно вы подразумеваете под Изменить размер .
Если вы хотите, чтобы вы изменили размер существующей переменной битового вектора позжебыть чем-то другим;тогда ответ «нет».После того, как вы объявите переменную с определенным размером битового вектора (или любого другого типа), вы не сможете изменить ее позже.
Однако, если вы имеете в виду, можете ли вы создать новую переменную из старой;тогда да.
Расширение: Вы можете либо расширять знак, либо расширять ноль в зависимости от необходимости учесть числа дополнения 2 или битовые векторы без знака до любого нового большего размера.(Используйте Concat
, чтобы расширить либо 0, либо знаковый бит оригинала. См. Здесь: https://z3prover.github.io/api/html/namespacez3py.html#a4dfadd3cb36aaa827c9202a949a506a4)
Чтобы уменьшить, вы можете использовать Extract
: https://z3prover.github.io/api/html/namespacez3py.html#a40e9429ef16134a6d9914ecdc2182e8c, путем извлечения произвольногосегмент по мере необходимости.
Обратите внимание, что во всех случаях новый размер должен быть конкретно известен. В следующем потоке обсуждается, почему это так: Извлечение Z3 BitVec с использованием символьного высокого иlow Суть в том, что логика SMTLib Bitvector относится к битовым векторам фиксированного размера, и поэтому размеры должны быть конкретно известны (ничто не может быть символическим для размеров битовых векторов) во время компиляции.
НоЧтобы подчеркнуть исходную точку, расширение или сжатие битового вектора просто создает новый, имеющий то же значение, что и старое (символическое или иное), при условии, что это значение соответствует новому представлению (в противном случае вы получите усечение по модулю).) Но что более важно, исходная переменная и все выражения, которые зависят от do not , будут затронуты этим chАнж;вы просто создаете новый битвектор.В этом смысле изменение размера существующей переменной bitvector просто невозможно на земле SMT.