Definitions/Def_ModularCurve_GeometricBaseChange.lean
Geometric base change of subfields of
Fix a field L with a \mathbb{Q}-algebra structure and an intermediate field F_0 of \mathbb{Q}((q))/\mathbb{Q}. Writing coeffEmb L for the project's coefficientwise embedding \mathbb{Q}((q)) \hookrightarrow L((q)) and laurentBaseChange L F₀ for the intermediate field of L((q))/L obtained by adjoining the image of F_0 to L (both from the imported Laurent-coefficient module), the module constructs the comparison map between L \otimes_{\mathbb{Q}} F_0 and this compositum. First, linearIndependent_coeffEmb records linear disjointness in the form: any \mathbb{Q}-linearly independent family in \mathbb{Q}((q)) remains L-linearly independent in L((q)) after applying coeffEmb L; this holds for every field L \supseteq \mathbb{Q}, with no algebraicity hypothesis, and is proved by taking coordinates in a \mathbb{Q}-basis of L. Then baseChangeRatAlgHom is the \mathbb{Q}-algebra map obtained from Algebra.TensorProduct.productMap applied to \operatorname{algebraMap} L\,L((q)) and to coeffEmb L composed with the inclusion of F_0, and baseChangeHom is its upgrade to an L-algebra map L \otimes_{\mathbb{Q}} F_0 \to L((q)), so c \otimes f \mapsto \operatorname{algebraMap}(c)\cdot \mathrm{coeffEmb}(f). It is injective (baseChangeHom_injective, from the linear disjointness statement and a basis of the tensor product) and takes values in laurentBaseChange L F₀ (baseChangeHom_mem); hence the instance instIsDomainTensorProduct that L \otimes_{\mathbb{Q}} F_0 is a domain.
Under the further hypothesis that L/\mathbb{Q} is algebraic, L \otimes_{\mathbb{Q}} F_0 is a field (isField_tensorProduct, from Mathlib's tensor-product criterion), so the image of baseChangeHom is an intermediate field containing the generators of the compositum; exists_baseChangeHom_eq gives surjectivity onto laurentBaseChange L F₀ and baseChangeEquiv is the resulting L-algebra isomorphism L \otimes_{\mathbb{Q}} F_0 \simeq L\cdot F_0, with lemmas computing its values on 1 \otimes f and c \otimes f and its inverse. Finally geomAut is the monoid homomorphism sending a \mathbb{Q}-automorphism \sigma of F_0 to the L-automorphism of laurentBaseChange L F₀ conjugate, through baseChangeEquiv, to \mathrm{id}_L \otimes \sigma; geomAut_coeffEmb and coe_geomAut_coeffEmb say that it sends \mathrm{coeffEmb}(f) to \mathrm{coeffEmb}(\sigma f) for f \in F_0. Note that geomAut keeps the same F_0 on source and target.
Relation to Mathlib
Mathlib supplies the tensor-product algebra API used here (Algebra.TensorProduct.productMap, Algebra.TensorProduct.basis, Algebra.TensorProduct.isField_of_isAlgebraic, Algebra.TensorProduct.congr) and a general notion of linear disjointness, but the Laurent-series coefficient embedding coeffEmb and the compositum laurentBaseChange are the project's own (from the imported module), as are all the declarations here.
Where it is used
Taken with L = \overline{\mathbb{Q}} (an algebraic closure of \mathbb{Q}) and F_0 the modular function field attached to X_0(N), baseChangeEquiv identifies \overline{\mathbb{Q}} \otimes_{\mathbb{Q}} F_0 with the geometric function field, and geomAut transports \mathbb{Q}-automorphisms of the modular function field — the Atkin–Lehner and Fricke involutions, and twists of degeneracy maps — to \overline{\mathbb{Q}}-automorphisms of it, which then act on places of the curve and on J_0(N). This is the mechanism by which the Fricke involution and the cusp 0 are defined at the geometric level in the later cuspidal-class material.
References
- G. Shimura, Introduction to the Arithmetic Theory of Automorphic Functions, Publications of the Mathematical Society of Japan 11, Princeton University Press, 1971
- S. Lang, Algebra, 3rd edition, Graduate Texts in Mathematics 211, Springer, 2002 (linear disjointness and tensor products of field extensions)
References are suggested automatically and have not been individually verified.
English text generated automatically from the Lean source; the Lean statement is authoritative.
- 228 lines
- 28 declarations
- used in the statements of 67 theorems and imported by 112 proofs
- imports 2 definition modules
Source file: Definitions/Def_ModularCurve_GeometricBaseChange.lean
Declarations
- theorem
ModularCurve.linearIndependent_coeffEmb - theorem
ModularCurve.algebraMap_mul_eq_smul - def
ModularCurve.baseChangeRatAlgHom - theorem
ModularCurve.baseChangeRatAlgHom_tmul - def
ModularCurve.baseChangeHom - theorem
ModularCurve.baseChangeHom_tmul - theorem
ModularCurve.baseChangeHom_one_tmul - def
ModularCurve.baseChangeLinear - theorem
ModularCurve.baseChangeLinear_apply - def
ModularCurve.valRatLinear - theorem
ModularCurve.valRatLinear_apply - theorem
ModularCurve.baseChangeLinear_injective - theorem
ModularCurve.baseChangeHom_injective - theorem
ModularCurve.baseChangeHom_mem - instance
ModularCurve.instIsDomainTensorProduct - theorem
ModularCurve.isField_tensorProduct - theorem
ModularCurve.isField_range_baseChangeHom - theorem
ModularCurve.exists_baseChangeHom_eq - def
ModularCurve.baseChangeEquiv - theorem
ModularCurve.coe_baseChangeEquiv_apply - theorem
ModularCurve.baseChangeEquiv_one_tmul - theorem
ModularCurve.baseChangeEquiv_symm_coeffEmb - theorem
ModularCurve.baseChangeEquiv_tmul - def
ModularCurve.geomAut - theorem
ModularCurve.geomAut_apply - theorem
ModularCurve.geomAut_baseChangeEquiv_tmul - theorem
ModularCurve.geomAut_coeffEmb - theorem
ModularCurve.coe_geomAut_coeffEmb
Source
import Mathlib.FieldTheory.LinearDisjoint ↗ import Mathlib.RingTheory.TensorProduct.Free ↗ import Mathlib.Algebra.Algebra.Hom.Rat ↗ import Mathlib.Algebra.Module.LinearMap.Rat ↗ import Definitions.Def_ModularCurve_LaurentCoeff import Definitions.Def_FieldTheory_RatAlgClosureGalois set_option autoImplicit false noncomputable section open scoped TensorProduct open IntermediateField namespace ModularCurve section LinearDisjoint variable (L : Type*) [Field L] [Algebra ℚ L] theorem linearIndependent_coeffEmb {ι : Type*} {v : ι → LaurentSeries ℚ} (hv : LinearIndependent ℚ v) : LinearIndependent L (fun i => coeffEmb L (v i)) := by classical rw [linearIndependent_iff'] at hv ⊢ intro s g hg i hi let b := Module.Free.chooseBasis ℚ L refine b.forall_coord_eq_zero_iff.mp fun k => ?_ have hk : ∑ j ∈ s, (b.coord k (g j)) • v j = 0 := by ext n have hn := congrArg (fun x : LaurentSeries L => b.coord k (x.coeff n)) hg simp only [HahnSeries.coeff_sum, HahnSeries.coeff_smul, coeffEmb_coeff, smul_eq_mul, HahnSeries.coeff_zero, map_zero] at hn simp only [HahnSeries.coeff_sum, HahnSeries.coeff_smul, smul_eq_mul, HahnSeries.coeff_zero] rw [← hn, map_sum] refine Finset.sum_congr rfl fun j _ => ?_ rw [mul_comm (g j), ← Algebra.smul_def, map_smul, smul_eq_mul, mul_comm] exact hv s (fun j => b.coord k (g j)) hk i hi end LinearDisjoint section BaseChange variable (L : Type*) [Field L] private theorem algebraMap_mul_eq_smul (c : L) (y : LaurentSeries L) : algebraMap L (LaurentSeries L) c * y = c • y := by rw [algebraMap_laurentSeries_eq_single, HahnSeries.single_zero_mul_eq_smul] variable [Algebra ℚ L] variable (F₀ : IntermediateField ℚ (LaurentSeries ℚ)) def baseChangeRatAlgHom : L ⊗[ℚ] F₀ →ₐ[ℚ] LaurentSeries L := Algebra.TensorProduct.productMap (algebraMap L (LaurentSeries L)).toRatAlgHom ((coeffEmb L).comp (F₀.val : F₀ →+* LaurentSeries ℚ)).toRatAlgHom theorem baseChangeRatAlgHom_tmul (c : L) (f : F₀) : baseChangeRatAlgHom L F₀ (c ⊗ₜ f) = algebraMap L (LaurentSeries L) c * coeffEmb L (f : LaurentSeries ℚ) := Algebra.TensorProduct.productMap_apply_tmul _ _ c f def baseChangeHom : L ⊗[ℚ] F₀ →ₐ[L] LaurentSeries L := { baseChangeRatAlgHom L F₀ with commutes' := fun c => by change baseChangeRatAlgHom L F₀ (algebraMap L (L ⊗[ℚ] F₀) c) = algebraMap L (LaurentSeries L) c rw [Algebra.TensorProduct.algebraMap_apply, Algebra.algebraMap_self, RingHom.id_apply, baseChangeRatAlgHom_tmul, OneMemClass.coe_one, map_one, mul_one] } @[simp] theorem baseChangeHom_tmul (c : L) (f : F₀) : baseChangeHom L F₀ (c ⊗ₜ f) = algebraMap L (LaurentSeries L) c * coeffEmb L (f : LaurentSeries ℚ) := baseChangeRatAlgHom_tmul L F₀ c f theorem baseChangeHom_one_tmul (f : F₀) : baseChangeHom L F₀ (1 ⊗ₜ f) = coeffEmb L (f : LaurentSeries ℚ) := by rw [baseChangeHom_tmul, map_one, one_mul] private def baseChangeLinear : L ⊗[ℚ] F₀ →ₗ[L] LaurentSeries L where toFun := baseChangeHom L F₀ map_add' := map_add _ map_smul' c x := by rw [RingHom.id_apply, ← algebraMap_mul_eq_smul, ← (baseChangeHom L F₀).commutes c, ← map_mul, ← Algebra.smul_def] private theorem baseChangeLinear_apply (x : L ⊗[ℚ] F₀) : baseChangeLinear L F₀ x = baseChangeHom L F₀ x := rfl private def valRatLinear : F₀ →ₗ[ℚ] LaurentSeries ℚ := ((F₀.val : F₀ →+* LaurentSeries ℚ) : F₀ →+ LaurentSeries ℚ).toRatLinearMap private theorem valRatLinear_apply (f : F₀) : valRatLinear F₀ f = (f : LaurentSeries ℚ) := rfl private theorem baseChangeLinear_injective : Function.Injective (baseChangeLinear L F₀) := by classical let bF := Module.Free.chooseBasis ℚ F₀ let B := Algebra.TensorProduct.basis L bF have hli : LinearIndependent L (baseChangeLinear L F₀ ∘ B) := by have h : (baseChangeLinear L F₀ ∘ B : _ → LaurentSeries L) = fun i => coeffEmb L (valRatLinear F₀ (bF i)) := by funext i rw [Function.comp_apply, baseChangeLinear_apply, Algebra.TensorProduct.basis_apply, baseChangeHom_one_tmul, valRatLinear_apply] rw [h] refine linearIndependent_coeffEmb L ?_ refine bF.linearIndependent.map' (valRatLinear F₀) (LinearMap.ker_eq_bot.mpr ?_) exact Subtype.val_injective rw [injective_iff_map_eq_zero] intro x hx have hrepr : Finsupp.linearCombination L (baseChangeLinear L F₀ ∘ B) (B.repr x) = 0 := by rw [← Finsupp.apply_linearCombination, B.linearCombination_repr] exact hx have h0 : B.repr x = 0 := linearIndependent_iff.mp hli (B.repr x) hrepr rw [← B.linearCombination_repr x, h0, map_zero] theorem baseChangeHom_injective : Function.Injective (baseChangeHom L F₀) := baseChangeLinear_injective L F₀ theorem baseChangeHom_mem (x : L ⊗[ℚ] F₀) : baseChangeHom L F₀ x ∈ laurentBaseChange L F₀ := by induction x using TensorProduct.induction_on with | zero => rw [map_zero]; exact zero_mem _ | tmul c f => rw [baseChangeHom_tmul] exact mul_mem ((laurentBaseChange L F₀).algebraMap_mem c) (coeffEmb_mem_laurentBaseChange L f.2) | add x y hx hy => rw [map_add]; exact add_mem hx hy instance instIsDomainTensorProduct : IsDomain (L ⊗[ℚ] F₀) := Function.Injective.isDomain (baseChangeHom L F₀).toRingHom (baseChangeHom_injective L F₀) variable [Algebra.IsAlgebraic ℚ L] theorem isField_tensorProduct : IsField (L ⊗[ℚ] F₀) := Algebra.TensorProduct.isField_of_isAlgebraic ℚ L F₀ (Or.inl inferInstance) private theorem isField_range_baseChangeHom : IsField (baseChangeHom L F₀).range := MulEquiv.isField (isField_tensorProduct L F₀) (AlgEquiv.ofInjective _ (baseChangeHom_injective L F₀)).symm.toMulEquiv theorem exists_baseChangeHom_eq {y : LaurentSeries L} (hy : y ∈ laurentBaseChange L F₀) : ∃ x : L ⊗[ℚ] F₀, baseChangeHom L F₀ x = y := by let K : IntermediateField L (LaurentSeries L) := (baseChangeHom L F₀).range.toIntermediateField' (isField_range_baseChangeHom L F₀) have hle : laurentBaseChange L F₀ ≤ K := by change IntermediateField.adjoin L _ ≤ K refine IntermediateField.adjoin_le_iff.mpr ?_ rintro _ ⟨f, hf, rfl⟩ exact ⟨(1 : L) ⊗ₜ ⟨f, hf⟩, baseChangeHom_one_tmul L F₀ ⟨f, hf⟩⟩ exact hle hy def baseChangeEquiv : L ⊗[ℚ] F₀ ≃ₐ[L] laurentBaseChange L F₀ := AlgEquiv.ofBijective { toFun := fun x => ⟨baseChangeHom L F₀ x, baseChangeHom_mem L F₀ x⟩ map_one' := Subtype.ext (map_one _) map_mul' := fun x y => Subtype.ext (map_mul _ x y) map_zero' := Subtype.ext (map_zero _) map_add' := fun x y => Subtype.ext (map_add _ x y) commutes' := fun c => Subtype.ext ((baseChangeHom L F₀).commutes c) } ⟨fun x y h => baseChangeHom_injective L F₀ (congrArg Subtype.val h), fun y => by obtain ⟨x, hx⟩ := exists_baseChangeHom_eq L F₀ y.2 exact ⟨x, Subtype.ext hx⟩⟩ @[simp] theorem coe_baseChangeEquiv_apply (x : L ⊗[ℚ] F₀) : (baseChangeEquiv L F₀ x : LaurentSeries L) = baseChangeHom L F₀ x := rfl theorem baseChangeEquiv_one_tmul (f : F₀) : baseChangeEquiv L F₀ (1 ⊗ₜ f) = ⟨coeffEmb L f, coeffEmb_mem_laurentBaseChange L f.2⟩ := Subtype.ext (baseChangeHom_one_tmul L F₀ f) theorem baseChangeEquiv_symm_coeffEmb (f : F₀) : (baseChangeEquiv L F₀).symm ⟨coeffEmb L f, coeffEmb_mem_laurentBaseChange L f.2⟩ = 1 ⊗ₜ f := by rw [← baseChangeEquiv_one_tmul, AlgEquiv.symm_apply_apply] theorem baseChangeEquiv_tmul (c : L) (f : F₀) : baseChangeEquiv L F₀ (c ⊗ₜ f) = algebraMap L (laurentBaseChange L F₀) c * ⟨coeffEmb L f, coeffEmb_mem_laurentBaseChange L f.2⟩ := by rw [show c ⊗ₜ[ℚ] f = algebraMap L (L ⊗[ℚ] F₀) c * (1 ⊗ₜ f) by rw [Algebra.TensorProduct.algebraMap_apply, Algebra.algebraMap_self, RingHom.id_apply, Algebra.TensorProduct.tmul_mul_tmul, mul_one, one_mul], map_mul, AlgEquiv.commutes, baseChangeEquiv_one_tmul] def geomAut : (F₀ ≃ₐ[ℚ] F₀) →* (laurentBaseChange L F₀ ≃ₐ[L] laurentBaseChange L F₀) := MonoidHom.mk' (fun σ => ((baseChangeEquiv L F₀).symm.trans (Algebra.TensorProduct.congr (AlgEquiv.refl : L ≃ₐ[L] L) σ)).trans (baseChangeEquiv L F₀)) (fun σ τ => AlgEquiv.ext fun x => by change baseChangeEquiv L F₀ (Algebra.TensorProduct.congr (AlgEquiv.refl : L ≃ₐ[L] L) (σ * τ) ((baseChangeEquiv L F₀).symm x)) = baseChangeEquiv L F₀ (Algebra.TensorProduct.congr (AlgEquiv.refl : L ≃ₐ[L] L) σ ((baseChangeEquiv L F₀).symm (baseChangeEquiv L F₀ (Algebra.TensorProduct.congr (AlgEquiv.refl : L ≃ₐ[L] L) τ ((baseChangeEquiv L F₀).symm x))))) rw [AlgEquiv.symm_apply_apply] congr 1 induction (baseChangeEquiv L F₀).symm x using TensorProduct.induction_on with | zero => simp only [map_zero] | tmul c f => rfl | add y z hy hz => simp only [map_add, hy, hz]) theorem geomAut_apply (σ : F₀ ≃ₐ[ℚ] F₀) (x : laurentBaseChange L F₀) : geomAut L F₀ σ x = baseChangeEquiv L F₀ (Algebra.TensorProduct.congr (AlgEquiv.refl : L ≃ₐ[L] L) σ ((baseChangeEquiv L F₀).symm x)) := rfl theorem geomAut_baseChangeEquiv_tmul (σ : F₀ ≃ₐ[ℚ] F₀) (c : L) (f : F₀) : geomAut L F₀ σ (baseChangeEquiv L F₀ (c ⊗ₜ f)) = baseChangeEquiv L F₀ (c ⊗ₜ σ f) := by rw [geomAut_apply, AlgEquiv.symm_apply_apply] rfl theorem geomAut_coeffEmb (σ : F₀ ≃ₐ[ℚ] F₀) (f : F₀) : geomAut L F₀ σ ⟨coeffEmb L f, coeffEmb_mem_laurentBaseChange L f.2⟩ = ⟨coeffEmb L (σ f), coeffEmb_mem_laurentBaseChange L (σ f).2⟩ := by rw [← baseChangeEquiv_one_tmul, geomAut_baseChangeEquiv_tmul, baseChangeEquiv_one_tmul] theorem coe_geomAut_coeffEmb (σ : F₀ ≃ₐ[ℚ] F₀) (f : F₀) : (geomAut L F₀ σ ⟨coeffEmb L f, coeffEmb_mem_laurentBaseChange L f.2⟩ : LaurentSeries L) = coeffEmb L (σ f) := congrArg Subtype.val (geomAut_coeffEmb L F₀ σ f) end BaseChange end ModularCurve end
Statements phrased using this module (67)
- Arithmetic semilinear action commutes with geometric automorphisms
ModularCurve.arithmeticGalois_smul_geomAut1 below · depth 8 - Coefficientwise and geometric Galois actions on L· F₀ commute
ModularCurve.arithmeticRingAut_geomAut0 below · depth 9 - Atkin–Lehner automorphism exchanges the two degeneracy legs
ModularCurve.geomAut_atkinLehner_comp_legs1 below · depth 11 - Two-component exhaustion at an ℓ-adic place of X₀(Nℓ)
ModularCurve.twoComponentExhaustion_valuation_mul_lt_one_of_ord_inv_sub_pos218 below · depth 11 - Two-component exhaustion at level Nℓ: product of values is a non-unit
ModularCurve.twoComponentExhaustion_valuation_mul_lt_one_of_ord_sub_pos218 below · depth 11 - Atkin–Lehner relation U_q D + w_q· D = β^*α_*D on divisors
ModularCurve.heckeDivBar_self_add_atkinLehner_smul186 below · depth 12 - Uₚ + wₚ = β^*α_* on J₀(N₀p)
ModularCurve.heckeOperatorBar_self_add_atkinLehner_smul225 below · depth 12 - Chart-pinned curve model of the Igusa scheme's geometric generic fibre
ModularCurve.IgusaScheme.exists_curveModel_iso_genericFibre_galoisCompat_chartPin144 below · depth 13 - Igusa's model of X₀(N₀) over ℤ₍ₚ₎, pinned
ModularCurve.IgusaScheme.exists_finiteMapData_ratCurveModel_igusaTo1,159 below · depth 13 - Relative Jacobian of X₀(p) over ℤ_{(ℓ)}, Abel–Jacobi normalised
ModularCurve.exists_pts_heckeRingAction_relJacobian_jZero_of_representsRelSubPic_of_ratCurveModel_of_abelJacobi1,167 below · depth 13 - Relative Jacobian of X₀(p) over ℤ_{(ℓ)} from finite-map data
ModularCurve.exists_relJacobian_jZero_of_smoothProperModel_of_finiteMapData_of_ratCurveModel1,527 below · depth 13 - Smooth proper ℤ_{(ℓ)}-model of X₀(p) with finite-map data
ModularCurve.exists_smoothProperModel_jZero_relCurve_finiteMapData_ratCurveModel1,158 below · depth 13 - Generic fibres of the Igusa model: chart pins, Galois and place compatibility
ModularCurve.IgusaScheme.exists_genericFibreIso_chartPin_galoisCompat_and_ratPlaceCompat5 below · depth 14 - Hecke operator T_q as endomorphism of the relative Jacobian
ModularCurve.exists_heckeEndomorphism_relJacobian_of_representsRelSubPic_of_ratCurveModel591 below · depth 14 - Points, reduction and Hecke action on a representing relative Jacobian
ModularCurve.exists_pts_relJacobian_jZero_of_representsRelSubPic_of_ratCurveModel1,162 below · depth 14 - Atkin–Lehner involution acts as w_* on ℚ̄-points
ModularCurve.DRModelPackageLevel.pts_atkinLehner_smul_eq_comp_atkinLehnerHom173 below · depth 15 - Second degeneracy pullback agrees with β^* on ℚ̄-points
ModularCurve.DRModelPackageLevel.pts_degeneracyPullbackPair_one_eq_comp_degeneracyPullbackHom1,238 below · depth 15 - Place compatibility of the ℚ̄- and ℚ-level Igusa chart models
ModularCurve.IgusaScheme.ratPlaceCompat_of_chartPins2 below · depth 15 - Base change of the two-chart model to ℚ̄
ModularCurve.exists_ofGenerator_baseChangeIso_chartPin_and_placeCompat2 below · depth 15 - Norm transform endomorphism realises T_q on ℚ̄-points
ModularCurve.heckeOperatorBar_points_eq_comp_of_transform359 below · depth 15 - Base change to ℚ̄ respects restriction of places
ModularCurve.pointEquivPlace_comp_eq_restrictAlong_of_baseChange41 below · depth 15 - Atkin–Lehner endomorphism on Abel–Jacobi points of Pic⁰
ModularCurve.DRModelPackageLevel.mul_atkinLehnerHom_ajbar_ajbar_eq_of_comp_w23 below · depth 16 - Atkin–Lehner involution restricts places along the geometric automorphism
ModularCurve.DRModelPackageLevel.pointEquivPlace_eq_restrictAlong_geomAut_of_comp_w4 below · depth 16 - Second degeneracy pullback of [x]-[s₀] equals β^∗circaj₀
ModularCurve.DRModelPackageLevel.pts_degeneracyPullbackPair_one_mk_eq_abelJacobi_comp_degeneracyPullbackHom1,237 below · depth 16 - The two prolongations of X₀(Np) above p∤ N
ModularCurve.exists_regularProlongation_pair_valuationSubring_eq_or_eq_of_not_dvd122 below · depth 16 - Hecke operator T_q on J₀(p)(ℚ̄) realised by φ_η
ModularCurve.heckeOperatorBar_points_eq_comp_of_transform_rat359 below · depth 16 - Ogg's unit reduces to the supersingular polynomial
ModularCurve.residue_coeffEmb_modularUnitSeries_eq_prod_ssJSet_of_regularProlongation102 below · depth 16 - Conorm divisors map to aj₀ followed by β^∗
ModularCurve.DRModelPackageLevel.pts_mk_pullbackAlong_heckeBetaBar_single_sub_eq_abelJacobi_comp_degeneracyPullbackHom1,236 below · depth 17 - Poincaré pullback at an effective divisor class as ideal-power modules
ModularCurve.DRModelPackageLevel.nonempty_poincare_pullbackAlong_pts_mk_iso_invModule_prod_pow_tensor_module_pow24 below · depth 18 - Base-changed deck group: fixed field and degree formula
ModularCurve.laurentBaseChange_deck_galois_package0 below · depth 19 - Degree-one places extend to a constant field extension
AlgebraicCurve.Place.exists_place_laurentBaseChange_of_deg_eq_one172 below · depth 20 - Tangent space of the relative Jacobian of X₀(N) at p
ModularCurve.exists_pts_relJacobian_jZero_level_dualNumber_kernel_equiv_addMonoidHom_intLattice_latticeHeckeFamily_integral_of_representsRelSubPic_of_ratCurveModel_of_not_dvd1,563 below · depth 23 - Hecke endomorphism T_q of the relative Jacobian, with moduli description
ModularCurve.exists_heckeEndomorphism_relJacobian_moduli_of_ratCurveModel591 below · depth 24 - Global 1-forms of the ℤ₍ₚ₎-model versus p-integral cusp forms
ModularCurve.exists_linearEquiv_kaehlerH0_baseChange_intLattice_of_ratCurveModel_of_cuspSection_compat_of_neZero872 below · depth 24 - Compositum L· F₀ in L((q)) as Frac(L⊗_ℚF₀)
ModularCurve.isFractionRing_tensorProduct_laurentBaseChange0 below · depth 24 - Hecke adjunction for the integral Serre pairing, sectional charts
ModularCurve.serrePairingInt_deformationClass_heckeGen_eq_of_isCompletionAlong_of_res_eq_heckeDiffBar365 below · depth 24 - Norm–pull-back endomorphism acts by trace on Čech H¹
AlgebraicGeometry.RelPicard.IsDeformationClassMap.exists_cechH1ToH1_germ_eq_traceAlong_of_classifies_normModule_pullback_of_mono129 below · depth 25 - Degeneracy roof at the generic fibre: function-field Hecke correspondence
ModularCurve.exists_functionField_degeneracyRoof_kaehlerToFunctionField_eq_correspondence_of_res_eq_heckeDiffBar208 below · depth 25 - Integral weight-two cusp forms as relative differentials on the model
ModularCurve.exists_kaehlerH0_coeffMap_diffQExpBar_eq_qExpansion_of_mem_intLattice_of_ratCurveModel_of_cuspSection_compat_of_neZero456 below · depth 25 - Integrality of q-expansions of global 1-forms on a ℤ₍ₚ₎-model
ModularCurve.exists_powerSeries_diffQExpBar_eq_ofPowerSeries_map_of_kaehlerH0_of_ratCurveModel_of_cuspSection_compat_of_neZero349 below · depth 25 - Tangent action of a norm-pull-back endomorphism over a field
AlgebraicGeometry.RelPicard.IsDeformationClassMap.exists_cechH1ToH1_germ_eq_traceAlong_of_classifies_normModule_pullback_of_field74 below · depth 26 - Moduli description of an endomorphism transported to the base change
AlgebraicGeometry.RelPicard.RepresentsRelSubPic.nonempty_poincare_pullbackAlong_iso_rigidify_normModule_baseChange58 below · depth 26 - Coefficientwise compatibility of base-changed q-expansion automorphisms
ModularCurve.coe_baseChangeAut_eq_coeffMap_coe_baseChangeAut_of_coe_eq_coeffMap0 below · depth 26 - p-saturation of global differentials via q-expansions
ModularCurve.exists_eq_smul_of_diffQExpBar_eq_ofPowerSeries_smul_of_kaehlerH0_of_ratCurveModel_of_cuspSection_compat_of_neZero366 below · depth 26 - Degeneracy roof at q over the generic fibre
ModularCurve.exists_functionField_degeneracyRoof_lift_of_ratCurveModel4 below · depth 26 - Generic restriction of a global 1-form factors through the cusp stalk
ModularCurve.exists_kaehlerDifferential_stalk_and_ringHom_res_eq_mapOfRingHom_cuspSection_of_ratCurveModel_compat_of_neZero2 below · depth 26 - p-power multiple of an integral weight-2 cusp form as a differential
ModularCurve.exists_pow_smul_kaehlerH0_coeffMap_diffQExpBar_eq_qExpansion_of_mem_intLattice_of_ratCurveModel_of_cuspSection_compat_of_neZero322 below · depth 26 - Integral q-expansions of germs at the cusp of a ℤ₍ₚ₎-model
ModularCurve.exists_powerSeries_map_eq_ffEquiv_symm_stalkMap_stalkSpecializes_cuspSection_of_ratCurveModel_compat_of_neZero346 below · depth 26 - Residue package for the two legs of the T_q degeneracy roof
ModularCurve.functionField_residuePackage_degeneracyRoof_of_finiteAlong85 below · depth 26 - Generic-fibre degeneracy roof for Hecke action on differentials
ModularCurve.kaehlerToFunctionField_eq_correspondence_degeneracyRoof_of_res_eq_heckeDiffBar161 below · depth 26 - Integral q-parameter at the cusp of a ℤ₍ₚ₎-model
ModularCurve.exists_algHom_retraction_param_stalk_cuspSection_ffEquiv_symm_eq_ofPowerSeries_isUnit_coeff_one_of_ratCurveModel_compat_of_neZero342 below · depth 27 - Germs at the cusp with p-divisible q-expansion are p-divisible
ModularCurve.exists_eq_germ_mul_of_ffEquiv_symm_stalkMap_stalkSpecializes_eq_ofPowerSeries_smul_cuspSection_of_ratCurveModel_compat_of_neZero3 below · depth 27 - Base change to ℚ̄ of the Hecke correspondence on differentials
ModularCurve.map_differentialCorrespondence_eq_heckeDiffBar_map1 below · depth 27 - Invertibility of j at generic-fibre points over the cusp
ModularCurve.exists_isUnit_stalk_ffEquiv_symm_stalkMap_genericPoint_eq_jq_of_specializes_cuspSection_of_ratCurveModel_compat_of_neZero288 below · depth 28 - Cusp parameter has q-expansion 1/j up to a unit
ModularCurve.exists_isUnit_stalk_ffEquiv_symm_stalkMap_mul_stalkSpecializes_eq_jq_inv_cuspSection_of_ratCurveModel_compat_of_neZero8 below · depth 28 - Modular invariant j as a unit along the special fibre
ModularCurve.exists_notMem_span_germ_and_ffEquiv_symm_stalkMap_stalkSpecializes_eq_jq_mul_cuspSection_of_ratCurveModel_compat_of_neZero323 below · depth 28 - Uniqueness of the place over the cusp ∞ after base change
ModularCurve.eq_cuspInftyBar_of_comap_toSubring_eq_cuspInftyFull0 below · depth 29 - Vertical order of j at the cusp section's special point
ModularCurve.exists_int_notMem_span_germ_and_ffEquiv_symm_stalkMap_stalkSpecializes_eq_jq_mul_zpow_mul_cuspSection_of_ratCurveModel_compat_of_neZero4 below · depth 29 - Valuation-ring lift of a ℚ̄-point along a specialisation
ModularCurve.exists_liesOverPrime_schemeHomOver_comp_eq_base_closedPoint_eq_of_specializes0 below · depth 29 - No pole of j along the special fibre at the cusp
ModularCurve.false_of_ffEquiv_symm_stalkMap_stalkSpecializes_eq_jq_mul_pow_mul_cuspSection_of_ratCurveModel_compat_of_neZero309 below · depth 29 - No zero of j along the special fibre
ModularCurve.false_of_pow_mul_ffEquiv_symm_stalkMap_stalkSpecializes_eq_jq_mul_cuspSection_of_ratCurveModel_compat_of_neZero319 below · depth 29 - Finitely many zeros and poles of ̄ j on the special fibre
ModularCurve.false_of_infinite_setOf_ord_pointEquivPlace_jqModC_ne_zero_cuspSection_of_ratCurveModel_compat_of_neZero113 below · depth 30 - An open set containing infinitely many κ-points of the special fibre
ModularCurve.infinite_setOf_base_closedPoint_mem_of_fromSpecStalk_span_germ_mem_cuspSection_of_ratCurveModel_compat_of_neZero47 below · depth 30 - Pole of ̄ j at the reduction of an A-point
ModularCurve.ord_apply_pointEquivPlace_jqModC_neg_of_stalkClosedPointTo_mem_maximalIdeal_of_ffEquiv_symm_stalkMap_eq_jq_inv_cuspSection_of_ratCurveModel_compat_of_neZero277 below · depth 30 - An A-point with j∈mathfrak m_A reduces to a zero of ̄ j
ModularCurve.ord_apply_pointEquivPlace_jqModC_pos_of_stalkClosedPointTo_mem_maximalIdeal_of_ffEquiv_symm_stalkMap_eq_jq_cuspSection_of_ratCurveModel_compat_of_neZero287 below · depth 30 - Geometric function field identification is base change of the rational one
ModularCurve.coe_ffEquiv_symm_stalkMap_eq_coeffEmb_ffEquiv_symm_of_galoisCompat_of_placeCompat44 below · depth 31 - Base change of models reads stalk maps coefficientwise on q-expansions
ModularCurve.coe_ffEquiv_symm_algebraMap_stalkMap_fst_eq_coeffEmb_ffEquiv_symm_of_baseChange41 below · depth 32