Propagators that evaluate structural BitVec operations on literals.
The arguments are matched modulo equalities: given x = 42#64, the propagator for
extractLsb' asserts BitVec.extractLsb' 63 32 x = 0#32. The proofs combine the generic
congruence theorems Grind.eval_congr₁/Grind.eval_congr₂ with an Eq.refl hypothesis
discharged by kernel reduction. Arguments that occur in the result type (widths, extract
bounds, replicate counts) must be syntactic literals; the remaining arguments only need to
be equal to literals.
We deliberately skip:
- arithmetic operations and comparisons (
+,*,-,/,%, division variants,<,≤): they are handled bycutsat; setWidth'andshiftLeftZeroExtend(rare, and their argument order does not fit the suffix-application scheme used by the congruence theorems);BitVec.cast,ofFin/toFin.
The table.
Equations
- Lean.Meta.Grind.propagateBVNot = Lean.Meta.Grind.unaryBV✝ `Complement.complement 3 fun {n : Nat} (x : BitVec n) => ~~~x
Instances For
Equations
- Lean.Meta.Grind.propagateBVClz = Lean.Meta.Grind.unaryBV✝ `BitVec.clz 2 fun {n : Nat} => BitVec.clz
Instances For
Equations
- Lean.Meta.Grind.propagateBVCpop = Lean.Meta.Grind.unaryBV✝ `BitVec.cpop 2 fun {n : Nat} => BitVec.cpop
Instances For
Equations
- One or more equations did not get rendered due to their size.
Instances For
Equations
- One or more equations did not get rendered due to their size.
Instances For
Equations
- One or more equations did not get rendered due to their size.
Instances For
Equations
- One or more equations did not get rendered due to their size.
Instances For
Equations
- One or more equations did not get rendered due to their size.
Instances For
Equations
- Lean.Meta.Grind.propagateBVSetWidth = Lean.Meta.Grind.extendBV✝ `BitVec.setWidth fun {n : Nat} => BitVec.setWidth
Instances For
Equations
- Lean.Meta.Grind.propagateBVSignExtend = Lean.Meta.Grind.extendBV✝ `BitVec.signExtend fun {n : Nat} => BitVec.signExtend
Instances For
Equations
- Lean.Meta.Grind.propagateBVExtractLsb' = Lean.Meta.Grind.extractBV✝ `BitVec.extractLsb' fun {n : Nat} (start len : Nat) (v : BitVec n) => ⟨len, BitVec.extractLsb' start len v⟩
Instances For
Equations
- Lean.Meta.Grind.propagateBVExtractLsb = Lean.Meta.Grind.extractBV✝ `BitVec.extractLsb fun {n : Nat} (hi lo : Nat) (v : BitVec n) => ⟨hi - lo + 1, BitVec.extractLsb hi lo v⟩
Instances For
Equations
- One or more equations did not get rendered due to their size.
Instances For
Equations
- Lean.Meta.Grind.propagateBVAnd = Lean.Meta.Grind.binBV✝ `HAnd.hAnd 6 fun {n : Nat} (x1 x2 : BitVec n) => x1 &&& x2
Instances For
Equations
- Lean.Meta.Grind.propagateBVOr = Lean.Meta.Grind.binBV✝ `HOr.hOr 6 fun {n : Nat} (x1 x2 : BitVec n) => x1 ||| x2
Instances For
Equations
- Lean.Meta.Grind.propagateBVXor = Lean.Meta.Grind.binBV✝ `HXor.hXor 6 fun {n : Nat} (x1 x2 : BitVec n) => x1 ^^^ x2
Instances For
Equations
- One or more equations did not get rendered due to their size.
Instances For
Equations
- Lean.Meta.Grind.propagateBVShiftLeft = Lean.Meta.Grind.shiftBV✝ `BitVec.shiftLeft 3 fun {n : Nat} => BitVec.shiftLeft
Instances For
Equations
- Lean.Meta.Grind.propagateBVUShiftRight = Lean.Meta.Grind.shiftBV✝ `BitVec.ushiftRight 3 fun {n : Nat} => BitVec.ushiftRight
Instances For
Equations
- Lean.Meta.Grind.propagateBVSShiftRight = Lean.Meta.Grind.shiftBV✝ `BitVec.sshiftRight 3 fun {n : Nat} => BitVec.sshiftRight
Instances For
Equations
- Lean.Meta.Grind.propagateBVRotateLeft = Lean.Meta.Grind.shiftBV✝ `BitVec.rotateLeft 3 fun {n : Nat} => BitVec.rotateLeft
Instances For
Equations
- Lean.Meta.Grind.propagateBVRotateRight = Lean.Meta.Grind.shiftBV✝ `BitVec.rotateRight 3 fun {n : Nat} => BitVec.rotateRight
Instances For
Equations
- Lean.Meta.Grind.propagateBVHShiftLeft = Lean.Meta.Grind.hShiftBV✝ `HShiftLeft.hShiftLeft fun {n : Nat} (x1 : BitVec n) (x2 : Nat) => x1 <<< x2
Instances For
Equations
- Lean.Meta.Grind.propagateBVHShiftRight = Lean.Meta.Grind.hShiftBV✝ `HShiftRight.hShiftRight fun {n : Nat} (x1 : BitVec n) (x2 : Nat) => x1 >>> x2
Instances For
Equations
- Lean.Meta.Grind.propagateBVGetLsbD = Lean.Meta.Grind.getBitBV✝ `BitVec.getLsbD fun {n : Nat} => BitVec.getLsbD
Instances For
Equations
- Lean.Meta.Grind.propagateBVGetMsbD = Lean.Meta.Grind.getBitBV✝ `BitVec.getMsbD fun {n : Nat} => BitVec.getMsbD
Instances For
Equations
- One or more equations did not get rendered due to their size.