@@ -49,7 +49,8 @@ noncomputable def rootsEquivRoots' {F : Type*} [Field F] (p : F[X])
4949theorem 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
5556end 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+ have hφ2 : 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