Documentation

Std.Tactic.BVDecide.Bitblast.BVExpr.Circuit.Impl.Operations.ShiftLeft

This module contains the implementation of a bitblaster for BitVec.shiftLeft. It distinguishes two cases:

  1. Shifting by a constant distance (trivial)
  2. Shifting by a symbolic BitVec distance (requires symbolic branches over the distance).
def Std.Tactic.BVDecide.BVExpr.bitblast.blastShiftLeftConst {α : Type} [Hashable α] [DecidableEq α] {w : Nat} (aig : Std.Sat.AIG α) (target : aig.ShiftTarget w) :
Equations
  • One or more equations did not get rendered due to their size.
@[irreducible]
def Std.Tactic.BVDecide.BVExpr.bitblast.blastShiftLeftConst.go {α : Type} [Hashable α] [DecidableEq α] {w : Nat} (aig : Std.Sat.AIG α) (input : aig.RefVec w) (distance curr : Nat) (hcurr : curr w) (s : aig.RefVec curr) :
Equations
  • One or more equations did not get rendered due to their size.
@[irreducible]
theorem Std.Tactic.BVDecide.BVExpr.bitblast.blastShiftLeftConst.go_le_size {α : Type} [Hashable α] [DecidableEq α] {w : Nat} (aig : Std.Sat.AIG α) (distance : Nat) (input : aig.RefVec w) (curr : Nat) (hcurr : curr w) (s : aig.RefVec curr) :
aig.decls.size (Std.Tactic.BVDecide.BVExpr.bitblast.blastShiftLeftConst.go aig input distance curr hcurr s).aig.decls.size
@[irreducible]
theorem Std.Tactic.BVDecide.BVExpr.bitblast.blastShiftLeftConst.go_decl_eq {α : Type} [Hashable α] [DecidableEq α] {w : Nat} (aig : Std.Sat.AIG α) (distance : Nat) (input : aig.RefVec w) (curr : Nat) (hcurr : curr w) (s : aig.RefVec curr) (idx : Nat) (h1 : idx < aig.decls.size) (h2 : idx < (Std.Tactic.BVDecide.BVExpr.bitblast.blastShiftLeftConst.go aig input distance curr hcurr s).aig.decls.size) :
(Std.Tactic.BVDecide.BVExpr.bitblast.blastShiftLeftConst.go aig input distance curr hcurr s).aig.decls[idx] = aig.decls[idx]
theorem Std.Tactic.BVDecide.BVExpr.bitblast.instLawfulVecOperatorShiftTargetBlastShiftLeftConst {α : Type} [Hashable α] [DecidableEq α] :
Std.Sat.AIG.LawfulVecOperator α Std.Sat.AIG.ShiftTarget fun {len : Nat} => Std.Tactic.BVDecide.BVExpr.bitblast.blastShiftLeftConst
  • n : Nat
  • lhs : aig.RefVec w
  • rhs : aig.RefVec self.n
  • pow : Nat
Equations
  • One or more equations did not get rendered due to their size.
theorem Std.Tactic.BVDecide.BVExpr.bitblast.blastShiftLeft.instLawfulVecOperatorTwoPowShiftTargetTwoPowShift {α : Type} [Hashable α] [DecidableEq α] :
Std.Sat.AIG.LawfulVecOperator α Std.Tactic.BVDecide.BVExpr.bitblast.blastShiftLeft.TwoPowShiftTarget fun {len : Nat} => Std.Tactic.BVDecide.BVExpr.bitblast.blastShiftLeft.twoPowShift
def Std.Tactic.BVDecide.BVExpr.bitblast.blastShiftLeft {α : Type} [Hashable α] [DecidableEq α] {w : Nat} (aig : Std.Sat.AIG α) (target : aig.ArbitraryShiftTarget w) :
@[irreducible]
def Std.Tactic.BVDecide.BVExpr.bitblast.blastShiftLeft.go {α : Type} [Hashable α] [DecidableEq α] {w n : Nat} (aig : Std.Sat.AIG α) (distance : aig.RefVec n) (curr : Nat) (acc : aig.RefVec w) :
Equations
  • One or more equations did not get rendered due to their size.
@[irreducible]
theorem Std.Tactic.BVDecide.BVExpr.bitblast.blastShiftLeft.go_le_size {α : Type} [Hashable α] [DecidableEq α] {n w : Nat} (aig : Std.Sat.AIG α) (distance : aig.RefVec n) (curr : Nat) (acc : aig.RefVec w) :
aig.decls.size (Std.Tactic.BVDecide.BVExpr.bitblast.blastShiftLeft.go aig distance curr acc).aig.decls.size
@[irreducible]
theorem Std.Tactic.BVDecide.BVExpr.bitblast.blastShiftLeft.go_decl_eq {α : Type} [Hashable α] [DecidableEq α] {n w : Nat} (aig : Std.Sat.AIG α) (distance : aig.RefVec n) (curr : Nat) (acc : aig.RefVec w) (idx : Nat) (h1 : idx < aig.decls.size) (h2 : idx < (Std.Tactic.BVDecide.BVExpr.bitblast.blastShiftLeft.go aig distance curr acc).aig.decls.size) :
(Std.Tactic.BVDecide.BVExpr.bitblast.blastShiftLeft.go aig distance curr acc).aig.decls[idx] = aig.decls[idx]
theorem Std.Tactic.BVDecide.BVExpr.bitblast.instLawfulVecOperatorArbitraryShiftTargetBlastShiftLeft {α : Type} [Hashable α] [DecidableEq α] :
Std.Sat.AIG.LawfulVecOperator α Std.Sat.AIG.ArbitraryShiftTarget fun {len : Nat} => Std.Tactic.BVDecide.BVExpr.bitblast.blastShiftLeft