This module contains the verification of the BitVec.extract
bitblaster from Impl.Operations.Extract
.
@[irreducible]
theorem
Std.Tactic.BVDecide.BVExpr.bitblast.blastExtract.go_get_aux
{α : Type}
[Hashable α]
[DecidableEq α]
{w newWidth : Nat}
(aig : Sat.AIG α)
(input : aig.RefVec w)
(lo curr : Nat)
(hcurr : curr ≤ newWidth)
(falseRef : aig.Ref)
(s : aig.RefVec curr)
(idx : Nat)
(hidx1 : idx < curr)
:
@[irreducible]
theorem
Std.Tactic.BVDecide.BVExpr.bitblast.blastExtract.go_get
{α : Type}
[Hashable α]
[DecidableEq α]
{w newWidth : Nat}
(aig : Sat.AIG α)
(input : aig.RefVec w)
(lo curr : Nat)
(hcurr : curr ≤ newWidth)
(falseRef : aig.Ref)
(s : aig.RefVec curr)
(idx : Nat)
(hidx1 : idx < newWidth)
:
@[simp]
theorem
Std.Tactic.BVDecide.BVExpr.bitblast.denote_blastExtract
{α : Type}
[Hashable α]
[DecidableEq α]
{newWidth : Nat}
(aig : Sat.AIG α)
(target : ExtractTarget aig newWidth)
(assign : α → Bool)
(idx : Nat)
(hidx : idx < newWidth)
:
⟦assign, { aig := (blastExtract aig target).aig, ref := (blastExtract aig target).vec.get idx hidx }⟧ = if h : target.start + idx < target.w then ⟦assign, { aig := aig, ref := target.vec.get (target.start + idx) h }⟧
else false