File: Mathlib/Algebra/Polynomial/Expand.lean

full_name: Polynomial.expand
code: /-- Expand the polynomial by a factor of p, so `∑ aₙ xⁿ` becomes `∑ aₙ xⁿᵖ`. -/
noncomputable def expand : R[X] →ₐ[R] R[X] 
goal: R[X] →ₐ[R] R[X]

full_name: Polynomial.coe_expand
code: theorem coe_expand : (expand R p : R[X] → R[X]) = eval₂ C (X ^ p) 
goal: ⇑(Polynomial.expand R p) = Polynomial.eval₂ Polynomial.C (Polynomial.X ^ p)

full_name: Polynomial.expand_eq_comp_X_pow
code: theorem expand_eq_comp_X_pow {f : R[X]} : expand R p f = f.comp (X ^ p) 
goal: (Polynomial.expand R p) f = f.comp (Polynomial.X ^ p)

full_name: Polynomial.expand_eq_sum
code: theorem expand_eq_sum {f : R[X]} : expand R p f = f.sum fun e a => C a * (X ^ p) ^ e 
goal: (Polynomial.expand R p) f = f.sum fun e a => Polynomial.C a * (Polynomial.X ^ p) ^ e

full_name: Polynomial.expand_C
code: @[simp]
theorem expand_C (r : R) : expand R p (C r) = C r 
goal: (Polynomial.expand R p) (Polynomial.C r) = Polynomial.C r

full_name: Polynomial.expand_X
code: @[simp]
theorem expand_X : expand R p X = X ^ p 
goal: (Polynomial.expand R p) Polynomial.X = Polynomial.X ^ p

full_name: Polynomial.expand_monomial
code: @[simp]
theorem expand_monomial (r : R) : expand R p (monomial q r) = monomial (q * p) r 
goal: (Polynomial.expand R p) ((Polynomial.monomial q) r) = (Polynomial.monomial (q * p)) r

full_name: Polynomial.expand_expand
code: theorem expand_expand (f : R[X]) : expand R p (expand R q f) = expand R (p * q) f 
goal: (Polynomial.expand R p) ((Polynomial.expand R q) f) = (Polynomial.expand R (p * q)) f

full_name: Polynomial.expand_mul
code: theorem expand_mul (f : R[X]) : expand R (p * q) f = expand R p (expand R q f) 
goal: (Polynomial.expand R (p * q)) f = (Polynomial.expand R p) ((Polynomial.expand R q) f)

full_name: Polynomial.expand_zero
code: @[simp]
theorem expand_zero (f : R[X]) : expand R 0 f = C (eval 1 f) 
goal: (Polynomial.expand R 0) f = Polynomial.C (Polynomial.eval 1 f)

full_name: Polynomial.expand_one
code: @[simp]
theorem expand_one (f : R[X]) : expand R 1 f = f 
goal: (Polynomial.expand R 1) f = f

full_name: Polynomial.expand_pow
code: theorem expand_pow (f : R[X]) : expand R (p ^ q) f = (expand R p)^[q] f 
goal: (Polynomial.expand R (p ^ q)) f = (⇑(Polynomial.expand R p))^[q] f

full_name: Polynomial.derivative_expand
code: theorem derivative_expand (f : R[X]) : Polynomial.derivative (expand R p f) =
    expand R p (Polynomial.derivative f) * (p * (X ^ (p - 1) : R[X])) 
goal: Polynomial.derivative ((Polynomial.expand R p) f) =
  (Polynomial.expand R p) (Polynomial.derivative f) * (↑p * Polynomial.X ^ (p - 1))

full_name: Polynomial.coeff_expand
code: theorem coeff_expand {p : ℕ} (hp : 0 < p) (f : R[X]) (n : ℕ) :
    (expand R p f).coeff n = if p ∣ n then f.coeff (n / p) else 0 
goal: ((Polynomial.expand R p) f).coeff n = if p ∣ n then f.coeff (n / p) else 0

full_name: Polynomial.coeff_expand_mul
code: @[simp]
theorem coeff_expand_mul {p : ℕ} (hp : 0 < p) (f : R[X]) (n : ℕ) :
    (expand R p f).coeff (n * p) = f.coeff n 
goal: ((Polynomial.expand R p) f).coeff (n * p) = f.coeff n

full_name: Polynomial.coeff_expand_mul'
code: @[simp]
theorem coeff_expand_mul' {p : ℕ} (hp : 0 < p) (f : R[X]) (n : ℕ) :
    (expand R p f).coeff (p * n) = f.coeff n 
goal: ((Polynomial.expand R p) f).coeff (p * n) = f.coeff n

full_name: Polynomial.expand_injective
code: /-- Expansion is injective. -/
theorem expand_injective {n : ℕ} (hn : 0 < n) : Function.Injective (expand R n) 
goal: Function.Injective ⇑(Polynomial.expand R n)

full_name: Polynomial.expand_inj
code: theorem expand_inj {p : ℕ} (hp : 0 < p) {f g : R[X]} : expand R p f = expand R p g ↔ f = g 
goal: (Polynomial.expand R p) f = (Polynomial.expand R p) g ↔ f = g

full_name: Polynomial.expand_eq_zero
code: theorem expand_eq_zero {p : ℕ} (hp : 0 < p) {f : R[X]} : expand R p f = 0 ↔ f = 0 
goal: (Polynomial.expand R p) f = 0 ↔ f = 0

full_name: Polynomial.expand_ne_zero
code: theorem expand_ne_zero {p : ℕ} (hp : 0 < p) {f : R[X]} : expand R p f ≠ 0 ↔ f ≠ 0 
goal: (Polynomial.expand R p) f ≠ 0 ↔ f ≠ 0

full_name: Polynomial.expand_eq_C
code: theorem expand_eq_C {p : ℕ} (hp : 0 < p) {f : R[X]} {r : R} : expand R p f = C r ↔ f = C r 
goal: (Polynomial.expand R p) f = Polynomial.C r ↔ f = Polynomial.C r

full_name: Polynomial.natDegree_expand
code: theorem natDegree_expand (p : ℕ) (f : R[X]) : (expand R p f).natDegree = f.natDegree * p 
goal: ((Polynomial.expand R p) f).natDegree = f.natDegree * p

full_name: Polynomial.leadingCoeff_expand
code: theorem leadingCoeff_expand {p : ℕ} {f : R[X]} (hp : 0 < p) :
    (expand R p f).leadingCoeff = f.leadingCoeff 
goal: ((Polynomial.expand R p) f).leadingCoeff = f.leadingCoeff

full_name: Polynomial.monic_expand_iff
code: theorem monic_expand_iff {p : ℕ} {f : R[X]} (hp : 0 < p) : (expand R p f).Monic ↔ f.Monic 
goal: ((Polynomial.expand R p) f).Monic ↔ f.Monic

full_name: Polynomial.map_expand
code: theorem map_expand {p : ℕ} {f : R →+* S} {q : R[X]} :
    map f (expand R p q) = expand S p (map f q) 
goal: Polynomial.map f ((Polynomial.expand R p) q) = (Polynomial.expand S p) (Polynomial.map f q)

full_name: Polynomial.expand_eval
code: @[simp]
theorem expand_eval (p : ℕ) (P : R[X]) (r : R) : eval r (expand R p P) = eval (r ^ p) P 
goal: Polynomial.eval r ((Polynomial.expand R p) P) = Polynomial.eval (r ^ p) P

full_name: Polynomial.expand_aeval
code: @[simp]
theorem expand_aeval {A : Type*} [Semiring A] [Algebra R A] (p : ℕ) (P : R[X]) (r : A) :
    aeval r (expand R p P) = aeval (r ^ p) P 
goal: (Polynomial.aeval r) ((Polynomial.expand R p) P) = (Polynomial.aeval (r ^ p)) P

full_name: Polynomial.contract
code: /-- The opposite of `expand`: sends `∑ aₙ xⁿᵖ` to `∑ aₙ xⁿ`. -/
noncomputable def contract (p : ℕ) (f : R[X]) : R[X] 
goal: R[X]

full_name: Polynomial.coeff_contract
code: theorem coeff_contract {p : ℕ} (hp : p ≠ 0) (f : R[X]) (n : ℕ) :
    (contract p f).coeff n = f.coeff (n * p) 
goal: (Polynomial.contract p f).coeff n = f.coeff (n * p)

full_name: Polynomial.map_contract
code: theorem map_contract {p : ℕ} (hp : p ≠ 0) {f : R →+* S} {q : R[X]} :
    (q.contract p).map f = (q.map f).contract p 
goal: Polynomial.map f (Polynomial.contract p q) = Polynomial.contract p (Polynomial.map f q)

full_name: Polynomial.contract_expand
code: theorem contract_expand {f : R[X]} (hp : p ≠ 0) : contract p (expand R p f) = f 
goal: Polynomial.contract p ((Polynomial.expand R p) f) = f

full_name: Polynomial.contract_one
code: theorem contract_one {f : R[X]} : contract 1 f = f 
goal: Polynomial.contract 1 f = f

full_name: Polynomial.expand_contract
code: theorem expand_contract [CharP R p] [NoZeroDivisors R] {f : R[X]} (hf : Polynomial.derivative f = 0)
    (hp : p ≠ 0) : expand R p (contract p f) = f 
goal: (Polynomial.expand R p) (Polynomial.contract p f) = f

full_name: Polynomial.expand_contract'
code: theorem expand_contract' [NoZeroDivisors R] {f : R[X]} (hf : Polynomial.derivative f = 0) :
    expand R p (contract p f) = f 
goal: (Polynomial.expand R p) (Polynomial.contract p f) = f

full_name: Polynomial.expand_char
code: theorem expand_char (f : R[X]) : map (frobenius R p) (expand R p f) = f ^ p 
goal: Polynomial.map (frobenius R p) ((Polynomial.expand R p) f) = f ^ p

full_name: Polynomial.map_expand_pow_char
code: theorem map_expand_pow_char (f : R[X]) (n : ℕ) :
    map (frobenius R p ^ n) (expand R (p ^ n) f) = f ^ p ^ n 
goal: Polynomial.map (frobenius R p ^ n) ((Polynomial.expand R (p ^ n)) f) = f ^ p ^ n

full_name: Polynomial.rootMultiplicity_expand_pow
code: theorem rootMultiplicity_expand_pow :
    (expand R (p ^ n) f).rootMultiplicity r = p ^ n * f.rootMultiplicity (r ^ p ^ n) 
goal: Polynomial.rootMultiplicity r ((Polynomial.expand R (p ^ n)) f) = p ^ n * Polynomial.rootMultiplicity (r ^ p ^ n) f

full_name: Polynomial.rootMultiplicity_expand
code: theorem rootMultiplicity_expand :
    (expand R p f).rootMultiplicity r = p * f.rootMultiplicity (r ^ p) 
goal: Polynomial.rootMultiplicity r ((Polynomial.expand R p) f) = p * Polynomial.rootMultiplicity (r ^ p) f

full_name: Polynomial.isLocalRingHom_expand
code: theorem isLocalRingHom_expand {p : ℕ} (hp : 0 < p) :
    IsLocalRingHom (↑(expand R p) : R[X] →+* R[X]) 
goal: IsLocalRingHom ↑(Polynomial.expand R p)

full_name: Polynomial.of_irreducible_expand
code: theorem of_irreducible_expand {p : ℕ} (hp : p ≠ 0) {f : R[X]} (hf : Irreducible (expand R p f)) :
    Irreducible f 
goal: Irreducible f

full_name: Polynomial.of_irreducible_expand_pow
code: theorem of_irreducible_expand_pow {p : ℕ} (hp : p ≠ 0) {f : R[X]} {n : ℕ} :
    Irreducible (expand R (p ^ n) f) → Irreducible f 
goal: Irreducible ((Polynomial.expand R (p ^ n)) f) → Irreducible f