Definitions/Def_CerednikDrinfeld_DrinfeldHolomorphic.lean
Rigid holomorphic functions on Drinfeld's upper half plane
Fix a field K_0, a valued field K (values in a linearly ordered commutative group with zero) and a K_0-algebra structure on K. A PseudoUniformizer is a structure carrying an element \varpi \in K_0 together with proofs that 0 < v(\varpi) < 1 and that every nonzero a \in K_0 satisfies v(\varpi)^N \le v(a) \le v(\varpi)^{-N} for some N. For such a \varpi, affinoid n is the set of z \in K with v(z) \le v(\varpi)^{-n} and v(z-a) \ge v(\varpi)^{n} for all a \in K_0 with v(a) \le v(\varpi)^{-n}; mem_affinoid_iff' removes the restriction on a, affinoid_mono records monotonicity in n, and each affinoid lies in upperHalfPlane K₀ K, the complement of the image of K_0 in K. IsExhausted is the predicate that these sets cover the upper half plane; it is defined, not asserted.
Rational functions are handled through presentations: a RatPair is a pair of polynomials over K, with pole-freeness on a set, evaluation z \mapsto \mathrm{num}(z)/\mathrm{den}(z), sum, product, negation and constants defined on presentations, homogenisation homog of a polynomial in a chosen degree D (so that its value at z is (cz+d)^D P((az+b)/(cz+d))), the resulting Möbius pull-back along g \in \mathrm{GL}_2(K_0), and the coefficientwise image under a ring automorphism of K. IsHolOn K S f, for f on a subset S \subseteq K, asserts the existence of a sequence of RatPairs, pole-free on S, whose values on S are bounded by a single v(b) uniformly in the index, converging to f uniformly on S; uniform convergence is tested through vRestrict, the restriction of the valuation to its value group, whose unit group indexes a basis of the uniformity. These functions form a subring holOn K S, and holRing ϖ is the subring of functions on the upper half plane holomorphic in this sense on every affinoid; holSubalgebra makes it a K-algebra and merField ϖ is its fraction field.
\mathrm{PGL}_2(K_0) acts on the upper half plane by Möbius transformations; exists_mapsTo_affinoid produces, for each g and n, an index m with g(\Omega_n) \subseteq \Omega_m (by explicit valuation estimates on the entries and determinant of a lift, with m = 3n + 3N), whence precomposition with g^{-1} preserves holRing and gives a MulSemiringAction commuting with the K-action. An IsometricAut K₀ K is a structure carrying a ring automorphism of K together with proofs that it preserves v and fixes K_0 pointwise; such automorphisms form a group, preserve each affinoid, commute with the Möbius action, act on holRing coefficientwise, and thereby map to Mumford.AmbientSemilinearAut K PGL(2, K₀) of the holomorphic ring, by a group homomorphism. Finally, for an abstract \rho : G \to \mathrm{PGL}_2(K_0), HolRingOf ϖ ρ is a type synonym of holRing ϖ carrying the G-action obtained along \rho, with the corresponding semilinear automorphisms.
Relation to Mathlib
Mathlib has no rigid analytic geometry and no Drinfeld upper half plane; the ring of holomorphic functions is built here from scratch, using only Mathlib's valued-field topology and TendstoUniformly. Rational functions are not taken from Mathlib's RatFunc but presented as pairs of polynomials (RatPair), so that pole-freeness and Möbius pull-back can be stated on a chosen presentation.
Where it is used
The ring defined here is the coefficient ring for the Mumford-quotient layer of the Čerednik–Drinfeld description: its fraction field merField ϖ carries the actions of a discrete group G (through \rho) and of the isometric automorphisms of K over K_0, whose invariants are the Mumford field and its type-preserving variant, giving the p-adic uniformisation of Shimura curves used on the route to Fermat's Last Theorem.
References
- D. Mumford, An analytic construction of degenerating curves over complete local rings, Compositio Mathematica 24 (1972), 129–174
- J.-F. Boutot and H. Carayol, Uniformisation p-adique des courbes de Shimura: les théorèmes de Čerednik et de Drinfeld, Astérisque 196–197 (1991), 45–158
- J. Fresnel and M. van der Put, Rigid Analytic Geometry and Its Applications, Progress in Mathematics 218, Birkhäuser, 2004
References are suggested automatically and have not been individually verified.
English text generated automatically from the Lean source; the Lean statement is authoritative.
- 783 lines
- 106 declarations
- used in the statements of 224 theorems and imported by 227 proofs
- imports 2 definition modules
Source file: Definitions/Def_CerednikDrinfeld_DrinfeldHolomorphic.lean
Declarations
- structure
CerednikDrinfeld.Omega.PseudoUniformizer - field
CerednikDrinfeld.Omega.PseudoUniformizer.pos - field
CerednikDrinfeld.Omega.PseudoUniformizer.lt_one - field
CerednikDrinfeld.Omega.PseudoUniformizer.scale - def
CerednikDrinfeld.Omega.affinoid - theorem
CerednikDrinfeld.Omega.affinoid_subset_upperHalfPlane - theorem
CerednikDrinfeld.Omega.affinoid_mono - theorem
CerednikDrinfeld.Omega.mem_affinoid_iff' - def
CerednikDrinfeld.Omega.IsExhausted - structure
CerednikDrinfeld.Omega.RatPair - field
CerednikDrinfeld.Omega.RatPair.num - field
CerednikDrinfeld.Omega.RatPair.den - def
CerednikDrinfeld.Omega.RatPair.IsPoleFreeOn - def
CerednikDrinfeld.Omega.RatPair.evalAt - def
CerednikDrinfeld.Omega.RatPair.const - def
CerednikDrinfeld.Omega.RatPair.add - def
CerednikDrinfeld.Omega.RatPair.mul - def
CerednikDrinfeld.Omega.RatPair.neg - theorem
CerednikDrinfeld.Omega.RatPair.isPoleFreeOn_const - theorem
CerednikDrinfeld.Omega.RatPair.isPoleFreeOn_add - theorem
CerednikDrinfeld.Omega.RatPair.isPoleFreeOn_mul - theorem
CerednikDrinfeld.Omega.RatPair.isPoleFreeOn_neg - theorem
CerednikDrinfeld.Omega.RatPair.evalAt_const - theorem
CerednikDrinfeld.Omega.RatPair.evalAt_add - theorem
CerednikDrinfeld.Omega.RatPair.evalAt_mul - theorem
CerednikDrinfeld.Omega.RatPair.evalAt_neg - def
CerednikDrinfeld.Omega.RatPair.homog - theorem
CerednikDrinfeld.Omega.RatPair.eval_homog - def
CerednikDrinfeld.Omega.RatPair.pullback - theorem
CerednikDrinfeld.Omega.RatPair.pullback_den_eval - theorem
CerednikDrinfeld.Omega.RatPair.evalAt_pullback - theorem
CerednikDrinfeld.Omega.RatPair.isPoleFreeOn_pullback - def
CerednikDrinfeld.Omega.RatPair.map - theorem
CerednikDrinfeld.Omega.RatPair.map_den_eval - theorem
CerednikDrinfeld.Omega.RatPair.map_num_eval - theorem
CerednikDrinfeld.Omega.RatPair.evalAt_map - abbrev
CerednikDrinfeld.Omega.vRestrict - theorem
CerednikDrinfeld.Omega.v_le_iff_vRestrict_le - theorem
CerednikDrinfeld.Omega.v_lt_iff_vRestrict_lt - theorem
CerednikDrinfeld.Omega.tendstoUniformly_iff_vRestrict - def
CerednikDrinfeld.Omega.IsHolOn - theorem
CerednikDrinfeld.Omega.isHolOn_ratPair - theorem
CerednikDrinfeld.Omega.IsHolOn.const - theorem
CerednikDrinfeld.Omega.exists_bound - theorem
CerednikDrinfeld.Omega.IsHolOn.bounded - theorem
CerednikDrinfeld.Omega.IsHolOn.neg - theorem
CerednikDrinfeld.Omega.IsHolOn.add - theorem
CerednikDrinfeld.Omega.IsHolOn.mul - theorem
CerednikDrinfeld.Omega.IsHolOn.one - theorem
CerednikDrinfeld.Omega.IsHolOn.zero - def
CerednikDrinfeld.Omega.holOn - theorem
CerednikDrinfeld.Omega.mem_holOn_iff - def
CerednikDrinfeld.Omega.restrictAffinoid - def
CerednikDrinfeld.Omega.holRing - theorem
CerednikDrinfeld.Omega.mem_holRing_iff - theorem
CerednikDrinfeld.Omega.const_mem_holRing - def
CerednikDrinfeld.Omega.holSubalgebra - instance
CerednikDrinfeld.Omega.holRingAlgebra - theorem
CerednikDrinfeld.Omega.algebraMap_holRing_apply - instance
CerednikDrinfeld.Omega.pglOmegaAction - theorem
CerednikDrinfeld.Omega.coe_smul_upperHalfPlane - def
CerednikDrinfeld.Omega.precomp - theorem
CerednikDrinfeld.Omega.precomp_one - theorem
CerednikDrinfeld.Omega.precomp_mul - theorem
CerednikDrinfeld.Omega.p_le_one - theorem
CerednikDrinfeld.Omega.one_le_P - theorem
CerednikDrinfeld.Omega.p_pow_anti - theorem
CerednikDrinfeld.Omega.P_pow_mono - theorem
CerednikDrinfeld.Omega.P_pow_mul_p_pow - theorem
CerednikDrinfeld.Omega.exists_common_scale - theorem
CerednikDrinfeld.Omega.linear_lower - theorem
CerednikDrinfeld.Omega.linear_upper - theorem
CerednikDrinfeld.Omega.exists_mapsTo_affinoid - theorem
CerednikDrinfeld.Omega.precomp_mem_holRing - instance
CerednikDrinfeld.Omega.holRingAction - theorem
CerednikDrinfeld.Omega.coe_smul_holRing_apply - instance
CerednikDrinfeld.Omega.holRingSMulCommClass - structure
CerednikDrinfeld.Omega.IsometricAut - field
CerednikDrinfeld.Omega.IsometricAut.toRingEquiv - field
CerednikDrinfeld.Omega.IsometricAut.isometry - field
CerednikDrinfeld.Omega.IsometricAut.fix - theorem
CerednikDrinfeld.Omega.IsometricAut.ext - instance
CerednikDrinfeld.Omega.IsometricAut.instGroup - theorem
CerednikDrinfeld.Omega.IsometricAut.inv_toRingEquiv - theorem
CerednikDrinfeld.Omega.IsometricAut.mapsTo_upperHalfPlane - theorem
CerednikDrinfeld.Omega.IsometricAut.mapsTo_affinoid - theorem
CerednikDrinfeld.Omega.IsometricAut.comm_pmoebius - def
CerednikDrinfeld.Omega.IsometricAut.funMap - theorem
CerednikDrinfeld.Omega.IsometricAut.vRestrict_map - theorem
CerednikDrinfeld.Omega.IsometricAut.funMap_mem_holRing - def
CerednikDrinfeld.Omega.IsometricAut.coeffMap - theorem
CerednikDrinfeld.Omega.IsometricAut.coeffMap_algebraMap - theorem
CerednikDrinfeld.Omega.IsometricAut.coeffMap_smul - def
CerednikDrinfeld.Omega.IsometricAut.toAmbient - theorem
CerednikDrinfeld.Omega.iUnion_affinoid - def
CerednikDrinfeld.Omega.IsometricAut.toAmbientHom - def
CerednikDrinfeld.Omega.HolRingOf - instance
CerednikDrinfeld.Omega.HolRingOf.instCommRing - instance
CerednikDrinfeld.Omega.HolRingOf.instAlgebra - instance
CerednikDrinfeld.Omega.HolRingOf.instMulSemiringAction - instance
CerednikDrinfeld.Omega.HolRingOf.instSMulCommClass - theorem
CerednikDrinfeld.Omega.HolRingOf.isDomain_iff - theorem
CerednikDrinfeld.Omega.HolRingOf.smul_def - def
CerednikDrinfeld.Omega.toAmbientOf - def
CerednikDrinfeld.Omega.toAmbientOfHom - abbrev
CerednikDrinfeld.Omega.merField
Source
import Definitions.Def_CerednikDrinfeld_DrinfeldUpperHalfPlane import Definitions.Def_CerednikDrinfeld_MumfordQuotient import Mathlib.Topology.Algebra.Valued.ValuationTopology ↗ import Mathlib.Topology.UniformSpace.UniformConvergence ↗ import Mathlib.Algebra.Polynomial.Eval.Defs ↗ set_option autoImplicit false noncomputable section open scoped MatrixGroups open Filter CerednikDrinfeld.Omega CerednikDrinfeld.Mumford namespace CerednikDrinfeld.Omega variable (K₀ : Type) [Field K₀] (K : Type) [Field K] [Algebra K₀ K] variable {Γ₀ : Type} [LinearOrderedCommGroupWithZero Γ₀] [Valued K Γ₀] structure PseudoUniformizer where ϖ : K₀ pos : 0 < Valued.v (algebraMap K₀ K ϖ) lt_one : Valued.v (algebraMap K₀ K ϖ) < 1 scale : ∀ a : K₀, a ≠ 0 → ∃ N : ℕ, Valued.v (algebraMap K₀ K ϖ) ^ N ≤ Valued.v (algebraMap K₀ K a) ∧ Valued.v (algebraMap K₀ K a) ≤ (Valued.v (algebraMap K₀ K ϖ))⁻¹ ^ N variable {K₀ K} (ϖ : PseudoUniformizer K₀ K) def affinoid (n : ℕ) : Set K := {z | Valued.v z ≤ (Valued.v (algebraMap K₀ K ϖ.ϖ))⁻¹ ^ n ∧ ∀ a : K₀, Valued.v (algebraMap K₀ K a) ≤ (Valued.v (algebraMap K₀ K ϖ.ϖ))⁻¹ ^ n → (Valued.v (algebraMap K₀ K ϖ.ϖ)) ^ n ≤ Valued.v (z - algebraMap K₀ K a)} theorem affinoid_subset_upperHalfPlane (n : ℕ) : affinoid ϖ n ⊆ upperHalfPlane K₀ K := by rintro z ⟨hz₁, hz₂⟩ rw [mem_upperHalfPlane_iff] rintro a rfl have h := hz₂ a hz₁ rw [sub_self, map_zero, le_zero_iff] at h exact pow_ne_zero n ϖ.pos.ne' h theorem affinoid_mono : Monotone (affinoid ϖ) := by refine monotone_nat_of_le_succ fun n => ?_ rintro z ⟨hz₁, hz₂⟩ have hp1 : Valued.v (algebraMap K₀ K ϖ.ϖ) ≤ 1 := ϖ.lt_one.le have hinv : 1 ≤ (Valued.v (algebraMap K₀ K ϖ.ϖ))⁻¹ := (one_le_inv₀ ϖ.pos).2 hp1 have hup : (Valued.v (algebraMap K₀ K ϖ.ϖ))⁻¹ ^ n ≤ (Valued.v (algebraMap K₀ K ϖ.ϖ))⁻¹ ^ (n + 1) := pow_le_pow_right₀ hinv (Nat.le_succ n) have hdown : Valued.v (algebraMap K₀ K ϖ.ϖ) ^ (n + 1) ≤ Valued.v (algebraMap K₀ K ϖ.ϖ) ^ n := pow_le_pow_right_of_le_one' hp1 (Nat.le_succ n) refine ⟨hz₁.trans hup, fun a ha => ?_⟩ rcases le_or_gt (Valued.v (algebraMap K₀ K a)) ((Valued.v (algebraMap K₀ K ϖ.ϖ))⁻¹ ^ n) with h | h · exact hdown.trans (hz₂ a h) · have hza : Valued.v z < Valued.v (-(algebraMap K₀ K a)) := by rw [Valuation.map_neg]; exact hz₁.trans_lt h have heq : Valued.v (z - algebraMap K₀ K a) = Valued.v (algebraMap K₀ K a) := by rw [sub_eq_add_neg, Valuation.map_add_eq_of_lt_right _ hza, Valuation.map_neg] rw [heq] have h1 : (1 : Γ₀) ≤ (Valued.v (algebraMap K₀ K ϖ.ϖ))⁻¹ ^ n := one_le_pow₀ hinv exact ((pow_le_one₀ zero_le' hp1).trans (h1.trans h.le)) theorem mem_affinoid_iff' (n : ℕ) (z : K) : z ∈ affinoid ϖ n ↔ Valued.v z ≤ (Valued.v (algebraMap K₀ K ϖ.ϖ))⁻¹ ^ n ∧ ∀ a : K₀, (Valued.v (algebraMap K₀ K ϖ.ϖ)) ^ n ≤ Valued.v (z - algebraMap K₀ K a) := by constructor · rintro ⟨hz₁, hz₂⟩ refine ⟨hz₁, fun a => ?_⟩ rcases le_or_gt (Valued.v (algebraMap K₀ K a)) ((Valued.v (algebraMap K₀ K ϖ.ϖ))⁻¹ ^ n) with h | h · exact hz₂ a h · have hp1 : Valued.v (algebraMap K₀ K ϖ.ϖ) ≤ 1 := ϖ.lt_one.le have hinv : 1 ≤ (Valued.v (algebraMap K₀ K ϖ.ϖ))⁻¹ := (one_le_inv₀ ϖ.pos).2 hp1 have hza : Valued.v z < Valued.v (-(algebraMap K₀ K a)) := by rw [Valuation.map_neg]; exact hz₁.trans_lt h rw [sub_eq_add_neg, Valuation.map_add_eq_of_lt_right _ hza, Valuation.map_neg] exact (pow_le_one₀ zero_le' hp1).trans ((one_le_pow₀ hinv).trans h.le) · rintro ⟨hz₁, hz₂⟩ exact ⟨hz₁, fun a _ => hz₂ a⟩ def IsExhausted : Prop := ∀ z ∈ upperHalfPlane K₀ K, ∃ n, z ∈ affinoid ϖ n structure RatPair (K : Type) [Field K] where num : Polynomial K den : Polynomial K namespace RatPair def IsPoleFreeOn (S : Set K) (r : RatPair K) : Prop := ∀ z ∈ S, r.den.eval z ≠ 0 def evalAt (r : RatPair K) (z : K) : K := r.num.eval z / r.den.eval z def const (c : K) : RatPair K := ⟨Polynomial.C c, 1⟩ def add (p q : RatPair K) : RatPair K := ⟨p.num * q.den + q.num * p.den, p.den * q.den⟩ def mul (p q : RatPair K) : RatPair K := ⟨p.num * q.num, p.den * q.den⟩ def neg (p : RatPair K) : RatPair K := ⟨-p.num, p.den⟩ theorem isPoleFreeOn_const (S : Set K) (c : K) : (const c).IsPoleFreeOn S := fun z _ => by simp [const] theorem isPoleFreeOn_add {S : Set K} {p q : RatPair K} (hp : p.IsPoleFreeOn S) (hq : q.IsPoleFreeOn S) : (add p q).IsPoleFreeOn S := fun z hz => by simp only [add, Polynomial.eval_mul] exact mul_ne_zero (hp z hz) (hq z hz) theorem isPoleFreeOn_mul {S : Set K} {p q : RatPair K} (hp : p.IsPoleFreeOn S) (hq : q.IsPoleFreeOn S) : (mul p q).IsPoleFreeOn S := fun z hz => by simp only [mul, Polynomial.eval_mul] exact mul_ne_zero (hp z hz) (hq z hz) theorem isPoleFreeOn_neg {S : Set K} {p : RatPair K} (hp : p.IsPoleFreeOn S) : (neg p).IsPoleFreeOn S := hp @[simp] theorem evalAt_const (c z : K) : (const c).evalAt z = c := by simp [const, evalAt] theorem evalAt_add {p q : RatPair K} {z : K} (hp : p.den.eval z ≠ 0) (hq : q.den.eval z ≠ 0) : (add p q).evalAt z = p.evalAt z + q.evalAt z := by simp only [add, evalAt, Polynomial.eval_add, Polynomial.eval_mul] field_simp theorem evalAt_mul (p q : RatPair K) (z : K) : (mul p q).evalAt z = p.evalAt z * q.evalAt z := by simp only [mul, evalAt, Polynomial.eval_mul] rw [div_mul_div_comm] @[simp] theorem evalAt_neg (p : RatPair K) (z : K) : (neg p).evalAt z = -p.evalAt z := by simp [neg, evalAt, neg_div] def homog (a b c d : K) (D : ℕ) (P : Polynomial K) : Polynomial K := ∑ i ∈ Finset.range (D + 1), Polynomial.C (P.coeff i) * (Polynomial.C a * Polynomial.X + Polynomial.C b) ^ i * (Polynomial.C c * Polynomial.X + Polynomial.C d) ^ (D - i) theorem eval_homog {a b c d : K} {D : ℕ} {P : Polynomial K} (hD : P.natDegree ≤ D) (z : K) (hcd : c * z + d ≠ 0) : (homog a b c d D P).eval z = (c * z + d) ^ D * P.eval ((a * z + b) / (c * z + d)) := by rw [Polynomial.eval_eq_sum_range' (Nat.lt_succ_of_le hD), Finset.mul_sum, homog, Polynomial.eval_finsetSum] refine Finset.sum_congr rfl fun i hi => ?_ have hi' : i ≤ D := Nat.lt_succ_iff.1 (Finset.mem_range.1 hi) simp only [Polynomial.eval_mul, Polynomial.eval_C, Polynomial.eval_pow, Polynomial.eval_add, Polynomial.eval_X] rw [div_pow, pow_sub₀ _ hcd hi'] field_simp def pullback (g : GL (Fin 2) K₀) (r : RatPair K) : RatPair K := ⟨homog (algebraMap K₀ K (g 0 0)) (algebraMap K₀ K (g 0 1)) (algebraMap K₀ K (g 1 0)) (algebraMap K₀ K (g 1 1)) (max r.num.natDegree r.den.natDegree) r.num, homog (algebraMap K₀ K (g 0 0)) (algebraMap K₀ K (g 0 1)) (algebraMap K₀ K (g 1 0)) (algebraMap K₀ K (g 1 1)) (max r.num.natDegree r.den.natDegree) r.den⟩ theorem pullback_den_eval {z : K} (hz : z ∈ upperHalfPlane K₀ K) (g : GL (Fin 2) K₀) (r : RatPair K) : (pullback g r).den.eval z = (algebraMap K₀ K (g 1 0) * z + algebraMap K₀ K (g 1 1)) ^ (max r.num.natDegree r.den.natDegree) * r.den.eval (moebius K₀ K g z) := by rw [pullback, eval_homog (le_max_right _ _) z (moebius_denom_ne_zero_of_mem K₀ hz g), moebius] theorem evalAt_pullback {z : K} (hz : z ∈ upperHalfPlane K₀ K) (g : GL (Fin 2) K₀) (r : RatPair K) : (pullback g r).evalAt z = r.evalAt (moebius K₀ K g z) := by have hcd := moebius_denom_ne_zero_of_mem K₀ hz g rw [evalAt, evalAt, pullback_den_eval hz, pullback, eval_homog (le_max_left _ _) z hcd, ← moebius, mul_div_mul_left _ _ (pow_ne_zero _ hcd)] theorem isPoleFreeOn_pullback {S S' : Set K} (hS : S ⊆ upperHalfPlane K₀ K) (g : GL (Fin 2) K₀) (hmaps : Set.MapsTo (moebius K₀ K g) S S') (r : RatPair K) (hr : r.IsPoleFreeOn S') : (pullback g r).IsPoleFreeOn S := fun z hz => by rw [pullback_den_eval (hS hz)] exact mul_ne_zero (pow_ne_zero _ (moebius_denom_ne_zero_of_mem K₀ (hS hz) g)) (hr _ (hmaps hz)) def map (s : K ≃+* K) (r : RatPair K) : RatPair K := ⟨r.num.map (s : K →+* K), r.den.map (s : K →+* K)⟩ theorem map_den_eval (s : K ≃+* K) (r : RatPair K) (z : K) : (r.map s).den.eval (s z) = s (r.den.eval z) := by rw [map, Polynomial.eval_map]; exact Polynomial.eval₂_hom (s : K →+* K) z theorem map_num_eval (s : K ≃+* K) (r : RatPair K) (z : K) : (r.map s).num.eval (s z) = s (r.num.eval z) := by rw [map, Polynomial.eval_map]; exact Polynomial.eval₂_hom (s : K →+* K) z theorem evalAt_map (s : K ≃+* K) (r : RatPair K) (z : K) : (r.map s).evalAt (s z) = s (r.evalAt z) := by rw [evalAt, evalAt, map_den_eval, map_num_eval, map_div₀] end RatPair section Hol variable (K) abbrev vRestrict : Valuation K (MonoidWithZeroHom.ValueGroup₀ (MonoidWithZeroHom.ofClass (Valued.v (R := K)))) := (Valued.v (R := K)).restrict theorem v_le_iff_vRestrict_le (x y : K) : Valued.v x ≤ Valued.v y ↔ vRestrict K x ≤ vRestrict K y := (Valuation.isEquiv_restrict (Valued.v (R := K))).le_iff_le theorem v_lt_iff_vRestrict_lt (x y : K) : Valued.v x < Valued.v y ↔ vRestrict K x < vRestrict K y := (Valuation.isEquiv_restrict (Valued.v (R := K))).lt_iff_lt theorem tendstoUniformly_iff_vRestrict {α : Type} (F : ℕ → α → K) (f : α → K) : TendstoUniformly F f atTop ↔ ∀ γ : (MonoidWithZeroHom.ValueGroup₀ (MonoidWithZeroHom.ofClass (Valued.v (R := K))))ˣ, ∀ᶠ k in atTop, ∀ z, vRestrict K (F k z - f z) < γ := by rw [(Filter.atTop_basis).tendstoUniformly_iff (Valued.hasBasis_uniformity K Γ₀)] constructor · intro h γ obtain ⟨j, -, hj⟩ := h γ trivial exact Filter.eventually_atTop.2 ⟨j, fun k hk z => hj hk z⟩ · intro h γ _ obtain ⟨j, hj⟩ := Filter.eventually_atTop.1 (h γ) exact ⟨j, trivial, fun k hk z => hj k hk z⟩ def IsHolOn (S : Set K) (f : ↥S → K) : Prop := ∃ r : ℕ → RatPair K, (∀ k, (r k).IsPoleFreeOn S) ∧ (∃ b : K, ∀ k (z : ↥S), Valued.v ((r k).evalAt z) ≤ Valued.v b) ∧ TendstoUniformly (fun k (z : ↥S) => (r k).evalAt z) f atTop variable {K} theorem isHolOn_ratPair {S : Set K} (r : RatPair K) (hr : r.IsPoleFreeOn S) (hb : ∃ b : K, ∀ z ∈ S, Valued.v (r.evalAt z) ≤ Valued.v b) : IsHolOn K S (fun z => r.evalAt z) := by obtain ⟨b, hb⟩ := hb refine ⟨fun _ => r, fun _ => hr, ⟨b, fun _ z => hb z z.2⟩, ?_⟩ rw [tendstoUniformly_iff_vRestrict] intro γ exact Filter.Eventually.of_forall fun k z => by simp theorem IsHolOn.const (S : Set K) (c : K) : IsHolOn K S (fun _ => c) := by have := isHolOn_ratPair (S := S) (RatPair.const c) (RatPair.isPoleFreeOn_const S c) ⟨c, fun z _ => by simp⟩ simpa using this theorem exists_bound (b b' : K) : ∃ B : K, B ≠ 0 ∧ Valued.v b ≤ Valued.v B ∧ Valued.v b' ≤ Valued.v B ∧ 1 ≤ Valued.v B := by rcases le_total (Valued.v b) (Valued.v b') with h | h · rcases le_total (Valued.v b') 1 with h1 | h1 · exact ⟨1, one_ne_zero, by rw [map_one]; exact h.trans h1, by rw [map_one]; exact h1, by rw [map_one]⟩ · exact ⟨b', fun h0 => by rw [h0, map_zero] at h1; exact not_lt.2 h1 zero_lt_one, h, le_rfl, h1⟩ · rcases le_total (Valued.v b) 1 with h1 | h1 · exact ⟨1, one_ne_zero, by rw [map_one]; exact h1, by rw [map_one]; exact h.trans h1, by rw [map_one]⟩ · exact ⟨b, fun h0 => by rw [h0, map_zero] at h1; exact not_lt.2 h1 zero_lt_one, le_rfl, h, h1⟩ theorem IsHolOn.bounded {S : Set K} {f : ↥S → K} (h : IsHolOn K S f) : ∃ B : K, ∀ z, Valued.v (f z) ≤ Valued.v B := by obtain ⟨r, -, ⟨b, hb⟩, hlim⟩ := h rw [tendstoUniformly_iff_vRestrict] at hlim obtain ⟨k, hk⟩ := Filter.eventually_atTop.1 (hlim 1) obtain ⟨B, -, hbB, -, h1B⟩ := exists_bound b b refine ⟨B, fun z => ?_⟩ rw [v_le_iff_vRestrict_le] have h1 : vRestrict K ((r k).evalAt z - f z) < 1 := hk k le_rfl z have : f z = (r k).evalAt z - ((r k).evalAt z - f z) := by ring rw [this] refine (Valuation.map_sub _ _ _).trans (max_le ?_ ?_) · exact (v_le_iff_vRestrict_le K _ _).1 ((hb k z).trans hbB) · exact h1.le.trans (by rw [← map_one (vRestrict K)]; exact (v_le_iff_vRestrict_le K _ _).1 (by rwa [map_one])) theorem IsHolOn.neg {S : Set K} {f : ↥S → K} (h : IsHolOn K S f) : IsHolOn K S (-f) := by obtain ⟨r, hr, ⟨b, hb⟩, hlim⟩ := h refine ⟨fun k => (r k).neg, fun k => RatPair.isPoleFreeOn_neg (hr k), ⟨b, fun k z => ?_⟩, ?_⟩ · rw [RatPair.evalAt_neg, Valuation.map_neg]; exact hb k z · rw [tendstoUniformly_iff_vRestrict] at hlim ⊢ intro γ filter_upwards [hlim γ] with k hk z rw [RatPair.evalAt_neg, Pi.neg_apply, show -(r k).evalAt z - -f z = -((r k).evalAt z - f z) by ring, Valuation.map_neg] exact hk z theorem IsHolOn.add {S : Set K} {f g : ↥S → K} (hf : IsHolOn K S f) (hg : IsHolOn K S g) : IsHolOn K S (f + g) := by obtain ⟨r, hr, ⟨b, hb⟩, hlim⟩ := hf obtain ⟨q, hq, ⟨d, hd⟩, hlim'⟩ := hg obtain ⟨B, -, hbB, hdB, -⟩ := exists_bound b d refine ⟨fun k => (r k).add (q k), fun k => RatPair.isPoleFreeOn_add (hr k) (hq k), ⟨B, fun k z => ?_⟩, ?_⟩ · rw [RatPair.evalAt_add (hr k z z.2) (hq k z z.2)] exact (Valuation.map_add _ _ _).trans (max_le ((hb k z).trans hbB) ((hd k z).trans hdB)) · rw [tendstoUniformly_iff_vRestrict] at hlim hlim' ⊢ intro γ filter_upwards [hlim γ, hlim' γ] with k hk hk' z rw [RatPair.evalAt_add (hr k z z.2) (hq k z z.2), Pi.add_apply, show (r k).evalAt z + (q k).evalAt z - (f z + g z) = ((r k).evalAt z - f z) + ((q k).evalAt z - g z) by ring] exact Valuation.map_add_lt _ (hk z) (hk' z) theorem IsHolOn.mul {S : Set K} {f g : ↥S → K} (hf : IsHolOn K S f) (hg : IsHolOn K S g) : IsHolOn K S (f * g) := by obtain ⟨bg, hbg⟩ := hg.bounded obtain ⟨r, hr, ⟨b, hb⟩, hlim⟩ := hf obtain ⟨q, hq, ⟨d, hd⟩, hlim'⟩ := hg refine ⟨fun k => (r k).mul (q k), fun k => RatPair.isPoleFreeOn_mul (hr k) (hq k), ⟨b * d, fun k z => ?_⟩, ?_⟩ · rw [RatPair.evalAt_mul, Valuation.map_mul, Valuation.map_mul] exact mul_le_mul' (hb k z) (hd k z) · rw [tendstoUniformly_iff_vRestrict] at hlim hlim' ⊢ intro γ obtain ⟨B, hB0, hbB, hbgB, -⟩ := exists_bound b bg have hwB : vRestrict K B ≠ 0 := by rwa [ne_eq, map_eq_zero] let c' : (MonoidWithZeroHom.ValueGroup₀ (MonoidWithZeroHom.ofClass (Valued.v (R := K))))ˣ := Units.mk0 _ hwB filter_upwards [hlim (γ / c'), hlim' (γ / c')] with k hk hk' z rw [RatPair.evalAt_mul, Pi.mul_apply, show (r k).evalAt z * (q k).evalAt z - f z * g z = (r k).evalAt z * ((q k).evalAt z - g z) + g z * ((r k).evalAt z - f z) by ring] apply Valuation.map_add_lt · rw [Valuation.map_mul] calc vRestrict K ((r k).evalAt ↑z) * vRestrict K ((q k).evalAt ↑z - g z) < (c' : MonoidWithZeroHom.ValueGroup₀ _) * ((γ / c' : (MonoidWithZeroHom.ValueGroup₀ _)ˣ) : MonoidWithZeroHom.ValueGroup₀ _) := mul_lt_mul_of_le_of_lt_of_nonneg_of_pos ((v_le_iff_vRestrict_le K _ _).1 ((hb k z).trans hbB)) (hk' z) zero_le' (Units.zero_lt c') _ = γ := by rw [Units.val_div_eq_div_val, mul_div_cancel₀ _ c'.ne_zero] · rw [Valuation.map_mul] calc vRestrict K (g z) * vRestrict K ((r k).evalAt ↑z - f z) < (c' : MonoidWithZeroHom.ValueGroup₀ _) * ((γ / c' : (MonoidWithZeroHom.ValueGroup₀ _)ˣ) : MonoidWithZeroHom.ValueGroup₀ _) := mul_lt_mul_of_le_of_lt_of_nonneg_of_pos ((v_le_iff_vRestrict_le K _ _).1 ((hbg z).trans hbgB)) (hk z) zero_le' (Units.zero_lt c') _ = γ := by rw [Units.val_div_eq_div_val, mul_div_cancel₀ _ c'.ne_zero] theorem IsHolOn.one (S : Set K) : IsHolOn K S 1 := IsHolOn.const S 1 theorem IsHolOn.zero (S : Set K) : IsHolOn K S 0 := IsHolOn.const S 0 variable (K) in def holOn (S : Set K) : Subring (↥S → K) where carrier := {f | IsHolOn K S f} mul_mem' hf hg := hf.mul hg one_mem' := IsHolOn.one S add_mem' hf hg := hf.add hg zero_mem' := IsHolOn.zero S neg_mem' hf := hf.neg theorem mem_holOn_iff {S : Set K} (f : ↥S → K) : f ∈ holOn K S ↔ IsHolOn K S f := Iff.rfl end Hol def restrictAffinoid (n : ℕ) (f : ↥(upperHalfPlane K₀ K) → K) : ↥(affinoid ϖ n) → K := f ∘ Set.inclusion (affinoid_subset_upperHalfPlane ϖ n) def holRing : Subring (↥(upperHalfPlane K₀ K) → K) where carrier := {f | ∀ n, IsHolOn K (affinoid ϖ n) (restrictAffinoid ϖ n f)} mul_mem' hf hg := fun n => (hf n).mul (hg n) one_mem' := fun _ => IsHolOn.one _ add_mem' hf hg := fun n => (hf n).add (hg n) zero_mem' := fun _ => IsHolOn.zero _ neg_mem' hf := fun n => (hf n).neg theorem mem_holRing_iff (f : ↥(upperHalfPlane K₀ K) → K) : f ∈ holRing ϖ ↔ ∀ n, IsHolOn K (affinoid ϖ n) (restrictAffinoid ϖ n f) := Iff.rfl theorem const_mem_holRing (c : K) : (fun _ => c : ↥(upperHalfPlane K₀ K) → K) ∈ holRing ϖ := fun _ => IsHolOn.const _ c def holSubalgebra : Subalgebra K (↥(upperHalfPlane K₀ K) → K) := { holRing ϖ with algebraMap_mem' := fun c => const_mem_holRing ϖ c } instance holRingAlgebra : Algebra K ↥(holRing ϖ) := (holSubalgebra ϖ).algebra @[simp] theorem algebraMap_holRing_apply (c : K) (z : ↥(upperHalfPlane K₀ K)) : ((algebraMap K ↥(holRing ϖ) c : ↥(holRing ϖ)) : ↥(upperHalfPlane K₀ K) → K) z = c := rfl section Actions variable [DecidableEq K] instance pglOmegaAction : MulAction PGL(2, K₀) ↥(upperHalfPlane K₀ K) where smul g z := ⟨pmoebius K₀ g (z : K), pmoebius_mem_upperHalfPlane K₀ z.2 g⟩ one_smul z := Subtype.ext (pmoebius_one K₀ (z : K)) mul_smul g h z := Subtype.ext (pmoebius_mul K₀ z.2 g h) theorem coe_smul_upperHalfPlane (g : PGL(2, K₀)) (z : ↥(upperHalfPlane K₀ K)) : ((g • z : ↥(upperHalfPlane K₀ K)) : K) = pmoebius K₀ g (z : K) := rfl def precomp (g : PGL(2, K₀)) (f : ↥(upperHalfPlane K₀ K) → K) : ↥(upperHalfPlane K₀ K) → K := fun z => f (g⁻¹ • z) theorem precomp_one (f : ↥(upperHalfPlane K₀ K) → K) : precomp (1 : PGL(2, K₀)) f = f := funext fun z => by rw [precomp, inv_one, one_smul] theorem precomp_mul (g h : PGL(2, K₀)) (f : ↥(upperHalfPlane K₀ K) → K) : precomp (g * h) f = precomp g (precomp h f) := funext fun z => by simp only [precomp, mul_inv_rev, mul_smul] section Stab local notation "𝔭" => Valued.v (algebraMap K₀ K ϖ.ϖ) omit [DecidableEq K] in private theorem p_le_one : 𝔭 ≤ 1 := ϖ.lt_one.le omit [DecidableEq K] in private theorem one_le_P : 1 ≤ 𝔭⁻¹ := (one_le_inv₀ ϖ.pos).2 (p_le_one ϖ) omit [DecidableEq K] in private theorem p_pow_anti {i j : ℕ} (h : i ≤ j) : 𝔭 ^ j ≤ 𝔭 ^ i := pow_le_pow_right_of_le_one' (p_le_one ϖ) h omit [DecidableEq K] in private theorem P_pow_mono {i j : ℕ} (h : i ≤ j) : 𝔭⁻¹ ^ i ≤ 𝔭⁻¹ ^ j := pow_le_pow_right₀ (one_le_P ϖ) h omit [DecidableEq K] in private theorem P_pow_mul_p_pow (i : ℕ) : 𝔭⁻¹ ^ i * 𝔭 ^ i = 1 := by rw [← mul_pow, inv_mul_cancel₀ ϖ.pos.ne', one_pow] omit [DecidableEq K] in private theorem exists_common_scale (l : List K₀) : ∃ N : ℕ, ∀ e ∈ l, e ≠ 0 → 𝔭 ^ N ≤ Valued.v (algebraMap K₀ K e) ∧ Valued.v (algebraMap K₀ K e) ≤ 𝔭⁻¹ ^ N := by induction l with | nil => exact ⟨0, fun e he => by simp at he⟩ | cons x l ih => obtain ⟨N, hN⟩ := ih by_cases hx : x = 0 · exact ⟨N, fun e he hne => by rcases List.mem_cons.1 he with rfl | he · exact absurd hx hne · exact hN e he hne⟩ · obtain ⟨M, hM₁, hM₂⟩ := ϖ.scale x hx refine ⟨max N M, fun e he hne => ?_⟩ rcases List.mem_cons.1 he with rfl | he · exact ⟨(p_pow_anti ϖ (le_max_right N M)).trans hM₁, hM₂.trans (P_pow_mono ϖ (le_max_right N M))⟩ · exact ⟨(p_pow_anti ϖ (le_max_left N M)).trans (hN e he hne).1, (hN e he hne).2.trans (P_pow_mono ϖ (le_max_left N M))⟩ omit [DecidableEq K] in private theorem linear_lower {n : ℕ} {z : K} (hz : z ∈ affinoid ϖ n) (α β : K₀) (hα : α ≠ 0) : Valued.v (algebraMap K₀ K α) * 𝔭 ^ n ≤ Valued.v (algebraMap K₀ K α * z + algebraMap K₀ K β) := by have hα' : algebraMap K₀ K α ≠ 0 := by rwa [ne_eq, map_eq_zero] have : algebraMap K₀ K α * z + algebraMap K₀ K β = algebraMap K₀ K α * (z - algebraMap K₀ K (-(β / α))) := by rw [map_neg, map_div₀, sub_neg_eq_add, mul_add, mul_div_cancel₀ _ hα'] rw [this, Valuation.map_mul] exact mul_le_mul_right (((mem_affinoid_iff' ϖ n z).1 hz).2 _) _ omit [DecidableEq K] in private theorem linear_upper {n : ℕ} {z : K} (hz : Valued.v z ≤ 𝔭⁻¹ ^ n) (α β : K) : Valued.v (α * z + β) ≤ max (Valued.v α * 𝔭⁻¹ ^ n) (Valued.v β) := (Valuation.map_add _ _ _).trans (max_le_max (by rw [Valuation.map_mul]; exact mul_le_mul_right hz _) le_rfl) theorem exists_mapsTo_affinoid (g : PGL(2, K₀)) (n : ℕ) : ∃ m : ℕ, Set.MapsTo (pmoebius K₀ g) (affinoid ϖ n) (affinoid ϖ m) := by induction g using Matrix.ProjGenLinGroup.induction_on with | _ γ => obtain ⟨N, hN⟩ := exists_common_scale ϖ [γ 0 0, γ 0 1, γ 1 0, γ 1 1, Matrix.det (γ : Matrix (Fin 2) (Fin 2) K₀)] refine ⟨3 * n + 3 * N, fun z hz => ?_⟩ have hzΩ : z ∈ upperHalfPlane K₀ K := affinoid_subset_upperHalfPlane ϖ n hz have hz1 : Valued.v z ≤ 𝔭⁻¹ ^ n := ((mem_affinoid_iff' ϖ n z).1 hz).1 set a := γ 0 0 with ha; set b := γ 0 1 with hb; set c := γ 1 0 with hc; set d := γ 1 1 with hd have hdet : Matrix.det (γ : Matrix (Fin 2) (Fin 2) K₀) = a * d - b * c := by rw [Matrix.det_fin_two] have hdet0 : a * d - b * c ≠ 0 := hdet ▸ γ.det_ne_zero have hcd : algebraMap K₀ K c * z + algebraMap K₀ K d ≠ 0 := moebius_denom_ne_zero_of_mem K₀ hzΩ γ rw [pmoebius_mk K₀ γ z hcd, moebius] have sa := hN a (by simp); have sb := hN b (by simp); have sc := hN c (by simp); have sd := hN d (by simp) have sdet := hN (Matrix.det (γ : Matrix (Fin 2) (Fin 2) K₀)) (by simp) rw [hdet] at sdet have hP1 := one_le_P ϖ have hp1 := p_le_one ϖ have hden_lo : 𝔭 ^ (n + N) ≤ Valued.v (algebraMap K₀ K c * z + algebraMap K₀ K d) := by by_cases hc0 : c = 0 · have hd0 : d ≠ 0 := fun hd0 => hdet0 (by rw [hc0, hd0, mul_zero, mul_zero, sub_zero]) rw [hc0, map_zero, zero_mul, zero_add] exact (p_pow_anti ϖ (Nat.le_add_left N n)).trans (sd hd0).1 · calc 𝔭 ^ (n + N) = 𝔭 ^ N * 𝔭 ^ n := by rw [pow_add, mul_comm] _ ≤ Valued.v (algebraMap K₀ K c) * 𝔭 ^ n := mul_le_mul_left (sc hc0).1 _ _ ≤ _ := linear_lower ϖ hz c d hc0 have entry_le : ∀ e : K₀, (e ≠ 0 → 𝔭 ^ N ≤ Valued.v (algebraMap K₀ K e) ∧ Valued.v (algebraMap K₀ K e) ≤ 𝔭⁻¹ ^ N) → Valued.v (algebraMap K₀ K e) ≤ 𝔭⁻¹ ^ N := fun e he => by by_cases h0 : e = 0 · rw [h0, map_zero, map_zero]; exact zero_le' · exact (he h0).2 have hlin_up : ∀ α β : K₀, Valued.v (algebraMap K₀ K α) ≤ 𝔭⁻¹ ^ N → Valued.v (algebraMap K₀ K β) ≤ 𝔭⁻¹ ^ N → Valued.v (algebraMap K₀ K α * z + algebraMap K₀ K β) ≤ 𝔭⁻¹ ^ (n + N) := fun α β hα hβ => by refine (linear_upper ϖ hz1 _ _).trans (max_le ?_ ?_) · rw [pow_add, mul_comm]; exact mul_le_mul_right hα _ · exact hβ.trans (P_pow_mono ϖ (Nat.le_add_left N n)) have hden_up := hlin_up c d (entry_le c sc) (entry_le d sd) have hnum_up := hlin_up a b (entry_le a sa) (entry_le b sb) rw [mem_affinoid_iff'] constructor · rw [map_div₀, div_le_iff₀ (lt_of_lt_of_le (pow_pos ϖ.pos _) hden_lo)] refine hnum_up.trans ?_ calc 𝔭⁻¹ ^ (n + N) = 𝔭⁻¹ ^ (3 * n + 3 * N) * 𝔭 ^ (2 * n + 2 * N) := by rw [show 3 * n + 3 * N = (n + N) + (2 * n + 2 * N) by ring, pow_add 𝔭⁻¹ (n + N) (2 * n + 2 * N), mul_assoc, P_pow_mul_p_pow, mul_one] _ ≤ 𝔭⁻¹ ^ (3 * n + 3 * N) * 𝔭 ^ (n + N) := mul_le_mul_right (p_pow_anti ϖ (by omega)) _ _ ≤ 𝔭⁻¹ ^ (3 * n + 3 * N) * Valued.v (algebraMap K₀ K c * z + algebraMap K₀ K d) := mul_le_mul_right hden_lo _ · intro t have hsub : (algebraMap K₀ K a * z + algebraMap K₀ K b) / (algebraMap K₀ K c * z + algebraMap K₀ K d) - algebraMap K₀ K t = (algebraMap K₀ K (a - t * c) * z + algebraMap K₀ K (b - t * d)) / (algebraMap K₀ K c * z + algebraMap K₀ K d) := by rw [eq_div_iff hcd, sub_mul, div_mul_cancel₀ _ hcd, map_sub, map_sub, map_mul, map_mul]; ring rw [hsub, map_div₀, le_div_iff₀ (lt_of_lt_of_le (pow_pos ϖ.pos _) hden_lo)] set α := a - t * c with hα set β := b - t * d with hβ have hkey : α * d - β * c = a * d - b * c := by rw [hα, hβ]; ring have hnum_lo : 𝔭 ^ (2 * n + 2 * N) ≤ Valued.v (algebraMap K₀ K α * z + algebraMap K₀ K β) := by have hdet_lo : 𝔭 ^ N ≤ Valued.v (algebraMap K₀ K (a * d - b * c)) := (sdet hdet0).1 have hpN : 0 < 𝔭 ^ N := pow_pos ϖ.pos N have hmax : Valued.v (algebraMap K₀ K (a * d - b * c)) ≤ max (Valued.v (algebraMap K₀ K α) * Valued.v (algebraMap K₀ K d)) (Valued.v (algebraMap K₀ K β) * Valued.v (algebraMap K₀ K c)) := by rw [← hkey, map_sub, map_mul, map_mul, ← Valuation.map_mul, ← Valuation.map_mul] exact Valuation.map_sub _ _ _ have step : ∀ (X E : K₀), 𝔭 ^ N ≤ Valued.v (algebraMap K₀ K X) * Valued.v (algebraMap K₀ K E) → Valued.v (algebraMap K₀ K E) ≤ 𝔭⁻¹ ^ N → 𝔭 ^ (2 * N) ≤ Valued.v (algebraMap K₀ K X) := fun X E h1 h2 => by calc 𝔭 ^ (2 * N) = 𝔭 ^ N * 𝔭 ^ N := by rw [two_mul, pow_add] _ ≤ (Valued.v (algebraMap K₀ K X) * 𝔭⁻¹ ^ N) * 𝔭 ^ N := mul_le_mul_left (h1.trans (mul_le_mul_right h2 _)) _ _ = Valued.v (algebraMap K₀ K X) := by rw [mul_assoc, P_pow_mul_p_pow, mul_one] have fin_lower : ∀ X : K₀, X ≠ 0 → 𝔭 ^ (2 * N) ≤ Valued.v (algebraMap K₀ K X) → 𝔭 ^ (2 * n + 2 * N) ≤ Valued.v (algebraMap K₀ K X) * 𝔭 ^ n := fun X hX h => by calc 𝔭 ^ (2 * n + 2 * N) ≤ 𝔭 ^ (n + 2 * N) := p_pow_anti ϖ (by omega) _ = 𝔭 ^ (2 * N) * 𝔭 ^ n := by rw [add_comm, pow_add] _ ≤ _ := mul_le_mul_left h _ rcases le_max_iff.1 hmax with hA | hB · have hα0 : α ≠ 0 := by intro h0 rw [h0, map_zero, map_zero, zero_mul] at hA exact hpN.ne' (le_zero_iff.1 (hdet_lo.trans hA)) have hvα := step α d (hdet_lo.trans hA) (entry_le d sd) exact (fin_lower α hα0 hvα).trans (linear_lower ϖ hz α β hα0) · have hvβ := step β c (hdet_lo.trans hB) (entry_le c sc) by_cases hα0 : α = 0 · rw [hα0, map_zero, zero_mul, zero_add] exact (p_pow_anti ϖ (by omega : 2 * N ≤ 2 * n + 2 * N)).trans hvβ · rcases lt_or_ge (Valued.v (algebraMap K₀ K α * z)) (Valued.v (algebraMap K₀ K β)) with hlt | hge · rw [Valuation.map_add_eq_of_lt_right _ hlt] exact (p_pow_anti ϖ (by omega : 2 * N ≤ 2 * n + 2 * N)).trans hvβ · have h1 : 𝔭 ^ (2 * N) ≤ Valued.v (algebraMap K₀ K α) * 𝔭⁻¹ ^ n := hvβ.trans (hge.trans (by rw [Valuation.map_mul]; exact mul_le_mul_right hz1 _)) have h2 : 𝔭 ^ (2 * N) * 𝔭 ^ n ≤ Valued.v (algebraMap K₀ K α) := by calc 𝔭 ^ (2 * N) * 𝔭 ^ n ≤ (Valued.v (algebraMap K₀ K α) * 𝔭⁻¹ ^ n) * 𝔭 ^ n := mul_le_mul_left h1 _ _ = Valued.v (algebraMap K₀ K α) := by rw [mul_assoc, P_pow_mul_p_pow, mul_one] calc 𝔭 ^ (2 * n + 2 * N) = (𝔭 ^ (2 * N) * 𝔭 ^ n) * 𝔭 ^ n := by rw [show 2 * n + 2 * N = 2 * N + n + n by ring, pow_add, pow_add] _ ≤ Valued.v (algebraMap K₀ K α) * 𝔭 ^ n := mul_le_mul_left h2 _ _ ≤ _ := linear_lower ϖ hz α β hα0 calc 𝔭 ^ (3 * n + 3 * N) * Valued.v (algebraMap K₀ K c * z + algebraMap K₀ K d) ≤ 𝔭 ^ (3 * n + 3 * N) * 𝔭⁻¹ ^ (n + N) := mul_le_mul_right hden_up _ _ = 𝔭 ^ (2 * n + 2 * N) := by rw [show 3 * n + 3 * N = (2 * n + 2 * N) + (n + N) by ring, pow_add 𝔭 (2 * n + 2 * N) (n + N), mul_assoc, mul_comm (𝔭 ^ (n + N)), P_pow_mul_p_pow, mul_one] _ ≤ _ := hnum_lo end Stab theorem precomp_mem_holRing (g : PGL(2, K₀)) {f : ↥(upperHalfPlane K₀ K) → K} (hf : f ∈ holRing ϖ) : precomp g f ∈ holRing ϖ := by intro n obtain ⟨γ, hγ⟩ : ∃ γ : GL (Fin 2) K₀, Matrix.ProjGenLinGroup.mk γ = g⁻¹ := by induction g⁻¹ using Matrix.ProjGenLinGroup.induction_on with | _ γ => exact ⟨γ, rfl⟩ obtain ⟨m, hm⟩ := exists_mapsTo_affinoid ϖ g⁻¹ n obtain ⟨r, hr, ⟨b, hb⟩, hlim⟩ := hf m have hΩ : affinoid ϖ n ⊆ upperHalfPlane K₀ K := affinoid_subset_upperHalfPlane ϖ n have hpm : ∀ z : K, z ∈ upperHalfPlane K₀ K → pmoebius K₀ g⁻¹ z = moebius K₀ K γ z := fun z hz => by rw [← hγ, pmoebius_mk K₀ γ z (moebius_denom_ne_zero_of_mem K₀ hz γ)] have hmaps : Set.MapsTo (moebius K₀ K γ) (affinoid ϖ n) (affinoid ϖ m) := fun z hz => by rw [← hpm z (hΩ hz)]; exact hm hz refine ⟨fun k => (r k).pullback γ, fun k => RatPair.isPoleFreeOn_pullback hΩ γ hmaps (r k) (hr k), ⟨b, fun k z => ?_⟩, ?_⟩ · rw [RatPair.evalAt_pullback (hΩ z.2)] exact hb k ⟨_, hmaps z.2⟩ · rw [tendstoUniformly_iff_vRestrict] at hlim ⊢ intro δ filter_upwards [hlim δ] with k hk z have hz' := hk ⟨_, hmaps z.2⟩ rw [RatPair.evalAt_pullback (hΩ z.2)] have harg : (g⁻¹ • (⟨(z : K), hΩ z.2⟩ : ↥(upperHalfPlane K₀ K)) : ↥(upperHalfPlane K₀ K)) = ⟨moebius K₀ K γ z, affinoid_subset_upperHalfPlane ϖ m (hmaps z.2)⟩ := Subtype.ext (hpm z (hΩ z.2)) show vRestrict K ((r k).evalAt (moebius K₀ K γ ↑z) - f (g⁻¹ • (⟨(z : K), hΩ z.2⟩ : ↥(upperHalfPlane K₀ K)))) < δ rw [harg] exact hz' instance holRingAction : MulSemiringAction PGL(2, K₀) ↥(holRing ϖ) where smul g f := ⟨precomp g f, precomp_mem_holRing ϖ g f.2⟩ one_smul f := Subtype.ext (precomp_one (f : ↥(upperHalfPlane K₀ K) → K)) mul_smul g h f := Subtype.ext (precomp_mul g h (f : ↥(upperHalfPlane K₀ K) → K)) smul_zero _ := rfl smul_add _ _ _ := rfl smul_one _ := rfl smul_mul _ _ _ := rfl @[simp] theorem coe_smul_holRing_apply (g : PGL(2, K₀)) (f : ↥(holRing ϖ)) (z : ↥(upperHalfPlane K₀ K)) : ((g • f : ↥(holRing ϖ)) : ↥(upperHalfPlane K₀ K) → K) z = (f : ↥(upperHalfPlane K₀ K) → K) (g⁻¹ • z) := rfl instance holRingSMulCommClass : SMulCommClass PGL(2, K₀) K ↥(holRing ϖ) := ⟨fun _ _ _ => rfl⟩ variable (K₀ K) in structure IsometricAut where toRingEquiv : K ≃+* K isometry : ∀ x : K, Valued.v (toRingEquiv x) = Valued.v x fix : ∀ a : K₀, toRingEquiv (algebraMap K₀ K a) = algebraMap K₀ K a namespace IsometricAut omit [DecidableEq K] in @[ext] theorem ext {s t : IsometricAut K₀ K} (h : s.toRingEquiv = t.toRingEquiv) : s = t := by cases s; cases t; congr instance instGroup : Group (IsometricAut K₀ K) where mul s t := ⟨t.toRingEquiv.trans s.toRingEquiv, fun x => by rw [RingEquiv.coe_trans, Function.comp_apply, s.isometry, t.isometry], fun a => by rw [RingEquiv.coe_trans, Function.comp_apply, t.fix, s.fix]⟩ one := ⟨RingEquiv.refl K, fun _ => rfl, fun _ => rfl⟩ inv s := ⟨s.toRingEquiv.symm, fun x => by conv_rhs => rw [← s.toRingEquiv.apply_symm_apply x]; rw [s.isometry], fun a => by apply s.toRingEquiv.injective; rw [RingEquiv.apply_symm_apply, s.fix]⟩ mul_assoc s t u := ext rfl one_mul s := ext (RingEquiv.ext fun _ => rfl) mul_one s := ext (RingEquiv.ext fun _ => rfl) inv_mul_cancel s := ext (RingEquiv.ext fun x => s.toRingEquiv.symm_apply_apply x) omit [DecidableEq K] in @[simp] theorem inv_toRingEquiv (s : IsometricAut K₀ K) : (s⁻¹).toRingEquiv = s.toRingEquiv.symm := rfl omit [DecidableEq K] in theorem mapsTo_upperHalfPlane (s : IsometricAut K₀ K) : Set.MapsTo s.toRingEquiv (upperHalfPlane K₀ K) (upperHalfPlane K₀ K) := by intro z hz rw [mem_upperHalfPlane_iff] at hz ⊢ intro a ha apply hz a apply s.toRingEquiv.injective rw [s.fix a, ha] omit [DecidableEq K] in theorem mapsTo_affinoid (s : IsometricAut K₀ K) (n : ℕ) : Set.MapsTo s.toRingEquiv (affinoid ϖ n) (affinoid ϖ n) := by rintro z ⟨hz₁, hz₂⟩ refine ⟨by rw [s.isometry]; exact hz₁, fun a ha => ?_⟩ rw [← s.fix a, ← map_sub, s.isometry] exact hz₂ a ha theorem comm_pmoebius (s : IsometricAut K₀ K) (g : PGL(2, K₀)) {z : K} (hz : z ∈ upperHalfPlane K₀ K) : s.toRingEquiv (pmoebius K₀ g z) = pmoebius K₀ g (s.toRingEquiv z) := by induction g using Matrix.ProjGenLinGroup.induction_on with | _ g => have hsz : s.toRingEquiv z ∈ upperHalfPlane K₀ K := s.mapsTo_upperHalfPlane hz rw [pmoebius_mk K₀ g z (moebius_denom_ne_zero_of_mem K₀ hz g), pmoebius_mk K₀ g (s.toRingEquiv z) (moebius_denom_ne_zero_of_mem K₀ hsz g), moebius, moebius, map_div₀, map_add, map_add, map_mul, map_mul, s.fix, s.fix, s.fix, s.fix] def funMap (s : IsometricAut K₀ K) : (↥(upperHalfPlane K₀ K) → K) ≃+* (↥(upperHalfPlane K₀ K) → K) where toFun f := fun z => s.toRingEquiv (f ⟨s.toRingEquiv.symm z, (s⁻¹).mapsTo_upperHalfPlane z.2⟩) invFun f := fun z => s.toRingEquiv.symm (f ⟨s.toRingEquiv z, s.mapsTo_upperHalfPlane z.2⟩) left_inv f := funext fun z => by simp right_inv f := funext fun z => by simp map_mul' f f' := funext fun z => map_mul s.toRingEquiv _ _ map_add' f f' := funext fun z => map_add s.toRingEquiv _ _ omit [DecidableEq K] in theorem vRestrict_map (s : IsometricAut K₀ K) (x : K) : vRestrict K (s.toRingEquiv x) = vRestrict K x := le_antisymm ((v_le_iff_vRestrict_le K _ _).1 (s.isometry x).le) ((v_le_iff_vRestrict_le K _ _).1 (s.isometry x).ge) omit [DecidableEq K] in theorem funMap_mem_holRing (s : IsometricAut K₀ K) {f : ↥(upperHalfPlane K₀ K) → K} (hf : f ∈ holRing ϖ) : s.funMap f ∈ holRing ϖ := by intro n obtain ⟨r, hr, ⟨b, hb⟩, hlim⟩ := hf n have hmem : ∀ z : K, z ∈ affinoid ϖ n → s.toRingEquiv.symm z ∈ affinoid ϖ n := fun z hz => (s⁻¹).mapsTo_affinoid ϖ n hz refine ⟨fun k => (r k).map s.toRingEquiv, fun k z hz => ?_, ⟨b, fun k z => ?_⟩, ?_⟩ · have h := RatPair.map_den_eval s.toRingEquiv (r k) (s.toRingEquiv.symm z) rw [RingEquiv.apply_symm_apply] at h rw [h, map_ne_zero] exact hr k _ (hmem z hz) · have h := RatPair.evalAt_map s.toRingEquiv (r k) (s.toRingEquiv.symm z) rw [RingEquiv.apply_symm_apply] at h rw [h, s.isometry] exact hb k ⟨_, hmem z z.2⟩ · rw [tendstoUniformly_iff_vRestrict] at hlim ⊢ intro γ filter_upwards [hlim γ] with k hk z have h := RatPair.evalAt_map s.toRingEquiv (r k) (s.toRingEquiv.symm z) rw [RingEquiv.apply_symm_apply] at h have hz' := hk ⟨_, hmem z z.2⟩ rw [h] show vRestrict K (s.toRingEquiv ((r k).evalAt (s.toRingEquiv.symm ↑z)) - s.toRingEquiv (f ⟨s.toRingEquiv.symm z, (s⁻¹).mapsTo_upperHalfPlane (affinoid_subset_upperHalfPlane ϖ n z.2)⟩)) < γ rw [← map_sub, vRestrict_map] exact hz' def coeffMap (s : IsometricAut K₀ K) : ↥(holRing ϖ) ≃+* ↥(holRing ϖ) where toFun f := ⟨s.funMap f, s.funMap_mem_holRing ϖ f.2⟩ invFun f := ⟨(s⁻¹).funMap f, (s⁻¹).funMap_mem_holRing ϖ f.2⟩ left_inv f := Subtype.ext (funext fun z => by simp [funMap]) right_inv f := Subtype.ext (funext fun z => by simp [funMap]) map_mul' f f' := Subtype.ext (map_mul s.funMap _ _) map_add' f f' := Subtype.ext (map_add s.funMap _ _) omit [DecidableEq K] in theorem coeffMap_algebraMap (s : IsometricAut K₀ K) (c : K) : s.coeffMap ϖ (algebraMap K ↥(holRing ϖ) c) = algebraMap K ↥(holRing ϖ) (s.toRingEquiv c) := Subtype.ext (funext fun _ => rfl) theorem coeffMap_smul (s : IsometricAut K₀ K) (g : PGL(2, K₀)) (f : ↥(holRing ϖ)) : s.coeffMap ϖ (g • f) = g • s.coeffMap ϖ f := by apply Subtype.ext funext z show s.toRingEquiv ((f : ↥(upperHalfPlane K₀ K) → K) (g⁻¹ • ⟨s.toRingEquiv.symm z, (s⁻¹).mapsTo_upperHalfPlane z.2⟩)) = s.toRingEquiv ((f : ↥(upperHalfPlane K₀ K) → K) ⟨s.toRingEquiv.symm ((g⁻¹ • z : ↥(upperHalfPlane K₀ K)) : K), (s⁻¹).mapsTo_upperHalfPlane (g⁻¹ • z).2⟩) congr 2 apply congrArg apply Subtype.ext show pmoebius K₀ g⁻¹ (s.toRingEquiv.symm z) = s.toRingEquiv.symm (pmoebius K₀ g⁻¹ (z : K)) have h := (s⁻¹).comm_pmoebius g⁻¹ z.2 rw [inv_toRingEquiv] at h exact h.symm def toAmbient (s : IsometricAut K₀ K) : Mumford.AmbientSemilinearAut K PGL(2, K₀) ↥(holRing ϖ) where base := s.toRingEquiv map := s.coeffMap ϖ map_algebraMap := s.coeffMap_algebraMap ϖ map_smul := fun g f => s.coeffMap_smul ϖ g f end IsometricAut end Actions theorem iUnion_affinoid (h : IsExhausted ϖ) : (⋃ n, affinoid ϖ n) = upperHalfPlane K₀ K := Set.Subset.antisymm (Set.iUnion_subset fun n => affinoid_subset_upperHalfPlane ϖ n) fun z hz => Set.mem_iUnion.2 (h z hz) section Hom variable [DecidableEq K] def IsometricAut.toAmbientHom : IsometricAut K₀ K →* Mumford.AmbientSemilinearAut K PGL(2, K₀) ↥(holRing ϖ) where toFun s := s.toAmbient ϖ map_one' := Mumford.AmbientSemilinearAut.ext rfl (RingEquiv.ext fun f => Subtype.ext (funext fun _ => congrArg (f : ↥(upperHalfPlane K₀ K) → K) (Subtype.ext rfl))) map_mul' _ _ := Mumford.AmbientSemilinearAut.ext rfl (RingEquiv.ext fun _ => Subtype.ext (funext fun _ => rfl)) end Hom section Glue variable [DecidableEq K] {G : Type} [Group G] (ρ : G →* PGL(2, K₀)) set_option linter.unusedVariables false in def HolRingOf (ρ : G →* PGL(2, K₀)) : Type := ↥(holRing ϖ) instance HolRingOf.instCommRing : CommRing (HolRingOf ϖ ρ) := inferInstanceAs (CommRing ↥(holRing ϖ)) instance HolRingOf.instAlgebra : Algebra K (HolRingOf ϖ ρ) := inferInstanceAs (Algebra K ↥(holRing ϖ)) instance HolRingOf.instMulSemiringAction : MulSemiringAction G (HolRingOf ϖ ρ) := MulSemiringAction.compHom ↥(holRing ϖ) ρ instance HolRingOf.instSMulCommClass : SMulCommClass G K (HolRingOf ϖ ρ) := ⟨fun g c f => smul_comm (ρ g) c (show ↥(holRing ϖ) from f)⟩ omit [DecidableEq K] in theorem HolRingOf.isDomain_iff : IsDomain (HolRingOf ϖ ρ) ↔ IsDomain ↥(holRing ϖ) := Iff.rfl theorem HolRingOf.smul_def (g : G) (f : HolRingOf ϖ ρ) : g • f = (ρ g • (show ↥(holRing ϖ) from f) : ↥(holRing ϖ)) := rfl def toAmbientOf (s : IsometricAut K₀ K) : Mumford.AmbientSemilinearAut K G (HolRingOf ϖ ρ) where base := s.toRingEquiv map := s.coeffMap ϖ map_algebraMap := s.coeffMap_algebraMap ϖ map_smul := fun g f => s.coeffMap_smul ϖ (ρ g) f def toAmbientOfHom : IsometricAut K₀ K →* Mumford.AmbientSemilinearAut K G (HolRingOf ϖ ρ) where toFun := toAmbientOf ϖ ρ map_one' := Mumford.AmbientSemilinearAut.ext rfl (RingEquiv.ext fun f => Subtype.ext (funext fun _ => congrArg ((show ↥(holRing ϖ) from f) : ↥(upperHalfPlane K₀ K) → K) (Subtype.ext rfl))) map_mul' _ _ := Mumford.AmbientSemilinearAut.ext rfl (RingEquiv.ext fun _ => Subtype.ext (funext fun _ => rfl)) end Glue abbrev merField : Type := FractionRing ↥(holRing ϖ) end CerednikDrinfeld.Omega end
Statements phrased using this module (224)
- Natural equivariant uniformisation of Jacobians of Mumford quotients
AlgebraicCurve.Pic0.exists_equivariantUniformization_family_natural_of_mumfordQuotient_of_v_card_stabilizer_eq_one296 below · depth 19 - Every pseudo-uniformiser of ℚ^{cl} exhausts the upper half plane
CerednikDrinfeld.Omega.isExhausted_of_liesOverPrime6 below · depth 19 - Quotient-graph presentation of the Mumford side at q'
CerednikDrinfeld.exists_quotientPresentation_classSet_hecke_of_descentIntertwining_one_zero3,953 below · depth 19 - Quotient-graph presentation at q with class set and Hecke
CerednikDrinfeld.exists_quotientPresentation_classSet_hecke_of_descentIntertwining_zero_one3,951 below · depth 19 - Shimura curve model, Hecke tower and Čerednik interchange pair
CerednikDrinfeld.exists_shimuraCurveModel_heckeTower_and_interchangeData_pair_of_six_mul_dvd_of_neZero10,249 below · depth 19 - Symmetry group with compatible semilinear actions over q'
CerednikDrinfeld.exists_symmetryGroup_semilinearAction_invariantFieldOf_of_descentIntertwining_one_zero43 below · depth 19 - Symmetry group of the Čerednik–Drinfeld tower at q
CerednikDrinfeld.exists_symmetryGroup_semilinearAction_invariantFieldOf_of_descentIntertwining_zero_one39 below · depth 19 - Invariant fields of the level groups at q' are curves
CerednikDrinfeld.isCurveOver_invariantFieldOf_levelGroups_of_descentIntertwining_one_zero3,838 below · depth 19 - Mumford fields of the level groups are curves over C
CerednikDrinfeld.isCurveOver_invariantFieldOf_levelGroups_of_descentIntertwining_zero_one3,838 below · depth 19 - Level-group vertex stabilisers have order prime to q'
CerednikDrinfeld.valuation_natCard_stabilizer_vertex_levelGroups_eq_one_of_descentIntertwining_one_zero3,792 below · depth 19 - Vertex stabilisers of the level groups have order prime to q
CerednikDrinfeld.valuation_natCard_stabilizer_vertex_levelGroups_eq_one_of_descentIntertwining_zero_one3,792 below · depth 19 - Push-forward square for pinned Mumford uniformisations along φ
AlgebraicCurve.Pic0.eFull_comp_pullback_eq_mk_pushforwardAlong_of_mumfordQuotient_theta65 below · depth 20 - Pullback compatibility of pinned Mumford uniformisations of Pic⁰
AlgebraicCurve.Pic0.eFull_comp_pushforward_eq_mk_pullbackAlong_of_mumfordQuotient_theta_of_v_card_stabilizer_eq_one138 below · depth 20 - Equivariant Manin–Drinfeld uniformisation of Jacobians of Mumford quotients
AlgebraicCurve.Pic0.exists_equivariantUniformization_of_mumfordQuotient_theta_of_mem_valuationSubring_iff_of_v_card_stabilizer_eq_one247 below · depth 20 - Adjointness of pullback and pushforward for Mumford period pairings
AlgebraicCurve.Pic0.periodPairing_pullback_eq_periodPairing_pushforward_of_mumfordQuotient_theta50 below · depth 20 - Atkin–Lehner relations for the Čerednik level groups
CerednikDrinfeld.CosetGraph.atkinLehner_relations_levelGroups_place38 below · depth 20 - Class-set dictionary for the Bruhat–Tits quotient at r
CerednikDrinfeld.CosetGraph.exists_quot_equiv_classSet_shift_forget_of_mumfordSideFrame3,794 below · depth 20 - Mumford frame at r: tame stabilisers, finite quotients, class sets
CerednikDrinfeld.CosetGraph.finite_stabilizer_and_finite_quot_and_exists_equiv_classSet_of_mumfordSideFrame3,783 below · depth 20 - Commuting Atkin–Lehner involutions from Čerednik descent data
CerednikDrinfeld.HeckeTower.atkinLehner_involutive_comm_galois_of_descentIntertwining_one_zero39 below · depth 20 - Degeneracy maps intertwine Galois and Atkin–Lehner actions
CerednikDrinfeld.HeckeTower.smul_phi_eq_phi_smul_of_descentIntertwining_one_zero39 below · depth 20 - Points of the Mumford curve: orbits, surjectivity, evaluation
CerednikDrinfeld.Omega.exists_place_invariantFieldOf_eq_iff_mem_orbit_and_evalAt_eq_of_map_le_typePreserving_of_isCurveOver_of_exists_v_le_of_v_card_stabilizer_eq_one156 below · depth 20 - Locally compact constants yield an exhausting pseudo-uniformiser
CerednikDrinfeld.Omega.exists_pseudoUniformizer_isExhausted_of_isCompact0 below · depth 20 - Pseudo-uniformiser varpi=r for the closure of ℚ
CerednikDrinfeld.Omega.exists_pseudoUniformizer_ratClosure_eq_natCast_of_liesOverPrime6 below · depth 20 - Invariant field of the type-preserving part is a curve field
CerednikDrinfeld.Omega.isCurveOver_invariantFieldOf_inf_typePreserving_of_exists_relIndex_ne_zero_of_exists_not_mem_range84 below · depth 20 - The ring of holomorphic functions on Ω over C_A is a domain
CerednikDrinfeld.Omega.isDomain_holRing_of_liesOverPrime15 below · depth 20 - Realisation-independent permutation actions on quotients of the Bruhat–Tits tree
CerednikDrinfeld.exists_perm_quotVert_quotEdge_realisation_independent_of_descentIntertwining_one_zero3,952 below · depth 20 - Realisation-independent permutation actions on Bruhat–Tits tree quotients
CerednikDrinfeld.exists_perm_quotVert_quotEdge_realisation_independent_of_descentIntertwining_zero_one3,950 below · depth 20 - Čerednik interchange at q and q' for X^{qq'}₀(N)
CerednikDrinfeld.exists_shimuraCurveModel_heckeTower_and_cerednikInterchange_pair_of_six_mul_dvd_of_neZero10,236 below · depth 20 - Theta torus point lifting a two-point divisor and its push-forward
AlgebraicCurve.Pic0.exists_eFull_eq_mk_single_sub_single_and_eFull_comp_pullback_eq_mk_pushforwardAlong_of_mumfordQuotient_theta62 below · depth 21 - A theta torus point compatible with degeneracy push-forward
AlgebraicCurve.Pic0.exists_eFull_eq_mk_single_sub_single_and_eFull_comp_pushforward_eq_mk_pullbackAlong_of_mumfordQuotient_theta_of_v_card_stabilizer_eq_one135 below · depth 21 - Period datum of a Mumford quotient pinned to analytic periods
AlgebraicCurve.Pic0.exists_periodDatum_Q_mul_period_eq_one_of_mumfordQuotient81 below · depth 21 - Theta uniformisation of Pic⁰ of a tame Mumford quotient
AlgebraicCurve.Pic0.exists_torusPoints_uniformization_of_periodDatum_of_mumfordQuotient_of_v_card_stabilizer_eq_one146 below · depth 21 - Equivariance of the period pairing and the theta-pinned uniformisation
AlgebraicCurve.Pic0.periodDatum_equivariant_of_theta_pinned_uniformization_of_mumfordQuotient125 below · depth 21 - Units on Ω are pinned between two adjacent vertices
CerednikDrinfeld.Omega.exists_adj_min_le_v_apply_le_max_of_isUnit0 below · depth 21 - Places of the invariant field at points of Ω
CerednikDrinfeld.Omega.exists_place_invariantFieldOf_mem_iff_and_evalAt_eq_div_of_map_le_typePreserving10 below · depth 21 - A transcendental element with finite extension: Mumford field of Γ₊
CerednikDrinfeld.Omega.exists_transcendental_finiteDimensional_adjoin_invariantFieldOf_of_exists_relIndex_ne_zero_of_exists_not_mem_range39 below · depth 21 - Finiteness of {γ:ρ(γ)b∈Ωₙ} for discrete ρ
CerednikDrinfeld.Omega.finite_setOf_pmoebius_mem_affinoid1 below · depth 21 - The ring of holomorphic functions on Ω is a domain
CerednikDrinfeld.Omega.isDomain_holRing6 below · depth 21 - Fibres of the point-to-place map are ρ(Γ)-orbits
CerednikDrinfeld.Omega.place_invariantFieldOf_eq_iff_exists_eq_smul_of_map_le_typePreserving_of_exists_v_le_of_v_card_stabilizer_eq_one100 below · depth 21 - Every place of the invariant field comes from Ω
CerednikDrinfeld.Omega.surjective_place_invariantFieldOf_of_mem_iff_of_map_le_typePreserving_of_isCurveOver_of_exists_v_le60 below · depth 21 - Fixing the Δ-invariant field forces ρ(g)∈ρ(Δ)
CerednikDrinfeld.apply_mem_map_of_forall_smul_invariantFieldOf_eq_of_relIndex_ne_zero_of_frame3,899 below · depth 21 - Elements fixing the Mumford invariant field lie in ρ(Δ)
CerednikDrinfeld.apply_mem_map_of_forall_smul_invariantFieldOf_eq_of_relIndex_ne_zero_of_frame_one_zero3,899 below · depth 21 - Čerednik descent intertwining: base level implies all levels
CerednikDrinfeld.descentIntertwining_of_base_one_zero3,911 below · depth 21 - Čerednik–Drinfeld descent intertwining: all levels from the base level
CerednikDrinfeld.descentIntertwining_of_base_zero_one3,910 below · depth 21 - Čerednik interchange and Hecke tower for X^{qq'}₀(N)
CerednikDrinfeld.exists_shimuraCurveModel_heckeTower_and_cerednikInterchangeBase_pair_of_six_mul_dvd_of_neZero10,217 below · depth 21 - Principal theta divisors on a Mumford quotient are periods
AlgebraicCurve.Pic0.exists_prod_theta_eq_period_of_isPrincipal_of_v_card_stabilizer_eq_one138 below · depth 22 - Equal theta multipliers give a principal divisor on a Mumford quotient
AlgebraicCurve.Pic0.isPrincipal_sum_sub_sum_of_prod_theta_eq_of_v_card_stabilizer_eq_one119 below · depth 22 - Neighbours of the standard vertex of the Bruhat–Tits tree
CerednikDrinfeld.BruhatTits.adj_stdVertex_iff_eq_smul_of_uniformizer0 below · depth 22 - Equality of additive maps from periods and differences of places
CerednikDrinfeld.Mumford.addMonoidHom_eq_of_apply_QL_eq_of_apply_eq_of_eq_pic0Mk_single_sub_single6 below · depth 22 - Galois transport of a theta-pinned Mumford torus point
CerednikDrinfeld.Mumford.exists_monoidHom_theta_coeffMap_precomp_apply_eq_of_apply_eq8 below · depth 22 - Pinned theta multipliers exist for every pair of points
CerednikDrinfeld.Mumford.exists_theta_multiplier_and_torusPoint_apply_eq_of_mumfordQuotient49 below · depth 22 - Nonemptiness of finitely punctured affinoids over algebraically closed K
CerednikDrinfeld.Omega.affinoid_nonempty_of_exists_finset_cover0 below · depth 22 - Discreteness in the valuation sense forces G countable
CerednikDrinfeld.Omega.countable_of_isDiscrete0 below · depth 22 - Identity principle on a Drinfeld affinoid
CerednikDrinfeld.Omega.eq_zero_of_mem_holOn_affinoid_of_forall_v_sub_lt_imp_eq_zero3 below · depth 22 - Liouville theorem for Λ-invariant functions on Ω
CerednikDrinfeld.Omega.exists_eq_algebraMap_of_forall_smul_eq_of_forall_exists_smul_mem_affinoid4 below · depth 22 - Balls in K₀ are covered by finitely many small discs
CerednikDrinfeld.Omega.exists_finset_forall_v_sub_lt_of_finite_residueField0 below · depth 22 - Finitely many vertex orbits force a single absorbing affinoid
CerednikDrinfeld.Omega.exists_forall_exists_smul_mem_affinoid_of_fintype_quotVert_map12 below · depth 22 - Holomorphic functions on a valued field do not vanish near a non-zero
CerednikDrinfeld.Omega.exists_forall_v_sub_lt_imp_ne_zero_of_mem_holOn0 below · depth 22 - Theta product as a ratio of rigid-holomorphic functions
CerednikDrinfeld.Omega.exists_holRing_div_eq_theta7 below · depth 22 - Invariant meromorphic functions separating two distinct ρ(Γ)-orbits
CerednikDrinfeld.Omega.exists_mem_invariantFieldOf_apply_eq_zero_and_apply_ne_zero_of_forall_ne_smul_of_map_le_typePreserving_of_exists_v_le_of_v_card_stabilizer_eq_one99 below · depth 22 - A point of Ω avoiding two countable orbits
CerednikDrinfeld.Omega.exists_mem_upperHalfPlane_forall_pmoebius_ne_and_of_countable_of_archimedean0 below · depth 22 - Stabiliser-weighted period pairing for tree lattices with torsion
CerednikDrinfeld.Omega.exists_monoidHom_monoidHom_symm_mul_period_eq_one_v_eq_zpow_stabWidth43 below · depth 22 - A proper family of K-rational valuations on Δ-invariant meromorphic functions
CerednikDrinfeld.Omega.exists_valuations_invariantFieldOf_of_finite_quotVert30 below · depth 22 - Order at a place times stabiliser order equals order of vanishing
CerednikDrinfeld.Omega.ord_place_invariantFieldOf_mul_card_stabilizer_eq_ordAt_sub_ordAt_of_cast_card_ne_zero_of_map_le_typePreserving_of_exists_v_le_of_v_card_eq_one110 below · depth 22 - Vertex-fixing group elements have trivial Drinfeld period
CerednikDrinfeld.Omega.period_eq_one_of_smul_vertex_eq42 below · depth 22 - Lower bound for z(cb+d)-(ab+β) on the affinoid Ωₙ
CerednikDrinfeld.Omega.pow_le_v_phi_of_mem_affinoid_of_v_det_lt0 below · depth 22 - Pull-back of a point divisor under change of level
CerednikDrinfeld.Omega.pullbackAlong_single_place_eq_sum_of_forall_ord_mul_card_stabilizer_eq_of_algEquiv2 below · depth 22 - Restriction of point places along a Mumford conjugation map
CerednikDrinfeld.Omega.restrictAlong_place_eq_smul_inv_and_inertiaDegAlong_eq_one_of_forall_mem_iff1 below · depth 22 - Semilinear automorphism realised by (n,t) transports places accordingly
CerednikDrinfeld.Omega.semilinearAut_smul_pt_eq_pt_smul_of_mem_toValuationSubring_iff1 below · depth 22 - Points of the level-zero affinoid determine their vertex
CerednikDrinfeld.Omega.smul_stdVertex_eq_of_mem_affinoid_zero10 below · depth 22 - Theta product converges on all of Ω for discrete ρ
CerednikDrinfeld.Omega.thetaMultipliable_of_isDiscrete_of_isExhausted5 below · depth 22 - Equivariance of the theta product under isometric automorphisms
CerednikDrinfeld.Omega.theta_isometricAut0 below · depth 22 - Descent intertwining base above q' from an oriented moduli witness
CerednikDrinfeld.exists_descentIntertwiningBase_of_rigidOrientedModuliWitness_one_zero_of_two_mul_dvd_of_neZero9,893 below · depth 22 - Descent intertwining base at q from a rigid oriented moduli witness
CerednikDrinfeld.exists_descentIntertwiningBase_of_rigidOrientedModuliWitness_zero_one_of_two_mul_dvd_of_neZero9,892 below · depth 22 - Rigid oriented moduli witness, Eichler–Shimura relation, Hecke tower
CerednikDrinfeld.exists_shimuraCurveModel_rigidOrientedModuliWitness_heckeTower_of_six_mul_dvd_of_neZero6,271 below · depth 22 - Bounded exponent for torsion in a tree lattice in PGL₂
CerednikDrinfeld.BruhatTits.exists_pos_forall_isOfFinOrder_pow_eq_one8 below · depth 23 - Identity principle on an annulus with deleted residue classes
CerednikDrinfeld.Omega.RatPair.identityPrinciple_annulus2 below · depth 23 - Identity principle on a disc minus residue classes
CerednikDrinfeld.Omega.RatPair.identityPrinciple_disc0 below · depth 23 - Schottky groups act freely on the affinoid g·Ω₀
CerednikDrinfeld.Omega.eq_one_of_pmoebius_eq_of_mem_affinoid_zero11 below · depth 23 - Theta factors tend to 1 uniformly on affinoids
CerednikDrinfeld.Omega.eventually_cofinite_forall_mem_affinoid_v_thetaFactor_sub_one_lt2 below · depth 23 - Blaschke-type denominators for points escaping every affinoid
CerednikDrinfeld.Omega.exists_blaschke_denominators0 below · depth 23 - Liouville theorem for Drinfeld's upper half plane
CerednikDrinfeld.Omega.exists_eq_algebraMap_of_forall_v_apply_le3 below · depth 23 - Automorphic units on Ω have period multipliers: tame torsion case
CerednikDrinfeld.Omega.exists_forall_eq_period_of_isUnit_of_apply_smul_eq_mul_of_forall_isOfFinOrder75 below · depth 23 - One affinoid meets every Γ''-orbit on Ω
CerednikDrinfeld.Omega.exists_forall_exists_smul_mem_affinoid_of_relIndex_ne_zero12 below · depth 23 - Convergent infinite products of rational functions are holomorphic
CerednikDrinfeld.Omega.exists_mem_holOn_hasProd_evalAt0 below · depth 23 - Zero-free holomorphic functions on the affinoid Ωₙ are invertible
CerednikDrinfeld.Omega.exists_mem_holOn_mul_eq_one_of_forall_apply_ne_zero3 below · depth 23 - Invariant function vanishing to the stabiliser order at a point
CerednikDrinfeld.Omega.exists_mk_mem_invariantFieldOf_apply_ne_zero_ordAt_eq_card_stabilizer_of_map_le_typePreserving_of_v_card_eq_one108 below · depth 23 - Finiteness of the zero set on the affinoid Ωₙ
CerednikDrinfeld.Omega.finite_setOf_apply_eq_zero_of_mem_holOn_affinoid8 below · depth 23 - Balls of K₀ are covered by finitely many small balls
CerednikDrinfeld.Omega.forall_exists_finset_v_sub_lt_pow_of_finite_quotient0 below · depth 23 - Torsion-free finite-index subgroups of tree lattices are Schottky
CerednikDrinfeld.Omega.isSchottky_map_of_relIndex_ne_zero_of_forall_isOfFinOrder6 below · depth 23 - Stabiliser order divides vanishing orders of Γ-invariant functions
CerednikDrinfeld.Omega.natCast_card_stabilizer_dvd_ordAt_sub_ordAt_of_mk_mem_invariantFieldOf_of_map_le_typePreserving8 below · depth 23 - Multipliability of the cross-ratio theta product on an affinoid
CerednikDrinfeld.Omega.thetaMultipliable_of_isDiscrete_of_mem_affinoid4 below · depth 23 - Stabiliser-weighted Manin–Drinfeld period formula for tree lattices
CerednikDrinfeld.Omega.v_period_eq_zpow_neg_sum_stabWidth_mul_pathCycle_mul_pathCycle24 below · depth 23 - Valuation exactly one on the level-0 affinoid under non-unit determinant
CerednikDrinfeld.Omega.v_phi_eq_one_of_mem_affinoid_zero_of_v_det_lt_one1 below · depth 23 - Good reduction outside Dp for the Shimura curve Jacobian
CerednikDrinfeld.ShimuraCurveModel.goodReductionOutside_of_rigidModuliWitness_heckeTower_of_two_mul_dvd1,616 below · depth 23 - Čerednik descent datum at q' from a moduli tower witness
CerednikDrinfeld.exists_descentIntertwiningBase_of_moduliTowerWitness_one_zero_of_two_mul_dvd9,818 below · depth 23 - Descent intertwining datum at q from a moduli tower witness
CerednikDrinfeld.exists_descentIntertwiningBase_of_moduliTowerWitness_zero_one_of_two_mul_dvd9,817 below · depth 23 - Canonical model, moduli witness and Hecke tower for X₀^{qq'}(N)
CerednikDrinfeld.exists_shimuraCurveModel_rigidModuliWitness_heckeTower_of_six_mul_dvd_of_neZero6,040 below · depth 23 - Bounded exponent of vertex stabilisers on the Bruhat–Tits tree
CerednikDrinfeld.BruhatTits.exists_pos_forall_mem_stabilizer_pow_eq_one5 below · depth 24 - Conjugation preserving local boxes preserves the away-from-v units
CerednikDrinfeld.CosetGraph.mul_mul_inv_mem_awayUnits_of_forall_localBox_iff0 below · depth 24 - Oscillation bound for rational functions bounded on a Drinfeld affinoid
CerednikDrinfeld.Omega.RatPair.v_evalAt_sub_evalAt_le_mul_of_isPoleFreeOn_affinoid2 below · depth 24 - Continuity of functions holomorphic by rational approximation
CerednikDrinfeld.Omega.continuous_of_mem_holOn0 below · depth 24 - Constant-valuation holomorphic functions on Ω are constant
CerednikDrinfeld.Omega.exists_eq_algebraMap_of_isUnit_of_v_apply_eq4 below · depth 24 - Constant valuation of a holomorphic function on a circle
CerednikDrinfeld.Omega.exists_forall_v_apply_eq_on_circle_of_mem_holOn0 below · depth 24 - Valuation current of an automorphic unit as a weighted cycle
CerednikDrinfeld.Omega.exists_mem_ribbonKernel_and_v_apply_smul_eq_mul_zpow_stabWidth_of_isUnit_of_forall_isOfFinOrder16 below · depth 24 - Avoiding countably many orbits in Drinfeld's upper half plane
CerednikDrinfeld.Omega.exists_mem_upperHalfPlane_forall_pmoebius_ne_of_countable_of_archimedean0 below · depth 24 - First-order Taylor estimate on the standard vertex affinoid
CerednikDrinfeld.Omega.exists_v_sub_sub_mul_le_mul_sq_of_mem_affinoid_zero0 below · depth 24 - Finiteness of zeros in a disc minus finitely many discs
CerednikDrinfeld.Omega.finite_setOf_apply_eq_zero_openDisc_sdiff_of_mem_holOn3 below · depth 24 - Units of holOn on the level-0 affinoid have constant valuation
CerednikDrinfeld.Omega.v_apply_eq_of_mem_holOn_affinoid_zero_of_mul_eq_one1 below · depth 24 - Valuation of a cross ratio as v(varpi)^{geodesic overlap}
CerednikDrinfeld.Omega.v_crossRatio_pmoebius_eq_zpow_walkOverlap12 below · depth 24 - Eichler–Shimura congruence on J[p] for a Shimura curve
CerednikDrinfeld.ShimuraCurveModel.eichlerShimura_of_rigidModuliWitness_of_two_mul_dvd1,604 below · depth 24 - Inertia fixes p-torsion of the Shimura curve Jacobian
CerednikDrinfeld.ShimuraCurveModel.galJ_eq_self_of_mem_inertiaSubgroupIn_of_moduliWitness_of_two_mul_dvd762 below · depth 24 - Adic base data at a place of ℚ̄ above q
CerednikDrinfeld.exists_adicBase_ratClosure6 below · depth 24 - Mumford embedding from Čerednik–Drinfeld uniformisation
CerednikDrinfeld.exists_mumfordEmbedding_of_cerednikDrinfeld_uniformization_one_zero_of_two_mul_dvd8,616 below · depth 24 - Mumford embedding from Čerednik–Drinfeld uniformisation
CerednikDrinfeld.exists_mumfordEmbedding_of_cerednikDrinfeld_uniformization_zero_one_of_two_mul_dvd8,615 below · depth 24 - Normal form for units of 𝒪(Ω) on the standard star
CerednikDrinfeld.Omega.exists_eq_mul_prod_zpow_mul_one_add_of_isUnit0 below · depth 25 - Integral jumps of v∘ F at neighbours of the standard vertex
CerednikDrinfeld.Omega.exists_int_neighbours_sum_eq_zero_v_apply_smul_eq5 below · depth 25 - Division by a linear factor for rationally approximable functions
CerednikDrinfeld.Omega.exists_mem_holOn_eq_sub_mul_of_apply_eq_zero0 below · depth 25 - Normalised derivative on a residue disc of a product normal form
CerednikDrinfeld.Omega.exists_v_sub_sum_div_sub_le_of_forall_eq_mul_prod_zpow_mul_one_add1 below · depth 25 - Independence of 𝒪(Ω) and Ω₀ of the pseudo-uniformiser
CerednikDrinfeld.Omega.holRing_eq_and_affinoid_zero_eq0 below · depth 25 - Tame fixed edge stabiliser order divides the fibre jump
CerednikDrinfeld.Omega.natCard_dvd_of_v_apply_smul_eq_mul_zpow_of_forall_smul_eq8 below · depth 25 - Stabiliser of the standard vertex preserves the level-zero affinoid
CerednikDrinfeld.Omega.pmoebius_mem_affinoid_zero_of_smul_stdVertex_eq0 below · depth 25 - Valuation of z-a for z in the level-zero affinoid
CerednikDrinfeld.Omega.v_sub_eq_max_of_mem_affinoid_zero_of_not_mem0 below · depth 25 - Constant reduction of a quaternionic Shimura curve at ℓ
CerednikDrinfeld.ShimuraCurveModel.ModuliWitnessD.exists_constantReduction_of_isGoodReductionModel_of_curveModel823 below · depth 25 - Eichler–Shimura congruence, point by point, on the special fibre
CerednikDrinfeld.ShimuraCurveModel.mapDomain_placeMap_corrBar_single_eq_of_frobenius_of_two_mul_dvd1,384 below · depth 25 - Central, odd and even elements of the away-unit group
CerednikDrinfeld.awayUnits_central_odd_even_feed_one_zero_of_two_mul_dvd34 below · depth 25 - Parity of vdet describes Γ₂ at all levels
CerednikDrinfeld.awayUnits_central_odd_even_feed_zero_one_of_two_mul_dvd34 below · depth 25 - Smooth, geometrically connected generic fibres of the coarse models
CerednikDrinfeld.coarseModuli_smooth_geometricallyConnected_feed_one_zero_of_two_mul_dvd5,772 below · depth 25 - Smoothness and geometric connectedness of the generic fibres
CerednikDrinfeld.coarseModuli_smooth_geometricallyConnected_feed_zero_one_of_two_mul_dvd5,772 below · depth 25 - Discreteness and cocompactness of Γ₁ on the lattice tree
CerednikDrinfeld.evenAwayUnits_finite_stabilizer_finite_orbits_feed_one_zero_of_two_mul_dvd3,794 below · depth 25 - Finite stabilisers and finitely many orbits for Γ₂ on the tree
CerednikDrinfeld.evenAwayUnits_finite_stabilizer_finite_orbits_feed_zero_one_of_two_mul_dvd3,793 below · depth 25 - Tame vertex stabilisers for Γ₁ on the q' side
CerednikDrinfeld.evenAwayUnits_v_card_stabilizer_eq_one_one_zero_of_two_mul_dvd3,793 below · depth 25 - Tame vertex stabilisers for the away-unit groups Γ₂
CerednikDrinfeld.evenAwayUnits_v_card_stabilizer_eq_one_zero_one_of_two_mul_dvd3,793 below · depth 25 - Virtual torsion-freeness of the even away-unit groups
CerednikDrinfeld.evenAwayUnits_virtuallyTorsionFree_feed_one_zero_of_two_mul_dvd37 below · depth 25 - Virtually torsion-free even away-unit groups at q
CerednikDrinfeld.evenAwayUnits_virtuallyTorsionFree_feed_zero_one_of_two_mul_dvd37 below · depth 25 - Function field of a Čerednik–Drinfeld quotient as Γ'-invariant meromorphic functions
CerednikDrinfeld.exists_ringEquiv_functionField_pullback_invariantFieldOf_smul_level_of_cerednikDrinfeld_quotient_of_tame_of_virtuallyTorsionFree_of_smooth721 below · depth 25 - Mumford embedding of the Shimura tower over ℚ_{q'}
CerednikDrinfeld.mumfordEmbedding_assembly_of_functionField_equiv_one_zero_of_two_mul_dvd5,797 below · depth 25 - Assembling the Mumford embedding from the function-field identification
CerednikDrinfeld.mumfordEmbedding_assembly_of_functionField_equiv_zero_one_of_two_mul_dvd5,797 below · depth 25 - Tame finite vertex stabilisers on the Bruhat–Tits tree
CerednikDrinfeld.CosetGraph.finite_stabilizer_vertex_and_not_dvd_natCard_of_mumfordSideFrame3,792 below · depth 26 - Edge degrees of a unit of 𝒪(Ω) sum to zero
CerednikDrinfeld.Omega.sum_add_eq_zero_of_isUnit_of_forall_v_apply_eq_mul_zpow0 below · depth 26 - Star formulas on overlapping stars differ by a power of v(varpi)
CerednikDrinfeld.Omega.v_apply_mul_inv_eq_mul_zpow_neg_sum_of_star0 below · depth 26 - Function field of a Čerednik–Drinfeld quotient embeds into invariant functions
CerednikDrinfeld.exists_ringHom_functionField_invariantFieldOf_eval_of_cerednikDrinfeld_quotient_of_smooth531 below · depth 26 - Function field embedding into the Čerednik–Drinfeld model over C
CerednikDrinfeld.exists_ringHom_functionField_pullback_completion_of_moduliTowerWitness_one_zero_of_two_mul_dvd5,777 below · depth 26 - Equivariant embedding of ̄ F into the completed function field
CerednikDrinfeld.exists_ringHom_functionField_pullback_completion_of_moduliTowerWitness_zero_one_of_two_mul_dvd5,777 below · depth 26 - Finiteness of affinoid points sent off a generic open
CerednikDrinfeld.finite_affinoid_toOmega_not_le_preimage_of_cerednikDrinfeld_quotient_of_smooth15 below · depth 26 - Integrality of the C-fibre of a Čerednik–Drinfeld quotient
CerednikDrinfeld.isIntegral_pullback_of_cerednikDrinfeld_quotient_of_smooth10 below · depth 26 - Mumford embedding read off from the function-field identification
CerednikDrinfeld.mumfordEmbedding_readoff_of_functionField_equiv_of_ringHom_one_zero_of_two_mul_dvd894 below · depth 26 - Reading off the Mumford embedding from Čerednik–Drinfeld data
CerednikDrinfeld.mumfordEmbedding_readoff_of_functionField_equiv_of_ringHom_zero_one_of_two_mul_dvd894 below · depth 26 - Equivariance of Čerednik–Drinfeld evaluation under an intertwining morphism
CerednikDrinfeld.ringHom_functionField_germ_app_eq_inv_smul_of_eval_of_cerednikDrinfeld_quotient18 below · depth 26 - Frobenius on X acts as w⁻¹ under evaluation
CerednikDrinfeld.ringHom_functionField_germ_app_eq_inv_smul_of_frobenius_of_eval_of_cerednikDrinfeld_quotient18 below · depth 26
… and 74 more statements (search for the module name to find them).