Module docstring
{"We define the basic algebraic structure of bitvectors. We choose the Fin representation over
others for its relative efficiency (Lean has special support for Nat),  and the fact that bitwise
operations on Fin are already defined. Some other possible representations are List Bool,
{ l : List Bool // l.length = w }, Fin w → Bool.
We define many of the bitvector operations from the
QF_BV logic.
of SMT-LIB v2.
","### Cons and Concat
We give special names to the operations of adding a single bit to either end of a bitvector.
We follow the precedent of Vector.cons/Vector.concat both for the name, and for the decision
to have the resulting size be n + 1 for both operations (rather than 1 + n, which would be the
result of appending a single bit to the front in the naive implementation).
","We add simp-lemmas that rewrite bitvector operations into the equivalent notation ","## Overflow "}