Documentation

Auto.Embedding.LamBitVec

theorem Auto.Embedding.Lam.BVLems.toNat_ofNatLt {n : Nat} (i : Nat) (p : i < 2 ^ n) :
(i#'p).toNat = i
theorem Auto.Embedding.Lam.BVLems.eq_of_val_eq {n : Nat} {a b : BitVec n} (h : a.toNat = b.toNat) :
a = b
theorem Auto.Embedding.Lam.BVLems.val_eq_of_eq {n : Nat} {a b : BitVec n} (h : a = b) :
theorem Auto.Embedding.Lam.BVLems.sub_def {n : Nat} (a b : BitVec n) :
a - b = a.sub b
theorem Auto.Embedding.Lam.BVLems.toNat_shiftLeft {n : Nat} {a : BitVec n} (i : Nat) :
(a <<< i).toNat = a.toNat * 2 ^ i % 2 ^ n
theorem Auto.Embedding.Lam.BVLems.toNat_sub {n : Nat} (a b : BitVec n) :
(a - b).toNat = (2 ^ n - b.toNat + a.toNat) % 2 ^ n
theorem Auto.Embedding.Lam.BVLems.toNat_sub' {n : Nat} (a b : BitVec n) :
(a - b).toNat = (a.toNat + (2 ^ n - b.toNat)) % 2 ^ n
theorem Auto.Embedding.Lam.BVLems.toNat_neg {n : Nat} (a : BitVec n) :
(-a).toNat = (2 ^ n - a.toNat) % 2 ^ n
theorem Auto.Embedding.Lam.BVLems.ofNat_sub' (n a b : Nat) :
BitVec.ofNat n (a - b) = (Bool.ite' (a < b) { down := 0#n } { down := BitVec.ofNat n a - BitVec.ofNat n b }).down
theorem Auto.Embedding.Lam.BVLems.shl_equiv {n : Nat} (a : BitVec n) (b : Nat) :
a <<< b = if b < n then a <<< BitVec.ofNat n b else 0
theorem Auto.Embedding.Lam.BVLems.shl_equiv' {n : Nat} (a : BitVec n) (b : Nat) :
a <<< b = (Bool.ite' (b < n) { down := a <<< BitVec.ofNat n b } { down := 0 }).down
theorem Auto.Embedding.Lam.BVLems.shl_toNat_equiv_long' {n m : Nat} (a : BitVec n) (b : BitVec m) (h : m > n) :
a <<< b.toNat = (Bool.ite' ({ down := b >>> BitVec.ofNat m n } = { down := 0#m }) { down := a <<< BitVec.zeroExtend n b } { down := 0#n }).down
theorem Auto.Embedding.Lam.BVLems.lshr_equiv {n : Nat} (a : BitVec n) (b : Nat) :
a >>> b = if b < n then a >>> BitVec.ofNat n b else 0
theorem Auto.Embedding.Lam.BVLems.lshr_equiv' {n : Nat} (a : BitVec n) (b : Nat) :
a >>> b = (Bool.ite' (b < n) { down := a >>> BitVec.ofNat n b } { down := 0 }).down
theorem Auto.Embedding.Lam.BVLems.lshr_toNat_equiv_long' {n m : Nat} (a : BitVec n) (b : BitVec m) (h : m > n) :
a >>> b.toNat = (Bool.ite' ({ down := b >>> BitVec.ofNat m n } = { down := 0#m }) { down := a >>> BitVec.zeroExtend n b } { down := 0 }).down
theorem Auto.Embedding.Lam.BVLems.ashr_equiv' {n : Nat} (a : BitVec n) (b : Nat) :
a.sshiftRight b = (Bool.ite' (b < n) { down := a.sshiftRight (BitVec.ofNat n b).toNat } (Bool.ite' ({ down := a.msb } = { down := true }) { down := (1#n).neg } { down := 0#n })).down
theorem Auto.Embedding.Lam.BVLems.ashr_toNat_equiv_long' {n m : Nat} (a : BitVec n) (b : BitVec m) (h : m > n) :
a.sshiftRight b.toNat = (Bool.ite' ({ down := b >>> BitVec.ofNat m n } = { down := 0#m }) { down := a.sshiftRight (BitVec.zeroExtend n b).toNat } (Bool.ite' ({ down := a.msb } = { down := true }) { down := (1#n).neg } { down := 0#n })).down
Equations
  • One or more equations did not get rendered due to their size.
Instances For
    theorem Auto.Embedding.Lam.LamEquiv.bvofNat_nsub {lctx : NatLamSort} {a b : LamTerm} {lval : LamValuation} {n : Nat} (wfa : LamWF lval.toLamTyVal { lctx := lctx, rterm := a, rty := LamSort.base LamBaseSort.nat }) (wfb : LamWF lval.toLamTyVal { lctx := lctx, rterm := b, rty := LamSort.base LamBaseSort.nat }) :
    Equations
    • One or more equations did not get rendered due to their size.
    Instances For
      theorem Auto.Embedding.Lam.LamTerm.congr_maxEVarSucc_shl_equiv {a₁ a₂ b₁ b₂ bbv₁ bbv₂ : LamTerm} {n₁ n₂ : Nat} (eqa : a₁.maxEVarSucc = a₂.maxEVarSucc) (eqb : b₁.maxEVarSucc = b₂.maxEVarSucc) (eqbbv : bbv₁.maxEVarSucc = bbv₂.maxEVarSucc) :
      (shl_equiv n₁ a₁ b₁ bbv₁).maxEVarSucc = (shl_equiv n₂ a₂ b₂ bbv₂).maxEVarSucc
      theorem Auto.Embedding.Lam.LamEquiv.congr_shl_equiv {lval : LamValuation} {lctx : NatLamSort} {n : Nat} {a₁ a₂ b₁ b₂ bbv₁ bbv₂ : LamTerm} (eqa : LamEquiv lval lctx (LamSort.base (LamBaseSort.bv n)) a₁ a₂) (eqb : LamEquiv lval lctx (LamSort.base LamBaseSort.nat) b₁ b₂) (eqbbv : LamEquiv lval lctx (LamSort.base (LamBaseSort.bv n)) bbv₁ bbv₂) :
      LamEquiv lval lctx (LamSort.base (LamBaseSort.bv n)) (LamTerm.shl_equiv n a₁ b₁ bbv₁) (LamTerm.shl_equiv n a₂ b₂ bbv₂)
      theorem Auto.Embedding.Lam.LamEquiv.shl_equiv {lctx : NatLamSort} {a : LamTerm} {n : Nat} {b : LamTerm} {lval : LamValuation} (wfa : LamWF lval.toLamTyVal { lctx := lctx, rterm := a, rty := LamSort.base (LamBaseSort.bv n) }) (wfb : LamWF lval.toLamTyVal { lctx := lctx, rterm := b, rty := LamSort.base LamBaseSort.nat }) :
      @[reducible, inline]
      Equations
      • One or more equations did not get rendered due to their size.
      Instances For
        theorem Auto.Embedding.Lam.LamTerm.congr_maxEVarSucc_shl_toNat_equiv_short {a₁ a₂ b₁ b₂ : LamTerm} {n₁ m₁ n₂ m₂ : Nat} (eqa : a₁.maxEVarSucc = a₂.maxEVarSucc) (eqb : b₁.maxEVarSucc = b₂.maxEVarSucc) :
        (shl_toNat_equiv_short n₁ a₁ m₁ b₁).maxEVarSucc = (shl_toNat_equiv_short n₂ a₂ m₂ b₂).maxEVarSucc
        theorem Auto.Embedding.Lam.LamEquiv.congr_shl_toNat_equiv_short {lval : LamValuation} {lctx : NatLamSort} {n : Nat} {a₁ a₂ : LamTerm} {m : Nat} {b₁ b₂ : LamTerm} (eqa : LamEquiv lval lctx (LamSort.base (LamBaseSort.bv n)) a₁ a₂) (eqb : LamEquiv lval lctx (LamSort.base (LamBaseSort.bv m)) b₁ b₂) :
        theorem Auto.Embedding.Lam.LamEquiv.shl_toNat_equiv_short {lctx : NatLamSort} {a : LamTerm} {n : Nat} {b : LamTerm} {m : Nat} {lval : LamValuation} (wfa : LamWF lval.toLamTyVal { lctx := lctx, rterm := a, rty := LamSort.base (LamBaseSort.bv n) }) (wfb : LamWF lval.toLamTyVal { lctx := lctx, rterm := b, rty := LamSort.base (LamBaseSort.bv m) }) (h : m n) :
        @[reducible, inline]
        Equations
        • One or more equations did not get rendered due to their size.
        Instances For
          theorem Auto.Embedding.Lam.LamTerm.congr_maxEVarSucc_shl_toNat_equiv_long {a₁ a₂ b₁ b₂ : LamTerm} {n₁ m₁ n₂ m₂ : Nat} (eqa : a₁.maxEVarSucc = a₂.maxEVarSucc) (eqb : b₁.maxEVarSucc = b₂.maxEVarSucc) :
          (shl_toNat_equiv_long n₁ a₁ m₁ b₁).maxEVarSucc = (shl_toNat_equiv_long n₂ a₂ m₂ b₂).maxEVarSucc
          theorem Auto.Embedding.Lam.LamEquiv.congr_shl_toNat_equiv_long {lval : LamValuation} {lctx : NatLamSort} {n : Nat} {a₁ a₂ : LamTerm} {m : Nat} {b₁ b₂ : LamTerm} (eqa : LamEquiv lval lctx (LamSort.base (LamBaseSort.bv n)) a₁ a₂) (eqb : LamEquiv lval lctx (LamSort.base (LamBaseSort.bv m)) b₁ b₂) :
          theorem Auto.Embedding.Lam.LamEquiv.shl_toNat_equiv_long {lctx : NatLamSort} {a : LamTerm} {n : Nat} {b : LamTerm} {m : Nat} {lval : LamValuation} (wfa : LamWF lval.toLamTyVal { lctx := lctx, rterm := a, rty := LamSort.base (LamBaseSort.bv n) }) (wfb : LamWF lval.toLamTyVal { lctx := lctx, rterm := b, rty := LamSort.base (LamBaseSort.bv m) }) (h : m > n) :
          Equations
          • One or more equations did not get rendered due to their size.
          Instances For
            theorem Auto.Embedding.Lam.LamTerm.congr_maxEVarSucc_lshr_equiv {a₁ a₂ b₁ b₂ bbv₁ bbv₂ : LamTerm} {n₁ n₂ : Nat} (eqa : a₁.maxEVarSucc = a₂.maxEVarSucc) (eqb : b₁.maxEVarSucc = b₂.maxEVarSucc) (eqbbv : bbv₁.maxEVarSucc = bbv₂.maxEVarSucc) :
            (lshr_equiv n₁ a₁ b₁ bbv₁).maxEVarSucc = (lshr_equiv n₂ a₂ b₂ bbv₂).maxEVarSucc
            theorem Auto.Embedding.Lam.LamEquiv.congr_lshr_equiv {lval : LamValuation} {lctx : NatLamSort} {n : Nat} {a₁ a₂ b₁ b₂ bbv₁ bbv₂ : LamTerm} (eqa : LamEquiv lval lctx (LamSort.base (LamBaseSort.bv n)) a₁ a₂) (eqb : LamEquiv lval lctx (LamSort.base LamBaseSort.nat) b₁ b₂) (eqbbv : LamEquiv lval lctx (LamSort.base (LamBaseSort.bv n)) bbv₁ bbv₂) :
            LamEquiv lval lctx (LamSort.base (LamBaseSort.bv n)) (LamTerm.lshr_equiv n a₁ b₁ bbv₁) (LamTerm.lshr_equiv n a₂ b₂ bbv₂)
            theorem Auto.Embedding.Lam.LamEquiv.lshr_equiv {lctx : NatLamSort} {a : LamTerm} {n : Nat} {b : LamTerm} {lval : LamValuation} (wfa : LamWF lval.toLamTyVal { lctx := lctx, rterm := a, rty := LamSort.base (LamBaseSort.bv n) }) (wfb : LamWF lval.toLamTyVal { lctx := lctx, rterm := b, rty := LamSort.base LamBaseSort.nat }) :
            @[reducible, inline]
            Equations
            • One or more equations did not get rendered due to their size.
            Instances For
              theorem Auto.Embedding.Lam.LamTerm.congr_maxEVarSucc_lshr_toNat_equiv_short {a₁ a₂ b₁ b₂ : LamTerm} {n₁ m₁ n₂ m₂ : Nat} (eqa : a₁.maxEVarSucc = a₂.maxEVarSucc) (eqb : b₁.maxEVarSucc = b₂.maxEVarSucc) :
              (lshr_toNat_equiv_short n₁ a₁ m₁ b₁).maxEVarSucc = (lshr_toNat_equiv_short n₂ a₂ m₂ b₂).maxEVarSucc
              theorem Auto.Embedding.Lam.LamEquiv.congr_lshr_toNat_equiv_short {lval : LamValuation} {lctx : NatLamSort} {n : Nat} {a₁ a₂ : LamTerm} {m : Nat} {b₁ b₂ : LamTerm} (eqa : LamEquiv lval lctx (LamSort.base (LamBaseSort.bv n)) a₁ a₂) (eqb : LamEquiv lval lctx (LamSort.base (LamBaseSort.bv m)) b₁ b₂) :
              theorem Auto.Embedding.Lam.LamEquiv.lshr_toNat_equiv_short {lctx : NatLamSort} {a : LamTerm} {n : Nat} {b : LamTerm} {m : Nat} {lval : LamValuation} (wfa : LamWF lval.toLamTyVal { lctx := lctx, rterm := a, rty := LamSort.base (LamBaseSort.bv n) }) (wfb : LamWF lval.toLamTyVal { lctx := lctx, rterm := b, rty := LamSort.base (LamBaseSort.bv m) }) (h : m n) :
              @[reducible, inline]
              Equations
              • One or more equations did not get rendered due to their size.
              Instances For
                theorem Auto.Embedding.Lam.LamTerm.congr_maxEVarSucc_lshr_toNat_equiv_long {a₁ a₂ b₁ b₂ : LamTerm} {n₁ m₁ n₂ m₂ : Nat} (eqa : a₁.maxEVarSucc = a₂.maxEVarSucc) (eqb : b₁.maxEVarSucc = b₂.maxEVarSucc) :
                (lshr_toNat_equiv_long n₁ a₁ m₁ b₁).maxEVarSucc = (lshr_toNat_equiv_long n₂ a₂ m₂ b₂).maxEVarSucc
                theorem Auto.Embedding.Lam.LamEquiv.congr_lshr_toNat_equiv_long {lval : LamValuation} {lctx : NatLamSort} {n : Nat} {a₁ a₂ : LamTerm} {m : Nat} {b₁ b₂ : LamTerm} (eqa : LamEquiv lval lctx (LamSort.base (LamBaseSort.bv n)) a₁ a₂) (eqb : LamEquiv lval lctx (LamSort.base (LamBaseSort.bv m)) b₁ b₂) :
                theorem Auto.Embedding.Lam.LamEquiv.lshr_toNat_equiv_long {lctx : NatLamSort} {a : LamTerm} {n : Nat} {b : LamTerm} {m : Nat} {lval : LamValuation} (wfa : LamWF lval.toLamTyVal { lctx := lctx, rterm := a, rty := LamSort.base (LamBaseSort.bv n) }) (wfb : LamWF lval.toLamTyVal { lctx := lctx, rterm := b, rty := LamSort.base (LamBaseSort.bv m) }) (h : m > n) :
                Equations
                • One or more equations did not get rendered due to their size.
                Instances For
                  theorem Auto.Embedding.Lam.LamTerm.congr_maxEVarSucc_ashr_equiv {a₁ a₂ b₁ b₂ bbv₁ bbv₂ : LamTerm} {n₁ n₂ : Nat} (eqa : a₁.maxEVarSucc = a₂.maxEVarSucc) (eqb : b₁.maxEVarSucc = b₂.maxEVarSucc) (eqbbv : bbv₁.maxEVarSucc = bbv₂.maxEVarSucc) :
                  (ashr_equiv n₁ a₁ b₁ bbv₁).maxEVarSucc = (ashr_equiv n₂ a₂ b₂ bbv₂).maxEVarSucc
                  theorem Auto.Embedding.Lam.LamEquiv.congr_ashr_equiv {lval : LamValuation} {lctx : NatLamSort} {n : Nat} {a₁ a₂ b₁ b₂ bbv₁ bbv₂ : LamTerm} (eqa : LamEquiv lval lctx (LamSort.base (LamBaseSort.bv n)) a₁ a₂) (eqb : LamEquiv lval lctx (LamSort.base LamBaseSort.nat) b₁ b₂) (eqbbv : LamEquiv lval lctx (LamSort.base (LamBaseSort.bv n)) bbv₁ bbv₂) :
                  LamEquiv lval lctx (LamSort.base (LamBaseSort.bv n)) (LamTerm.ashr_equiv n a₁ b₁ bbv₁) (LamTerm.ashr_equiv n a₂ b₂ bbv₂)
                  theorem Auto.Embedding.Lam.LamEquiv.ashr_equiv {lctx : NatLamSort} {a : LamTerm} {n : Nat} {b : LamTerm} {lval : LamValuation} (wfa : LamWF lval.toLamTyVal { lctx := lctx, rterm := a, rty := LamSort.base (LamBaseSort.bv n) }) (wfb : LamWF lval.toLamTyVal { lctx := lctx, rterm := b, rty := LamSort.base LamBaseSort.nat }) :
                  @[reducible, inline]
                  Equations
                  • One or more equations did not get rendered due to their size.
                  Instances For
                    theorem Auto.Embedding.Lam.LamTerm.congr_maxEVarSucc_ashr_toNat_equiv_short {a₁ a₂ b₁ b₂ : LamTerm} {n₁ m₁ n₂ m₂ : Nat} (eqa : a₁.maxEVarSucc = a₂.maxEVarSucc) (eqb : b₁.maxEVarSucc = b₂.maxEVarSucc) :
                    (ashr_toNat_equiv_short n₁ a₁ m₁ b₁).maxEVarSucc = (ashr_toNat_equiv_short n₂ a₂ m₂ b₂).maxEVarSucc
                    theorem Auto.Embedding.Lam.LamEquiv.congr_ashr_toNat_equiv_short {lval : LamValuation} {lctx : NatLamSort} {n : Nat} {a₁ a₂ : LamTerm} {m : Nat} {b₁ b₂ : LamTerm} (eqa : LamEquiv lval lctx (LamSort.base (LamBaseSort.bv n)) a₁ a₂) (eqb : LamEquiv lval lctx (LamSort.base (LamBaseSort.bv m)) b₁ b₂) :
                    theorem Auto.Embedding.Lam.LamEquiv.ashr_toNat_equiv_short {lctx : NatLamSort} {a : LamTerm} {n : Nat} {b : LamTerm} {m : Nat} {lval : LamValuation} (wfa : LamWF lval.toLamTyVal { lctx := lctx, rterm := a, rty := LamSort.base (LamBaseSort.bv n) }) (wfb : LamWF lval.toLamTyVal { lctx := lctx, rterm := b, rty := LamSort.base (LamBaseSort.bv m) }) (h : m n) :
                    Equations
                    • One or more equations did not get rendered due to their size.
                    Instances For
                      theorem Auto.Embedding.Lam.LamTerm.congr_maxEVarSucc_ashr_toNat_equiv_long {a₁ a₂ b₁ b₂ : LamTerm} {n₁ m₁ n₂ m₂ : Nat} (eqa : a₁.maxEVarSucc = a₂.maxEVarSucc) (eqb : b₁.maxEVarSucc = b₂.maxEVarSucc) :
                      (ashr_toNat_equiv_long n₁ a₁ m₁ b₁).maxEVarSucc = (ashr_toNat_equiv_long n₂ a₂ m₂ b₂).maxEVarSucc
                      theorem Auto.Embedding.Lam.LamEquiv.congr_ashr_toNat_equiv_long {lval : LamValuation} {lctx : NatLamSort} {n : Nat} {a₁ a₂ : LamTerm} {m : Nat} {b₁ b₂ : LamTerm} (eqa : LamEquiv lval lctx (LamSort.base (LamBaseSort.bv n)) a₁ a₂) (eqb : LamEquiv lval lctx (LamSort.base (LamBaseSort.bv m)) b₁ b₂) :
                      theorem Auto.Embedding.Lam.LamEquiv.ashr_toNat_equiv_long {lctx : NatLamSort} {a : LamTerm} {n : Nat} {b : LamTerm} {m : Nat} {lval : LamValuation} (wfa : LamWF lval.toLamTyVal { lctx := lctx, rterm := a, rty := LamSort.base (LamBaseSort.bv n) }) (wfb : LamWF lval.toLamTyVal { lctx := lctx, rterm := b, rty := LamSort.base (LamBaseSort.bv m) }) (h : m > n) :
                      Instances For
                        theorem Auto.Embedding.Lam.LamEquiv.pushBVCast {lctx : NatLamSort} {ct : BVCastType} {t : LamTerm} {s : LamSort} {lval : LamValuation} (wft : LamWF lval.toLamTyVal { lctx := lctx, rterm := LamTerm.applyBVCast ct t, rty := s }) :