import Mathlib set_option autoImplicit false open CategoryTheory AlgebraicGeometry namespace AlgebraicGeometry set_option genInjectivity false in set_option genSizeOfSpec false in structure TowerQuotientDatum (๐’ช : Type) [CommRing ๐’ช] (ฯ€ : ๐’ช) (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)) : 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) yb_flat : โˆ€ n : โ„•, Flat (yb n) p : โˆ€ n : โ„•, X n โŸถ Y n p_over : โˆ€ n : โ„•, p n โ‰ซ yb n = xb n p_xt : โˆ€ n : โ„•, xt n โ‰ซ p (n + 1) = p n โ‰ซ yt n p_isPullback : โˆ€ n : โ„•, IsPullback (xt n) (p n) (p (n + 1)) (yt n) p_inv : โˆ€ (n : โ„•) (g : G), (a n g).hom โ‰ซ p n = p n p_isFinite : โˆ€ n : โ„•, IsFinite (p n) p_surjective : โˆ€ n : โ„•, Surjective (p n) p_epi_loc : โˆ€ (n : โ„•) (U : (Y n).Opens), Epi ((p n) โˆฃ_ U) univ_loc : โˆ€ (T : Scheme.{0}) (U : โˆ€ n : โ„•, (Y n).Opens) (hU : โˆ€ n : โ„•, (yt n) โปยนแต (U (n + 1)) = U n) (u : โˆ€ n : โ„•, (โ†‘((p n) โปยนแต (U n)) : Scheme.{0}) โŸถ T), (โˆ€ (n : โ„•) (g : G), Scheme.Hom.resLE (a n g).hom ((p n) โปยนแต (U n)) ((p n) โปยนแต (U n)) (by rw [โ† Scheme.Hom.comp_preimage, p_inv]) โ‰ซ u n = u n) โ†’ (โˆ€ n : โ„•, Scheme.Hom.resLE (xt n) ((p (n + 1)) โปยนแต (U (n + 1))) ((p n) โปยนแต (U n)) (by rw [โ† Scheme.Hom.comp_preimage, p_xt, Scheme.Hom.comp_preimage, hU]) โ‰ซ u (n + 1) = u n) โ†’ โˆƒ v : โˆ€ n : โ„•, (โ†‘(U n) : Scheme.{0}) โŸถ T, โˆ€ n : โ„•, (p n) โˆฃ_ (U n) โ‰ซ v n = u n fib : โˆ€ (n : โ„•) (k : Type) [Field k] [IsAlgClosed k] (y : Spec (CommRingCat.of k) โŸถ Y n), (โˆƒ x : Spec (CommRingCat.of k) โŸถ X n, x โ‰ซ p n = y) โˆง โˆ€ x x' : Spec (CommRingCat.of k) โŸถ X n, x โ‰ซ p n = y โ†’ (x' โ‰ซ p n = y โ†” โˆƒ g : G, x' = x โ‰ซ (a n g).hom) adicFib : โˆ€ (R : Type) [CommRing R] [IsDomain R] [ValuationRing R] [Algebra ๐’ช R], IsAdicComplete (Ideal.span {algebraMap ๐’ช R ฯ€}) R โ†’ IsAlgClosed (FractionRing R) โ†’ โˆ€ (y : โˆ€ n : โ„•, Spec (CommRingCat.of (R โงธ Ideal.span {(algebraMap ๐’ช R ฯ€) ^ (n + 1)})) โŸถ Y n), (โˆ€ n : โ„•, y n โ‰ซ yb n = Spec.map (CommRingCat.ofHom (Ideal.quotientMap (Ideal.span {(algebraMap ๐’ช R ฯ€) ^ (n + 1)}) (algebraMap ๐’ช R) (by rw [Ideal.span_le, Set.singleton_subset_iff, SetLike.mem_coe, Ideal.mem_comap, map_pow]; exact Ideal.subset_span rfl)))) โ†’ (โˆ€ n : โ„•, Spec.map (CommRingCat.ofHom (Ideal.Quotient.factor (Ideal.span_singleton_le_span_singleton.mpr (pow_dvd_pow (algebraMap ๐’ช R ฯ€) (Nat.le_succ (n + 1)))))) โ‰ซ y (n + 1) = y n โ‰ซ yt n) โ†’ (โˆƒ x : โˆ€ n : โ„•, Spec (CommRingCat.of (R โงธ Ideal.span {(algebraMap ๐’ช R ฯ€) ^ (n + 1)})) โŸถ X n, (โˆ€ n : โ„•, x n โ‰ซ p n = y n) โˆง โˆ€ n : โ„•, Spec.map (CommRingCat.ofHom (Ideal.Quotient.factor (Ideal.span_singleton_le_span_singleton.mpr (pow_dvd_pow (algebraMap ๐’ช R ฯ€) (Nat.le_succ (n + 1)))))) โ‰ซ x (n + 1) = x n โ‰ซ xt n) โˆง โˆ€ x x' : โˆ€ n : โ„•, Spec (CommRingCat.of (R โงธ Ideal.span {(algebraMap ๐’ช R ฯ€) ^ (n + 1)})) โŸถ X n, (โˆ€ n : โ„•, x n โ‰ซ p n = y n) โ†’ (โˆ€ n : โ„•, x' n โ‰ซ p n = y n) โ†’ (โˆ€ n : โ„•, Spec.map (CommRingCat.ofHom (Ideal.Quotient.factor (Ideal.span_singleton_le_span_singleton.mpr (pow_dvd_pow (algebraMap ๐’ช R ฯ€) (Nat.le_succ (n + 1)))))) โ‰ซ x (n + 1) = x n โ‰ซ xt n) โ†’ (โˆ€ n : โ„•, Spec.map (CommRingCat.ofHom (Ideal.Quotient.factor (Ideal.span_singleton_le_span_singleton.mpr (pow_dvd_pow (algebraMap ๐’ช R ฯ€) (Nat.le_succ (n + 1)))))) โ‰ซ x' (n + 1) = x' n โ‰ซ xt n) โ†’ โˆƒ g : G, โˆ€ n : โ„•, x' n = x n โ‰ซ (a n g).hom end AlgebraicGeometry