This module contains the verification of the bitblaster for BitVec.clz from
Impl.Operations.Clz. We prove that the accumulator of the go function
at stepn represents the portion of the ite nodes in the AIG constructed for
bits 0 until n.
@[irreducible]
theorem
Std.Tactic.BVDecide.BVExpr.bitblast.blastClz.go_denote_eq
{α : Type}
[Hashable α]
[DecidableEq α]
{curr w : Nat}
(aig : Sat.AIG α)
(acc xc : aig.RefVec w)
(x : BitVec w)
(assign : α → Bool)
(hx : ∀ (idx : Nat) (hidx : idx < w), ⟦assign, { aig := aig, ref := xc.get idx hidx }⟧ = x.getLsbD idx)
(hacc :
∀ (idx : Nat) (hidx : idx < w),
if curr = 0 then ⟦assign, { aig := aig, ref := acc.get idx hidx }⟧ = (BitVec.ofNat w w).getLsbD idx
else ⟦assign, { aig := aig, ref := acc.get idx hidx }⟧ = (x.clzAuxRec (curr - 1)).getLsbD idx)
(idx : Nat)
(hidx : idx < w)
:
@[simp]
theorem
Std.Tactic.BVDecide.BVExpr.bitblast.denote_blastClz
{α : Type}
[Hashable α]
[DecidableEq α]
{w : Nat}
(aig : Sat.AIG α)
(xc : aig.RefVec w)
(x : BitVec w)
(assign : α → Bool)
(hx : ∀ (idx : Nat) (hidx : idx < w), ⟦assign, { aig := aig, ref := xc.get idx hidx }⟧ = x.getLsbD idx)
(idx : Nat)
(hidx : idx < w)
: