Skip to content

Commit cced85e

Browse files
committed
add
1 parent b8a9a13 commit cced85e

2 files changed

Lines changed: 58 additions & 20 deletions

File tree

Mathlib/Algebra/Polynomial/Splits.lean

Lines changed: 17 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -569,26 +569,34 @@ end
569569

570570
section
571571

572-
variable {A B : Type*} [CommRing R] [Field A] [Algebra R A]
572+
variable {A B : Type*} [CommRing R] [CommRing A] [IsDomain A] [Algebra R A]
573573
[CommRing B] [IsDomain B] [Algebra R B] {f : R[X]}
574574

575-
theorem Splits.map_aroots_algebraMap [Algebra A B] [IsScalarTower R A B]
576-
(hf : (f.map (algebraMap R A)).Splits) :
577-
(f.aroots A).map (algebraMap A B) = f.aroots B := by
578-
rw [← aroots_map B A, aroots, aroots, hf.roots_map]
579-
580-
theorem Splits.image_rootSet (hf : (f.map (algebraMap R A)).Splits)
575+
theorem Splits.image_rootSet [IsSimpleRing A] (hf : (f.map (algebraMap R A)).Splits)
581576
(g : A →ₐ[R] B) : g '' f.rootSet A = f.rootSet B := by
582577
classical
583578
rw [rootSet, ← Finset.coe_image, ← Multiset.toFinset_map, ← g.coe_toRingHom,
584-
← hf.roots_map, map_map, g.comp_algebraMap, ← rootSet]
579+
← hf.roots_map_of_injective, map_map, g.comp_algebraMap, ← rootSet]
580+
exact g.injective
585581

586-
theorem Splits.adjoin_rootSet_eq_range
582+
theorem Splits.adjoin_rootSet_eq_range [IsSimpleRing A]
587583
(hf : (f.map (algebraMap R A)).Splits) (g : A →ₐ[R] B) :
588584
Algebra.adjoin R (f.rootSet B) = g.range ↔ Algebra.adjoin R (f.rootSet A) = ⊤ := by
589585
rw [← hf.image_rootSet g, Algebra.adjoin_image, ← Algebra.map_top]
590586
exact (Subalgebra.map_injective g.injective).eq_iff
591587

588+
variable [Algebra A B] [FaithfulSMul A B] [IsScalarTower R A B]
589+
590+
theorem Splits.map_aroots_algebraMap (hf : (f.map (algebraMap R A)).Splits) :
591+
(f.aroots A).map (algebraMap A B) = f.aroots B := by
592+
rw [← aroots_map B A, aroots, aroots,
593+
hf.roots_map_of_injective (FaithfulSMul.algebraMap_injective A B)]
594+
595+
theorem Splits.image_rootSet_algebraMap (hf : (f.map (algebraMap R A)).Splits) :
596+
(algebraMap A B) '' f.rootSet A = f.rootSet B := by
597+
classical
598+
rw [rootSet, ← Finset.coe_image, ← Multiset.toFinset_map, hf.map_aroots_algebraMap, ← rootSet]
599+
592600
end
593601

594602
variable [Field R] {f g : R[X]}

Mathlib/RingTheory/Polynomial/Morse.lean

Lines changed: 41 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -49,7 +49,8 @@ noncomputable def rootsEquivRoots' {F : Type*} [Field F] (p : F[X])
4949
theorem smul_rootsEquivRoots' {F : Type*} [Field F] (p : F[X])
5050
(E E' : Type*) [Field E] [Field E'] [Algebra F E] [Algebra F E']
5151
[Fact (map (algebraMap F E) p).Splits] [Fact (map (algebraMap F E') p).Splits]
52-
{g : p.Gal} (x : p.rootSet E) : g • rootsEquivRoots' p E E' x = rootsEquivRoots' p E E' (g • x) := by
52+
(g : p.Gal) (x : p.rootSet E) :
53+
g • rootsEquivRoots' p E E' x = rootsEquivRoots' p E E' (g • x) := by
5354
simp [rootsEquivRoots', smul_def]
5455

5556
end Polynomial.Gal
@@ -169,36 +170,65 @@ open scoped Pointwise
169170

170171
#check IsPrimitive.irreducible_iff_irreducible_map_fraction_map
171172

172-
theorem tada' (f₀ : ℤ[X]) (hf₀ : Irreducible f₀) (hf' : f₀.Monic)
173+
theorem tada' (f₀ : ℤ[X]) (hf₀ : Irreducible f₀) (hf' : f₀.Monic)
173174
(h : ∀ (F : Type) [Field F], (f₀.map (algebraMap ℤ F)).Splits →
174175
f₀.natDegree ≤ (f₀.rootSet F).ncard + 1) :
175176
Function.Bijective (Gal.galActionHom (f₀.map (algebraMap ℤ ℚ)) ℂ) := by
176177
classical
177178
let f : ℚ[X] := f₀.map (algebraMap ℤ ℚ)
178-
have hf' : Irreducible f := hf₉'.irreducible_iff_irreducible_map_fraction_map.mp hf₀
179+
have hf : Irreducible f := hf₀'.irreducible_iff_irreducible_map_fraction_map.mp hf₀
180+
have hf' : Monic f := hf₀'.map (algebraMap ℤ ℚ)
179181
let K := f.SplittingField
180182
have : Fact (f.map (algebraMap ℚ K)).Splits := ⟨SplittingField.splits f⟩
181183
have : NumberField K := by constructor
182184
have : IsGalois ℚ K :=
183185
{ to_isSeparable := inferInstance
184-
to_normal := Polynomial.SplittingField.instNormal f }
186+
to_normal := SplittingField.instNormal f }
185187
let R := 𝓞 K
188+
let := Ring.toIntAlgebra R
189+
have foo := @aeval_algebraMap_apply (R := ℤ) (A := R) K _ _ _ _ _ _ (IsScalarTower.of_algebraMap_eq' rfl)
186190
let G := f.Gal
187-
have := Gal.galAction_isPretransitive f ℂ hf'
188-
let e : f₀.rootSet R ≃ f.rootSet ℂ := by
189-
let e₀ : f₀.rootSet R ≃ f.rootSet K := by
190-
sorry
191-
let e1 : f.rootSet K ≃ f.rootSet ℂ := Polynomial.Gal.rootsEquivRoots f ℂ
191+
have := Gal.galAction_isPretransitive f ℂ hf
192+
have : Set.BijOn v (f₀.rootSet R) (f.rootSet K) := by
193+
rw [rootSet, rootSet, aroots_map, ← rootSet, ← rootSet] -- rootSet_map lemma
194+
have := Polynomial.Splits.image_rootSet_algebraMap (f := f₀) (A := R) (B := K) ?_ v
195+
196+
rw [← Polynomial.Splits.image_rootSet (f := f₀) ?_ v] -- switch to algebraMap version
197+
suffices Set.InjOn (algebraMap R K) ∧
198+
refine ⟨?_, ?_⟩
199+
sorry
200+
have hφ : Set.MapsTo (algebraMap R K) (f₀.rootSet R) (f.rootSet K) := by
201+
intro x hx
202+
rw [hf'.mem_rootSet, aeval_map_algebraMap, foo, aeval_eq_zero_of_mem_rootSet hx, map_zero]
203+
let φ : f₀.rootSet R → f.rootSet K := hφ.restrict
204+
have2 : Function.Bijective (hφ.restrict) := by
205+
rw [Function.Bijective, hφ.restrict_inj, hφ.restrict_surjective_iff]
206+
refine ⟨RingOfIntegers.coe_injective.injOn, ?_⟩
207+
intro x hx
208+
have h0 : aeval x f₀ = 0 := by
209+
rwa [mem_rootSet, aeval_map_algebraMap, and_iff_right hf.ne_zero] at hx
210+
let y : integralClosure ℤ K := ⟨x, f₀, hf₀', h0⟩
211+
refine ⟨y, ?_, rfl⟩
212+
rw [mem_rootSet, and_iff_right hf₀.ne_zero]
213+
simpa using (foo y f₀).symm.trans h0
214+
let e₀ := Equiv.ofBijective hφ.restrict hφ2
215+
let e₁ : f₀.rootSet R ≃ f.rootSet K := by
192216

193217
sorry
194-
have he (g : G) (x : f₀.rootSet R) : e (g • x) = g • e x := by
218+
have he (g : G) (x : f₀.rootSet R) : e (g • x) = g • e x := by
195219
sorry
220+
let e₂ : f.rootSet K ≃ f.rootSet ℂ := Gal.rootsEquivRoots' f K ℂ
221+
have he₂ (g : G) (x : f.rootSet K) : e₂ (g • x) = g • e₂ x :=
222+
(Gal.smul_rootsEquivRoots' f K ℂ g x).symm
223+
let e : f₀.rootSet R ≃ f.rootSet ℂ := e₁.trans e₂
224+
have he (g : G) (x : f₀.rootSet R) : e (g • x) = g • e x := by
225+
simp [e, he₁, he₂]
196226
have : MulAction.IsPretransitive G (f₀.rootSet R) := by
197227
refine ⟨fun x y ↦ ?_⟩
198228
obtain ⟨g, hg⟩ := MulAction.exists_smul_eq f.Gal (e x) (e y)
199229
exact ⟨g, e.injective ((he g x).trans hg)⟩
200230
suffices Function.Surjective (MulAction.toPermHom G (f₀.rootSet R)) by
201-
use Polynomial.Gal.galActionHom_injective (f₀.map (algebraMap ℤ ℚ)) ℂ
231+
use Gal.galActionHom_injective (f₀.map (algebraMap ℤ ℚ)) ℂ
202232
intro φ
203233
obtain ⟨g, hg⟩ := this (e.permCongr.symm φ)
204234
use g

0 commit comments

Comments
 (0)