Definitions/Def_AlgebraicCurve_AdelicIndex.lean
Adelic vocabulary for Riemann–Roch: L-spaces, Weil differentials
Throughout, F/K is an extension of fields, with Place K F the project's places of F/K (valuation subrings of F containing the image of K, proper and principal), v.\mathrm{ord} the associated normalised order function, and Divisor K F the finitely supported \mathbb{Z}-valued functions on places. LSpace D abbreviates the project's riemannRochSpace D, the K-subspace \{f \in F : v(f) \le \exp(D(v))\ \forall v\}, equivalently f = 0 or \mathrm{ord}_v f \ge -D(v) for all v; ell D is its K-dimension. It is monotone in D and contains the image of K; ConstantsAreBase K F is the predicate L(0) = \operatorname{range}(K \to F), under which \ell(0)=1.
On the full product \prod_v F the module defines \mathbb{A}(D) = adeleBdd D, the K-submodule of families \alpha with v(\alpha_v) \le \exp(D(v)) for all v, the diagonal map diagonalHom, the adèle space adeleSpace K F = \bigsqcup_D \mathbb{A}(D) (a supremum, shown directed, so membership means lying in some \mathbb{A}(D)), and globalSub K F, the range of the diagonal. Then L(D) \cong \mathbb{A}(D) \cap F as K-spaces, adeleBddPrincipal K F D is the sum of the preimages of \mathbb{A}(D) and of F inside the adèle space, and indexOfSpecialty D is the K-dimension of the quotient by it. omegaSpace D is the annihilator of that sum in the K-dual of the adèle space, so a Weil differential of D is a functional vanishing on \mathbb{A}(D) and on diagonal elements; its dimension equals the index of specialty, and weilDifferentialModule K F is the (directed) supremum over D. Multiplication by f \in F acts componentwise (mulAdele, adeleSpaceMul under HasPrincipalDivisors), and weilSmul is the dual action, multiplicative in the contravariant sense and injective for f \ne 0; it carries \Omega(W) into \Omega(D) whenever g \in L(W-D), giving the injective residuePairing L(W-D) \to \Omega(D) and the inequality \ell(W-D) \le i(D).
Finally, WeilDifferentialRankOne (every Weil differential is uniquely f \cdot \varphi for a fixed nonzero \varphi), HasWeilCanonicalDivisor (each nonzero Weil differential lies in \Omega(W) for a largest W), the structure RiemannGenusReachedAt γ D₀ (carrying finite-dimensionality of L(D_0), the equality \deg D_0 - \ell(D_0) = \gamma - 1 and maximality of this quantity over all divisors), and the predicates RiemannGenusReached, StichtenothGenusExists, RiemannGenusBounded, IndexOfSpecialtyFinite are named hypotheses; nothing about their validity is asserted here.
Relation to Mathlib
The adèle-type objects are built directly as K-submodules of the product \prod_v F over the project's Place K F, not from Mathlib's finite adèle ring; places, divisors and riemannRochSpace are the project's own notions, and LSpace is an abbreviation for the latter.
Where it is used
This module fixes the vocabulary in which Riemann–Roch for the function field of a curve is stated and proved adelically: L-spaces and their dimensions, the adèle space with its bounded pieces, the index of specialty, Weil differentials with the multiplication action of F, and named genus hypotheses. It is imported widely by the curve-theoretic part of the development.
References
- H. Stichtenoth, Algebraic Function Fields and Codes, Universitext, Springer, 1993, Chapter I
- J.-P. Serre, Groupes algébriques et corps de classes, Hermann, 1959, Chapter II
- 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.
- 436 lines
- 71 declarations
- used in the statements of 278 theorems and imported by 468 proofs
- imports 1 definition modules
Source file: Definitions/Def_AlgebraicCurve_AdelicIndex.lean
Declarations
- abbrev
AlgebraicCurve.LSpace - abbrev
AlgebraicCurve.ell - theorem
AlgebraicCurve.mem_lSpace_iff - theorem
AlgebraicCurve.mem_lSpace_iff_ord - theorem
AlgebraicCurve.lSpace_mono - theorem
AlgebraicCurve.algebraMap_mem_lSpace_zero - theorem
AlgebraicCurve.one_mem_lSpace_zero - def
AlgebraicCurve.ConstantsAreBase - theorem
AlgebraicCurve.ell_zero_eq_one_of_constantsAreBase - def
AlgebraicCurve.adeleBdd - theorem
AlgebraicCurve.mem_adeleBdd - theorem
AlgebraicCurve.adeleBdd_mono - def
AlgebraicCurve.diagonalHom - theorem
AlgebraicCurve.diagonalHom_apply - theorem
AlgebraicCurve.diagonalHom_injective - theorem
AlgebraicCurve.diagonal_mem_adeleBdd_iff - def
AlgebraicCurve.adeleSpace - theorem
AlgebraicCurve.adeleBdd_le_adeleSpace - theorem
AlgebraicCurve.diagonal_mem_adeleSpace - def
AlgebraicCurve.globalSub - theorem
AlgebraicCurve.diagonal_mem_globalSub - theorem
AlgebraicCurve.map_diagonal_lSpace - def
AlgebraicCurve.lSpaceEquivAdeleBddInfGlobal - theorem
AlgebraicCurve.finrank_adeleBdd_inf_global_eq_ell - def
AlgebraicCurve.indexOfSpecialty - theorem
AlgebraicCurve.adeleBdd_directed - theorem
AlgebraicCurve.mem_adeleSpace_iff - abbrev
AlgebraicCurve.adeleBddPrincipal - theorem
AlgebraicCurve.indexOfSpecialty_eq - def
AlgebraicCurve.omegaSpace - theorem
AlgebraicCurve.omegaSpace_vanishBdd - theorem
AlgebraicCurve.omegaSpace_vanishGlobal - theorem
AlgebraicCurve.omegaSpace_antitone - def
AlgebraicCurve.omegaSpaceEquivIndexDual - theorem
AlgebraicCurve.finrank_omegaSpace_eq_indexOfSpecialty - def
AlgebraicCurve.weilDifferentialModule - theorem
AlgebraicCurve.omegaSpace_le_weilDifferentialModule - theorem
AlgebraicCurve.omegaSpace_directed - theorem
AlgebraicCurve.mem_weilDifferentialModule_iff - def
AlgebraicCurve.mulAdele - theorem
AlgebraicCurve.mulAdele_apply - theorem
AlgebraicCurve.mulAdele_one - theorem
AlgebraicCurve.mulAdele_mul - theorem
AlgebraicCurve.mulAdele_mem_adeleBdd_sub - theorem
AlgebraicCurve.mulAdele_globalSub_le - theorem
AlgebraicCurve.mulAdele_mem_adeleSpace - def
AlgebraicCurve.adeleSpaceMul - theorem
AlgebraicCurve.adeleSpaceMul_coe - def
AlgebraicCurve.weilSmul - theorem
AlgebraicCurve.weilSmul_apply - theorem
AlgebraicCurve.adeleSpaceMul_one - theorem
AlgebraicCurve.adeleSpaceMul_mul - theorem
AlgebraicCurve.weilSmul_one - theorem
AlgebraicCurve.weilSmul_mul - theorem
AlgebraicCurve.weilSmul_injective - theorem
AlgebraicCurve.weilSmul_mem_omegaSpace_add - theorem
AlgebraicCurve.weilSmul_mem_omegaSpace_of_mem_lSpace - def
AlgebraicCurve.residuePairing - theorem
AlgebraicCurve.residuePairing_apply_coe - theorem
AlgebraicCurve.residuePairing_injective - theorem
AlgebraicCurve.ell_sub_le_indexOfSpecialty - def
AlgebraicCurve.WeilDifferentialRankOne - def
AlgebraicCurve.HasWeilCanonicalDivisor - structure
AlgebraicCurve.RiemannGenusReachedAt - field
AlgebraicCurve.RiemannGenusReachedAt.finite - field
AlgebraicCurve.RiemannGenusReachedAt.eq - field
AlgebraicCurve.RiemannGenusReachedAt.isMax - def
AlgebraicCurve.RiemannGenusReached - def
AlgebraicCurve.StichtenothGenusExists - def
AlgebraicCurve.RiemannGenusBounded - def
AlgebraicCurve.IndexOfSpecialtyFinite
Source
import Mathlib import Definitions.Def_AlgebraicCurve_Repartitions set_option autoImplicit false noncomputable section open IsDedekindDomain WithZero Module namespace AlgebraicCurve variable {K F : Type*} [Field K] [Field F] [Algebra K F] abbrev LSpace (D : Divisor K F) : Submodule K F := riemannRochSpace D abbrev ell (D : Divisor K F) : ℕ := Module.finrank K (LSpace D) variable {D E : Divisor K F} theorem mem_lSpace_iff {f : F} : f ∈ LSpace D ↔ ∀ v : Place K F, v.adicValuation f ≤ WithZero.exp (D v) := Iff.rfl theorem mem_lSpace_iff_ord {f : F} : f ∈ LSpace D ↔ f = 0 ∨ ∀ v : Place K F, -D v ≤ v.ord f := by rcases eq_or_ne f 0 with rfl | hf · exact ⟨fun _ => Or.inl rfl, fun _ => (LSpace D).zero_mem⟩ · refine Iff.trans ?_ (or_iff_right hf).symm refine forall_congr' fun v => ?_ have hne : v.adicValuation f ≠ 0 := v.adicValuation_ne_zero hf rw [show v.adicValuation f = WithZero.exp (-v.ord f) by rw [Place.ord, neg_neg, WithZero.exp_log hne], WithZero.exp_le_exp, neg_le] theorem lSpace_mono (hDE : D ≤ E) : LSpace D ≤ LSpace E := fun _ hf v => (hf v).trans (WithZero.exp_le_exp.mpr (hDE v)) theorem algebraMap_mem_lSpace_zero (c : K) : algebraMap K F c ∈ LSpace (0 : Divisor K F) := fun v => by rw [Finsupp.coe_zero, Pi.zero_apply, WithZero.exp_zero] exact v.adicValuation_algebraMap_le_one c theorem one_mem_lSpace_zero : (1 : F) ∈ LSpace (0 : Divisor K F) := by simpa using algebraMap_mem_lSpace_zero (K := K) (F := F) 1 def ConstantsAreBase (K F : Type*) [Field K] [Field F] [Algebra K F] : Prop := LSpace (0 : Divisor K F) = LinearMap.range (Algebra.linearMap K F) theorem ell_zero_eq_one_of_constantsAreBase (h : ConstantsAreBase K F) : ell (0 : Divisor K F) = 1 := by rw [ell, h, LinearMap.finrank_range_of_inj (f := Algebra.linearMap K F) (algebraMap K F).injective, Module.finrank_self] def adeleBdd (D : Divisor K F) : Submodule K (Place K F → F) where carrier := {α | ∀ v : Place K F, v.adicValuation (α v) ≤ WithZero.exp (D v)} add_mem' := fun {α β} hα hβ v => (v.adicValuation.map_add (α v) (β v)).trans (max_le (hα v) (hβ v)) zero_mem' := fun v => by rw [Pi.zero_apply, Valuation.map_zero]; exact zero_le' smul_mem' := fun c α hα v => by rw [Pi.smul_apply, Algebra.smul_def, Valuation.map_mul] calc v.adicValuation (algebraMap K F c) * v.adicValuation (α v) ≤ 1 * v.adicValuation (α v) := by gcongr; exact v.adicValuation_algebraMap_le_one c _ = v.adicValuation (α v) := one_mul _ _ ≤ WithZero.exp (D v) := hα v variable {D E : Divisor K F} @[simp] theorem mem_adeleBdd {α : Place K F → F} : α ∈ adeleBdd D ↔ ∀ v : Place K F, v.adicValuation (α v) ≤ WithZero.exp (D v) := Iff.rfl theorem adeleBdd_mono (hDE : D ≤ E) : adeleBdd D ≤ adeleBdd E := fun _ hα v => (hα v).trans (WithZero.exp_le_exp.mpr (hDE v)) variable (K F) in def diagonalHom : F →ₗ[K] (Place K F → F) where toFun f := fun _ => f map_add' _ _ := rfl map_smul' _ _ := rfl @[simp] theorem diagonalHom_apply (f : F) (v : Place K F) : diagonalHom K F f v = f := rfl theorem diagonalHom_injective [Nonempty (Place K F)] : Function.Injective (diagonalHom K F) := fun f g h => by simpa using congrFun h (Classical.arbitrary (Place K F)) theorem diagonal_mem_adeleBdd_iff {f : F} : diagonalHom K F f ∈ adeleBdd D ↔ f ∈ LSpace D := by simp only [mem_adeleBdd, diagonalHom_apply, mem_lSpace_iff] variable (K F) in def adeleSpace : Submodule K (Place K F → F) := ⨆ D : Divisor K F, adeleBdd D theorem adeleBdd_le_adeleSpace : adeleBdd D ≤ adeleSpace K F := le_iSup adeleBdd D theorem diagonal_mem_adeleSpace [HasPrincipalDivisors K F] (f : F) : diagonalHom K F f ∈ adeleSpace K F := by rcases eq_or_ne f 0 with rfl | hf · rw [map_zero]; exact (adeleSpace K F).zero_mem · obtain ⟨P, hPord, _⟩ := HasPrincipalDivisors.exists_divisor (K := K) f hf refine adeleBdd_le_adeleSpace (D := -P) ?_ intro v rw [diagonalHom_apply, show ((-P : Divisor K F) v) = -v.ord f by rw [Finsupp.neg_apply, hPord v]] exact le_of_eq (by rw [Place.ord, neg_neg, WithZero.exp_log (v.adicValuation_ne_zero hf)]) variable (K F) in def globalSub : Submodule K (Place K F → F) := LinearMap.range (diagonalHom K F) theorem diagonal_mem_globalSub (f : F) : diagonalHom K F f ∈ globalSub K F := LinearMap.mem_range_self _ f theorem map_diagonal_lSpace (D : Divisor K F) : (LSpace D).map (diagonalHom K F) = adeleBdd D ⊓ globalSub K F := by ext α rw [Submodule.mem_map, Submodule.mem_inf] constructor · rintro ⟨f, hf, rfl⟩ exact ⟨diagonal_mem_adeleBdd_iff.mpr hf, diagonal_mem_globalSub f⟩ · rintro ⟨hbdd, hglob⟩ obtain ⟨f, hf⟩ := LinearMap.mem_range.mp hglob exact ⟨f, diagonal_mem_adeleBdd_iff.mp (by rw [hf]; exact hbdd), hf⟩ def lSpaceEquivAdeleBddInfGlobal [Nonempty (Place K F)] (D : Divisor K F) : LSpace D ≃ₗ[K] (adeleBdd D ⊓ globalSub K F : Submodule K (Place K F → F)) := (Submodule.equivMapOfInjective (diagonalHom K F) diagonalHom_injective (LSpace D)).trans (LinearEquiv.ofEq _ _ (map_diagonal_lSpace D)) theorem finrank_adeleBdd_inf_global_eq_ell [Nonempty (Place K F)] (D : Divisor K F) : Module.finrank K (adeleBdd D ⊓ globalSub K F : Submodule K (Place K F → F)) = ell D := ((lSpaceEquivAdeleBddInfGlobal D).finrank_eq).symm def indexOfSpecialty (D : Divisor K F) : ℕ := Module.finrank K ((adeleSpace K F) ⧸ ((adeleBdd D).comap (adeleSpace K F).subtype ⊔ (globalSub K F).comap (adeleSpace K F).subtype)) theorem adeleBdd_directed : Directed (· ≤ ·) (adeleBdd (K := K) (F := F)) := fun D E => ⟨D ⊔ E, adeleBdd_mono le_sup_left, adeleBdd_mono le_sup_right⟩ theorem mem_adeleSpace_iff {α : Place K F → F} : α ∈ adeleSpace K F ↔ ∃ D : Divisor K F, α ∈ adeleBdd D := by unfold adeleSpace exact Submodule.mem_iSup_of_directed _ adeleBdd_directed variable (K F) in abbrev adeleBddPrincipal (D : Divisor K F) : Submodule K (adeleSpace K F) := (adeleBdd D).comap (adeleSpace K F).subtype ⊔ (globalSub K F).comap (adeleSpace K F).subtype theorem indexOfSpecialty_eq (D : Divisor K F) : indexOfSpecialty D = Module.finrank K (adeleSpace K F ⧸ adeleBddPrincipal K F D) := rfl def omegaSpace (D : Divisor K F) : Submodule K (Module.Dual K (adeleSpace K F)) := (adeleBddPrincipal K F D).dualAnnihilator theorem omegaSpace_vanishBdd {D : Divisor K F} {φ : Module.Dual K (adeleSpace K F)} (hφ : φ ∈ omegaSpace D) {α : adeleSpace K F} (hα : (α : Place K F → F) ∈ adeleBdd D) : φ α = 0 := (Submodule.mem_dualAnnihilator φ).mp hφ α (Submodule.mem_sup_left hα) theorem omegaSpace_vanishGlobal {D : Divisor K F} {φ : Module.Dual K (adeleSpace K F)} (hφ : φ ∈ omegaSpace D) {α : adeleSpace K F} (hα : (α : Place K F → F) ∈ globalSub K F) : φ α = 0 := (Submodule.mem_dualAnnihilator φ).mp hφ α (Submodule.mem_sup_right hα) theorem omegaSpace_antitone {D E : Divisor K F} (hDE : D ≤ E) : omegaSpace E ≤ omegaSpace D := Submodule.dualAnnihilator_anti (sup_le_sup_right (Submodule.comap_mono (adeleBdd_mono hDE)) _) def omegaSpaceEquivIndexDual (D : Divisor K F) : omegaSpace D ≃ₗ[K] Module.Dual K (adeleSpace K F ⧸ adeleBddPrincipal K F D) := (Submodule.dualQuotEquivDualAnnihilator (adeleBddPrincipal K F D)).symm theorem finrank_omegaSpace_eq_indexOfSpecialty (D : Divisor K F) : Module.finrank K (omegaSpace D) = indexOfSpecialty D := by rw [indexOfSpecialty_eq, (omegaSpaceEquivIndexDual D).finrank_eq, Subspace.dual_finrank_eq] variable (K F) in def weilDifferentialModule : Submodule K (Module.Dual K (adeleSpace K F)) := ⨆ D : Divisor K F, omegaSpace D theorem omegaSpace_le_weilDifferentialModule (D : Divisor K F) : omegaSpace D ≤ weilDifferentialModule K F := le_iSup omegaSpace D theorem omegaSpace_directed : Directed (· ≤ ·) (omegaSpace (K := K) (F := F)) := fun D E => ⟨D ⊓ E, omegaSpace_antitone inf_le_left, omegaSpace_antitone inf_le_right⟩ theorem mem_weilDifferentialModule_iff {φ : Module.Dual K (adeleSpace K F)} : φ ∈ weilDifferentialModule K F ↔ ∃ D : Divisor K F, φ ∈ omegaSpace D := by unfold weilDifferentialModule exact Submodule.mem_iSup_of_directed _ omegaSpace_directed variable (K) in def mulAdele (f : F) : (Place K F → F) →ₗ[K] (Place K F → F) where toFun α := fun v => f * α v map_add' α β := funext fun v => mul_add f (α v) (β v) map_smul' c α := funext fun v => by simp only [Pi.smul_apply, Algebra.smul_def, RingHom.id_apply]; ring @[simp] theorem mulAdele_apply (f : F) (α : Place K F → F) (v : Place K F) : mulAdele K f α v = f * α v := rfl @[simp] theorem mulAdele_one : mulAdele K (1 : F) = LinearMap.id := LinearMap.ext fun α => funext fun v => one_mul (α v) theorem mulAdele_mul (f g : F) : mulAdele K (f * g) = (mulAdele K f).comp (mulAdele K g) := LinearMap.ext fun α => funext fun v => mul_assoc f g (α v) theorem mulAdele_mem_adeleBdd_sub {f : F} (hf : f ≠ 0) {P : Divisor K F} (hP : ∀ v, P v = v.ord f) {D : Divisor K F} {α : Place K F → F} (hα : α ∈ adeleBdd D) : mulAdele K f α ∈ adeleBdd (D - P) := by intro v rw [mulAdele_apply, Valuation.map_mul, Finsupp.sub_apply, hP v, show v.adicValuation f = WithZero.exp (-v.ord f) by rw [Place.ord, neg_neg, WithZero.exp_log (v.adicValuation_ne_zero hf)]] calc WithZero.exp (-v.ord f) * v.adicValuation (α v) ≤ WithZero.exp (-v.ord f) * WithZero.exp (D v) := by gcongr; exact hα v _ = WithZero.exp (D v - v.ord f) := by rw [← WithZero.exp_add]; ring_nf theorem mulAdele_globalSub_le (f : F) : (globalSub K F).map (mulAdele K f) ≤ globalSub K F := by rintro _ ⟨α, ⟨g, rfl⟩, rfl⟩ exact ⟨f * g, funext fun v => by simp⟩ theorem mulAdele_mem_adeleSpace [HasPrincipalDivisors K F] (f : F) {α : Place K F → F} (hα : α ∈ adeleSpace K F) : mulAdele K f α ∈ adeleSpace K F := by rcases eq_or_ne f 0 with rfl | hf · have h0 : mulAdele K (0 : F) α = 0 := funext fun v => by simp rw [h0]; exact (adeleSpace K F).zero_mem · obtain ⟨D, hD⟩ := mem_adeleSpace_iff.mp hα obtain ⟨P, hP, _⟩ := HasPrincipalDivisors.exists_divisor (K := K) f hf exact adeleBdd_le_adeleSpace (D := D - P) (mulAdele_mem_adeleBdd_sub hf hP hD) variable (K F) in def adeleSpaceMul [HasPrincipalDivisors K F] (f : F) : adeleSpace K F →ₗ[K] adeleSpace K F := (mulAdele K f).restrict fun _ => mulAdele_mem_adeleSpace f @[simp] theorem adeleSpaceMul_coe [HasPrincipalDivisors K F] (f : F) (α : adeleSpace K F) : (adeleSpaceMul K F f α : Place K F → F) = mulAdele K f (α : Place K F → F) := rfl variable (K F) in def weilSmul [HasPrincipalDivisors K F] (f : F) : Module.Dual K (adeleSpace K F) →ₗ[K] Module.Dual K (adeleSpace K F) := (adeleSpaceMul K F f).dualMap @[simp] theorem weilSmul_apply [HasPrincipalDivisors K F] (f : F) (φ : Module.Dual K (adeleSpace K F)) (α : adeleSpace K F) : weilSmul K F f φ α = φ (adeleSpaceMul K F f α) := rfl theorem adeleSpaceMul_one [HasPrincipalDivisors K F] : adeleSpaceMul K F (1 : F) = LinearMap.id := by refine LinearMap.ext fun α => Subtype.ext ?_ show mulAdele K (1 : F) (α : Place K F → F) = (α : Place K F → F) rw [mulAdele_one, LinearMap.id_apply] theorem adeleSpaceMul_mul [HasPrincipalDivisors K F] (f g : F) : adeleSpaceMul K F (f * g) = (adeleSpaceMul K F f).comp (adeleSpaceMul K F g) := by refine LinearMap.ext fun α => Subtype.ext ?_ show mulAdele K (f * g) (α : Place K F → F) = mulAdele K f (mulAdele K g (α : Place K F → F)) rw [mulAdele_mul, LinearMap.comp_apply] @[simp] theorem weilSmul_one [HasPrincipalDivisors K F] : weilSmul K F (1 : F) = LinearMap.id := by unfold weilSmul; rw [adeleSpaceMul_one]; ext; simp theorem weilSmul_mul [HasPrincipalDivisors K F] (f g : F) : weilSmul K F (f * g) = (weilSmul K F g).comp (weilSmul K F f) := by unfold weilSmul; rw [adeleSpaceMul_mul, LinearMap.dualMap_comp_dualMap] theorem weilSmul_injective [HasPrincipalDivisors K F] {f : F} (hf : f ≠ 0) : Function.Injective (weilSmul K F f) := by apply Function.LeftInverse.injective (g := weilSmul K F f⁻¹) intro φ rw [← LinearMap.comp_apply, ← weilSmul_mul, mul_inv_cancel₀ hf, weilSmul_one, LinearMap.id_apply] theorem weilSmul_mem_omegaSpace_add [HasPrincipalDivisors K F] {f : F} (hf : f ≠ 0) {P : Divisor K F} (hP : ∀ v, P v = v.ord f) {D : Divisor K F} {φ : Module.Dual K (adeleSpace K F)} (hφ : φ ∈ omegaSpace D) : weilSmul K F f φ ∈ omegaSpace (D + P) := by rw [omegaSpace, Submodule.mem_dualAnnihilator] intro α hα obtain ⟨β, hβ, γ, hγ, rfl⟩ := Submodule.mem_sup.mp hα rw [map_add, weilSmul_apply, weilSmul_apply] have hβ' : (adeleSpaceMul K F f β : Place K F → F) ∈ adeleBdd D := by rw [adeleSpaceMul_coe] have h := mulAdele_mem_adeleBdd_sub hf hP (D := D + P) (Submodule.mem_comap.mp hβ) rwa [add_sub_cancel_right] at h have hγ' : (adeleSpaceMul K F f γ : Place K F → F) ∈ globalSub K F := mulAdele_globalSub_le f ⟨_, Submodule.mem_comap.mp hγ, rfl⟩ rw [omegaSpace_vanishBdd hφ hβ', omegaSpace_vanishGlobal hφ hγ', add_zero] theorem weilSmul_mem_omegaSpace_of_mem_lSpace [HasPrincipalDivisors K F] {W D : Divisor K F} {φ : Module.Dual K (adeleSpace K F)} (hφ : φ ∈ omegaSpace W) {g : F} (hg : g ∈ LSpace (W - D)) : weilSmul K F g φ ∈ omegaSpace D := by rcases eq_or_ne g 0 with rfl | hg0 · have h0 : weilSmul K F (0 : F) φ = 0 := by ext α; simp only [weilSmul_apply] refine omegaSpace_vanishBdd hφ ?_ intro v simp only [adeleSpaceMul_coe, mulAdele_apply, zero_mul, Valuation.map_zero] exact zero_le' rw [h0]; exact (omegaSpace D).zero_mem · obtain ⟨P, hPord, _⟩ := HasPrincipalDivisors.exists_divisor (K := K) g hg0 refine omegaSpace_antitone ?_ (weilSmul_mem_omegaSpace_add hg0 hPord hφ) intro v rw [Finsupp.add_apply, hPord v] have hgL := (mem_lSpace_iff_ord.mp hg).resolve_left hg0 v rw [Finsupp.sub_apply] at hgL linarith variable (K F) in def residuePairing [HasPrincipalDivisors K F] (W D : Divisor K F) {φ : Module.Dual K (adeleSpace K F)} (hφ : φ ∈ omegaSpace W) : LSpace (W - D) →ₗ[K] omegaSpace D where toFun g := ⟨weilSmul K F (g : F) φ, weilSmul_mem_omegaSpace_of_mem_lSpace hφ g.2⟩ map_add' g₁ g₂ := by refine Subtype.ext ?_ show weilSmul K F ((g₁ : F) + (g₂ : F)) φ = weilSmul K F (g₁ : F) φ + weilSmul K F (g₂ : F) φ ext α; simp only [weilSmul_apply, LinearMap.add_apply] rw [← map_add]; congr 1 exact Subtype.ext (funext fun v => by simp [add_mul]) map_smul' c g := by refine Subtype.ext ?_ show weilSmul K F (c • (g : F)) φ = c • weilSmul K F (g : F) φ ext α; simp only [weilSmul_apply, LinearMap.smul_apply] rw [← map_smul]; congr 1 exact Subtype.ext (funext fun v => by simp [Algebra.smul_def]; ring) @[simp] theorem residuePairing_apply_coe [HasPrincipalDivisors K F] (W D : Divisor K F) {φ : Module.Dual K (adeleSpace K F)} (hφ : φ ∈ omegaSpace W) (g : LSpace (W - D)) : (residuePairing K F W D hφ g : Module.Dual K (adeleSpace K F)) = weilSmul K F (g : F) φ := rfl theorem residuePairing_injective [HasPrincipalDivisors K F] (W D : Divisor K F) {φ : Module.Dual K (adeleSpace K F)} (hφ : φ ∈ omegaSpace W) (hφ0 : φ ≠ 0) : Function.Injective (residuePairing K F W D hφ) := by have hsub : ∀ g₁ g₂ : F, adeleSpaceMul K F (g₁ - g₂) = adeleSpaceMul K F g₁ - adeleSpaceMul K F g₂ := fun g₁ g₂ => by refine LinearMap.ext fun α => Subtype.ext (funext fun v => ?_) simp only [adeleSpaceMul_coe, mulAdele_apply, LinearMap.sub_apply, Submodule.coe_sub, Pi.sub_apply, sub_mul] intro g₁ g₂ hg have hg' : weilSmul K F ((g₁ : F) - (g₂ : F)) φ = 0 := by have h := congrArg Subtype.val hg simp only [residuePairing_apply_coe] at h ext α simp only [weilSmul_apply, hsub, LinearMap.sub_apply, map_sub, LinearMap.zero_apply, sub_eq_zero] exact LinearMap.congr_fun h α rcases eq_or_ne ((g₁ : F) - (g₂ : F)) 0 with hd | hd · exact Subtype.ext (sub_eq_zero.mp hd) · exact absurd (weilSmul_injective hd (by rw [hg', map_zero])) hφ0 theorem ell_sub_le_indexOfSpecialty [HasPrincipalDivisors K F] (W D : Divisor K F) {φ : Module.Dual K (adeleSpace K F)} (hφ : φ ∈ omegaSpace W) (hφ0 : φ ≠ 0) [Module.Finite K (omegaSpace (K := K) (F := F) D)] : ell (W - D) ≤ indexOfSpecialty D := by rw [← finrank_omegaSpace_eq_indexOfSpecialty] exact LinearMap.finrank_le_finrank_of_injective (residuePairing_injective W D hφ hφ0) variable (K F) def WeilDifferentialRankOne [HasPrincipalDivisors K F] : Prop := ∀ {φ : Module.Dual K (adeleSpace K F)}, φ ∈ weilDifferentialModule K F → φ ≠ 0 → ∀ {μ : Module.Dual K (adeleSpace K F)}, μ ∈ weilDifferentialModule K F → ∃! f : F, μ = weilSmul K F f φ def HasWeilCanonicalDivisor : Prop := ∀ {φ : Module.Dual K (adeleSpace K F)}, φ ∈ weilDifferentialModule K F → φ ≠ 0 → ∃ W : Divisor K F, φ ∈ omegaSpace W ∧ ∀ D : Divisor K F, φ ∈ omegaSpace D → D ≤ W variable {K F} structure RiemannGenusReachedAt (γ : ℤ) (D₀ : Divisor K F) : Prop where finite : FiniteDimensional K (LSpace D₀) eq : Divisor.degree D₀ - (ell D₀ : ℤ) = γ - 1 isMax : ∀ D : Divisor K F, Divisor.degree D - (ell D : ℤ) ≤ γ - 1 variable (K F) in def RiemannGenusReached (γ : ℤ) : Prop := Nonempty (Place K F) ∧ FiniteDimensional K (LSpace (0 : Divisor K F)) ∧ ∃ D₀ : Divisor K F, RiemannGenusReachedAt γ D₀ variable (K F) in def StichtenothGenusExists : Prop := Nonempty (Place K F) ∧ FiniteDimensional K (LSpace (0 : Divisor K F)) ∧ ∃ (γ : ℤ) (D₀ : Divisor K F), RiemannGenusReachedAt γ D₀ variable (K F) in def RiemannGenusBounded : Prop := ∃ γ : ℤ, ∀ D : Divisor K F, Divisor.degree D - (ell D : ℤ) ≤ γ variable (K F) in def IndexOfSpecialtyFinite : Prop := ∃ D₀ : Divisor K F, Module.Finite K (adeleSpace K F ⧸ adeleBddPrincipal K F D₀) end AlgebraicCurve end
Statements phrased using this module (278)
- Over an algebraically closed base, the constants are K
AlgebraicCurve.constantsAreBase_of_isAlgClosed45 below · depth 9 - Riemann–Roch over an algebraically closed base field
AlgebraicCurve.functionFieldRiemannRoch_of_isAlgClosed8 below · depth 9 - A principal divisor P-Q with deg Q=1 forces genus zero
AlgebraicCurve.genus_eq_zero_of_isPrincipal_single_sub_single28 below · depth 9 - Torsion of Pic⁰ over a locally finite constant field
AlgebraicCurve.Pic0.exists_nsmul_eq_zero_of_charP_of_forall_pow_eq_self57 below · depth 10 - Finite-dimensionality of L(0) when the constants are K
AlgebraicCurve.RationalFunctionField.finiteDimensional_lSpace_zero_of_constantsAreBase23 below · depth 10 - Constants are the base field, given a rational place
AlgebraicCurve.constantsAreBase_of_exists_isRational4 below · depth 10 - Vanishing of ℓ(D) when deg D<0
AlgebraicCurve.ell_eq_zero_of_degree_neg0 below · depth 10 - Riemann's index theorem for curves over a perfect field
AlgebraicCurve.exists_genus_riemannIndex_of_isCurveOver26 below · depth 10 - Finite-dimensionality of all L(D) from that of L(0)
AlgebraicCurve.finiteDimensional_lSpace0 below · depth 10 - Riemann–Roch from the residue theorem, K algebraically closed
AlgebraicCurve.functionFieldRiemannRoch_of_residueTheoremK_of_isAlgClosed0 below · depth 10 - Powers of a transcendental element are linearly independent
AlgebraicCurve.linearIndependent_pow_of_transcendental23 below · depth 10 - Residue theorem over an algebraically closed base field
AlgebraicCurve.residueTheoremK_of_isAlgClosed6 below · depth 10 - Constants of the mod-p modular function field are K
ModularCurve.constantsAreBase_modularFunctionFieldC_of_perfectField122 below · depth 10 - Degree of a divisor as a sum over its support
AlgebraicCurve.Divisor.degree_eq_sum_support0 below · depth 11 - Every divisor descends to a finite constant field
AlgebraicCurve.Divisor.exists_finite_constantField_form_pullbackConstants_eq50 below · depth 11 - Finiteness of Pic⁰ over a finite constant field
AlgebraicCurve.Pic0.finite_of_finite27 below · depth 11 - Maximal ideal of a place in terms of ordᵥ
AlgebraicCurve.Place.mk_mem_maximalIdeal_iff0 below · depth 11 - Existence of the genus for separable extensions of K(X)
AlgebraicCurve.RationalFunctionField.stichtenothGenusExists23 below · depth 11 - Constants are the base field given a degree-one place
AlgebraicCurve.constantsAreBase_of_deg_eq_one6 below · depth 11 - Degree of a canonical divisor is 2g-2 over ̄ K
AlgebraicCurve.degree_canonicalDivisor_eq_of_isAlgClosed56 below · depth 11 - Adelic Riemann–Roch from existence of the Stichtenoth genus
AlgebraicCurve.exists_genus_riemannIndex_of_stichtenothGenusExists0 below · depth 11 - Riemann–Roch over an algebraically closed constant field
AlgebraicCurve.functionFieldRiemannRoch_of_isAlgClosed_of_isCurveOver9 below · depth 11 - Residue theorem for K(x), K algebraically closed
AlgebraicCurve.residueTheoremK_ratFunc_of_isAlgClosed0 below · depth 11 - Residue–trace commutation through the completion, F/E separable
AlgebraicCurve.residueTraceCompletionCommute4 below · depth 11 - Degree of the pole divisor of x equals [F:K(x)]
AlgebraicCurve.Divisor.degree_eq_finrank_adjoin_of_eq_max_neg_ord13 below · depth 12 - Node units vanish in GluedPic⁰ only for constants
AlgebraicCurve.GluedPic0.nodeUnit_eq_zero_iff_of_constantsAreBase0 below · depth 12 - Finitely many places descend to a finite constant field
AlgebraicCurve.Place.exists_finite_constantField_form_fiberConstants_eq_singleton49 below · depth 12 - Eventual dimension count for joint residue spans
AlgebraicCurve.RegularProlongation.exists_forall_finrank_residueSpan_inf_add_card_le98 below · depth 12 - Residues of L(M· D) lie in both chart spans
AlgebraicCurve.RegularProlongation.span_residue_lSpace_le_residueSpan_inf2 below · depth 12 - deg D-ℓ(D) is constant above a genus-realising divisor
AlgebraicCurve.RiemannGenusReachedAt.eq_of_ge0 below · depth 12 - Degree of the pole divisor of x equals [F:K(x)]
AlgebraicCurve.degree_poleDivisor_eq_finrank_adjoin_of_isAlgClosed_of_transcendental61 below · depth 12 - Invariance of ℓ(D) under constant field extension
AlgebraicCurve.ell_mapDomain_eq_of_constantFieldExtension_of_isAlgClosed26 below · depth 12 - Eventual exactness of ℓ(N· D) for the pole divisor of x
AlgebraicCurve.exists_ell_nsmul_eq_of_isAlgClosed_of_transcendental66 below · depth 12 - Vanishing index of specialty for a lifted divisor
AlgebraicCurve.exists_indexOfSpecialty_mapDomain_eq_zero_of_constantFieldExtension_of_isAlgClosed40 below · depth 12 - Index of specialty equals dim_K H¹(D)
AlgebraicCurve.indexOfSpecialty_eq_finrank_H10 below · depth 12 - Index of specialty at an attained Riemann genus
AlgebraicCurve.indexOfSpecialty_eq_of_genusReached0 below · depth 12 - Index of specialty vanishes at a genus-realising divisor
AlgebraicCurve.indexOfSpecialty_eq_zero_of_genusReached0 below · depth 12 - L(D)· L(E)⊆ L(D+E)
AlgebraicCurve.mul_mem_lSpace_add0 below · depth 12 - Residue theorem for curves over an algebraically closed field
AlgebraicCurve.residueTheorem_of_isAlgClosed8 below · depth 12 - Existence of the Stichtenoth genus for a curve over a perfect field
AlgebraicCurve.stichtenothGenusExists_of_isCurveOver25 below · depth 12 - Tate's residue agrees with the local residue trace
AlgebraicCurve.tateAgreement0 below · depth 12 - Chain rule for Tate's residue along F/E
AlgebraicCurve.tateChainRule0 below · depth 12 - Tate's commutator has finite K-rank at every place
AlgebraicCurve.tateCommFinite0 below · depth 12 - Trace compatibility of Tate's local residue for separable F/E
AlgebraicCurve.tateTraceCompat_of_isSeparable0 below · depth 12 - Weil duality from Riemann–Roch and existence of the genus
AlgebraicCurve.weilDualityAdelic_of_functionFieldRiemannRoch_of_stichtenothGenusExists2 below · depth 12 - Pole divisor degree at most [F:K(x)]
AlgebraicCurve.Divisor.degree_le_finrank_adjoin_of_eq_max_neg_ord3 below · depth 13 - Lower bound [F:K(x)] ≤ deg of the pole divisor
AlgebraicCurve.Divisor.finrank_adjoin_le_degree_of_eq_max_neg_ord10 below · depth 13 - Frobenius fixed classes on Pic⁰ and resultants Res(Xⁿ-1,P)
AlgebraicCurve.Pic0.exists_monic_natCard_fixedPoints_iterate_eq_resultant_of_pushforwardAlong_frobenius133 below · depth 13 - Interpolation with prescribed non-zero values and one pole
AlgebraicCurve.RROpens.exists_forall_hasValue_forall_ord_nonneg8 below · depth 13 - Constants are the base field when K is algebraically closed
AlgebraicCurve.constantsAreBase_of_isAlgClosed_of_transcendental49 below · depth 13 - Riemann–Roch over an algebraically closed field
AlgebraicCurve.exists_canonicalDivisor_genus_riemannRoch43 below · depth 13 - Integral closure of K[x] spanned by x^jL(M₁D)
AlgebraicCurve.exists_forall_mem_span_pow_mul_of_forall_ord_nonneg69 below · depth 13 - Degree-zero divisors are equivalent to sumᵢ [vᵢ] - r[v₀]
AlgebraicCurve.exists_list_isPrincipal_sub_sum_single_sub_smul_single45 below · depth 13 - Genus bound attained at a multiple of any single place
AlgebraicCurve.exists_riemannGenusReachedAt_nsmul_single_of_stichtenothGenusExists4 below · depth 13 - Riemann–Roch with a Weil canonical divisor
AlgebraicCurve.exists_weilCanonical_riemannRoch35 below · depth 13 - Descent of Riemann–Roch spaces along a constant field extension
AlgebraicCurve.lSpace_mapDomain_subset_span_image_lSpace_of_constantFieldExtension_of_isAlgClosed25 below · depth 13 - Adelic Weil duality over an algebraically closed constant field
AlgebraicCurve.weilDualityAdelic_of_isAlgClosed69 below · depth 13 - Raynaud's dictionary for Pic⁰ of a two-component curve
AlgebraicGeometry.RelPicard.exists_gluedPic0_equiv_of_twoGluedSmoothCurves346 below · depth 13 - Principal divisors, constants and rational places of ̄ F
ModularCurve.JHNeronObjectAtP.hasPrincipalDivisors_and_constantsAreBase_and_surjective_residueField_fbar75 below · depth 13 - Inertia-fixed strict points in general position over the special fibre
ModularCurve.PlaceSpecialization.exists_isStrictFst_isStrictSnd_general_position_disjoint_forall_inertia_smul_eq469 below · depth 13 - Effective divisors have non-negative degree
AlgebraicCurve.Divisor.degree_nonneg_of_nonneg0 below · depth 14 - Order of the m-torsion of ker(toPic0Pair)
AlgebraicCurve.GluedPic0.natCard_ker_toPic0Pair_inf_torsionBy2 below · depth 14 - Frobenius-fixed divisor classes counted by the class number
AlgebraicCurve.Pic0.natCard_fixedPoints_eq_natCard_pic0_of_pushforwardAlong_frobenius66 below · depth 14 - Degree-zero classes as effective divisors minus g[P]
AlgebraicCurve.RROpens.exists_effective_sub_add_smul_single_mem_principal0 below · depth 14 - Riemann–Roch descent: ℓ(G-T)=0 for ℓ(G) places in a prescribed infinite set
AlgebraicCurve.RROpens.exists_finset_subset_ell_sub_sum_single_eq_zero0 below · depth 14 - 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 - Riemann's inequality: ℓ(D)≤deg D+ℓ(0)
AlgebraicCurve.ell_le_degree_add_ellZero0 below · depth 14 - Single-place step: ℓ(D)≤ℓ(D-P)+deg P
AlgebraicCurve.ell_le_ell_sub_single_add_deg0 below · depth 14 - Class number of a curve as P(1)
AlgebraicCurve.eval_one_eq_natCard_pic0_of_natCard_fixedPoints_restrictAlong_eq80 below · depth 14 - Existence of a degree-r constant field extension
AlgebraicCurve.exists_constantFieldExtension_of_finite47 below · depth 14 - Strong approximation: i(nQ)=0 for some n
AlgebraicCurve.exists_indexOfSpecialty_nsmul_single_eq_zero_of_genusReached1 below · depth 14 - L(0) is finite-dimensional and ℓ(0)=1 over algebraically closed k
AlgebraicCurve.finiteDimensional_lSpace_zero_and_ell_zero_eq_one_of_isAlgClosed_of_transcendental65 below · depth 14 - Index of specialty equals ℓ(W-D) at a Weil differential
AlgebraicCurve.indexOfSpecialty_eq_ell_sub_of_rankOne_max0 below · depth 14 - L(D)=0 for divisors of negative degree
AlgebraicCurve.lSpace_eq_bot_of_degree_neg0 below · depth 14 - Stabilisation of the pole filtration past the Riemann–Roch threshold
AlgebraicCurve.lSpace_nsmul_succ_poleDivisor_le_sup_map_mulLeft_of_ell_eq1 below · depth 14 - Linear independence of the products x^j uᵢ
AlgebraicCurve.linearIndependent_pow_mul6 below · depth 14 - Coefficients of a constant-field-extension Riemann–Roch element descend
AlgebraicCurve.mem_riemannRochSpace_of_sum_basis_smul_algebraMap_mem_mapDomain3 below · depth 14 - Every place of a curve has degree at least one
AlgebraicCurve.one_le_deg0 below · depth 14 - Weil differentials form a rank-one F-module for curves
AlgebraicCurve.weilDifferentialRankOne_of_isCurveOver26 below · depth 14 - Every point of Pic⁰(X) comes from admissible gluing data
AlgebraicGeometry.RelPicard.exists_hom_admissible_eq_of_twoGluedSmoothCurves19 below · depth 14 - Admissible gluing data give points of Pic⁰
AlgebraicGeometry.RelPicard.exists_hom_admissible_of_twoGluedSmoothCurves334 below · depth 14 - Pic⁰(F/k)≃ J(k) with Abel–Jacobi normalisation
AlgebraicGeometry.RelPicard.exists_pic0_equiv_points_abelJacobi_of_curveModel284 below · depth 14 - Injectivity of the glued Pic⁰ dictionary for two components
AlgebraicGeometry.RelPicard.gluedPic0_mk_eq_zero_of_hom_admissible_eq_one_of_twoGluedSmoothCurves12 below · depth 14 - Properness and geometric connectedness of a representing Pic⁰
AlgebraicGeometry.RelPicard.isProper_and_geometricallyConnected_of_representsRelSubPic_algEquivZeroCut_of_finiteMapData332 below · depth 14 - Constancy of the fibre genus over a connected Noetherian base
AlgebraicGeometry.SmoothProperCurve.exists_genus_forall_geometricFibre_riemannRoch_imp_eq_of_connectedSpace128 below · depth 14 - Constants of ℚ̄-modular function field are the base
ModularCurve.constantsAreBase_modularFunctionFieldBar119 below · depth 14 - Divisor class map on a smooth proper curve model
AlgebraicCurve.CurveModel.exists_divisorClassMap116 below · depth 15 - Frobenius-fixed divisor classes contain Frobenius-fixed divisors
AlgebraicCurve.Divisor.exists_smul_eq_and_isPrincipal_sub_of_frobeniusSemilinear0 below · depth 15 - Descent of principal divisors along a constant field extension
AlgebraicCurve.Divisor.isPrincipal_of_isPrincipal_pullbackConstants_of_isConstantFieldExtension4 below · depth 15 - Class number formula: L(1)=#Pic⁰ for function fields
AlgebraicCurve.LPolynomial_eval_one_eq_natCard_pic065 below · depth 15 - No cancellation of K'-weighted F-sums at lifted places
AlgebraicCurve.Place.ord_sum_algebraMap_mul_le_ord_of_linearIndependent_of_constantFieldExtension2 below · depth 15 - General position of r-g degree-one places from a finite pool
AlgebraicCurve.RROpens.exists_injective_ell_sub_sum_single_eq_one_of_le_card1 below · depth 15 - Recursion nAₙ=sum_{r≤ n} Nᵣ Aₙ₋ᵣ for effective divisor counts
AlgebraicCurve.card_effectiveDivisors_mul_eq_sum3 below · depth 15 - Existence of the L-polynomial of a function field
AlgebraicCurve.exists_LPolynomial_of_finite73 below · depth 15 - Finite-dimensionality of L(0) on a curve
AlgebraicCurve.finiteDimensional_lSpace_zero0 below · depth 15 - dim_K Ω_{reg} = g over an algebraically closed base
AlgebraicCurve.finite_and_finrank_regularDiffs_eq_genusFF_of_isAlgClosed107 below · depth 15 - Genus invariance under constant-field extension in Frobenius form
AlgebraicCurve.genusFF_eq_of_constantFieldExtension_of_finite_of_isAlgClosed94 below · depth 15 - Multiplication by x on the pole filtration is graded-injective
AlgebraicCurve.mul_mem_lSpace_nsmul_succ_and_reflects_of_poleDivisor0 below · depth 15 - Finite-dimensionality of the space Ω(D)
AlgebraicCurve.omegaSpace_finite_of_genusReached0 below · depth 15 - Weil differentials have rank one, given the Stichtenoth genus
AlgebraicCurve.weilDifferentialRankOne_of_stichtenothGenusExists0 below · depth 15 - Bundles of admissible gluing data on two glued smooth curves
AlgebraicGeometry.RelPicard.exists_gluedTwist_admissible_of_twoGluedSmoothCurves119 below · depth 15 - Reading the Poincaré bundle at every degree-zero class
AlgebraicGeometry.RelPicard.nonempty_poincare_pullbackAlong_iso_foldr_ofPoint_of_additive_of_pinned32 below · depth 15 - Surjectivity of the degree-g Abel–Jacobi morphism
AlgebraicGeometry.RelPicard.surjective_of_poincare_pullbackAlong_iso_twistModule284 below · depth 15 - Riemann–Roch for geometric fibres of smooth proper curves
AlgebraicGeometry.SmoothProperCurve.exists_curveModel_riemannRoch_of_isAlgClosed88 below · depth 15 - Constancy of the genus over geometric fibres of a curve
AlgebraicGeometry.SmoothProperCurve.exists_genus_forall_geometricFibre_riemannRoch_imp_eq_of_finiteMapData98 below · depth 15 - Riemann–Roch genus on a smooth proper model equals genusFF
AlgebraicCurve.CurveModel.eq_genusFF_of_forall_ell_sub_ell_eq60 below · depth 16 - Genus preservation under good reduction, via Riemann–Roch data
AlgebraicCurve.RegularProlongation.exists_finset_forall_valuation_eq_one_forall_exists_degree_eq_and_ell_eq123 below · depth 16 - Counting effective divisors in a divisor class over a finite field
AlgebraicCurve.card_effective_sub_isPrincipal_of_finite1 below · depth 16 - Counting effective divisors of large degree over a finite field
AlgebraicCurve.card_sub_one_mul_card_effectiveDivisors_eq33 below · depth 16 - Čech Riemann–Roch on a two-chart cover of a curve
AlgebraicCurve.cechRiemannRoch_of_genusReached12 below · depth 16 - Full constant field from a relative q-Frobenius
AlgebraicCurve.constantsAreBase_of_apply_algebraMap_eq_pow_card51 below · depth 16 - Adding a principal divisor does not change ℓ(D)
AlgebraicCurve.ell_add_of_forall_eq_ord0 below · depth 16 - ℓ(D₂)-ℓ(D₁)≤deg D₂-deg D₁ for D₁≤ D₂
AlgebraicCurve.ell_sub_ell_le_degree_sub_degree0 below · depth 16 - Uniqueness of the genus in Riemann–Roch
AlgebraicCurve.eq_genusFF_of_forall_ell_sub_ell_eq32 below · depth 16 - Constant-field Frobenius extends to a K-endomorphism of F
AlgebraicCurve.exists_algHom_apply_algebraMap_eq_pow_card_of_constantsAreBase1 below · depth 16 - F. K. Schmidt: existence of a degree-one divisor
AlgebraicCurve.exists_divisor_degree_eq_one_of_finite63 below · depth 16 - Transport of places and divisors along F ≃_K F'
AlgebraicCurve.exists_placeEquiv_ord_eq_and_ell_mapDomain_eq0 below · depth 16 - Riemann–Roch in two-chart Čech form for 𝒪(D)
AlgebraicCurve.finrank_H0_H1_sectionsOf_of_range_eq_lSpaceOn76 below · depth 16 - Riemann–Roch space of a constant field conorm
AlgebraicCurve.lSpace_pullbackConstants_eq_span_of_isConstantFieldExtension3 below · depth 16 - Euler characteristic one for 𝒪(rε)⊗𝒪(-D) on geometric fibres
AlgebraicGeometry.RelPicard.eulerChar_fibre_sectionTwist_tensor_idealModule_eq_one235 below · depth 16 - Milne charts cover Pic⁰: some chart kills H¹
AlgebraicGeometry.RelPicard.exists_chart_subsingleton_H1_fibre308 below · depth 16 - A tensor power of the theta bundle is finite by sections
AlgebraicGeometry.RelPicard.exists_finiteBySections_tensorPow_thetaBundle_of_isAlgClosed470 below · depth 16 - Principal glued data give node-unit modules on two glued curves
AlgebraicGeometry.RelPicard.isNodeUnitModule_foldr_ofPoint_tensor_foldr_ofPoint_of_forall_eq_ord_of_twoGluedSmoothCurves117 below · depth 16 - Fibrewise H¹=0 and h⁰=r+1-g for the twisted Poincaré bundle
AlgebraicGeometry.RelPicard.subsingleton_H1_and_finrank_H0_fibre_poincare_tensor_sectionTwist261 below · depth 16 - Two-chart Čech cohomology of mathcal O_X: h¹=g, h⁰=1
AlgebraicGeometry.Scheme.TwoAffineOpenCover.finrank_H1_sectionsOf_unit_eq_and_finrank_H0_eq_one119 below · depth 16 - Constant genus of geometric fibres via a two-chart cover
AlgebraicGeometry.SmoothProperCurve.exists_genus_forall_geometricFibre_riemannRoch_imp_eq_of_twoAffineOpenCover150 below · depth 16 - Base-point-free section of 𝒪(mε) on a K-fibre
AlgebraicGeometry.SmoothProperCurve.exists_section_pullback_invModule_pow_ker_notMem_support_of_twoAffineOpenCover277 below · depth 16 - Sections of (mathcal I_ε^m)^∨ surject onto a surjective base change
AlgebraicGeometry.SmoothProperCurve.surjective_unit_app_top_invModule_pow_ker268 below · depth 16 - Constants of the base-changed modular function field are L
ModularCurve.constantsAreBase_laurentBaseChange_modularFunctionFieldFull119 below · depth 16 - Existence of the genus for X₀(N) over ℚ̄
ModularCurve.stichtenothGenusExists_modularFunctionFieldBar157 below · depth 16 - Čech h⁰ of 𝒪(sum P-sum Q) equals ℓ of the divisor
AlgebraicCurve.CurveModel.finrank_H0_sectionsOf_invModule_prod_ker_tensor_module_prod_ker_eq_ell130 below · depth 17 - Riemann's theorem over a rational function subfield
AlgebraicCurve.RationalFunctionField.stichtenothGenusExists_of_ratFunc_tower23 below · depth 17 - Genus does not drop: ℓ(m̄ D)≤ℓ(mD) for large m
AlgebraicCurve.RegularProlongation.exists_finset_forall_valuation_eq_one_forall_exists_forall_ell_nsmul_le121 below · depth 17 - Rational places in a constant field extension
AlgebraicCurve.card_places_deg_one_eq_sum_divisors_of_constantFieldExtension0 below · depth 17 - Two-chart Čech H¹ computes the répartition H¹(D)
AlgebraicCurve.cechH1ToH1_bijective7 below · depth 17 - Functions in L(D) from orthogonality to Ω(D-E)
AlgebraicCurve.exists_mem_riemannRochSpace_forall_adicValuation_sub_le_of_forall_omegaSpace0 below · depth 17 - Weil differentials bounded by W are F-proportional
AlgebraicCurve.exists_weilSmul_eq_of_riemannIndexFormula23 below · depth 17 - Čech h⁰=1 and h¹= genus for smooth proper curves
AlgebraicCurve.finite_H0_H1_structureSheaf_of_isAlgClosed79 below · depth 17 - Finiteness of H¹(D) and duality with Ω_F(D)
AlgebraicCurve.finite_H1_and_exists_linearEquiv_dual_H1_omegaSpace31 below · depth 17 - Finiteness of the répartition space H¹(D)
AlgebraicCurve.finite_H1_of_genusReached3 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 - Block general position: prescribed h⁰ and vanishing Čech H¹
AlgebraicGeometry.RelPicard.exists_injective_forall_finrank_H0_add_eq_and_subsingleton_H1_of_blocks_of_isAlgEquivZero_of_lt_card309 below · depth 17 - Block general position on a smooth geometric fibre
AlgebraicGeometry.RelPicard.exists_injective_forall_subsingleton_H1_of_blocks_of_smooth_fibre306 below · depth 17 - Block general position at a two-line degenerate geometric fibre
AlgebraicGeometry.RelPicard.exists_injective_forall_subsingleton_H1_of_blocks_of_twoLineDegeneration_of_sectionInSmoothLocus364 below · depth 17 - Nonzero theta section with trivial stabiliser on J(k)
AlgebraicGeometry.RelPicard.exists_thetaSection_ne_zero_and_stabilizer_trivial390 below · depth 17 - Genus-zero geometric fibres force JtoSpec k finite
AlgebraicGeometry.RelPicard.isFinite_toBase_of_geometricFibre_genus_eq_zero283 below · depth 17
… and 128 more statements (search for the module name to find them).