@@ -4,7 +4,9 @@ Released under Apache 2.0 license as described in the file LICENSE.
4
4
Authors: Andrew Yang
5
5
-/
6
6
import Mathlib.RingTheory.IntegrallyClosed
7
- import Mathlib.RingTheory.Norm
7
+ import Mathlib.RingTheory.LocalProperties
8
+ import Mathlib.RingTheory.Localization.NormTrace
9
+ import Mathlib.RingTheory.Localization.LocalizationLocalization
8
10
import Mathlib.RingTheory.DedekindDomain.IntegralClosure
9
11
/-!
10
12
# Restriction of various maps between fields to integrally closed subrings.
@@ -15,9 +17,10 @@ We call this the AKLB setup.
15
17
16
18
## Main definition
17
19
- `galRestrict`: The restriction `Aut(L/K) → Aut(B/A)` as an `MulEquiv` in an AKLB setup.
18
-
19
- ## TODO
20
- Define the restriction of norms and traces.
20
+ - `Algebra.intTrace`: The trace map of a finite extension of integrally closed domains `B/A` is
21
+ defined to be the restriction of the trace map of `Frac(B)/Frac(A)`.
22
+ - `Algebra.intNorm`: The norm map of a finite extension of integrally closed domains `B/A` is
23
+ defined to be the restriction of the norm map of `Frac(B)/Frac(A)`.
21
24
22
25
-/
23
26
open BigOperators nonZeroDivisors
@@ -27,6 +30,8 @@ variable (A K L B : Type*) [CommRing A] [CommRing B] [Algebra A B] [Field K] [Fi
27
30
[Algebra K L] [Algebra A L] [IsScalarTower A B L] [IsScalarTower A K L]
28
31
[IsIntegralClosure B A L] [FiniteDimensional K L]
29
32
33
+ section galois
34
+
30
35
/-- The lift `End(B/A) → End(L/K)` in an ALKB setup.
31
36
This is inverse to the restriction. See `galRestrictHom`. -/
32
37
noncomputable
@@ -119,3 +124,337 @@ lemma prod_galRestrict_eq_norm [IsGalois K L] [IsIntegrallyClosed A] (x : B) :
119
124
rw [← IsScalarTower.algebraMap_apply, IsScalarTower.algebraMap_eq A K L]
120
125
simp only [map_prod, algebraMap_galRestrict_apply, IsIntegralClosure.algebraMap_mk',
121
126
Algebra.norm_eq_prod_automorphisms, AlgHom.coe_coe, RingHom.coe_comp, Function.comp_apply]
127
+
128
+ end galois
129
+
130
+ attribute [local instance] FractionRing.liftAlgebra FractionRing.isScalarTower_liftAlgebra
131
+
132
+ noncomputable
133
+ instance (priority := 900 ) [IsDomain A] [IsDomain B] [IsIntegrallyClosed B]
134
+ [Module.Finite A B] [NoZeroSMulDivisors A B] : Fintype (B ≃ₐ[A] B) :=
135
+ haveI : IsIntegralClosure B A (FractionRing B) :=
136
+ IsIntegralClosure.of_isIntegrallyClosed _ _ _ (Algebra.IsIntegral.of_finite A B)
137
+ haveI : IsLocalization (Algebra.algebraMapSubmonoid B A⁰) (FractionRing B) :=
138
+ IsIntegralClosure.isLocalization _ (FractionRing A) _ _
139
+ (isAlgebraic_of_isFractionRing _ _ (Algebra.IsIntegral.of_finite A B))
140
+ haveI : FiniteDimensional (FractionRing A) (FractionRing B) :=
141
+ Module.Finite_of_isLocalization A B _ _ A⁰
142
+ Fintype.ofEquiv _ (galRestrict A (FractionRing A) (FractionRing B) B).toEquiv
143
+
144
+ variable {Aₘ Bₘ} [CommRing Aₘ] [CommRing Bₘ] [Algebra Aₘ Bₘ] [Algebra A Aₘ] [Algebra B Bₘ]
145
+ variable [Algebra A Bₘ] [IsScalarTower A Aₘ Bₘ] [IsScalarTower A B Bₘ]
146
+ variable (M : Submonoid A) [IsLocalization M Aₘ]
147
+ variable [IsLocalization (Algebra.algebraMapSubmonoid B M) Bₘ]
148
+
149
+ section trace
150
+
151
+ /-- The restriction of the trace on `L/K` restricted onto `B/A` in an AKLB setup.
152
+ See `Algebra.intTrace` instead. -/
153
+ noncomputable
154
+ def Algebra.intTraceAux [IsIntegrallyClosed A] :
155
+ B →ₗ[A] A :=
156
+ (IsIntegralClosure.equiv A (integralClosure A K) K A).toLinearMap.comp
157
+ ((((Algebra.trace K L).restrictScalars A).comp
158
+ (IsScalarTower.toAlgHom A B L).toLinearMap).codRestrict
159
+ (Subalgebra.toSubmodule <| integralClosure A K) (fun x ↦ isIntegral_trace
160
+ (IsIntegral.algebraMap (IsIntegralClosure.isIntegral A L x))))
161
+
162
+ variable {A K L B}
163
+
164
+ lemma Algebra.map_intTraceAux [IsIntegrallyClosed A] (x : B) :
165
+ algebraMap A K (Algebra.intTraceAux A K L B x) = Algebra.trace K L (algebraMap B L x) :=
166
+ IsIntegralClosure.algebraMap_equiv A (integralClosure A K) K A _
167
+
168
+ variable (A B)
169
+
170
+ variable [IsDomain A] [IsIntegrallyClosed A] [IsDomain B] [IsIntegrallyClosed B]
171
+ variable [Module.Finite A B] [NoZeroSMulDivisors A B]
172
+
173
+ /-- The trace of a finite extension of integrally closed domains `B/A` is the restriction of
174
+ the trace on `Frac(B)/Frac(A)` onto `B/A`. See `Algebra.algebraMap_intTrace`. -/
175
+ noncomputable
176
+ def Algebra.intTrace : B →ₗ[A] A :=
177
+ haveI : IsIntegralClosure B A (FractionRing B) :=
178
+ IsIntegralClosure.of_isIntegrallyClosed _ _ _ (Algebra.IsIntegral.of_finite _ _)
179
+ haveI : IsLocalization (algebraMapSubmonoid B A⁰) (FractionRing B) :=
180
+ IsIntegralClosure.isLocalization _ (FractionRing A) _ _
181
+ (isAlgebraic_of_isFractionRing _ _ (Algebra.IsIntegral.of_finite A B))
182
+ haveI : FiniteDimensional (FractionRing A) (FractionRing B) :=
183
+ Module.Finite_of_isLocalization A B _ _ A⁰
184
+ Algebra.intTraceAux A (FractionRing A) (FractionRing B) B
185
+
186
+ variable {A B}
187
+
188
+ lemma Algebra.algebraMap_intTrace (x : B) :
189
+ algebraMap A K (Algebra.intTrace A B x) = Algebra.trace K L (algebraMap B L x) := by
190
+ haveI : IsIntegralClosure B A (FractionRing B) :=
191
+ IsIntegralClosure.of_isIntegrallyClosed _ _ _ (Algebra.IsIntegral.of_finite A B)
192
+ haveI : IsLocalization (algebraMapSubmonoid B A⁰) (FractionRing B) :=
193
+ IsIntegralClosure.isLocalization _ (FractionRing A) _ _
194
+ (isAlgebraic_of_isFractionRing _ _ (Algebra.IsIntegral.of_finite A B))
195
+ haveI : FiniteDimensional (FractionRing A) (FractionRing B) :=
196
+ Module.Finite_of_isLocalization A B _ _ A⁰
197
+ haveI := IsIntegralClosure.isFractionRing_of_finite_extension A K L B
198
+ apply (FractionRing.algEquiv A K).symm.injective
199
+ rw [AlgEquiv.commutes, Algebra.intTrace, Algebra.map_intTraceAux,
200
+ ← AlgEquiv.commutes (FractionRing.algEquiv B L)]
201
+ apply Algebra.trace_eq_of_equiv_equiv (FractionRing.algEquiv A K).toRingEquiv
202
+ (FractionRing.algEquiv B L).toRingEquiv
203
+ apply IsLocalization.ringHom_ext A⁰
204
+ simp only [AlgEquiv.toRingEquiv_eq_coe, ← AlgEquiv.coe_ringHom_commutes, RingHom.comp_assoc,
205
+ AlgHom.comp_algebraMap_of_tower, ← IsScalarTower.algebraMap_eq, RingHom.comp_assoc]
206
+
207
+ lemma Algebra.algebraMap_intTrace_fractionRing (x : B) :
208
+ algebraMap A (FractionRing A) (Algebra.intTrace A B x) =
209
+ Algebra.trace (FractionRing A) (FractionRing B) (algebraMap B _ x) := by
210
+ haveI : IsIntegralClosure B A (FractionRing B) :=
211
+ IsIntegralClosure.of_isIntegrallyClosed _ _ _ (Algebra.IsIntegral.of_finite A B)
212
+ haveI : IsLocalization (algebraMapSubmonoid B A⁰) (FractionRing B) :=
213
+ IsIntegralClosure.isLocalization _ (FractionRing A) _ _
214
+ (isAlgebraic_of_isFractionRing _ _ (Algebra.IsIntegral.of_finite A B))
215
+ haveI : FiniteDimensional (FractionRing A) (FractionRing B) :=
216
+ Module.Finite_of_isLocalization A B _ _ A⁰
217
+ exact Algebra.map_intTraceAux x
218
+
219
+ variable (A B)
220
+
221
+ lemma Algebra.intTrace_eq_trace [Module.Free A B] : Algebra.intTrace A B = Algebra.trace A B := by
222
+ ext x
223
+ haveI : IsIntegralClosure B A (FractionRing B) :=
224
+ IsIntegralClosure.of_isIntegrallyClosed _ _ _ (Algebra.IsIntegral.of_finite A B)
225
+ haveI : IsLocalization (algebraMapSubmonoid B A⁰) (FractionRing B) :=
226
+ IsIntegralClosure.isLocalization _ (FractionRing A) _ _
227
+ (isAlgebraic_of_isFractionRing _ _ (Algebra.IsIntegral.of_finite A B))
228
+ apply IsFractionRing.injective A (FractionRing A)
229
+ rw [Algebra.algebraMap_intTrace_fractionRing, Algebra.trace_localization A A⁰]
230
+
231
+ open nonZeroDivisors
232
+
233
+ variable [IsDomain Aₘ] [IsIntegrallyClosed Aₘ] [IsDomain Bₘ] [IsIntegrallyClosed Bₘ]
234
+ variable [NoZeroSMulDivisors Aₘ Bₘ] [Module.Finite Aₘ Bₘ]
235
+
236
+ lemma Algebra.intTrace_eq_of_isLocalization
237
+ (x : B) :
238
+ algebraMap A Aₘ (Algebra.intTrace A B x) = Algebra.intTrace Aₘ Bₘ (algebraMap B Bₘ x) := by
239
+ by_cases hM : 0 ∈ M
240
+ · have := IsLocalization.uniqueOfZeroMem (S := Aₘ) hM
241
+ exact Subsingleton.elim _ _
242
+ replace hM : M ≤ A⁰ := fun x hx ↦ mem_nonZeroDivisors_iff_ne_zero.mpr (fun e ↦ hM (e ▸ hx))
243
+ let K := FractionRing A
244
+ let L := FractionRing B
245
+ have : IsIntegralClosure B A L :=
246
+ IsIntegralClosure.of_isIntegrallyClosed _ _ _ (Algebra.IsIntegral.of_finite A B)
247
+ have : IsLocalization (algebraMapSubmonoid B A⁰) L :=
248
+ IsIntegralClosure.isLocalization _ (FractionRing A) _ _
249
+ (isAlgebraic_of_isFractionRing _ _ (Algebra.IsIntegral.of_finite A B))
250
+ let f : Aₘ →+* K := IsLocalization.map _ (T := A⁰) (RingHom.id A) hM
251
+ letI := f.toAlgebra
252
+ have : IsScalarTower A Aₘ K := IsScalarTower.of_algebraMap_eq'
253
+ (by rw [RingHom.algebraMap_toAlgebra, IsLocalization.map_comp, RingHomCompTriple.comp_eq])
254
+ letI := IsFractionRing.isFractionRing_of_isDomain_of_isLocalization M Aₘ K
255
+ let g : Bₘ →+* L := IsLocalization.map _
256
+ (M := algebraMapSubmonoid B M) (T := algebraMapSubmonoid B A⁰)
257
+ (RingHom.id B) (Submonoid.monotone_map hM)
258
+ letI := g.toAlgebra
259
+ have : IsScalarTower B Bₘ L := IsScalarTower.of_algebraMap_eq'
260
+ (by rw [RingHom.algebraMap_toAlgebra, IsLocalization.map_comp, RingHomCompTriple.comp_eq])
261
+ letI := ((algebraMap K L).comp f).toAlgebra
262
+ have : IsScalarTower Aₘ K L := IsScalarTower.of_algebraMap_eq' rfl
263
+ have : IsScalarTower Aₘ Bₘ L := by
264
+ apply IsScalarTower.of_algebraMap_eq'
265
+ apply IsLocalization.ringHom_ext M
266
+ rw [RingHom.algebraMap_toAlgebra, RingHom.algebraMap_toAlgebra (R := Bₘ), RingHom.comp_assoc,
267
+ RingHom.comp_assoc, ← IsScalarTower.algebraMap_eq, IsScalarTower.algebraMap_eq A B Bₘ,
268
+ IsLocalization.map_comp, RingHom.comp_id, ← RingHom.comp_assoc, IsLocalization.map_comp,
269
+ RingHom.comp_id, ← IsScalarTower.algebraMap_eq, ← IsScalarTower.algebraMap_eq]
270
+ letI := IsFractionRing.isFractionRing_of_isDomain_of_isLocalization
271
+ (algebraMapSubmonoid B M) Bₘ L
272
+ have : FiniteDimensional K L := Module.Finite_of_isLocalization A B _ _ A⁰
273
+ have : IsIntegralClosure Bₘ Aₘ L :=
274
+ IsIntegralClosure.of_isIntegrallyClosed _ _ _ (Algebra.IsIntegral.of_finite Aₘ Bₘ)
275
+ apply IsFractionRing.injective Aₘ K
276
+ rw [← IsScalarTower.algebraMap_apply, Algebra.algebraMap_intTrace_fractionRing,
277
+ Algebra.algebraMap_intTrace (L := L), ← IsScalarTower.algebraMap_apply]
278
+
279
+ end trace
280
+
281
+ section norm
282
+
283
+ variable [IsIntegrallyClosed A]
284
+
285
+ /-- The restriction of the norm on `L/K` restricted onto `B/A` in an AKLB setup.
286
+ See `Algebra.intNorm` instead. -/
287
+ noncomputable
288
+ def Algebra.intNormAux [IsIntegrallyClosed A] [IsSeparable K L] :
289
+ B →* A where
290
+ toFun := fun s ↦ IsIntegralClosure.mk' (R := A) A (Algebra.norm K (algebraMap B L s))
291
+ (isIntegral_norm K <| IsIntegral.map (IsScalarTower.toAlgHom A B L)
292
+ (IsIntegralClosure.isIntegral A L s))
293
+ map_one' := by simp
294
+ map_mul' := fun x y ↦ by simpa using IsIntegralClosure.mk'_mul _ _ _ _ _
295
+
296
+ variable {A K L B}
297
+
298
+ lemma Algebra.map_intNormAux [IsIntegrallyClosed A] [IsSeparable K L] (x : B) :
299
+ algebraMap A K (Algebra.intNormAux A K L B x) = Algebra.norm K (algebraMap B L x) := by
300
+ dsimp [Algebra.intNormAux]
301
+ exact IsIntegralClosure.algebraMap_mk' _ _ _
302
+
303
+ variable (A B)
304
+
305
+ variable [IsDomain A] [IsIntegrallyClosed A] [IsDomain B] [IsIntegrallyClosed B]
306
+ variable [Module.Finite A B] [NoZeroSMulDivisors A B]
307
+ variable [IsSeparable (FractionRing A) (FractionRing B)] -- TODO: remove this
308
+
309
+ /-- The norm of a finite extension of integrally closed domains `B/A` is the restriction of
310
+ the norm on `Frac(B)/Frac(A)` onto `B/A`. See `Algebra.algebraMap_intNorm`. -/
311
+ noncomputable
312
+ def Algebra.intNorm : B →* A :=
313
+ haveI : IsIntegralClosure B A (FractionRing B) :=
314
+ IsIntegralClosure.of_isIntegrallyClosed _ _ _ (Algebra.IsIntegral.of_finite A B)
315
+ haveI : IsLocalization (algebraMapSubmonoid B A⁰) (FractionRing B) :=
316
+ IsIntegralClosure.isLocalization _ (FractionRing A) _ _
317
+ (isAlgebraic_of_isFractionRing _ _ (Algebra.IsIntegral.of_finite A B))
318
+ haveI : FiniteDimensional (FractionRing A) (FractionRing B) :=
319
+ Module.Finite_of_isLocalization A B _ _ A⁰
320
+ Algebra.intNormAux A (FractionRing A) (FractionRing B) B
321
+
322
+ variable {A B}
323
+
324
+ lemma Algebra.algebraMap_intNorm (x : B) :
325
+ algebraMap A K (Algebra.intNorm A B x) = Algebra.norm K (algebraMap B L x) := by
326
+ haveI : IsIntegralClosure B A (FractionRing B) :=
327
+ IsIntegralClosure.of_isIntegrallyClosed _ _ _ (Algebra.IsIntegral.of_finite A B)
328
+ haveI : IsLocalization (algebraMapSubmonoid B A⁰) (FractionRing B) :=
329
+ IsIntegralClosure.isLocalization _ (FractionRing A) _ _
330
+ (isAlgebraic_of_isFractionRing _ _ (Algebra.IsIntegral.of_finite A B))
331
+ haveI : FiniteDimensional (FractionRing A) (FractionRing B) :=
332
+ Module.Finite_of_isLocalization A B _ _ A⁰
333
+ haveI := IsIntegralClosure.isFractionRing_of_finite_extension A K L B
334
+ apply (FractionRing.algEquiv A K).symm.injective
335
+ rw [AlgEquiv.commutes, Algebra.intNorm, Algebra.map_intNormAux,
336
+ ← AlgEquiv.commutes (FractionRing.algEquiv B L)]
337
+ apply Algebra.norm_eq_of_equiv_equiv (FractionRing.algEquiv A K).toRingEquiv
338
+ (FractionRing.algEquiv B L).toRingEquiv
339
+ apply IsLocalization.ringHom_ext A⁰
340
+ simp only [AlgEquiv.toRingEquiv_eq_coe, ← AlgEquiv.coe_ringHom_commutes, RingHom.comp_assoc,
341
+ AlgHom.comp_algebraMap_of_tower, ← IsScalarTower.algebraMap_eq, RingHom.comp_assoc]
342
+
343
+ @[simp]
344
+ lemma Algebra.algebraMap_intNorm_fractionRing (x : B) :
345
+ algebraMap A (FractionRing A) (Algebra.intNorm A B x) =
346
+ Algebra.norm (FractionRing A) (algebraMap B (FractionRing B) x) := by
347
+ haveI : IsIntegralClosure B A (FractionRing B) :=
348
+ IsIntegralClosure.of_isIntegrallyClosed _ _ _ (Algebra.IsIntegral.of_finite A B)
349
+ haveI : IsLocalization (algebraMapSubmonoid B A⁰) (FractionRing B) :=
350
+ IsIntegralClosure.isLocalization _ (FractionRing A) _ _
351
+ (isAlgebraic_of_isFractionRing _ _ (Algebra.IsIntegral.of_finite A B))
352
+ haveI : FiniteDimensional (FractionRing A) (FractionRing B) :=
353
+ Module.Finite_of_isLocalization A B _ _ A⁰
354
+ exact Algebra.map_intNormAux x
355
+
356
+ variable (A B)
357
+
358
+ lemma Algebra.intNorm_eq_norm [Module.Free A B] : Algebra.intNorm A B = Algebra.norm A := by
359
+ ext x
360
+ haveI : IsIntegralClosure B A (FractionRing B) :=
361
+ IsIntegralClosure.of_isIntegrallyClosed _ _ _ (Algebra.IsIntegral.of_finite A B)
362
+ haveI : IsLocalization (algebraMapSubmonoid B A⁰) (FractionRing B) :=
363
+ IsIntegralClosure.isLocalization _ (FractionRing A) _ _
364
+ (isAlgebraic_of_isFractionRing _ _ (Algebra.IsIntegral.of_finite A B))
365
+ apply IsFractionRing.injective A (FractionRing A)
366
+ rw [Algebra.algebraMap_intNorm_fractionRing, Algebra.norm_localization A A⁰]
367
+
368
+ @[simp]
369
+ lemma Algebra.intNorm_zero : Algebra.intNorm A B 0 = 0 := by
370
+ haveI : IsIntegralClosure B A (FractionRing B) :=
371
+ IsIntegralClosure.of_isIntegrallyClosed _ _ _ (Algebra.IsIntegral.of_finite A B)
372
+ haveI : IsLocalization (algebraMapSubmonoid B A⁰) (FractionRing B) :=
373
+ IsIntegralClosure.isLocalization _ (FractionRing A) _ _
374
+ (isAlgebraic_of_isFractionRing _ _ (Algebra.IsIntegral.of_finite A B))
375
+ haveI : FiniteDimensional (FractionRing A) (FractionRing B) :=
376
+ Module.Finite_of_isLocalization A B _ _ A⁰
377
+ apply (IsFractionRing.injective A (FractionRing A))
378
+ simp only [algebraMap_intNorm_fractionRing, map_zero, norm_zero]
379
+
380
+ variable {A B}
381
+
382
+ @[simp]
383
+ lemma Algebra.intNorm_eq_zero {x : B} : Algebra.intNorm A B x = 0 ↔ x = 0 := by
384
+ haveI : IsIntegralClosure B A (FractionRing B) :=
385
+ IsIntegralClosure.of_isIntegrallyClosed _ _ _ (Algebra.IsIntegral.of_finite A B)
386
+ haveI : IsLocalization (algebraMapSubmonoid B A⁰) (FractionRing B) :=
387
+ IsIntegralClosure.isLocalization _ (FractionRing A) _ _
388
+ (isAlgebraic_of_isFractionRing _ _ (Algebra.IsIntegral.of_finite A B))
389
+ haveI : FiniteDimensional (FractionRing A) (FractionRing B) :=
390
+ Module.Finite_of_isLocalization A B _ _ A⁰
391
+ rw [← (IsFractionRing.injective A (FractionRing A)).eq_iff,
392
+ ← (IsFractionRing.injective B (FractionRing B)).eq_iff]
393
+ simp only [algebraMap_intNorm_fractionRing, map_zero, norm_eq_zero_iff]
394
+
395
+ lemma Algebra.intNorm_ne_zero {x : B} : Algebra.intNorm A B x ≠ 0 ↔ x ≠ 0 := by simp
396
+
397
+ variable [IsDomain Aₘ] [IsIntegrallyClosed Aₘ] [IsDomain Bₘ] [IsIntegrallyClosed Bₘ]
398
+ variable [NoZeroSMulDivisors Aₘ Bₘ] [Module.Finite Aₘ Bₘ]
399
+ variable [IsSeparable (FractionRing Aₘ) (FractionRing Bₘ)]
400
+
401
+ lemma Algebra.intNorm_eq_of_isLocalization
402
+ [IsSeparable (FractionRing Aₘ) (FractionRing Bₘ)] (x : B) :
403
+ algebraMap A Aₘ (Algebra.intNorm A B x) = Algebra.intNorm Aₘ Bₘ (algebraMap B Bₘ x) := by
404
+ by_cases hM : 0 ∈ M
405
+ · have := IsLocalization.uniqueOfZeroMem (S := Aₘ) hM
406
+ exact Subsingleton.elim _ _
407
+ replace hM : M ≤ A⁰ := fun x hx ↦ mem_nonZeroDivisors_iff_ne_zero.mpr (fun e ↦ hM (e ▸ hx))
408
+ let K := FractionRing A
409
+ let L := FractionRing B
410
+ have : IsIntegralClosure B A L :=
411
+ IsIntegralClosure.of_isIntegrallyClosed _ _ _ (Algebra.IsIntegral.of_finite A B)
412
+ have : IsLocalization (algebraMapSubmonoid B A⁰) L :=
413
+ IsIntegralClosure.isLocalization _ (FractionRing A) _ _
414
+ (isAlgebraic_of_isFractionRing _ _ (Algebra.IsIntegral.of_finite A B))
415
+ let f : Aₘ →+* K := IsLocalization.map _ (T := A⁰) (RingHom.id A) hM
416
+ letI := f.toAlgebra
417
+ have : IsScalarTower A Aₘ K := IsScalarTower.of_algebraMap_eq'
418
+ (by rw [RingHom.algebraMap_toAlgebra, IsLocalization.map_comp, RingHomCompTriple.comp_eq])
419
+ letI := IsFractionRing.isFractionRing_of_isDomain_of_isLocalization M Aₘ K
420
+ let g : Bₘ →+* L := IsLocalization.map _
421
+ (M := algebraMapSubmonoid B M) (T := algebraMapSubmonoid B A⁰)
422
+ (RingHom.id B) (Submonoid.monotone_map hM)
423
+ letI := g.toAlgebra
424
+ have : IsScalarTower B Bₘ L := IsScalarTower.of_algebraMap_eq'
425
+ (by rw [RingHom.algebraMap_toAlgebra, IsLocalization.map_comp, RingHomCompTriple.comp_eq])
426
+ letI := ((algebraMap K L).comp f).toAlgebra
427
+ have : IsScalarTower Aₘ K L := IsScalarTower.of_algebraMap_eq' rfl
428
+ have : IsScalarTower Aₘ Bₘ L := by
429
+ apply IsScalarTower.of_algebraMap_eq'
430
+ apply IsLocalization.ringHom_ext M
431
+ rw [RingHom.algebraMap_toAlgebra, RingHom.algebraMap_toAlgebra (R := Bₘ), RingHom.comp_assoc,
432
+ RingHom.comp_assoc, ← IsScalarTower.algebraMap_eq, IsScalarTower.algebraMap_eq A B Bₘ,
433
+ IsLocalization.map_comp, RingHom.comp_id, ← RingHom.comp_assoc, IsLocalization.map_comp,
434
+ RingHom.comp_id, ← IsScalarTower.algebraMap_eq, ← IsScalarTower.algebraMap_eq]
435
+ letI := IsFractionRing.isFractionRing_of_isDomain_of_isLocalization
436
+ (algebraMapSubmonoid B M) Bₘ L
437
+ have : FiniteDimensional K L := Module.Finite_of_isLocalization A B _ _ A⁰
438
+ have : IsIntegralClosure Bₘ Aₘ L :=
439
+ IsIntegralClosure.of_isIntegrallyClosed _ _ _ (Algebra.IsIntegral.of_finite Aₘ Bₘ)
440
+ apply IsFractionRing.injective Aₘ K
441
+ rw [← IsScalarTower.algebraMap_apply, Algebra.algebraMap_intNorm_fractionRing,
442
+ Algebra.algebraMap_intNorm (L := L), ← IsScalarTower.algebraMap_apply]
443
+
444
+ end norm
445
+
446
+ lemma Algebra.algebraMap_intNorm_of_isGalois
447
+ [IsDomain A] [IsIntegrallyClosed A] [IsDomain B] [IsIntegrallyClosed B]
448
+ [Module.Finite A B] [NoZeroSMulDivisors A B] [IsGalois (FractionRing A) (FractionRing B)]
449
+ {x : B} :
450
+ algebraMap A B (Algebra.intNorm A B x) = ∏ σ : B ≃ₐ[A] B, σ x := by
451
+ haveI : IsIntegralClosure B A (FractionRing B) :=
452
+ IsIntegralClosure.of_isIntegrallyClosed _ _ _ (Algebra.IsIntegral.of_finite A B)
453
+ haveI : IsLocalization (Algebra.algebraMapSubmonoid B A⁰) (FractionRing B) :=
454
+ IsIntegralClosure.isLocalization _ (FractionRing A) _ _
455
+ (isAlgebraic_of_isFractionRing _ _ (Algebra.IsIntegral.of_finite A B))
456
+ haveI : FiniteDimensional (FractionRing A) (FractionRing B) :=
457
+ Module.Finite_of_isLocalization A B _ _ A⁰
458
+ rw [← (galRestrict A (FractionRing A) (FractionRing B) B).toEquiv.prod_comp]
459
+ simp only [MulEquiv.toEquiv_eq_coe, EquivLike.coe_coe]
460
+ convert (prod_galRestrict_eq_norm A (FractionRing A) (FractionRing B) B x).symm
0 commit comments