Documentation

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

This module contains the implementation of a bitblaster for BitVec.shiftRight. 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.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
      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
          • n : Nat
          • lhs : aig.RefVec w
          • rhs : aig.RefVec self.n
          • pow : Nat
          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
                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