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 MumfordGlue (π’ͺ : 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 ΞΆ_rel : βˆ€ (n : β„•) (B : Type) [CommRing B] [Algebra π’ͺ B] (h h' : Matrix.GeneralLinearGroup (Fin 2) Kβ‚€) (xq xq' : ((chartERing π’ͺ Ο€ r) β§Έ (Ideal.span {(algebraMap π’ͺ (chartERing π’ͺ Ο€ r) Ο€) ^ (n + 1)})) →ₐ[π’ͺ] B) (d d' P P' : 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 (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β‚€)) β†’ DeligneDatum.IsPullback (K := Kβ‚€) (Ο€ := Ο€) B h⁻¹ d P β†’ DeligneDatum.IsPullback (K := Kβ‚€) (Ο€ := Ο€) B h'⁻¹ d' P' β†’ (βˆƒ g : Matrix.GeneralLinearGroup (Fin 2) Kβ‚€, Matrix.ProjGenLinGroup.mk g ∈ N ∧ DeligneDatum.IsPullback (K := Kβ‚€) (Ο€ := Ο€) B g⁻¹ P P') β†’ Spec.map (CommRingCat.ofHom xq.toRingHom) ≫ ΞΆ h n = Spec.map (CommRingCat.ofHom xq'.toRingHom) ≫ ΞΆ h' n ΞΆ_overlap_local : βˆ€ (n : β„•) (B : Type) [CommRing B] [IsLocalRing B] [Algebra π’ͺ B] (h h' : Matrix.GeneralLinearGroup (Fin 2) Kβ‚€) (xq xq' : ((chartERing π’ͺ Ο€ r) β§Έ (Ideal.span {(algebraMap π’ͺ (chartERing π’ͺ Ο€ r) Ο€) ^ (n + 1)})) →ₐ[π’ͺ] B) (d d' P P' : 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 (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β‚€)) β†’ DeligneDatum.IsPullback (K := Kβ‚€) (Ο€ := Ο€) B h⁻¹ d P β†’ DeligneDatum.IsPullback (K := Kβ‚€) (Ο€ := Ο€) B h'⁻¹ d' P' β†’ (Spec.map (CommRingCat.ofHom xq.toRingHom) ≫ ΞΆ h n = Spec.map (CommRingCat.ofHom xq'.toRingHom) ≫ ΞΆ h' n ↔ βˆƒ g : Matrix.GeneralLinearGroup (Fin 2) Kβ‚€, Matrix.ProjGenLinGroup.mk g ∈ N ∧ DeligneDatum.IsPullback (K := Kβ‚€) (Ο€ := Ο€) B g⁻¹ P P') ΞΆ_overlap_zar : βˆ€ (n : β„•) (B : Type) [CommRing B] [Algebra π’ͺ B] (h h' : Matrix.GeneralLinearGroup (Fin 2) Kβ‚€) (xq xq' : ((chartERing π’ͺ Ο€ r) β§Έ (Ideal.span {(algebraMap π’ͺ (chartERing π’ͺ Ο€ r) Ο€) ^ (n + 1)})) →ₐ[π’ͺ] B) (d d' P P' : 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 (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β‚€)) β†’ DeligneDatum.IsPullback (K := Kβ‚€) (Ο€ := Ο€) B h⁻¹ d P β†’ DeligneDatum.IsPullback (K := Kβ‚€) (Ο€ := Ο€) B h'⁻¹ d' P' β†’ Spec.map (CommRingCat.ofHom xq.toRingHom) ≫ ΞΆ h n = Spec.map (CommRingCat.ofHom xq'.toRingHom) ≫ ΞΆ h' n β†’ βˆƒ (ΞΉ : Type) (_ : Finite ΞΉ) (f : ΞΉ β†’ B), Ideal.span (Set.range f) = ⊀ ∧ βˆ€ (i : ΞΉ) (C : Type) [CommRing C] [Algebra π’ͺ C] [Algebra B C] [IsScalarTower π’ͺ B C] [IsLocalization.Away (f i) C], βˆƒ g : Matrix.GeneralLinearGroup (Fin 2) Kβ‚€, Matrix.ProjGenLinGroup.mk g ∈ N ∧ DeligneDatum.IsPullback (K := Kβ‚€) (Ο€ := Ο€) C g⁻¹ ((Omega Kβ‚€ Ο€).map (IsScalarTower.toAlgHom π’ͺ B C) P) ((Omega Kβ‚€ Ο€).map (IsScalarTower.toAlgHom π’ͺ B C) P') ΞΆ_univ : βˆ€ (n : β„•) (T : Scheme.{0}) (t : Matrix.GeneralLinearGroup (Fin 2) Kβ‚€ β†’ (Spec (CommRingCat.of ((chartERing π’ͺ Ο€ r) β§Έ (Ideal.span {(algebraMap π’ͺ (chartERing π’ͺ Ο€ r) Ο€) ^ (n + 1)}))) ⟢ T)), (βˆ€ (B : Type) [CommRing B] [Algebra π’ͺ B] (h h' : Matrix.GeneralLinearGroup (Fin 2) Kβ‚€) (xq xq' : ((chartERing π’ͺ Ο€ r) β§Έ (Ideal.span {(algebraMap π’ͺ (chartERing π’ͺ Ο€ r) Ο€) ^ (n + 1)})) →ₐ[π’ͺ] B) (d d' P P' : 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 (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β‚€)) β†’ DeligneDatum.IsPullback (K := Kβ‚€) (Ο€ := Ο€) B h⁻¹ d P β†’ DeligneDatum.IsPullback (K := Kβ‚€) (Ο€ := Ο€) B h'⁻¹ d' P' β†’ (βˆƒ g : Matrix.GeneralLinearGroup (Fin 2) Kβ‚€, Matrix.ProjGenLinGroup.mk g ∈ N ∧ DeligneDatum.IsPullback (K := Kβ‚€) (Ο€ := Ο€) B g⁻¹ P P') β†’ Spec.map (CommRingCat.ofHom xq.toRingHom) ≫ t h = Spec.map (CommRingCat.ofHom xq'.toRingHom) ≫ t h') β†’ βˆƒ! u : Z n ⟢ T, βˆ€ h : Matrix.GeneralLinearGroup (Fin 2) Kβ‚€, ΞΆ h n ≫ u = t h end FormalOmega end CerednikDrinfeld