import Mathlib import Definitions.Def_ModularCurve_DRModelPackage import Definitions.Def_ModularCurve_DRModelLegTwoInput import Definitions.Def_AlgebraicGeometry_RelativePicardFunctor import Definitions.Def_AlgebraicGeometry_RepresentsRelSubPic import Definitions.Def_AlgebraicGeometry_RelPicardAlgEquivZeroCut import Definitions.Def_AlgebraicGeometry_RelPicardChartSections import Definitions.Def_AlgebraicGeometry_SmoothProperCurveBase import Definitions.Def_AlgebraicGeometry_TwoAffineOpenCover import Definitions.Def_AlgebraicGeometry_TwoChartCechSectionsOf import Definitions.Def_AlgebraicCurve_CurveModel import Definitions.Def_AlgebraicCurve_RatFuncPlaces import Definitions.Def_AlgebraicCurve_RatFuncPlaceInfty import Definitions.Def_JacJ1Iface import Definitions.Def_SheafOfModules_Monoidal set_option autoImplicit false open CategoryTheory CategoryTheory.Limits MonoidalCategory AlgebraicGeometry AlgebraicGeometry.RelPicard AlgebraicGeometry.SmoothProperCurve NeronModelInfra GoodReductionJacobian ModularCurve AlgebraicCurve IsLocalRing noncomputable section namespace ModularCurve variable {p : β„•} [Fact p.Prime] structure DRModelPackage.LegTwoInputV2 (𝔛 : DRModelPackage p) extends 𝔛.LegTwoInput where hbadV5 : βˆ€ (k : Type) [Field k] [IsAlgClosed k] [DecidableEq (RatFunc k)] (s : Spec (CommRingCat.of k) ⟢ Spec (CommRingCat.of β„€)), Β¬ Smooth (pullback.snd (DRModel.toBase p) s) β†’ βˆƒ (M₁ Mβ‚‚ : CurveModel k (RatFunc k)) (i₁ : M₁.C ⟢ pullback (DRModel.toBase p) s) (iβ‚‚ : Mβ‚‚.C ⟢ pullback (DRModel.toBase p) s) (_ : IsClosedImmersion i₁) (_ : IsClosedImmersion iβ‚‚) (n : β„•) (a b : Fin n β†’ kΛ£) (𝒲₀ : (pullback (DRModel.toBase p) s).TwoAffineOpenCover), i₁ ≫ pullback.snd (DRModel.toBase p) s = M₁.toBase ∧ iβ‚‚ ≫ pullback.snd (DRModel.toBase p) s = Mβ‚‚.toBase ∧ Set.range i₁.base βˆͺ Set.range iβ‚‚.base = Set.univ ∧ Function.Injective a ∧ (βˆ€ i, i₁.base (M₁.placeEquiv.symm (RationalFunctionField.placeOfPoint k (a i : k))).1 = iβ‚‚.base (Mβ‚‚.placeEquiv.symm (RationalFunctionField.placeOfPoint k (b i : k))).1) ∧ (βˆ€ (P₁ : M₁.C) (Qβ‚‚ : Mβ‚‚.C), i₁.base P₁ = iβ‚‚.base Qβ‚‚ β†’ βˆƒ i, P₁ = (M₁.placeEquiv.symm (RationalFunctionField.placeOfPoint k (a i : k))).1 ∧ Qβ‚‚ = (Mβ‚‚.placeEquiv.symm (RationalFunctionField.placeOfPoint k (b i : k))).1) ∧ IsReduced (pullback i₁ iβ‚‚) ∧ ((i₁ ⁻¹ᡁ 𝒲₀.U0 : M₁.C.Opens) : Set M₁.C) = {(M₁.placeEquiv.symm (RationalFunctionField.placeInfty k)).1}ᢜ ∧ ((iβ‚‚ ⁻¹ᡁ 𝒲₀.U0 : Mβ‚‚.C.Opens) : Set Mβ‚‚.C) = {(Mβ‚‚.placeEquiv.symm (RationalFunctionField.placeInfty k)).1}ᢜ ∧ ((i₁ ⁻¹ᡁ 𝒲₀.U1 : M₁.C.Opens) : Set M₁.C) = {(M₁.placeEquiv.symm (RationalFunctionField.placeOfPoint k 0)).1}ᢜ ∧ ((iβ‚‚ ⁻¹ᡁ 𝒲₀.U1 : Mβ‚‚.C.Opens) : Set Mβ‚‚.C) = {(Mβ‚‚.placeEquiv.symm (RationalFunctionField.placeOfPoint k 0)).1}ᢜ ∧ i₁.base (M₁.placeEquiv.symm (RationalFunctionField.placeInfty k)).1 = ((sectionFibrePoint 𝔛.Ξ΅inf s).1).base (IsLocalRing.closedPoint k) ∧ Set.range i₁.base ∩ ((pullback.fst (DRModel.toBase p) s ⁻¹ᡁ 𝔛.smoothLocus : (pullback (DRModel.toBase p) s).Opens) : Set β†₯(pullback (DRModel.toBase p) s)) = connectedComponentIn ((pullback.fst (DRModel.toBase p) s ⁻¹ᡁ 𝔛.smoothLocus : (pullback (DRModel.toBase p) s).Opens) : Set β†₯(pullback (DRModel.toBase p) s)) (((sectionFibrePoint 𝔛.Ξ΅inf s).1).base (IsLocalRing.closedPoint k)) ∧ (βˆ€ i, i₁.base (M₁.placeEquiv.symm (RationalFunctionField.placeOfPoint k (a i : k))).1 βˆ‰ (pullback.fst (DRModel.toBase p) s ⁻¹ᡁ 𝔛.smoothLocus : (pullback (DRModel.toBase p) s).Opens)) ∧ (βˆ€ y : β†₯(pullback (DRModel.toBase p) s), (βˆ€ i, y β‰  i₁.base (M₁.placeEquiv.symm (RationalFunctionField.placeOfPoint k (a i : k))).1) β†’ y ∈ (pullback.fst (DRModel.toBase p) s ⁻¹ᡁ 𝔛.smoothLocus : (pullback (DRModel.toBase p) s).Opens)) ∧ (βˆƒ W₁ : (pullback (DRModel.toBase p) s).Opens, (W₁ : Set β†₯(pullback (DRModel.toBase p) s)) = (Set.range iβ‚‚.base)ᢜ ∧ IsOpenImmersion ((i₁ ⁻¹ᡁ W₁).ΞΉ ≫ i₁)) end ModularCurve end