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 MumfordTower (π’ͺ : 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_isProper : βˆ€ n : β„•, IsProper (zb n) zb_flat : βˆ€ n : β„•, Flat (zb n) affineNbhd : βˆ€ (n : β„•) (S : Set (Z n)), S.Finite β†’ βˆƒ U : (Z n).Opens, IsAffineOpen U ∧ S βŠ† (U : Set (Z n)) q : βˆ€ (n : β„•) (B : Type) [CommRing B] [Algebra π’ͺ B], (algebraMap π’ͺ B Ο€) ^ (n + 1) = 0 β†’ (Omega Kβ‚€ Ο€).obj B β†’ (Spec (CommRingCat.of B) ⟢ Z n) q_over : βˆ€ (n : β„•) (B : Type) [CommRing B] [Algebra π’ͺ B] (hB : (algebraMap π’ͺ B Ο€) ^ (n + 1) = 0) (P : (Omega Kβ‚€ Ο€).obj B), q n B hB P ≫ zb n ≫ Spec.map (CommRingCat.ofHom (algebraMap π’ͺ (π’ͺ β§Έ Ideal.span {Ο€ ^ (n + 1)}))) = Spec.map (CommRingCat.ofHom (algebraMap π’ͺ B)) q_natural : βˆ€ (n : β„•) (B : Type) [CommRing B] [Algebra π’ͺ B] (B' : Type) [CommRing B'] [Algebra π’ͺ B'] (hB : (algebraMap π’ͺ B Ο€) ^ (n + 1) = 0) (hB' : (algebraMap π’ͺ B' Ο€) ^ (n + 1) = 0) (Ο† : B →ₐ[π’ͺ] B') (P : (Omega Kβ‚€ Ο€).obj B), q n B' hB' ((Omega Kβ‚€ Ο€).map Ο† P) = Spec.map (CommRingCat.ofHom Ο†.toRingHom) ≫ q n B hB P q_zt : βˆ€ (n : β„•) (B : Type) [CommRing B] [Algebra π’ͺ B] (hB : (algebraMap π’ͺ B Ο€) ^ (n + 1) = 0) (hB' : (algebraMap π’ͺ B Ο€) ^ (n + 1 + 1) = 0) (P : (Omega Kβ‚€ Ο€).obj B), q (n + 1) B hB' P = q n B hB P ≫ zt n q_inv : βˆ€ (n : β„•) (B : Type) [CommRing B] [Algebra π’ͺ B] (hB : (algebraMap π’ͺ B Ο€) ^ (n + 1) = 0) (g : Matrix.GeneralLinearGroup (Fin 2) Kβ‚€), Matrix.ProjGenLinGroup.mk g ∈ N β†’ βˆ€ P P' : (Omega Kβ‚€ Ο€).obj B, DeligneDatum.IsPullback (K := Kβ‚€) (Ο€ := Ο€) B g⁻¹ P P' β†’ q n B hB P' = q n B hB P chart_isOpenImmersion : βˆ€ (h : Matrix.GeneralLinearGroup (Fin 2) Kβ‚€) (n : β„•) (hA : (algebraMap π’ͺ ((chartERing π’ͺ Ο€ r) β§Έ Ideal.span {(algebraMap π’ͺ (chartERing π’ͺ Ο€ r) Ο€) ^ (n + 1)}) Ο€) ^ (n + 1) = 0) (d P : DeligneDatum (K := Kβ‚€) Ο€ ((chartERing π’ͺ Ο€ r) β§Έ Ideal.span {(algebraMap π’ͺ (chartERing π’ͺ Ο€ r) Ο€) ^ (n + 1)})), (d.line (stdFullLattice Kβ‚€) = Submodule.span ((chartERing π’ͺ Ο€ r) β§Έ Ideal.span {(algebraMap π’ͺ (chartERing π’ͺ Ο€ r) Ο€) ^ (n + 1)}) {((Ideal.Quotient.mkₐ π’ͺ (Ideal.span {(algebraMap π’ͺ (chartERing π’ͺ Ο€ r) Ο€) ^ (n + 1)})) (chartERing.ΞΎ π’ͺ Ο€ r)) βŠ—β‚œ[π’ͺ] stdBasisVec Kβ‚€ 0 + (1 : ((chartERing π’ͺ Ο€ r) β§Έ Ideal.span {(algebraMap π’ͺ (chartERing π’ͺ Ο€ r) Ο€) ^ (n + 1)})) βŠ—β‚œ[π’ͺ] stdBasisVec Kβ‚€ 1} ∧ d.line (FullLattice.act g₁ (stdFullLattice Kβ‚€)) = (Submodule.span ((chartERing π’ͺ Ο€ r) β§Έ Ideal.span {(algebraMap π’ͺ (chartERing π’ͺ Ο€ r) Ο€) ^ (n + 1)}) {(1 : ((chartERing π’ͺ Ο€ r) β§Έ Ideal.span {(algebraMap π’ͺ (chartERing π’ͺ Ο€ r) Ο€) ^ (n + 1)})) βŠ—β‚œ[π’ͺ] stdBasisVec Kβ‚€ 0 + ((Ideal.Quotient.mkₐ π’ͺ (Ideal.span {(algebraMap π’ͺ (chartERing π’ͺ Ο€ r) Ο€) ^ (n + 1)})) (chartERing.Ξ· π’ͺ Ο€ r)) βŠ—β‚œ[π’ͺ] stdBasisVec Kβ‚€ 1}).map (actBaseChange ((chartERing π’ͺ Ο€ r) β§Έ Ideal.span {(algebraMap π’ͺ (chartERing π’ͺ Ο€ r) Ο€) ^ (n + 1)}) g₁ (stdFullLattice Kβ‚€)).toLinearMap ∧ d.InEdgeChart Ο€ (FullLattice.act g₁ (stdFullLattice Kβ‚€)) (stdFullLattice Kβ‚€)) β†’ DeligneDatum.IsPullback (K := Kβ‚€) (Ο€ := Ο€) ((chartERing π’ͺ Ο€ r) β§Έ Ideal.span {(algebraMap π’ͺ (chartERing π’ͺ Ο€ r) Ο€) ^ (n + 1)}) h⁻¹ d P β†’ IsOpenImmersion (q n ((chartERing π’ͺ Ο€ r) β§Έ Ideal.span {(algebraMap π’ͺ (chartERing π’ͺ Ο€ r) Ο€) ^ (n + 1)}) hA P) cover : βˆ€ (n : β„•) (hA : (algebraMap π’ͺ ((chartERing π’ͺ Ο€ r) β§Έ Ideal.span {(algebraMap π’ͺ (chartERing π’ͺ Ο€ r) Ο€) ^ (n + 1)}) Ο€) ^ (n + 1) = 0) (z : Z n), βˆƒ (h : Matrix.GeneralLinearGroup (Fin 2) Kβ‚€) (d P : DeligneDatum (K := Kβ‚€) Ο€ ((chartERing π’ͺ Ο€ r) β§Έ Ideal.span {(algebraMap π’ͺ (chartERing π’ͺ Ο€ r) Ο€) ^ (n + 1)})), (d.line (stdFullLattice Kβ‚€) = Submodule.span ((chartERing π’ͺ Ο€ r) β§Έ Ideal.span {(algebraMap π’ͺ (chartERing π’ͺ Ο€ r) Ο€) ^ (n + 1)}) {((Ideal.Quotient.mkₐ π’ͺ (Ideal.span {(algebraMap π’ͺ (chartERing π’ͺ Ο€ r) Ο€) ^ (n + 1)})) (chartERing.ΞΎ π’ͺ Ο€ r)) βŠ—β‚œ[π’ͺ] stdBasisVec Kβ‚€ 0 + (1 : ((chartERing π’ͺ Ο€ r) β§Έ Ideal.span {(algebraMap π’ͺ (chartERing π’ͺ Ο€ r) Ο€) ^ (n + 1)})) βŠ—β‚œ[π’ͺ] stdBasisVec Kβ‚€ 1} ∧ d.line (FullLattice.act g₁ (stdFullLattice Kβ‚€)) = (Submodule.span ((chartERing π’ͺ Ο€ r) β§Έ Ideal.span {(algebraMap π’ͺ (chartERing π’ͺ Ο€ r) Ο€) ^ (n + 1)}) {(1 : ((chartERing π’ͺ Ο€ r) β§Έ Ideal.span {(algebraMap π’ͺ (chartERing π’ͺ Ο€ r) Ο€) ^ (n + 1)})) βŠ—β‚œ[π’ͺ] stdBasisVec Kβ‚€ 0 + ((Ideal.Quotient.mkₐ π’ͺ (Ideal.span {(algebraMap π’ͺ (chartERing π’ͺ Ο€ r) Ο€) ^ (n + 1)})) (chartERing.Ξ· π’ͺ Ο€ r)) βŠ—β‚œ[π’ͺ] stdBasisVec Kβ‚€ 1}).map (actBaseChange ((chartERing π’ͺ Ο€ r) β§Έ Ideal.span {(algebraMap π’ͺ (chartERing π’ͺ Ο€ r) Ο€) ^ (n + 1)}) g₁ (stdFullLattice Kβ‚€)).toLinearMap ∧ d.InEdgeChart Ο€ (FullLattice.act g₁ (stdFullLattice Kβ‚€)) (stdFullLattice Kβ‚€)) ∧ DeligneDatum.IsPullback (K := Kβ‚€) (Ο€ := Ο€) ((chartERing π’ͺ Ο€ r) β§Έ Ideal.span {(algebraMap π’ͺ (chartERing π’ͺ Ο€ r) Ο€) ^ (n + 1)}) h⁻¹ d P ∧ z ∈ Set.range (q n ((chartERing π’ͺ Ο€ r) β§Έ Ideal.span {(algebraMap π’ͺ (chartERing π’ͺ Ο€ r) Ο€) ^ (n + 1)}) hA P).base q_localFib : βˆ€ (n : β„•) (B : Type) [CommRing B] [IsLocalRing B] [Algebra π’ͺ B] (hB : (algebraMap π’ͺ B Ο€) ^ (n + 1) = 0) (P P' : (Omega Kβ‚€ Ο€).obj B), q n B hB P = q n B hB P' ↔ βˆƒ g : Matrix.GeneralLinearGroup (Fin 2) Kβ‚€, Matrix.ProjGenLinGroup.mk g ∈ N ∧ DeligneDatum.IsPullback (K := Kβ‚€) (Ο€ := Ο€) B g⁻¹ P P' q_zarFib : βˆ€ (n : β„•) (B : Type) [CommRing B] [Algebra π’ͺ B] (hB : (algebraMap π’ͺ B Ο€) ^ (n + 1) = 0) (P P' : (Omega Kβ‚€ Ο€).obj B), q n B hB P = q n B hB P' β†’ βˆƒ (ΞΉ : 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_lvl : βˆ€ (n : β„•) (T : Scheme.{0}) (ρ : βˆ€ (B : Type) [CommRing B] [Algebra π’ͺ B], (algebraMap π’ͺ B Ο€) ^ (n + 1) = 0 β†’ (Omega Kβ‚€ Ο€).obj B β†’ (Spec (CommRingCat.of B) ⟢ T)), (βˆ€ (B : Type) [CommRing B] [Algebra π’ͺ B] (B' : Type) [CommRing B'] [Algebra π’ͺ B'] (hB : (algebraMap π’ͺ B Ο€) ^ (n + 1) = 0) (hB' : (algebraMap π’ͺ B' Ο€) ^ (n + 1) = 0) (Ο† : B →ₐ[π’ͺ] B') (P : (Omega Kβ‚€ Ο€).obj B), ρ B' hB' ((Omega Kβ‚€ Ο€).map Ο† P) = Spec.map (CommRingCat.ofHom Ο†.toRingHom) ≫ ρ B hB P) β†’ (βˆ€ (B : Type) [CommRing B] [Algebra π’ͺ B] (hB : (algebraMap π’ͺ B Ο€) ^ (n + 1) = 0) (g : Matrix.GeneralLinearGroup (Fin 2) Kβ‚€), Matrix.ProjGenLinGroup.mk g ∈ N β†’ βˆ€ P P' : (Omega Kβ‚€ Ο€).obj B, DeligneDatum.IsPullback (K := Kβ‚€) (Ο€ := Ο€) B g⁻¹ P P' β†’ ρ B hB P' = ρ B hB P) β†’ βˆƒ! u : Z n ⟢ T, βˆ€ (B : Type) [CommRing B] [Algebra π’ͺ B] (hB : (algebraMap π’ͺ B Ο€) ^ (n + 1) = 0) (P : (Omega Kβ‚€ Ο€).obj B), q n B hB P ≫ u = ρ B hB P end FormalOmega end CerednikDrinfeld