import Mathlib import Definitions.Def_CerednikDrinfeld_MumfordTower set_option autoImplicit false open scoped TensorProduct MatrixGroups open CategoryTheory AlgebraicGeometry LT.LatticeTree CerednikDrinfeld CerednikDrinfeld.FormalOmega CerednikDrinfeld.Omega namespace CerednikDrinfeld namespace FormalOmega namespace MumfordTower structure NrPresentation {r : β„•} (π’ͺ : Type) [CommRing π’ͺ] (Ο€ : π’ͺ) (Kβ‚€ : Type) [Field Kβ‚€] [Algebra π’ͺ Kβ‚€] (g₁ : Matrix.GeneralLinearGroup (Fin 2) Kβ‚€) (N : Subgroup (PGL(2, Kβ‚€))) (DM : MumfordTower π’ͺ Ο€ Kβ‚€ r g₁ N) (Onr : Type) [CommRing Onr] [Algebra π’ͺ Onr] (Fr : Onr ≃ₐ[π’ͺ] Onr) (X : β„• β†’ Scheme.{0}) (xb : βˆ€ n : β„•, X n ⟢ Spec (CommRingCat.of (π’ͺ β§Έ Ideal.span {Ο€ ^ (n + 1)}))) (xt : βˆ€ n : β„•, X n ⟢ X (n + 1)) (Gβ‚‚ : Type) [Group Gβ‚‚] (a : βˆ€ n : β„•, Gβ‚‚ β†’* Aut (X n)) (pr₁ : βˆ€ n : β„•, X n ⟢ DM.Z n) (prβ‚‚ : βˆ€ n : β„•, X n ⟢ Spec (CommRingCat.of (β†₯(AlgHom.equalizer ((Fr.trans Fr : Onr ≃ₐ[π’ͺ] Onr) : Onr →ₐ[π’ͺ] Onr) (AlgHom.id π’ͺ Onr)) β§Έ Ideal.span {(algebraMap π’ͺ β†₯(AlgHom.equalizer ((Fr.trans Fr : Onr ≃ₐ[π’ͺ] Onr) : Onr →ₐ[π’ͺ] Onr) (AlgHom.id π’ͺ Onr)) Ο€) ^ (n + 1)}))) (E : Subgroup Gβ‚‚) : Type 1 where X' : β„• β†’ Scheme.{0} xb' : βˆ€ n : β„•, X' n ⟢ Spec (CommRingCat.of (Onr β§Έ Ideal.span {(algebraMap π’ͺ Onr Ο€) ^ (n + 1)})) xt' : βˆ€ n : β„•, X' n ⟢ X' (n + 1) a' : βˆ€ n : β„•, Gβ‚‚ β†’* Aut (X' n) qX : βˆ€ n : β„•, X' n ⟢ X n hq : βˆ€ n : β„•, IsPullback (qX n) (xb' n) (xb n) (Spec.map (CommRingCat.ofHom (Ideal.quotientMap (Ideal.span {(algebraMap π’ͺ Onr Ο€) ^ (n + 1)}) (algebraMap π’ͺ Onr) (by rw [Ideal.span_le, Set.singleton_subset_iff, SetLike.mem_coe, Ideal.mem_comap, map_pow]; exact Ideal.subset_span rfl)))) hcart' : βˆ€ n : β„•, IsPullback (xt' n) (xb' n) (xb' (n + 1)) (Spec.map (CommRingCat.ofHom (Ideal.Quotient.factor (Ideal.span_singleton_le_span_singleton.mpr (pow_dvd_pow (algebraMap π’ͺ Onr Ο€) (Nat.le_succ (n + 1))))))) hq_xt : βˆ€ n : β„•, xt' n ≫ qX (n + 1) = qX n ≫ xt n hq_a : βˆ€ (n : β„•) (g : Gβ‚‚), (a' n g).hom ≫ qX n = qX n ≫ (a n g).hom ha'_over : βˆ€ (n : β„•) (g : Gβ‚‚), (a' n g).hom ≫ xb' n = xb' n ΞΊ' : βˆ€ (h : Matrix.GeneralLinearGroup (Fin 2) Kβ‚€) (n : β„•), Spec (CommRingCat.of ((chartERing Onr (algebraMap π’ͺ Onr Ο€) r) β§Έ Ideal.span {(algebraMap Onr (chartERing Onr (algebraMap π’ͺ Onr Ο€) r) (algebraMap π’ͺ Onr Ο€)) ^ (n + 1)})) ⟢ X' n ΞΊ'_pr₁ : βˆ€ (h : Matrix.GeneralLinearGroup (Fin 2) Kβ‚€) (n : β„•) (B : Type) [CommRing B] [Algebra π’ͺ B] [Algebra Onr B] [IsScalarTower π’ͺ Onr B] (hB : (algebraMap π’ͺ B Ο€) ^ (n + 1) = 0) (xbar : ((chartERing Onr (algebraMap π’ͺ Onr Ο€) r) β§Έ Ideal.span {(algebraMap Onr (chartERing Onr (algebraMap π’ͺ Onr Ο€) r) (algebraMap π’ͺ Onr Ο€)) ^ (n + 1)}) →ₐ[Onr] B) (d P : DeligneDatum (K := Kβ‚€) Ο€ B), (d.line (stdFullLattice Kβ‚€) = Submodule.span B {(xbar (Ideal.Quotient.mk (Ideal.span {(algebraMap Onr (chartERing Onr (algebraMap π’ͺ Onr Ο€) r) (algebraMap π’ͺ Onr Ο€)) ^ (n + 1)}) (chartERing.ΞΎ Onr (algebraMap π’ͺ Onr Ο€) r))) βŠ—β‚œ[π’ͺ] stdBasisVec Kβ‚€ 0 + (1 : B) βŠ—β‚œ[π’ͺ] stdBasisVec Kβ‚€ 1} ∧ d.line (FullLattice.act g₁ (stdFullLattice Kβ‚€)) = (Submodule.span B {(1 : B) βŠ—β‚œ[π’ͺ] stdBasisVec Kβ‚€ 0 + (xbar (Ideal.Quotient.mk (Ideal.span {(algebraMap Onr (chartERing Onr (algebraMap π’ͺ Onr Ο€) r) (algebraMap π’ͺ Onr Ο€)) ^ (n + 1)}) (chartERing.Ξ· Onr (algebraMap π’ͺ Onr Ο€) 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 β†’ Spec.map (CommRingCat.ofHom xbar.toRingHom) ≫ ΞΊ' h n ≫ qX n ≫ pr₁ n = DM.q n B hB P ΞΊ'_prβ‚‚ : βˆ€ (h : Matrix.GeneralLinearGroup (Fin 2) Kβ‚€) (n : β„•), ΞΊ' h n ≫ qX n ≫ prβ‚‚ n = Spec.map (CommRingCat.ofHom (Ideal.quotientMap (Ideal.span {(algebraMap Onr (chartERing Onr (algebraMap π’ͺ Onr Ο€) r) (algebraMap π’ͺ Onr Ο€)) ^ (n + 1)}) ((algebraMap Onr (chartERing Onr (algebraMap π’ͺ Onr Ο€) r)).comp ((AlgHom.equalizer ((Fr.trans Fr : Onr ≃ₐ[π’ͺ] Onr) : Onr →ₐ[π’ͺ] Onr) (AlgHom.id π’ͺ Onr)).val.toRingHom)) (by rw [Ideal.span_le, Set.singleton_subset_iff, SetLike.mem_coe, Ideal.mem_comap, map_pow]; exact Ideal.subset_span rfl))) ΞΊ'_xb' : βˆ€ (h : Matrix.GeneralLinearGroup (Fin 2) Kβ‚€) (n : β„•), ΞΊ' h n ≫ xb' n = Spec.map (CommRingCat.ofHom (Ideal.quotientMap (Ideal.span {(algebraMap Onr (chartERing Onr (algebraMap π’ͺ Onr Ο€) r) (algebraMap π’ͺ Onr Ο€)) ^ (n + 1)}) (algebraMap Onr (chartERing Onr (algebraMap π’ͺ Onr Ο€) r)) (by rw [Ideal.span_le, Set.singleton_subset_iff, SetLike.mem_coe, Ideal.mem_comap, map_pow]; exact Ideal.subset_span rfl))) ΞΊ'_isOpenImmersion : βˆ€ (h : Matrix.GeneralLinearGroup (Fin 2) Kβ‚€) (n : β„•), IsOpenImmersion (ΞΊ' h n) cover : βˆ€ (n : β„•) (x : X' n), βˆƒ (g : Gβ‚‚) (h : Matrix.GeneralLinearGroup (Fin 2) Kβ‚€), x ∈ Set.range (ΞΊ' h n ≫ (a' n g).hom).base parity : βˆ€ (n : β„•) (g : Gβ‚‚) (h h' : Matrix.GeneralLinearGroup (Fin 2) Kβ‚€), (Set.range (ΞΊ' h n).base ∩ Set.range (ΞΊ' h' n ≫ (a' n g).hom).base).Nonempty β†’ g ∈ E end MumfordTower end FormalOmega end CerednikDrinfeld