BBLAST_CONV
blastLib.BBLAST_CONV : conv
Bit-blasting conversion for words.
This conversion expands bit-vector terms into Boolean propositions. It
goes beyond the functionality of wordsLib.WORD_BIT_EQ_CONV by handling
addition, subtraction and orderings. Consequently, this conversion can
automatically handle small, but tricky, bit-vector goals that
wordsLib.WORD_DECIDE cannot handle. Obviously bit-blasting is a brute
force approach, so this conversion should be used with care. It will
only work well for smallish word sizes and when there is only and
handful of additions around. It is also "eager" -- additions are
expanded out even when not strictly necessary. For example, in
(a + b) <+ c /\ c <+ d ==> (a + b) <+ d:word32
the sum a + b is expanded. Users may be able to achieve speed-ups by
first introducing abbreviations and then proving general forms, e.g.
x <+ c /\ c <+ d ==> x <+ d:word32
The conversion handles most operators, however, the following are not covered / interpreted:
-
Type variables for word lengths, i.e. terms of type
:'a word. -
General multiplication, i.e.
w1 * w2. Multiplication by a literal is okay, although this may introduce many additions. -
Bit-field selections with non-literal bounds, e.g.
(expr1 -- expr2) w. -
Shifting by non-literal amounts, e.g.
w << expr. -
n2w exprandw2n w. Alsow2s,s2w,w2landl2w. -
word_div,word_sdiv,word_modandword_log2.
Example
Word orderings are handled:
> blastLib.BBLAST_CONV
“!a b. ~word_msb a /\ ~word_msb b ==> (a <+ b <=> a < b:word32)”;
val it = ⊢ (∀a b. ¬word_msb a ∧ ¬word_msb b ⇒ (a <₊ b ⇔ a < b)) ⇔ T: thm
In some cases the result will be a proposition over bit values:
> blastLib.BBLAST_CONV “!a. (a + 1w:word8) ' 1”;
val it = ⊢ (∀a. (a + 1w) ' 1) ⇔ ∀a. a ' 1 ⇔ ¬a ' 0: thm
This conversion is especially useful where "logical" and "arithmetic" bit-vector operations are combined:
> blastLib.BBLAST_CONV
“!a. ((((((a:word8) * 16w) + 0x10w)) && 0xF0w) >>> 4) = (3 -- 0) (a + 1w)”;
val it = ⊢ (∀a. (a * 16w + 16w && 240w) ⋙ 4 = (3 -- 0) (a + 1w)) ⇔ T: thm
See also
wordsLib.WORD_ss,
wordsLib.WORD_ARITH_CONV,
wordsLib.WORD_LOGIC_CONV,
wordsLib.WORD_MUL_LSL_CONV,
wordsLib.WORD_BIT_EQ_CONV,
wordsLib.WORD_EVAL_CONV,
wordsLib.WORD_CONV