@@ -35,7 +35,7 @@ variable [Algebra R K] [IsFractionRing R K]
35
35
variable [Algebra K L] [FiniteDimensional K L] [Algebra.IsSeparable K L]
36
36
variable [algRL : Algebra R L] [IsScalarTower R K L]
37
37
variable [Algebra R S] [Algebra S L]
38
- variable [ist : IsScalarTower R S L] [iic : IsIntegralClosure S R L]
38
+ variable [ist : IsScalarTower R S L]
39
39
variable (abv : AbsoluteValue R ℤ)
40
40
variable {ι : Type *} [DecidableEq ι] [Fintype ι] (bS : Basis ι R S)
41
41
@@ -235,13 +235,10 @@ theorem exists_mem_finsetApprox (a : S) {b} (hb : b ≠ (0 : R)) :
235
235
· exact mod_cast ε_le
236
236
237
237
/-- We can approximate `a / b : L` with `q / r`, where `r` has finitely many options for `L`. -/
238
- theorem exists_mem_finset_approx' [Algebra.IsAlgebraic R L ] (a : S) {b : S} (hb : b ≠ 0 ) :
238
+ theorem exists_mem_finset_approx' [Algebra.IsAlgebraic R S ] (a : S) {b : S} (hb : b ≠ 0 ) :
239
239
∃ q : S,
240
240
∃ r ∈ finsetApprox bS adm, abv (Algebra.norm R (r • a - q * b)) < abv (Algebra.norm R b) := by
241
- have inj : Function.Injective (algebraMap R L) := by
242
- rw [IsScalarTower.algebraMap_eq R S L]
243
- exact (IsIntegralClosure.algebraMap_injective S R L).comp bS.algebraMap_injective
244
- obtain ⟨a', b', hb', h⟩ := IsIntegralClosure.exists_smul_eq_mul inj a hb
241
+ obtain ⟨a', b', hb', h⟩ := Algebra.IsAlgebraic.exists_smul_eq_mul R a hb
245
242
obtain ⟨q, r, hr, hqr⟩ := exists_mem_finsetApprox bS adm a' hb'
246
243
refine ⟨q, r, hr, ?_⟩
247
244
refine
@@ -268,7 +265,7 @@ theorem ne_bot_of_prod_finsetApprox_mem (J : Ideal S)
268
265
269
266
/-- Each class in the class group contains an ideal `J`
270
267
such that `M := Π m ∈ finsetApprox` is in `J`. -/
271
- theorem exists_mk0_eq_mk0 [IsDedekindDomain S] [Algebra.IsAlgebraic R L ] (I : (Ideal S)⁰) :
268
+ theorem exists_mk0_eq_mk0 [IsDedekindDomain S] [Algebra.IsAlgebraic R S ] (I : (Ideal S)⁰) :
272
269
∃ J : (Ideal S)⁰,
273
270
ClassGroup.mk0 I = ClassGroup.mk0 J ∧
274
271
algebraMap _ _ (∏ m ∈ finsetApprox bS adm, m) ∈ (J : Ideal S) := by
@@ -294,7 +291,7 @@ theorem exists_mk0_eq_mk0 [IsDedekindDomain S] [Algebra.IsAlgebraic R L] (I : (I
294
291
rw [Ideal.dvd_iff_le, Ideal.mul_le]
295
292
intro r' hr' a ha
296
293
rw [Ideal.mem_span_singleton] at hr' ⊢
297
- obtain ⟨q, r, r_mem, lt⟩ := exists_mem_finset_approx' L bS adm a b_ne_zero
294
+ obtain ⟨q, r, r_mem, lt⟩ := exists_mem_finset_approx' bS adm a b_ne_zero
298
295
apply @dvd_of_mul_left_dvd _ _ q
299
296
simp only [Algebra.smul_def] at lt
300
297
rw [←
@@ -310,11 +307,11 @@ noncomputable def mkMMem [IsDedekindDomain S]
310
307
ClassGroup.mk0
311
308
⟨J.1 , mem_nonZeroDivisors_iff_ne_zero.mpr (ne_bot_of_prod_finsetApprox_mem bS adm J.1 J.2 )⟩
312
309
313
- theorem mkMMem_surjective [IsDedekindDomain S] [Algebra.IsAlgebraic R L ] :
310
+ theorem mkMMem_surjective [IsDedekindDomain S] [Algebra.IsAlgebraic R S ] :
314
311
Function.Surjective (ClassGroup.mkMMem bS adm) := by
315
312
intro I'
316
313
obtain ⟨⟨I, hI⟩, rfl⟩ := ClassGroup.mk0_surjective I'
317
- obtain ⟨J, mk0_eq_mk0, J_dvd⟩ := exists_mk0_eq_mk0 L bS adm ⟨I, hI⟩
314
+ obtain ⟨J, mk0_eq_mk0, J_dvd⟩ := exists_mk0_eq_mk0 bS adm ⟨I, hI⟩
318
315
exact ⟨⟨J, J_dvd⟩, mk0_eq_mk0.symm⟩
319
316
320
317
open Classical in
@@ -325,7 +322,7 @@ See also `ClassGroup.fintypeOfAdmissibleOfFinite` where `L` is a finite
325
322
extension of `K = Frac(R)`, supplying most of the required assumptions automatically.
326
323
-/
327
324
noncomputable def fintypeOfAdmissibleOfAlgebraic [IsDedekindDomain S]
328
- [Algebra.IsAlgebraic R L ] : Fintype (ClassGroup S) :=
325
+ [Algebra.IsAlgebraic R S ] : Fintype (ClassGroup S) :=
329
326
@Fintype.ofSurjective _ _ _
330
327
(@Fintype.ofEquiv _
331
328
{ J // J ∣ Ideal.span ({algebraMap R S (∏ m ∈ finsetApprox bS adm, m)} : Set S) }
@@ -336,7 +333,7 @@ noncomputable def fintypeOfAdmissibleOfAlgebraic [IsDedekindDomain S]
336
333
((Equiv.refl _).subtypeEquiv fun I =>
337
334
Ideal.dvd_iff_le.trans (by
338
335
rw [Equiv.refl_apply, Ideal.span_le, Set.singleton_subset_iff]; rfl)))
339
- (ClassGroup.mkMMem bS adm) (ClassGroup.mkMMem_surjective L bS adm)
336
+ (ClassGroup.mkMMem bS adm) (ClassGroup.mkMMem_surjective bS adm)
340
337
341
338
/-- The main theorem: the class group of an integral closure `S` of `R` in a
342
339
finite extension `L` of `K = Frac(R)` is finite if there is an admissible
@@ -345,7 +342,8 @@ absolute value.
345
342
See also `ClassGroup.fintypeOfAdmissibleOfAlgebraic` where `L` is an
346
343
algebraic extension of `R`, that includes some extra assumptions.
347
344
-/
348
- noncomputable def fintypeOfAdmissibleOfFinite : Fintype (ClassGroup S) := by
345
+ noncomputable def fintypeOfAdmissibleOfFinite [IsIntegralClosure S R L] :
346
+ Fintype (ClassGroup S) := by
349
347
letI := Classical.decEq L
350
348
letI := IsIntegralClosure.isFractionRing_of_finite_extension R K L S
351
349
letI := IsIntegralClosure.isDedekindDomain R K L S
@@ -363,9 +361,8 @@ noncomputable def fintypeOfAdmissibleOfFinite : Fintype (ClassGroup S) := by
363
361
· exact Submodule.quotEquivOfEqBot _ rfl
364
362
· exact IsIntegralClosure.algebraMap_injective _ R _
365
363
let bS := b.map ((LinearMap.quotKerEquivRange _).symm ≪≫ₗ f)
366
- have : Algebra.IsAlgebraic R L := ⟨fun x =>
367
- (IsFractionRing.isAlgebraic_iff R K L).mpr (Algebra.IsAlgebraic.isAlgebraic x)⟩
368
- exact fintypeOfAdmissibleOfAlgebraic L bS adm
364
+ have : Algebra.IsIntegral R S := IsIntegralClosure.isIntegral_algebra R L
365
+ exact fintypeOfAdmissibleOfAlgebraic bS adm
369
366
370
367
end IsAdmissible
371
368
0 commit comments