ruc-ai4math/mathlib_handler_benchmark_410 huggingface dataset:
-- Polynomial.sup_ker_aeval_le_ker_aeval_mul
theorem sup_ker_aeval_le_ker_aeval_mul {f : M →ₗ[R] M} {p q : R[X]} :
    LinearMap.ker (aeval f p) ⊔ LinearMap.ker (aeval f q) ≤ LinearMap.ker (aeval f (p * q)) 
Arguments: {R : Type u} {M : Type w} [CommRing R] [AddCommGroup M] [Module R M] {f : M →ₗ[R] M} {p q : R[X]}
Goal: LinearMap.ker ((Polynomial.aeval f) p) ⊔ LinearMap.ker ((Polynomial.aeval f) q) ≤
  LinearMap.ker ((Polynomial.aeval f) (p * q))
-- Polynomial.sup_ker_aeval_eq_ker_aeval_mul_of_coprime
theorem sup_ker_aeval_eq_ker_aeval_mul_of_coprime (f : M →ₗ[R] M) {p q : R[X]}
    (hpq : IsCoprime p q) :
    LinearMap.ker (aeval f p) ⊔ LinearMap.ker (aeval f q) = LinearMap.ker (aeval f (p * q)) 
Arguments: {R : Type u} {M : Type w} [CommRing R] [AddCommGroup M] [Module R M] (f : M →ₗ[R] M) {p q : R[X]} (hpq : IsCoprime p q)
Goal: LinearMap.ker ((Polynomial.aeval f) p) ⊔ LinearMap.ker ((Polynomial.aeval f) q) =
  LinearMap.ker ((Polynomial.aeval f) (p * q))
-- MvPolynomial.aeval_natDegree_le
lemma aeval_natDegree_le {R : Type*} [CommSemiring R] {m n : ℕ}
    (F : MvPolynomial σ R) (hF : F.totalDegree ≤ m)
    (f : σ → Polynomial R) (hf : ∀ i, (f i).natDegree ≤ n) :
    (MvPolynomial.aeval f F).natDegree ≤ m * n 
Arguments: {σ : Type v} {R : Type u_2} [CommSemiring R] {m n : ℕ} (F : MvPolynomial σ R) (hF : F.totalDegree ≤ m) (f : σ → R[X]) (hf : ∀ (i : σ), (f i).natDegree ≤ n)
Goal: ((MvPolynomial.aeval f) F).natDegree ≤ m * n
-- MvPolynomial.isNoetherianRing_fin_0
theorem isNoetherianRing_fin_0 [IsNoetherianRing R] :
    IsNoetherianRing (MvPolynomial (Fin 0) R) 
Arguments: {R : Type u} [CommRing R] [IsNoetherianRing R]
Goal: IsNoetherianRing (MvPolynomial (Fin 0) R)
-- MvPolynomial.isNoetherianRing_fin
theorem isNoetherianRing_fin [IsNoetherianRing R] :
    ∀ {n : ℕ}, IsNoetherianRing (MvPolynomial (Fin n) R)
  
Arguments: {R : Type u} [CommRing R] [IsNoetherianRing R] {n : ℕ}
Goal: IsNoetherianRing (MvPolynomial (Fin n) R)
-- MvPolynomial.noZeroDivisors_fin
theorem noZeroDivisors_fin (R : Type u) [CommSemiring R] [NoZeroDivisors R] :
    ∀ n : ℕ, NoZeroDivisors (MvPolynomial (Fin n) R)
  
Arguments: (R : Type u) [CommSemiring R] [NoZeroDivisors R] (n : ℕ)
Goal: NoZeroDivisors (MvPolynomial (Fin n) R)
-- MvPolynomial.noZeroDivisors_of_finite
theorem noZeroDivisors_of_finite (R : Type u) (σ : Type v) [CommSemiring R] [Finite σ]
    [NoZeroDivisors R] : NoZeroDivisors (MvPolynomial σ R) 
Arguments: (R : Type u) (σ : Type v) [CommSemiring R] [Finite σ] [NoZeroDivisors R]
Goal: NoZeroDivisors (MvPolynomial σ R)
-- MvPolynomial.map_mvPolynomial_eq_eval₂
theorem map_mvPolynomial_eq_eval₂ {S : Type*} [CommRing S] [Finite σ] (ϕ : MvPolynomial σ R →+* S)
    (p : MvPolynomial σ R) :
    ϕ p = MvPolynomial.eval₂ (ϕ.comp MvPolynomial.C) (fun s => ϕ (MvPolynomial.X s)) p 
Arguments: {R : Type u} {σ : Type v} [CommRing R] {S : Type u_2} [CommRing S] [Finite σ] (ϕ : MvPolynomial σ R →+* S) (p : MvPolynomial σ R)
Goal: ϕ p = MvPolynomial.eval₂ (ϕ.comp MvPolynomial.C) (fun s => ϕ (MvPolynomial.X s)) p
-- MvPolynomial.mem_ideal_of_coeff_mem_ideal
theorem mem_ideal_of_coeff_mem_ideal (I : Ideal (MvPolynomial σ R)) (p : MvPolynomial σ R)
    (hcoe : ∀ m : σ →₀ ℕ, p.coeff m ∈ I.comap (C : R →+* MvPolynomial σ R)) : p ∈ I 
Arguments: {R : Type u} {σ : Type v} [CommRing R] (I : Ideal (MvPolynomial σ R)) (p : MvPolynomial σ R) (hcoe : ∀ (m : σ →₀ ℕ), MvPolynomial.coeff m p ∈ Ideal.comap MvPolynomial.C I)
Goal: p ∈ I
-- MvPolynomial.mem_map_C_iff
theorem mem_map_C_iff {I : Ideal R} {f : MvPolynomial σ R} :
    f ∈ (Ideal.map (C : R →+* MvPolynomial σ R) I : Ideal (MvPolynomial σ R)) ↔
      ∀ m : σ →₀ ℕ, f.coeff m ∈ I 
Arguments: {R : Type u} {σ : Type v} [CommRing R] {I : Ideal R} {f : MvPolynomial σ R}
Goal: f ∈ Ideal.map MvPolynomial.C I ↔ ∀ (m : σ →₀ ℕ), MvPolynomial.coeff m f ∈ I
-- MvPolynomial.ker_map
theorem ker_map (f : R →+* S) :
    RingHom.ker (map f : MvPolynomial σ R →+* MvPolynomial σ S) =
    Ideal.map (C : R →+* MvPolynomial σ R) (RingHom.ker f) 
Arguments: {R : Type u} {S : Type u_1} {σ : Type v} [CommRing R] [CommRing S] (f : R →+* S)
Goal: RingHom.ker (MvPolynomial.map f) = Ideal.map MvPolynomial.C (RingHom.ker f)
-- _private.Mathlib.RingTheory.Polynomial.Basic.0.MvPolynomial.uniqueFactorizationMonoid_of_fintype
private theorem uniqueFactorizationMonoid_of_fintype [Fintype σ] :
    UniqueFactorizationMonoid (MvPolynomial σ D) 
Arguments: (σ : Type v) {D : Type u} [CommRing D] [IsDomain D] [UniqueFactorizationMonoid D] [Fintype σ]
Goal: UniqueFactorizationMonoid (MvPolynomial σ D)
-- Polynomial.exists_monic_irreducible_factor
theorem Polynomial.exists_monic_irreducible_factor {F : Type*} [Field F] (f : F[X])
    (hu : ¬IsUnit f) : ∃ g : F[X], g.Monic ∧ Irreducible g ∧ g ∣ f 
Arguments: {F : Type u_2} [Field F] (f : F[X]) (hu : ¬IsUnit f)
Goal: ∃ g, g.Monic ∧ Irreducible g ∧ g ∣ f
-- WittVector.coeff_select
theorem coeff_select (x : 𝕎 R) (n : ℕ) :
    (select P x).coeff n = aeval x.coeff (selectPoly P n) 
Arguments: {p : ℕ} {R : Type u_1} [CommRing R] (P : ℕ → Prop) (x : 𝕎 R) (n : ℕ)
Goal: (WittVector.select P x).coeff n = (MvPolynomial.aeval x.coeff) (WittVector.selectPoly P n)
-- WittVector.select_add_select_not
theorem select_add_select_not : ∀ x : 𝕎 R, select P x + select (fun i => ¬P i) x = x 
Arguments: {p : ℕ} [hp : Fact (Nat.Prime p)] {R : Type u_1} [CommRing R] (P : ℕ → Prop) (x : 𝕎 R)
Goal: WittVector.select P x + WittVector.select (fun i => ¬P i) x = x
-- WittVector.coeff_add_of_disjoint
theorem coeff_add_of_disjoint (x y : 𝕎 R) (h : ∀ n, x.coeff n = 0 ∨ y.coeff n = 0) :
    (x + y).coeff n = x.coeff n + y.coeff n 
Arguments: {p : ℕ} [hp : Fact (Nat.Prime p)] (n : ℕ) {R : Type u_1} [CommRing R] (x y : 𝕎 R) (h : ∀ (n : ℕ), x.coeff n = 0 ∨ y.coeff n = 0)
Goal: (x + y).coeff n = x.coeff n + y.coeff n
-- WittVector.init_add_tail
@[simp]
theorem init_add_tail (x : 𝕎 R) (n : ℕ) : init n x + tail n x = x 
Arguments: {p : ℕ} [hp : Fact (Nat.Prime p)] {R : Type u_1} [CommRing R] (x : 𝕎 R) (n : ℕ)
Goal: WittVector.init n x + WittVector.tail n x = x
-- WittVector.init_init
@[simp]
theorem init_init (x : 𝕎 R) (n : ℕ) : init n (init n x) = init n x 
Arguments: {p : ℕ} {R : Type u_1} [CommRing R] (x : 𝕎 R) (n : ℕ)
Goal: WittVector.init n (WittVector.init n x) = WittVector.init n x
-- WittVector.init_add
theorem init_add (x y : 𝕎 R) (n : ℕ) : init n (x + y) = init n (init n x + init n y) 
Arguments: {p : ℕ} [hp : Fact (Nat.Prime p)] {R : Type u_1} [CommRing R] (x y : 𝕎 R) (n : ℕ)
Goal: WittVector.init n (x + y) = WittVector.init n (WittVector.init n x + WittVector.init n y)
-- WittVector.init_mul
theorem init_mul (x y : 𝕎 R) (n : ℕ) : init n (x * y) = init n (init n x * init n y) 
Arguments: {p : ℕ} [hp : Fact (Nat.Prime p)] {R : Type u_1} [CommRing R] (x y : 𝕎 R) (n : ℕ)
Goal: WittVector.init n (x * y) = WittVector.init n (WittVector.init n x * WittVector.init n y)
-- WittVector.init_neg
theorem init_neg (x : 𝕎 R) (n : ℕ) : init n (-x) = init n (-init n x) 
Arguments: {p : ℕ} [hp : Fact (Nat.Prime p)] {R : Type u_1} [CommRing R] (x : 𝕎 R) (n : ℕ)
Goal: WittVector.init n (-x) = WittVector.init n (-WittVector.init n x)
-- WittVector.init_sub
theorem init_sub (x y : 𝕎 R) (n : ℕ) : init n (x - y) = init n (init n x - init n y) 
Arguments: {p : ℕ} [hp : Fact (Nat.Prime p)] {R : Type u_1} [CommRing R] (x y : 𝕎 R) (n : ℕ)
Goal: WittVector.init n (x - y) = WittVector.init n (WittVector.init n x - WittVector.init n y)
-- WittVector.init_nsmul
theorem init_nsmul (m : ℕ) (x : 𝕎 R) (n : ℕ) : init n (m • x) = init n (m • init n x) 
Arguments: {p : ℕ} [hp : Fact (Nat.Prime p)] {R : Type u_1} [CommRing R] (m : ℕ) (x : 𝕎 R) (n : ℕ)
Goal: WittVector.init n (m • x) = WittVector.init n (m • WittVector.init n x)
-- WittVector.init_zsmul
theorem init_zsmul (m : ℤ) (x : 𝕎 R) (n : ℕ) : init n (m • x) = init n (m • init n x) 
Arguments: {p : ℕ} [hp : Fact (Nat.Prime p)] {R : Type u_1} [CommRing R] (m : ℤ) (x : 𝕎 R) (n : ℕ)
Goal: WittVector.init n (m • x) = WittVector.init n (m • WittVector.init n x)
-- WittVector.init_pow
theorem init_pow (m : ℕ) (x : 𝕎 R) (n : ℕ) : init n (x ^ m) = init n (init n x ^ m) 
Arguments: {p : ℕ} [hp : Fact (Nat.Prime p)] {R : Type u_1} [CommRing R] (m : ℕ) (x : 𝕎 R) (n : ℕ)
Goal: WittVector.init n (x ^ m) = WittVector.init n (WittVector.init n x ^ m)
-- WittVector.init_isPoly
theorem init_isPoly (n : ℕ) : IsPoly p fun _ _ => init n 
Arguments: (p n : ℕ)
Goal: WittVector.IsPoly p fun x x_1 => WittVector.init n
-- TruncatedWittVector.ext
@[ext]
theorem ext {x y : TruncatedWittVector p n R} (h : ∀ i, x.coeff i = y.coeff i) : x = y 
Arguments: {p n : ℕ} {R : Type u_1} {x y : TruncatedWittVector p n R} (h : ∀ (i : Fin n), TruncatedWittVector.coeff i x = TruncatedWittVector.coeff i y)
Goal: x = y
-- TruncatedWittVector.ext_iff
theorem ext_iff {x y : TruncatedWittVector p n R} : x = y ↔ ∀ i, x.coeff i = y.coeff i 
Arguments: {p n : ℕ} {R : Type u_1} {x y : TruncatedWittVector p n R}
Goal: x = y ↔ ∀ (i : Fin n), TruncatedWittVector.coeff i x = TruncatedWittVector.coeff i y
-- TruncatedWittVector.coeff_mk
@[simp]
theorem coeff_mk (x : Fin n → R) (i : Fin n) : (mk p x).coeff i = x i 
Arguments: {p n : ℕ} {R : Type u_1} (x : Fin n → R) (i : Fin n)
Goal: TruncatedWittVector.coeff i (TruncatedWittVector.mk p x) = x i
-- TruncatedWittVector.mk_coeff
@[simp]
theorem mk_coeff (x : TruncatedWittVector p n R) : (mk p fun i => x.coeff i) = x 
Arguments: {p n : ℕ} {R : Type u_1} (x : TruncatedWittVector p n R)
Goal: (TruncatedWittVector.mk p fun i => TruncatedWittVector.coeff i x) = x
-- TruncatedWittVector.coeff_out
@[simp]
theorem coeff_out (x : TruncatedWittVector p n R) (i : Fin n) : x.out.coeff i = x.coeff i 
Arguments: {p n : ℕ} {R : Type u_1} [CommRing R] (x : TruncatedWittVector p n R) (i : Fin n)
Goal: x.out.coeff ↑i = TruncatedWittVector.coeff i x
-- TruncatedWittVector.out_injective
theorem out_injective : Injective (@out p n R _) 
Arguments: {p n : ℕ} {R : Type u_1} [CommRing R]
Goal: Function.Injective TruncatedWittVector.out
-- WittVector.coeff_truncateFun
@[simp]
theorem coeff_truncateFun (x : 𝕎 R) (i : Fin n) : (truncateFun n x).coeff i = x.coeff i 
Arguments: {p n : ℕ} {R : Type u_1} (x : 𝕎 R) (i : Fin n)
Goal: TruncatedWittVector.coeff i (WittVector.truncateFun n x) = x.coeff ↑i
-- WittVector.out_truncateFun
@[simp]
theorem out_truncateFun (x : 𝕎 R) : (truncateFun n x).out = init n x 
Arguments: {p n : ℕ} {R : Type u_1} [CommRing R] (x : 𝕎 R)
Goal: (WittVector.truncateFun n x).out = WittVector.init n x
-- TruncatedWittVector.truncateFun_out
@[simp]
theorem truncateFun_out (x : TruncatedWittVector p n R) : x.out.truncateFun n = x 
Arguments: {p n : ℕ} {R : Type u_1} [CommRing R] (x : TruncatedWittVector p n R)
Goal: WittVector.truncateFun n x.out = x
-- TruncatedWittVector.coeff_zero
@[simp]
theorem coeff_zero (i : Fin n) : (0 : TruncatedWittVector p n R).coeff i = 0 
Arguments: (p : ℕ) [hp : Fact (Nat.Prime p)] (n : ℕ) (R : Type u_1) [CommRing R] (i : Fin n)
Goal: TruncatedWittVector.coeff i 0 = 0
-- WittVector.truncateFun_surjective
theorem truncateFun_surjective : Surjective (@truncateFun p n R) 
Arguments: (p n : ℕ) (R : Type u_1) [CommRing R]
Goal: Function.Surjective (WittVector.truncateFun n)
-- WittVector.truncateFun_zero
@[simp]
theorem truncateFun_zero : truncateFun n (0 : 𝕎 R) = 0 
Arguments: (p : ℕ) [hp : Fact (Nat.Prime p)] (n : ℕ) (R : Type u_1) [CommRing R]
Goal: WittVector.truncateFun n 0 = 0
-- WittVector.truncateFun_one
@[simp]
theorem truncateFun_one : truncateFun n (1 : 𝕎 R) = 1 
Arguments: (p : ℕ) [hp : Fact (Nat.Prime p)] (n : ℕ) (R : Type u_1) [CommRing R]
Goal: WittVector.truncateFun n 1 = 1
-- WittVector.truncateFun_add
@[simp]
theorem truncateFun_add (x y : 𝕎 R) :
    truncateFun n (x + y) = truncateFun n x + truncateFun n y 
Arguments: {p : ℕ} [hp : Fact (Nat.Prime p)] (n : ℕ) {R : Type u_1} [CommRing R] (x y : 𝕎 R)
Goal: WittVector.truncateFun n (x + y) = WittVector.truncateFun n x + WittVector.truncateFun n y
-- WittVector.truncateFun_mul
@[simp]
theorem truncateFun_mul (x y : 𝕎 R) :
    truncateFun n (x * y) = truncateFun n x * truncateFun n y 
Arguments: {p : ℕ} [hp : Fact (Nat.Prime p)] (n : ℕ) {R : Type u_1} [CommRing R] (x y : 𝕎 R)
Goal: WittVector.truncateFun n (x * y) = WittVector.truncateFun n x * WittVector.truncateFun n y
-- WittVector.truncateFun_neg
theorem truncateFun_neg (x : 𝕎 R) : truncateFun n (-x) = -truncateFun n x 
Arguments: {p : ℕ} [hp : Fact (Nat.Prime p)] (n : ℕ) {R : Type u_1} [CommRing R] (x : 𝕎 R)
Goal: WittVector.truncateFun n (-x) = -WittVector.truncateFun n x
-- WittVector.truncateFun_sub
theorem truncateFun_sub (x y : 𝕎 R) :
    truncateFun n (x - y) = truncateFun n x - truncateFun n y 
Arguments: {p : ℕ} [hp : Fact (Nat.Prime p)] (n : ℕ) {R : Type u_1} [CommRing R] (x y : 𝕎 R)
Goal: WittVector.truncateFun n (x - y) = WittVector.truncateFun n x - WittVector.truncateFun n y
-- WittVector.truncateFun_nsmul
theorem truncateFun_nsmul (m : ℕ) (x : 𝕎 R) : truncateFun n (m • x) = m • truncateFun n x 
Arguments: {p : ℕ} [hp : Fact (Nat.Prime p)] (n : ℕ) {R : Type u_1} [CommRing R] (m : ℕ) (x : 𝕎 R)
Goal: WittVector.truncateFun n (m • x) = m • WittVector.truncateFun n x
-- WittVector.truncateFun_zsmul
theorem truncateFun_zsmul (m : ℤ) (x : 𝕎 R) : truncateFun n (m • x) = m • truncateFun n x 
Arguments: {p : ℕ} [hp : Fact (Nat.Prime p)] (n : ℕ) {R : Type u_1} [CommRing R] (m : ℤ) (x : 𝕎 R)
Goal: WittVector.truncateFun n (m • x) = m • WittVector.truncateFun n x
-- WittVector.truncateFun_pow
theorem truncateFun_pow (x : 𝕎 R) (m : ℕ) : truncateFun n (x ^ m) = truncateFun n x ^ m 
Arguments: {p : ℕ} [hp : Fact (Nat.Prime p)] (n : ℕ) {R : Type u_1} [CommRing R] (x : 𝕎 R) (m : ℕ)
Goal: WittVector.truncateFun n (x ^ m) = WittVector.truncateFun n x ^ m
-- WittVector.truncateFun_natCast
theorem truncateFun_natCast (m : ℕ) : truncateFun n (m : 𝕎 R) = m 
Arguments: {p : ℕ} [hp : Fact (Nat.Prime p)] (n : ℕ) {R : Type u_1} [CommRing R] (m : ℕ)
Goal: WittVector.truncateFun n ↑m = ↑m
-- WittVector.truncateFun_intCast
theorem truncateFun_intCast (m : ℤ) : truncateFun n (m : 𝕎 R) = m 
Arguments: {p : ℕ} [hp : Fact (Nat.Prime p)] (n : ℕ) {R : Type u_1} [CommRing R] (m : ℤ)
Goal: WittVector.truncateFun n ↑m = ↑m
-- WittVector.truncate_surjective
theorem truncate_surjective : Surjective (truncate n : 𝕎 R → TruncatedWittVector p n R) 
Arguments: (p : ℕ) [hp : Fact (Nat.Prime p)] (n : ℕ) (R : Type u_1) [CommRing R]
Goal: Function.Surjective ⇑(WittVector.truncate n)
-- WittVector.coeff_truncate
@[simp]
theorem coeff_truncate (x : 𝕎 R) (i : Fin n) : (truncate n x).coeff i = x.coeff i 
Arguments: {p : ℕ} [hp : Fact (Nat.Prime p)] {n : ℕ} {R : Type u_1} [CommRing R] (x : 𝕎 R) (i : Fin n)
Goal: TruncatedWittVector.coeff i ((WittVector.truncate n) x) = x.coeff ↑i
-- WittVector.mem_ker_truncate
theorem mem_ker_truncate (x : 𝕎 R) :
    x ∈ RingHom.ker (@truncate p _ n R _) ↔ ∀ i < n, x.coeff i = 0 
Arguments: {p : ℕ} [hp : Fact (Nat.Prime p)] (n : ℕ) {R : Type u_1} [CommRing R] (x : 𝕎 R)
Goal: x ∈ RingHom.ker (WittVector.truncate n) ↔ ∀ i < n, x.coeff i = 0
-- WittVector.truncate_mk'
@[simp]
theorem truncate_mk' (f : ℕ → R) :
    truncate n (@mk' p _ f) = TruncatedWittVector.mk _ fun k => f k 
Arguments: (p : ℕ) [hp : Fact (Nat.Prime p)] (n : ℕ) {R : Type u_1} [CommRing R] (f : ℕ → R)
Goal: (WittVector.truncate n) { coeff := f } = TruncatedWittVector.mk p fun k => f ↑k
-- TruncatedWittVector.truncate_comp_wittVector_truncate
@[simp]
theorem truncate_comp_wittVector_truncate {m : ℕ} (hm : n ≤ m) :
    (@truncate p _ n R _ m hm).comp (WittVector.truncate m) = WittVector.truncate n 
Arguments: {p : ℕ} [hp : Fact (Nat.Prime p)] {n : ℕ} {R : Type u_1} [CommRing R] {m : ℕ} (hm : n ≤ m)
Goal: (TruncatedWittVector.truncate hm).comp (WittVector.truncate m) = WittVector.truncate n
-- TruncatedWittVector.truncate_wittVector_truncate
@[simp]
theorem truncate_wittVector_truncate {m : ℕ} (hm : n ≤ m) (x : 𝕎 R) :
    truncate hm (WittVector.truncate m x) = WittVector.truncate n x 
Arguments: {p : ℕ} [hp : Fact (Nat.Prime p)] {n : ℕ} {R : Type u_1} [CommRing R] {m : ℕ} (hm : n ≤ m) (x : 𝕎 R)
Goal: (TruncatedWittVector.truncate hm) ((WittVector.truncate m) x) = (WittVector.truncate n) x
-- TruncatedWittVector.truncate_truncate
@[simp]
theorem truncate_truncate {n₁ n₂ n₃ : ℕ} (h1 : n₁ ≤ n₂) (h2 : n₂ ≤ n₃)
    (x : TruncatedWittVector p n₃ R) :
    (truncate h1) (truncate h2 x) = truncate (h1.trans h2) x 
Arguments: {p : ℕ} [hp : Fact (Nat.Prime p)] {R : Type u_1} [CommRing R] {n₁ n₂ n₃ : ℕ} (h1 : n₁ ≤ n₂) (h2 : n₂ ≤ n₃) (x : TruncatedWittVector p n₃ R)
Goal: (TruncatedWittVector.truncate h1) ((TruncatedWittVector.truncate h2) x) = (TruncatedWittVector.truncate ⋯) x
-- TruncatedWittVector.truncate_comp
@[simp]
theorem truncate_comp {n₁ n₂ n₃ : ℕ} (h1 : n₁ ≤ n₂) (h2 : n₂ ≤ n₃) :
    (@truncate p _ _ R _ _ h1).comp (truncate h2) = truncate (h1.trans h2) 
Arguments: {p : ℕ} [hp : Fact (Nat.Prime p)] {R : Type u_1} [CommRing R] {n₁ n₂ n₃ : ℕ} (h1 : n₁ ≤ n₂) (h2 : n₂ ≤ n₃)
Goal: (TruncatedWittVector.truncate h1).comp (TruncatedWittVector.truncate h2) = TruncatedWittVector.truncate ⋯
-- TruncatedWittVector.truncate_surjective
theorem truncate_surjective {m : ℕ} (hm : n ≤ m) : Surjective (@truncate p _ _ R _ _ hm) 
Arguments: {p : ℕ} [hp : Fact (Nat.Prime p)] {n : ℕ} {R : Type u_1} [CommRing R] {m : ℕ} (hm : n ≤ m)
Goal: Function.Surjective ⇑(TruncatedWittVector.truncate hm)
-- TruncatedWittVector.coeff_truncate
@[simp]
theorem coeff_truncate {m : ℕ} (hm : n ≤ m) (i : Fin n) (x : TruncatedWittVector p m R) :
    (truncate hm x).coeff i = x.coeff (Fin.castLE hm i) 
Arguments: {p : ℕ} [hp : Fact (Nat.Prime p)] {n : ℕ} {R : Type u_1} [CommRing R] {m : ℕ} (hm : n ≤ m) (i : Fin n) (x : TruncatedWittVector p m R)
Goal: TruncatedWittVector.coeff i ((TruncatedWittVector.truncate hm) x) = TruncatedWittVector.coeff (Fin.castLE hm i) x
-- TruncatedWittVector.card
theorem card {R : Type*} [Fintype R] :
    Fintype.card (TruncatedWittVector p n R) = Fintype.card R ^ n 
Arguments: (p n : ℕ) {R : Type u_2} [Fintype R]
Goal: Fintype.card (TruncatedWittVector p n R) = Fintype.card R ^ n
-- TruncatedWittVector.iInf_ker_truncate
theorem iInf_ker_truncate : ⨅ i : ℕ, RingHom.ker (@WittVector.truncate p _ i R _) = ⊥ 
Arguments: {p : ℕ} [hp : Fact (Nat.Prime p)] {R : Type u_1} [CommRing R]
Goal: ⨅ i, RingHom.ker (WittVector.truncate i) = ⊥
-- WittVector.truncate_liftFun
@[simp]
theorem truncate_liftFun (s : S) : WittVector.truncate n (liftFun f s) = f n s 
Arguments: {p : ℕ} [hp : Fact (Nat.Prime p)] (n : ℕ) {R : Type u_1} [CommRing R] {S : Type u_2} [Semiring S] {f : (k : ℕ) → S →+* TruncatedWittVector p k R} (f_compat : ∀ (k₁ k₂ : ℕ) (hk : k₁ ≤ k₂), (TruncatedWittVector.truncate hk).comp (f k₂) = f k₁) (s : S)
Goal: (WittVector.truncate n) (WittVector.liftFun f s) = (f n) s
-- WittVector.truncate_lift
@[simp]
theorem truncate_lift (s : S) : WittVector.truncate n (lift _ f_compat s) = f n s 
Arguments: {p : ℕ} [hp : Fact (Nat.Prime p)] (n : ℕ) {R : Type u_1} [CommRing R] {S : Type u_2} [Semiring S] {f : (k : ℕ) → S →+* TruncatedWittVector p k R} (f_compat : ∀ (k₁ k₂ : ℕ) (hk : k₁ ≤ k₂), (TruncatedWittVector.truncate hk).comp (f k₂) = f k₁) (s : S)
Goal: (WittVector.truncate n) ((WittVector.lift f f_compat) s) = (f n) s
-- WittVector.truncate_comp_lift
@[simp]
theorem truncate_comp_lift : (WittVector.truncate n).comp (lift _ f_compat) = f n 
Arguments: {p : ℕ} [hp : Fact (Nat.Prime p)] (n : ℕ) {R : Type u_1} [CommRing R] {S : Type u_2} [Semiring S] {f : (k : ℕ) → S →+* TruncatedWittVector p k R} (f_compat : ∀ (k₁ k₂ : ℕ) (hk : k₁ ≤ k₂), (TruncatedWittVector.truncate hk).comp (f k₂) = f k₁)
Goal: (WittVector.truncate n).comp (WittVector.lift f f_compat) = f n
-- WittVector.lift_unique
theorem lift_unique (g : S →+* 𝕎 R) (g_compat : ∀ k, (WittVector.truncate k).comp g = f k) :
    lift _ f_compat = g 
Arguments: {p : ℕ} [hp : Fact (Nat.Prime p)] {R : Type u_1} [CommRing R] {S : Type u_2} [Semiring S] {f : (k : ℕ) → S →+* TruncatedWittVector p k R} (f_compat : ∀ (k₁ k₂ : ℕ) (hk : k₁ ≤ k₂), (TruncatedWittVector.truncate hk).comp (f k₂) = f k₁) (g : S →+* 𝕎 R) (g_compat : ∀ (k : ℕ), (WittVector.truncate k).comp g = f k)
Goal: WittVector.lift f f_compat = g
-- WittVector.liftEquiv_symm_apply_coe
@[simps]
def liftEquiv : { f : ∀ k, S →+* TruncatedWittVector p k R // ∀ (k₁ k₂) (hk : k₁ ≤ k₂),
    (TruncatedWittVector.truncate hk).comp (f k₂) = f k₁ } ≃ (S →+* 𝕎 R) 
Arguments: {p : ℕ} [hp : Fact (Nat.Prime p)] {R : Type u_1} [CommRing R] {S : Type u_2} [Semiring S] (g : S →+* 𝕎 R) (k : ℕ)
Goal: ↑(WittVector.liftEquiv.symm g) k = (WittVector.truncate k).comp g
-- WittVector.liftEquiv_apply
@[simps]
def liftEquiv : { f : ∀ k, S →+* TruncatedWittVector p k R // ∀ (k₁ k₂) (hk : k₁ ≤ k₂),
    (TruncatedWittVector.truncate hk).comp (f k₂) = f k₁ } ≃ (S →+* 𝕎 R) 
Arguments: {p : ℕ} [hp : Fact (Nat.Prime p)] {R : Type u_1} [CommRing R] {S : Type u_2} [Semiring S] (f : { f // ∀ (k₁ k₂ : ℕ) (hk : k₁ ≤ k₂), (TruncatedWittVector.truncate hk).comp (f k₂) = f k₁ })
Goal: WittVector.liftEquiv f = WittVector.lift ↑f ⋯
-- WittVector.hom_ext
theorem hom_ext (g₁ g₂ : S →+* 𝕎 R) (h : ∀ k, (truncate k).comp g₁ = (truncate k).comp g₂) :
    g₁ = g₂ 
Arguments: {p : ℕ} [hp : Fact (Nat.Prime p)] {R : Type u_1} [CommRing R] {S : Type u_2} [Semiring S] (g₁ g₂ : S →+* 𝕎 R) (h : ∀ (k : ℕ), (WittVector.truncate k).comp g₁ = (WittVector.truncate k).comp g₂)
Goal: g₁ = g₂
-- Algebra.trace_apply
theorem trace_apply (x) : trace R S x = LinearMap.trace R S (lmul R S x) 
Arguments: (R : Type u_1) {S : Type u_2} [CommRing R] [CommRing S] [Algebra R S] (x : S)
Goal: (Algebra.trace R S) x = (LinearMap.trace R S) ((Algebra.lmul R S) x)
-- Algebra.trace_eq_zero_of_not_exists_basis
theorem trace_eq_zero_of_not_exists_basis (h : ¬∃ s : Finset S, Nonempty (Basis s R S)) :
    trace R S = 0 
Arguments: (R : Type u_1) {S : Type u_2} [CommRing R] [CommRing S] [Algebra R S] (h : ¬∃ s, Nonempty (Basis { x // x ∈ s } R S))
Goal: Algebra.trace R S = 0
-- Algebra.trace_eq_matrix_trace
theorem trace_eq_matrix_trace [DecidableEq ι] (b : Basis ι R S) (s : S) :
    trace R S s = Matrix.trace (Algebra.leftMulMatrix b s) 
Arguments: {R : Type u_1} {S : Type u_2} [CommRing R] [CommRing S] [Algebra R S] {ι : Type w} [Fintype ι] [DecidableEq ι] (b : Basis ι R S) (s : S)
Goal: (Algebra.trace R S) s = ((Algebra.leftMulMatrix b) s).trace
-- Algebra.trace_algebraMap_of_basis
theorem trace_algebraMap_of_basis (x : R) : trace R S (algebraMap R S x) = Fintype.card ι • x 
Arguments: {R : Type u_1} {S : Type u_2} [CommRing R] [CommRing S] [Algebra R S] {ι : Type w} [Fintype ι] (b : Basis ι R S) (x : R)
Goal: (Algebra.trace R S) ((algebraMap R S) x) = Fintype.card ι • x
-- Algebra.trace_algebraMap
@[simp]
theorem trace_algebraMap [StrongRankCondition R] [Module.Free R S] (x : R) :
    trace R S (algebraMap R S x) = finrank R S • x 
Arguments: {R : Type u_1} {S : Type u_2} [CommRing R] [CommRing S] [Algebra R S] [StrongRankCondition R] [Module.Free R S] (x : R)
Goal: (Algebra.trace R S) ((algebraMap R S) x) = FiniteDimensional.finrank R S • x
-- Algebra.trace_trace_of_basis
theorem trace_trace_of_basis [Algebra S T] [IsScalarTower R S T] {ι κ : Type*} [Finite ι]
    [Finite κ] (b : Basis ι R S) (c : Basis κ S T) (x : T) :
    trace R S (trace S T x) = trace R T x 
Arguments: {R : Type u_1} {S : Type u_2} {T : Type u_3} [CommRing R] [CommRing S] [CommRing T] [Algebra R S] [Algebra R T] [Algebra S T] [IsScalarTower R S T] {ι : Type u_4} {κ : Type u_5} [Finite ι] [Finite κ] (b : Basis ι R S) (c : Basis κ S T) (x : T)
Goal: (Algebra.trace R S) ((Algebra.trace S T) x) = (Algebra.trace R T) x
-- Algebra.trace_comp_trace_of_basis
theorem trace_comp_trace_of_basis [Algebra S T] [IsScalarTower R S T] {ι κ : Type*} [Finite ι]
    [Finite κ] (b : Basis ι R S) (c : Basis κ S T) :
    (trace R S).comp ((trace S T).restrictScalars R) = trace R T 
Arguments: {R : Type u_1} {S : Type u_2} {T : Type u_3} [CommRing R] [CommRing S] [CommRing T] [Algebra R S] [Algebra R T] [Algebra S T] [IsScalarTower R S T] {ι : Type u_4} {κ : Type u_5} [Finite ι] [Finite κ] (b : Basis ι R S) (c : Basis κ S T)
Goal: Algebra.trace R S ∘ₗ ↑R (Algebra.trace S T) = Algebra.trace R T