Definitions/Def_AlgebraicCurve_Pic0Congr.lean
Transport of divisors and Pic⁰ along a field isomorphism
Throughout, K, F, F' are fields with F and F' algebras over K, and e : F \simeq F' is a ring isomorphism satisfying e(\iota_F(a)) = \iota_{F'}(a) for all a \in K, where \iota denotes the structure maps from K; no finiteness or separability is assumed. Recall the project's conventions: a place of F over K is a valuation subring of F containing the image of K, distinct from F itself, whose ring is a principal ideal ring; its degree is \dim_K of its residue field; \mathrm{Divisor}\,K\,F is the group of finitely supported \mathbb{Z}-valued functions on places; degZero is the kernel of the degree homomorphism D \mapsto \sum_v D(v)\deg v; principal consists of the divisors v \mapsto \mathrm{ord}_v f for some f \neq 0; and \mathrm{Pic}^0 is degZero modulo the intersection of principal with degZero.
AlgebraicCurve.Divisor.congr is the additive equivalence \mathrm{Divisor}\,K\,F \simeq \mathrm{Divisor}\,K\,F' obtained by reindexing finitely supported functions along the bijection of places v \mapsto e_*v induced by e (pull-back of the valuation subring along e^{-1}). The accompanying lemmas compute it on single-place divisors and evaluate the transported divisor and its inverse at transported places; degree_congr and degree_congr_symm record that the degree is unchanged, since transport preserves residue degrees, and deduce that degree-zero divisors correspond to degree-zero divisors in both directions. congr_mem_principal and congr_symm_mem_principal show that the divisor of f is carried to the divisor of e(f), and conversely, using that \mathrm{ord}_{e_*v}(e f) = \mathrm{ord}_v f.
AlgebraicCurve.Pic0.degZeroCongr is the restriction of Divisor.congr to an additive equivalence between the degree-zero subgroups, with coercion lemmas; map_principal_degZeroCongr states that it maps the subgroup of principal degree-zero divisors of F exactly onto that of F'. Consequently AlgebraicCurve.Pic0.congr is the induced additive equivalence \mathrm{Pic}^0_K(F) \simeq \mathrm{Pic}^0_K(F') of the quotients.
Relation to Mathlib
Mathlib has no notion of place, divisor or degree-zero divisor class group in this valuation-subring formulation; those are the project's own, and this module supplies their functoriality in the ambient field. The transport itself is assembled from Mathlib's Finsupp.domCongr and QuotientAddGroup.congr.
Where it is used
These equivalences let the degree-zero divisor class group of a curve be computed on any chosen model of its function field and transported to another, which is how \mathrm{Pic}^0 of a modular curve is matched with the group computed from an explicit presentation or from a Néron model's special fibre.
References
- H. Stichtenoth, Algebraic Function Fields and Codes, 2nd edition, Graduate Texts in Mathematics 254, Springer, 2009, Chapter I
References are suggested automatically and have not been individually verified.
English text generated automatically from the Lean source; the Lean statement is authoritative.
- 123 lines
- 15 declarations
- used in the statements of 30 theorems and imported by 46 proofs
- imports 1 definition modules
Source file: Definitions/Def_AlgebraicCurve_Pic0Congr.lean
Imported by
- no other definition module
Declarations
- def
AlgebraicCurve.Divisor.congr - theorem
AlgebraicCurve.Divisor.congr_single - theorem
AlgebraicCurve.Divisor.congr_apply_place_congr - theorem
AlgebraicCurve.Divisor.congr_symm_apply_place - theorem
AlgebraicCurve.Divisor.degree_congr - theorem
AlgebraicCurve.Divisor.degree_congr_symm - theorem
AlgebraicCurve.Divisor.congr_mem_degZero - theorem
AlgebraicCurve.Divisor.congr_symm_mem_degZero - theorem
AlgebraicCurve.Divisor.congr_mem_principal - theorem
AlgebraicCurve.Divisor.congr_symm_mem_principal - def
AlgebraicCurve.Pic0.degZeroCongr - theorem
AlgebraicCurve.Pic0.coe_degZeroCongr - theorem
AlgebraicCurve.Pic0.coe_degZeroCongr_symm - theorem
AlgebraicCurve.Pic0.map_principal_degZeroCongr - def
AlgebraicCurve.Pic0.congr
Source
import Mathlib import Definitions.Def_AlgebraicCurve_RatFuncPlaces set_option autoImplicit false noncomputable section open AlgebraicCurve namespace AlgebraicCurve namespace Divisor variable {K F F' : Type*} [Field K] [Field F] [Field F'] [Algebra K F] [Algebra K F'] variable (e : F ≃+* F') (he : ∀ a : K, e (algebraMap K F a) = algebraMap K F' a) def congr : Divisor K F ≃+ Divisor K F' := Finsupp.domCongr (Place.congrEquiv e he) @[simp] theorem congr_single (v : Place K F) (n : ℤ) : congr e he (Finsupp.single v n) = Finsupp.single (Place.congrRingEquiv e he v) n := Finsupp.equivMapDomain_single (Place.congrEquiv e he) v n theorem congr_apply_place_congr (D : Divisor K F) (v : Place K F) : congr e he D (Place.congrRingEquiv e he v) = D v := by show Finsupp.equivMapDomain (Place.congrEquiv e he) D (Place.congrEquiv e he v) = D v rw [Finsupp.equivMapDomain_apply] exact congrArg D ((Place.congrEquiv e he).symm_apply_apply v) theorem congr_symm_apply_place (D : Divisor K F') (v : Place K F) : (congr e he).symm D v = D (Place.congrRingEquiv e he v) := by show Finsupp.equivMapDomain (Place.congrEquiv e he).symm D v = _ rw [Finsupp.equivMapDomain_apply, Equiv.symm_symm] rfl @[simp] theorem degree_congr (D : Divisor K F) : degree (congr e he D) = degree D := by induction D using Finsupp.induction with | zero => simp | single_add v n D _ _ ih => rw [map_add, map_add, map_add, ih, congr_single, degree_single, degree_single, Place.deg_congrRingEquiv] @[simp] theorem degree_congr_symm (D : Divisor K F') : degree ((congr e he).symm D) = degree D := by conv_rhs => rw [← (congr e he).apply_symm_apply D] rw [degree_congr] theorem congr_mem_degZero {D : Divisor K F} (hD : D ∈ degZero (K := K) (F := F)) : congr e he D ∈ degZero (K := K) (F := F') := by rwa [mem_degZero, degree_congr] theorem congr_symm_mem_degZero {D : Divisor K F'} (hD : D ∈ degZero (K := K) (F := F')) : (congr e he).symm D ∈ degZero (K := K) (F := F) := by rwa [mem_degZero, degree_congr_symm] theorem congr_mem_principal {D : Divisor K F} (hD : D ∈ principal (K := K) (F := F)) : congr e he D ∈ principal (K := K) (F := F') := by obtain ⟨f, hf, hD⟩ := hD refine ⟨e f, by simpa using hf, fun w => ?_⟩ have hw : w = Place.congrRingEquiv e he ((Place.congrEquiv e he).symm w) := ((Place.congrEquiv e he).apply_symm_apply w).symm rw [hw, congr_apply_place_congr, hD ((Place.congrEquiv e he).symm w)] exact (Place.ord_congrRingEquiv e he ((Place.congrEquiv e he).symm w) f).symm theorem congr_symm_mem_principal {D : Divisor K F'} (hD : D ∈ principal (K := K) (F := F')) : (congr e he).symm D ∈ principal (K := K) (F := F) := by obtain ⟨f', hf', hD⟩ := hD refine ⟨e.symm f', by simpa using hf', fun v => ?_⟩ rw [congr_symm_apply_place, hD (Place.congrRingEquiv e he v)] have h := Place.ord_congrRingEquiv e he v (e.symm f') rwa [e.apply_symm_apply] at h end Divisor namespace Pic0 variable {K F F' : Type*} [Field K] [Field F] [Field F'] [Algebra K F] [Algebra K F'] variable (e : F ≃+* F') (he : ∀ a : K, e (algebraMap K F a) = algebraMap K F' a) def degZeroCongr : Divisor.degZero (K := K) (F := F) ≃+ Divisor.degZero (K := K) (F := F') where toFun D := ⟨Divisor.congr e he D, Divisor.congr_mem_degZero e he D.2⟩ invFun D := ⟨(Divisor.congr e he).symm D, Divisor.congr_symm_mem_degZero e he D.2⟩ left_inv D := Subtype.ext ((Divisor.congr e he).symm_apply_apply D) right_inv D := Subtype.ext ((Divisor.congr e he).apply_symm_apply D) map_add' D E := Subtype.ext (map_add (Divisor.congr e he) (D : Divisor K F) (E : Divisor K F)) @[simp] theorem coe_degZeroCongr (D : Divisor.degZero (K := K) (F := F)) : (degZeroCongr e he D : Divisor K F') = Divisor.congr e he (D : Divisor K F) := rfl @[simp] theorem coe_degZeroCongr_symm (D : Divisor.degZero (K := K) (F := F')) : ((degZeroCongr e he).symm D : Divisor K F) = (Divisor.congr e he).symm (D : Divisor K F') := rfl theorem map_principal_degZeroCongr : ((Divisor.principal (K := K) (F := F)).addSubgroupOf (Divisor.degZero (K := K) (F := F))).map (degZeroCongr e he).toAddMonoidHom = (Divisor.principal (K := K) (F := F')).addSubgroupOf (Divisor.degZero (K := K) (F := F')) := by ext y simp only [AddSubgroup.mem_map, AddSubgroup.mem_addSubgroupOf, AddEquiv.coe_toAddMonoidHom] constructor · rintro ⟨x, hx, rfl⟩ exact Divisor.congr_mem_principal e he hx · intro hy refine ⟨(degZeroCongr e he).symm y, ?_, (degZeroCongr e he).apply_symm_apply y⟩ rw [coe_degZeroCongr_symm] exact Divisor.congr_symm_mem_principal e he hy def congr : Pic0 K F ≃+ Pic0 K F' := QuotientAddGroup.congr _ _ (degZeroCongr e he) (map_principal_degZeroCongr e he) end Pic0 end AlgebraicCurve
Statements phrased using this module (30)
- Reduction mod ℓ on J₀(N) equals the constructed specialisation
ModularCurve.CharPModel.FibreModel.reductionModL_eq_pic0Congr_spPic0812 below · depth 10 - Comparison of the H=top and Igusa integral models
ModularCurve.exists_iso_xHDRLevel_top_drLevel_epsInf_pointEquivPlace191 below · depth 11 - Néron object of J₀(N₀p) at p with its bridges
ModularCurve.exists_jZeroNeronObjectAtP_and_bridge4,509 below · depth 11 - Finite and toric parts transport from Jₜop(N₀p) to J₀(N₀p)
ModularCurve.map_finPts_jHNeronObjectAtP_top_eq_and_map_toricPts_eq_of_pic0Congr_of_bridge136 below · depth 11 - Canonical transport J_H(M,top)→ J₀(M) is Galois-, Hecke- and diamond-compatible
ModularCurve.pic0Congr_jH_top_jZero_galois_hecke_diamond_compat187 below · depth 11 - Néron object of J₀(N₀p) at p from a level model
ModularCurve.DRModelPackageLevel.exists_jZeroNeronObjectAtP_and_bridge_representsRelSubPic_abqFibre_of_levelModel4,507 below · depth 12 - Specialization on Pic⁰ agrees with reduction mod ℓ
ModularCurve.PlaceSpecialization.spPic0_eq_reductionModL937 below · depth 12 - Pull-back along φ⁻¹ intertwines the two Abel–Jacobi dictionaries
ModularCurve.jZeroNeronObjectAtP_pts_pic0Congr_eq_pts_comp_pullbackHom_of_modelIso_levelData66 below · depth 12 - Reduction mod ℓ commutes with T_q for q≠ℓ
ModularCurve.reductionModL_heckeOperatorBar_of_ne938 below · depth 12 - Picard pullback along a curve isomorphism transports divisor classes
AlgebraicGeometry.RelPicard.pullbackHom_points_eq_pic0_congr_of_iso24 below · depth 13 - Special-fibre torus, abelian quotient and pins at level N₀p
ModularCurve.DRModelPackageLevel.exists_torusFibre_abqFibre_degeneracy_specialFibre_pins_of_levelModel1,857 below · depth 13 - Abelian coordinates of the reduction equal the glued specialisation pair
ModularCurve.DRModelPackageLevel.ptsSp_symm_abq_reduction_eq_toPic0Pair_of_isGluedSpecialization1,470 below · depth 14 - Abelian-quotient reduction of a good class matches the glued specialisation
ModularCurve.DRModelPackageLevel.ptsSp_symm_abq_reduction_pair_eq_toPic0Pair_of_isGluedSpecialization1,211 below · depth 15 - Special fibre of an A-point equals reduction mod λ
ModularCurve.JZeroNeronObjectAtP.LevelModel.ptsSp_symm_schemeHomOverComp_resPt_eq_reductionModL741 below · depth 15 - Uniqueness of smooth proper models, compatibly with places
AlgebraicCurve.CurveModel.exists_iso_comp_toBase_eq_placeOfPoint_congr_eq5 below · depth 16 - The two abq coordinates of a reduced Abel–Jacobi point
ModularCurve.DRModelPackageLevel.nonempty_poincare_pullbackAlong_abq_reduction_iso_pointTwist1,142 below · depth 16 - Degree-zero twists by A-sections come from D₀
ModularCurve.JZeroNeronObjectAtP.LevelModel.exists_schemeHomOver_poincare_pullbackAlong_iso_rigidify_sectionTwist_of_sum_eq_zero281 below · depth 16 - Reduction of a point classifying a rigidified section twist
ModularCurve.JZeroNeronObjectAtP.LevelModel.nonempty_poincare_baseChange_pullbackAlong_iso_pointTwist_of_iso_rigidify_sectionTwist29 below · depth 16 - Rigidified section twists restrict to the geometric generic fibre
ModularCurve.JZeroNeronObjectAtP.LevelModel.nonempty_poincare_pullbackAlong_iso_pointTwist_of_iso_rigidify_sectionTwist29 below · depth 16 - Poincaré pullback at a degree-zero class is the point twist
ModularCurve.JZeroNeronObjectAtP.LevelModel.nonempty_poincare_pullbackAlong_pts_pic0Mk_iso_pointTwist15 below · depth 16 - Good-reduction specialisation of J₀(M) above ℓ∤ M
ModularCurve.exists_jZeroGoodReductionSpecialization_of_not_dvd1,042 below · depth 16 - Cyclicity of Eisenstein classes on the characteristic-q fibre
ModularCurve.eq_zero_or_exists_eq_nsmul_of_heckePic0Fibre_eq_eisenstein_of_heckeOperatorModL_eq_of_smul_eq_neg316 below · depth 18 - Uₚ=-wₚ on Pic⁰ of the special fibre
ModularCurve.heckePic0Fibre_eq_neg_fricke_smul_of_prime981 below · depth 18 - Frobenius and Uₚ on the toric part of J₀(N₀p)[pⁿ]
ModularCurve.jZeroNeronObjectAtP_smul_mem_toricPts_and_heckeGen_smul_eq_of_isFrobeniusAt_of_bridge1,998 below · depth 18 - Frobenius and Uₚ on prime-to-p toric torsion
ModularCurve.jZeroNeronObjectAtP_smul_mem_toricPts_and_heckeGen_smul_eq_and_smul_heckeGen_eq_of_isFrobeniusAt_of_ne1,993 below · depth 19 - Canonical identification J₁(M)≅ J_{Γ_bot}(M) over ℚ̄
ModularCurve.pic0Congr_jOne_jH_bot_compat0 below · depth 19 - Fricke twist of δ lands in 𝔪-torsion differentials
ModularCurve.pullbackAlong_apply_mem_mTorsionDiffOf_of_mem_heckeTorsion_jZero_of_coe_eq_reductionModL1,021 below · depth 19 - Serre's dlog sends Frobenius to Uₚ on q-expansions
ModularCurve.qExpansionDiffAlong_apply_eq_heckeU_of_congr_coe_eq_frobeniusPushforwardModL147 below · depth 20 - Transport of a p-torsion dlog datum along equal subfields
ModularCurve.exists_addMonoidHom_torsion_recipe_qExpansionDiffAlong_congr_eq2 below · depth 21 - Node-unit Poincaré bundle puts a special-fibre class in the toric part
ModularCurve.JHNeronObjectAtP.ptsSp_symm_schemeHomOverComp_mem_range_nodeUnit_of_isNodeUnitModule_poincare_pullbackAlong1,672 below · depth 26