Definitions/Def_DrinfeldCurve_CoordRing.lean
Coordinate ring of the Drinfeld curve with group actions
For a natural number q and a field k, drinfeldPoly is the polynomial X_0X_1^q - X_0^qX_1 in k[X_0,X_1] (Mathlib's MvPolynomial (Fin 2) k), drinfeldIdeal is the principal ideal generated by drinfeldPoly - 1, and CoordRing q k is the quotient of k[X_0,X_1] by that ideal, carrying the commutative ring and k-algebra structures of the quotient. The quotient map mk is recorded as a surjective k-algebra map, with the extensionality principle for k-algebra maps out of CoordRing that it yields; x and y denote the images of X_0 and X_1, and relation states xy^q - x^qy = 1. Two substitution operators on k[X_0,X_1] are defined: scalePoly c sends each X_i to cX_i, and multiplies drinfeldPoly by c^{q+1}; and, under the standing assumptions that q is prime and that k is an \mathbb{F}_{q^2}-algebra (so that ofZMod embeds \mathbb{F}_q in k and k has characteristic q), substPoly g for a matrix g \in M_2(\mathbb{F}_q) sends X_j to \sum_i g_{ij}X_i, i.e. replaces the row vector (X_0,X_1) by (X_0,X_1)g, and multiplies drinfeldPoly by \det g. Three actions by k-algebra automorphisms of CoordRing q k are obtained by descending these operators: slAction, a monoid homomorphism from \mathrm{SL}_2(\mathbb{F}_q) given by substitution, with the explicit formulae for the images of x and y; muAction, from the group of (q+1)-st roots of unity of \mathbb{F}_{q^2}, scaling x and y by the image of the root of unity in k; and hAction, from hSubgroup, the kernel of the character hChar on \mathrm{GL}_2(\mathbb{F}_q) \times \mathbb{F}_{q^2}^\times sending (g,c) to (\det g)\,c^{q+1}, acting by substitution by g followed by scaling by c. Further lemmas state that slAction and muAction commute and are the restrictions of hAction along g \mapsto (g,1) and \zeta \mapsto (1,\zeta), and that \mathbb{F}_{q^2} has q^2 elements while its group of (q+1)-st roots of unity has exactly q+1 elements.
Relation to Mathlib
Mathlib has no notion of the Drinfeld curve; the presentation, the substitution operators and the three group actions are the project's own, built on Mathlib's MvPolynomial, GaloisField, rootsOfUnity, Matrix.SpecialLinearGroup and Matrix.GeneralLinearGroup.
Where it is used
This module fixes, once and for all, the affine model xy^q - x^qy = 1 over a field containing \mathbb{F}_{q^2} together with the commuting actions of \mathrm{SL}_2(\mathbb{F}_q) and of \mu_{q+1} and their common extension to the subgroup of \mathrm{GL}_2(\mathbb{F}_q) \times \mathbb{F}_{q^2}^\times cut out by (\det g)c^{q+1} = 1; these are the data on which the modules treating this curve build.
References
- P. Deligne and G. Lusztig, Representations of reductive groups over finite fields, Annals of Mathematics 103 (1976), 103–161
- C. Bonnafé, Representations of SL_2(F_q), Algebra and Applications 13, Springer, 2011
References are suggested automatically and have not been individually verified.
English text generated automatically from the Lean source; the Lean statement is authoritative.
- 365 lines
- 64 declarations
- used in the statements of 281 theorems and imported by 289 proofs
- imports 0 definition modules
Source file: Definitions/Def_DrinfeldCurve_CoordRing.lean
Imports
- only Mathlib
Declarations
- def
DrinfeldCurve.drinfeldPoly - def
DrinfeldCurve.drinfeldIdeal - def
DrinfeldCurve.CoordRing - instance
DrinfeldCurve.instCommRingCoordRing - instance
DrinfeldCurve.instAlgebraCoordRing - def
DrinfeldCurve.mk - theorem
DrinfeldCurve.mk_surjective - theorem
DrinfeldCurve.algHom_ext - theorem
DrinfeldCurve.mk_drinfeldPoly - def
DrinfeldCurve.x - def
DrinfeldCurve.y - theorem
DrinfeldCurve.relation - theorem
DrinfeldCurve.mk_mul_drinfeldPoly_sub_one - def
DrinfeldCurve.scalePoly - theorem
DrinfeldCurve.scalePoly_X - theorem
DrinfeldCurve.scalePoly_drinfeldPoly - theorem
DrinfeldCurve.scalePoly_one - theorem
DrinfeldCurve.scalePoly_mul - def
DrinfeldCurve.ofZMod - theorem
DrinfeldCurve.ofZMod_pow_card - theorem
DrinfeldCurve.charP_base - theorem
DrinfeldCurve.C_ofZMod_pow - def
DrinfeldCurve.substPoly - theorem
DrinfeldCurve.substPoly_X - theorem
DrinfeldCurve.substPoly_mul - theorem
DrinfeldCurve.substPoly_one - theorem
DrinfeldCurve.substPoly_drinfeldPoly - def
DrinfeldCurve.slEnd - theorem
DrinfeldCurve.slEnd_mk - def
DrinfeldCurve.slEndHom - def
DrinfeldCurve.slAction - theorem
DrinfeldCurve.slAction_mk - theorem
DrinfeldCurve.slAction_x - theorem
DrinfeldCurve.slAction_y - theorem
DrinfeldCurve.card_galoisField_two - theorem
DrinfeldCurve.natCard_rootsOfUnity_galoisField_two - def
DrinfeldCurve.scalarOf - theorem
DrinfeldCurve.scalarOf_pow_of_mem - theorem
DrinfeldCurve.scalarOf_one - theorem
DrinfeldCurve.scalarOf_mul - def
DrinfeldCurve.muEnd - theorem
DrinfeldCurve.muEnd_mk - def
DrinfeldCurve.muEndHom - def
DrinfeldCurve.muAction - theorem
DrinfeldCurve.muAction_mk - theorem
DrinfeldCurve.muAction_x - theorem
DrinfeldCurve.muAction_y - theorem
DrinfeldCurve.substPoly_comp_scalePoly - theorem
DrinfeldCurve.slAction_comm_muAction - theorem
DrinfeldCurve.scalePoly_substPoly_drinfeldPoly - def
DrinfeldCurve.hChar - theorem
DrinfeldCurve.coe_hChar_apply - def
DrinfeldCurve.hSubgroup - theorem
DrinfeldCurve.mem_hSubgroup_iff - theorem
DrinfeldCurve.hFactor - def
DrinfeldCurve.hEnd - theorem
DrinfeldCurve.hEnd_mk - def
DrinfeldCurve.hEndHom - def
DrinfeldCurve.hAction - theorem
DrinfeldCurve.hAction_mk - theorem
DrinfeldCurve.toGL_one_mem_hSubgroup - theorem
DrinfeldCurve.one_mem_hSubgroup_of_mem - theorem
DrinfeldCurve.slAction_eq_hAction - theorem
DrinfeldCurve.muAction_eq_hAction
Source
import Mathlib.RingTheory.MvPolynomial.Basic ↗ import Mathlib.RingTheory.RootsOfUnity.PrimitiveRoots ↗ import Mathlib.FieldTheory.Finite.GaloisField ↗ set_option autoImplicit false universe u noncomputable section open MvPolynomial namespace DrinfeldCurve variable (q : ℕ) (k : Type u) [Field k] def drinfeldPoly : MvPolynomial (Fin 2) k := X 0 * X 1 ^ q - X 0 ^ q * X 1 def drinfeldIdeal : Ideal (MvPolynomial (Fin 2) k) := Ideal.span {drinfeldPoly q k - 1} def CoordRing : Type u := MvPolynomial (Fin 2) k ⧸ drinfeldIdeal q k instance instCommRingCoordRing : CommRing (CoordRing q k) := inferInstanceAs (CommRing (MvPolynomial (Fin 2) k ⧸ drinfeldIdeal q k)) instance instAlgebraCoordRing : Algebra k (CoordRing q k) := inferInstanceAs (Algebra k (MvPolynomial (Fin 2) k ⧸ drinfeldIdeal q k)) def mk : MvPolynomial (Fin 2) k →ₐ[k] CoordRing q k := Ideal.Quotient.mkₐ k (drinfeldIdeal q k) theorem mk_surjective : Function.Surjective (mk q k) := Ideal.Quotient.mkₐ_surjective k _ theorem algHom_ext {A : Type*} [Semiring A] [Algebra k A] {f g : CoordRing q k →ₐ[k] A} (h : f.comp (mk q k) = g.comp (mk q k)) : f = g := Ideal.Quotient.algHom_ext k h theorem mk_drinfeldPoly : mk q k (drinfeldPoly q k) = 1 := by have h : mk q k (drinfeldPoly q k - 1) = 0 := Ideal.Quotient.eq_zero_iff_mem.mpr (Ideal.subset_span (Set.mem_singleton _)) rwa [map_sub, map_one, sub_eq_zero] at h def x : CoordRing q k := mk q k (X 0) def y : CoordRing q k := mk q k (X 1) theorem relation : x q k * y q k ^ q - x q k ^ q * y q k = 1 := by have h := mk_drinfeldPoly q k rwa [drinfeldPoly, map_sub, map_mul, map_mul, map_pow, map_pow] at h private theorem mk_mul_drinfeldPoly_sub_one (p : MvPolynomial (Fin 2) k) : mk q k (p * (drinfeldPoly q k - 1)) = 0 := by rw [map_mul, map_sub, map_one, mk_drinfeldPoly, sub_self, mul_zero] def scalePoly (c : k) : MvPolynomial (Fin 2) k →ₐ[k] MvPolynomial (Fin 2) k := aeval fun i => C c * X i theorem scalePoly_X (c : k) (i : Fin 2) : scalePoly k c (X i) = C c * X i := by simp [scalePoly] theorem scalePoly_drinfeldPoly (c : k) : scalePoly k c (drinfeldPoly q k) = C (c ^ (q + 1)) * drinfeldPoly q k := by simp only [drinfeldPoly, map_sub, map_mul, map_pow, scalePoly_X, mul_pow] ring theorem scalePoly_one : scalePoly k 1 = AlgHom.id k _ := by apply MvPolynomial.algHom_ext intro i simp [scalePoly_X] theorem scalePoly_mul (c d : k) : scalePoly k (c * d) = (scalePoly k c).comp (scalePoly k d) := by apply MvPolynomial.algHom_ext intro i simp only [scalePoly_X, AlgHom.comp_apply, map_mul, MvPolynomial.algHom_C, MvPolynomial.algebraMap_eq] ring section Actions variable [Fact q.Prime] [Algebra (GaloisField q 2) k] def ofZMod : ZMod q →+* k := (algebraMap (GaloisField q 2) k).comp (algebraMap (ZMod q) (GaloisField q 2)) theorem ofZMod_pow_card (a : ZMod q) : ofZMod q k a ^ q = ofZMod q k a := by rw [← map_pow, ZMod.pow_card] private theorem charP_base : CharP k q := charP_of_injective_algebraMap (algebraMap (GaloisField q 2) k).injective q private theorem C_ofZMod_pow (a : ZMod q) : (C (ofZMod q k a) : MvPolynomial (Fin 2) k) ^ q = C (ofZMod q k a) := by rw [← map_pow, ofZMod_pow_card] def substPoly (g : Matrix (Fin 2) (Fin 2) (ZMod q)) : MvPolynomial (Fin 2) k →ₐ[k] MvPolynomial (Fin 2) k := aeval fun j => ∑ i, C (ofZMod q k (g i j)) * X i theorem substPoly_X (g : Matrix (Fin 2) (Fin 2) (ZMod q)) (j : Fin 2) : substPoly q k g (X j) = ∑ i, C (ofZMod q k (g i j)) * X i := by simp [substPoly] theorem substPoly_mul (g h : Matrix (Fin 2) (Fin 2) (ZMod q)) : substPoly q k (g * h) = (substPoly q k g).comp (substPoly q k h) := by apply MvPolynomial.algHom_ext intro j simp only [substPoly_X, AlgHom.comp_apply, map_mul, MvPolynomial.algHom_C, MvPolynomial.algebraMap_eq, Matrix.mul_apply, Fin.sum_univ_two, map_add] ring theorem substPoly_one : substPoly q k 1 = AlgHom.id k _ := by apply MvPolynomial.algHom_ext intro j fin_cases j <;> simp [substPoly_X, Matrix.one_apply] theorem substPoly_drinfeldPoly (g : Matrix (Fin 2) (Fin 2) (ZMod q)) : substPoly q k g (drinfeldPoly q k) = C (ofZMod q k g.det) * drinfeldPoly q k := by haveI := charP_base q k simp only [drinfeldPoly, map_sub, map_mul, map_pow, substPoly_X, Fin.sum_univ_two, Matrix.det_fin_two] rw [add_pow_char, add_pow_char] simp only [mul_pow, C_ofZMod_pow] ring private def slEnd (g : Matrix.SpecialLinearGroup (Fin 2) (ZMod q)) : CoordRing q k →ₐ[k] CoordRing q k := Ideal.Quotient.liftₐ (drinfeldIdeal q k) ((mk q k).comp (substPoly q k (g : Matrix (Fin 2) (Fin 2) (ZMod q)))) (by intro a ha rw [drinfeldIdeal, Ideal.mem_span_singleton'] at ha obtain ⟨b, rfl⟩ := ha rw [AlgHom.comp_apply, map_mul, map_sub, map_one, substPoly_drinfeldPoly, Matrix.SpecialLinearGroup.det_coe, map_one, C_1, one_mul] exact mk_mul_drinfeldPoly_sub_one q k _) private theorem slEnd_mk (g : Matrix.SpecialLinearGroup (Fin 2) (ZMod q)) (p : MvPolynomial (Fin 2) k) : slEnd q k g (mk q k p) = mk q k (substPoly q k (g : Matrix (Fin 2) (Fin 2) (ZMod q)) p) := rfl private def slEndHom : Matrix.SpecialLinearGroup (Fin 2) (ZMod q) →* (CoordRing q k →ₐ[k] CoordRing q k) where toFun := slEnd q k map_one' := by apply algHom_ext apply MvPolynomial.algHom_ext intro j simp [slEnd_mk, Matrix.SpecialLinearGroup.coe_one, substPoly_one] map_mul' g h := by apply algHom_ext apply MvPolynomial.algHom_ext intro j simp [slEnd_mk, Matrix.SpecialLinearGroup.coe_mul, substPoly_mul] def slAction : Matrix.SpecialLinearGroup (Fin 2) (ZMod q) →* (CoordRing q k ≃ₐ[k] CoordRing q k) := (AlgEquiv.algHomUnitsEquiv k (CoordRing q k)).toMonoidHom.comp (slEndHom q k).toHomUnits theorem slAction_mk (g : Matrix.SpecialLinearGroup (Fin 2) (ZMod q)) (p : MvPolynomial (Fin 2) k) : slAction q k g (mk q k p) = mk q k (substPoly q k (g : Matrix (Fin 2) (Fin 2) (ZMod q)) p) := slEnd_mk q k g p theorem slAction_x (g : Matrix.SpecialLinearGroup (Fin 2) (ZMod q)) : slAction q k g (x q k) = algebraMap k _ (ofZMod q k ((g : Matrix (Fin 2) (Fin 2) (ZMod q)) 0 0)) * x q k + algebraMap k _ (ofZMod q k ((g : Matrix (Fin 2) (Fin 2) (ZMod q)) 1 0)) * y q k := by simp [x, y, slAction_mk, substPoly_X, Fin.sum_univ_two] theorem slAction_y (g : Matrix.SpecialLinearGroup (Fin 2) (ZMod q)) : slAction q k g (y q k) = algebraMap k _ (ofZMod q k ((g : Matrix (Fin 2) (Fin 2) (ZMod q)) 0 1)) * x q k + algebraMap k _ (ofZMod q k ((g : Matrix (Fin 2) (Fin 2) (ZMod q)) 1 1)) * y q k := by simp [x, y, slAction_mk, substPoly_X, Fin.sum_univ_two] theorem card_galoisField_two : Nat.card (GaloisField q 2) = q ^ 2 := GaloisField.card q 2 two_ne_zero theorem natCard_rootsOfUnity_galoisField_two : Nat.card (rootsOfUnity (q + 1) (GaloisField q 2)) = q + 1 := by have hq0 : q ≠ 0 := (Fact.out : q.Prime).ne_zero have hsplit : (q - 1) * (q + 1) + 1 = q ^ 2 := by obtain ⟨m, rfl⟩ := Nat.exists_eq_add_one_of_ne_zero hq0 rw [Nat.add_sub_cancel] ring have hcard : Nat.card (GaloisField q 2)ˣ = (q - 1) * (q + 1) := by rw [Nat.card_units, card_galoisField_two, ← hsplit, Nat.add_sub_cancel] obtain ⟨g, hg⟩ := IsCyclic.exists_generator (α := (GaloisField q 2)ˣ) have hord : orderOf g = (q - 1) * (q + 1) := by rw [← hcard, orderOf_eq_card_of_forall_mem_zpowers hg] have hprim : IsPrimitiveRoot (g ^ (q - 1)) (q + 1) := (IsPrimitiveRoot.orderOf g).pow (hord ▸ orderOf_pos g) hord exact hprim.card_rootsOfUnity' def scalarOf (ζ : (GaloisField q 2)ˣ) : k := algebraMap (GaloisField q 2) k ζ theorem scalarOf_pow_of_mem {ζ : (GaloisField q 2)ˣ} (hζ : ζ ∈ rootsOfUnity (q + 1) (GaloisField q 2)) : scalarOf q k ζ ^ (q + 1) = 1 := by rw [mem_rootsOfUnity] at hζ rw [scalarOf, ← map_pow, ← Units.val_pow_eq_pow_val, hζ, Units.val_one, map_one] private theorem scalarOf_one : scalarOf q k 1 = 1 := by simp [scalarOf] private theorem scalarOf_mul (ζ η : (GaloisField q 2)ˣ) : scalarOf q k (ζ * η) = scalarOf q k ζ * scalarOf q k η := by simp [scalarOf] private def muEnd (ζ : rootsOfUnity (q + 1) (GaloisField q 2)) : CoordRing q k →ₐ[k] CoordRing q k := Ideal.Quotient.liftₐ (drinfeldIdeal q k) ((mk q k).comp (scalePoly k (scalarOf q k ζ))) (by intro a ha rw [drinfeldIdeal, Ideal.mem_span_singleton'] at ha obtain ⟨b, rfl⟩ := ha rw [AlgHom.comp_apply, map_mul, map_sub, map_one, scalePoly_drinfeldPoly, scalarOf_pow_of_mem q k ζ.2, C_1, one_mul] exact mk_mul_drinfeldPoly_sub_one q k _) private theorem muEnd_mk (ζ : rootsOfUnity (q + 1) (GaloisField q 2)) (p : MvPolynomial (Fin 2) k) : muEnd q k ζ (mk q k p) = mk q k (scalePoly k (scalarOf q k ζ) p) := rfl private def muEndHom : rootsOfUnity (q + 1) (GaloisField q 2) →* (CoordRing q k →ₐ[k] CoordRing q k) where toFun := muEnd q k map_one' := by apply algHom_ext apply MvPolynomial.algHom_ext intro i simp [muEnd_mk, scalarOf_one, scalePoly_one] map_mul' ζ η := by apply algHom_ext apply MvPolynomial.algHom_ext intro i simp [muEnd_mk, scalarOf_mul, scalePoly_mul] def muAction : rootsOfUnity (q + 1) (GaloisField q 2) →* (CoordRing q k ≃ₐ[k] CoordRing q k) := (AlgEquiv.algHomUnitsEquiv k (CoordRing q k)).toMonoidHom.comp (muEndHom q k).toHomUnits theorem muAction_mk (ζ : rootsOfUnity (q + 1) (GaloisField q 2)) (p : MvPolynomial (Fin 2) k) : muAction q k ζ (mk q k p) = mk q k (scalePoly k (scalarOf q k ζ) p) := muEnd_mk q k ζ p theorem muAction_x (ζ : rootsOfUnity (q + 1) (GaloisField q 2)) : muAction q k ζ (x q k) = algebraMap k _ (scalarOf q k ζ) * x q k := by simp [x, muAction_mk, scalePoly_X] theorem muAction_y (ζ : rootsOfUnity (q + 1) (GaloisField q 2)) : muAction q k ζ (y q k) = algebraMap k _ (scalarOf q k ζ) * y q k := by simp [y, muAction_mk, scalePoly_X] theorem substPoly_comp_scalePoly (g : Matrix (Fin 2) (Fin 2) (ZMod q)) (c : k) : (substPoly q k g).comp (scalePoly k c) = (scalePoly k c).comp (substPoly q k g) := by apply MvPolynomial.algHom_ext intro j simp only [AlgHom.comp_apply, scalePoly_X, substPoly_X, map_mul, MvPolynomial.algHom_C, MvPolynomial.algebraMap_eq, Fin.sum_univ_two, map_add] ring theorem slAction_comm_muAction (g : Matrix.SpecialLinearGroup (Fin 2) (ZMod q)) (ζ : rootsOfUnity (q + 1) (GaloisField q 2)) : slAction q k g * muAction q k ζ = muAction q k ζ * slAction q k g := by ext z obtain ⟨p, rfl⟩ := mk_surjective q k z simp only [AlgEquiv.mul_apply, slAction_mk, muAction_mk] exact congrArg (mk q k) (AlgHom.congr_fun (substPoly_comp_scalePoly q k (g : Matrix (Fin 2) (Fin 2) (ZMod q)) (scalarOf q k ζ)) p) theorem scalePoly_substPoly_drinfeldPoly (g : Matrix (Fin 2) (Fin 2) (ZMod q)) (c : k) : scalePoly k c (substPoly q k g (drinfeldPoly q k)) = C (ofZMod q k g.det * c ^ (q + 1)) * drinfeldPoly q k := by simp only [substPoly_drinfeldPoly, map_mul, scalePoly_drinfeldPoly, MvPolynomial.algHom_C, MvPolynomial.algebraMap_eq] ring def hChar : Matrix.GeneralLinearGroup (Fin 2) (ZMod q) × (GaloisField q 2)ˣ →* (GaloisField q 2)ˣ := ((Units.map (algebraMap (ZMod q) (GaloisField q 2)).toMonoidHom).comp (Matrix.GeneralLinearGroup.det.comp (MonoidHom.fst _ _))) * ((powMonoidHom (q + 1)).comp (MonoidHom.snd _ _)) theorem coe_hChar_apply (p : Matrix.GeneralLinearGroup (Fin 2) (ZMod q) × (GaloisField q 2)ˣ) : ((hChar q p : (GaloisField q 2)ˣ) : GaloisField q 2) = algebraMap (ZMod q) (GaloisField q 2) (p.1 : Matrix (Fin 2) (Fin 2) (ZMod q)).det * ((p.2 : (GaloisField q 2)ˣ) : GaloisField q 2) ^ (q + 1) := by simp [hChar, Matrix.GeneralLinearGroup.val_det_apply] def hSubgroup : Subgroup (Matrix.GeneralLinearGroup (Fin 2) (ZMod q) × (GaloisField q 2)ˣ) := (hChar q).ker theorem mem_hSubgroup_iff (p : Matrix.GeneralLinearGroup (Fin 2) (ZMod q) × (GaloisField q 2)ˣ) : p ∈ hSubgroup q ↔ hChar q p = 1 := MonoidHom.mem_ker private theorem hFactor {p : Matrix.GeneralLinearGroup (Fin 2) (ZMod q) × (GaloisField q 2)ˣ} (hp : p ∈ hSubgroup q) : ofZMod q k (p.1 : Matrix (Fin 2) (Fin 2) (ZMod q)).det * scalarOf q k p.2 ^ (q + 1) = 1 := by have h := congrArg (fun u : (GaloisField q 2)ˣ => algebraMap (GaloisField q 2) k u) ((mem_hSubgroup_iff q p).mp hp) simp only [coe_hChar_apply, Units.val_one, map_one, map_mul, map_pow] at h simpa [ofZMod, scalarOf] using h private def hEnd (p : hSubgroup q) : CoordRing q k →ₐ[k] CoordRing q k := Ideal.Quotient.liftₐ (drinfeldIdeal q k) ((mk q k).comp ((scalePoly k (scalarOf q k (p : Matrix.GeneralLinearGroup (Fin 2) (ZMod q) × (GaloisField q 2)ˣ).2)).comp (substPoly q k ((p : Matrix.GeneralLinearGroup (Fin 2) (ZMod q) × (GaloisField q 2)ˣ).1 : Matrix (Fin 2) (Fin 2) (ZMod q))))) (by intro a ha rw [drinfeldIdeal, Ideal.mem_span_singleton'] at ha obtain ⟨b, rfl⟩ := ha rw [AlgHom.comp_apply, AlgHom.comp_apply, map_mul, map_sub, map_one, map_mul, map_sub, map_one, scalePoly_substPoly_drinfeldPoly, hFactor q k p.2, C_1, one_mul] exact mk_mul_drinfeldPoly_sub_one q k _) private theorem hEnd_mk (p : hSubgroup q) (f : MvPolynomial (Fin 2) k) : hEnd q k p (mk q k f) = mk q k (scalePoly k (scalarOf q k (p : Matrix.GeneralLinearGroup (Fin 2) (ZMod q) × (GaloisField q 2)ˣ).2) (substPoly q k ((p : Matrix.GeneralLinearGroup (Fin 2) (ZMod q) × (GaloisField q 2)ˣ).1 : Matrix (Fin 2) (Fin 2) (ZMod q)) f)) := rfl private def hEndHom : hSubgroup q →* (CoordRing q k →ₐ[k] CoordRing q k) where toFun := hEnd q k map_one' := by apply algHom_ext apply MvPolynomial.algHom_ext intro i simp [hEnd_mk, scalarOf_one, scalePoly_one, substPoly_one] map_mul' p₁ p₂ := by apply algHom_ext apply MvPolynomial.algHom_ext intro j simp only [AlgHom.comp_apply, AlgHom.mul_apply, hEnd_mk] simp only [Subgroup.coe_mul, Prod.fst_mul, Prod.snd_mul, Units.val_mul, scalarOf_mul, substPoly_X, scalePoly_X, map_mul, map_add, MvPolynomial.algHom_C, MvPolynomial.algebraMap_eq, Matrix.mul_apply, Fin.sum_univ_two] ring def hAction : hSubgroup q →* (CoordRing q k ≃ₐ[k] CoordRing q k) := (AlgEquiv.algHomUnitsEquiv k (CoordRing q k)).toMonoidHom.comp (hEndHom q k).toHomUnits theorem hAction_mk (p : hSubgroup q) (f : MvPolynomial (Fin 2) k) : hAction q k p (mk q k f) = mk q k (scalePoly k (scalarOf q k (p : Matrix.GeneralLinearGroup (Fin 2) (ZMod q) × (GaloisField q 2)ˣ).2) (substPoly q k ((p : Matrix.GeneralLinearGroup (Fin 2) (ZMod q) × (GaloisField q 2)ˣ).1 : Matrix (Fin 2) (Fin 2) (ZMod q)) f)) := hEnd_mk q k p f theorem toGL_one_mem_hSubgroup (g : Matrix.SpecialLinearGroup (Fin 2) (ZMod q)) : (Matrix.SpecialLinearGroup.toGL g, (1 : (GaloisField q 2)ˣ)) ∈ hSubgroup q := by rw [mem_hSubgroup_iff, Units.ext_iff, coe_hChar_apply] simp [Matrix.SpecialLinearGroup.coe_GL_coe_matrix] theorem one_mem_hSubgroup_of_mem (ζ : rootsOfUnity (q + 1) (GaloisField q 2)) : ((1 : Matrix.GeneralLinearGroup (Fin 2) (ZMod q)), (ζ : (GaloisField q 2)ˣ)) ∈ hSubgroup q := by rw [mem_hSubgroup_iff, Units.ext_iff, coe_hChar_apply] have hζ := (mem_rootsOfUnity _ _).mp ζ.2 simp [← Units.val_pow_eq_pow_val, hζ] theorem slAction_eq_hAction (g : Matrix.SpecialLinearGroup (Fin 2) (ZMod q)) : slAction q k g = hAction q k ⟨_, toGL_one_mem_hSubgroup q g⟩ := by ext z obtain ⟨f, rfl⟩ := mk_surjective q k z rw [slAction_mk, hAction_mk] simp [scalarOf_one, scalePoly_one, Matrix.SpecialLinearGroup.coe_GL_coe_matrix] theorem muAction_eq_hAction (ζ : rootsOfUnity (q + 1) (GaloisField q 2)) : muAction q k ζ = hAction q k ⟨_, one_mem_hSubgroup_of_mem q ζ⟩ := by ext z obtain ⟨f, rfl⟩ := mk_surjective q k z rw [muAction_mk, hAction_mk] simp [substPoly_one] end Actions end DrinfeldCurve end
Statements phrased using this module (281)
- The Drinfeld curve coordinate ring is a domain
DrinfeldCurve.isDomain_coordRing_of_ne_one0 below · depth 15 - Quadratic relation for inertia on cuspidal intertwiners
FullLevelTate.Datum.isoHomGal_inertia_quadratic_of_specialization0 below · depth 15 - Regularity at affine places forces membership in the coordinate ring
DrinfeldCurve.coe_algEquiv_mem_range_algebraMap_of_forall_place_quotField5 below · depth 27 - Functions on the quotient Drinfeld curve regular at all affine places
DrinfeldCurve.exists_muAction_eq_and_algebraMap_eq_of_mem_quotField_of_forall_place4 below · depth 27 - Coordinate ring of the affine Drinfeld curve is Dedekind
DrinfeldCurve.isDedekindDomain_coordRing2 below · depth 27 - Supersingular chart with q+1 ends and linked inertia
ModularCurve.FullLevel.AuxLevel.exists_supersingularAffineChart_ends_moduliHasse_commonChart_orbitPoles_chartAlgFin_igusaSep_deckSep_linkedScalars_linkedInertia_of_tame3,449 below · depth 27 - Level descent of the rigid supersingular chart, linked inertia
ModularCurve.FullLevel.exists_supersingularDVR_affineChart_poles_moduliHasse_commonChart_nodes_igusaSep_deckSep_linkedScalars_linkedInertia_of_rigidChart3,152 below · depth 27 - Rigid-chart decomposition order equals 2 placeWidthChar
ModularCurve.FullLevel.rigidChart_decompositionOrder_eq_two_mul_placeWidthChar_of_decompositionUnique_linkedScalars2,909 below · depth 27 - A G-invariant chart element avoiding all Igusa valuation rings
ModularCurve.FullLevel.AuxLevel.exists_mem_invariants_forall_igusaValuation_not_mem_of_rigidChart_framed258 below · depth 28 - Invariant element avoiding every valuation ring over another supersingular place
ModularCurve.FullLevel.AuxLevel.exists_mem_invariants_forall_valuationSubring_over_not_mem_of_rigidChart_framed2,878 below · depth 28 - Level and tame-inertia laws on the invariant chart
ModularCurve.FullLevel.AuxLevel.exists_quotField_ringHom_invariants_levelLaw_inertiaLaw_linkedInertia_of_rigidChart_framed262 below · depth 28 - Supersingular affine chart with ends and linked tame inertia
ModularCurve.FullLevel.AuxLevel.exists_supersingularAffineChart_ends_moduliHasse_commonChart_orbitPoles_inertia_chartAlgFin_of_stalk_drinfeldChart_moduliHasse_igusaSep_deckSep_linkedScalars_linkedInertia794 below · depth 28 - Descended chart and supersingular valuation ring as G-invariants
ModularCurve.FullLevel.AuxLevel.supersingularDVR_affineChart_invariants_of_rigidChart_framed922 below · depth 28 - Supersingular chart with q+1 ends, Drinfeld quotient, tame inertia
ModularCurve.FullLevel.AuxLevelOne.exists_supersingularAffineChart_ends_moduliHasse_commonChart_orbitPoles_chartAlgFin_igusaSep_deckSep_linkedScalars_linkedInertia_of_tame_of_dvd3,434 below · depth 28 - Level descent of the rigid Γ_{H_1} chart at q=3
ModularCurve.FullLevel.Diamond.exists_supersingularDVR_affineChart_poles_moduliHasse_commonChart_nodes_igusaSep_deckSep_linkedScalars_linkedInertia_of_rigidChart_of_eq_three_of_dvd3,146 below · depth 28 - Level descent of the rigid chart at q = 2
ModularCurve.FullLevel.Diamond.exists_supersingularDVR_affineChart_poles_moduliHasse_commonChart_nodes_igusaSep_deckSep_linkedScalars_linkedInertia_of_rigidChart_of_eq_two_of_dvd3,148 below · depth 28 - Rigid-chart rotation order equals place width at q=2
ModularCurve.FullLevel.Diamond.rigidChart_decompositionOrder_eq_placeWidthChar_of_decompositionUnique_linkedScalars_of_eq_two_of_dvd2,899 below · depth 28 - Rigid-chart decomposition order is twice the place width (q=3)
ModularCurve.FullLevel.Diamond.rigidChart_decompositionOrder_eq_two_mul_placeWidthChar_of_decompositionUnique_linkedScalars_of_eq_three_of_dvd2,899 below · depth 28 - Descended fixed field of the rigid level model equals F₀
ModularCurve.FullLevel.exists_algEquiv_fixedField_levelField_coeffMap_eq_qExpand_framed77 below · depth 28 - Chart-pole and other-pole clauses transported to the level field
ModularCurve.FullLevel.exists_chartPole_otherPole_levelField_of_fixedField_of_algEquiv_framed276 below · depth 28 - Nodes of the rigid model descended to K_ℓ^G
ModularCurve.FullLevel.exists_moduliHasse_commonChart_nodes_igusaSep_deckSep_linkedScalars_fixedField_of_rigidChart_ends1,290 below · depth 28 - Transport of the node block along the level-field identification
ModularCurve.FullLevel.exists_moduliHasse_commonChart_nodes_igusaSep_levelField_of_nodes_fixedField_of_algEquiv_framed276 below · depth 28 - Decomposition order at a supersingular point equals #Aut(E,C)
ModularCurve.FullLevel.rigidChart_decompositionOrder_eq_natCard_rationalAut_of_moduliPlace_of_decompositionUnique_linkedScalars2,907 below · depth 28 - Drinfeld special fibre and level action on the blow-up chart
ModularCurve.FullLevel.AuxLevel.blowupChart_drinfeldFibre_levelAut_decomposition_linkedScalars_of_eq_adjoin_of_drinfeldChartWitness_of_stalk_drinfeldChart_moduliHasse181 below · depth 29 - Tame inertia on the exceptional Drinfeld fibre
ModularCurve.FullLevel.AuxLevel.blowupChart_drinfeldFibre_levelAut_linkedScalars_inertia_of_decomposition_of_eq_adjoin_of_drinfeldChartWitness_of_stalk_drinfeldChart_inertia183 below · depth 29 - Weighted blow-up chart C[J/varpiₜ] and its exceptional valuation ring
ModularCurve.FullLevel.AuxLevel.exists_blowupChart_eq_adjoin_exceptionalValuation_of_drinfeldChartWitness_of_stalk_drinfeldChart_moduliHasse189 below · depth 29 - Ends of the blown-up supersingular chart: cyclic decomposition and crossings
ModularCurve.FullLevel.AuxLevel.exists_cyclicDecomposition_ends_moduliHasse_igusaSepTranslate_commonChart_cover_blowupChart_linked_of_eq_adjoin_of_drinfeldChartWitness758 below · depth 29 - Poles of the blow-up chart along Igusa and off-orbit valuations
ModularCurve.FullLevel.AuxLevel.exists_mem_blowupChart_not_mem_igusaValuation_orbitPole_of_eq_adjoin_of_drinfeldChartWitness_of_stalk_drinfeldChart269 below · depth 29 - Descended supersingular chart reduces to a quotient Drinfeld curve
ModularCurve.FullLevel.AuxLevel.exists_quotField_ringHom_invariants_of_rigidChart_framed259 below · depth 29 - Formal smoothness of the descended chart B₀ over A∩ k₀
ModularCurve.FullLevel.AuxLevel.formallySmooth_invariants_of_rigidChart_framed321 below · depth 29 - Supersingular chart with Drinfeld ends, decomposition and inertia
ModularCurve.FullLevel.AuxLevelOne.exists_supersingularAffineChart_ends_moduliHasse_commonChart_orbitPoles_inertia_chartAlgFin_of_stalk_drinfeldChart_moduliHasse_igusaSep_deckSep_linkedScalars_linkedInertia_of_dvd622 below · depth 29 - Invariant chart element outside every Igusa valuation ring, q=3
ModularCurve.FullLevel.Diamond.AuxLevel.exists_mem_invariants_forall_igusaValuation_not_mem_of_rigidChart_linkedScalars_of_eq_three_of_dvd34 below · depth 29 - Invariant chart element in no Igusa valuation ring of K₀
ModularCurve.FullLevel.Diamond.AuxLevel.exists_mem_invariants_forall_igusaValuation_not_mem_of_rigidChart_linkedScalars_of_eq_two_of_dvd34 below · depth 29 - Invariant element avoiding valuation rings over the other supersingular places
ModularCurve.FullLevel.Diamond.AuxLevel.exists_mem_invariants_forall_valuationSubring_over_not_mem_of_rigidChart_linkedScalars_of_eq_three_of_dvd2,869 below · depth 29 - Invariant function with poles over the other supersingular places
ModularCurve.FullLevel.Diamond.AuxLevel.exists_mem_invariants_forall_valuationSubring_over_not_mem_of_rigidChart_linkedScalars_of_eq_two_of_dvd2,869 below · depth 29 - Drinfeld reduction of the invariant chart at q=3, Γ₁(ℓ_g) frame
ModularCurve.FullLevel.Diamond.AuxLevel.exists_quotField_ringHom_invariants_levelLaw_inertiaLaw_linkedInertia_of_rigidChart_of_eq_three_of_dvd46 below · depth 29 - Level and tame-inertia laws on the invariant chart at q=2
ModularCurve.FullLevel.Diamond.AuxLevel.exists_quotField_ringHom_invariants_levelLaw_inertiaLaw_linkedInertia_of_rigidChart_of_eq_two_of_dvd47 below · depth 29 - Descent of the rigid chart to the fixed field K₀ at q=3
ModularCurve.FullLevel.Diamond.AuxLevel.supersingularDVR_affineChart_invariants_of_rigidChart_linkedScalars_of_eq_three_of_dvd895 below · depth 29 - Descent of the supersingular chart to G-invariants at q=2
ModularCurve.FullLevel.Diamond.AuxLevel.supersingularDVR_affineChart_invariants_of_rigidChart_linkedScalars_of_eq_two_of_dvd896 below · depth 29 - The fixed field K₀ is the level field F₀ (q=3)
ModularCurve.FullLevel.Diamond.exists_algEquiv_fixedField_levelField_coeffMap_eq_linkedScalars_of_eq_three_of_dvd72 below · depth 29 - Level-field descent of the rigid level-q model, q=2
ModularCurve.FullLevel.Diamond.exists_algEquiv_fixedField_levelField_coeffMap_eq_linkedScalars_of_eq_two_of_dvd72 below · depth 29 - Transport of chart poles to the level field, q=3
ModularCurve.FullLevel.Diamond.exists_chartPole_otherPole_levelField_of_fixedField_of_algEquiv_linkedScalars_of_eq_three_of_dvd232 below · depth 29 - Transport of chart-pole and other-pole clauses along the level-field identification
ModularCurve.FullLevel.Diamond.exists_chartPole_otherPole_levelField_of_fixedField_of_algEquiv_linkedScalars_of_eq_two_of_dvd232 below · depth 29 - The q+1 nodes of the descended supersingular model, q=3
ModularCurve.FullLevel.Diamond.exists_moduliHasse_commonChart_nodes_igusaSep_deckSep_linkedScalars_fixedField_of_rigidChart_ends_of_eq_three_of_dvd1,278 below · depth 29 - Descent of the q+1 nodes to the fixed field, q=2
ModularCurve.FullLevel.Diamond.exists_moduliHasse_commonChart_nodes_igusaSep_deckSep_linkedScalars_fixedField_of_rigidChart_ends_of_eq_two_of_dvd1,278 below · depth 29 - Transport of the node package along the level-field identification, q=3
ModularCurve.FullLevel.Diamond.exists_moduliHasse_commonChart_nodes_igusaSep_levelField_of_nodes_fixedField_of_algEquiv_of_eq_three_of_dvd232 below · depth 29 - Transport of the node block to the level field, q=2
ModularCurve.FullLevel.Diamond.exists_moduliHasse_commonChart_nodes_igusaSep_levelField_of_nodes_fixedField_of_algEquiv_of_eq_two_of_dvd232 below · depth 29 - Decomposition order equals the number of rational automorphisms of (E,C)
ModularCurve.FullLevel.Diamond.rigidChart_decompositionOrder_eq_natCard_rationalAut_of_moduliPlace_of_decompositionUnique_linkedScalars_of_eq_three_of_dvd2,897 below · depth 29 - Twice the decomposition order counts automorphisms of (E,Cyc), q=2
ModularCurve.FullLevel.Diamond.two_mul_rigidChart_decompositionOrder_eq_natCard_rationalAut_of_moduliPlace_of_decompositionUnique_linkedScalars_of_eq_two_of_dvd2,897 below · depth 29 - Level-automorphism stabiliser of y counts Aut(E,Cyc)
ModularCurve.FullLevel.natCard_levelAut_stabilizer_eq_natCard_rationalAut_of_moduliPlace2,904 below · depth 29 - Per-node conclusion at the K₀-traces of all ends
ModularCurve.FullLevel.pernodeConclusion_traces_of_rigidDescentHyps1,284 below · depth 29 - Integral cusp-regular level-M' functions lie in the j_ℓ-chart algebra
ModularCurve.FullLevel.qExpand_coeffEmb_mem_chartAlgFin_of_mem_integers_of_cuspRegular_of_not_dvd827 below · depth 29 - Frobenius pin: ̄ a₀^{ q} equals the moduli value at a supersingular place
ModularCurve.FullLevel.residue_pow_eq_evalAt_of_jqNModC_sub_mem89 below · depth 29 - Level automorphisms: stabilising Wₜ iff fixing the chart point
ModularCurve.FullLevel.rigidChart_decompositionAut_iff_fixesPoint_linkedScalars0 below · depth 29 - Exactly n level automorphisms stabilise the exceptional valuation ring
ModularCurve.FullLevel.rigidChart_natCard_decompositionAut_eq_linkedScalars64 below · depth 29 - Level automorphisms stabilise the blow-up centre and chart algebra
ModularCurve.FullLevel.AuxLevel.blowupChart_centre_levelAut_stable_of_eq_adjoin_of_drinfeldChartWitness66 below · depth 30 - Coefficientwise automorphisms stabilise the blow-up centre J and chart B
ModularCurve.FullLevel.AuxLevel.blowupChart_centre_stable_of_coeffMap_ringEquiv_of_localCentre_stable_of_drinfeldChartWitness23 below · depth 30 - Level automorphisms act on the Drinfeld fibre through H
ModularCurve.FullLevel.AuxLevel.blowupChart_drinfeldFibre_hAction_of_isLevelAutAt_of_fibrePackage67 below · depth 30 - Semilinear chart automorphisms act on the Drinfeld fibre through H
ModularCurve.FullLevel.AuxLevel.blowupChart_drinfeldFibre_hAction_of_semilinear_chartAut_of_fibrePackage0 below · depth 30 - Transitivity and reducedness for the blow-up chart above varpi
ModularCurve.FullLevel.AuxLevel.blowupChart_primes_transitive_reduced_of_levelAut_stable_of_exceptional_eq_span152 below · depth 30 - Drinfeld chart as a flat, dense extension of the j-chart algebra
ModularCurve.FullLevel.AuxLevel.comap_eq_and_dense_and_flat_drinfeldChartWitness_chartAlgFin9 below · depth 30 - Hasse germ at an end: j - a₀ is a unit times V^e
ModularCurve.FullLevel.AuxLevel.exists_apply_jqNModC_sub_eq_unit_mul_V_pow_of_end_blowupChart_of_moduliHasse_linked309 below · depth 30 - Blow-up chart surjects onto the Drinfeld coordinate ring
ModularCurve.FullLevel.AuxLevel.exists_blowupChart_ringHom_localBlowupChart_surjective_ker_eq_span_of_dense_of_flat9 below · depth 30 - Common chart, exceptional stability and valuative cover at the ends
ModularCurve.FullLevel.AuxLevel.exists_commonChart_and_stabilizer_and_valuativeCover_ends_blowupChart_of_drinfeldChartWitness_linked388 below · depth 30 - Finite-type end chart with pole along the other Igusa components
ModularCurve.FullLevel.AuxLevel.exists_endChart_finiteType_isLocalization_pole_of_end_blowupChart_of_drinfeldChartWitness_linked679 below · depth 30 - The q+1 ends of the blown-up supersingular chart
ModularCurve.FullLevel.AuxLevel.exists_finset_ends_iff_isLocalization_blowupChart_card_eq_of_eq_adjoin_of_drinfeldChartWitness_linked680 below · depth 30 - Igusa branch through an end separating ends and level-q translates
ModularCurve.FullLevel.AuxLevel.exists_igusaValuationSubring_translateSep_of_mem_ends_blowupChart_of_drinfeldChartWitness_linked694 below · depth 30 - Cyclic Γ(q)-action of order dividing q+1 on the blow-up chart
ModularCurve.FullLevel.AuxLevel.exists_levelAut_pow_eq_and_forall_eq_pow_blowupChart_of_eq_adjoin_of_drinfeldChartWitness_linked64 below · depth 30 - An element of C[J/varpiₜ] outside every Igusa valuation ring
ModularCurve.FullLevel.AuxLevel.exists_mem_blowupChart_not_mem_igusaValuation_of_eq_adjoin_of_drinfeldChartWitness_of_stalk_drinfeldChart262 below · depth 30 - Other-orbit pole in the blown-up supersingular chart
ModularCurve.FullLevel.AuxLevel.exists_mem_blowupChart_orbitPole_of_pow_mem_centre_of_eq_adjoin_of_drinfeldChartWitness_of_stalk_drinfeldChart66 below · depth 30 - Crossing presentation ̂ A[[U,V]]/(UV-varpi^m) at the ends, with diagonal action
ModularCurve.FullLevel.AuxLevel.exists_ringEquiv_adicCompletion_uvCrossingModel_tangent_of_end_blowupChart_of_drinfeldChartWitness_linked318 below · depth 30 - Weighted blow-up chart C[J/varpiₜ]: presentation, fibre dimension, exceptional valuation
ModularCurve.FullLevel.AuxLevel.finitePresentation_krullDimLE_exists_exceptionalValuation_blowupChart_of_drinfeldChartWitness179 below · depth 30 - Formal smoothness of the blow-up chart C[J/varpiₜ]
ModularCurve.FullLevel.AuxLevel.formallySmooth_blowupChart_of_drinfeldChartWitness186 below · depth 30 - Normality of the descended special fibre B₀/π₀B₀
ModularCurve.FullLevel.AuxLevel.isIntegrallyClosed_invariants_quotient_of_rigidChart_framed263 below · depth 30 - Orbit centre generates (σ₁varpiₜ,X₀,X₁) in the Drinfeld chart
ModularCurve.FullLevel.AuxLevel.map_orbitCentre_eq_span_drinfeldChartWitness_of_stabilizes_of_dense149 below · depth 30 - Centre of the exceptional valuation on the blow-up chart
ModularCurve.FullLevel.AuxLevel.mem_maximalIdeal_iff_mem_span_image_of_blowupChart_exceptionalValuation_of_isPrime0 below · depth 30 - Drinfeld fibre and linked scalars on the blown-up supersingular chart
ModularCurve.FullLevel.AuxLevelOne.blowupChart_drinfeldFibre_levelAut_decomposition_linkedScalars_of_eq_adjoin_of_drinfeldChartWitness_of_stalk_drinfeldChart_moduliHasse_of_dvd150 below · depth 30 - Linked scalars and tame inertia on the exceptional Drinfeld fibre
ModularCurve.FullLevel.AuxLevelOne.blowupChart_drinfeldFibre_levelAut_linkedScalars_inertia_of_decomposition_of_eq_adjoin_of_drinfeldChartWitness_of_stalk_drinfeldChart_inertia_of_dvd152 below · depth 30 - Weighted blow-up chart C[J/varpiₜ] and its exceptional valuation
ModularCurve.FullLevel.AuxLevelOne.exists_blowupChart_eq_adjoin_exceptionalValuation_of_drinfeldChartWitness_of_stalk_drinfeldChart_moduliHasse_of_dvd158 below · depth 30 - Ends of the blown-up supersingular chart: cyclic decomposition and crossings
ModularCurve.FullLevel.AuxLevelOne.exists_cyclicDecomposition_ends_moduliHasse_igusaSepTranslate_commonChart_cover_blowupChart_linked_of_eq_adjoin_of_drinfeldChartWitness_of_dvd586 below · depth 30 - Pole clauses for the blown-up supersingular chart
ModularCurve.FullLevel.AuxLevelOne.exists_mem_blowupChart_not_mem_igusaValuation_orbitPole_of_eq_adjoin_of_drinfeldChartWitness_of_stalk_drinfeldChart_of_dvd267 below · depth 30 - Drinfeld quotient model of the descended supersingular chart, q=3
ModularCurve.FullLevel.Diamond.AuxLevel.exists_quotField_ringHom_invariants_of_rigidChart_linkedScalars_of_eq_three_of_dvd878 below · depth 30 - Drinfeld quotient field model of the invariant supersingular chart (q=2)
ModularCurve.FullLevel.Diamond.AuxLevel.exists_quotField_ringHom_invariants_of_rigidChart_linkedScalars_of_eq_two_of_dvd879 below · depth 30 - Formal smoothness of the descended supersingular chart at q=3
ModularCurve.FullLevel.Diamond.AuxLevel.formallySmooth_invariants_of_rigidChart_linkedScalars_of_eq_three_of_dvd894 below · depth 30 - Formal smoothness of the descended supersingular chart B₀
ModularCurve.FullLevel.Diamond.AuxLevel.formallySmooth_invariants_of_rigidChart_linkedScalars_of_eq_two_of_dvd895 below · depth 30 - Level-automorphism stabiliser equals rational automorphism count, q=3
ModularCurve.FullLevel.Diamond.natCard_levelAut_stabilizer_eq_natCard_rationalAut_of_moduliPlace_of_eq_three_of_dvd2,894 below · depth 30 - Per-node block for traces of ends on K₀ at q=3
ModularCurve.FullLevel.Diamond.pernodeConclusion_traces_of_rigidChart_linkedScalars_of_eq_three_of_dvd1,272 below · depth 30 - Per-node block for traces of ends, q = 2
ModularCurve.FullLevel.Diamond.pernodeConclusion_traces_of_rigidChart_linkedScalars_of_eq_two_of_dvd1,272 below · depth 30 - Stretched Γ₀(M') expansions lie in K and are level-fixed
ModularCurve.FullLevel.Diamond.qExpand_mem_and_apply_eq_of_isLevelAutAt_of_mem_gamma0_of_eq_levelH_inf_ker3 below · depth 30 - Hasse relation: ̄ a₀^{ q}=jmatĥ(s) at a supersingular place
ModularCurve.FullLevel.Diamond.residue_pow_eq_evalAt_of_jqNModC_sub_mem_of_over89 below · depth 30 - Stabilising the exceptional valuation iff fixing the supersingular point (q=3)
ModularCurve.FullLevel.Diamond.rigidChart_decompositionAut_iff_fixesPoint_linkedScalars_of_eq_three_of_dvd0 below · depth 30 - Stabilising the exceptional valuation iff fixing the supersingular point (q=2)
ModularCurve.FullLevel.Diamond.rigidChart_decompositionAut_iff_fixesPoint_linkedScalars_of_eq_two_of_dvd0 below · depth 30 - Exactly n level automorphisms stabilise the exceptional valuation, q=3
ModularCurve.FullLevel.Diamond.rigidChart_natCard_decompositionAut_eq_linkedScalars_of_eq_three_of_dvd31 below · depth 30 - Exactly n chart-stabilising level automorphisms at q=2
ModularCurve.FullLevel.Diamond.rigidChart_natCard_decompositionAut_eq_linkedScalars_of_eq_two_of_dvd31 below · depth 30 - Stabiliser of a supersingular point versus Aut(E,C) at q=2
ModularCurve.FullLevel.Diamond.two_mul_natCard_levelAut_stabilizer_eq_natCard_rationalAut_of_moduliPlace_of_eq_two_of_dvd2,894 below · depth 30 - Descent of a chart element avoiding Igusa-type valuation rings
ModularCurve.FullLevel.exists_invariant_notMem_of_endChartPole_of_rigidChart257 below · depth 30 - Residually transcendental trace along an Igusa branch
ModularCurve.FullLevel.exists_residuallyTranscendental_trace_of_igusaBranch_of_rigidChart307 below · depth 30 - Level-M' laws along an Igusa branch at a supersingular point
ModularCurve.FullLevel.levelLaws_trace_of_igusaBranch_of_rigidChart1,215 below · depth 30 - Supersingular fibre count times #Aut(E,Cyc) equals #SL₂(ℤ/ℓ')
ModularCurve.FullLevel.natCard_isMaximal_over_mul_natCard_rationalAut_eq_natCard_specialLinearGroup_of_moduliPlace2,896 below · depth 30 - Orbit–stabiliser count for level automorphisms at a supersingular point
ModularCurve.FullLevel.natCard_levelAut_attached_eq_natCard_isMaximal_over_mul_natCard_stabilizer2,871 below · depth 30 - Level automorphisms attached to Γ(q)∩Γ₀(M') number #SL₂(ℤ/ℓ')
ModularCurve.FullLevel.natCard_levelAut_attached_eq_natCard_specialLinearGroup_zmod414 below · depth 30 - Per-node conclusion at one end of the descended model
ModularCurve.FullLevel.pernodeConclusion_of_pernodeHyps_of_rigidDescentHyps57 below · depth 30 - Rigid-level valuation ring reads level-M' constant reductions
ModularCurve.FullLevel.qExpand_coeffEmb_mem_maximalIdeal_iff_residue_eq_zero_of_forall_aeval_jqNModC_mem955 below · depth 30 - Frobenius pinning at a supersingular place
ModularCurve.FullLevel.residue_pow_eq_evalAt_of_jqNModC_sub_mem_of_over89 below · depth 30 - Reducedness of the fibre of a smooth algebra at a maximal ideal
Algebra.FormallySmooth.isReduced_quotient_map_of_isMaximal_of_finitePresentation1 below · depth 31 - Approximation of SL₂(ℤ) modulo q inside Γ(ℓ)∩Γ₀(M')
CongruenceSubgroup.exists_mem_Gamma_mem_Gamma0_mul_inv_mem_Gamma_of_not_dvd2 below · depth 31 - Primes over a supersingular point: trichotomy, and one end per component
ModularCurve.FullLevel.AuxLevel.blowupChart_primes_over_supersingular_exceptional_generic_or_end_on_unique_component_of_drinfeldChartWitness_linked381 below · depth 31 - Level automorphisms carrying an end into W stabilise W
ModularCurve.FullLevel.AuxLevel.exceptionalValuation_stable_of_end_le_translate_blowupChart_of_drinfeldChartWitness_linked64 below · depth 31 - Chart map extends to the blow-up algebra C[J/varpiₜ]
ModularCurve.FullLevel.AuxLevel.exists_blowupChart_ringHom_away_extends_chartMap_of_eq_adjoin0 below · depth 31 - Surjection from the blow-up chart onto the Drinfeld coordinate ring
ModularCurve.FullLevel.AuxLevel.exists_blowupChart_ringHom_coordRing_surjective_ker_eq_span_of_chartMap_of_localFibreMap0 below · depth 31 - Common level-stable chart at the ends of the blow-up
ModularCurve.FullLevel.AuxLevel.exists_commonChart_ends_blowupChart_of_drinfeldChartWitness_linked167 below · depth 31 - Crossing presentation at an end: Hasse germ along V
ModularCurve.FullLevel.AuxLevel.exists_crossingPresentation_apply_jqNModC_sub_eq_unit_mul_V_pow_of_end_blowupChart_of_moduliHasse_linked301 below · depth 31 - Exactly q+1 components through a supersingular point
ModularCurve.FullLevel.AuxLevel.exists_finset_isPrime_lt_supersingular_card_eq_succ_of_drinfeldChartWitness_linked20 below · depth 31 - Weighted centre: tame exponent, reduction, orbit support and transport
ModularCurve.FullLevel.AuxLevel.exists_finset_prod_pow_le_weightedCentre_and_levelAut_transport_of_drinfeldChartWitness163 below · depth 31 - Igusa branch through an end of the blown-up supersingular chart
ModularCurve.FullLevel.AuxLevel.exists_igusaValuationSubring_of_mem_ends_blowupChart_of_drinfeldChartWitness_linked413 below · depth 31 - Level automorphisms translate the ends of the blown-up chart
ModularCurve.FullLevel.AuxLevel.exists_isEnd_blowupChart_map_of_isLevelAutAt_of_mem_valuationSubring_iff_of_drinfeldChartWitness_linked67 below · depth 31 - Level automorphisms act transitively on branches below a supersingular point
ModularCurve.FullLevel.AuxLevel.exists_isLevelAutAt_mem_valuationSubring_iff_map_isPrime_lt_supersingular_of_drinfeldChartWitness_linked87 below · depth 31 - Local blow-up chart of a Drinfeld chart presentation
ModularCurve.FullLevel.AuxLevel.exists_localBlowupChart_ringHom_coordRing_of_chartPresentation_of_mem_nonZeroDivisors6 below · depth 31 - A uniform pole function in Bₓ along all Igusa valuations
ModularCurve.FullLevel.AuxLevel.exists_mem_blowupChart_mem_end_not_mem_igusaValuation_of_end_blowupChart10 below · depth 31 - Distinct ends of the blown-up supersingular chart are separated
ModularCurve.FullLevel.AuxLevel.exists_not_isUnit_isUnit_of_isEnd_blowupChart_ne_of_drinfeldChartWitness_linked51 below · depth 31 - Crossing presentation at a τ₀-stable end with tangent character
ModularCurve.FullLevel.AuxLevel.exists_ringEquiv_adicCompletion_uvCrossingModel_tangent_of_isEnd_of_levelAut_mem_iff_blowupChart_of_drinfeldChartWitness_linked316 below · depth 31 - A finite-type equivariant affine neighbourhood of an end
ModularCurve.FullLevel.AuxLevel.exists_subalgebra_le_blowupChart_inf_end_finiteType_isLocalization_of_end_blowupChart671 below · depth 31 - Level-q automorphisms fix every Igusa-type valuation ring of K
ModularCurve.FullLevel.AuxLevel.forall_mem_iff_map_mem_igusaValuation_of_isLevelAutAt_gamma_of_drinfeldChartWitness550 below · depth 31 - Formal smoothness of the generic fibre of the blow-up chart
ModularCurve.FullLevel.AuxLevel.formallySmooth_fiber_bot_blowupChart_of_drinfeldChartWitness14 below · depth 31 - Formal smoothness of the special fibre of the blow-up chart
ModularCurve.FullLevel.AuxLevel.formallySmooth_fiber_maximalIdeal_blowupChart_of_drinfeldChartWitness181 below · depth 31 - Level-q automorphisms stabilise primes below a supersingular point
ModularCurve.FullLevel.AuxLevel.mem_iff_map_mem_isPrime_lt_supersingular_of_isLevelAutAt_gamma_of_drinfeldChartWitness_linked551 below · depth 31 - Regularity of C[J/varpiₜ] at places where j is regular
ModularCurve.FullLevel.AuxLevel.ord_nonneg_of_mem_blowupChart_of_ord_j_nonneg_of_eq_adjoin_of_drinfeldChartWitness_linked1 below · depth 31 - Valuative cover of the blown-up supersingular chart by its ends
ModularCurve.FullLevel.AuxLevel.valuativeCover_ends_blowupChart_of_drinfeldChartWitness_linked382 below · depth 31 - Level automorphisms stabilise the blow-up centre and chart
ModularCurve.FullLevel.AuxLevelOne.blowupChart_centre_levelAut_stable_of_eq_adjoin_of_drinfeldChartWitness_of_dvd34 below · depth 31 - Coefficientwise automorphisms preserve the blow-up centre and chart
ModularCurve.FullLevel.AuxLevelOne.blowupChart_centre_stable_of_coeffMap_ringEquiv_of_localCentre_stable_of_drinfeldChartWitness_of_dvd23 below · depth 31 - Level automorphisms act on the Drinfeld fibre through H
ModularCurve.FullLevel.AuxLevelOne.blowupChart_drinfeldFibre_hAction_of_isLevelAutAt_of_fibrePackage_of_dvd35 below · depth 31 - Semilinear chart automorphisms act through `hAction` on the Drinfeld fibre
ModularCurve.FullLevel.AuxLevelOne.blowupChart_drinfeldFibre_hAction_of_semilinear_chartAut_of_fibrePackage_of_dvd0 below · depth 31 - Transitivity above varpi and reducedness for the blow-up chart
ModularCurve.FullLevel.AuxLevelOne.blowupChart_primes_transitive_reduced_of_levelAut_stable_of_exceptional_eq_span_of_dvd121 below · depth 31 - Drinfeld-chart reading of the j-finite chart algebra
ModularCurve.FullLevel.AuxLevelOne.comap_eq_and_dense_and_flat_drinfeldChartWitness_chartAlgFin_of_dvd9 below · depth 31 - Hasse germ at an end: j-translate equals unit times V^e
ModularCurve.FullLevel.AuxLevelOne.exists_apply_jqNModC_sub_eq_unit_mul_V_pow_of_end_blowupChart_of_moduliHasse_linked_of_dvd278 below · depth 31 - Special fibre of the blow-up chart is the Drinfeld curve
ModularCurve.FullLevel.AuxLevelOne.exists_blowupChart_ringHom_localBlowupChart_surjective_ker_eq_span_of_dense_of_flat_of_dvd9 below · depth 31 - Common chart, stabiliser and valuative cover at the ends
ModularCurve.FullLevel.AuxLevelOne.exists_commonChart_and_stabilizer_and_valuativeCover_ends_blowupChart_of_drinfeldChartWitness_linked_of_dvd357 below · depth 31 - End-adapted finite-type chart with poles along the other ends
ModularCurve.FullLevel.AuxLevelOne.exists_endChart_finiteType_isLocalization_pole_of_end_blowupChart_of_drinfeldChartWitness_linked_of_dvd485 below · depth 31 - The q+1 ends of the blow-up at a supersingular point
ModularCurve.FullLevel.AuxLevelOne.exists_finset_ends_iff_isLocalization_blowupChart_card_eq_of_eq_adjoin_of_drinfeldChartWitness_linked_of_dvd474 below · depth 31 - Separating Igusa branch through an end of the blow-up chart
ModularCurve.FullLevel.AuxLevelOne.exists_igusaValuationSubring_translateSep_of_mem_ends_blowupChart_of_drinfeldChartWitness_linked_of_dvd488 below · depth 31 - Cyclic Γ(q)-action of order dividing q+1 on the blow-up chart
ModularCurve.FullLevel.AuxLevelOne.exists_levelAut_pow_eq_and_forall_eq_pow_blowupChart_of_eq_adjoin_of_drinfeldChartWitness_linked_of_dvd31 below · depth 31 - An element of C[J/varpiₜ] outside every Igusa-type valuation ring
ModularCurve.FullLevel.AuxLevelOne.exists_mem_blowupChart_not_mem_igusaValuation_of_eq_adjoin_of_drinfeldChartWitness_of_stalk_drinfeldChart_of_dvd261 below · depth 31 - Orbit pole in the blown-up supersingular chart
ModularCurve.FullLevel.AuxLevelOne.exists_mem_blowupChart_orbitPole_of_pow_mem_centre_of_eq_adjoin_of_drinfeldChartWitness_of_stalk_drinfeldChart_of_dvd33 below · depth 31 - Crossing model ̂ A[[U,V]]/(UV-varpi^m) at ends of the blow-up chart
ModularCurve.FullLevel.AuxLevelOne.exists_ringEquiv_adicCompletion_uvCrossingModel_tangent_of_end_blowupChart_of_drinfeldChartWitness_linked_of_dvd287 below · depth 31 - Blow-up chart C[J/varpiₜ]: presentation, fibre dimension, exceptional valuation
ModularCurve.FullLevel.AuxLevelOne.finitePresentation_krullDimLE_exists_exceptionalValuation_blowupChart_of_drinfeldChartWitness_of_dvd148 below · depth 31 - Formal smoothness of the weighted blow-up chart B=C[J/varpiₜ] over A
ModularCurve.FullLevel.AuxLevelOne.formallySmooth_blowupChart_of_drinfeldChartWitness_of_dvd155 below · depth 31 - Orbit centre generates the Drinfeld chart witness ideal
ModularCurve.FullLevel.AuxLevelOne.map_orbitCentre_eq_span_drinfeldChartWitness_of_stabilizes_of_dense_of_dvd118 below · depth 31 - Centre of the exceptional valuation is yB on the blow-up chart
ModularCurve.FullLevel.AuxLevelOne.mem_maximalIdeal_iff_mem_span_image_of_blowupChart_exceptionalValuation_of_isPrime_of_dvd0 below · depth 31 - Normality of the descended supersingular special fibre, q=3
ModularCurve.FullLevel.Diamond.AuxLevel.isIntegrallyClosed_invariants_quotient_of_rigidChart_linkedScalars_of_eq_three_of_dvd882 below · depth 31 - Special fibre of the descended chart is integrally closed (q=2)
ModularCurve.FullLevel.Diamond.AuxLevel.isIntegrallyClosed_invariants_quotient_of_rigidChart_linkedScalars_of_eq_two_of_dvd883 below · depth 31
… and 131 more statements (search for the module name to find them).