Definitions/Def_AlgebraicCurve_PoleDivisorPackage.lean
Pole-divisor packages and transcendence towers for function fields
Two bundles of data for the divisor theory of a function field F over a base field K, in the project's framework where a place v of F/K is a proper valuation subring containing K whose ring is a principal ideal domain, \mathrm{Divisor}\,K\,F is the free abelian group on places, v.\mathrm{ord} is the normalised valuation, \deg is \sum_v D(v)\,[\kappa(v):K], and LSpace D is the space of f with \mathrm{ord}_v f \ge -D(v) for all v.
PoleDivisorPackage K F carries: an element x \in F; an effective divisor B \ge 0 with x \in L(B); a positive natural number n with \deg B = n; a natural number c; a family u_1,\dots,u_n \in L(cB); and, as a field of the structure, the assertion that the doubly indexed family (x^{j}u_i)_{j \in \mathbb{N},\, i \le n} is K-linearly independent. Note that n is tied to \deg B only, not to [F:K(x)], and the transcendence of x is encoded implicitly in the independence field. HasPoleDivisorPackage is its nonemptiness.
TranscendenceTower K E F, for a tower K \subseteq E \subseteq F, carries x \in E whose powers (x^{j})_{j \in \mathbb{N}} are K-linearly independent, together with a place v of E/K with \deg v = 1, \mathrm{ord}_v x = -1, and \mathrm{ord}_u x \ge 0 for every other place u of E/K; so x has a single simple pole, at a rational place. Its poleDivisor is the pullback to F (a sum over places above v weighted by the ramification indices, defined as the least positive value of \mathrm{ord}_w on E^{\times}) of the divisor 1\cdot v, available under separability of F/E and the existence of principal divisors on F; xF is the image of x in F, and RegularOutside A T says that every element of a ring A mapping to E lies in the valuation subring of each place u \ne v.
The remaining declarations are predicates on such a tower: IntegralBasisInLSpace (and its nonemptiness HasIntegralBasisInLSpace) asks for some c \in \mathbb{N} and an E-linearly independent family of [F:E] elements of F lying in L(c \cdot \mathrm{poleDivisor}); HasIntegralBasisRegularOutside asks instead for an E-linearly independent family of [F:E] elements regular at every place w of F/K whose restriction to E is not v; and HasRegularFractionSubring asks for a K-subalgebra A \subseteq E with E as fraction field all of whose elements are regular away from v.
Relation to Mathlib
Mathlib has no theory of places and divisors of a function field in this shape; these structures are built on the project's own Place, Divisor, ramification index, pullback and LSpace (the Riemann–Roch space) rather than on Mathlib's Ideal.ramificationIdx and Dedekind-domain machinery.
Where it is used
These data types package the hypotheses used in the project's treatment of Riemann's inequality for a function field — bounding \deg D - \ell(D) and thereby producing the genus and the finiteness of the index of specialty — which underlies the Riemann–Roch theory applied to modular curves.
References
- H. Stichtenoth, Algebraic Function Fields and Codes, Graduate Texts in Mathematics 254, Springer, 2009, I.4.12–I.4.14 and I.5.2
- C. Chevalley, Introduction to the Theory of Algebraic Functions of One Variable, Mathematical Surveys 6, American Mathematical Society, 1951
References are suggested automatically and have not been individually verified.
English text generated automatically from the Lean source; the Lean statement is authoritative.
- 102 lines
- 32 declarations
- used in the statements of 17 theorems and imported by 19 proofs
- imports 2 definition modules
Source file: Definitions/Def_AlgebraicCurve_PoleDivisorPackage.lean
Imported by
- no other definition module
Declarations
- structure
AlgebraicCurve.PoleDivisorPackage - field
AlgebraicCurve.PoleDivisorPackage.x - field
AlgebraicCurve.PoleDivisorPackage.B - field
AlgebraicCurve.PoleDivisorPackage.hB_eff - field
AlgebraicCurve.PoleDivisorPackage.hx_mem - field
AlgebraicCurve.PoleDivisorPackage.n - field
AlgebraicCurve.PoleDivisorPackage.hn_pos - field
AlgebraicCurve.PoleDivisorPackage.degB_eq - field
AlgebraicCurve.PoleDivisorPackage.c - field
AlgebraicCurve.PoleDivisorPackage.u - field
AlgebraicCurve.PoleDivisorPackage.hu_mem - field
AlgebraicCurve.PoleDivisorPackage.lin_indep - def
AlgebraicCurve.HasPoleDivisorPackage - structure
AlgebraicCurve.TranscendenceTower - field
AlgebraicCurve.TranscendenceTower.x - field
AlgebraicCurve.TranscendenceTower.hx_indep - field
AlgebraicCurve.TranscendenceTower.v - field
AlgebraicCurve.TranscendenceTower.hvdeg - field
AlgebraicCurve.TranscendenceTower.hxv - field
AlgebraicCurve.TranscendenceTower.hxreg - abbrev
AlgebraicCurve.TranscendenceTower.xF - def
AlgebraicCurve.TranscendenceTower.poleDivisor - def
AlgebraicCurve.TranscendenceTower.RegularOutside - structure
AlgebraicCurve.IntegralBasisInLSpace - field
AlgebraicCurve.IntegralBasisInLSpace.T - field
AlgebraicCurve.IntegralBasisInLSpace.c - field
AlgebraicCurve.IntegralBasisInLSpace.u - field
AlgebraicCurve.IntegralBasisInLSpace.hu_indep - field
AlgebraicCurve.IntegralBasisInLSpace.hu_mem - def
AlgebraicCurve.HasIntegralBasisInLSpace - def
AlgebraicCurve.HasIntegralBasisRegularOutside - def
AlgebraicCurve.HasRegularFractionSubring
Source
import Mathlib import Definitions.Def_AlgebraicCurve_DivisorPushPull import Definitions.Def_AlgebraicCurve_AdelicIndex set_option autoImplicit false noncomputable section namespace AlgebraicCurve structure PoleDivisorPackage (K F : Type*) [Field K] [Field F] [Algebra K F] where x : F B : Divisor K F hB_eff : 0 ≤ B hx_mem : x ∈ LSpace B n : ℕ hn_pos : 0 < n degB_eq : Divisor.degree B = n c : ℕ u : Fin n → F hu_mem : ∀ i, u i ∈ LSpace (c • B) lin_indep : LinearIndependent K (fun p : ℕ × Fin n => x ^ p.1 * u p.2) def HasPoleDivisorPackage (K F : Type*) [Field K] [Field F] [Algebra K F] : Prop := Nonempty (PoleDivisorPackage K F) variable {K E F : Type*} [Field K] [Field E] [Field F] [Algebra K E] [Algebra K F] [Algebra E F] [IsScalarTower K E F] structure TranscendenceTower (K E F : Type*) [Field K] [Field E] [Field F] [Algebra K E] [Algebra K F] [Algebra E F] [IsScalarTower K E F] where x : E hx_indep : LinearIndependent K (fun j : ℕ => x ^ j) v : Place K E hvdeg : v.deg = 1 hxv : v.ord x = -1 hxreg : ∀ u : Place K E, u ≠ v → 0 ≤ u.ord x namespace TranscendenceTower variable (T : TranscendenceTower K E F) abbrev xF : F := algebraMap E F T.x def poleDivisor [Algebra.IsSeparable E F] [HasPrincipalDivisors K F] : Divisor K F := Divisor.pullback F (Finsupp.single T.v 1) def RegularOutside (A : Type*) [CommRing A] [Algebra A E] (T : TranscendenceTower K E F) : Prop := ∀ u : Place K E, u ≠ T.v → ∀ a : A, algebraMap A E a ∈ u.toValuationSubring end TranscendenceTower structure IntegralBasisInLSpace [Algebra.IsSeparable E F] [HasPrincipalDivisors K F] (T : TranscendenceTower K E F) where c : ℕ u : Fin (Module.finrank E F) → F hu_indep : LinearIndependent E u hu_mem : ∀ i, u i ∈ LSpace (c • T.poleDivisor) variable (K E F) in def HasIntegralBasisInLSpace [Algebra.IsSeparable E F] [HasPrincipalDivisors K F] (T : TranscendenceTower K E F) : Prop := Nonempty (IntegralBasisInLSpace T) variable (K E F) in def HasIntegralBasisRegularOutside [Algebra.IsSeparable E F] (T : TranscendenceTower K E F) : Prop := ∃ u : Fin (Module.finrank E F) → F, LinearIndependent E u ∧ ∀ i, ∀ w : Place K F, w.restrict E ≠ T.v → 0 ≤ w.ord (u i) variable (K E F) in def HasRegularFractionSubring (T : TranscendenceTower K E F) : Prop := ∃ (A : Subalgebra K E), IsFractionRing A E ∧ ∀ u : Place K E, u ≠ T.v → ∀ a ∈ A, a ∈ u.toValuationSubring end AlgebraicCurve end
Statements phrased using this module (17)
- Finite-dimensionality of L(0) when the constants are K
AlgebraicCurve.RationalFunctionField.finiteDimensional_lSpace_zero_of_constantsAreBase23 below · depth 10 - Powers of a transcendental element are linearly independent
AlgebraicCurve.linearIndependent_pow_of_transcendental23 below · depth 10 - Existence of the genus for separable extensions of K(X)
AlgebraicCurve.RationalFunctionField.stichtenothGenusExists23 below · depth 11 - L(D)· L(E)⊆ L(D+E)
AlgebraicCurve.mul_mem_lSpace_add0 below · depth 12 - ordᵤ(X)≥ 0 for every place u≠∞ of K(X)
AlgebraicCurve.RationalFunctionField.ord_X_nonneg_of_ne_placeInfty23 below · depth 14 - ord_∞(X) = -1 on the rational function field
AlgebraicCurve.RationalFunctionField.ord_placeInfty_X23 below · depth 14 - Degree of the pulled-back pole divisor equals [F:E]
AlgebraicCurve.TranscendenceTower.degree_poleDivisor_eq_finrank6 below · depth 14 - Coefficients of the pole divisor π^*(v)
AlgebraicCurve.TranscendenceTower.poleDivisor_apply6 below · depth 14 - Linear independence of the products x^j uᵢ
AlgebraicCurve.linearIndependent_pow_mul6 below · depth 14 - Riemann's theorem over a rational function subfield
AlgebraicCurve.RationalFunctionField.stichtenothGenusExists_of_ratFunc_tower23 below · depth 17 - Weil differentials bounded by W are F-proportional
AlgebraicCurve.exists_weilSmul_eq_of_riemannIndexFormula23 below · depth 17 - Attained Riemann genus equals the canonical genus
AlgebraicCurve.riemannGenusReached_of_stichtenothGenusExists23 below · depth 17 - Adelic index formula from an attained Riemann genus
AlgebraicCurve.riemannIndexFormula_of_genusReached23 below · depth 17 - dim_K Ω_F(D) = ℓ((ω) - D)
AlgebraicCurve.finrank_omegaSpace_eq_ell_canonical_sub_of_genusReached23 below · depth 19 - Finite index of speciality for function fields over K(X)
AlgebraicCurve.RationalFunctionField.indexOfSpecialtyFinite_of_ratFunc_tower23 below · depth 23 - Finite index of speciality bounds deg D-ℓ(D)
AlgebraicCurve.riemannGenusBounded_of_indexFinite0 below · depth 23 - Polynomials lie in every place other than ∞
AlgebraicCurve.RationalFunctionField.algebraMap_polynomial_mem_of_ne_placeInfty23 below · depth 25