@@ -88,6 +88,9 @@ theorem degreeLE_eq_span_X_pow [DecidableEq R] {n : ℕ} :
8888theorem 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]
9295theorem 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
146134theorem 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