import Definitions.Def_CerednikDrinfeld_FormalUpperHalfPlanePoints import Definitions.Def_CerednikDrinfeld_FormalUpperHalfPlaneChartRings import Definitions.Def_CerednikDrinfeld_SchemeNilpPoints 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 FormalQuotientDatum (π’ͺ : Type) [CommRing π’ͺ] (Ο€ : π’ͺ) (Kβ‚€ : Type) [Field Kβ‚€] [Algebra π’ͺ Kβ‚€] (Onr : Type) [CommRing Onr] [Algebra π’ͺ Onr] (Fr : Onr ≃ₐ[π’ͺ] Onr) (vdet : Matrix.GeneralLinearGroup (Fin 2) Kβ‚€ β†’* Multiplicative β„€) (r : β„•) {G : Type} [Group G] (Οƒ : G β†’* Matrix.GeneralLinearGroup (Fin 2) Kβ‚€) (Ξ“ Ξ“' : Subgroup G) (g₁ : Matrix.GeneralLinearGroup (Fin 2) Kβ‚€) : Type 1 where Y : β„• β†’ Scheme.{0} yb : βˆ€ n : β„•, Y n ⟢ Spec (CommRingCat.of (π’ͺ β§Έ Ideal.span {Ο€ ^ (n + 1)})) yt : βˆ€ n : β„•, Y n ⟢ Y (n + 1) yt_isPullback : βˆ€ n : β„•, IsPullback (yt n) (yb n) (yb (n + 1)) (Spec.map (CommRingCat.ofHom (Ideal.Quotient.factor (Ideal.span_singleton_le_span_singleton.mpr (pow_dvd_pow Ο€ (Nat.le_succ (n + 1))))))) yb_isProper : βˆ€ n : β„•, IsProper (yb n) q : βˆ€ (n : β„•) (B : Type) [CommRing B] [Algebra π’ͺ B], (algebraMap π’ͺ B Ο€) ^ (n + 1) = 0 β†’ (AlgFunctor.prod (AlgFunctor.corep Onr) (Omega Kβ‚€ Ο€)).obj B β†’ (Spec (CommRingCat.of B) ⟢ Y n) q_over : βˆ€ (n : β„•) (B : Type) [CommRing B] [Algebra π’ͺ B] (hB : (algebraMap π’ͺ B Ο€) ^ (n + 1) = 0) (x : (AlgFunctor.prod (AlgFunctor.corep Onr) (Omega Kβ‚€ Ο€)).obj B), q n B hB x ≫ yb 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') (x : (AlgFunctor.prod (AlgFunctor.corep Onr) (Omega Kβ‚€ Ο€)).obj B), q n B' hB' ((AlgFunctor.prod (AlgFunctor.corep Onr) (Omega Kβ‚€ Ο€)).map Ο† x) = Spec.map (CommRingCat.ofHom Ο†.toRingHom) ≫ q n B hB x q_yt : βˆ€ (n : β„•) (B : Type) [CommRing B] [Algebra π’ͺ B] (hB : (algebraMap π’ͺ B Ο€) ^ (n + 1) = 0) (hB' : (algebraMap π’ͺ B Ο€) ^ (n + 1 + 1) = 0) (x : (AlgFunctor.prod (AlgFunctor.corep Onr) (Omega Kβ‚€ Ο€)).obj B), q (n + 1) B hB' x = q n B hB x ≫ yt n q_inv : βˆ€ (n : β„•) (B : Type) [CommRing B] [Algebra π’ͺ B] (hB : (algebraMap π’ͺ B Ο€) ^ (n + 1) = 0) (Ξ³ : G), Ξ³ ∈ Ξ“ β†’ βˆ€ x x' : (AlgFunctor.prod (AlgFunctor.corep Onr) (Omega Kβ‚€ Ο€)).obj B, OmegaNr.IsTwistedAct Ο€ Onr Fr vdet B (Οƒ Ξ³) x x' β†’ q n B hB x' = q n B hB x q_fib : βˆ€ (n : β„•) (k : Type) [Field k] [IsAlgClosed k] [Algebra π’ͺ k] (hk : (algebraMap π’ͺ k Ο€) ^ (n + 1) = 0) (ψ : Onr →ₐ[π’ͺ] k), (βˆ€ Ξ· : Spec (CommRingCat.of k) ⟢ Y n, Ξ· ≫ yb n ≫ Spec.map (CommRingCat.ofHom (algebraMap π’ͺ (π’ͺ β§Έ Ideal.span {Ο€ ^ (n + 1)}))) = Spec.map (CommRingCat.ofHom (algebraMap π’ͺ k)) β†’ βˆƒ P : (Omega Kβ‚€ Ο€).obj k, q n k hk (ψ, P) = Ξ·) ∧ βˆ€ P P' : (Omega Kβ‚€ Ο€).obj k, q n k hk (ψ, P) = q n k hk (ψ, P') ↔ βˆƒ Ξ³ ∈ Ξ“, OmegaNr.IsTwistedAct Ο€ Onr Fr vdet k (Οƒ Ξ³) (ψ, P) (ψ, P') univ : βˆ€ (T : Scheme.{0}) (t : T ⟢ Spec (CommRingCat.of π’ͺ)) (ρ' : βˆ€ (B : Type) [CommRing B] [Algebra π’ͺ B], IsNilpotent (algebraMap π’ͺ B Ο€) β†’ (AlgFunctor.prod (AlgFunctor.corep Onr) (Omega Kβ‚€ Ο€)).obj B β†’ (Scheme.nilpPoints t).obj B), (βˆ€ (B : Type) [CommRing B] [Algebra π’ͺ B] (B' : Type) [CommRing B'] [Algebra π’ͺ B'] (hB : IsNilpotent (algebraMap π’ͺ B Ο€)) (hB' : IsNilpotent (algebraMap π’ͺ B' Ο€)) (Ο† : B →ₐ[π’ͺ] B') (x : (AlgFunctor.prod (AlgFunctor.corep Onr) (Omega Kβ‚€ Ο€)).obj B), ρ' B' hB' ((AlgFunctor.prod (AlgFunctor.corep Onr) (Omega Kβ‚€ Ο€)).map Ο† x) = (Scheme.nilpPoints t).map Ο† (ρ' B hB x)) β†’ (βˆ€ (B : Type) [CommRing B] [Algebra π’ͺ B] (hB : IsNilpotent (algebraMap π’ͺ B Ο€)) (Ξ³ : G), Ξ³ ∈ Ξ“ β†’ βˆ€ x x' : (AlgFunctor.prod (AlgFunctor.corep Onr) (Omega Kβ‚€ Ο€)).obj B, OmegaNr.IsTwistedAct Ο€ Onr Fr vdet B (Οƒ Ξ³) x x' β†’ ρ' B hB x' = ρ' B hB x) β†’ βˆƒ u : βˆ€ n : β„•, Y n ⟢ T, (βˆ€ n : β„•, u n ≫ t = yb n ≫ Spec.map (CommRingCat.ofHom (algebraMap π’ͺ (π’ͺ β§Έ Ideal.span {Ο€ ^ (n + 1)})))) ∧ (βˆ€ n : β„•, yt n ≫ u (n + 1) = u n) ∧ (βˆ€ (n : β„•) (B : Type) [CommRing B] [Algebra π’ͺ B] (hB : (algebraMap π’ͺ B Ο€) ^ (n + 1) = 0) (x : (AlgFunctor.prod (AlgFunctor.corep Onr) (Omega Kβ‚€ Ο€)).obj B), q n B hB x ≫ u n = (ρ' B ⟨n + 1, hB⟩ x).1) ∧ βˆ€ u' : βˆ€ n : β„•, Y n ⟢ T, (βˆ€ n : β„•, u' n ≫ t = yb n ≫ Spec.map (CommRingCat.ofHom (algebraMap π’ͺ (π’ͺ β§Έ Ideal.span {Ο€ ^ (n + 1)})))) β†’ (βˆ€ n : β„•, yt n ≫ u' (n + 1) = u' n) β†’ (βˆ€ (n : β„•) (B : Type) [CommRing B] [Algebra π’ͺ B] (hB : (algebraMap π’ͺ B Ο€) ^ (n + 1) = 0) (x : (AlgFunctor.prod (AlgFunctor.corep Onr) (Omega Kβ‚€ Ο€)).obj B), q n B hB x ≫ u' n = (ρ' B ⟨n + 1, hB⟩ x).1) β†’ u' = u Ynr : β„• β†’ Scheme.{0} p₁ : βˆ€ n : β„•, Ynr n ⟢ Y n pβ‚‚ : βˆ€ n : β„•, Ynr n ⟢ Spec (CommRingCat.of (Onr β§Έ Ideal.span {(algebraMap π’ͺ Onr Ο€) ^ (n + 1)})) isPullback_nr : βˆ€ n : β„•, IsPullback (p₁ n) (pβ‚‚ n) (yb n ≫ Spec.map (CommRingCat.ofHom (algebraMap π’ͺ (π’ͺ β§Έ Ideal.span {Ο€ ^ (n + 1)})))) (Spec.map (CommRingCat.ofHom (algebraMap π’ͺ (Onr β§Έ Ideal.span {(algebraMap π’ͺ Onr Ο€) ^ (n + 1)})))) jnr : βˆ€ n : β„•, Ynr n ⟢ Ynr (n + 1) jnr_p₁ : βˆ€ n : β„•, jnr n ≫ p₁ (n + 1) = p₁ n ≫ yt n jnr_pβ‚‚ : βˆ€ n : β„•, jnr n ≫ pβ‚‚ (n + 1) = pβ‚‚ n ≫ Spec.map (CommRingCat.ofHom (Ideal.Quotient.factor (Ideal.span_singleton_le_span_singleton.mpr (pow_dvd_pow (algebraMap π’ͺ Onr Ο€) (Nat.le_succ (n + 1)))))) U : βˆ€ (h : Matrix.GeneralLinearGroup (Fin 2) Kβ‚€) (n : β„•), (Ynr n).Opens c : βˆ€ (h : Matrix.GeneralLinearGroup (Fin 2) Kβ‚€) (n : β„•), ↑((Ynr n).presheaf.obj (Opposite.op (U h n))) β†’+* ((chartERing Onr (algebraMap π’ͺ Onr Ο€) r) β§Έ Ideal.span {(algebraMap Onr (chartERing Onr (algebraMap π’ͺ Onr Ο€) r) (algebraMap π’ͺ Onr Ο€)) ^ (n + 1)}) ΞΊ : βˆ€ (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)})) ⟢ Ynr n ΞΊ_preimage : βˆ€ (h : Matrix.GeneralLinearGroup (Fin 2) Kβ‚€) (n : β„•), (ΞΊ h n) ⁻¹ᡁ (U h n) = ⊀ ∧ βˆ€ (hle : (⊀ : (Spec (CommRingCat.of ((chartERing Onr (algebraMap π’ͺ Onr Ο€) r) β§Έ Ideal.span {(algebraMap Onr (chartERing Onr (algebraMap π’ͺ Onr Ο€) r) (algebraMap π’ͺ Onr Ο€)) ^ (n + 1)}))).Opens) ≀ (ΞΊ h n) ⁻¹ᡁ (U h n)) (s : ↑((Ynr n).presheaf.obj (Opposite.op (U h n)))), c h n s = (Scheme.Ξ“SpecIso (CommRingCat.of ((chartERing Onr (algebraMap π’ͺ Onr Ο€) r) β§Έ Ideal.span {(algebraMap Onr (chartERing Onr (algebraMap π’ͺ Onr Ο€) r) (algebraMap π’ͺ Onr Ο€)) ^ (n + 1)}))).hom.hom ((Spec (CommRingCat.of ((chartERing Onr (algebraMap π’ͺ Onr Ο€) r) β§Έ Ideal.span {(algebraMap Onr (chartERing Onr (algebraMap π’ͺ Onr Ο€) r) (algebraMap π’ͺ Onr Ο€)) ^ (n + 1)}))).presheaf.map (homOfLE hle).op (((ΞΊ h n).app (U h n)).hom s)) c_const : βˆ€ (h : Matrix.GeneralLinearGroup (Fin 2) Kβ‚€) (n : β„•) (y : Onr), c h n ((Ynr n).presheaf.map (homOfLE le_top).op ((pβ‚‚ n).appTop.hom ((Scheme.Ξ“SpecIso (CommRingCat.of (Onr β§Έ Ideal.span {(algebraMap π’ͺ Onr Ο€) ^ (n + 1)}))).inv.hom (Ideal.Quotient.mk (Ideal.span {(algebraMap π’ͺ Onr Ο€) ^ (n + 1)}) y)))) = Ideal.Quotient.mk (Ideal.span {(algebraMap Onr (chartERing Onr (algebraMap π’ͺ Onr Ο€) r) (algebraMap π’ͺ Onr Ο€)) ^ (n + 1)}) (algebraMap Onr (chartERing Onr (algebraMap π’ͺ Onr Ο€) r) y) U_jnr : βˆ€ (h : Matrix.GeneralLinearGroup (Fin 2) Kβ‚€) (n : β„•), U h n = (jnr n) ⁻¹ᡁ (U h (n + 1)) ∧ βˆ€ (hle : U h n ≀ (jnr n) ⁻¹ᡁ (U h (n + 1))) (s : ↑((Ynr (n + 1)).presheaf.obj (Opposite.op (U h (n + 1))))), c h n ((Ynr n).presheaf.map (homOfLE hle).op (((jnr n).app (U h (n + 1))).hom s)) = Ideal.Quotient.factor (Ideal.span_singleton_le_span_singleton.mpr (pow_dvd_pow (algebraMap Onr (chartERing Onr (algebraMap π’ͺ Onr Ο€) r) (algebraMap π’ͺ Onr Ο€)) (Nat.le_succ (n + 1)))) (c h (n + 1) s) ΞΊ_p₁ : βˆ€ (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 ≫ p₁ n = q n B hB ((IsScalarTower.toAlgHom π’ͺ Onr B), P) cover : βˆ€ n : β„•, ⨆ h : Matrix.GeneralLinearGroup (Fin 2) Kβ‚€, U h n = ⊀ functions : βˆ€ (h : Matrix.GeneralLinearGroup (Fin 2) Kβ‚€), (βˆ€ (s s' : βˆ€ m : β„•, ↑((Ynr m).presheaf.obj (Opposite.op (U h m)))), (βˆ€ (m : β„•) (hle : U h m ≀ (jnr m) ⁻¹ᡁ (U h (m + 1))), (Ynr m).presheaf.map (homOfLE hle).op (((jnr m).app (U h (m + 1))).hom (s (m + 1))) = s m) β†’ (βˆ€ (m : β„•) (hle : U h m ≀ (jnr m) ⁻¹ᡁ (U h (m + 1))), (Ynr m).presheaf.map (homOfLE hle).op (((jnr m).app (U h (m + 1))).hom (s' (m + 1))) = s' m) β†’ (βˆ€ m : β„•, c h m (s m) = c h m (s' m)) β†’ s = s') ∧ βˆ€ fam : βˆ€ m : β„•, ((chartERing Onr (algebraMap π’ͺ Onr Ο€) r) β§Έ Ideal.span {(algebraMap Onr (chartERing Onr (algebraMap π’ͺ Onr Ο€) r) (algebraMap π’ͺ Onr Ο€)) ^ (m + 1)}), (βˆ€ m : β„•, Ideal.Quotient.factor (Ideal.span_singleton_le_span_singleton.mpr (pow_dvd_pow (algebraMap Onr (chartERing Onr (algebraMap π’ͺ Onr Ο€) r) (algebraMap π’ͺ Onr Ο€)) (Nat.le_succ (m + 1)))) (fam (m + 1)) = fam m) β†’ ((βˆƒ s : βˆ€ m : β„•, ↑((Ynr m).presheaf.obj (Opposite.op (U h m))), (βˆ€ (m : β„•) (hle : U h m ≀ (jnr m) ⁻¹ᡁ (U h (m + 1))), (Ynr m).presheaf.map (homOfLE hle).op (((jnr m).app (U h (m + 1))).hom (s (m + 1))) = s m) ∧ βˆ€ m : β„•, c h m (s m) = fam m) ↔ βˆ€ (m : β„•) (B : Type) [CommRing B] [Algebra π’ͺ B] [Algebra Onr B] [IsScalarTower π’ͺ Onr B], IsNilpotent (algebraMap π’ͺ B Ο€) β†’ βˆ€ (xbar xbar' : ((chartERing Onr (algebraMap π’ͺ Onr Ο€) r) β§Έ Ideal.span {(algebraMap Onr (chartERing Onr (algebraMap π’ͺ Onr Ο€) r) (algebraMap π’ͺ Onr Ο€)) ^ (m + 1)}) →ₐ[Onr] B) (d d' P 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 Ο€)) ^ (m + 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 Ο€)) ^ (m + 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β‚€)) β†’ (d'.line (stdFullLattice Kβ‚€) = Submodule.span B {(xbar' (Ideal.Quotient.mk (Ideal.span {(algebraMap Onr (chartERing Onr (algebraMap π’ͺ Onr Ο€) r) (algebraMap π’ͺ Onr Ο€)) ^ (m + 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 Ο€)) ^ (m + 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 β†’ DeligneDatum.IsPullback (K := Kβ‚€) (Ο€ := Ο€) B h⁻¹ d' P' β†’ (βˆƒ Ξ³ ∈ Ξ“', DeligneDatum.IsPullback (K := Kβ‚€) (Ο€ := Ο€) B (Οƒ Ξ³)⁻¹ P P') β†’ xbar (fam m) = xbar' (fam m)) end FormalOmega end CerednikDrinfeld