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 MumfordGlueLevel (π’ͺ : Type) [CommRing π’ͺ] (Ο€ : π’ͺ) (Kβ‚€ : Type) [Field Kβ‚€] [Algebra π’ͺ Kβ‚€] (r : β„•) (g₁ : Matrix.GeneralLinearGroup (Fin 2) Kβ‚€) (N : Subgroup (PGL(2, Kβ‚€))) (n : β„•) : Type 1 where Z : Scheme.{0} zb : Z ⟢ Spec (CommRingCat.of (π’ͺ β§Έ Ideal.span {Ο€ ^ (n + 1)})) zb_flat : Flat zb zb_isSeparated : IsSeparated zb ΞΆ : βˆ€ (h : Matrix.GeneralLinearGroup (Fin 2) Kβ‚€), Spec (CommRingCat.of ((chartERing π’ͺ Ο€ r) β§Έ (Ideal.span {(algebraMap π’ͺ (chartERing π’ͺ Ο€ r) Ο€) ^ (n + 1)}))) ⟢ Z ΞΆ_over : βˆ€ (h : Matrix.GeneralLinearGroup (Fin 2) Kβ‚€), ΞΆ h ≫ zb ≫ Spec.map (CommRingCat.ofHom (algebraMap π’ͺ (π’ͺ β§Έ Ideal.span {Ο€ ^ (n + 1)}))) = Spec.map (CommRingCat.ofHom (algebraMap π’ͺ ((chartERing π’ͺ Ο€ r) β§Έ (Ideal.span {(algebraMap π’ͺ (chartERing π’ͺ Ο€ r) Ο€) ^ (n + 1)})))) ΞΆ_isOpenImmersion : βˆ€ (h : Matrix.GeneralLinearGroup (Fin 2) Kβ‚€), IsOpenImmersion (ΞΆ h) ΞΆ_cover : βˆƒ S : Finset (Matrix.GeneralLinearGroup (Fin 2) Kβ‚€), βˆ€ z : Z, βˆƒ h ∈ S, z ∈ Set.range (ΞΆ h).base ΞΆ_inv : βˆ€ (g h : Matrix.GeneralLinearGroup (Fin 2) Kβ‚€), Matrix.ProjGenLinGroup.mk g ∈ N β†’ ΞΆ (g * h) = ΞΆ h ΞΉ : ((chartERing π’ͺ Ο€ r) β§Έ (Ideal.span {(algebraMap π’ͺ (chartERing π’ͺ Ο€ r) Ο€) ^ (n + 1)})) →ₐ[π’ͺ] (chartVRing π’ͺ r β§Έ Ideal.span {(algebraMap π’ͺ (chartVRing π’ͺ r) Ο€) ^ (n + 1)}) ΞΉ_ΞΎ : ΞΉ (Ideal.Quotient.mk _ (chartERing.ΞΎ π’ͺ Ο€ r)) = Ideal.Quotient.mk _ (chartVRing.ΞΆ π’ͺ r) ΞΉ_Ξ· : ΞΉ (Ideal.Quotient.mk _ (chartERing.Ξ· π’ͺ Ο€ r)) * Ideal.Quotient.mk _ (chartVRing.ΞΆ π’ͺ r) = algebraMap π’ͺ (chartVRing π’ͺ r β§Έ Ideal.span {(algebraMap π’ͺ (chartVRing π’ͺ r) Ο€) ^ (n + 1)}) Ο€ ΞΉ_isLocalization : @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)}) _ ΞΉ.toRingHom.toAlgebra Ο„ : βˆ€ (g : Matrix.GeneralLinearGroup (Fin 2) Kβ‚€), (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β‚€) β†’ βˆ€ (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).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).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β‚€), ((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β‚€)) β†’ βˆ€ (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).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).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β‚€), (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) = Spec.map (CommRingCat.ofHom (Ξ± g).toAlgHom.toRingHom) ≫ ΞΆ h ΞΆ_vertex : βˆ€ (h g : Matrix.GeneralLinearGroup (Fin 2) Kβ‚€), Vertex.act g (stdVertex π’ͺ Kβ‚€) = (stdVertex π’ͺ Kβ‚€) β†’ Spec.map (CommRingCat.ofHom ΞΉ.toRingHom) ≫ ΞΆ (h * g) = Spec.map (CommRingCat.ofHom (Ο„ g).toAlgHom.toRingHom) ≫ Spec.map (CommRingCat.ofHom ΞΉ.toRingHom) ≫ ΞΆ h ΞΆ_preimage_le : βˆ€ (h h' : Matrix.GeneralLinearGroup (Fin 2) Kβ‚€), (βˆ€ 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') ⁻¹ᡁ (@Scheme.Hom.opensRange _ _ (ΞΆ h) (ΞΆ_isOpenImmersion h)) ≀ (⨆ (_ : βˆƒ 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 : βˆ€ (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).toAlgHom.toRingHom) ≫ t h) β†’ (βˆ€ h g : Matrix.GeneralLinearGroup (Fin 2) Kβ‚€, Vertex.act g (stdVertex π’ͺ Kβ‚€) = (stdVertex π’ͺ Kβ‚€) β†’ Spec.map (CommRingCat.ofHom ΞΉ.toRingHom) ≫ t (h * g) = Spec.map (CommRingCat.ofHom (Ο„ g).toAlgHom.toRingHom) ≫ Spec.map (CommRingCat.ofHom ΞΉ.toRingHom) ≫ t h) β†’ βˆƒ! u : Z ⟢ T, βˆ€ h : Matrix.GeneralLinearGroup (Fin 2) Kβ‚€, ΞΆ h ≫ u = t h end FormalOmega end CerednikDrinfeld