Skip to content

Commit cd8454d

Browse files
committed
chore(RingTheory/Polynomial/Basic): golf degreeLTEquiv
1 parent 47186e4 commit cd8454d

1 file changed

Lines changed: 12 additions & 24 deletions

File tree

Mathlib/RingTheory/Polynomial/Basic.lean

Lines changed: 12 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -88,6 +88,9 @@ theorem degreeLE_eq_span_X_pow [DecidableEq R] {n : ℕ} :
8888
theorem mem_degreeLT {n : ℕ} {f : R[X]} : f ∈ degreeLT R n ↔ degree f < n := by
8989
simpa [degreeLT, Submodule.mem_iInf] using (degree_lt_iff_coeff_zero _ _).symm
9090

91+
theorem monomial_coe_mem_degreeLT {n : ℕ} (i : Fin n) (a : R) : monomial i a ∈ degreeLT R n :=
92+
mem_degreeLT.mpr <| degree_monomial_le i a |>.trans_lt <| by simp
93+
9194
@[gcongr, mono]
9295
theorem degreeLT_mono {m n : ℕ} (H : m ≤ n) : degreeLT R m ≤ degreeLT R n := fun _ hf =>
9396
mem_degreeLT.2 (lt_of_lt_of_le (mem_degreeLT.1 hf) <| WithBot.coe_le_coe.2 H)
@@ -105,43 +108,28 @@ theorem degreeLT_eq_span_X_pow [DecidableEq R] {n : ℕ} :
105108
rw [Submodule.span_le, Finset.coe_image, Set.image_subset_iff]
106109
intro k hk
107110
apply mem_degreeLT.2
108-
exact lt_of_le_of_lt (degree_X_pow_le _) (WithBot.coe_lt_coe.2 <| Finset.mem_range.1 hk)
111+
exact degree_X_pow_le _ |>.trans_lt <| WithBot.coe_lt_coe.2 <| Finset.mem_range.1 hk
109112

113+
variable (R) in
110114
/-- The first `n` coefficients on `degreeLT n` form a linear equivalence with `Fin n → R`. -/
111-
def degreeLTEquiv (R) [Semiring R] (n : ℕ) : degreeLT R n ≃ₗ[R] Fin n → R where
115+
def degreeLTEquiv (n : ℕ) : degreeLT R n ≃ₗ[R] Fin n → R where
112116
toFun p n := (↑p : R[X]).coeff n
113117
invFun f :=
114118
⟨∑ i : Fin n, monomial i (f i),
115-
(degreeLT R n).sum_mem fun i _ =>
116-
mem_degreeLT.mpr
117-
(lt_of_le_of_lt (degree_monomial_le i (f i)) (WithBot.coe_lt_coe.mpr i.is_lt))⟩
118-
map_add' p q := by
119-
ext
120-
dsimp
121-
rw [coeff_add]
122-
map_smul' x p := by
123-
ext
124-
dsimp
125-
rw [coeff_smul]
126-
rfl
119+
degreeLT R n |>.sum_mem fun i _ ↦ monomial_coe_mem_degreeLT i (f i)⟩
120+
map_add' p q := by ext; simp
121+
map_smul' x p := by ext; simp
127122
left_inv := by
128123
rintro ⟨p, hp⟩
129124
ext1
130-
simp only
131125
by_cases hp0 : p = 0
132-
· subst hp0
133-
simp only [coeff_zero, map_zero, Finset.sum_const_zero]
126+
· simp [hp0]
127+
dsimp only
134128
rw [mem_degreeLT, degree_eq_natDegree hp0, Nat.cast_lt] at hp
135129
conv_rhs => rw [p.as_sum_range' n hp, ← Fin.sum_univ_eq_sum_range]
136130
right_inv f := by
137131
ext i
138-
simp only [finsetSum_coeff]
139-
rw [Finset.sum_eq_single i, coeff_monomial, if_pos rfl]
140-
· rintro j - hji
141-
rw [coeff_monomial, if_neg]
142-
rwa [← Fin.ext_iff]
143-
· intro h
144-
exact (h (Finset.mem_univ _)).elim
132+
grind [finsetSum_coeff, Finset.sum_eq_single i, coeff_monomial]
145133

146134
theorem degreeLTEquiv_eq_zero_iff_eq_zero {n : ℕ} {p : R[X]} (hp : p ∈ degreeLT R n) :
147135
degreeLTEquiv _ _ ⟨p, hp⟩ = 0 ↔ p = 0 := by simp

0 commit comments

Comments
 (0)