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).

source
def Std.Tactic.BVDecide.BVExpr.bitblast.blastShiftLeftConst {α : Type} [Hashable α] [DecidableEq α] {w : Nat} (aig : Sat.AIG α) (target : aig.ShiftTarget w) :
Sat.AIG.RefVecEntry α w
Equations

- One or more equations did not get rendered due to their size.

Instances For

source
@[irreducible]
def Std.Tactic.BVDecide.BVExpr.bitblast.blastShiftLeftConst.go {α : Type} [Hashable α] [DecidableEq α] {w : Nat} (aig : Sat.AIG α) (input : aig.RefVec w) (distance curr : Nat) (hcurr : curr ≤ w) (s : aig.RefVec curr) :
Sat.AIG.RefVecEntry α w
Equations

- One or more equations did not get rendered due to their size.

Instances For

source
@[irreducible]
theorem Std.Tactic.BVDecide.BVExpr.bitblast.blastShiftLeftConst.go_le_size {α : Type} [Hashable α] [DecidableEq α] {w : Nat} (aig : Sat.AIG α) (distance : Nat) (input : aig.RefVec w) (curr : Nat) (hcurr : curr ≤ w) (s : aig.RefVec curr) :
aig.decls.size ≤ (go aig input distance curr hcurr s).aig.decls.size
source
@[irreducible]
theorem Std.Tactic.BVDecide.BVExpr.bitblast.blastShiftLeftConst.go_decl_eq {α : Type} [Hashable α] [DecidableEq α] {w : Nat} (aig : 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 < (go aig input distance curr hcurr s).aig.decls.size) :
(go aig input distance curr hcurr s).aig.decls[idx] = aig.decls[idx]
source
instance Std.Tactic.BVDecide.BVExpr.bitblast.instLawfulVecOperatorShiftTargetBlastShiftLeftConst {α : Type} [Hashable α] [DecidableEq α] :
Sat.AIG.LawfulVecOperator α Sat.AIG.ShiftTarget fun {len : Nat} => blastShiftLeftConst
source
structure Std.Tactic.BVDecide.BVExpr.bitblast.blastShiftLeft.TwoPowShiftTarget {α : Type} [Hashable α] [DecidableEq α] (aig : Sat.AIG α) (w : Nat) :
Type

- n : Nat
- lhs : aig.RefVec w
- rhs : aig.RefVec self.n
- pow : Nat

Instances For

source
def Std.Tactic.BVDecide.BVExpr.bitblast.blastShiftLeft.twoPowShift {α : Type} [Hashable α] [DecidableEq α] {w : Nat} (aig : Sat.AIG α) (target : TwoPowShiftTarget aig w) :
Sat.AIG.RefVecEntry α w
Equations

- One or more equations did not get rendered due to their size.

Instances For

source
instance Std.Tactic.BVDecide.BVExpr.bitblast.blastShiftLeft.instLawfulVecOperatorTwoPowShiftTargetTwoPowShift {α : Type} [Hashable α] [DecidableEq α] :
Sat.AIG.LawfulVecOperator α TwoPowShiftTarget fun {len : Nat} => twoPowShift
source
def Std.Tactic.BVDecide.BVExpr.bitblast.blastShiftLeft {α : Type} [Hashable α] [DecidableEq α] {w : Nat} (aig : Sat.AIG α) (target : aig.ArbitraryShiftTarget w) :
Sat.AIG.RefVecEntry α w
Equations

- One or more equations did not get rendered due to their size.

Instances For

source
@[irreducible]
def Std.Tactic.BVDecide.BVExpr.bitblast.blastShiftLeft.go {α : Type} [Hashable α] [DecidableEq α] {w n : Nat} (aig : Sat.AIG α) (distance : aig.RefVec n) (curr : Nat) (acc : aig.RefVec w) :
Sat.AIG.RefVecEntry α w
Equations

- One or more equations did not get rendered due to their size.

Instances For

source
@[irreducible]
theorem Std.Tactic.BVDecide.BVExpr.bitblast.blastShiftLeft.go_le_size {α : Type} [Hashable α] [DecidableEq α] {n w : Nat} (aig : Sat.AIG α) (distance : aig.RefVec n) (curr : Nat) (acc : aig.RefVec w) :
aig.decls.size ≤ (go aig distance curr acc).aig.decls.size
source
@[irreducible]
theorem Std.Tactic.BVDecide.BVExpr.bitblast.blastShiftLeft.go_decl_eq {α : Type} [Hashable α] [DecidableEq α] {n w : Nat} (aig : Sat.AIG α) (distance : aig.RefVec n) (curr : Nat) (acc : aig.RefVec w) (idx : Nat) (h1 : idx < aig.decls.size) (h2 : idx < (go aig distance curr acc).aig.decls.size) :
(go aig distance curr acc).aig.decls[idx] = aig.decls[idx]
source
instance Std.Tactic.BVDecide.BVExpr.bitblast.instLawfulVecOperatorArbitraryShiftTargetBlastShiftLeft {α : Type} [Hashable α] [DecidableEq α] :
Sat.AIG.LawfulVecOperator α Sat.AIG.ArbitraryShiftTarget fun {len : Nat} => blastShiftLeft