This module contains the implementation of a bitblaster for BitVec.shiftRight
.
It distinguishes two cases:
- Shifting by a constant distance (trivial)
- Shifting by a symbolic
BitVec
distance (requires symbolic branches over the distance).
def
Std.Tactic.BVDecide.BVExpr.bitblast.blastShiftRightConst
{α : 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.
Instances For
@[irreducible]
def
Std.Tactic.BVDecide.BVExpr.bitblast.blastShiftRightConst.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.
Instances For
@[irreducible]
theorem
Std.Tactic.BVDecide.BVExpr.bitblast.blastShiftRightConst.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.blastShiftRightConst.go aig input distance curr hcurr s).aig.decls.size
@[irreducible]
theorem
Std.Tactic.BVDecide.BVExpr.bitblast.blastShiftRightConst.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.blastShiftRightConst.go aig input distance curr hcurr s).aig.decls.size)
:
(Std.Tactic.BVDecide.BVExpr.bitblast.blastShiftRightConst.go aig input distance curr hcurr s).aig.decls[idx] = aig.decls[idx]
theorem
Std.Tactic.BVDecide.BVExpr.bitblast.instLawfulVecOperatorShiftTargetBlastShiftRightConst
{α : Type}
[Hashable α]
[DecidableEq α]
:
Std.Sat.AIG.LawfulVecOperator α Std.Sat.AIG.ShiftTarget fun {len : Nat} =>
Std.Tactic.BVDecide.BVExpr.bitblast.blastShiftRightConst
def
Std.Tactic.BVDecide.BVExpr.bitblast.blastArithShiftRightConst
{α : Type}
[Hashable α]
[DecidableEq α]
{w : Nat}
(aig : Std.Sat.AIG α)
(target : aig.ShiftTarget w)
:
Instances For
@[irreducible]
def
Std.Tactic.BVDecide.BVExpr.bitblast.blastArithShiftRightConst.go
{α : Type}
[Hashable α]
[DecidableEq α]
{w : Nat}
{aig : Std.Sat.AIG α}
(input : aig.RefVec w)
(distance curr : Nat)
(hcurr : curr ≤ w)
(s : aig.RefVec curr)
:
aig.RefVec w
Equations
- One or more equations did not get rendered due to their size.
Instances For
theorem
Std.Tactic.BVDecide.BVExpr.bitblast.instLawfulVecOperatorShiftTargetBlastArithShiftRightConst
{α : Type}
[Hashable α]
[DecidableEq α]
:
Std.Sat.AIG.LawfulVecOperator α Std.Sat.AIG.ShiftTarget fun {len : Nat} =>
Std.Tactic.BVDecide.BVExpr.bitblast.blastArithShiftRightConst
structure
Std.Tactic.BVDecide.BVExpr.bitblast.TwoPowShiftTarget
{α : Type}
[Hashable α]
[DecidableEq α]
(aig : Std.Sat.AIG α)
(w : Nat)
:
Instances For
def
Std.Tactic.BVDecide.BVExpr.bitblast.blastShiftRight.twoPowShift
{α : Type}
[Hashable α]
[DecidableEq α]
{w : Nat}
(aig : Std.Sat.AIG α)
(target : Std.Tactic.BVDecide.BVExpr.bitblast.TwoPowShiftTarget aig w)
:
Instances For
theorem
Std.Tactic.BVDecide.BVExpr.bitblast.blastShiftRight.instLawfulVecOperatorTwoPowShiftTargetTwoPowShift
{α : Type}
[Hashable α]
[DecidableEq α]
:
Std.Sat.AIG.LawfulVecOperator α Std.Tactic.BVDecide.BVExpr.bitblast.TwoPowShiftTarget fun {len : Nat} =>
Std.Tactic.BVDecide.BVExpr.bitblast.blastShiftRight.twoPowShift
def
Std.Tactic.BVDecide.BVExpr.bitblast.blastShiftRight
{α : Type}
[Hashable α]
[DecidableEq α]
{w : Nat}
(aig : Std.Sat.AIG α)
(target : aig.ArbitraryShiftTarget w)
:
Equations
- One or more equations did not get rendered due to their size.
Instances For
@[irreducible]
def
Std.Tactic.BVDecide.BVExpr.bitblast.blastShiftRight.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.
Instances For
@[irreducible]
theorem
Std.Tactic.BVDecide.BVExpr.bitblast.blastShiftRight.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.blastShiftRight.go aig distance curr acc).aig.decls.size
@[irreducible]
theorem
Std.Tactic.BVDecide.BVExpr.bitblast.blastShiftRight.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.blastShiftRight.go aig distance curr acc).aig.decls.size)
:
(Std.Tactic.BVDecide.BVExpr.bitblast.blastShiftRight.go aig distance curr acc).aig.decls[idx] = aig.decls[idx]
theorem
Std.Tactic.BVDecide.BVExpr.bitblast.instLawfulVecOperatorArbitraryShiftTargetBlastShiftRight
{α : Type}
[Hashable α]
[DecidableEq α]
:
Std.Sat.AIG.LawfulVecOperator α Std.Sat.AIG.ArbitraryShiftTarget fun {len : Nat} =>
Std.Tactic.BVDecide.BVExpr.bitblast.blastShiftRight
def
Std.Tactic.BVDecide.BVExpr.bitblast.blastArithShiftRight.twoPowShift
{α : Type}
[Hashable α]
[DecidableEq α]
{w : Nat}
(aig : Std.Sat.AIG α)
(target : Std.Tactic.BVDecide.BVExpr.bitblast.TwoPowShiftTarget aig w)
:
Instances For
theorem
Std.Tactic.BVDecide.BVExpr.bitblast.blastArithShiftRight.instLawfulVecOperatorTwoPowShiftTargetTwoPowShift
{α : Type}
[Hashable α]
[DecidableEq α]
:
Std.Sat.AIG.LawfulVecOperator α Std.Tactic.BVDecide.BVExpr.bitblast.TwoPowShiftTarget fun {len : Nat} =>
Std.Tactic.BVDecide.BVExpr.bitblast.blastArithShiftRight.twoPowShift
def
Std.Tactic.BVDecide.BVExpr.bitblast.blastArithShiftRight
{α : Type}
[Hashable α]
[DecidableEq α]
{w : Nat}
(aig : Std.Sat.AIG α)
(target : aig.ArbitraryShiftTarget w)
:
Instances For
@[irreducible]
def
Std.Tactic.BVDecide.BVExpr.bitblast.blastArithShiftRight.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.
Instances For
@[irreducible]
theorem
Std.Tactic.BVDecide.BVExpr.bitblast.blastArithShiftRight.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.blastArithShiftRight.go aig distance curr acc).aig.decls.size
@[irreducible]
theorem
Std.Tactic.BVDecide.BVExpr.bitblast.blastArithShiftRight.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.blastArithShiftRight.go aig distance curr acc).aig.decls.size)
:
(Std.Tactic.BVDecide.BVExpr.bitblast.blastArithShiftRight.go aig distance curr acc).aig.decls[idx] = aig.decls[idx]
theorem
Std.Tactic.BVDecide.BVExpr.bitblast.instLawfulVecOperatorArbitraryShiftTargetBlastArithShiftRight
{α : Type}
[Hashable α]
[DecidableEq α]
:
Std.Sat.AIG.LawfulVecOperator α Std.Sat.AIG.ArbitraryShiftTarget fun {len : Nat} =>
Std.Tactic.BVDecide.BVExpr.bitblast.blastArithShiftRight