Definitions/Def_AlgebraicGeometry_RelEffCartierDivSum.lean
Fibre powers and ideal sheaves of sums of points
Fix a morphism of schemes f \colon \mathcal{C} \to S. For r : \mathbb{N}, fibrePowOver f r is the wide pullback of r copies of f indexed by Fin r, i.e. the r-fold fibre power \mathcal{C}\times_S\cdots\times_S\mathcal{C}, equipped with its projections proj f r i to \mathcal{C} and its structure morphism toBase f r to S; proj_comp records that proj f r i followed by f is toBase f r. For g \colon T \to S and a family a \colon \mathrm{Fin}\,r \to (T \to \mathcal{C}) with a_i followed by f equal to g, prodKerGraph f a ha is the ideal sheaf datum on \mathcal{C}\times_S T given by the product \prod_{i} \ker(\Gamma_{a_i}) of the kernel ideal sheaves of the graph morphisms \Gamma_{a_i} = (a_i,\mathrm{id}_T) (graphOver). This is a product, not an intersection: accompanying lemmas give the value \top for r = 0, the single kernel for r = 1, the recursion \ker(\Gamma_{a_0})\cdot\prod_{i\ge 1}\ker(\Gamma_{a_i}), invariance under a permutation of the index set, and, on each affine open of \mathcal{C}\times_S T, the product of the corresponding ideals. SameDivisor f a ha b hb is the predicate that two such families have equal prodKerGraph; it is shown reflexive, symmetric, transitive and invariant under permuting one family.
The degree-zero case is settled: a morphism out of an empty scheme has finrank zero at every point, so the unit ideal sheaf \top defines RelEffCartierDiv.empty f g, an element of RelEffCartierDiv f 0 g; conversely any D of degree 0 has D.I = \top, whence RelEffCartierDiv f 0 g is a subsingleton and every member equals RelEffCartierDiv.empty f g. Finally, fibrePowOver.tautIdeal f r is prodKerGraph applied to the tautological family of projections of the fibre power, an ideal sheaf datum on \mathcal{C}\times_S \mathcal{C}^r_S, and for c \colon C \to \operatorname{Spec} k over a field the fibre power, its projections and base morphism coincide with finFibrePow c r and its data, with tautIdeal expressed as the product of the kernels of the corresponding lifts.
Relation to Mathlib
Built on Mathlib's wide pullbacks, Scheme.IdealSheafData, kernel ideal sheaves of morphisms and Scheme.Hom.finrank; the relative effective divisor structure RelEffCartierDiv, the divisor ideal of a tuple of points and the SameDivisor relation are the project's own notions, Mathlib having no relative effective Cartier divisors.
Where it is used
This is the vocabulary for sums of points on a family of curves: the fibre power parametrises unordered r-tuples of points before passing to the symmetric power, prodKerGraph is the ideal of the divisor a_0+\cdots+a_{r-1} counted with multiplicity, and SameDivisor is the relation whose quotient is the functor of relative effective divisors of degree r. These feed the construction of symmetric powers and universal divisors of curves used in the geometry of modular curves.
References
- N. M. Katz and B. Mazur, Arithmetic Moduli of Elliptic Curves, Annals of Mathematics Studies 108, Princeton University Press, 1985, §1 (relative effective Cartier divisors)
References are suggested automatically and have not been individually verified.
English text generated automatically from the Lean source; the Lean statement is authoritative.
- 184 lines
- 29 declarations
- used in the statements of 42 theorems and imported by 62 proofs
- imports 2 definition modules
Source file: Definitions/Def_AlgebraicGeometry_RelEffCartierDivSum.lean
Declarations
- abbrev
AlgebraicGeometry.fibrePowOver - abbrev
AlgebraicGeometry.fibrePowOver.proj - abbrev
AlgebraicGeometry.fibrePowOver.toBase - theorem
AlgebraicGeometry.fibrePowOver.proj_comp - def
AlgebraicGeometry.prodKerGraph - theorem
AlgebraicGeometry.prodKerGraph_eq_prod - theorem
AlgebraicGeometry.prodKerGraph_zero - theorem
AlgebraicGeometry.prodKerGraph_one - theorem
AlgebraicGeometry.prodKerGraph_succ - theorem
AlgebraicGeometry.prodKerGraph_comp_equiv - theorem
AlgebraicGeometry.ideal_prodKerGraph - def
AlgebraicGeometry.SameDivisor - theorem
AlgebraicGeometry.SameDivisor.iff - theorem
AlgebraicGeometry.SameDivisor.refl - theorem
AlgebraicGeometry.SameDivisor.rfl - theorem
AlgebraicGeometry.SameDivisor.symm - theorem
AlgebraicGeometry.SameDivisor.trans - theorem
AlgebraicGeometry.SameDivisor.comp_equiv - theorem
AlgebraicGeometry.Scheme.Hom.finrank_eq_zero_of_isEmpty - def
AlgebraicGeometry.RelEffCartierDiv.empty - theorem
AlgebraicGeometry.RelEffCartierDiv.empty_I - theorem
AlgebraicGeometry.RelEffCartierDiv.I_eq_top_of_degree_zero - instance
AlgebraicGeometry.RelEffCartierDiv.subsingleton_of_degree_zero - theorem
AlgebraicGeometry.RelEffCartierDiv.eq_empty - abbrev
AlgebraicGeometry.fibrePowOver.tautIdeal - theorem
AlgebraicGeometry.fibrePowOver_eq_finFibrePow - theorem
AlgebraicGeometry.fibrePowOver.proj_eq_finFibrePow_proj - theorem
AlgebraicGeometry.fibrePowOver.toBase_eq_finFibrePow_toBase - theorem
AlgebraicGeometry.fibrePowOver.tautIdeal_eq_prod_ker_lift
Source
import Mathlib.AlgebraicGeometry.Limits ↗ import Definitions.Def_AlgebraicGeometry_RelEffCartierDivOfPoint import Definitions.Def_AlgebraicCurve_SymmetricPower set_option autoImplicit false open CategoryTheory CategoryTheory.Limits universe u namespace AlgebraicGeometry variable {𝒞 S : Scheme.{u}} (f : 𝒞 ⟶ S) (r : ℕ) noncomputable abbrev fibrePowOver : Scheme.{u} := widePullback S (fun _ : Fin r => 𝒞) (fun _ => f) namespace fibrePowOver noncomputable abbrev proj (i : Fin r) : fibrePowOver f r ⟶ 𝒞 := WidePullback.π (fun _ : Fin r => f) i noncomputable abbrev toBase : fibrePowOver f r ⟶ S := WidePullback.base (fun _ : Fin r => f) @[reassoc (attr := simp)] theorem proj_comp (i : Fin r) : proj f r i ≫ f = toBase f r := WidePullback.π_arrow _ _ end fibrePowOver variable {r} {T : Scheme.{u}} {g : T ⟶ S} noncomputable def prodKerGraph (a : Fin r → (T ⟶ 𝒞)) (ha : ∀ i, a i ≫ f = g) : (pullback f g).IdealSheafData := ∏ i, (graphOver f (a i) (ha i)).ker theorem prodKerGraph_eq_prod (a : Fin r → (T ⟶ 𝒞)) (ha : ∀ i, a i ≫ f = g) : prodKerGraph f a ha = ∏ i, (graphOver f (a i) (ha i)).ker := rfl @[simp] theorem prodKerGraph_zero (a : Fin 0 → (T ⟶ 𝒞)) (ha : ∀ i, a i ≫ f = g) : prodKerGraph f a ha = ⊤ := by simp [prodKerGraph] @[simp] theorem prodKerGraph_one (a : Fin 1 → (T ⟶ 𝒞)) (ha : ∀ i, a i ≫ f = g) : prodKerGraph f a ha = (graphOver f (a 0) (ha 0)).ker := by simp [prodKerGraph] theorem prodKerGraph_succ (a : Fin (r + 1) → (T ⟶ 𝒞)) (ha : ∀ i, a i ≫ f = g) : prodKerGraph f a ha = (graphOver f (a 0) (ha 0)).ker * prodKerGraph f (fun i => a i.succ) (fun i => ha i.succ) := by simp [prodKerGraph, Fin.prod_univ_succ] theorem prodKerGraph_comp_equiv (σ : Equiv.Perm (Fin r)) (a : Fin r → (T ⟶ 𝒞)) (ha : ∀ i, a i ≫ f = g) : prodKerGraph f (fun i => a (σ i)) (fun i => ha (σ i)) = prodKerGraph f a ha := Equiv.prod_comp σ (fun i => (graphOver f (a i) (ha i)).ker) theorem ideal_prodKerGraph (a : Fin r → (T ⟶ 𝒞)) (ha : ∀ i, a i ≫ f = g) (U : (pullback f g).affineOpens) : (prodKerGraph f a ha).ideal U = ∏ i, (graphOver f (a i) (ha i)).ker.ideal U := by classical unfold prodKerGraph induction (Finset.univ : Finset (Fin r)) using Finset.cons_induction with | empty => simp [Ideal.one_eq_top] | cons i s hi ih => rw [Finset.prod_cons, Finset.prod_cons, ← ih]; rfl def SameDivisor (a : Fin r → (T ⟶ 𝒞)) (ha : ∀ i, a i ≫ f = g) (b : Fin r → (T ⟶ 𝒞)) (hb : ∀ i, b i ≫ f = g) : Prop := prodKerGraph f a ha = prodKerGraph f b hb namespace SameDivisor variable {f} theorem iff {a : Fin r → (T ⟶ 𝒞)} {ha : ∀ i, a i ≫ f = g} {b : Fin r → (T ⟶ 𝒞)} {hb : ∀ i, b i ≫ f = g} : SameDivisor f a ha b hb ↔ prodKerGraph f a ha = prodKerGraph f b hb := Iff.rfl theorem refl (a : Fin r → (T ⟶ 𝒞)) (ha : ∀ i, a i ≫ f = g) : SameDivisor f a ha a ha := Eq.refl _ theorem rfl {a : Fin r → (T ⟶ 𝒞)} {ha : ∀ i, a i ≫ f = g} : SameDivisor f a ha a ha := Eq.refl _ theorem symm {a : Fin r → (T ⟶ 𝒞)} {ha : ∀ i, a i ≫ f = g} {b : Fin r → (T ⟶ 𝒞)} {hb : ∀ i, b i ≫ f = g} (h : SameDivisor f a ha b hb) : SameDivisor f b hb a ha := Eq.symm h theorem trans {a : Fin r → (T ⟶ 𝒞)} {ha : ∀ i, a i ≫ f = g} {b : Fin r → (T ⟶ 𝒞)} {hb : ∀ i, b i ≫ f = g} {c : Fin r → (T ⟶ 𝒞)} {hc : ∀ i, c i ≫ f = g} (h₁ : SameDivisor f a ha b hb) (h₂ : SameDivisor f b hb c hc) : SameDivisor f a ha c hc := Eq.trans h₁ h₂ theorem comp_equiv (σ : Equiv.Perm (Fin r)) (a : Fin r → (T ⟶ 𝒞)) (ha : ∀ i, a i ≫ f = g) : SameDivisor f (fun i => a (σ i)) (fun i => ha (σ i)) a ha := prodKerGraph_comp_equiv f σ a ha end SameDivisor section Empty theorem Scheme.Hom.finrank_eq_zero_of_isEmpty {X Y : Scheme.{u}} (π : X ⟶ Y) [IsEmpty X] (y : Y) : π.finrank y = 0 := by obtain ⟨R, i, _, y, rfl⟩ := Y.exists_Spec_apply_eq y rw [← Scheme.Hom.finrank_pullback_snd] have : IsEmpty ↥(pullback π i) := Function.isEmpty (pullback.fst π i) rw [← Scheme.Hom.finrank_comp_left_of_isIso (pullback π i).isoSpec.inv] obtain ⟨φ, hφ⟩ := Spec.map_surjective ((pullback π i).isoSpec.inv ≫ pullback.snd π i) have hfin : IsFinite (Spec.map φ) := by rw [hφ]; infer_instance have hflat : Flat (Spec.map φ) := by rw [hφ]; infer_instance rw [IsFinite.SpecMap_iff] at hfin rw [Flat.SpecMap_iff] at hflat rw [← hφ, Scheme.Hom.finrank_SpecMap_eq_finrank hfin hflat] algebraize [φ.hom] rw [← RingHom.algebraMap_toAlgebra φ.hom, RingHom.finrank_algebraMap] rw [Module.rankAtStalk_eq_zero_of_subsingleton] rfl noncomputable def RelEffCartierDiv.empty (g : T ⟶ S) : RelEffCartierDiv f 0 g where I := ⊤ isFinite := inferInstance flat := inferInstance locallyOfFinitePresentation := inferInstance finrank_eq t := Scheme.Hom.finrank_eq_zero_of_isEmpty _ t @[simp] theorem RelEffCartierDiv.empty_I (g : T ⟶ S) : (RelEffCartierDiv.empty f g).I = ⊤ := rfl variable {f} theorem RelEffCartierDiv.I_eq_top_of_degree_zero (D : RelEffCartierDiv f 0 g) : D.I = ⊤ := by have := D.isFinite have := D.flat have hempty : IsEmpty ↥D.I.subscheme := by by_contra h rw [not_isEmpty_iff] at h obtain ⟨x⟩ := h have h1 := Scheme.Hom.one_le_finrank_map (D.I.subschemeι ≫ pullback.snd f g) x rw [D.finrank_eq] at h1 exact Nat.not_succ_le_zero 0 h1 rw [← D.I.ker_subschemeι] exact Scheme.ker_eq_top_of_isEmpty _ instance RelEffCartierDiv.subsingleton_of_degree_zero : Subsingleton (RelEffCartierDiv f 0 g) := ⟨fun D E => RelEffCartierDiv.ext (by rw [D.I_eq_top_of_degree_zero, E.I_eq_top_of_degree_zero])⟩ theorem RelEffCartierDiv.eq_empty (D : RelEffCartierDiv f 0 g) : D = RelEffCartierDiv.empty f g := Subsingleton.elim _ _ end Empty namespace fibrePowOver variable (r) noncomputable abbrev tautIdeal : (pullback f (toBase f r)).IdealSheafData := prodKerGraph f (proj f r) (proj_comp f r) end fibrePowOver section FieldComparison variable {k : Type u} [Field k] {C : Scheme.{u}} (c : C ⟶ Spec (CommRingCat.of k)) (r : ℕ) theorem fibrePowOver_eq_finFibrePow : fibrePowOver c r = finFibrePow c r := rfl theorem fibrePowOver.proj_eq_finFibrePow_proj (i : Fin r) : fibrePowOver.proj c r i = finFibrePow.proj c r i := rfl theorem fibrePowOver.toBase_eq_finFibrePow_toBase : fibrePowOver.toBase c r = finFibrePow.toBase c r := rfl theorem fibrePowOver.tautIdeal_eq_prod_ker_lift : fibrePowOver.tautIdeal c r = ∏ i : Fin r, (pullback.lift (WidePullback.π (fun _ : Fin r => c) i) (𝟙 (finFibrePow c r)) (by rw [Category.id_comp]; exact WidePullback.π_arrow _ i)).ker := rfl end FieldComparison end AlgebraicGeometry
Statements phrased using this module (42)
- Sums of S-points are relative effective divisors of degree r
AlgebraicGeometry.RelEffCartierDiv.exists_I_eq_prodKerGraph7 below · depth 15 - Degree-r divisors over an algebraically closed field are sums of r points
AlgebraicGeometry.RelEffCartierDiv.exists_I_eq_prodKerGraph_of_isAlgClosed12 below · depth 15 - The divisor rε+r'z₀ over R and over A
AlgebraicGeometry.RelEffCartierDiv.exists_polarisation_pair_of_block28 below · depth 15 - Two-sided chart with vanishing H¹ and zeros inside U
AlgebraicGeometry.RelPicard.exists_chart_subsingleton_H1_and_support_subset_fibre_of_twoSidedBlocks_of_injective376 below · depth 15 - Openness of the algebraic-equivalence locus for 𝒪(D-E_T)
AlgebraicGeometry.RelPicard.exists_opens_range_subset_iff_isAlgEquivZero_rigidify_lineBundle_baseChange_of_twoGluedSmoothCurveDegenerations379 below · depth 15 - Block general position for the twist 𝒪(E_Ω)
AlgebraicGeometry.RelPicard.exists_split_injective_forall_subsingleton_H1_lineBundle_and_support_subset_of_twoSidedBlocks_of_bijective_sections366 below · depth 15 - Two-sided chart data: sections and chart divisors on C_A
AlgebraicGeometry.RelPicard.exists_twoSidedChartData13 below · depth 15 - Descent orbits on relative Pic⁰ lie in affine opens
AlgebraicGeometry.RelPicard.forall_exists_isAffineOpen_forall_act_mem_of_twoSidedBlocks_of_isInvertible25 below · depth 15 - Surjective finite-presentation half of Pic⁰ for two-glued-curve degenerations
AlgebraicGeometry.RelPicard.isLFPSurj_relSubPicPresheaf_algEquivZeroCut_baseChange_of_twoGluedSmoothCurveDegenerations398 below · depth 15 - Divisor of r points minus rε splits as a tensor product
AlgebraicGeometry.RelPicard.nonempty_invModule_prodKerGraph_tensor_module_pow_iso_pointsSubBasepointModule9 below · depth 15 - Sum map to a universal degree-r divisor is finite flat of rank r!
AlgebraicGeometry.RelEffCartierDiv.IsUniversal.exists_sumMap14 below · depth 16 - Finite étale block as a relative effective divisor of degree d
AlgebraicGeometry.RelEffCartierDiv.exists_I_eq_ker_lift_and_supportedIn_of_finite_etale0 below · depth 16 - Sums of points in the smooth locus give relative divisors
AlgebraicGeometry.RelEffCartierDiv.exists_I_eq_prodKerGraph_and_supportedIn11 below · depth 16 - Universal splitting cover of degree r! for a relative divisor
AlgebraicGeometry.RelEffCartierDiv.exists_split10 below · depth 16 - Geometric fibre of 𝒪(rε+r'W) in point-ideal form
AlgebraicGeometry.RelEffCartierDiv.nonempty_lineBundle_pullbackAlong_iso_invModule_pow_ker_mul_pow_prod_ker5 below · depth 16 - Milne charts cover Pic⁰: some chart kills H¹
AlgebraicGeometry.RelPicard.exists_chart_subsingleton_H1_fibre308 below · depth 16 - Chart divisors from a split pool of sections cover Pic⁰
AlgebraicGeometry.RelPicard.exists_chart_subsingleton_H1_fibre_of_blocks_of_injective413 below · depth 16 - Block general position for a split pool on geometric fibres
AlgebraicGeometry.RelPicard.exists_injective_forall_subsingleton_H1_of_blocks_of_pool_of_bijective_sections406 below · depth 16 - Openness of the algebraically-trivial locus for twisted divisor bundles
AlgebraicGeometry.RelPicard.exists_opens_range_subset_iff_isAlgEquivZero_twistModule_baseChange_of_twoLineDegenerations430 below · depth 16 - Two-sided block general position on the geometric fibres of a degenerating curve
AlgebraicGeometry.RelPicard.exists_split_injective_forall_subsingleton_H1_and_support_subset_of_twoSidedBlocks_of_bijective_sections358 below · depth 16 - Descent orbits of relative Pic⁰ points lie in affine charts
AlgebraicGeometry.RelPicard.forall_exists_isAffineOpen_forall_act_mem_of_blocks_of_isInvertible17 below · depth 16 - LFP-surjectivity of the base-changed Pic⁰ presheaf
AlgebraicGeometry.RelPicard.isLFPSurj_relSubPicPresheaf_algEquivZeroCut_baseChange_of_twoLineDegenerations440 below · depth 16 - Graph chart divisors lie on the ε-component of non-smooth fibres
AlgebraicGeometry.RelPicard.preimage_support_prodKerGraph_subset_connectedComponentIn_of_blocks0 below · depth 16 - Naturality of the graph-product ideal sheaf under base change
AlgebraicGeometry.prodKerGraph_comap_mapOnProdOver2 below · depth 16 - The empty divisor represents degree-zero relative divisors
AlgebraicGeometry.RelEffCartierDiv.isUniversal_empty0 below · depth 17 - Chart killing Čech H¹ on a non-smooth geometric fibre
AlgebraicGeometry.RelPicard.exists_chart_subsingleton_H1_fibre_of_blocks_of_not_smooth363 below · depth 17 - A chart divisor killing check H¹ on a smooth geometric fibre
AlgebraicGeometry.RelPicard.exists_forall_subsingleton_H1_sectionsOf_fibreModule_chartModule_of_smooth325 below · depth 17 - Same-divisor relation on the fibre power: finite flat of rank r!
AlgebraicGeometry.RelEffCartierDiv.exists_sameDivisorScheme15 below · depth 18 - Euler characteristic g+1 on the section component of a two-line fibre
AlgebraicGeometry.RelPicard.eulerChar_pullback_tensor_invModule_pow_ker_tensor_module_prod_ker_eq_of_twoLineDegeneration263 below · depth 18 - Global Drinfeld basis predicate equals relative one at id
WeierstrassCurve.DrinfeldGlobal.isDrinfeldBasis_iff_isDrinfeldBasisOver_id0 below · depth 29 - Drinfeld Γ(q)-level structures transport along changes of variables
WeierstrassCurve.DrinfeldGlobal.isLevel_act_of_comp_projMap_eq29 below · depth 30 - Drinfeld level-q structures descend along base change of pinned pairs
WeierstrassCurve.DrinfeldGlobal.isLevel_map_of_comp_projMap_eq32 below · depth 30 - q-torsion ideal sheaf transports along a cartesian square
WeierstrassProjModel.RelativeGroupLaw.comap_ker_schemeKer_eq_of_isPullback4 below · depth 31 - Graph-ideal product of [a]P+[b]Q transports along a cartesian square
WeierstrassProjModel.RelativeGroupLaw.comap_prodKerGraph_linComb_eq_of_isPullback5 below · depth 31 - A variable change commutes with the zero section [0:1:0]
WeierstrassProjModel.kwZeroSect_comp_projMap_of_isVariableChangeHom0 below · depth 31 - Both members of a global Drinfeld q-basis are q-torsion
WeierstrassCurve.DrinfeldGlobal.IsDrinfeldBasis.nsmul_eq_one_and_nsmul_eq_one3 below · depth 34 - Product of graph kernels under cartesian base change
AlgebraicGeometry.prodKerGraph_comap_fst_eq_prodKerGraph_comap_of_isPullback3 below · depth 35 - Equal principal ideals in T[[X]] force a unit multiple
PowerSeries.exists_isUnit_mul_eq_prod_X_sub_C_of_span_eq0 below · depth 36 - Graph of a section: kernel pulls back to the section's kernel
WeierstrassCurve.DrinfeldGlobal.comap_ker_graphOver_toPullbackId0 below · depth 36 - Sections reducing to the origin cut out prodᵢ (X - zᵢ)
WeierstrassCurve.DrinfeldGlobal.prodKerGraph_eq_ker_originChart_of_forall_reducesToOrigin21 below · depth 37 - Equal ranks of E[q] and the Drinfeld divisor
WeierstrassCurve.DrinfeldGlobal.isFinite_flat_and_finrank_basisDivisor_eq_finrank_torsionIdeal727 below · depth 42 - Invariance of the basis divisor under translation by Q
WeierstrassCurve.DrinfeldGlobal.basisDivisor_comap_pullback_lift_eq_of_nsmul_eq_one0 below · depth 43