Skip to content

Commit 321abbe

Browse files
committed
1st commit
1 parent 66b2a65 commit 321abbe

File tree

7 files changed

+290
-66
lines changed

7 files changed

+290
-66
lines changed

Mathlib/FieldTheory/Galois/IsGaloisGroup.lean

Lines changed: 122 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -188,4 +188,126 @@ theorem mulEquivCongr_apply_smul [IsGaloisGroup G K L] [Finite G] [IsGaloisGroup
188188
(g : G) (x : L) : mulEquivCongr G H K L g • x = g • x :=
189189
AlgEquiv.ext_iff.mp ((mulEquivAlgEquiv H K L).apply_symm_apply (mulEquivAlgEquiv G K L g)) x
190190

191+
@[simp]
192+
theorem map_mulEquivAlgEquiv_fixingSubgroup
193+
[IsGaloisGroup G K L] [Finite G] (F : IntermediateField K L) :
194+
(fixingSubgroup G (F : Set L)).map (mulEquivAlgEquiv G K L) = F.fixingSubgroup := by
195+
ext g
196+
obtain ⟨g, rfl⟩ := (mulEquivAlgEquiv G K L).surjective g
197+
simp [mem_fixingSubgroup_iff]
198+
199+
variable (H H' : Subgroup G) (F F' : IntermediateField K L)
200+
201+
instance to_subgroup [hGKL : IsGaloisGroup G K L] :
202+
IsGaloisGroup H (FixedPoints.intermediateField H : IntermediateField K L) L where
203+
faithful := have := hGKL.faithful; inferInstance
204+
commutes := inferInstanceAs <| SMulCommClass H (FixedPoints.subfield H L) L
205+
isInvariant := ⟨fun x h ↦ ⟨⟨x, h⟩, rfl⟩⟩
206+
207+
theorem card_subgroup_eq_finrank_fixedpoints [IsGaloisGroup G K L] :
208+
Nat.card H = Module.finrank (FixedPoints.intermediateField H : IntermediateField K L) L :=
209+
card_eq_finrank H (FixedPoints.intermediateField H) L
210+
211+
variable {G K L} in
212+
theorem of_mulEquiv_algEquiv [IsGalois K L] (e : G ≃* Gal(L/K)) (he : ∀ g x, e g x = g • x) :
213+
IsGaloisGroup G K L where
214+
faithful := ⟨fun {g₁ g₂} h ↦ e.injective <| AlgEquiv.ext <| by simpa [he]⟩
215+
commutes := ⟨by simp [← he]⟩
216+
isInvariant := ⟨fun y hy ↦ (InfiniteGalois.mem_bot_iff_fixed y).mpr <|
217+
e.surjective.forall.mpr <| by simpa [he]⟩
218+
219+
instance of_fixed_field [Finite G] [FaithfulSMul G L] :
220+
IsGaloisGroup G (FixedPoints.subfield G L) L :=
221+
of_mulEquiv_algEquiv (FixedPoints.toAlgAutMulEquiv _ _) fun _ _ ↦ rfl
222+
223+
instance to_intermediateField [Finite G] [hGKL : IsGaloisGroup G K L] :
224+
IsGaloisGroup (fixingSubgroup G (F : Set L)) F L :=
225+
let e := ((mulEquivAlgEquiv G K L).subgroupMap (fixingSubgroup G (F : Set L))).trans <|
226+
(MulEquiv.subgroupCongr (map_mulEquivAlgEquiv_fixingSubgroup ..)).trans <|
227+
IntermediateField.fixingSubgroupEquiv F
228+
have := hGKL.isGalois
229+
.of_mulEquiv_algEquiv e fun _ _ ↦ rfl
230+
231+
theorem card_fixingSubgroup_eq_finrank [Finite G] [IsGaloisGroup G K L] :
232+
Nat.card (fixingSubgroup G (F : Set L)) = Module.finrank F L :=
233+
card_eq_finrank ..
234+
235+
section GaloisCorrespondence
236+
237+
theorem fixingSubgroup_le_of_le (h : F ≤ F') :
238+
fixingSubgroup G (F' : Set L) ≤ fixingSubgroup G (F : Set L) :=
239+
fun _ hσ ⟨x, hx⟩ ↦ hσ ⟨x, h hx⟩
240+
241+
section SMulCommClass
242+
243+
variable [SMulCommClass G K L]
244+
245+
theorem fixingSubgroup_bot : fixingSubgroup G ((⊥ : IntermediateField K L) : Set L) = ⊤ := by
246+
simp [Subgroup.ext_iff, mem_fixingSubgroup_iff, IntermediateField.mem_bot]
247+
248+
theorem fixedPoints_bot :
249+
(FixedPoints.intermediateField (⊥ : Subgroup G) : IntermediateField K L) = ⊤ := by
250+
simp [IntermediateField.ext_iff]
251+
252+
theorem le_fixedPoints_iff_le_fixingSubgroup :
253+
F ≤ FixedPoints.intermediateField H ↔ H ≤ fixingSubgroup G (F : Set L) :=
254+
fun h g hg x ↦ h x.2 ⟨g, hg⟩, fun h x hx g ↦ h g.2 ⟨x, hx⟩⟩
255+
256+
theorem fixedPoints_le_of_le (h : H ≤ H') :
257+
FixedPoints.intermediateField H' ≤ (FixedPoints.intermediateField H : IntermediateField K L) :=
258+
fun _ hσ ⟨x, hx⟩ ↦ hσ ⟨x, h hx⟩
259+
260+
end SMulCommClass
261+
262+
section IsGaloisGroup
263+
264+
variable [hGKL : IsGaloisGroup G K L]
265+
266+
theorem fixingSubgroup_top : fixingSubgroup G ((⊤ : IntermediateField K L) : Set L) = ⊥ := by
267+
have := hGKL.faithful
268+
ext; simpa [mem_fixingSubgroup_iff, Set.ext_iff] using MulAction.fixedBy_eq_univ_iff_eq_one
269+
270+
theorem fixedPoints_top :
271+
(FixedPoints.intermediateField (⊤ : Subgroup G) : IntermediateField K L) = ⊥ := by
272+
convert IsGaloisGroup.fixedPoints_eq_bot G K L
273+
ext; simp
274+
275+
/-- The Galois correspondence from intermediate fields to subgroups. -/
276+
noncomputable def intermediateFieldEquivSubgroup [Finite G] :
277+
IntermediateField K L ≃o (Subgroup G)ᵒᵈ :=
278+
have := isGalois G K L
279+
have := finiteDimensional G K L
280+
IsGalois.intermediateFieldEquivSubgroup.trans <| (mulEquivAlgEquiv G K L).comapSubgroup.dual
281+
282+
@[simp] lemma intermediateFieldEquivSubgroup_apply [Finite G] {F} :
283+
intermediateFieldEquivSubgroup G K L F = .toDual (fixingSubgroup G (F : Set L)) := rfl
284+
285+
lemma ofDual_intermediateFieldEquivSubgroup_apply [Finite G] {F} :
286+
(intermediateFieldEquivSubgroup G K L F).ofDual = fixingSubgroup G (F : Set L) := rfl
287+
288+
@[simp] lemma intermediateFieldEquivSubgroup_symm_apply [Finite G] {H} :
289+
(intermediateFieldEquivSubgroup G K L).symm H = FixedPoints.intermediateField H.ofDual := by
290+
obtain ⟨H, rfl⟩ := OrderDual.toDual.surjective H
291+
simp [IntermediateField.ext_iff, intermediateFieldEquivSubgroup,
292+
(mulEquivAlgEquiv G K L).surjective.forall, -mulEquivAlgEquiv_symm_apply]
293+
294+
lemma intermediateFieldEquivSubgroup_symm_apply_toDual [Finite G] {H} :
295+
(intermediateFieldEquivSubgroup G K L).symm (.toDual H) = FixedPoints.intermediateField H :=
296+
intermediateFieldEquivSubgroup_symm_apply ..
297+
298+
theorem fixingSubgroup_fixedPoints [Finite G] :
299+
fixingSubgroup G ((FixedPoints.intermediateField H : IntermediateField K L) : Set L) = H := by
300+
rw [← intermediateFieldEquivSubgroup_symm_apply_toDual,
301+
← ofDual_intermediateFieldEquivSubgroup_apply,
302+
OrderIso.apply_symm_apply, OrderDual.ofDual_toDual]
303+
304+
theorem fixedPoints_fixingSubgroup [Finite G] :
305+
FixedPoints.intermediateField (fixingSubgroup G (F : Set L)) = F := by
306+
rw [← ofDual_intermediateFieldEquivSubgroup_apply, ← intermediateFieldEquivSubgroup_symm_apply,
307+
OrderIso.symm_apply_apply]
308+
309+
end IsGaloisGroup
310+
311+
end GaloisCorrespondence
312+
191313
end IsGaloisGroup

Mathlib/NumberTheory/NumberField/CMField.lean

Lines changed: 78 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -5,20 +5,22 @@ Authors: Xavier Roblot
55
-/
66
module
77

8+
public import Mathlib.FieldTheory.Galois.Abelian
9+
public import Mathlib.FieldTheory.Galois.IsGaloisGroup
810
public import Mathlib.NumberTheory.NumberField.InfinitePlace.TotallyRealComplex
11+
public import Mathlib.NumberTheory.NumberField.Cyclotomic.Embeddings
912
public import Mathlib.NumberTheory.NumberField.Units.Regulator
10-
public import Mathlib.RingTheory.RootsOfUnity.Complex
1113

1214
/-!
1315
# CM-extension of number fields
1416
15-
A CM-extension `K/F` of number fields is an extension where `K` is totally complex, `F` is
17+
A CM-extension `K/F` of fields is an extension where `K` is totally complex, `F` is
1618
totally real and `K` is a quadratic extension of `F`. In this situation, the totally real
1719
subfield `F` is (isomorphic to) the maximal real subfield `K⁺` of `K`.
1820
1921
## Main definitions and results
2022
21-
* `NumberField.IsCMField`: A predicate that says that if a number field is CM, then it is a totally
23+
* `NumberField.IsCMField`: A predicate that says that if a field is CM, then it is a totally
2224
complex quadratic extension of its totally real subfield
2325
2426
* `NumberField.CMExtension.equivMaximalRealSubfield`: Any field `F` such that `K/F` is a
@@ -61,18 +63,18 @@ namespace NumberField
6163
section maximalRealSubfield
6264

6365
/--
64-
A number field `K` is `CM` if `K` is a totally complex quadratic extension of its maximal
66+
A field `K` is `CM` if `K` is a totally complex quadratic extension of its maximal
6567
real subfield `K⁺`.
6668
-/
67-
class IsCMField (K : Type*) [Field K] [NumberField K] : Prop where
69+
class IsCMField (K : Type*) [Field K] [CharZero K] : Prop where
6870
[to_isTotallyComplex : IsTotallyComplex K]
6971
[is_quadratic : IsQuadraticExtension (maximalRealSubfield K) K]
7072

7173
namespace IsCMField
7274

7375
open ComplexEmbedding
7476

75-
variable (K : Type*) [Field K] [NumberField K] [IsCMField K]
77+
variable (K : Type*) [Field K] [CharZero K] [IsCMField K]
7678

7779
local notation3 "K⁺" => maximalRealSubfield K
7880

@@ -82,7 +84,7 @@ instance isQuadraticExtension : IsQuadraticExtension K⁺ K :=
8284
instance isTotallyComplex : IsTotallyComplex K :=
8385
IsCMField.to_isTotallyComplex
8486

85-
theorem card_infinitePlace_eq_card_infinitePlace :
87+
theorem card_infinitePlace_eq_card_infinitePlace [NumberField K] :
8688
Fintype.card (InfinitePlace K⁺) = Fintype.card (InfinitePlace K) := by
8789
rw [card_eq_nrRealPlaces_add_nrComplexPlaces, card_eq_nrRealPlaces_add_nrComplexPlaces,
8890
IsTotallyComplex.nrRealPlaces_eq_zero K, IsTotallyReal.nrComplexPlaces_eq_zero, zero_add,
@@ -94,24 +96,26 @@ theorem card_infinitePlace_eq_card_infinitePlace :
9496
The equiv between the infinite places of `K` and the infinite places of `K⁺` induced by the
9597
restriction to `K⁺`, see `equivInfinitePlace_apply`.
9698
-/
97-
noncomputable def equivInfinitePlace : InfinitePlace K ≃ InfinitePlace K⁺ :=
99+
noncomputable def equivInfinitePlace [NumberField K] : InfinitePlace K ≃ InfinitePlace K⁺ :=
98100
Equiv.ofBijective (fun w ↦ w.comap (algebraMap K⁺ K)) <|
99101
(Fintype.bijective_iff_surjective_and_card _).mpr
100102
⟨comap_surjective, (card_infinitePlace_eq_card_infinitePlace K).symm⟩
101103

102104
@[simp]
103-
theorem equivInfinitePlace_apply (w : InfinitePlace K) :
105+
theorem equivInfinitePlace_apply [NumberField K] (w : InfinitePlace K) :
104106
equivInfinitePlace K w = w.comap (algebraMap K⁺ K) := rfl
105107

106108
@[simp]
107-
theorem equivInfinitePlace_symm_apply (w : InfinitePlace K⁺) (x : K⁺) :
109+
theorem equivInfinitePlace_symm_apply [NumberField K] (w : InfinitePlace K⁺) (x : K⁺) :
108110
(equivInfinitePlace K).symm w (algebraMap K⁺ K x) = w x := by
109111
rw [← comap_apply, ← equivInfinitePlace_apply, Equiv.apply_symm_apply]
110112

111-
theorem units_rank_eq_units_rank :
113+
theorem units_rank_eq_units_rank [NumberField K] :
112114
Units.rank K⁺ = Units.rank K := by
113115
rw [Units.rank, Units.rank, card_infinitePlace_eq_card_infinitePlace K]
114116

117+
section complexConj
118+
115119
theorem exists_isConj (φ : K →+* ℂ) :
116120
∃ σ : K ≃ₐ[K⁺] K, IsConj φ σ :=
117121
exists_isConj_of_isRamified <|
@@ -129,6 +133,8 @@ theorem isConj_eq_isConj {φ ψ : K →+* ℂ} {σ τ : K ≃ₐ[K⁺] K}
129133
((isConj_ne_one_iff hφ).mpr <| IsTotallyComplex.complexEmbedding_not_isReal φ)
130134
((isConj_ne_one_iff hψ).mpr <| IsTotallyComplex.complexEmbedding_not_isReal ψ)
131135

136+
variable [Algebra.IsIntegral ℚ K]
137+
132138
/--
133139
The complex conjugation of the CM-field `K`.
134140
-/
@@ -244,13 +250,15 @@ theorem ringOfIntegersComplexConj_eq_self_iff (x : 𝓞 K) :
244250
· rintro ⟨y, rfl⟩
245251
simp
246252

253+
end complexConj
254+
247255
section units
248256

249257
open Units
250258

251259
/--
252260
The complex conjugation as an isomorphism of the units of `K`. -/
253-
noncomputable abbrev unitsComplexConj : (𝓞 K)ˣ ≃* (𝓞 K)ˣ :=
261+
noncomputable abbrev unitsComplexConj [Algebra.IsIntegral ℚ K] : (𝓞 K)ˣ ≃* (𝓞 K)ˣ :=
254262
Units.mapEquiv <| RingOfIntegers.mapRingEquiv (complexConj K).toRingEquiv
255263

256264
/--
@@ -259,18 +267,20 @@ by the complex conjugation, see `IsCMField.unitsComplexConj_eq_self_iff`.
259267
-/
260268
def realUnits : Subgroup (𝓞 K)ˣ := (Units.map (algebraMap (𝓞 K⁺) (𝓞 K)).toMonoidHom).range
261269

262-
omit [IsCMField K] in
270+
omit [IsCMField K] [CharZero K] in
263271
theorem mem_realUnits_iff (u : (𝓞 K)ˣ) :
264272
u ∈ realUnits K ↔ ∃ v : (𝓞 K⁺)ˣ, algebraMap (𝓞 K⁺) (𝓞 K) v = u := by
265273
simp [realUnits, MonoidHom.mem_range, RingHom.toMonoidHom_eq_coe, Units.ext_iff]
266274

267-
theorem unitsComplexConj_eq_self_iff (u : (𝓞 K)ˣ) :
275+
theorem unitsComplexConj_eq_self_iff [Algebra.IsIntegral ℚ K] (u : (𝓞 K)ˣ) :
268276
unitsComplexConj K u = u ↔ u ∈ realUnits K := by
269277
simp_rw [Units.ext_iff, mem_realUnits_iff, RingOfIntegers.ext_iff, Units.coe_mapEquiv,
270278
AlgEquiv.toRingEquiv_eq_coe, RingEquiv.coe_toMulEquiv, RingOfIntegers.mapRingEquiv_apply,
271279
AlgEquiv.coe_ringEquiv, Units.complexConj_eq_self_iff,
272280
IsScalarTower.algebraMap_apply (𝓞 K⁺) (𝓞 K) K]
273281

282+
variable [NumberField K]
283+
274284
/--
275285
The image of a root of unity by the complex conjugation is its inverse.
276286
This is the version of `Complex.conj_rootsOfUnity` for CM-fields.
@@ -440,7 +450,7 @@ end maximalRealSubfield
440450

441451
namespace CMExtension
442452

443-
variable (F K : Type*) [Field F] [NumberField F] [IsTotallyReal F] [Field K] [NumberField K]
453+
variable (F K : Type*) [Field F] [IsTotallyReal F] [Field K] [CharZero K] [Algebra.IsIntegral ℚ K]
444454
[IsTotallyComplex K] [Algebra F K] [IsQuadraticExtension F K]
445455

446456
theorem eq_maximalRealSubfield (E : Subfield K) [IsTotallyReal E] [IsQuadraticExtension E K] :
@@ -457,6 +467,8 @@ theorem eq_maximalRealSubfield (E : Subfield K) [IsTotallyReal E] [IsQuadraticEx
457467
rw [← SetLike.coe_set_eq, Subfield.coe_toIntermediateField] at h
458468
rw [← sup_eq_left, ← SetLike.coe_set_eq, h, IntermediateField.coe_bot]
459469
aesop
470+
have : Algebra.IsAlgebraic (maximalRealSubfield K) K :=
471+
Algebra.IsAlgebraic.tower_top (K := ℚ) (maximalRealSubfield K)
460472
have : IsTotallyReal K := (h' ▸ isTotallyReal_sup).ofRingEquiv Subring.topEquiv
461473
obtain w : InfinitePlace K := Classical.choice (inferInstance : Nonempty _)
462474
exact (not_isReal_iff_isComplex.mpr (IsTotallyComplex.isComplex w)) (IsTotallyReal.isReal w)
@@ -484,11 +496,18 @@ theorem algebraMap_equivMaximalRealSubfield_symm_apply (x : maximalRealSubfield
484496
algebraMap (maximalRealSubfield K) K x := by
485497
simpa using (equivMaximalRealSubfield_apply F K ((equivMaximalRealSubfield F K).symm x)).symm
486498

499+
end CMExtension
500+
501+
namespace IsCMField
502+
503+
variable (F K : Type*) [Field F] [IsTotallyReal F] [Field K] [CharZero K] [Algebra.IsIntegral ℚ K]
504+
[IsTotallyComplex K] [Algebra F K] [IsQuadraticExtension F K]
505+
487506
include F in
488507
/--
489508
If `K/F` is a CM-extension then `K` is a CM-field.
490509
-/
491-
theorem _root_.NumberField.IsCMField.ofCMExtension :
510+
theorem ofCMExtension :
492511
IsCMField K where
493512
is_quadratic := ⟨(IsQuadraticExtension.finrank_eq_two F K) ▸ finrank_eq_of_equiv_equiv
494513
(CMExtension.equivMaximalRealSubfield F K).symm (RingEquiv.refl K) (by ext; simp)⟩
@@ -497,24 +516,29 @@ open IntermediateField in
497516
/--
498517
A totally complex field that has a unique complex conjugation is CM.
499518
-/
500-
theorem _root_.NumberField.IsCMField.of_forall_isConj {σ : Gal(K/ℚ)}
519+
theorem of_forall_isConj [IsGalois ℚ K] {σ : Gal(K/ℚ)}
501520
(hσ : ∀ φ : K →+* ℂ, IsConj φ σ) : IsCMField K := by
502-
have : IsTotallyReal (fixedField (Subgroup.zpowers σ)) := ⟨fun w ↦ by
521+
let φ : K →+* ℂ := Classical.choice (inferInstance : Nonempty _)
522+
have hσ' : Nat.card (Subgroup.zpowers σ) = 2 := by
523+
rw [Nat.card_zpowers, orderOf_isConj_two_of_ne_one (hσ φ)]
524+
exact (isConj_ne_one_iff (hσ φ)).mpr <| IsTotallyComplex.complexEmbedding_not_isReal φ
525+
have : Finite (Subgroup.zpowers σ) := Nat.finite_of_card_ne_zero (by positivity)
526+
let L := (FixedPoints.intermediateField (Subgroup.zpowers σ) : IntermediateField ℚ K)
527+
have : IsTotallyReal L := ⟨fun w ↦ by
503528
obtain ⟨W, rfl⟩ := w.comap_surjective (K := K)
504-
let τ := subgroupEquivAlgEquiv _ ⟨σ, Subgroup.mem_zpowers σ⟩
505-
have hτ : IsConj W.embedding τ := hσ _
506-
simpa [← isReal_mk_iff, ← InfinitePlace.comap_mk, mk_embedding] using hτ.isReal_comp⟩
507-
have : IsQuadraticExtension (fixedField (Subgroup.zpowers σ)) K := ⟨by
508-
let φ : K →+* ℂ := Classical.choice (inferInstance : Nonempty _)
509-
have hσ' : σ ≠ 1 :=
510-
(isConj_ne_one_iff (hσ φ)).mpr <| IsTotallyComplex.complexEmbedding_not_isReal φ
511-
rw [finrank_fixedField_eq_card, Nat.card_zpowers, orderOf_isConj_two_of_ne_one (hσ φ) hσ']⟩
512-
exact IsCMField.ofCMExtension (fixedField (Subgroup.zpowers σ)) K
529+
dsimp only
530+
rw [← mk_embedding W, comap_mk, isReal_mk_iff]
531+
exact ComplexEmbedding.IsConj.isReal_comp
532+
(σ := IsGaloisGroup.mulEquivAlgEquiv (Subgroup.zpowers σ) L K ⟨σ, Subgroup.mem_zpowers σ⟩)
533+
(hσ W.embedding)⟩
534+
have : IsQuadraticExtension L K := ⟨by
535+
rw [← IsGaloisGroup.card_subgroup_eq_finrank_fixedpoints, hσ']⟩
536+
exact IsCMField.ofCMExtension L K
513537

514538
/--
515539
A totally complex abelian extension of `ℚ` is CM.
516540
-/
517-
instance of_isMulCommutative [IsGalois ℚ K] [IsMulCommutative Gal(K/ℚ)] :
541+
instance of_isAbelianGalois [IsAbelianGalois ℚ K] :
518542
IsCMField K := by
519543
let φ : K →+* ℂ := Classical.choice (inferInstance : Nonempty _)
520544
obtain ⟨σ, hσ₁⟩ : ∃ σ : Gal(K/ℚ), ComplexEmbedding.IsConj φ σ :=
@@ -527,6 +551,30 @@ instance of_isMulCommutative [IsGalois ℚ K] [IsMulCommutative Gal(K/ℚ)] :
527551
exact hσ₁.comp _
528552
exact IsCMField.of_forall_isConj K hσ₂
529553

530-
end CMExtension
554+
@[deprecated (since := "2025-11-19")] alias NumberField.CMExtension.of_isMulCommutative :=
555+
NumberField.IsCMField.of_isAbelianGalois
531556

532-
end NumberField
557+
end NumberField.IsCMField
558+
namespace IsCyclotomicExtension.Rat
559+
560+
variable (K : Type*) [Field K] [CharZero K]
561+
562+
open IntermediateField in
563+
theorem isCMField {S : Set ℕ} (hS : ∃ n ∈ S, 2 < n) [IsCyclotomicExtension S ℚ K] :
564+
IsCMField K := by
565+
have : Algebra.IsIntegral ℚ K := integral S ℚ K
566+
obtain ⟨n, hn₁, hn₂⟩ := hS
567+
have : NeZero n := ⟨by positivity⟩
568+
obtain ⟨ζ, hζ⟩ := exists_isPrimitiveRoot ℚ K hn₁ (by grind)
569+
have : IsTotallyComplex K := by
570+
have : IsCyclotomicExtension {n} ℚ ℚ⟮ζ⟯ := hζ.intermediateField_adjoin_isCyclotomicExtension ℚ
571+
have : IsTotallyComplex ℚ⟮ζ⟯ := isTotallyComplex ℚ⟮ζ⟯ hn₂
572+
exact isTotallyComplex_of_algebra ℚ⟮ζ⟯ _
573+
have := isAbelianGalois S ℚ K
574+
exact IsCMField.of_isAbelianGalois K
575+
576+
instance [IsCyclotomicExtension ⊤ ℚ K] :
577+
IsCMField K :=
578+
isCMField K (S := ⊤) ⟨3, trivial, Nat.lt_succ_self 2
579+
580+
end IsCyclotomicExtension.Rat

0 commit comments

Comments
 (0)