A field-valued point padded with copies of the basepoint is an actual effective divisor with the expected point-minus-basepoint normalized bundle.
Source context 12 commands
Surrounding namespaces, section variables, and local commands at this declaration.
noncomputable section
universe u
open CategoryTheory CategoryTheory.Limits CategoryTheory.MonoidalCategory
open AlgebraicGeometry AlgebraicGeometry.RelPicard NeronModelInfra
open GoodReductionJacobian
open AlgebraicCurves.RelativeDivisors.Proofs
open RelEffCartierDiv_IsUniversal_exists_sumMap.AlgebraicGeometry
open AlgebraicGeometry.RelPicard.Scheme.IdealSheafData.IsInvertible
open JacobianVarieties.Picard.Proofs
open Nonempty_invModule_prodKerGraph_tensor_module_pow_iso_pointsSubBasepointModule
open AlgebraicGeometry.RelPicard.TensorList
namespace JacobianVarieties.Albanesetheorem exists_padded_divisor_twist_iso_of_fieldMap
{K : Type u} [Field K] {C : Scheme.{u}}
(c : C ⟶ Spec (CommRingCat.of K)) [IsSeparated c]
[SmoothOfRelativeDimension 1 c]
(ε : SchemeHomOver (𝟙 (Spec (CommRingCat.of K))) c)
(L : Type u) [Field L] (s : Spec (CommRingCat.of L) ⟶ Spec (CommRingCat.of K))
(x : SchemeHomOver s c) (n : ℕ) :
let ζ : SchemeHomOver s c :=
⟨s ≫ ε.1, by rw [Category.assoc, ε.2, Category.comp_id]⟩
let points : Fin (n + 1) → SchemeHomOver s c := Fin.cons x (fun _ => ζ)
∃ D : RelEffCartierDiv c (n + 1) s,
D.I = prodKerGraph c (fun i => (points i).1) (fun i => (points i).2) ∧
Nonempty (D.twistModule c ε ≅
(RelEffCartierDiv.ofPoint c x.1 x.2).lineBundle ⊗
(RelEffCartierDiv.ofPoint c ζ.1 ζ.2).idealModule) := by
intro ζ points
obtain ⟨D, hD⟩ := RelEffCartierDiv.exists_I_eq_prodKerGraph
(fun i => (points i).1) (fun i => (points i).2)
refine ⟨D, hD, ?_⟩
let Ix := (RelEffCartierDiv.ofPoint c x.1 x.2).I
let Iε := (RelEffCartierDiv.ofPoint c ζ.1 ζ.2).I
have hxI : Ix.IsInvertible := (RelEffCartierDiv.ofPoint c x.1 x.2).isInvertible_I
have hεI : Iε.IsInvertible := (RelEffCartierDiv.ofPoint c ζ.1 ζ.2).isInvertible_I
have hpI : (Iε ^ n).IsInvertible := hεI.pow n
have hsection : sectionIdeal c ε s = Iε := rfl
have hsI : (sectionIdeal c ε s).IsInvertible := by
rw [hsection]
exact hεI
have hprod : D.I = Ix * Iε ^ n := by
rw [hD, prodKerGraph_eq_prod, Fin.prod_univ_succ]
simp only [points, Fin.cons_zero, Fin.cons_succ]
change Ix * (∏ _ : Fin n, Iε) = Ix * Iε ^ n
rw [Finset.prod_const, Finset.card_univ, Fintype.card_fin]
let M := D.lineBundle ⊗ (sectionIdeal c ε s ^ (n + 1)).module
have hM : Scheme.Modules.IsInvertible M :=
D.isInvertible_I.isInvertible_invModule.tensor
(hsI.pow (n + 1)).isInvertible_module
obtain ⟨e₀⟩ := Scheme.Modules.IsInvertible.nonempty_iso_tensorUnit_of_isLocalRing
(hM.pullback (rigSection c s ε)).dual.1
let e₁ : D.twistModule c ε ≅ M :=
(Iso.refl M ⊗ᵢ ((Scheme.Modules.pullback (pullback.snd c s)).mapIso e₀ ≪≫
Scheme.Modules.pullbackUnitIso _)) ≪≫ ρ_ M
obtain ⟨e₂⟩ :=
AlgebraicGeometry.Scheme.IdealSheafData.IsInvertible.nonempty_mul_invModule_iso_tensor
hxI hpI
obtain ⟨e₃⟩ :=
AlgebraicGeometry.Scheme.IdealSheafData.IsInvertible.nonempty_mul_module_iso_tensor
hεI hpI
obtain ⟨e₄⟩ := nonempty_invModule_tensor_module_iso hpI
have hM' : M = (Ix * Iε ^ n).invModule ⊗ (Iε * Iε ^ n).module := by
change D.I.invModule ⊗ _ = _
rw [hprod, hsection, pow_succ']
exact ⟨e₁ ≪≫ eqToIso hM' ≪≫ (e₂ ⊗ᵢ e₃) ≪≫ shuffle _ _ _ _ ≪≫
(Iso.refl _ ⊗ᵢ e₄) ≪≫ ρ_ _⟩