Source context 20 commands
Surrounding namespaces, section variables, and local commands at this declaration.
section ProofImplementation
namespace JacobianVarieties.Picard.Proofs.TwoSidedPool
open _root_.CategoryTheory
open _root_.CategoryTheory.Limits
open _root_.CategoryTheory.MonoidalCategory
open _root_.AlgebraicGeometry
open _root_.NeronModelInfra
open _root_.GoodReductionJacobian
open AlgebraicGeometry.RelPicard AlgebraicGeometry.SmoothProperCurve TensorProduct
noncomputable section
attribute [local instance] E9PMerge.isIso_wL
attribute [local instance] E9PMerge.farCommRing
attribute [local instance] E9PMerge.farAlgebra
attribute [local simp] E9PMerge.farB_zero
attribute [local simp] E9PMerge.farB_succ
attribute [local simp] E9PMerge.farDeg_zero
attribute [local simp] E9PMerge.farDeg_succ
attribute [local simp] E9PMerge.farZ_zero
attribute [local simp] E9PMerge.farZ_succ
open E9PMerge in
Lean source · full declarationtheorem _root_.AlgebraicGeometry.RelPicard.exists_twoSidedPool_of_oneSided_of_iso
(R : Type) [CommRing R] {C : Scheme.{0}} (c : C ⟶ Spec (CommRingCat.of R)) (U : C.Opens)
(ε ε' : SchemeHomOver (𝟙 (Spec (CommRingCat.of R))) c)
(σ : C ≅ C) (hσ : σ.hom ≫ c = c)
(hσε : ε.1 ≫ σ.hom = ε'.1) (hσU : σ.hom ⁻¹ᵁ U = U)
[IsSeparated c] (hε'U : Set.range ε'.1.base ⊆ (U : Set C))
(A₀ B₀ n₀ : ℕ) (f : R)
(hfar : ∀ (k : Type) [Field k] [IsAlgClosed k] (s : Spec (CommRingCat.of k) ⟶ Spec
(CommRingCat.of (Localization.Away f))),
¬ Smooth (pullback.snd (baseChange R c (Localization.Away f)) s) →
(∀ y : ↥(pullback (baseChange R c (Localization.Away f)) s),
y ∈ connectedComponentIn
(((pullback.fst (baseChange R c (Localization.Away f)) s ≫ pullback.fst c (specMap R
(Localization.Away f))) ⁻¹ᵁ U :
(pullback (baseChange R c (Localization.Away f)) s).Opens) : Set ↥(pullback
(baseChange R c (Localization.Away f)) s))
(((sectionFibrePoint (sectionBaseChange (Localization.Away f) ε) s).1).base
(IsLocalRing.closedPoint k)) →
(pullback.map (baseChange R c (Localization.Away f)) s (baseChange R c (Localization.Away
f)) s
(curveChange σ.hom hσ (specMap R (Localization.Away f))) (𝟙 _) (𝟙 _)
((Category.comp_id _).trans (curveChange_snd _ _ _).symm)
((Category.comp_id _).trans (Category.id_comp _).symm)).base y ∈
(((pullback.fst (baseChange R c (Localization.Away f)) s ≫ pullback.fst c (specMap R
(Localization.Away f))) ⁻¹ᵁ U :
(pullback (baseChange R c (Localization.Away f)) s).Opens) : Set ↥(pullback
(baseChange R c (Localization.Away f)) s)) \
connectedComponentIn
(((pullback.fst (baseChange R c (Localization.Away f)) s ≫ pullback.fst c (specMap R
(Localization.Away f))) ⁻¹ᵁ U :
(pullback (baseChange R c (Localization.Away f)) s).Opens) : Set ↥(pullback
(baseChange R c (Localization.Away f)) s))
(((sectionFibrePoint (sectionBaseChange (Localization.Away f) ε) s).1).base
(IsLocalRing.closedPoint k))) ∧
((sectionFibrePoint (sectionBaseChange (Localization.Away f) ε') s).1).base
(IsLocalRing.closedPoint k) ∈
(((pullback.fst (baseChange R c (Localization.Away f)) s ≫ pullback.fst c (specMap R
(Localization.Away f))) ⁻¹ᵁ U :
(pullback (baseChange R c (Localization.Away f)) s).Opens) : Set ↥(pullback
(baseChange R c (Localization.Away f)) s)) \
connectedComponentIn
(((pullback.fst (baseChange R c (Localization.Away f)) s ≫ pullback.fst c (specMap R
(Localization.Away f))) ⁻¹ᵁ U :
(pullback (baseChange R c (Localization.Away f)) s).Opens) : Set ↥(pullback
(baseChange R c (Localization.Away f)) s))
(((sectionFibrePoint (sectionBaseChange (Localization.Away f) ε) s).1).base
(IsLocalRing.closedPoint k)))
(b M : ℕ) (hM : A₀ * b ^ n₀ + B₀ < M)
(R' : Type) [CommRing R'] [Algebra R R'] [Algebra (Localization.Away f) R'] [IsScalarTower R
(Localization.Away f) R']
[Module.Finite (Localization.Away f) R'] [Algebra.Etale (Localization.Away f) R']
[Module.FaithfullyFlat (Localization.Away f) R']
(B : Fin M → Type) [∀ i, CommRing (B i)] [∀ i, Algebra (Localization.Away f) (B i)]
[∀ i, Module.Finite (Localization.Away f) (B i)] [∀ i, Algebra.Etale (Localization.Away f) (B
i)]
(deg : Fin M → ℕ) (hdeg : ∀ i, 1 ≤ deg i) (hdegb : ∀ i, deg i ≤ b)
(φ : ∀ i, TensorProduct (Localization.Away f) R' (B i) ≃ₐ[R'] (Fin (deg i) → R'))
(z : ∀ i, Spec (CommRingCat.of (B i)) ⟶ pullback c (specMap R (Localization.Away f)))
[∀ i, IsClosedImmersion (z i)]
(hz₁ : ∀ i, z i ≫ baseChange R c (Localization.Away f) = specMap (Localization.Away f) (B i))
(hz₂ : ∀ i, Set.range (z i).base ⊆
((pullback.fst c (specMap R (Localization.Away f)) ⁻¹ᵁ U : (pullback c (specMap R
(Localization.Away f))).Opens) :
Set ↥(pullback c (specMap R (Localization.Away f)))))
(hz₃ : Pairwise fun i j => Disjoint (Set.range (z i).base) (Set.range (z j).base))
(hz₄ : ∀ (k : Type) [Field k] [IsAlgClosed k] (s : Spec (CommRingCat.of k) ⟶ Spec
(CommRingCat.of (Localization.Away f)))
(i : Fin M),
(pullback.fst (baseChange R c (Localization.Away f)) s).base ⁻¹' Set.range (z i).base ⊆
connectedComponentIn
(((pullback.fst (baseChange R c (Localization.Away f)) s ≫ pullback.fst c (specMap R
(Localization.Away f))) ⁻¹ᵁ U :
(pullback (baseChange R c (Localization.Away f)) s).Opens) : Set ↥(pullback
(baseChange R c (Localization.Away f)) s))
(((sectionFibrePoint (sectionBaseChange (Localization.Away f) ε) s).1).base
(IsLocalRing.closedPoint k)))
(hzinf : ∀ i, Disjoint (Set.range (z i).base) (Set.range (sectionBaseChange (Localization.Away
f) ε).1.base))
(hzzero : ∀ i, Disjoint (Set.range (z i).base) (Set.range (sectionBaseChange (Localization.Away
f) ε').1.base))
(hzw : ∀ i j, Disjoint (Set.range (z i).base)
(Set.range (z j ≫ curveChange σ.hom hσ (specMap R (Localization.Away f))).base)) :
∃ (b M M' : ℕ)
(_ : A₀ * b ^ n₀ + B₀ < M) (_ : A₀ * b ^ n₀ + B₀ < M')
(R' : Type) (_ : CommRing R') (_ : Algebra R R')
(_ : Algebra (Localization.Away f) R') (_ : IsScalarTower R (Localization.Away f) R')
(_ : Module.Finite (Localization.Away f) R') (_ : Algebra.Etale (Localization.Away f) R')
(_ : Module.FaithfullyFlat (Localization.Away f) R')
(B : Fin M → Type) (_ : ∀ i, CommRing (B i)) (_ : ∀ i, Algebra (Localization.Away f) (B i))
(_ : ∀ i, Module.Finite (Localization.Away f) (B i)) (_ : ∀ i, Algebra.Etale
(Localization.Away f) (B i))
(deg : Fin M → ℕ) (_ : ∀ i, 1 ≤ deg i) (_ : ∀ i, deg i ≤ b)
(_ : ∀ i, TensorProduct (Localization.Away f) R' (B i) ≃ₐ[R'] (Fin (deg i) → R'))
(z : ∀ i, Spec (CommRingCat.of (B i)) ⟶ pullback c (specMap R (Localization.Away f)))
(_ : ∀ i, IsClosedImmersion (z i))
(B' : Fin M' → Type) (_ : ∀ i, CommRing (B' i)) (_ : ∀ i, Algebra (Localization.Away f) (B'
i))
(_ : ∀ i, Module.Finite (Localization.Away f) (B' i)) (_ : ∀ i, Algebra.Etale
(Localization.Away f) (B' i))
(deg' : Fin M' → ℕ) (_ : ∀ i, 1 ≤ deg' i) (_ : ∀ i, deg' i ≤ b)
(_ : ∀ i, TensorProduct (Localization.Away f) R' (B' i) ≃ₐ[R'] (Fin (deg' i) → R'))
(z' : ∀ i, Spec (CommRingCat.of (B' i)) ⟶ pullback c (specMap R (Localization.Away f)))
(_ : ∀ i, IsClosedImmersion (z' i)),
(∀ i, z i ≫ baseChange R c (Localization.Away f) = specMap (Localization.Away f) (B i)) ∧
(∀ i, Set.range (z i).base ⊆
((pullback.fst c (specMap R (Localization.Away f)) ⁻¹ᵁ U : (pullback c (specMap R
(Localization.Away f))).Opens) :
Set ↥(pullback c (specMap R (Localization.Away f))))) ∧
(Pairwise fun i j => Disjoint (Set.range (z i).base) (Set.range (z j).base)) ∧
(∀ (k : Type) [Field k] [IsAlgClosed k] (s : Spec (CommRingCat.of k) ⟶ Spec (CommRingCat.of
(Localization.Away f)))
(i : Fin M),
(pullback.fst (baseChange R c (Localization.Away f)) s).base ⁻¹' Set.range (z i).base ⊆
connectedComponentIn
(((pullback.fst (baseChange R c (Localization.Away f)) s ≫ pullback.fst c (specMap R
(Localization.Away f))) ⁻¹ᵁ U :
(pullback (baseChange R c (Localization.Away f)) s).Opens) : Set ↥(pullback
(baseChange R c (Localization.Away f)) s))
(((sectionFibrePoint (sectionBaseChange (Localization.Away f) ε) s).1).base
(IsLocalRing.closedPoint k))) ∧
(∃ j, deg' j ≤ 1) ∧
(∀ i, z' i ≫ baseChange R c (Localization.Away f) = specMap (Localization.Away f) (B' i)) ∧
(∀ i, Set.range (z' i).base ⊆
((pullback.fst c (specMap R (Localization.Away f)) ⁻¹ᵁ U : (pullback c (specMap R
(Localization.Away f))).Opens) :
Set ↥(pullback c (specMap R (Localization.Away f))))) ∧
(Pairwise fun i j => Disjoint (Set.range (z' i).base) (Set.range (z' j).base)) ∧
(∀ i j, Disjoint (Set.range (z i).base) (Set.range (z' j).base)) ∧
(∀ (k : Type) [Field k] [IsAlgClosed k] (s : Spec (CommRingCat.of k) ⟶ Spec (CommRingCat.of
(Localization.Away f)))
(i : Fin M'), ¬ Smooth (pullback.snd (baseChange R c (Localization.Away f)) s) →
(pullback.fst (baseChange R c (Localization.Away f)) s).base ⁻¹' Set.range (z' i).base ⊆
(((pullback.fst (baseChange R c (Localization.Away f)) s ≫ pullback.fst c (specMap R
(Localization.Away f))) ⁻¹ᵁ U :
(pullback (baseChange R c (Localization.Away f)) s).Opens) : Set ↥(pullback
(baseChange R c (Localization.Away f)) s)) \
connectedComponentIn
(((pullback.fst (baseChange R c (Localization.Away f)) s ≫ pullback.fst c (specMap R
(Localization.Away f))) ⁻¹ᵁ U :
(pullback (baseChange R c (Localization.Away f)) s).Opens) : Set ↥(pullback
(baseChange R c (Localization.Away f)) s))
(((sectionFibrePoint (sectionBaseChange (Localization.Away f) ε) s).1).base
(IsLocalRing.closedPoint k))) := by
have hM0 : 0 < M := lt_of_le_of_lt (Nat.zero_le _) hM
have h1b : 1 ≤ b := (hdeg ⟨0, hM0⟩).trans (hdegb ⟨0, hM0⟩)
refine ⟨b, M, M + 1, hM, Nat.lt_succ_of_lt hM, R', inferInstance, inferInstance, inferInstance,
inferInstance,
inferInstance, inferInstance, inferInstance, B, inferInstance, inferInstance, inferInstance,
inferInstance,
deg, hdeg, hdegb, φ, z, inferInstance, farB f B, inferInstance, inferInstance, farFinite f B,
farEtale f B, farDeg deg,
Fin.cases le_rfl hdeg, Fin.cases h1b hdegb, farφ f B R' deg φ, farZ hσ f B ε' z,
farZ_isClosedImmersion hσ f B z,
hz₁, hz₂, hz₃, hz₄, ⟨0, le_rfl⟩, ?_, ?_, ?_, ?_, ?_⟩
· refine Fin.cases ?_ (fun j => ?_)
· change (sectionBaseChange (Localization.Away f) ε').1 ≫ _ = Spec.map (CommRingCat.ofHom
(RingHom.id _))
rw [(sectionBaseChange (Localization.Away f) ε').2, CommRingCat.ofHom_id, Spec.map_id]
· change (z j ≫ wL hσ f) ≫ _ = _
rw [Category.assoc, wL_snd]
exact hz₁ j
· refine Fin.cases (range_εzero_subset hε'U f) (fun j => ?_)
change Set.range (z j ≫ wL hσ f).base ⊆ _
rw [range_comp_wL]
rintro _ ⟨x, hx, rfl⟩
exact wL_base_mem_preimage_smoothLocus hσ hσU f (hz₂ j hx)
· intro i j hij
induction i using Fin.cases with
| zero =>
induction j using Fin.cases with
| zero => exact (hij rfl).elim
| succ j =>
change Disjoint (Set.range (sectionBaseChange (Localization.Away f) ε').1.base) (Set.range
(z j ≫ wL hσ f).base)
rw [range_εzero_eq hσ hσε f, range_comp_wL]
exact (Set.disjoint_image_iff (wL_base_injective hσ f)).2 (hzinf j).symm
| succ i =>
induction j using Fin.cases with
| zero =>
change Disjoint (Set.range (z i ≫ wL hσ f).base) (Set.range (sectionBaseChange
(Localization.Away f) ε').1.base)
rw [range_εzero_eq hσ hσε f, range_comp_wL]
exact (Set.disjoint_image_iff (wL_base_injective hσ f)).2 (hzinf i)
| succ j =>
change Disjoint (Set.range (z i ≫ wL hσ f).base) (Set.range (z j ≫ wL hσ f).base)
rw [range_comp_wL, range_comp_wL]
exact (Set.disjoint_image_iff (wL_base_injective hσ f)).2 (hz₃ fun h => hij (congrArg
Fin.succ h))
· intro i j
induction j using Fin.cases with
| zero => exact hzzero i
| succ j => exact hzw i j
· intro k _ _ s i hns
induction i using Fin.cases with
| zero =>
intro y hy
rw [eq_sectionFibrePoint_of_mem f s (sectionBaseChange (Localization.Away f) ε') y hy]
exact (hfar k s hns).2
| succ j =>
intro y hy
change (pullback.fst (baseChange R (c) (Localization.Away f)) s).base y ∈
Set.range (z j ≫ wL hσ f).base at hy
rw [range_comp_wL] at hy
obtain ⟨x, hx, hxy⟩ := hy
have hy₀ : (pullback.fst (baseChange R (c) (Localization.Away f)) s).base ((wLsInv hσ f
s).base y) ∈
Set.range (z j).base := by
rw [wLsInv_fst_base, ← hxy, wLinv_base_wL_base]
exact hx
have key := (hfar k s hns).1 ((wLsInv hσ f s).base y) (hz₄ k s j hy₀)
rwa [wLs_base_wLsInv_base] at key