This module contains the implementation of a bitblaster for BitVec.zeroExtend
.
def
Std.Tactic.BVDecide.BVExpr.bitblast.blastZeroExtend
{α : Type}
[Hashable α]
[DecidableEq α]
{newWidth : Nat}
(aig : Std.Sat.AIG α)
(target : aig.ExtendTarget newWidth)
:
Std.Sat.AIG.RefVecEntry α newWidth
Equations
- Std.Tactic.BVDecide.BVExpr.bitblast.blastZeroExtend aig { w := width, vec := input } = Std.Tactic.BVDecide.BVExpr.bitblast.blastZeroExtend.go aig width input newWidth 0 ⋯ Std.Sat.AIG.RefVec.empty
Instances For
@[irreducible]
def
Std.Tactic.BVDecide.BVExpr.bitblast.blastZeroExtend.go
{α : Type}
[Hashable α]
[DecidableEq α]
(aig : Std.Sat.AIG α)
(w : Nat)
(input : aig.RefVec w)
(newWidth curr : Nat)
(hcurr : curr ≤ newWidth)
(s : aig.RefVec curr)
:
Std.Sat.AIG.RefVecEntry α newWidth
Equations
- One or more equations did not get rendered due to their size.
Instances For
@[irreducible]
theorem
Std.Tactic.BVDecide.BVExpr.bitblast.blastZeroExtend.go_le_size
{α : Type}
[Hashable α]
[DecidableEq α]
(aig : Std.Sat.AIG α)
(w : Nat)
(input : aig.RefVec w)
(newWidth curr : Nat)
(hcurr : curr ≤ newWidth)
(s : aig.RefVec curr)
:
aig.decls.size ≤ (Std.Tactic.BVDecide.BVExpr.bitblast.blastZeroExtend.go aig w input newWidth curr hcurr s).aig.decls.size
@[irreducible]
theorem
Std.Tactic.BVDecide.BVExpr.bitblast.blastZeroExtend.go_decl_eq
{α : Type}
[Hashable α]
[DecidableEq α]
(aig : Std.Sat.AIG α)
(w : Nat)
(input : aig.RefVec w)
(newWidth curr : Nat)
(hcurr : curr ≤ newWidth)
(s : aig.RefVec curr)
(idx : Nat)
(h1 : idx < aig.decls.size)
(h2 : idx < (Std.Tactic.BVDecide.BVExpr.bitblast.blastZeroExtend.go aig w input newWidth curr hcurr s).aig.decls.size)
:
(Std.Tactic.BVDecide.BVExpr.bitblast.blastZeroExtend.go aig w input newWidth curr hcurr s).aig.decls[idx] = aig.decls[idx]
theorem
Std.Tactic.BVDecide.BVExpr.bitblast.instLawfulVecOperatorExtendTargetBlastZeroExtend
{α : Type}
[Hashable α]
[DecidableEq α]
:
Std.Sat.AIG.LawfulVecOperator α Std.Sat.AIG.ExtendTarget fun {len : Nat} =>
Std.Tactic.BVDecide.BVExpr.bitblast.blastZeroExtend