ModuleIsClosedImmersion_app_curveChange_injective_and_exists_of_app_eq_of_isReduced.lean
Nyll.AlgebraicCurves.Geometry.Schemes.IsClosedImmersion_app_curveChange_injective_and_exists_of_app_eq_of_isReduced
12 declarations indexed from sourceView source ↗ Module documentation
Is Closed Immersion app curve Change injective and exists of app eq of is Reduced
Imports18
- Mathlib.AlgebraicGeometry.AffineScheme
- Mathlib.AlgebraicGeometry.IdealSheaf.Basic
- Mathlib.AlgebraicGeometry.IdealSheaf.Subscheme
- Mathlib.AlgebraicGeometry.Limits
- Mathlib.AlgebraicGeometry.Morphisms.ClosedImmersion
- Mathlib.AlgebraicGeometry.Morphisms.Flat
- Mathlib.AlgebraicGeometry.Morphisms.QuasiCompact
- Mathlib.AlgebraicGeometry.Morphisms.SchemeTheoreticallyDominant
- Mathlib.AlgebraicGeometry.OpenImmersion
- Mathlib.AlgebraicGeometry.PullbackCarrier
- Mathlib.CategoryTheory.ConcreteCategory.EpiMono
- Mathlib.CategoryTheory.Limits.Shapes.Pullback.IsPullback.Basic
- Mathlib.RingTheory.Ideal.Maps
- Mathlib.Topology.Sheaves.SheafCondition.UniqueGluing
- Mathlib.Tactic.Choose
- Mathlib.Tactic.LinearCombination
- Nyll.AlgebraicCurves.Geometry.Picard.Functor
- Nyll.AlgebraicCurves.Geometry.Picard.Pullback
Imported by2
Declarations
AlgebraicCurves.Geometry.Schemes.Proofs.IsClosedImmersion_app_curveChange_injective_and_exists_of_app_eq_of_isReduced.MilnorBC.ExistsClause
DocumentationCompatible sections on the two closed pieces lift to a section on the ambient open.
Source context 8 commands
Surrounding namespaces, section variables, and local commands at this declaration.
section ProofImplementation
namespace AlgebraicCurves.Geometry.Schemes.Proofs
namespace IsClosedImmersion_app_curveChange_injective_and_exists_of_app_eq_of_isReduced
universe u
open CategoryTheory CategoryTheory.Limits AlgebraicGeometry NeronModelInfra GoodReductionJacobian
AlgebraicGeometry.RelPicard TopologicalSpace Opposite
namespace MilnorBC
section Generic
variable {X Y₁ Y₂ Z : Scheme.{u}} (i₁ : Y₁ ⟶ X) (i₂ : Y₂ ⟶ X) (j₁ : Z ⟶ Y₁) (j₂ : Z ⟶ Y₂) (hsq : j₁
≫ i₁ = j₂ ≫ i₂)
AlgebraicCurves.Geometry.Schemes.Proofs.IsClosedImmersion_app_curveChange_injective_and_exists_of_app_eq_of_isReduced.MilnorBC.iSup_affineOpens_le
Source context 8 commands
Surrounding namespaces, section variables, and local commands at this declaration.
section ProofImplementation
namespace AlgebraicCurves.Geometry.Schemes.Proofs
namespace IsClosedImmersion_app_curveChange_injective_and_exists_of_app_eq_of_isReduced
universe u
open CategoryTheory CategoryTheory.Limits AlgebraicGeometry NeronModelInfra GoodReductionJacobian
AlgebraicGeometry.RelPicard TopologicalSpace Opposite
namespace MilnorBC
section Generic
variable {X Y₁ Y₂ Z : Scheme.{u}} (i₁ : Y₁ ⟶ X) (i₂ : Y₂ ⟶ X) (j₁ : Z ⟶ Y₁) (j₂ : Z ⟶ Y₂) (hsq : j₁
≫ i₁ = j₂ ≫ i₂)
AlgebraicCurves.Geometry.Schemes.Proofs.IsClosedImmersion_app_curveChange_injective_and_exists_of_app_eq_of_isReduced.MilnorBC.app_apply_map_op
Source context 8 commands
Surrounding namespaces, section variables, and local commands at this declaration.
section ProofImplementation
namespace AlgebraicCurves.Geometry.Schemes.Proofs
namespace IsClosedImmersion_app_curveChange_injective_and_exists_of_app_eq_of_isReduced
universe u
open CategoryTheory CategoryTheory.Limits AlgebraicGeometry NeronModelInfra GoodReductionJacobian
AlgebraicGeometry.RelPicard TopologicalSpace Opposite
namespace MilnorBC
section Generic
variable {X Y₁ Y₂ Z : Scheme.{u}} (i₁ : Y₁ ⟶ X) (i₂ : Y₂ ⟶ X) (j₁ : Z ⟶ Y₁) (j₂ : Z ⟶ Y₂) (hsq : j₁
≫ i₁ = j₂ ≫ i₂)
AlgebraicCurves.Geometry.Schemes.Proofs.IsClosedImmersion_app_curveChange_injective_and_exists_of_app_eq_of_isReduced.MilnorBC.exists_of_forall_isAffineOpen
Source context 8 commands
Surrounding namespaces, section variables, and local commands at this declaration.
section ProofImplementation
namespace AlgebraicCurves.Geometry.Schemes.Proofs
namespace IsClosedImmersion_app_curveChange_injective_and_exists_of_app_eq_of_isReduced
universe u
open CategoryTheory CategoryTheory.Limits AlgebraicGeometry NeronModelInfra GoodReductionJacobian
AlgebraicGeometry.RelPicard TopologicalSpace Opposite
namespace MilnorBC
section Generic
variable {X Y₁ Y₂ Z : Scheme.{u}} (i₁ : Y₁ ⟶ X) (i₂ : Y₂ ⟶ X) (j₁ : Z ⟶ Y₁) (j₂ : Z ⟶ Y₂) (hsq : j₁
≫ i₁ = j₂ ≫ i₂)
Lean source · full declarationtheorem exists_of_forall_isAffineOpen (U : X.Opens)
(hinj : ∀ V : X.Opens, V ≤ U → Function.Injective (fun f : Γ(X, V) => ((i₁.app V) f, (i₂.app V)
f)))
(hex : ∀ V : X.Opens, IsAffineOpen V → V ≤ U → ExistsClause i₁ i₂ j₁ j₂ hsq V) :
ExistsClause i₁ i₂ j₁ j₂ hsq U := by
classical
intro g₁ g₂ hagree
let ι : Type u := {V : X.Opens // IsAffineOpen V ∧ V ≤ U}
let V : ι → X.Opens := fun j => j.1
let r₁ : ∀ j : ι, Γ(Y₁, i₁ ⁻¹ᵁ V j) := fun j => Y₁.presheaf.map (homOfLE (i₁.preimage_mono
j.2.2)).op g₁
let r₂ : ∀ j : ι, Γ(Y₂, i₂ ⁻¹ᵁ V j) := fun j => Y₂.presheaf.map (homOfLE (i₂.preimage_mono
j.2.2)).op g₂
have hagreeV : ∀ j : ι,
Z.presheaf.map
(eqToHom (show j₂ ⁻¹ᵁ (i₂ ⁻¹ᵁ V j) = j₁ ⁻¹ᵁ (i₁ ⁻¹ᵁ V j) by
rw [← Scheme.Hom.comp_preimage, ← Scheme.Hom.comp_preimage, hsq])).op
(j₁.app (i₁ ⁻¹ᵁ V j) (r₁ j)) = j₂.app (i₂ ⁻¹ᵁ V j) (r₂ j) := by
intro j
simp only [r₁, r₂]
rw [app_apply_map_op, app_apply_map_op, ← hagree]
generalize j₁.app (i₁ ⁻¹ᵁ U) g₁ = t
simp only [← CategoryTheory.ConcreteCategory.comp_apply, ← Functor.map_comp, ← op_comp]
rfl
choose fV hfV₁ hfV₂ using fun j : ι => hex (V j) j.2.1 j.2.2 (r₁ j) (r₂ j) (hagreeV j)
have hcompat : TopCat.Presheaf.IsCompatible X.sheaf.1 V fV := by
intro j j'
apply hinj (V j ⊓ V j') (inf_le_left.trans j.2.2)
change ((i₁.app _) (X.presheaf.map _ (fV j)), (i₂.app _) (X.presheaf.map _ (fV j))) =
((i₁.app _) (X.presheaf.map _ (fV j')), (i₂.app _) (X.presheaf.map _ (fV j')))
simp only [Prod.mk.injEq]
refine ⟨?_, ?_⟩
· rw [app_apply_map_op, app_apply_map_op, hfV₁, hfV₁]
simp only [r₁, ← CategoryTheory.ConcreteCategory.comp_apply, ← Functor.map_comp, ← op_comp]
rfl
· rw [app_apply_map_op, app_apply_map_op, hfV₂, hfV₂]
simp only [r₂, ← CategoryTheory.ConcreteCategory.comp_apply, ← Functor.map_comp, ← op_comp]
rfl
obtain ⟨f, hf, -⟩ : ∃! f : Γ(X, U),
∀ j : ι, X.presheaf.map (homOfLE j.2.2).op f = fV j :=
X.sheaf.existsUnique_gluing' V U (fun j => homOfLE j.2.2)
(le_of_eq (iSup_affineOpens_le U).symm) fV hcompat
refine ⟨f, ?_, ?_⟩
· fapply Y₁.sheaf.eq_of_locally_eq' (fun j : ι => i₁ ⁻¹ᵁ V j) (i₁ ⁻¹ᵁ U)
(fun j => homOfLE (i₁.preimage_mono j.2.2))
· rw [← Scheme.Hom.preimage_iSup]
exact i₁.preimage_mono (le_of_eq (iSup_affineOpens_le U).symm)
· intro j
have e1 : (i₁.app (V j)) (X.presheaf.map (homOfLE j.2.2).op f) = r₁ j := by
have := hf j
change X.presheaf.map (homOfLE j.2.2).op f = fV j at this
rw [this, hfV₁]
change Y₁.presheaf.map (homOfLE (i₁.preimage_mono j.2.2)).op
(i₁.app U f) = r₁ j
exact (app_apply_map_op i₁ (homOfLE j.2.2) f).symm.trans e1
· fapply Y₂.sheaf.eq_of_locally_eq' (fun j : ι => i₂ ⁻¹ᵁ V j) (i₂ ⁻¹ᵁ U)
(fun j => homOfLE (i₂.preimage_mono j.2.2))
· rw [← Scheme.Hom.preimage_iSup]
exact i₂.preimage_mono (le_of_eq (iSup_affineOpens_le U).symm)
· intro j
have e2 : (i₂.app (V j)) (X.presheaf.map (homOfLE j.2.2).op f) = r₂ j := by
have := hf j
change X.presheaf.map (homOfLE j.2.2).op f = fV j at this
rw [this, hfV₂]
change Y₂.presheaf.map (homOfLE (i₂.preimage_mono j.2.2)).op
(i₂.app U f) = r₂ j
exact (app_apply_map_op i₂ (homOfLE j.2.2) f).symm.trans e2
AlgebraicCurves.Geometry.Schemes.Proofs.IsClosedImmersion_app_curveChange_injective_and_exists_of_app_eq_of_isReduced.MilnorBC.ker_pullback_fst_comp
Source context 8 commands
Surrounding namespaces, section variables, and local commands at this declaration.
section ProofImplementation
namespace AlgebraicCurves.Geometry.Schemes.Proofs
namespace IsClosedImmersion_app_curveChange_injective_and_exists_of_app_eq_of_isReduced
universe u
open CategoryTheory CategoryTheory.Limits AlgebraicGeometry NeronModelInfra GoodReductionJacobian
AlgebraicGeometry.RelPicard TopologicalSpace Opposite
namespace MilnorBC
section Generic
variable {X Y₁ Y₂ Z : Scheme.{u}} (i₁ : Y₁ ⟶ X) (i₂ : Y₂ ⟶ X) (j₁ : Z ⟶ Y₁) (j₂ : Z ⟶ Y₂) (hsq : j₁
≫ i₁ = j₂ ≫ i₂)
AlgebraicCurves.Geometry.Schemes.Proofs.IsClosedImmersion_app_curveChange_injective_and_exists_of_app_eq_of_isReduced.MilnorBC.exists_of_isAffineOpen
Source context 8 commands
Surrounding namespaces, section variables, and local commands at this declaration.
section ProofImplementation
namespace AlgebraicCurves.Geometry.Schemes.Proofs
namespace IsClosedImmersion_app_curveChange_injective_and_exists_of_app_eq_of_isReduced
universe u
open CategoryTheory CategoryTheory.Limits AlgebraicGeometry NeronModelInfra GoodReductionJacobian
AlgebraicGeometry.RelPicard TopologicalSpace Opposite
namespace MilnorBC
section Generic
variable {X Y₁ Y₂ Z : Scheme.{u}} (i₁ : Y₁ ⟶ X) (i₂ : Y₂ ⟶ X) (j₁ : Z ⟶ Y₁) (j₂ : Z ⟶ Y₂) (hsq : j₁
≫ i₁ = j₂ ≫ i₂)
AlgebraicCurves.Geometry.Schemes.Proofs.IsClosedImmersion_app_curveChange_injective_and_exists_of_app_eq_of_isReduced.MilnorBC.isPullback_curveChange_fst
Source context 8 commands
Surrounding namespaces, section variables, and local commands at this declaration.
section ProofImplementation
namespace AlgebraicCurves.Geometry.Schemes.Proofs
namespace IsClosedImmersion_app_curveChange_injective_and_exists_of_app_eq_of_isReduced
universe u
open CategoryTheory CategoryTheory.Limits AlgebraicGeometry NeronModelInfra GoodReductionJacobian
AlgebraicGeometry.RelPicard TopologicalSpace Opposite
namespace MilnorBC
section BaseChange
variable {k : Type u} [Field k] {X Y₁ Y₂ Z T : Scheme.{u}} (x : X ⟶ Spec (CommRingCat.of k))
(y₁ : Y₁ ⟶ Spec (CommRingCat.of k)) (y₂ : Y₂ ⟶ Spec (CommRingCat.of k)) (z : Z ⟶ Spec
(CommRingCat.of k))
(i₁ : SchemeHomOver y₁ x) (i₂ : SchemeHomOver y₂ x) (j₁ : SchemeHomOver z y₁) (j₂ : SchemeHomOver
z y₂)
(t : T ⟶ Spec (CommRingCat.of k))
AlgebraicCurves.Geometry.Schemes.Proofs.IsClosedImmersion_app_curveChange_injective_and_exists_of_app_eq_of_isReduced.MilnorBC.isClosedImmersion_curveChange
Source context 8 commands
Surrounding namespaces, section variables, and local commands at this declaration.
section ProofImplementation
namespace AlgebraicCurves.Geometry.Schemes.Proofs
namespace IsClosedImmersion_app_curveChange_injective_and_exists_of_app_eq_of_isReduced
universe u
open CategoryTheory CategoryTheory.Limits AlgebraicGeometry NeronModelInfra GoodReductionJacobian
AlgebraicGeometry.RelPicard TopologicalSpace Opposite
namespace MilnorBC
section BaseChange
variable {k : Type u} [Field k] {X Y₁ Y₂ Z T : Scheme.{u}} (x : X ⟶ Spec (CommRingCat.of k))
(y₁ : Y₁ ⟶ Spec (CommRingCat.of k)) (y₂ : Y₂ ⟶ Spec (CommRingCat.of k)) (z : Z ⟶ Spec
(CommRingCat.of k))
(i₁ : SchemeHomOver y₁ x) (i₂ : SchemeHomOver y₂ x) (j₁ : SchemeHomOver z y₁) (j₂ : SchemeHomOver
z y₂)
(t : T ⟶ Spec (CommRingCat.of k))
AlgebraicCurves.Geometry.Schemes.Proofs.IsClosedImmersion_app_curveChange_injective_and_exists_of_app_eq_of_isReduced.MilnorBC.isPullback_curveChange
Source context 8 commands
Surrounding namespaces, section variables, and local commands at this declaration.
section ProofImplementation
namespace AlgebraicCurves.Geometry.Schemes.Proofs
namespace IsClosedImmersion_app_curveChange_injective_and_exists_of_app_eq_of_isReduced
universe u
open CategoryTheory CategoryTheory.Limits AlgebraicGeometry NeronModelInfra GoodReductionJacobian
AlgebraicGeometry.RelPicard TopologicalSpace Opposite
namespace MilnorBC
section BaseChange
variable {k : Type u} [Field k] {X Y₁ Y₂ Z T : Scheme.{u}} (x : X ⟶ Spec (CommRingCat.of k))
(y₁ : Y₁ ⟶ Spec (CommRingCat.of k)) (y₂ : Y₂ ⟶ Spec (CommRingCat.of k)) (z : Z ⟶ Spec
(CommRingCat.of k))
(i₁ : SchemeHomOver y₁ x) (i₂ : SchemeHomOver y₂ x) (j₁ : SchemeHomOver z y₁) (j₂ : SchemeHomOver
z y₂)
(t : T ⟶ Spec (CommRingCat.of k))
AlgebraicCurves.Geometry.Schemes.Proofs.IsClosedImmersion_app_curveChange_injective_and_exists_of_app_eq_of_isReduced.MilnorBC.map_eq_zero_of_app_eq_zero
Source context 8 commands
Surrounding namespaces, section variables, and local commands at this declaration.
section ProofImplementation
namespace AlgebraicCurves.Geometry.Schemes.Proofs
namespace IsClosedImmersion_app_curveChange_injective_and_exists_of_app_eq_of_isReduced
universe u
open CategoryTheory CategoryTheory.Limits AlgebraicGeometry NeronModelInfra GoodReductionJacobian
AlgebraicGeometry.RelPicard TopologicalSpace Opposite
namespace MilnorBC
section BaseChange
variable {k : Type u} [Field k] {X Y₁ Y₂ Z T : Scheme.{u}} (x : X ⟶ Spec (CommRingCat.of k))
(y₁ : Y₁ ⟶ Spec (CommRingCat.of k)) (y₂ : Y₂ ⟶ Spec (CommRingCat.of k)) (z : Z ⟶ Spec
(CommRingCat.of k))
(i₁ : SchemeHomOver y₁ x) (i₂ : SchemeHomOver y₂ x) (j₁ : SchemeHomOver z y₁) (j₂ : SchemeHomOver
z y₂)
(t : T ⟶ Spec (CommRingCat.of k))
AlgebraicCurves.Geometry.Schemes.Proofs.IsClosedImmersion_app_curveChange_injective_and_exists_of_app_eq_of_isReduced.MilnorBC.app_curveChange_injective
Source context 8 commands
Surrounding namespaces, section variables, and local commands at this declaration.
section ProofImplementation
namespace AlgebraicCurves.Geometry.Schemes.Proofs
namespace IsClosedImmersion_app_curveChange_injective_and_exists_of_app_eq_of_isReduced
universe u
open CategoryTheory CategoryTheory.Limits AlgebraicGeometry NeronModelInfra GoodReductionJacobian
AlgebraicGeometry.RelPicard TopologicalSpace Opposite
namespace MilnorBC
section BaseChange
variable {k : Type u} [Field k] {X Y₁ Y₂ Z T : Scheme.{u}} (x : X ⟶ Spec (CommRingCat.of k))
(y₁ : Y₁ ⟶ Spec (CommRingCat.of k)) (y₂ : Y₂ ⟶ Spec (CommRingCat.of k)) (z : Z ⟶ Spec
(CommRingCat.of k))
(i₁ : SchemeHomOver y₁ x) (i₂ : SchemeHomOver y₂ x) (j₁ : SchemeHomOver z y₁) (j₂ : SchemeHomOver
z y₂)
(t : T ⟶ Spec (CommRingCat.of k))
Lean source · full declarationtheorem app_curveChange_injective [IsClosedImmersion i₁.1] [IsClosedImmersion i₂.1] (hXred :
IsReduced X)
(hjs : ∀ p : X, p ∈ Set.range i₁.1.base ∨ p ∈ Set.range i₂.1.base) (U : (Limits.pullback x
t).Opens) :
Function.Injective (fun f : Γ(Limits.pullback x t, U) =>
((curveChange i₁.1 i₁.2 t).app U f, (curveChange i₂.1 i₂.2 t).app U f)) := by
classical
have : IsReduced X := hXred
set f : Y₁ ⨿ Y₂ ⟶ X := coprod.desc i₁.1 i₂.1 with hf
have : Surjective f := ⟨fun p => by
rcases hjs p with ⟨y, hy⟩ | ⟨y, hy⟩
· refine ⟨(coprod.inl : Y₁ ⟶ Y₁ ⨿ Y₂).base y, ?_⟩
change (coprod.inl ≫ f).base y = p
rw [hf, coprod.inl_desc]; exact hy
· refine ⟨(coprod.inr : Y₂ ⟶ Y₁ ⨿ Y₂).base y, ?_⟩
change (coprod.inr ≫ f).base y = p
rw [hf, coprod.inr_desc]; exact hy⟩
have : IsSchemeTheoreticallyDominant f := IsSchemeTheoreticallyDominant.of_isDominant f
have : QuasiCompact f := by rw [hf]; infer_instance
set p : Limits.pullback x t ⟶ X := pullback.fst x t with hp
have : IsSchemeTheoreticallyDominant (pullback.snd f p) :=
IsSchemeTheoreticallyDominant.pullbackSnd f p
have hinjP : ∀ V, Function.Injective ((pullback.snd f p).app V) := fun V => (pullback.snd f
p).app_injective V
set l₁ : Limits.pullback y₁ t ⟶ Limits.pullback f p :=
pullback.lift (pullback.fst y₁ t ≫ coprod.inl) (curveChange i₁.1 i₁.2 t)
(by
rw [Category.assoc, hf, coprod.inl_desc, hp]
simp only [curveChange, pullback.lift_fst]) with hl₁
set l₂ : Limits.pullback y₂ t ⟶ Limits.pullback f p :=
pullback.lift (pullback.fst y₂ t ≫ coprod.inr) (curveChange i₂.1 i₂.2 t)
(by
rw [Category.assoc, hf, coprod.inr_desc, hp]
simp only [curveChange, pullback.lift_fst]) with hl₂
have hl₁snd : l₁ ≫ pullback.snd f p = curveChange i₁.1 i₁.2 t := by rw [hl₁, pullback.lift_snd]
have hl₂snd : l₂ ≫ pullback.snd f p = curveChange i₂.1 i₂.2 t := by rw [hl₂, pullback.lift_snd]
have hl₁fst : l₁ ≫ pullback.fst f p = pullback.fst y₁ t ≫ coprod.inl :=
by rw [hl₁, pullback.lift_fst]
have hl₂fst : l₂ ≫ pullback.fst f p = pullback.fst y₂ t ≫ coprod.inr :=
by rw [hl₂, pullback.lift_fst]
have sq₁ : IsPullback l₁ (pullback.fst y₁ t) (pullback.fst f p) coprod.inl := by
refine IsPullback.of_right ?_ hl₁fst (IsPullback.of_hasPullback f p).flip
rw [hl₁snd, hf, coprod.inl_desc]
exact isPullback_curveChange_fst i₁.1 i₁.2 t
have sq₂ : IsPullback l₂ (pullback.fst y₂ t) (pullback.fst f p) coprod.inr := by
refine IsPullback.of_right ?_ hl₂fst (IsPullback.of_hasPullback f p).flip
rw [hl₂snd, hf, coprod.inr_desc]
exact isPullback_curveChange_fst i₂.1 i₂.2 t
have : IsOpenImmersion l₁ := MorphismProperty.of_isPullback (P := @IsOpenImmersion) sq₁.flip
inferInstance
have : IsOpenImmersion l₂ := MorphismProperty.of_isPullback (P := @IsOpenImmersion) sq₂.flip
inferInstance
have hcov : ∀ q : ↥(Limits.pullback f p), q ∈ l₁.opensRange ∨ q ∈ l₂.opensRange := by
intro q
have hq : (pullback.fst f p).base q ∈ Set.range (coprod.inl : Y₁ ⟶ Y₁ ⨿ Y₂).base ⊔
Set.range (coprod.inr : Y₂ ⟶ Y₁ ⨿ Y₂).base := by
rw [(isCompl_range_inl_inr Y₁ Y₂).sup_eq_top]; trivial
rcases hq with ⟨y, hy⟩ | ⟨y, hy⟩
· left
obtain ⟨w, hw, -⟩ := Scheme.Pullback.exists_preimage_pullback (f := pullback.fst f p) (g :=
coprod.inl) q y
hy.symm
exact Scheme.Hom.mem_opensRange.mpr ⟨sq₁.isoPullback.inv.base w, by
rw [← Scheme.Hom.comp_apply, sq₁.isoPullback_inv_fst]; exact hw⟩
· right
obtain ⟨w, hw, -⟩ := Scheme.Pullback.exists_preimage_pullback (f := pullback.fst f p) (g :=
coprod.inr) q y
hy.symm
exact Scheme.Hom.mem_opensRange.mpr ⟨sq₂.isoPullback.inv.base w, by
rw [← Scheme.Hom.comp_apply, sq₂.isoPullback_inv_fst]; exact hw⟩
have hvan : ∀ (V : (Limits.pullback f p).Opens) (s : Γ(Limits.pullback f p, V)),
l₁.app V s = 0 → l₂.app V s = 0 → s = 0 := by
intro V s h₁ h₂
let O : Bool → (Limits.pullback f p).Opens := fun b => bif b then l₁ ''ᵁ l₁ ⁻¹ᵁ V else l₂ ''ᵁ
l₂ ⁻¹ᵁ V
have hO : ∀ b, O b ≤ V := by
intro b
cases b
· change l₂ ''ᵁ l₂ ⁻¹ᵁ V ≤ V
rw [Scheme.Hom.image_preimage_eq_opensRange_inf]; exact inf_le_right
· change l₁ ''ᵁ l₁ ⁻¹ᵁ V ≤ V
rw [Scheme.Hom.image_preimage_eq_opensRange_inf]; exact inf_le_right
have hVO : V ≤ ⨆ b, O b := by
intro q hq
rw [Opens.mem_iSup]
rcases hcov q with h | h
· refine ⟨true, ?_⟩
change q ∈ l₁ ''ᵁ l₁ ⁻¹ᵁ V
rw [Scheme.Hom.image_preimage_eq_opensRange_inf]; exact ⟨h, hq⟩
· refine ⟨false, ?_⟩
change q ∈ l₂ ''ᵁ l₂ ⁻¹ᵁ V
rw [Scheme.Hom.image_preimage_eq_opensRange_inf]; exact ⟨h, hq⟩
apply (Limits.pullback f p).sheaf.eq_of_locally_eq' O V (fun b => homOfLE (hO b)) hVO
intro b
change (Limits.pullback f p).presheaf.map (homOfLE (hO b)).op s =
(Limits.pullback f p).presheaf.map (homOfLE (hO b)).op 0
rw [map_zero]
cases b
· exact map_eq_zero_of_app_eq_zero l₂ s h₂
· exact map_eq_zero_of_app_eq_zero l₁ s h₁
intro u u' huu
simp only [Prod.mk.injEq] at huu
obtain ⟨h₁, h₂⟩ := huu
rw [← sub_eq_zero]
apply hinjP U
rw [map_zero]
apply hvan
· have e := Scheme.Hom.congr_app hl₁snd U
rw [Scheme.Hom.comp_app] at e
have e' := CategoryTheory.ConcreteCategory.congr_hom e (u - u')
rw [CategoryTheory.ConcreteCategory.comp_apply] at e'
erw [CategoryTheory.ConcreteCategory.comp_apply] at e'
rw [e', map_sub, h₁, sub_self, map_zero]
· have e := Scheme.Hom.congr_app hl₂snd U
rw [Scheme.Hom.comp_app] at e
have e' := CategoryTheory.ConcreteCategory.congr_hom e (u - u')
rw [CategoryTheory.ConcreteCategory.comp_apply] at e'
erw [CategoryTheory.ConcreteCategory.comp_apply] at e'
rw [e', map_sub, h₂, sub_self, map_zero]
AlgebraicGeometry.IsClosedImmersion.app_curveChange_injective_and_exists_of_app_eq_of_isReduced
Source context 8 commands
Surrounding namespaces, section variables, and local commands at this declaration.
section
universe u
open CategoryTheory CategoryTheory.Limits AlgebraicGeometry NeronModelInfra GoodReductionJacobian
open AlgebraicGeometry.RelPicard TopologicalSpace Opposite
open AlgebraicCurves.Geometry.Schemes.Proofs
open IsClosedImmersion_app_curveChange_injective_and_exists_of_app_eq_of_isReduced
attribute [local instance] MilnorBC.isClosedImmersion_curveChange
namespace AlgebraicGeometry.IsClosedImmersion