Skip to content

Commit eddab9d

Browse files
xgenereuxMaría Inés de Frutos Fernández
andcommitted
feat(FunctionField): a function field is finite over Fq(y) for transcendental y (#37447)
Given `F` a function field over `Fq`, we know by assumption that it is finite over `RatFunc Fq`. This PR adds the result that it is also finite over `Fq(y)` for any transcendental `y` over `Fq`. Notes: 1. Instance synthesis is known to be slow with `IntermediateField`, so we guide it in the proof of `finiteDimensional_of_adjoin_transcendental`. 2. While looking for the proof of `Module.Finite.top_left`, it took me a while to find `Module.Finite.of_surjective` as I was looking for equiv lemmas. I've added a comment in the docstring of `Module.Finite.of_equiv_equiv` to ease discovery. 3. Since `LinearMap.id'` requires `σ` to have the same domain and codomain, we explicitly provide a generalized version of it in the proof of `Module.Finite.top_left`. Co-authored-by: María Inés de Frutos Fernández <[mariaines.dff@gmail.com](mailto:mariaines.dff@gmail.com)> Co-authored-by: Xavier Genereux <xaviergenereux@hotmail.com>
1 parent 2e1ad59 commit eddab9d

2 files changed

Lines changed: 64 additions & 0 deletions

File tree

Mathlib/NumberTheory/FunctionField.lean

Lines changed: 57 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,8 @@ public import Mathlib.RingTheory.DedekindDomain.IntegralClosure
1010
public import Mathlib.RingTheory.IntegralClosure.IntegrallyClosed
1111
public import Mathlib.Topology.Algebra.Valued.ValuedField
1212
public import Mathlib.Topology.Algebra.InfiniteSum.Defs
13+
public import Mathlib.FieldTheory.RatFunc.IntermediateField
14+
public import Mathlib.RingTheory.Adjoin.Polynomial.Bivariate
1315
public import Mathlib.FieldTheory.RatFunc.Valuation -- for deprecation to `RatFunc.inftyValuation` and `RatFunc.CompletionAtInfty`
1416

1517
/-!
@@ -196,4 +198,59 @@ alias valuedFtInfty.def := RatFunc.valuedCompletionAtInfty.def
196198

197199
end deprecated
198200

201+
section AdjoinTranscendental
202+
203+
open IntermediateField RatFunc
204+
205+
variable {F K : Type*} [Field F] [Field K] [Algebra F⟮X⟯ K] [FunctionField F K]
206+
207+
instance FiniteDimensional.adjoin_X : FiniteDimensional F⟮(X : F⟮X⟯)⟯ K :=
208+
have : Module.Finite (⊤ : IntermediateField F F⟮X⟯) F⟮X⟯ :=
209+
.top_left F⟮X⟯ F⟮X⟯
210+
RatFunc.adjoin_X (K := F) ▸ Module.Finite.trans F⟮X⟯ _
211+
212+
variable [Algebra F K] [IsScalarTower F F⟮X⟯ K]
213+
214+
theorem FiniteDimensional.adjoin_algebraMap_X :
215+
FiniteDimensional F⟮algebraMap _ K (X : F⟮X⟯)⟯ K :=
216+
.of_restrictScalars_finite F⟮(X : F⟮X⟯)⟯ _ _
217+
218+
theorem Algebra.IsAlgebraic.adjoin_algebraMap_X :
219+
Algebra.IsAlgebraic F⟮algebraMap _ K (X : F⟮X⟯)⟯ K := by
220+
exact .tower_top (K := F⟮(X : F⟮X⟯)⟯) _
221+
222+
variable {y : K}
223+
224+
theorem isAlgebraic_X_over_adjoin_transcendental (hy : Transcendental F y) :
225+
IsAlgebraic F⟮y⟯ (algebraMap _ K (X : F⟮X⟯)) :=
226+
isAlgebraic_adjoin_iff.mpr (.adjoin_singleton transcendental_X hy
227+
(isAlgebraic_adjoin_iff.mp (Algebra.IsAlgebraic.isAlgebraic y)))
228+
229+
lemma finiteDimensional_of_adjoin_transcendental (hy : Transcendental F y) :
230+
FiniteDimensional F⟮y⟯ K :=
231+
-- Local definitions for convenience
232+
let x := algebraMap _ K (X : F⟮X⟯)
233+
let Fyx := restrictScalars F F⟮y⟯⟮x⟯
234+
let Fxy := restrictScalars F F⟮x⟯⟮y⟯
235+
-- Recalling instance to speed up search
236+
let : Algebra F⟮y⟯ Fyx := F⟮y⟯⟮x⟯.algebra
237+
let : Module F⟮y⟯ Fyx := Algebra.toModule
238+
let : SMul F⟮y⟯ Fyx := Algebra.toSMul
239+
let : Algebra F⟮x⟯ Fxy := F⟮x⟯⟮y⟯.algebra
240+
let : Module F⟮x⟯ Fxy := Algebra.toModule
241+
let : SMul F⟮x⟯ Fxy := Algebra.toSMul
242+
let : FiniteDimensional F⟮y⟯ Fyx :=
243+
adjoin.finiteDimensional
244+
(isAlgebraic_iff_isIntegral.mp (isAlgebraic_X_over_adjoin_transcendental hy))
245+
let : FiniteDimensional Fyx K := by
246+
let := FiniteDimensional.adjoin_algebraMap_X (F := F) (K := K)
247+
unfold Fyx
248+
rw [adjoin_simple_comm]
249+
let : IsScalarTower F⟮x⟯ Fxy K := isScalarTower_mid' F⟮x⟯⟮y⟯
250+
exact .right F⟮x⟯ Fxy K
251+
let : IsScalarTower F⟮y⟯ Fyx K := isScalarTower_mid' F⟮y⟯⟮x⟯
252+
.trans F⟮y⟯ Fyx K
253+
254+
end AdjoinTranscendental
255+
199256
end FunctionField

Mathlib/RingTheory/Finiteness/Basic.lean

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -340,6 +340,12 @@ instance bot : Module.Finite R (⊥ : Submodule R M) := .of_fg fg_bot
340340

341341
instance top [Module.Finite R M] : Module.Finite R (⊤ : Submodule R M) := .of_fg fg_top
342342

343+
instance top_left [Module.Finite R M] : Module.Finite (⊤ : Subsemiring R) M :=
344+
have : RingHomSurjective (Subsemiring.topEquiv (R := R)).symm.toRingHom :=
345+
RingHomSurjective.instToRingHomRingEquiv Subsemiring.topEquiv.symm
346+
of_surjective (σ := (Subsemiring.topEquiv (R := R)).symm.toRingHom)
347+
⟨⟨id, fun _ _ ↦ rfl⟩, fun _ _ ↦ rfl⟩ Function.surjective_id
348+
343349
variable {M}
344350

345351
/-- The submodule generated by a finite set is `R`-finite. -/
@@ -367,6 +373,7 @@ theorem trans {R : Type*} (A M : Type*) [Semiring R] [Semiring A] [Module R A]
367373
Finite.image2 _ s.finite_toSet t.finite_toSet,
368374
by rw [image2_smul, span_smul_of_span_eq_top hs (↑t : Set M), ht, restrictScalars_top]⟩⟩
369375

376+
/-- See also `Module.Finite.of_surjective` and `LinearMap.finite_iff_of_bijective`. -/
370377
lemma of_equiv_equiv {A₁ B₁ A₂ B₂ : Type*} [CommSemiring A₁] [CommSemiring B₁]
371378
[CommSemiring A₂] [Semiring B₂] [Algebra A₁ B₁] [Algebra A₂ B₂] (e₁ : A₁ ≃+* A₂)
372379
(e₂ : B₁ ≃+* B₂)

0 commit comments

Comments
 (0)