Module

RelativeGroupLaw_exists_isGreatest_opens_difference_extension_of_dense.lean

Nyll.AlgebraicCurves.Geometry.AbelianSchemes.Theorems.RelativeGroupLaw_exists_isGreatest_opens_difference_extension_of_dense
23 declarations indexed from sourceView source ↗

Relative Group Law exists is Greatest opens difference extension of dense

Imports20
  • Mathlib.AlgebraicGeometry.Birational.RationalMap
  • Mathlib.AlgebraicGeometry.Morphisms.Smooth
  • Mathlib.AlgebraicGeometry.Morphisms.Separated
  • Mathlib.AlgebraicGeometry.Morphisms.UnderlyingMap
  • Mathlib.AlgebraicGeometry.Morphisms.UniversallyOpen
  • Mathlib.AlgebraicGeometry.Properties
  • Mathlib.AlgebraicGeometry.OpenImmersion
  • Mathlib.AlgebraicGeometry.Restrict
  • Mathlib.AlgebraicGeometry.Gluing
  • Mathlib.AlgebraicGeometry.Cover.MorphismProperty
  • Mathlib.AlgebraicGeometry.AffineScheme
  • Mathlib.RingTheory.IntegralClosure.IntegrallyClosed
  • Mathlib.Algebra.Ring.Equiv
  • Mathlib.Topology.Maps.Basic
  • Mathlib.Topology.Constructions
  • Mathlib.Topology.Neighborhoods
  • Mathlib.Tactic.Set
  • Nyll.AlgebraicCurves.Geometry.Schemes.SchemeHomOver
  • Nyll.AlgebraicCurves.Geometry.Picard.RelativeGroupLaw
  • Nyll.SchemeTheory.LocalGeometry.SmoothStalkNormality
Imported by2

Declarations

AlgebraicCurves.Geometry.AbelianSchemes.Theorems.Proofs.RelativeGroupLaw_exists_isGreatest_opens_difference_extension_of_dense.GoodReductionJacobian.RelativeGroupLaw.WeilExtField.DOM.isDomain_sections_spec
Source context 16 commands

Surrounding namespaces, section variables, and local commands at this declaration.

section ProofImplementation
namespace AlgebraicCurves.Geometry.AbelianSchemes.Theorems.Proofs
namespace RelativeGroupLaw_exists_isGreatest_opens_difference_extension_of_dense
universe u
open _root_.CategoryTheory
open _root_.CategoryTheory.Limits
open _root_.AlgebraicGeometry
open _root_.NeronModelInfra
open _root_.GoodReductionJacobian
noncomputable section
namespace GoodReductionJacobian
namespace RelativeGroupLaw
namespace WeilExtField
namespace DOM
open _root_.GoodReductionJacobian.RelativeGroupLaw
open _root_.GoodReductionJacobian
instance isDomain_sections_spec (k : Type u) [Field k] :
    IsDomain Γ(Spec (CommRingCat.of k), ⊤)
AlgebraicCurves.Geometry.AbelianSchemes.Theorems.Proofs.RelativeGroupLaw_exists_isGreatest_opens_difference_extension_of_dense.GoodReductionJacobian.RelativeGroupLaw.WeilExtField.DOM.isIntegrallyClosed_sections_spec
Source context 16 commands

Surrounding namespaces, section variables, and local commands at this declaration.

section ProofImplementation
namespace AlgebraicCurves.Geometry.AbelianSchemes.Theorems.Proofs
namespace RelativeGroupLaw_exists_isGreatest_opens_difference_extension_of_dense
universe u
open _root_.CategoryTheory
open _root_.CategoryTheory.Limits
open _root_.AlgebraicGeometry
open _root_.NeronModelInfra
open _root_.GoodReductionJacobian
noncomputable section
namespace GoodReductionJacobian
namespace RelativeGroupLaw
namespace WeilExtField
namespace DOM
open _root_.GoodReductionJacobian.RelativeGroupLaw
open _root_.GoodReductionJacobian
instance isIntegrallyClosed_sections_spec (k : Type u) [Field k] :
    IsIntegrallyClosed Γ(Spec (CommRingCat.of k), ⊤)
AlgebraicCurves.Geometry.AbelianSchemes.Theorems.Proofs.RelativeGroupLaw_exists_isGreatest_opens_difference_extension_of_dense.GoodReductionJacobian.RelativeGroupLaw.WeilExtField.DOM.isReduced_of_smooth
Source context 16 commands

Surrounding namespaces, section variables, and local commands at this declaration.

section ProofImplementation
namespace AlgebraicCurves.Geometry.AbelianSchemes.Theorems.Proofs
namespace RelativeGroupLaw_exists_isGreatest_opens_difference_extension_of_dense
universe u
open _root_.CategoryTheory
open _root_.CategoryTheory.Limits
open _root_.AlgebraicGeometry
open _root_.NeronModelInfra
open _root_.GoodReductionJacobian
noncomputable section
namespace GoodReductionJacobian
namespace RelativeGroupLaw
namespace WeilExtField
namespace DOM
open _root_.GoodReductionJacobian.RelativeGroupLaw
open _root_.GoodReductionJacobian
theorem isReduced_of_smooth (k : Type u) [Field k] {X : Scheme.{u}}
    (g : X ⟶ Spec (CommRingCat.of k)) [Smooth g] : IsReduced X
AlgebraicCurves.Geometry.AbelianSchemes.Theorems.Proofs.RelativeGroupLaw_exists_isGreatest_opens_difference_extension_of_dense.GoodReductionJacobian.RelativeGroupLaw.WeilExtField.DOM.eq_on_inf_of_eq_on_dense
Source context 16 commands

Surrounding namespaces, section variables, and local commands at this declaration.

section ProofImplementation
namespace AlgebraicCurves.Geometry.AbelianSchemes.Theorems.Proofs
namespace RelativeGroupLaw_exists_isGreatest_opens_difference_extension_of_dense
universe u
open _root_.CategoryTheory
open _root_.CategoryTheory.Limits
open _root_.AlgebraicGeometry
open _root_.NeronModelInfra
open _root_.GoodReductionJacobian
noncomputable section
namespace GoodReductionJacobian
namespace RelativeGroupLaw
namespace WeilExtField
namespace DOM
open _root_.GoodReductionJacobian.RelativeGroupLaw
open _root_.GoodReductionJacobian
theorem eq_on_inf_of_eq_on_dense {P A B : Scheme.{u}} (sP : P ⟶ B) (f : A ⟶ B) [IsSeparated f]
    [IsReduced P]
    (W₁ W₂ : P.Opens) (g₁ : ↑W₁ ⟶ A) (g₂ : ↑W₂ ⟶ A)
    (hg₁ : g₁ ≫ f = W₁.ι ≫ sP) (hg₂ : g₂ ≫ f = W₂.ι ≫ sP)
    (W₀ : P.Opens) (h₀ : W₀ ≤ W₁ ⊓ W₂)
    (hdense : ((W₁ ⊓ W₂ : P.Opens) : Set P) ⊆ closure (W₀ : Set P))
    (hagree : P.homOfLE (h₀.trans inf_le_left) ≫ g₁ = P.homOfLE (h₀.trans inf_le_right) ≫ g₂) :
    P.homOfLE (inf_le_left : W₁ ⊓ W₂ ≤ W₁) ≫ g₁ = P.homOfLE (inf_le_right : W₁ ⊓ W₂ ≤ W₂) ≫ g₂
AlgebraicCurves.Geometry.AbelianSchemes.Theorems.Proofs.RelativeGroupLaw_exists_isGreatest_opens_difference_extension_of_dense.GoodReductionJacobian.RelativeGroupLaw.WeilExtField.DOM.pullback_fst_comp_eq_of_eq_on_inf
Source context 16 commands

Surrounding namespaces, section variables, and local commands at this declaration.

section ProofImplementation
namespace AlgebraicCurves.Geometry.AbelianSchemes.Theorems.Proofs
namespace RelativeGroupLaw_exists_isGreatest_opens_difference_extension_of_dense
universe u
open _root_.CategoryTheory
open _root_.CategoryTheory.Limits
open _root_.AlgebraicGeometry
open _root_.NeronModelInfra
open _root_.GoodReductionJacobian
noncomputable section
namespace GoodReductionJacobian
namespace RelativeGroupLaw
namespace WeilExtField
namespace DOM
open _root_.GoodReductionJacobian.RelativeGroupLaw
open _root_.GoodReductionJacobian
theorem pullback_fst_comp_eq_of_eq_on_inf {P A : Scheme.{u}} (U U' Z : P.Opens) (eU : U ≤ Z) (eU' :
  U' ≤ Z)
    (gU : ↑U ⟶ A) (gU' : ↑U' ⟶ A)
    (hUU' : P.homOfLE (inf_le_left : U ⊓ U' ≤ U) ≫ gU = P.homOfLE (inf_le_right : U ⊓ U' ≤ U') ≫
      gU') :
    pullback.fst (P.homOfLE eU) (P.homOfLE eU') ≫ gU = pullback.snd (P.homOfLE eU) (P.homOfLE eU')
      ≫ gU'
AlgebraicCurves.Geometry.AbelianSchemes.Theorems.Proofs.RelativeGroupLaw_exists_isGreatest_opens_difference_extension_of_dense.GoodReductionJacobian.RelativeGroupLaw.WeilExtField.DOM.exists_glue_of_eq_on_dense
Source context 16 commands

Surrounding namespaces, section variables, and local commands at this declaration.

section ProofImplementation
namespace AlgebraicCurves.Geometry.AbelianSchemes.Theorems.Proofs
namespace RelativeGroupLaw_exists_isGreatest_opens_difference_extension_of_dense
universe u
open _root_.CategoryTheory
open _root_.CategoryTheory.Limits
open _root_.AlgebraicGeometry
open _root_.NeronModelInfra
open _root_.GoodReductionJacobian
noncomputable section
namespace GoodReductionJacobian
namespace RelativeGroupLaw
namespace WeilExtField
namespace DOM
open _root_.GoodReductionJacobian.RelativeGroupLaw
open _root_.GoodReductionJacobian
theorem exists_glue_of_eq_on_dense {P A B : Scheme.{u}} (sP : P ⟶ B) (f : A ⟶ B) [IsSeparated f]
    [IsReduced P]
    (W₁ W₂ : P.Opens) (g₁ : ↑W₁ ⟶ A) (g₂ : ↑W₂ ⟶ A)
    (hg₁ : g₁ ≫ f = W₁.ι ≫ sP) (hg₂ : g₂ ≫ f = W₂.ι ≫ sP)
    (W₀ : P.Opens) (h₀ : W₀ ≤ W₁ ⊓ W₂)
    (hdense : ((W₁ ⊓ W₂ : P.Opens) : Set P) ⊆ closure (W₀ : Set P))
    (hagree : P.homOfLE (h₀.trans inf_le_left) ≫ g₁ = P.homOfLE (h₀.trans inf_le_right) ≫ g₂) :
    ∃ g : ↑(W₁ ⊔ W₂) ⟶ A, P.homOfLE le_sup_left ≫ g = g₁ ∧ P.homOfLE le_sup_right ≫ g = g₂
AlgebraicCurves.Geometry.AbelianSchemes.Theorems.Proofs.RelativeGroupLaw_exists_isGreatest_opens_difference_extension_of_dense.GoodReductionJacobian.RelativeGroupLaw.WeilExtField.DOM.inv_natural
Source context 16 commands

Surrounding namespaces, section variables, and local commands at this declaration.

section ProofImplementation
namespace AlgebraicCurves.Geometry.AbelianSchemes.Theorems.Proofs
namespace RelativeGroupLaw_exists_isGreatest_opens_difference_extension_of_dense
universe u
open _root_.CategoryTheory
open _root_.CategoryTheory.Limits
open _root_.AlgebraicGeometry
open _root_.NeronModelInfra
open _root_.GoodReductionJacobian
noncomputable section
namespace GoodReductionJacobian
namespace RelativeGroupLaw
namespace WeilExtField
namespace DOM
open _root_.GoodReductionJacobian.RelativeGroupLaw
open _root_.GoodReductionJacobian
theorem inv_natural {R : Type u} [CommRing R] {A : Scheme.{u}} {f : A ⟶ Spec (CommRingCat.of R)}
    (G : RelativeGroupLaw R f) {T T' : Scheme.{u}}
    (t : T ⟶ Spec (CommRingCat.of R)) (t' : T' ⟶ Spec (CommRingCat.of R)) (ψ : T' ⟶ T) (hψ : ψ ≫ t
      = t')
    (x : SchemeHomOver t f) :
    schemeHomOverComp ψ hψ (G.inv t x) = G.inv t' (schemeHomOverComp ψ hψ x)
AlgebraicCurves.Geometry.AbelianSchemes.Theorems.Proofs.RelativeGroupLaw_exists_isGreatest_opens_difference_extension_of_dense.GoodReductionJacobian.RelativeGroupLaw.WeilExtField.DOM.prodOpen

The open part of the double fibre product where both coordinates lie in the chosen open.

Source context 18 commands

Surrounding namespaces, section variables, and local commands at this declaration.

section ProofImplementation
namespace AlgebraicCurves.Geometry.AbelianSchemes.Theorems.Proofs
namespace RelativeGroupLaw_exists_isGreatest_opens_difference_extension_of_dense
universe u
open _root_.CategoryTheory
open _root_.CategoryTheory.Limits
open _root_.AlgebraicGeometry
open _root_.NeronModelInfra
open _root_.GoodReductionJacobian
noncomputable section
namespace GoodReductionJacobian
namespace RelativeGroupLaw
namespace WeilExtField
namespace DOM
open _root_.GoodReductionJacobian.RelativeGroupLaw
open _root_.GoodReductionJacobian
section Main
variable {R : Type u} [CommRing R] {T : Scheme.{u}}
def prodOpen (t : T ⟶ Spec (CommRingCat.of R)) (V : T.Opens) : (pullback t t).Opens
AlgebraicCurves.Geometry.AbelianSchemes.Theorems.Proofs.RelativeGroupLaw_exists_isGreatest_opens_difference_extension_of_dense.GoodReductionJacobian.RelativeGroupLaw.WeilExtField.DOM.mem_prodOpen_iff
Source context 18 commands

Surrounding namespaces, section variables, and local commands at this declaration.

section ProofImplementation
namespace AlgebraicCurves.Geometry.AbelianSchemes.Theorems.Proofs
namespace RelativeGroupLaw_exists_isGreatest_opens_difference_extension_of_dense
universe u
open _root_.CategoryTheory
open _root_.CategoryTheory.Limits
open _root_.AlgebraicGeometry
open _root_.NeronModelInfra
open _root_.GoodReductionJacobian
noncomputable section
namespace GoodReductionJacobian
namespace RelativeGroupLaw
namespace WeilExtField
namespace DOM
open _root_.GoodReductionJacobian.RelativeGroupLaw
open _root_.GoodReductionJacobian
section Main
variable {R : Type u} [CommRing R] {T : Scheme.{u}}
theorem mem_prodOpen_iff (t : T ⟶ Spec (CommRingCat.of R)) (V : T.Opens) (p : ↑(pullback t t)) :
    p ∈ prodOpen t V ↔ (pullback.fst t t).base p ∈ V ∧ (pullback.snd t t).base p ∈ V
AlgebraicCurves.Geometry.AbelianSchemes.Theorems.Proofs.RelativeGroupLaw_exists_isGreatest_opens_difference_extension_of_dense.GoodReductionJacobian.RelativeGroupLaw.WeilExtField.DOM.prFst

The first projection from the restricted double fibre product to the open.

Source context 18 commands

Surrounding namespaces, section variables, and local commands at this declaration.

section ProofImplementation
namespace AlgebraicCurves.Geometry.AbelianSchemes.Theorems.Proofs
namespace RelativeGroupLaw_exists_isGreatest_opens_difference_extension_of_dense
universe u
open _root_.CategoryTheory
open _root_.CategoryTheory.Limits
open _root_.AlgebraicGeometry
open _root_.NeronModelInfra
open _root_.GoodReductionJacobian
noncomputable section
namespace GoodReductionJacobian
namespace RelativeGroupLaw
namespace WeilExtField
namespace DOM
open _root_.GoodReductionJacobian.RelativeGroupLaw
open _root_.GoodReductionJacobian
section Main
variable {R : Type u} [CommRing R] {T : Scheme.{u}}
def prFst (t : T ⟶ Spec (CommRingCat.of R)) (V : T.Opens) : (prodOpen t V).toScheme ⟶ V.toScheme
AlgebraicCurves.Geometry.AbelianSchemes.Theorems.Proofs.RelativeGroupLaw_exists_isGreatest_opens_difference_extension_of_dense.GoodReductionJacobian.RelativeGroupLaw.WeilExtField.DOM.prSnd

The second projection from the restricted double fibre product to the open.

Source context 18 commands

Surrounding namespaces, section variables, and local commands at this declaration.

section ProofImplementation
namespace AlgebraicCurves.Geometry.AbelianSchemes.Theorems.Proofs
namespace RelativeGroupLaw_exists_isGreatest_opens_difference_extension_of_dense
universe u
open _root_.CategoryTheory
open _root_.CategoryTheory.Limits
open _root_.AlgebraicGeometry
open _root_.NeronModelInfra
open _root_.GoodReductionJacobian
noncomputable section
namespace GoodReductionJacobian
namespace RelativeGroupLaw
namespace WeilExtField
namespace DOM
open _root_.GoodReductionJacobian.RelativeGroupLaw
open _root_.GoodReductionJacobian
section Main
variable {R : Type u} [CommRing R] {T : Scheme.{u}}
def prSnd (t : T ⟶ Spec (CommRingCat.of R)) (V : T.Opens) : (prodOpen t V).toScheme ⟶ V.toScheme
AlgebraicCurves.Geometry.AbelianSchemes.Theorems.Proofs.RelativeGroupLaw_exists_isGreatest_opens_difference_extension_of_dense.GoodReductionJacobian.RelativeGroupLaw.WeilExtField.DOM.bD_ι
Source context 18 commands

Surrounding namespaces, section variables, and local commands at this declaration.

section ProofImplementation
namespace AlgebraicCurves.Geometry.AbelianSchemes.Theorems.Proofs
namespace RelativeGroupLaw_exists_isGreatest_opens_difference_extension_of_dense
universe u
open _root_.CategoryTheory
open _root_.CategoryTheory.Limits
open _root_.AlgebraicGeometry
open _root_.NeronModelInfra
open _root_.GoodReductionJacobian
noncomputable section
namespace GoodReductionJacobian
namespace RelativeGroupLaw
namespace WeilExtField
namespace DOM
open _root_.GoodReductionJacobian.RelativeGroupLaw
open _root_.GoodReductionJacobian
section Main
variable {R : Type u} [CommRing R] {T : Scheme.{u}}
theorem bD_ι (t : T ⟶ Spec (CommRingCat.of R)) (V : T.Opens) :
    prFst t V ≫ V.ι = (prodOpen t V).ι ≫ pullback.fst t t
AlgebraicCurves.Geometry.AbelianSchemes.Theorems.Proofs.RelativeGroupLaw_exists_isGreatest_opens_difference_extension_of_dense.GoodReductionJacobian.RelativeGroupLaw.WeilExtField.DOM.cD_ι
Source context 18 commands

Surrounding namespaces, section variables, and local commands at this declaration.

section ProofImplementation
namespace AlgebraicCurves.Geometry.AbelianSchemes.Theorems.Proofs
namespace RelativeGroupLaw_exists_isGreatest_opens_difference_extension_of_dense
universe u
open _root_.CategoryTheory
open _root_.CategoryTheory.Limits
open _root_.AlgebraicGeometry
open _root_.NeronModelInfra
open _root_.GoodReductionJacobian
noncomputable section
namespace GoodReductionJacobian
namespace RelativeGroupLaw
namespace WeilExtField
namespace DOM
open _root_.GoodReductionJacobian.RelativeGroupLaw
open _root_.GoodReductionJacobian
section Main
variable {R : Type u} [CommRing R] {T : Scheme.{u}}
theorem cD_ι (t : T ⟶ Spec (CommRingCat.of R)) (V : T.Opens) :
    prSnd t V ≫ V.ι = (prodOpen t V).ι ≫ pullback.snd t t
AlgebraicCurves.Geometry.AbelianSchemes.Theorems.Proofs.RelativeGroupLaw_exists_isGreatest_opens_difference_extension_of_dense.GoodReductionJacobian.RelativeGroupLaw.WeilExtField.DOM.pt₁

The first-coordinate pullback of the given point to the restricted double fibre product.

Source context 19 commands

Surrounding namespaces, section variables, and local commands at this declaration.

section ProofImplementation
namespace AlgebraicCurves.Geometry.AbelianSchemes.Theorems.Proofs
namespace RelativeGroupLaw_exists_isGreatest_opens_difference_extension_of_dense
universe u
open _root_.CategoryTheory
open _root_.CategoryTheory.Limits
open _root_.AlgebraicGeometry
open _root_.NeronModelInfra
open _root_.GoodReductionJacobian
noncomputable section
namespace GoodReductionJacobian
namespace RelativeGroupLaw
namespace WeilExtField
namespace DOM
open _root_.GoodReductionJacobian.RelativeGroupLaw
open _root_.GoodReductionJacobian
section Main
variable {R : Type u} [CommRing R] {T : Scheme.{u}}
variable {A : Scheme.{u}} {f : A ⟶ Spec (CommRingCat.of R)}
def pt₁ (t : T ⟶ Spec (CommRingCat.of R)) (V : T.Opens) (v : SchemeHomOver (V.ι ≫ t) f) :
    SchemeHomOver ((prodOpen t V).ι ≫ pullback.fst t t ≫ t) f
AlgebraicCurves.Geometry.AbelianSchemes.Theorems.Proofs.RelativeGroupLaw_exists_isGreatest_opens_difference_extension_of_dense.GoodReductionJacobian.RelativeGroupLaw.WeilExtField.DOM.pt₂

The second-coordinate pullback of the given point to the restricted double fibre product.

Source context 19 commands

Surrounding namespaces, section variables, and local commands at this declaration.

section ProofImplementation
namespace AlgebraicCurves.Geometry.AbelianSchemes.Theorems.Proofs
namespace RelativeGroupLaw_exists_isGreatest_opens_difference_extension_of_dense
universe u
open _root_.CategoryTheory
open _root_.CategoryTheory.Limits
open _root_.AlgebraicGeometry
open _root_.NeronModelInfra
open _root_.GoodReductionJacobian
noncomputable section
namespace GoodReductionJacobian
namespace RelativeGroupLaw
namespace WeilExtField
namespace DOM
open _root_.GoodReductionJacobian.RelativeGroupLaw
open _root_.GoodReductionJacobian
section Main
variable {R : Type u} [CommRing R] {T : Scheme.{u}}
variable {A : Scheme.{u}} {f : A ⟶ Spec (CommRingCat.of R)}
def pt₂ (t : T ⟶ Spec (CommRingCat.of R)) (V : T.Opens) (v : SchemeHomOver (V.ι ≫ t) f) :
    SchemeHomOver ((prodOpen t V).ι ≫ pullback.fst t t ≫ t) f
AlgebraicCurves.Geometry.AbelianSchemes.Theorems.Proofs.RelativeGroupLaw_exists_isGreatest_opens_difference_extension_of_dense.GoodReductionJacobian.RelativeGroupLaw.WeilExtField.DOM.diffMap

The difference of the two pulled-back points on the restricted double fibre product.

Source context 19 commands

Surrounding namespaces, section variables, and local commands at this declaration.

section ProofImplementation
namespace AlgebraicCurves.Geometry.AbelianSchemes.Theorems.Proofs
namespace RelativeGroupLaw_exists_isGreatest_opens_difference_extension_of_dense
universe u
open _root_.CategoryTheory
open _root_.CategoryTheory.Limits
open _root_.AlgebraicGeometry
open _root_.NeronModelInfra
open _root_.GoodReductionJacobian
noncomputable section
namespace GoodReductionJacobian
namespace RelativeGroupLaw
namespace WeilExtField
namespace DOM
open _root_.GoodReductionJacobian.RelativeGroupLaw
open _root_.GoodReductionJacobian
section Main
variable {R : Type u} [CommRing R] {T : Scheme.{u}}
variable {A : Scheme.{u}} {f : A ⟶ Spec (CommRingCat.of R)}
def diffMap (G : RelativeGroupLaw R f) (t : T ⟶ Spec (CommRingCat.of R)) (V : T.Opens)
    (v : SchemeHomOver (V.ι ≫ t) f) : SchemeHomOver ((prodOpen t V).ι ≫ pullback.fst t t ≫ t) f
AlgebraicCurves.Geometry.AbelianSchemes.Theorems.Proofs.RelativeGroupLaw_exists_isGreatest_opens_difference_extension_of_dense.GoodReductionJacobian.RelativeGroupLaw.WeilExtField.DOM.recovery_core
Source context 19 commands

Surrounding namespaces, section variables, and local commands at this declaration.

section ProofImplementation
namespace AlgebraicCurves.Geometry.AbelianSchemes.Theorems.Proofs
namespace RelativeGroupLaw_exists_isGreatest_opens_difference_extension_of_dense
universe u
open _root_.CategoryTheory
open _root_.CategoryTheory.Limits
open _root_.AlgebraicGeometry
open _root_.NeronModelInfra
open _root_.GoodReductionJacobian
noncomputable section
namespace GoodReductionJacobian
namespace RelativeGroupLaw
namespace WeilExtField
namespace DOM
open _root_.GoodReductionJacobian.RelativeGroupLaw
open _root_.GoodReductionJacobian
section Main
variable {R : Type u} [CommRing R] {T : Scheme.{u}}
variable {A : Scheme.{u}} {f : A ⟶ Spec (CommRingCat.of R)}
theorem recovery_core (G : RelativeGroupLaw R f) (t : T ⟶ Spec (CommRingCat.of R)) (V : T.Opens)
    (v : SchemeHomOver (V.ι ≫ t) f)
    {S : Scheme.{u}} (g : S ⟶ Spec (CommRingCat.of R)) (x y z : SchemeHomOver g f)
    (a' : S ⟶ (prodOpen t V).toScheme) (b c : S ⟶ V.toScheme)
    (hg : g = a' ≫ (prodOpen t V).ι ≫ pullback.fst t t ≫ t)
    (hx : x.1 = a' ≫ (diffMap G t V v).1) (hy : y.1 = c ≫ v.1) (hz : z.1 = b ≫ v.1)
    (hb : a' ≫ prFst t V = b) (hc : a' ≫ prSnd t V = c) :
    G.mul g x y = z
AlgebraicCurves.Geometry.AbelianSchemes.Theorems.Proofs.RelativeGroupLaw_exists_isGreatest_opens_difference_extension_of_dense.GoodReductionJacobian.RelativeGroupLaw.WeilExtField.DOM.dense_prodOpen
Source context 18 commands

Surrounding namespaces, section variables, and local commands at this declaration.

section ProofImplementation
namespace AlgebraicCurves.Geometry.AbelianSchemes.Theorems.Proofs
namespace RelativeGroupLaw_exists_isGreatest_opens_difference_extension_of_dense
universe u
open _root_.CategoryTheory
open _root_.CategoryTheory.Limits
open _root_.AlgebraicGeometry
open _root_.NeronModelInfra
open _root_.GoodReductionJacobian
noncomputable section
namespace GoodReductionJacobian
namespace RelativeGroupLaw
namespace WeilExtField
namespace DOM
open _root_.GoodReductionJacobian.RelativeGroupLaw
open _root_.GoodReductionJacobian
section Main2
variable {k : Type u} [Field k] {T : Scheme.{u}}
theorem dense_prodOpen (t : T ⟶ Spec (CommRingCat.of k)) [UniversallyOpen t] (V : T.Opens)
    (hV : Dense (V : Set T)) :
    Dense ((prodOpen t V : (pullback t t).Opens) : Set ↑(pullback t t))
AlgebraicCurves.Geometry.AbelianSchemes.Theorems.Proofs.RelativeGroupLaw_exists_isGreatest_opens_difference_extension_of_dense.GoodReductionJacobian.RelativeGroupLaw.WeilExtField.DOM.isReduced_pullback
Source context 18 commands

Surrounding namespaces, section variables, and local commands at this declaration.

section ProofImplementation
namespace AlgebraicCurves.Geometry.AbelianSchemes.Theorems.Proofs
namespace RelativeGroupLaw_exists_isGreatest_opens_difference_extension_of_dense
universe u
open _root_.CategoryTheory
open _root_.CategoryTheory.Limits
open _root_.AlgebraicGeometry
open _root_.NeronModelInfra
open _root_.GoodReductionJacobian
noncomputable section
namespace GoodReductionJacobian
namespace RelativeGroupLaw
namespace WeilExtField
namespace DOM
open _root_.GoodReductionJacobian.RelativeGroupLaw
open _root_.GoodReductionJacobian
section Main2
variable {k : Type u} [Field k] {T : Scheme.{u}}
theorem isReduced_pullback (t : T ⟶ Spec (CommRingCat.of k)) [Smooth t] : IsReduced (pullback t t)
AlgebraicCurves.Geometry.AbelianSchemes.Theorems.Proofs.RelativeGroupLaw_exists_isGreatest_opens_difference_extension_of_dense.GoodReductionJacobian.RelativeGroupLaw.WeilExtField.DOM.isSeparated_of_isSeparated_over
Source context 20 commands

Surrounding namespaces, section variables, and local commands at this declaration.

section ProofImplementation
namespace AlgebraicCurves.Geometry.AbelianSchemes.Theorems.Proofs
namespace RelativeGroupLaw_exists_isGreatest_opens_difference_extension_of_dense
universe u
open _root_.CategoryTheory
open _root_.CategoryTheory.Limits
open _root_.AlgebraicGeometry
open _root_.NeronModelInfra
open _root_.GoodReductionJacobian
noncomputable section
namespace GoodReductionJacobian
namespace RelativeGroupLaw
namespace WeilExtField
namespace DOM
open _root_.GoodReductionJacobian.RelativeGroupLaw
open _root_.GoodReductionJacobian
section Main2
variable {k : Type u} [Field k] {T : Scheme.{u}}
variable {A : Scheme.{u}} {f : A ⟶ Spec (CommRingCat.of k)}
omit [Field k] in
theorem isSeparated_of_isSeparated_over [CommRing k] (f : A ⟶ Spec (CommRingCat.of k)) [IsSeparated
  f] :
    A.IsSeparated
AlgebraicCurves.Geometry.AbelianSchemes.Theorems.Proofs.RelativeGroupLaw_exists_isGreatest_opens_difference_extension_of_dense.GoodReductionJacobian.RelativeGroupLaw.WeilExtField.DOM.mem_opens_of_base
Source context 20 commands

Surrounding namespaces, section variables, and local commands at this declaration.

section ProofImplementation
namespace AlgebraicCurves.Geometry.AbelianSchemes.Theorems.Proofs
namespace RelativeGroupLaw_exists_isGreatest_opens_difference_extension_of_dense
universe u
open _root_.CategoryTheory
open _root_.CategoryTheory.Limits
open _root_.AlgebraicGeometry
open _root_.NeronModelInfra
open _root_.GoodReductionJacobian
noncomputable section
namespace GoodReductionJacobian
namespace RelativeGroupLaw
namespace WeilExtField
namespace DOM
open _root_.GoodReductionJacobian.RelativeGroupLaw
open _root_.GoodReductionJacobian
section Main2
variable {k : Type u} [Field k] {T : Scheme.{u}}
variable {A : Scheme.{u}} {f : A ⟶ Spec (CommRingCat.of k)}
omit [Field k] in
theorem mem_opens_of_base {X : Scheme.{u}} (U : X.Opens) (y : ↑U) : U.ι.base y ∈ U
AlgebraicCurves.Geometry.AbelianSchemes.Theorems.Proofs.RelativeGroupLaw_exists_isGreatest_opens_difference_extension_of_dense.GoodReductionJacobian.RelativeGroupLaw.WeilExtField.DOM.main
Source context 19 commands

Surrounding namespaces, section variables, and local commands at this declaration.

section ProofImplementation
namespace AlgebraicCurves.Geometry.AbelianSchemes.Theorems.Proofs
namespace RelativeGroupLaw_exists_isGreatest_opens_difference_extension_of_dense
universe u
open _root_.CategoryTheory
open _root_.CategoryTheory.Limits
open _root_.AlgebraicGeometry
open _root_.NeronModelInfra
open _root_.GoodReductionJacobian
noncomputable section
namespace GoodReductionJacobian
namespace RelativeGroupLaw
namespace WeilExtField
namespace DOM
open _root_.GoodReductionJacobian.RelativeGroupLaw
open _root_.GoodReductionJacobian
section Main2
variable {k : Type u} [Field k] {T : Scheme.{u}}
variable {A : Scheme.{u}} {f : A ⟶ Spec (CommRingCat.of k)}
theorem main (G : RelativeGroupLaw k f) [IsSeparated f]
    (t : T ⟶ Spec (CommRingCat.of k)) [Smooth t]
    (V : T.Opens) (hV : Dense (V : Set T))
    (v : SchemeHomOver (V.ι ≫ t) f) :
    ∃ (W : (pullback t t).Opens) (d : SchemeHomOver (W.ι ≫ pullback.fst t t ≫ t) f),
      (∀ p : ↑(pullback t t), (pullback.fst t t).base p ∈ V → (pullback.snd t t).base p ∈ V → p ∈
        W) ∧
      (∀ (S : Scheme.{u}) (a : S ⟶ ↑W) (b c : S ⟶ ↑V)
        (hb : a ≫ W.ι ≫ pullback.fst t t = b ≫ V.ι) (hc : a ≫ W.ι ≫ pullback.snd t t = c ≫ V.ι),
        G.mul (a ≫ W.ι ≫ pullback.fst t t ≫ t)
            ⟨a ≫ d.1, by rw [Category.assoc, d.2]⟩
            ⟨c ≫ v.1, by rw [Category.assoc, v.2, ← Category.assoc, ← hc, Category.assoc,
              Category.assoc,
              ← pullback.condition]⟩ =
          ⟨b ≫ v.1, by rw [Category.assoc, v.2, ← Category.assoc, ← hb, Category.assoc,
            Category.assoc]⟩) ∧
      (∀ (W' : (pullback t t).Opens) (d' : SchemeHomOver (W'.ι ≫ pullback.fst t t ≫ t) f)
        (W₀ : (pullback t t).Opens) (h₀ : W₀ ≤ W ⊓ W'),
        ((W' : Set ↑(pullback t t)) ⊆ closure (W₀ : Set ↑(pullback t t))) →
        (pullback t t).homOfLE (h₀.trans inf_le_left) ≫ d.1 =
          (pullback t t).homOfLE (h₀.trans inf_le_right) ≫ d'.1 →
        W' ≤ W ∧ ∀ (S : Scheme.{u}) (a' : S ⟶ ↑W') (a : S ⟶ ↑W), a' ≫ W'.ι = a ≫ W.ι →
          a' ≫ d'.1 = a ≫ d.1) := by
  have : IsReduced (pullback t t) := isReduced_pullback t
  have : A.IsSeparated := isSeparated_of_isSeparated_over f
  let : (pullback t t).Over (Spec (CommRingCat.of k)) := ⟨pullback.fst t t ≫ t⟩
  let : A.Over (Spec (CommRingCat.of k)) := ⟨f⟩
  have hDd : Dense ((prodOpen t V : (pullback t t).Opens) : Set ↑(pullback t t)) := dense_prodOpen
    t V hV
  let pΦ : (pullback t t).PartialMap A := ⟨prodOpen t V, hDd, (diffMap G t V v).1⟩
  have hpΦ : pΦ.IsOver (Spec (CommRingCat.of k)) := by
    rw [Scheme.PartialMap.isOver_iff, Scheme.PartialMap.compHom_hom]
    exact (diffMap G t V v).2
  let u := pΦ.toRationalMap
  have hu : u.IsOver (Spec (CommRingCat.of k)) := ⟨⟨pΦ, hpΦ, rfl⟩⟩
  let dW := u.toPartialMap
  have hdWover : dW.IsOver (Spec (CommRingCat.of k)) :=
    Scheme.PartialMap.isOver_toRationalMap_iff_of_isSeparated.mp
      (by rw [Scheme.RationalMap.toRationalMap_toPartialMap]; exact hu)
  have hdW : dW.hom ≫ f = dW.domain.ι ≫ pullback.fst t t ≫ t := by
    have h := Scheme.PartialMap.isOver_iff.mp hdWover
    rwa [Scheme.PartialMap.compHom_hom] at h
  have hDW : prodOpen t V ≤ u.domain := pΦ.le_domain_toRationalMap
  have hres : (pullback t t).homOfLE hDW ≫ dW.hom = (diffMap G t V v).1 := by
    have h := Scheme.PartialMap.toPartialMap_toRationalMap_restrict pΦ
    erw [Scheme.PartialMap.restrict_hom] at h
    exact h
  refine ⟨u.domain, ⟨dW.hom, hdW⟩, ?_, ?_, ?_⟩
  · intro p h1 h2
    exact hDW (show p ∈ prodOpen t V from ⟨h1, h2⟩)
  · intro S a b c hb hc
    have hrange : Set.range (a ≫ u.domain.ι).base ⊆ Set.range (prodOpen t V).ι.base := by
      rintro _ ⟨s, rfl⟩
      rw [Scheme.Opens.range_ι]
      change (a ≫ u.domain.ι).base s ∈ prodOpen t V
      rw [mem_prodOpen_iff]
      constructor
      · have e : (pullback.fst t t).base (u.domain.ι.base (a.base s)) = V.ι.base (b.base s) := by
          have e0 := congrArg (fun k => k.base s) hb
          simpa using e0
        change (pullback.fst t t).base (u.domain.ι.base (a.base s)) ∈ V
        rw [e]; exact mem_opens_of_base V _
      · have e : (pullback.snd t t).base (u.domain.ι.base (a.base s)) = V.ι.base (c.base s) := by
          have e0 := congrArg (fun k => k.base s) hc
          simpa using e0
        change (pullback.snd t t).base (u.domain.ι.base (a.base s)) ∈ V
        rw [e]; exact mem_opens_of_base V _
    let a' := IsOpenImmersion.lift (prodOpen t V).ι (a ≫ u.domain.ι) hrange
    have ha' : a' ≫ (prodOpen t V).ι = a ≫ u.domain.ι := IsOpenImmersion.lift_fac _ _ _
    have haa : a' ≫ (pullback t t).homOfLE hDW = a := by
      rw [← cancel_mono u.domain.ι, Category.assoc, Scheme.homOfLE_ι, ha']
    refine recovery_core G t V v _ _ _ _ a' b c ?_ ?_ rfl rfl ?_ ?_
    · rw [← Category.assoc a', ha', Category.assoc]
    · change a ≫ dW.hom = a' ≫ (diffMap G t V v).1
      calc
        a ≫ dW.hom = (a' ≫ (pullback t t).homOfLE hDW) ≫ dW.hom :=
          congrArg (fun z : S ⟶ ↑u.domain => z ≫ dW.hom) haa.symm
        _ = a' ≫ ((pullback t t).homOfLE hDW ≫ dW.hom) := Category.assoc _ _ _
        _ = a' ≫ (diffMap G t V v).1 :=
          congrArg (fun z : ↑(prodOpen t V) ⟶ A => a' ≫ z) hres
    · rw [← cancel_mono V.ι, Category.assoc, bD_ι, ← Category.assoc, ha', Category.assoc]
      exact hb
    · rw [← cancel_mono V.ι, Category.assoc, cD_ι, ← Category.assoc, ha', Category.assoc]
      exact hc
  · intro W' d' W₀ h₀ hcl hagree
    have hdense' : ((u.domain ⊓ W' : (pullback t t).Opens) : Set ↑(pullback t t)) ⊆ closure (W₀ :
      Set _) :=
      fun p hp => hcl hp.2
    obtain ⟨g, hg₁, hg₂⟩ := exists_glue_of_eq_on_dense
      (pullback.fst t t ≫ t) f u.domain W' dW.hom d'.1 hdW d'.2 W₀ h₀ hdense' hagree
    have hDsup : prodOpen t V ≤ u.domain ⊔ W' := hDW.trans le_sup_left
    let q : (pullback t t).PartialMap A := ⟨u.domain ⊔ W', hDd.mono (fun p hp => hDsup hp), g⟩
    have hq : q.toRationalMap = u := by
      rw [show u = pΦ.toRationalMap from rfl, Scheme.PartialMap.toRationalMap_eq_iff]
      refine ⟨prodOpen t V, hDd, hDsup, le_rfl, ?_⟩
      rw [Scheme.PartialMap.restrict_hom, Scheme.PartialMap.restrict_hom]
      change (pullback t t).homOfLE hDsup ≫ g = (pullback t t).homOfLE le_rfl ≫ (diffMap G t V v).1
      rw [← hres, ← hg₁]
      simp only [← Category.assoc, Scheme.homOfLE_homOfLE]
    have hle : u.domain ⊔ W' ≤ u.domain := by
      have h := q.le_domain_toRationalMap
      rwa [hq] at h
    refine ⟨le_sup_right.trans hle, ?_⟩
    intro S a' a haa'
    have e : a' ≫ (pullback t t).homOfLE (le_sup_right : W' ≤ u.domain ⊔ W') =
        a ≫ (pullback t t).homOfLE (le_sup_left : u.domain ≤ u.domain ⊔ W') := by
      rw [← cancel_mono (u.domain ⊔ W').ι, Category.assoc, Scheme.homOfLE_ι, Category.assoc,
        Scheme.homOfLE_ι]
      exact haa'
    change a' ≫ d'.1 = a ≫ dW.hom
    rw [← hg₂, ← hg₁, ← Category.assoc, e, Category.assoc]
GoodReductionJacobian.RelativeGroupLaw.exists_isGreatest_opens_difference_extension_of_dense
Source context 9 commands

Surrounding namespaces, section variables, and local commands at this declaration.

section ProofImplementation
namespace GoodReductionJacobian
open CategoryTheory CategoryTheory.Limits AlgebraicGeometry NeronModelInfra
universe u
attribute [local instance]
  GoodReductionJacobian.RelativeGroupLaw.WeilExtField.DOM.isDomain_sections_spec
attribute [local instance]
  GoodReductionJacobian.RelativeGroupLaw.WeilExtField.DOM.isIntegrallyClosed_sections_spec
open _root_.AlgebraicCurves.Geometry.AbelianSchemes.Theorems.Proofs in
open RelativeGroupLaw_exists_isGreatest_opens_difference_extension_of_dense in
open GoodReductionJacobian.RelativeGroupLaw.WeilExtField.DOM in
theorem RelativeGroupLaw.exists_isGreatest_opens_difference_extension_of_dense
    (k : Type u) [Field k]
    {A T : Scheme.{u}} {f : A ⟶ Spec (CommRingCat.of k)} (G : RelativeGroupLaw k f) [IsSeparated f]
    (t : T ⟶ Spec (CommRingCat.of k)) [Smooth t]
    (V : T.Opens) (hV : Dense (V : Set T))
    (v : SchemeHomOver (V.ι ≫ t) f) :
    ∃ (W : (pullback t t).Opens) (d : SchemeHomOver (W.ι ≫ pullback.fst t t ≫ t) f),
      (∀ p : ↑(pullback t t), (pullback.fst t t).base p ∈ V → (pullback.snd t t).base p ∈ V → p ∈
        W) ∧
      (∀ (S : Scheme.{u}) (a : S ⟶ ↑W) (b c : S ⟶ ↑V)
        (hb : a ≫ W.ι ≫ pullback.fst t t = b ≫ V.ι) (hc : a ≫ W.ι ≫ pullback.snd t t = c ≫ V.ι),
        G.mul (a ≫ W.ι ≫ pullback.fst t t ≫ t)
            ⟨a ≫ d.1, by rw [Category.assoc, d.2]⟩
            ⟨c ≫ v.1, by rw [Category.assoc, v.2, ← Category.assoc, ← hc, Category.assoc,
              Category.assoc,
              ← pullback.condition]⟩ =
          ⟨b ≫ v.1, by rw [Category.assoc, v.2, ← Category.assoc, ← hb, Category.assoc,
            Category.assoc]⟩) ∧
      (∀ (W' : (pullback t t).Opens) (d' : SchemeHomOver (W'.ι ≫ pullback.fst t t ≫ t) f)
        (W₀ : (pullback t t).Opens) (h₀ : W₀ ≤ W ⊓ W'),
        ((W' : Set ↑(pullback t t)) ⊆ closure (W₀ : Set ↑(pullback t t))) →
        (pullback t t).homOfLE (h₀.trans inf_le_left) ≫ d.1 =
          (pullback t t).homOfLE (h₀.trans inf_le_right) ≫ d'.1 →
        W' ≤ W ∧ ∀ (S : Scheme.{u}) (a' : S ⟶ ↑W') (a : S ⟶ ↑W), a' ≫ W'.ι = a ≫ W.ι →
          a' ≫ d'.1 = a ≫ d.1) :=
  main G t V hV v