kdrag.theories.bitvec.UnConcat

kdrag.theories.bitvec.UnConcat(x: BitVecRef, lane_num: int) list[BitVecRef]

Unpack a bitvector into lanes.

>>> x,y = smt.BitVecs("x y", 32)
>>> kd.prove(smt.Concat(UnConcat(x, 4)) == x)
|= Concat(Concat(Concat(Extract(31, 24, x), Extract(23, 16, x)),
              Extract(15, 8, x)),
       Extract(7, 0, x)) == x
>>> kd.prove(UnConcat(smt.Concat(x,y), 2)[0] == x)
|= Extract(63, 32, Concat(x, y)) == x
Parameters:
  • x (BitVecRef)

  • lane_num (int)

Return type:

list[BitVecRef]