import Definitions.Def_CerednikDrinfeld_FormalUpperHalfPlanePoints import Definitions.Def_CerednikDrinfeld_FormalUpperHalfPlaneChartRings set_option autoImplicit false open scoped TensorProduct MatrixGroups open CategoryTheory AlgebraicGeometry LT.LatticeTree namespace CerednikDrinfeld namespace FormalOmega set_option genInjectivity false in set_option genSizeOfSpec false in structure MumfordGlueCore (π’ͺ : Type) [CommRing π’ͺ] (Ο€ : π’ͺ) (Kβ‚€ : Type) [Field Kβ‚€] [Algebra π’ͺ Kβ‚€] (r : β„•) (g₁ : Matrix.GeneralLinearGroup (Fin 2) Kβ‚€) (N : Subgroup (PGL(2, Kβ‚€))) : Type 1 where Z : β„• β†’ Scheme.{0} zb : βˆ€ n : β„•, Z n ⟢ Spec (CommRingCat.of (π’ͺ β§Έ Ideal.span {Ο€ ^ (n + 1)})) zt : βˆ€ n : β„•, Z n ⟢ Z (n + 1) zt_isPullback : βˆ€ n : β„•, IsPullback (zt n) (zb n) (zb (n + 1)) (Spec.map (CommRingCat.ofHom (Ideal.Quotient.factor (Ideal.span_singleton_le_span_singleton.mpr (pow_dvd_pow Ο€ (Nat.le_succ (n + 1))))))) zb_flat : βˆ€ n : β„•, Flat (zb n) zb_isSeparated : βˆ€ n : β„•, IsSeparated (zb n) ΞΆ : βˆ€ (h : Matrix.GeneralLinearGroup (Fin 2) Kβ‚€) (n : β„•), Spec (CommRingCat.of ((chartERing π’ͺ Ο€ r) β§Έ (Ideal.span {(algebraMap π’ͺ (chartERing π’ͺ Ο€ r) Ο€) ^ (n + 1)}))) ⟢ Z n ΞΆ_over : βˆ€ (h : Matrix.GeneralLinearGroup (Fin 2) Kβ‚€) (n : β„•), ΞΆ h n ≫ zb n ≫ Spec.map (CommRingCat.ofHom (algebraMap π’ͺ (π’ͺ β§Έ Ideal.span {Ο€ ^ (n + 1)}))) = Spec.map (CommRingCat.ofHom (algebraMap π’ͺ ((chartERing π’ͺ Ο€ r) β§Έ (Ideal.span {(algebraMap π’ͺ (chartERing π’ͺ Ο€ r) Ο€) ^ (n + 1)})))) ΞΆ_zt : βˆ€ (h : Matrix.GeneralLinearGroup (Fin 2) Kβ‚€) (n : β„•), ΞΆ h n ≫ zt n = Spec.map (CommRingCat.ofHom (Ideal.Quotient.factor (Ideal.span_singleton_le_span_singleton.mpr (pow_dvd_pow (algebraMap π’ͺ (chartERing π’ͺ Ο€ r) Ο€) (Nat.le_succ (n + 1)))))) ≫ ΞΆ h (n + 1) ΞΆ_isOpenImmersion : βˆ€ (h : Matrix.GeneralLinearGroup (Fin 2) Kβ‚€) (n : β„•), IsOpenImmersion (ΞΆ h n) ΞΆ_cover : βˆ€ n : β„•, βˆƒ S : Finset (Matrix.GeneralLinearGroup (Fin 2) Kβ‚€), βˆ€ z : Z n, βˆƒ h ∈ S, z ∈ Set.range (ΞΆ h n).base ΞΆ_inv : βˆ€ (g h : Matrix.GeneralLinearGroup (Fin 2) Kβ‚€) (n : β„•), Matrix.ProjGenLinGroup.mk g ∈ N β†’ ΞΆ (g * h) n = ΞΆ h n ΞΉ : βˆ€ n : β„•, ((chartERing π’ͺ Ο€ r) β§Έ (Ideal.span {(algebraMap π’ͺ (chartERing π’ͺ Ο€ r) Ο€) ^ (n + 1)})) →ₐ[π’ͺ] (chartVRing π’ͺ r β§Έ Ideal.span {(algebraMap π’ͺ (chartVRing π’ͺ r) Ο€) ^ (n + 1)}) ΞΉ_ΞΎ : βˆ€ n : β„•, ΞΉ n (Ideal.Quotient.mk _ (chartERing.ΞΎ π’ͺ Ο€ r)) = Ideal.Quotient.mk _ (chartVRing.ΞΆ π’ͺ r) ΞΉ_Ξ· : βˆ€ n : β„•, ΞΉ n (Ideal.Quotient.mk _ (chartERing.Ξ· π’ͺ Ο€ r)) * Ideal.Quotient.mk _ (chartVRing.ΞΆ π’ͺ r) = algebraMap π’ͺ (chartVRing π’ͺ r β§Έ Ideal.span {(algebraMap π’ͺ (chartVRing π’ͺ r) Ο€) ^ (n + 1)}) Ο€ ΞΉ_isLocalization : βˆ€ n : β„•, @IsLocalization.Away ((chartERing π’ͺ Ο€ r) β§Έ (Ideal.span {(algebraMap π’ͺ (chartERing π’ͺ Ο€ r) Ο€) ^ (n + 1)})) _ (Ideal.Quotient.mk _ (chartERing.ΞΎ π’ͺ Ο€ r)) (chartVRing π’ͺ r β§Έ Ideal.span {(algebraMap π’ͺ (chartVRing π’ͺ r) Ο€) ^ (n + 1)}) _ (ΞΉ n).toRingHom.toAlgebra Ο„ : βˆ€ (g : Matrix.GeneralLinearGroup (Fin 2) Kβ‚€) (n : β„•), (chartVRing π’ͺ r β§Έ Ideal.span {(algebraMap π’ͺ (chartVRing π’ͺ r) Ο€) ^ (n + 1)}) ≃ₐ[π’ͺ] (chartVRing π’ͺ r β§Έ Ideal.span {(algebraMap π’ͺ (chartVRing π’ͺ r) Ο€) ^ (n + 1)}) Ο„_spec : βˆ€ (g : Matrix.GeneralLinearGroup (Fin 2) Kβ‚€), Vertex.act g (stdVertex π’ͺ Kβ‚€) = (stdVertex π’ͺ Kβ‚€) β†’ βˆ€ (n : β„•) (B : Type) [CommRing B] [Algebra π’ͺ B] (y : (chartVRing π’ͺ r β§Έ Ideal.span {(algebraMap π’ͺ (chartVRing π’ͺ r) Ο€) ^ (n + 1)}) →ₐ[π’ͺ] B) (d d' : DeligneDatum (K := Kβ‚€) Ο€ B), (d.line (stdFullLattice Kβ‚€) = Submodule.span B {(y (Ideal.Quotient.mk _ (chartVRing.ΞΆ π’ͺ r))) βŠ—β‚œ[π’ͺ] stdBasisVec Kβ‚€ 0 + (1 : B) βŠ—β‚œ[π’ͺ] stdBasisVec Kβ‚€ 1} ∧ d.line (FullLattice.act g₁ (stdFullLattice Kβ‚€)) = (Submodule.span B {(y (Ideal.Quotient.mk _ (chartVRing.ΞΆ π’ͺ r))) βŠ—β‚œ[π’ͺ] stdBasisVec Kβ‚€ 0 + (algebraMap π’ͺ B Ο€) βŠ—β‚œ[π’ͺ] stdBasisVec Kβ‚€ 1}).map (actBaseChange B g₁ (stdFullLattice Kβ‚€)).toLinearMap ∧ d.InEdgeChart Ο€ (FullLattice.act g₁ (stdFullLattice Kβ‚€)) (stdFullLattice Kβ‚€)) β†’ (d'.line (stdFullLattice Kβ‚€) = Submodule.span B {((y.comp (Ο„ g n).toAlgHom) (Ideal.Quotient.mk _ (chartVRing.ΞΆ π’ͺ r))) βŠ—β‚œ[π’ͺ] stdBasisVec Kβ‚€ 0 + (1 : B) βŠ—β‚œ[π’ͺ] stdBasisVec Kβ‚€ 1} ∧ d'.line (FullLattice.act g₁ (stdFullLattice Kβ‚€)) = (Submodule.span B {((y.comp (Ο„ g n).toAlgHom) (Ideal.Quotient.mk _ (chartVRing.ΞΆ π’ͺ r))) βŠ—β‚œ[π’ͺ] stdBasisVec Kβ‚€ 0 + (algebraMap π’ͺ B Ο€) βŠ—β‚œ[π’ͺ] stdBasisVec Kβ‚€ 1}).map (actBaseChange B g₁ (stdFullLattice Kβ‚€)).toLinearMap ∧ d'.InEdgeChart Ο€ (FullLattice.act g₁ (stdFullLattice Kβ‚€)) (stdFullLattice Kβ‚€)) β†’ DeligneDatum.IsPullback (K := Kβ‚€) (Ο€ := Ο€) B g⁻¹ d d' Ξ± : βˆ€ (g : Matrix.GeneralLinearGroup (Fin 2) Kβ‚€) (n : β„•), ((chartERing π’ͺ Ο€ r) β§Έ (Ideal.span {(algebraMap π’ͺ (chartERing π’ͺ Ο€ r) Ο€) ^ (n + 1)})) ≃ₐ[π’ͺ] ((chartERing π’ͺ Ο€ r) β§Έ (Ideal.span {(algebraMap π’ͺ (chartERing π’ͺ Ο€ r) Ο€) ^ (n + 1)})) Ξ±_spec : βˆ€ (g : Matrix.GeneralLinearGroup (Fin 2) Kβ‚€), (Vertex.act g (stdVertex π’ͺ Kβ‚€) = (stdVertex π’ͺ Kβ‚€) ∧ Vertex.act g (Vertex.act g₁ (stdVertex π’ͺ Kβ‚€)) = (Vertex.act g₁ (stdVertex π’ͺ Kβ‚€))) ∨ (Vertex.act g (stdVertex π’ͺ Kβ‚€) = (Vertex.act g₁ (stdVertex π’ͺ Kβ‚€)) ∧ Vertex.act g (Vertex.act g₁ (stdVertex π’ͺ Kβ‚€)) = (stdVertex π’ͺ Kβ‚€)) β†’ βˆ€ (n : β„•) (B : Type) [CommRing B] [Algebra π’ͺ B] (xq : ((chartERing π’ͺ Ο€ r) β§Έ (Ideal.span {(algebraMap π’ͺ (chartERing π’ͺ Ο€ r) Ο€) ^ (n + 1)})) →ₐ[π’ͺ] B) (d d' : DeligneDatum (K := Kβ‚€) Ο€ B), (d.line (stdFullLattice Kβ‚€) = Submodule.span B {((xq.comp (Ideal.Quotient.mkₐ π’ͺ (Ideal.span {(algebraMap π’ͺ (chartERing π’ͺ Ο€ r) Ο€) ^ (n + 1)}))) (chartERing.ΞΎ π’ͺ Ο€ r)) βŠ—β‚œ[π’ͺ] stdBasisVec Kβ‚€ 0 + (1 : B) βŠ—β‚œ[π’ͺ] stdBasisVec Kβ‚€ 1} ∧ d.line (FullLattice.act g₁ (stdFullLattice Kβ‚€)) = (Submodule.span B {(1 : B) βŠ—β‚œ[π’ͺ] stdBasisVec Kβ‚€ 0 + ((xq.comp (Ideal.Quotient.mkₐ π’ͺ (Ideal.span {(algebraMap π’ͺ (chartERing π’ͺ Ο€ r) Ο€) ^ (n + 1)}))) (chartERing.Ξ· π’ͺ Ο€ r)) βŠ—β‚œ[π’ͺ] stdBasisVec Kβ‚€ 1}).map (actBaseChange B g₁ (stdFullLattice Kβ‚€)).toLinearMap ∧ d.InEdgeChart Ο€ (FullLattice.act g₁ (stdFullLattice Kβ‚€)) (stdFullLattice Kβ‚€)) β†’ (d'.line (stdFullLattice Kβ‚€) = Submodule.span B {(((xq.comp (Ξ± g n).toAlgHom).comp (Ideal.Quotient.mkₐ π’ͺ (Ideal.span {(algebraMap π’ͺ (chartERing π’ͺ Ο€ r) Ο€) ^ (n + 1)}))) (chartERing.ΞΎ π’ͺ Ο€ r)) βŠ—β‚œ[π’ͺ] stdBasisVec Kβ‚€ 0 + (1 : B) βŠ—β‚œ[π’ͺ] stdBasisVec Kβ‚€ 1} ∧ d'.line (FullLattice.act g₁ (stdFullLattice Kβ‚€)) = (Submodule.span B {(1 : B) βŠ—β‚œ[π’ͺ] stdBasisVec Kβ‚€ 0 + (((xq.comp (Ξ± g n).toAlgHom).comp (Ideal.Quotient.mkₐ π’ͺ (Ideal.span {(algebraMap π’ͺ (chartERing π’ͺ Ο€ r) Ο€) ^ (n + 1)}))) (chartERing.Ξ· π’ͺ Ο€ r)) βŠ—β‚œ[π’ͺ] stdBasisVec Kβ‚€ 1}).map (actBaseChange B g₁ (stdFullLattice Kβ‚€)).toLinearMap ∧ d'.InEdgeChart Ο€ (FullLattice.act g₁ (stdFullLattice Kβ‚€)) (stdFullLattice Kβ‚€)) β†’ DeligneDatum.IsPullback (K := Kβ‚€) (Ο€ := Ο€) B g⁻¹ d d' ΞΆ_edge : βˆ€ (h g : Matrix.GeneralLinearGroup (Fin 2) Kβ‚€) (n : β„•), (Vertex.act g (stdVertex π’ͺ Kβ‚€) = (stdVertex π’ͺ Kβ‚€) ∧ Vertex.act g (Vertex.act g₁ (stdVertex π’ͺ Kβ‚€)) = (Vertex.act g₁ (stdVertex π’ͺ Kβ‚€))) ∨ (Vertex.act g (stdVertex π’ͺ Kβ‚€) = (Vertex.act g₁ (stdVertex π’ͺ Kβ‚€)) ∧ Vertex.act g (Vertex.act g₁ (stdVertex π’ͺ Kβ‚€)) = (stdVertex π’ͺ Kβ‚€)) β†’ ΞΆ (h * g) n = Spec.map (CommRingCat.ofHom (Ξ± g n).toAlgHom.toRingHom) ≫ ΞΆ h n ΞΆ_vertex : βˆ€ (h g : Matrix.GeneralLinearGroup (Fin 2) Kβ‚€) (n : β„•), Vertex.act g (stdVertex π’ͺ Kβ‚€) = (stdVertex π’ͺ Kβ‚€) β†’ Spec.map (CommRingCat.ofHom (ΞΉ n).toRingHom) ≫ ΞΆ (h * g) n = Spec.map (CommRingCat.ofHom (Ο„ g n).toAlgHom.toRingHom) ≫ Spec.map (CommRingCat.ofHom (ΞΉ n).toRingHom) ≫ ΞΆ h n ΞΆ_preimage_le : βˆ€ (h h' : Matrix.GeneralLinearGroup (Fin 2) Kβ‚€) (n : β„•), (βˆ€ g : Matrix.GeneralLinearGroup (Fin 2) Kβ‚€, Matrix.ProjGenLinGroup.mk g ∈ N β†’ Β¬ ((Vertex.act h' (stdVertex π’ͺ Kβ‚€) = Vertex.act (g * h) (stdVertex π’ͺ Kβ‚€) ∧ Vertex.act h' (Vertex.act g₁ (stdVertex π’ͺ Kβ‚€)) = Vertex.act (g * h) (Vertex.act g₁ (stdVertex π’ͺ Kβ‚€))) ∨ (Vertex.act h' (stdVertex π’ͺ Kβ‚€) = Vertex.act (g * h) (Vertex.act g₁ (stdVertex π’ͺ Kβ‚€)) ∧ Vertex.act h' (Vertex.act g₁ (stdVertex π’ͺ Kβ‚€)) = Vertex.act (g * h) (stdVertex π’ͺ Kβ‚€)))) β†’ (ΞΆ h' n) ⁻¹ᡁ (@Scheme.Hom.opensRange _ _ (ΞΆ h n) (ΞΆ_isOpenImmersion h n)) ≀ (⨆ (_ : βˆƒ g : Matrix.GeneralLinearGroup (Fin 2) Kβ‚€, Matrix.ProjGenLinGroup.mk g ∈ N ∧ (Vertex.act h' (stdVertex π’ͺ Kβ‚€) = Vertex.act (g * h) (stdVertex π’ͺ Kβ‚€) ∨ Vertex.act h' (stdVertex π’ͺ Kβ‚€) = Vertex.act (g * h) (Vertex.act g₁ (stdVertex π’ͺ Kβ‚€)))), PrimeSpectrum.basicOpen (Ideal.Quotient.mk (Ideal.span {(algebraMap π’ͺ (chartERing π’ͺ Ο€ r) Ο€) ^ (n + 1)}) (chartERing.ΞΎ π’ͺ Ο€ r))) βŠ” (⨆ (_ : βˆƒ g : Matrix.GeneralLinearGroup (Fin 2) Kβ‚€, Matrix.ProjGenLinGroup.mk g ∈ N ∧ (Vertex.act h' (Vertex.act g₁ (stdVertex π’ͺ Kβ‚€)) = Vertex.act (g * h) (stdVertex π’ͺ Kβ‚€) ∨ Vertex.act h' (Vertex.act g₁ (stdVertex π’ͺ Kβ‚€)) = Vertex.act (g * h) (Vertex.act g₁ (stdVertex π’ͺ Kβ‚€)))), PrimeSpectrum.basicOpen (Ideal.Quotient.mk (Ideal.span {(algebraMap π’ͺ (chartERing π’ͺ Ο€ r) Ο€) ^ (n + 1)}) (chartERing.Ξ· π’ͺ Ο€ r))) desc : βˆ€ (n : β„•) (T : Scheme.{0}) (t : Matrix.GeneralLinearGroup (Fin 2) Kβ‚€ β†’ (Spec (CommRingCat.of ((chartERing π’ͺ Ο€ r) β§Έ (Ideal.span {(algebraMap π’ͺ (chartERing π’ͺ Ο€ r) Ο€) ^ (n + 1)}))) ⟢ T)), (βˆ€ g h : Matrix.GeneralLinearGroup (Fin 2) Kβ‚€, Matrix.ProjGenLinGroup.mk g ∈ N β†’ t (g * h) = t h) β†’ (βˆ€ h g : Matrix.GeneralLinearGroup (Fin 2) Kβ‚€, (Vertex.act g (stdVertex π’ͺ Kβ‚€) = (stdVertex π’ͺ Kβ‚€) ∧ Vertex.act g (Vertex.act g₁ (stdVertex π’ͺ Kβ‚€)) = (Vertex.act g₁ (stdVertex π’ͺ Kβ‚€))) ∨ (Vertex.act g (stdVertex π’ͺ Kβ‚€) = (Vertex.act g₁ (stdVertex π’ͺ Kβ‚€)) ∧ Vertex.act g (Vertex.act g₁ (stdVertex π’ͺ Kβ‚€)) = (stdVertex π’ͺ Kβ‚€)) β†’ t (h * g) = Spec.map (CommRingCat.ofHom (Ξ± g n).toAlgHom.toRingHom) ≫ t h) β†’ (βˆ€ h g : Matrix.GeneralLinearGroup (Fin 2) Kβ‚€, Vertex.act g (stdVertex π’ͺ Kβ‚€) = (stdVertex π’ͺ Kβ‚€) β†’ Spec.map (CommRingCat.ofHom (ΞΉ n).toRingHom) ≫ t (h * g) = Spec.map (CommRingCat.ofHom (Ο„ g n).toAlgHom.toRingHom) ≫ Spec.map (CommRingCat.ofHom (ΞΉ n).toRingHom) ≫ t h) β†’ βˆƒ! u : Z n ⟢ T, βˆ€ h : Matrix.GeneralLinearGroup (Fin 2) Kβ‚€, ΞΆ h n ≫ u = t h end FormalOmega end CerednikDrinfeld