Skip to content
This repository was archived by the owner on Jul 24, 2024. It is now read-only.

Commit 0926f07

Browse files
committed
feat(data/polynomial/eval): add some lemmas for comp (#14346)
1 parent eb063e7 commit 0926f07

File tree

2 files changed

+19
-7
lines changed

2 files changed

+19
-7
lines changed

src/data/polynomial/eval.lean

Lines changed: 16 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -474,10 +474,6 @@ by rw [←C_eq_nat_cast, C_mul_comp, C_eq_nat_cast]
474474
@[simp] lemma mul_comp {R : Type*} [comm_semiring R] (p q r : R[X]) :
475475
(p * q).comp r = p.comp r * q.comp r := eval₂_mul _ _
476476

477-
lemma prod_comp {R : Type*} [comm_semiring R] (s : multiset R[X]) (p : R[X]) :
478-
s.prod.comp p = (s.map (λ q : R[X], q.comp p)).prod :=
479-
(s.prod_hom (monoid_hom.mk (λ q : R[X], q.comp p) one_comp (λ q r, mul_comp q r p))).symm
480-
481477
@[simp] lemma pow_comp {R : Type*} [comm_semiring R] (p q : R[X]) (n : ℕ) :
482478
(p^n).comp q = (p.comp q)^n :=
483479
((monoid_hom.mk (λ r : R[X], r.comp q)) one_comp (λ r s, mul_comp r s q)).map_pow p n
@@ -799,6 +795,10 @@ end
799795
def comp_ring_hom : R[X] → R[X] →+* R[X] :=
800796
eval₂_ring_hom C
801797

798+
@[simp] lemma coe_comp_ring_hom (q : R[X]) : (comp_ring_hom q : R[X] → R[X]) = λ p, comp p q := rfl
799+
800+
lemma coe_comp_ring_hom_apply (p q : R[X]) : (comp_ring_hom q : R[X] → R[X]) p = comp p q := rfl
801+
802802
lemma root_mul_left_of_is_root (p : R[X]) {q : R[X]} :
803803
is_root q a → is_root (p * q) a :=
804804
λ H, by rw [is_root, eval_mul, is_root.def.1 H, mul_zero]
@@ -836,6 +836,18 @@ lemma eval_prod {ι : Type*} (s : finset ι) (p : ι → R[X]) (x : R) :
836836
eval x (∏ j in s, p j) = ∏ j in s, eval x (p j) :=
837837
(eval_ring_hom x).map_prod _ _
838838

839+
lemma list_prod_comp (l : list R[X]) (q : R[X]) :
840+
l.prod.comp q = (l.map (λ p : R[X], p.comp q)).prod :=
841+
map_list_prod (comp_ring_hom q) _
842+
843+
lemma multiset_prod_comp (s : multiset R[X]) (q : R[X]) :
844+
s.prod.comp q = (s.map (λ p : R[X], p.comp q)).prod :=
845+
map_multiset_prod (comp_ring_hom q) _
846+
847+
lemma prod_comp {ι : Type*} (s : finset ι) (p : ι → R[X]) (q : R[X]) :
848+
(∏ j in s, p j).comp q = ∏ j in s, (p j).comp q :=
849+
map_prod (comp_ring_hom q) _ _
850+
839851
lemma is_root_prod {R} [comm_ring R] [is_domain R] {ι : Type*}
840852
(s : finset ι) (p : ι → R[X]) (x : R) :
841853
is_root (∏ j in s, p j) x ↔ ∃ i ∈ s, is_root (p i) x :=

src/field_theory/abel_ruffini.lean

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -189,8 +189,8 @@ begin
189189
{ ext1 c,
190190
change (X - C c).comp (C b * X) = C b * (X - C (c / b)),
191191
rw [sub_comp, X_comp, C_comp, mul_sub, ←C_mul, mul_div_cancel' c hb'] },
192-
rw [key1, hs, prod_comp, multiset.map_map, key2, multiset.prod_map_mul, multiset.map_const,
193-
multiset.prod_repeat, hs', ←C_pow, hb, ←mul_assoc, C_mul_C, one_mul],
192+
rw [key1, hs, multiset_prod_comp, multiset.map_map, key2, multiset.prod_map_mul,
193+
multiset.map_const, multiset.prod_repeat, hs', ←C_pow, hb, ←mul_assoc, C_mul_C, one_mul],
194194
all_goals { exact field.to_nontrivial F },
195195
end
196196

@@ -314,7 +314,7 @@ begin
314314
{ obtain ⟨s, hs⟩ := exists_multiset_of_splits _ (splitting_field.splits p),
315315
rw [map_comp, polynomial.map_pow, map_X, hs, mul_comp, C_comp],
316316
apply gal_mul_is_solvable (gal_C_is_solvable _),
317-
rw prod_comp,
317+
rw multiset_prod_comp,
318318
apply gal_prod_is_solvable,
319319
intros q hq,
320320
rw multiset.mem_map at hq,

0 commit comments

Comments
 (0)