Definitions/Def_ModularCurve_ReductionModL.lean
Reduction of modular function-field places and Jacobians
Throughout, L is a field containing \mathbb Q, A\subseteq L a valuation subring, \pi\colon A\to k a ring homomorphism into a field k, and N a level. The two function fields compared are F= laurentBaseChange L (modularFunctionFieldFull N), the subfield of L((q)) generated over L by the coefficientwise images of the \mathbb Q-field generated by the q-expansions j(q^d), d\mid N, and \bar F= modularFunctionFieldFullC k N, the subfield of k((q)) generated over k by the corresponding series \bar j(q^d). Places, their degrees, \operatorname{ord}, divisors, degree-zero divisors, principal divisors and \mathrm{Pic}^0 are the project's notions for such intermediate fields.
IsPlaceReductionAlong A π N r is a predicate on a map r from places of F/L to places of \bar F/k: (i) \deg r(P)=\deg P for every P; (ii) for every Laurent series y over A whose image in L((q)) lies in F and whose coefficientwise reduction \bar y= coeffMap π y lies in \bar F and is nonzero, and every divisor D with D(P)=\operatorname{ord}_P of that image for all P, one has (r_*D)(Q)=\operatorname{ord}_Q(\bar y) for all Q, with r_*= Finsupp.mapDomain r. integralPrincipalDivisors A π N is the set of such D, PrincipalGeneratedByIntegral A π N says the principal divisors of F/L lie in the subgroup it generates, and ReductionInputsAlong A π N asserts the existence of an r satisfying (i)–(ii) together with that generation property.
From these, r_* is packaged as reductionDivAlong, restricted to degree-zero divisors using (i) (reductionDegZeroAlong), and descended to reductionPic0Along r hr hgen : Pic0 L F →+ JZeroC k N; accompanying lemmas record degree preservation and that r_* carries principal divisors to principal ones. reductionAlong A π N is the total homomorphism given by this descent when ReductionInputsAlong holds and by 0 otherwise, with reductionAlong_mk and reductionAlong_of_not describing both cases. The CharL section specialises to L=\overline{\mathbb Q} and \pi the residue map of A, giving ReductionInputsModL, a chosen place map placeReductionModL, and reductionModL A N : JZero N →+ JZeroC (ResidueField A) N. Finally, two uniqueness results: if two candidate maps have the same pushforward on integral principal divisors, all places of F/L have degree 1 and \mathrm{Pic}^0(F/L) is n-divisible for all n\neq 0, then either they agree or the first is constant; adding that principal divisors have degree 0 and that some principal divisor has nonzero pushforward forces equality.
Relation to Mathlib
Mathlib has no notion of the reduction of places or of divisor class groups of such function fields; Place, Divisor, degZero, principal and Pic0 are the project's own, built on Mathlib's ValuationSubring, HahnSeries/LaurentSeries and Finsupp. The reduction map is made a total function by a dependent case distinction on ReductionInputsAlong, which is asserted nowhere in this module.
Where it is used
These definitions express, in Deuring's form, the hypothesis that the modular function field of level N has good reduction along a valuation subring A of \overline{\mathbb Q}, and produce the resulting homomorphism from the degree-zero divisor class group in characteristic 0 to the one over the residue field of A. This reduction map on J_0(N) is what allows the mod-\ell Galois representations attached to modular Jacobians to be compared with their reductions at a place of residue characteristic \ell.
References
- H. Stichtenoth, Algebraic Function Fields and Codes, 2nd edition, Graduate Texts in Mathematics 254, Springer, 2009
- J.-P. Serre, Groupes algébriques et corps de classes, Hermann, 1959
References are suggested automatically and have not been individually verified.
English text generated automatically from the Lean source; the Lean statement is authoritative.
- 337 lines
- 30 declarations
- used in the statements of 122 theorems and imported by 147 proofs
- imports 2 definition modules
Source file: Definitions/Def_ModularCurve_ReductionModL.lean
Declarations
- def
ModularCurve.IsPlaceReductionAlong - def
ModularCurve.integralPrincipalDivisors - def
ModularCurve.PrincipalGeneratedByIntegral - def
ModularCurve.ReductionInputsAlong - theorem
ModularCurve.IsPlaceReductionAlong.deg_eq - theorem
ModularCurve.IsPlaceReductionAlong.isPrincipal_mapDomain - theorem
ModularCurve.degree_mapDomain_of_deg_eq - theorem
ModularCurve.mapDomain_mem_degZero_of_deg_eq - theorem
ModularCurve.IsPlaceReductionAlong.mapDomain_mem_principal - def
ModularCurve.reductionDivAlong - theorem
ModularCurve.reductionDivAlong_apply - theorem
ModularCurve.reductionDivAlong_single - def
ModularCurve.reductionDegZeroAlong - theorem
ModularCurve.coe_reductionDegZeroAlong - def
ModularCurve.reductionPic0Along - theorem
ModularCurve.reductionPic0Along_mk - def
ModularCurve.reductionAlong - theorem
ModularCurve.reductionAlong_eq - theorem
ModularCurve.reductionAlong_mk - theorem
ModularCurve.reductionAlong_of_not - abbrev
ModularCurve.IsPlaceReductionModL - abbrev
ModularCurve.ReductionInputsModL - def
ModularCurve.placeReductionModL - theorem
ModularCurve.isPlaceReductionModL_placeReductionModL - abbrev
ModularCurve.reductionModL - theorem
ModularCurve.reductionModL_mk - theorem
ModularCurve.reductionModL_of_not - theorem
ModularCurve.int_eq_zero_of_forall_dvd - theorem
ModularCurve.IsPlaceReductionAlong.eq_or_const_of_agree - theorem
ModularCurve.IsPlaceReductionAlong.eq_of_agree
Source
import Mathlib import Definitions.Def_ModularCurve_ArithmeticGalois import Definitions.Def_ModularCurve_X0ModL set_option autoImplicit false noncomputable section open HahnSeries IntermediateField AlgebraicCurve namespace ModularCurve section Spec variable {L : Type*} [Field L] [Algebra ℚ L] (A : ValuationSubring L) variable {k : Type*} [Field k] (π : A →+* k) (N : ℕ) def IsPlaceReductionAlong (r : Place L (laurentBaseChange L (modularFunctionFieldFull N)) → Place k (modularFunctionFieldFullC k N)) : Prop := (∀ P, (r P).deg = P.deg) ∧ ∀ (y : LaurentSeries A) (hy : coeffMap A.subtype y ∈ laurentBaseChange L (modularFunctionFieldFull N)) (hyk : coeffMap π y ∈ modularFunctionFieldFullC k N), coeffMap π y ≠ 0 → ∀ D : Divisor L (laurentBaseChange L (modularFunctionFieldFull N)), (∀ P, D P = P.ord (⟨coeffMap A.subtype y, hy⟩ : laurentBaseChange L (modularFunctionFieldFull N))) → ∀ Q, Finsupp.mapDomain r D Q = Q.ord (⟨coeffMap π y, hyk⟩ : modularFunctionFieldFullC k N) def integralPrincipalDivisors : Set (Divisor L (laurentBaseChange L (modularFunctionFieldFull N))) := {D | ∃ (y : LaurentSeries A) (hy : coeffMap A.subtype y ∈ laurentBaseChange L (modularFunctionFieldFull N)), coeffMap π y ∈ modularFunctionFieldFullC k N ∧ coeffMap π y ≠ 0 ∧ ∀ P, D P = P.ord (⟨coeffMap A.subtype y, hy⟩ : laurentBaseChange L (modularFunctionFieldFull N))} def PrincipalGeneratedByIntegral : Prop := Divisor.principal (K := L) (F := laurentBaseChange L (modularFunctionFieldFull N)) ≤ AddSubgroup.closure (integralPrincipalDivisors A π N) def ReductionInputsAlong : Prop := ∃ r, IsPlaceReductionAlong A π N r ∧ PrincipalGeneratedByIntegral A π N end Spec section SpecLemmas variable {L : Type*} [Field L] [Algebra ℚ L] {A : ValuationSubring L} variable {k : Type*} [Field k] {π : A →+* k} {N : ℕ} variable {r : Place L (laurentBaseChange L (modularFunctionFieldFull N)) → Place k (modularFunctionFieldFullC k N)} theorem IsPlaceReductionAlong.deg_eq (hr : IsPlaceReductionAlong A π N r) (P : Place L (laurentBaseChange L (modularFunctionFieldFull N))) : (r P).deg = P.deg := hr.1 P theorem IsPlaceReductionAlong.isPrincipal_mapDomain (hr : IsPlaceReductionAlong A π N r) {D : Divisor L (laurentBaseChange L (modularFunctionFieldFull N))} (hD : D ∈ integralPrincipalDivisors A π N) : Divisor.IsPrincipal (Finsupp.mapDomain r D) := by obtain ⟨y, hy, hyk, hne, hDy⟩ := hD refine ⟨⟨coeffMap π y, hyk⟩, fun h => hne (congrArg Subtype.val h), fun Q => ?_⟩ exact hr.2 y hy hyk hne D hDy Q theorem degree_mapDomain_of_deg_eq (hdeg : ∀ P, (r P).deg = P.deg) (D : Divisor L (laurentBaseChange L (modularFunctionFieldFull N))) : Divisor.degree (Finsupp.mapDomain r D) = Divisor.degree D := by induction D using Finsupp.induction with | zero => simp | single_add P n D _ _ ih => rw [Finsupp.mapDomain_add, map_add, map_add, ih, Finsupp.mapDomain_single, Divisor.degree_single, Divisor.degree_single, hdeg] theorem mapDomain_mem_degZero_of_deg_eq (hdeg : ∀ P, (r P).deg = P.deg) {D : Divisor L (laurentBaseChange L (modularFunctionFieldFull N))} (hD : D ∈ Divisor.degZero (K := L) (F := laurentBaseChange L (modularFunctionFieldFull N))) : Finsupp.mapDomain r D ∈ Divisor.degZero (K := k) (F := modularFunctionFieldFullC k N) := by rw [Divisor.mem_degZero] at hD ⊢ rw [degree_mapDomain_of_deg_eq hdeg, hD] theorem IsPlaceReductionAlong.mapDomain_mem_principal (hr : IsPlaceReductionAlong A π N r) (hgen : PrincipalGeneratedByIntegral A π N) {D : Divisor L (laurentBaseChange L (modularFunctionFieldFull N))} (hD : D ∈ Divisor.principal (K := L) (F := laurentBaseChange L (modularFunctionFieldFull N))) : Finsupp.mapDomain r D ∈ Divisor.principal (K := k) (F := modularFunctionFieldFullC k N) := by have hD' := hgen hD clear hD induction hD' using AddSubgroup.closure_induction with | mem E hE => exact hr.isPrincipal_mapDomain hE | zero => rw [Finsupp.mapDomain_zero]; exact AddSubgroup.zero_mem _ | add E E' _ _ hE hE' => rw [Finsupp.mapDomain_add]; exact AddSubgroup.add_mem _ hE hE' | neg E _ hE => rw [← Finsupp.mapDomain.addMonoidHom_apply, map_neg, Finsupp.mapDomain.addMonoidHom_apply] exact AddSubgroup.neg_mem _ hE end SpecLemmas section Descent variable {L : Type*} [Field L] [Algebra ℚ L] {A : ValuationSubring L} variable {k : Type*} [Field k] {π : A →+* k} {N : ℕ} variable (r : Place L (laurentBaseChange L (modularFunctionFieldFull N)) → Place k (modularFunctionFieldFullC k N)) def reductionDivAlong : Divisor L (laurentBaseChange L (modularFunctionFieldFull N)) →+ Divisor k (modularFunctionFieldFullC k N) := Finsupp.mapDomain.addMonoidHom r @[simp] theorem reductionDivAlong_apply (D : Divisor L (laurentBaseChange L (modularFunctionFieldFull N))) : reductionDivAlong r D = Finsupp.mapDomain r D := rfl theorem reductionDivAlong_single (P : Place L (laurentBaseChange L (modularFunctionFieldFull N))) (n : ℤ) : reductionDivAlong r (Finsupp.single P n) = Finsupp.single (r P) n := Finsupp.mapDomain_single def reductionDegZeroAlong (hdeg : ∀ P, (r P).deg = P.deg) : Divisor.degZero (K := L) (F := laurentBaseChange L (modularFunctionFieldFull N)) →+ Divisor.degZero (K := k) (F := modularFunctionFieldFullC k N) := ((reductionDivAlong r).domRestrict _).codRestrict _ fun D => mapDomain_mem_degZero_of_deg_eq hdeg D.2 @[simp] theorem coe_reductionDegZeroAlong (hdeg : ∀ P, (r P).deg = P.deg) (D : Divisor.degZero (K := L) (F := laurentBaseChange L (modularFunctionFieldFull N))) : (reductionDegZeroAlong r hdeg D : Divisor k (modularFunctionFieldFullC k N)) = Finsupp.mapDomain r (D : Divisor L (laurentBaseChange L (modularFunctionFieldFull N))) := rfl def reductionPic0Along (hr : IsPlaceReductionAlong A π N r) (hgen : PrincipalGeneratedByIntegral A π N) : Pic0 L (laurentBaseChange L (modularFunctionFieldFull N)) →+ JZeroC k N := QuotientAddGroup.map _ _ (reductionDegZeroAlong r hr.1) (by rintro ⟨D, hD0⟩ hD simp only [AddSubgroup.mem_addSubgroupOf] at hD ⊢ exact hr.mapDomain_mem_principal hgen hD) theorem reductionPic0Along_mk (hr : IsPlaceReductionAlong A π N r) (hgen : PrincipalGeneratedByIntegral A π N) (D : Divisor.degZero (K := L) (F := laurentBaseChange L (modularFunctionFieldFull N))) : reductionPic0Along r hr hgen (Pic0.mk D) = Pic0.mk (reductionDegZeroAlong r hr.1 D) := rfl end Descent section Total variable {L : Type*} [Field L] [Algebra ℚ L] (A : ValuationSubring L) variable {k : Type*} [Field k] (π : A →+* k) (N : ℕ) open Classical in def reductionAlong : Pic0 L (laurentBaseChange L (modularFunctionFieldFull N)) →+ JZeroC k N := if h : ReductionInputsAlong A π N then reductionPic0Along h.choose h.choose_spec.1 h.choose_spec.2 else 0 variable {A π N} theorem reductionAlong_eq (h : ReductionInputsAlong A π N) : reductionAlong A π N = reductionPic0Along h.choose h.choose_spec.1 h.choose_spec.2 := by rw [reductionAlong, dif_pos h] theorem reductionAlong_mk (h : ReductionInputsAlong A π N) (D : Divisor.degZero (K := L) (F := laurentBaseChange L (modularFunctionFieldFull N))) : reductionAlong A π N (Pic0.mk D) = Pic0.mk (reductionDegZeroAlong h.choose h.choose_spec.1.1 D) := by rw [reductionAlong_eq h] rfl theorem reductionAlong_of_not (h : ¬ ReductionInputsAlong A π N) : reductionAlong A π N = 0 := by rw [reductionAlong, dif_neg h] end Total section CharL set_option synthInstance.maxHeartbeats 400000 variable (A : ValuationSubring (AlgebraicClosure ℚ)) (N : ℕ) abbrev IsPlaceReductionModL (r : Place (AlgebraicClosure ℚ) (modularFunctionFieldBar N) → Place (IsLocalRing.ResidueField A) (modularFunctionFieldFullC (IsLocalRing.ResidueField A) N)) : Prop := IsPlaceReductionAlong A (IsLocalRing.residue A) N r abbrev ReductionInputsModL : Prop := ReductionInputsAlong A (IsLocalRing.residue A) N variable {A N} in def placeReductionModL (h : ReductionInputsModL A N) : Place (AlgebraicClosure ℚ) (modularFunctionFieldBar N) → Place (IsLocalRing.ResidueField A) (modularFunctionFieldFullC (IsLocalRing.ResidueField A) N) := h.choose variable {A N} in theorem isPlaceReductionModL_placeReductionModL (h : ReductionInputsModL A N) : IsPlaceReductionModL A N (placeReductionModL h) := h.choose_spec.1 abbrev reductionModL : JZero N →+ JZeroC (IsLocalRing.ResidueField A) N := reductionAlong A (IsLocalRing.residue A) N variable {A N} in theorem reductionModL_mk (h : ReductionInputsModL A N) (D : Divisor.degZero (K := AlgebraicClosure ℚ) (F := modularFunctionFieldBar N)) : reductionModL A N (Pic0.mk D) = Pic0.mk (reductionDegZeroAlong (placeReductionModL h) (isPlaceReductionModL_placeReductionModL h).1 D) := reductionAlong_mk h D variable {A N} in theorem reductionModL_of_not (h : ¬ ReductionInputsModL A N) : reductionModL A N = 0 := reductionAlong_of_not h end CharL section Uniqueness variable {L : Type*} [Field L] [Algebra ℚ L] {A : ValuationSubring L} variable {k : Type*} [Field k] {π : A →+* k} {N : ℕ} private theorem int_eq_zero_of_forall_dvd {a : ℤ} (h : ∀ n : ℕ, n ≠ 0 → (n : ℤ) ∣ a) : a = 0 := Int.eq_zero_of_dvd_of_natAbs_lt_natAbs (h (a.natAbs + 1) (Nat.succ_ne_zero _)) (by rw [Int.natAbs_natCast]; exact Nat.lt_succ_self _) theorem IsPlaceReductionAlong.eq_or_const_of_agree {r₁ r₂ : Place L (laurentBaseChange L (modularFunctionFieldFull N)) → Place k (modularFunctionFieldFullC k N)} (hgen : PrincipalGeneratedByIntegral A π N) (hagree : ∀ D ∈ integralPrincipalDivisors A π N, Finsupp.mapDomain r₁ D = Finsupp.mapDomain r₂ D) (hdeg : ∀ P : Place L (laurentBaseChange L (modularFunctionFieldFull N)), P.deg = 1) (hdiv : ∀ n : ℕ, n ≠ 0 → ∀ x : Pic0 L (laurentBaseChange L (modularFunctionFieldFull N)), ∃ y : Pic0 L (laurentBaseChange L (modularFunctionFieldFull N)), n • y = x) : r₁ = r₂ ∨ ∀ P Q, r₁ P = r₁ Q := by classical set δ : Divisor L (laurentBaseChange L (modularFunctionFieldFull N)) →+ Divisor k (modularFunctionFieldFullC k N) := Finsupp.mapDomain.addMonoidHom r₁ - Finsupp.mapDomain.addMonoidHom r₂ with hδ have hδapp : ∀ D, δ D = Finsupp.mapDomain r₁ D - Finsupp.mapDomain r₂ D := fun D => rfl have hδprin : ∀ D ∈ Divisor.principal (K := L) (F := laurentBaseChange L (modularFunctionFieldFull N)), δ D = 0 := by intro D hD have hD' := hgen hD clear hD induction hD' using AddSubgroup.closure_induction with | mem E hE => rw [hδapp, hagree E hE, sub_self] | zero => exact map_zero δ | add E E' _ _ hE hE' => rw [map_add, hE, hE', add_zero] | neg E _ hE => rw [map_neg, hE, neg_zero] have hδdeg0 : ∀ D ∈ Divisor.degZero (K := L) (F := laurentBaseChange L (modularFunctionFieldFull N)), δ D = 0 := by intro D hD ext Q rw [Finsupp.zero_apply] refine int_eq_zero_of_forall_dvd fun n hn => ?_ obtain ⟨y, hy⟩ := hdiv n hn (Pic0.mk ⟨D, hD⟩) obtain ⟨E, rfl⟩ := Pic0.mk_surjective y have hmem : ((⟨D, hD⟩ : Divisor.degZero (K := L) (F := laurentBaseChange L (modularFunctionFieldFull N))) - n • E : Divisor.degZero (K := L) (F := laurentBaseChange L (modularFunctionFieldFull N))) ∈ (Divisor.principal (K := L) (F := laurentBaseChange L (modularFunctionFieldFull N))).addSubgroupOf (Divisor.degZero (K := L) (F := laurentBaseChange L (modularFunctionFieldFull N))) := by rw [← QuotientAddGroup.eq_iff_sub_mem, QuotientAddGroup.mk_nsmul] exact hy.symm rw [AddSubgroup.mem_addSubgroupOf, AddSubgroupClass.coe_sub, AddSubgroupClass.coe_nsmul] at hmem have h0 := hδprin _ hmem rw [map_sub, map_nsmul, sub_eq_zero] at h0 refine ⟨δ (E : Divisor L (laurentBaseChange L (modularFunctionFieldFull N))) Q, ?_⟩ rw [h0, Finsupp.smul_apply, nsmul_eq_mul] have hconst : ∀ P Q : Place L (laurentBaseChange L (modularFunctionFieldFull N)), Finsupp.single (r₁ P) (1 : ℤ) - Finsupp.single (r₂ P) 1 = Finsupp.single (r₁ Q) 1 - Finsupp.single (r₂ Q) 1 := by intro P Q have hPQ : Finsupp.single P (1 : ℤ) - Finsupp.single Q 1 ∈ Divisor.degZero (K := L) (F := laurentBaseChange L (modularFunctionFieldFull N)) := by rw [Divisor.mem_degZero, map_sub, Divisor.degree_single, Divisor.degree_single, hdeg, hdeg, sub_self] have h := hδdeg0 _ hPQ rw [hδapp, Finsupp.mapDomain_sub, Finsupp.mapDomain_sub, Finsupp.mapDomain_single, Finsupp.mapDomain_single, Finsupp.mapDomain_single, Finsupp.mapDomain_single, sub_eq_zero] at h exact sub_eq_sub_iff_sub_eq_sub.mpr h rw [or_iff_not_imp_left] intro hne obtain ⟨P₀, hP₀⟩ : ∃ P₀, r₁ P₀ ≠ r₂ P₀ := by by_contra hall push Not at hall exact hne (funext hall) have hr₁const : ∀ Q, r₁ Q = r₁ P₀ := by intro Q have h := congrArg (fun E => E (r₁ P₀)) (hconst Q P₀) simp only [Finsupp.sub_apply, Finsupp.single_apply, if_neg (Ne.symm hP₀)] at h by_contra hQ rw [if_neg hQ] at h split_ifs at h <;> omega exact fun P Q => (hr₁const P).trans (hr₁const Q).symm theorem IsPlaceReductionAlong.eq_of_agree {r₁ r₂ : Place L (laurentBaseChange L (modularFunctionFieldFull N)) → Place k (modularFunctionFieldFullC k N)} (hgen : PrincipalGeneratedByIntegral A π N) (hagree : ∀ D ∈ integralPrincipalDivisors A π N, Finsupp.mapDomain r₁ D = Finsupp.mapDomain r₂ D) (hdeg : ∀ P : Place L (laurentBaseChange L (modularFunctionFieldFull N)), P.deg = 1) (hprin0 : ∀ D ∈ Divisor.principal (K := L) (F := laurentBaseChange L (modularFunctionFieldFull N)), Divisor.degree D = 0) (hdiv : ∀ n : ℕ, n ≠ 0 → ∀ x : Pic0 L (laurentBaseChange L (modularFunctionFieldFull N)), ∃ y : Pic0 L (laurentBaseChange L (modularFunctionFieldFull N)), n • y = x) (hnc : ∃ D ∈ Divisor.principal (K := L) (F := laurentBaseChange L (modularFunctionFieldFull N)), Finsupp.mapDomain r₁ D ≠ 0) : r₁ = r₂ := by rcases IsPlaceReductionAlong.eq_or_const_of_agree hgen hagree hdeg hdiv with h | hconst · exact h obtain ⟨D, hDprin, hDne⟩ := hnc obtain ⟨P₀⟩ : Nonempty (Place L (laurentBaseChange L (modularFunctionFieldFull N))) := by by_contra hempty rw [not_nonempty_iff] at hempty exact hDne (by rw [Subsingleton.elim D 0, Finsupp.mapDomain_zero]) exfalso apply hDne have hmapconst : ∀ D : Divisor L (laurentBaseChange L (modularFunctionFieldFull N)), Finsupp.mapDomain r₁ D = Finsupp.single (r₁ P₀) (Divisor.degree D) := by intro D induction D using Finsupp.induction with | zero => simp | single_add P n D _ _ ih => rw [Finsupp.mapDomain_add, ih, Finsupp.mapDomain_single, hconst P P₀, map_add, Divisor.degree_single, hdeg, Nat.cast_one, mul_one, ← Finsupp.single_add, add_comm] rw [hmapconst D, hprin0 D hDprin, Finsupp.single_zero] end Uniqueness end ModularCurve end
Statements phrased using this module (122)
- Divisor specialisation preserves degree zero and principality
ModularCurve.CharPModel.FibreModel.spDiv_preservesPrincipal_of_reductionInputs313 below · depth 9 - Reduction mod ℓ is injective on prime-to-ℓ torsion of J₀(N)
ModularCurve.eq_zero_of_reductionModL_eq_zero_of_nsmul_eq_zero975 below · depth 9 - Reduction inputs modulo ℓ exist when ℓ∤ N
ModularCurve.reductionInputsModL_of_not_dvd740 below · depth 9 - Eichler–Shimura congruence for the reduction map on J₀(N)
ModularCurve.reductionModL_heckeOperatorBar767 below · depth 9 - Reduction intertwines arithmetic Frobenius with geometric Frobenius on J₀(N)
ModularCurve.reductionModL_smul_of_isFrobeniusAt756 below · depth 9 - Reduction mod ℓ on J₀(N) equals the constructed specialisation
ModularCurve.CharPModel.FibreModel.reductionModL_eq_pic0Congr_spPic0812 below · depth 10 - Reduction of integral q-expansions when ℓ ∤ N
ModularCurve.coeffMap_residue_mem_modularFunctionFieldFullC_of_not_dvd176 below · depth 10 - Good constant reduction of X₀(N) at ℓ ∤ N
ModularCurve.exists_constantReduction_isGood_isPlaceReductionModL738 below · depth 10 - Two-exponent finite flat model of Eisenstein quotient torsion
ModularCurve.exists_le_finiteFlat_model_eisensteinQuotient_torsion_reductionModL_of_ne_two2,005 below · depth 10 - Kronecker congruence at level N, norm form
ModularCurve.kroneckerCongruence_norm_heckeBetaBar151 below · depth 10 - Reduction of places equals the fibre-model specialisation map
ModularCurve.CharPModel.FibreModel.placeReductionModL_eq_spPlace810 below · depth 11 - Finite flat Hopf model of the ℓ^k-torsion of J₀(p)
ModularCurve.exists_finiteFlat_model_jZero_torsion_reductionModL_eq_zero1,771 below · depth 11 - Lifting ℓ-power torsion in the Eisenstein kernel through reduction
ModularCurve.exists_le_mem_eisensteinKernelSubmodule_torsionBy_reductionModL_eq1,884 below · depth 11 - Geometric fibre count for the 2-primary Eisenstein torsion sheaf
ModularCurve.hasJZeroNeronTorsionSheaf_two_fibreCount_of_dvd_eisensteinNumerator_v54,074 below · depth 11 - Linear growth of the toric defect at 2
ModularCurve.jZeroNeronTorsionSheaf_growth_two_v53,213 below · depth 11 - Inertia acts trivially after reduction of Pic⁰
ModularCurve.reductionModL_smul_eq_self_of_mem_inertiaSubgroupIn755 below · depth 11 - Prime-to-ℓ torsion lifts along reduction mod ℓ
ModularCurve.surjOn_reductionModL_torsion_of_not_dvd1,760 below · depth 11 - Transported specialisation is a reduction of places mod ℓ
ModularCurve.CharPModel.FibreModel.isPlaceReductionModL_congr_spPlace299 below · depth 12 - Place specialisation refines reduction mod ℓ on J₀(N)
ModularCurve.PlaceSpecialization.reductionModL_eq_zero_of_spPic0_eq_zero_and_isPlaceReductionModL_sp937 below · depth 12 - Specialization on Pic⁰ agrees with reduction mod ℓ
ModularCurve.PlaceSpecialization.spPic0_eq_reductionModL937 below · depth 12 - Abelian scheme model of J₀(p) over ℤ_{(ℓ)}
ModularCurve.exists_abelianSchemePropertyBundle_model_jZero1,730 below · depth 12 - Relative Jacobian of X₀(p) over ℤ_{(ℓ)}
ModularCurve.exists_relJacobian_jZero1,823 below · depth 12 - Two-adic Eisenstein torsion sheaf pinned to reduction mod 2
ModularCurve.hasJZeroNeronTorsionSheaf_two_residue_iff_reductionModL_of_dvd_eisensteinNumerator_v54,071 below · depth 12 - Toric and mod-2 reduction bound for I^m-torsion of J₀(p)
ModularCurve.natCard_torsionBySet_pow_two_le_natCard_jZeroToricTorsion_inf_mul_natCard_map_reductionModL_mul_pow3,208 below · depth 12 - Reduction mod ℓ commutes with T_q for q≠ℓ
ModularCurve.reductionModL_heckeOperatorBar_of_ne938 below · depth 12 - Igusa chart algebras inside a fibre model with cusp chart
ModularCurve.IgusaScheme.exists_fibreModel_cuspChart_of_chartAlg743 below · depth 13 - Igusa's model of X₀(N₀) over ℤ₍ₚ₎, pinned
ModularCurve.IgusaScheme.exists_finiteMapData_ratCurveModel_igusaTo1,159 below · depth 13 - Reduction mod ℓ acts coordinatewise on j and j_N
ModularCurve.IsPlaceReductionModL.coordinate_clauses268 below · depth 13 - Mod-2 residue dictionary for the Eisenstein torsion core
ModularCurve.JZeroNeronIdentityComponentGood.exists_jZeroNeronPrimaryTorsionCore_two_residue_iff_reductionModL824 below · depth 13 - Bound for I^m-torsion in the kernel of reduction above 2
ModularCurve.exists_natCard_torsionBySet_pow_inf_ker_reductionModL_le_natCard_heckeLatticeAlgebra_quotient_two_mul_pow2,553 below · depth 13 - Relative Jacobian of X₀(p) over ℤ_{(ℓ)}, Abel–Jacobi normalised
ModularCurve.exists_pts_heckeRingAction_relJacobian_jZero_of_representsRelSubPic_of_ratCurveModel_of_abelJacobi1,167 below · depth 13 - Relative Jacobian of X₀(p) over ℤ_{(ℓ)} from finite-map data
ModularCurve.exists_relJacobian_jZero_of_smoothProperModel_of_finiteMapData_of_ratCurveModel1,527 below · depth 13 - Smooth proper ℤ_{(ℓ)}-model of X₀(p) with finite-map data
ModularCurve.exists_smoothProperModel_jZero_relCurve_finiteMapData_ratCurveModel1,158 below · depth 13 - Package fibre dictionary and centre-pinned model read equal places
ModularCurve.DRModelPackageLevel.pointEquivPlace_efib_inv_eq_congrRingEquiv_pointEquivPlace_of_finChart_centrePin126 below · depth 14 - Centre pins for the chart-pinned generic fibre of the Igusa scheme
ModularCurve.IgusaScheme.coeffEmb_sub_mem_nonunits_pointEquivPlace_ofGenerator_of_chartPin0 below · depth 14 - Base change to ℚ̄ of the two Igusa chart algebras
ModularCurve.IgusaScheme.exists_algEquiv_tensor_chartAlg_chartRing1 below · depth 14 - Galois-compatible generic fibre isomorphism for the Igusa scheme
ModularCurve.IgusaScheme.exists_genericFibreIso_chartPin_and_galoisCompat0 below · depth 14 - Generic fibre of the Igusa scheme is the curve model
ModularCurve.IgusaScheme.exists_genericFibreIso_chartPin_and_galoisCompat_of_algEquiv_chartAlg_chartRing0 below · depth 14 - Centre pins on special fibres of the Igusa scheme
ModularCurve.IgusaScheme.exists_spBase_and_cuspChart_centrePin_of_genericFibre_iso_ofGenerator815 below · depth 14 - Geometric integrality of the Igusa scheme over ℤ_{(ℓ)}
ModularCurve.IgusaScheme.geometricallyIntegral_igusaTo848 below · depth 14 - Igusa: the two-chart model of X₀(N) over ℤ_{(ℓ)}
ModularCurve.IgusaScheme.isProper_and_smooth_and_geometricallyIntegral858 below · depth 14 - Reduction of Igusa-scheme points matches the fibre model's specialisation of places
ModularCurve.IgusaScheme.pointReduction_eq_congr_spPlace_of_cuspChart_centrePin191 below · depth 14 - Smoothness of the Igusa model's fibre at ℓ ∤ N
ModularCurve.IgusaScheme.smoothOfRelativeDimension_one_pullback_residue825 below · depth 14 - Hecke-equivariant bounded-kernel map on Eisenstein torsion killed by reduction
ModularCurve.exists_addMonoidHom_inf_ker_reductionModL_eisensteinTorsionBar_heckeLatticeAlgebra_quotient_two_pow_natCard_ker_le2,547 below · depth 14 - Points, reduction and Hecke action on a representing relative Jacobian
ModularCurve.exists_pts_relJacobian_jZero_of_representsRelSubPic_of_ratCurveModel1,162 below · depth 14 - Separatedness pins the reduction of a B-point
ModularCurve.schemeHomOver_residue_eq_ptsSp_reductionModL_of_isSeparated0 below · depth 14 - Residue field of a place of ℚ̄ above ℓ has characteristic ℓ
ValuationSubring.charP_residueField_of_liesOverPrime0 below · depth 14 - ℤ_{(ℓ)} maps into every valuation subring over ℓ
ValuationSubring.exists_ratLocalizedAt_ringHom_of_liesOverPrime1 below · depth 14 - Ordinary eigenvectors dying under reduction span at most a line
CuspForm.IsNewform.finrank_le_one_of_le_reductionKernelSpan_tateModule_jZero_of_isUnit2,269 below · depth 15 - Centre-pinned specialisation of places on the finite j-chart
ModularCurve.CharPModel.FibreModel.placeFullC_eq_congr_spPlace_of_finChart_centrePin186 below · depth 15 - Centre-pinned specialisation of places on the pole chart at a cusp
ModularCurve.CharPModel.FibreModel.placeFullC_eq_congr_spPlace_of_infChart_centrePin_of_mem_maximalIdeal184 below · depth 15 - Geometric chart rings spanned by the integral chart algebras
ModularCurve.IgusaScheme.chartRing_le_span_coeffEmb_chartAlg0 below · depth 15 - Geometric generic fibre of the Igusa scheme as a curve model
ModularCurve.IgusaScheme.exists_curveModel_genericFibre_iso_and_galoisCompat152 below · depth 15 - Igusa chart rings inside a cusp-chart fibre model
ModularCurve.IgusaScheme.exists_fibreModel_cuspChart_of_chartAlg_of_lift743 below · depth 15 - A ℤ_{(ℓ)}-point of the Igusa scheme
ModularCurve.IgusaScheme.nonempty_schemeHomOver_id_igusaTo3 below · depth 15 - Smoothness of the j-finite Igusa chart over k
ModularCurve.IgusaScheme.smoothOfRelativeDimension_one_pullback_chartFin_residue820 below · depth 15 - Smoothness of the Igusa pole chart over k
ModularCurve.IgusaScheme.smoothOfRelativeDimension_one_pullback_chartInf_residue820 below · depth 15 - Smoothness of the Igusa scheme over characteristic-ℓ fields
ModularCurve.IgusaScheme.smoothOfRelativeDimension_one_pullback_of_charP827 below · depth 15 - Smoothness of the Igusa fibre from its two charts
ModularCurve.IgusaScheme.smoothOfRelativeDimension_one_pullback_of_chartFin_of_chartInf0 below · depth 15 - Eichler–Shimura relation on a finite flat model of J₀(M)[p]
ModularCurve.exists_finiteFlat_model_jZero_torsion_heckeNilpotent_frobenius_verschiebung_reductionModL1,913 below · depth 15 - Points dictionaries modulo ℓ for the relative Pic⁰ of X₀(p)
ModularCurve.exists_pointsDict_pullback_snd_ratLocalizedAt_of_dRModelPackage_of_representsRelSubPic1,835 below · depth 15 - Good-prime data for relative Pic⁰ of the DR model at ℓ ∤ p
ModularCurve.goodPrime_relativePic0_of_dRModelPackage_of_representsRelSubPic1,837 below · depth 15 - Inertia at q acts by n on the reduction kernel
ModularCurve.inertia_smul_eq_nsmul_of_mem_heckeTorsion_span_sup_of_reductionModL_eq_zero1,977 below · depth 15 - Reduction mod ℓ on modular divisor classes is surjective
ModularCurve.reductionModL_surjective917 below · depth 15 - Galois-compatible generic fibre of the Igusa scheme at ̄ j
ModularCurve.IgusaScheme.exists_genericFibre_iso_ofGenerator_jBar_and_galoisCompat3 below · depth 16 - Fibres of the Igusa scheme are geometrically connected
ModularCurve.IgusaScheme.geometricallyConnected_pullback_snd_igusaTo131 below · depth 16 - A ℤ_{(ℓ)}-point of the Igusa pole chart
ModularCurve.IgusaScheme.nonempty_algHom_chartAlgInf2 below · depth 16 - Reductions of the Igusa chart algebra span the characteristic-ℓ chart ring
ModularCurve.IgusaScheme.piFin_image_spans_chartAlg182 below · depth 16 - Pole chart ring spanned by reductions of the integral chart algebra
ModularCurve.IgusaScheme.piInf_image_spans_chartAlg182 below · depth 16 - Eichler–Shimura relation on a finite flat model of J₀(M)[p]
ModularCurve.exists_finiteFlat_model_jZero_torsion_heckeNilpotent_eichlerShimuraDual_reductionModL1,909 below · depth 16 - Good-reduction specialisation of J₀(M) above ℓ∤ M
ModularCurve.exists_jZeroGoodReductionSpecialization_of_not_dvd1,042 below · depth 16 - Inertia acts cyclotomically on reducing T_λ-ordinary λ-power torsion
ModularCurve.inertia_smul_eq_nsmul_of_forall_exists_heckeOperatorBar_pow_apply_eq_of_reductionModL_eq_zero1,923 below · depth 16 - Igusa and Deligne–Rapoport point dictionaries agree through θ_ℚ
ModularCurve.pts_lift_comp_theta_fst_eq_pts_of_dRModelPackage_of_igusaModel209 below · depth 16 - Galois-compatible generic fibre from the chart-ring identifications
ModularCurve.IgusaScheme.exists_genericFibreIso_galoisCompat_of_algEquiv_chartAlg_chartRing0 below · depth 17 - Finite flat model of the Tₚ-bijective part of J₀(M)[p^k]
ModularCurve.exists_finiteFlat_model_jZero_torsion_heckeBijective_frobenius_verschiebung_reductionModL1,909 below · depth 17 - Cyclic generator for the reduced Eisenstein socle at q
ModularCurve.exists_nsmul_generator_heckeTorsion_span_sup_of_reductionModL_eisensteinMaximalIdeal_smul_eq_zero1,051 below · depth 17 - Inertia acts cyclotomically on ordinary λ-torsion reducing to zero
ModularCurve.inertia_smul_eq_nsmul_of_forall_exists_heckeOperatorBar_pow_apply_eq_of_reductionModL_eq_zero_of_ne_two1,924 below · depth 17 - Reduction at ℓ∤ N preserves integrality over ℚ̄[j]
ModularCurve.isIntegral_adjoin_jqModC_coeffMap_residue_of_isIntegral_of_not_dvd748 below · depth 17 - Reduction at ℓ∤ N preserves integrality over the j⁻¹-chart
ModularCurve.isIntegral_adjoin_jqModC_inv_coeffMap_residue_of_isIntegral_of_not_dvd748 below · depth 17 - Cyclotomic q^k-torsion of J₀(N) reduces to zero above q
ModularCurve.reductionModL_eq_zero_of_forall_mem_inertiaSubgroupIn_smul_eq_nsmul_of_ne_two757 below · depth 17 - Reduction kernel forces V=J₀(M)(ℚ̄)[𝔪]
ModularCurve.eq_top_of_sup_ker_reductionModL_eq_top_of_baseChange_equiv_of_isAbsolutelyIrreducible2,133 below · depth 18 - Reduction of places of X₀(N) at ℓ∤ N
ModularCurve.exists_placeReductionModL_mapDomain_eq_ord_of_not_dvd738 below · depth 18 - Kernel of reduction on 𝔪-torsion is a T/𝔪-subspace
ModularCurve.exists_submodule_heckeTorsion_jZero_mem_iff_reductionModL_eq_zero975 below · depth 18 - Rank at most one for 𝔪-torsion modulo the reduction kernel
ModularCurve.finrank_heckeTorsion_jZero_quotient_ker_reductionModL_le_one_of_heckeGen_notMem1,239 below · depth 18 - Uₚ=-wₚ on Pic⁰ of the special fibre
ModularCurve.heckePic0Fibre_eq_neg_fricke_smul_of_prime981 below · depth 18 - Reduced Eisenstein torsion dominates the lattice Hecke quotient
ModularCurve.natCard_heckeLatticeAlgebra_quotient_le_natCard_image_reductionModL_heckeTorsion_span_sup2,221 below · depth 18 - Reduced Eisenstein torsion bounded by lattice Hecke quotient
ModularCurve.natCard_image_reductionModL_heckeTorsion_span_sup_le_natCard_heckeLatticeAlgebra_quotient2,102 below · depth 18 - Copies of ρ̄ in J₀(M)[𝔪] are not killed mod p
ModularCurve.not_le_ker_reductionModL_of_baseChange_equiv_of_isAbsolutelyIrreducible_of_heckeGen_notMem2,126 below · depth 18 - Degree 2g+1 reduced divisor separates rational points and tangents
ModularCurve.exists_mem_riemannRochSpace_mapDomain_embDivisor_sub_notMem237 below · depth 19 - Fricke twist of δ lands in 𝔪-torsion differentials
ModularCurve.pullbackAlong_apply_mem_mTorsionDiffOf_of_mem_heckeTorsion_jZero_of_coe_eq_reductionModL1,021 below · depth 19 - Reduction mod ℓ commutes with the Fricke involution
ModularCurve.reductionModL_frickeInvolutionBar_smul919 below · depth 19 - Residues of an embedding basis span the reduced Riemann–Roch space
ModularCurve.span_residue_eq_riemannRochSpace_of_isEmbBasis_of_isGood273 below · depth 19 - Reduction mod q is onto the q^k-torsion of J₀(N)
ModularCurve.surjOn_reductionModL_torsion_pow1,772 below · depth 19 - Inertia at 2 is of multiplicative type on the reduction kernel
ModularCurve.multiplicativeTypeNat_inf_ker_reductionModL_eisensteinTorsionBar1,972 below · depth 21 - Uniform adapted bases with bounded chordal distortion at p∤ N
ModularCurve.exists_uniform_adapted_basis247 below · depth 22 - Uniform p-window for an embedding basis of X₀(N)
ModularCurve.exists_uniform_window_smul_mem_integers274 below · depth 22 - Inertia at ℓ∤ N acts trivially on prime-to-ℓ torsion of J₀(N)
ModularCurve.smul_eq_self_of_mem_inertiaSubgroupIn_of_nsmul_eq_zero_of_not_dvd979 below · depth 22 - q-expansion principle for constant reductions of X₀(N)
ModularCurve.exists_mem_integers_residue_eq_coeffMap_of_isPlaceReductionModL229 below · depth 23 - Tangent space of the relative Jacobian of X₀(N) at p
ModularCurve.exists_pts_relJacobian_jZero_level_dualNumber_kernel_equiv_addMonoidHom_intLattice_latticeHeckeFamily_integral_of_representsRelSubPic_of_ratCurveModel_of_not_dvd1,563 below · depth 23 - Global 1-forms of the ℤ₍ₚ₎-model versus p-integral cusp forms
ModularCurve.exists_linearEquiv_kaehlerH0_baseChange_intLattice_of_ratCurveModel_of_cuspSection_compat_of_neZero872 below · depth 24 - Integral weight-two cusp forms as relative differentials on the model
ModularCurve.exists_kaehlerH0_coeffMap_diffQExpBar_eq_qExpansion_of_mem_intLattice_of_ratCurveModel_of_cuspSection_compat_of_neZero456 below · depth 25 - Integrality of q-expansions of global 1-forms on a ℤ₍ₚ₎-model
ModularCurve.exists_powerSeries_diffQExpBar_eq_ofPowerSeries_map_of_kaehlerH0_of_ratCurveModel_of_cuspSection_compat_of_neZero349 below · depth 25 - p-saturation of global differentials via q-expansions
ModularCurve.exists_eq_smul_of_diffQExpBar_eq_ofPowerSeries_smul_of_kaehlerH0_of_ratCurveModel_of_cuspSection_compat_of_neZero366 below · depth 26 - Generic restriction of a global 1-form factors through the cusp stalk
ModularCurve.exists_kaehlerDifferential_stalk_and_ringHom_res_eq_mapOfRingHom_cuspSection_of_ratCurveModel_compat_of_neZero2 below · depth 26 - p-power multiple of an integral weight-2 cusp form as a differential
ModularCurve.exists_pow_smul_kaehlerH0_coeffMap_diffQExpBar_eq_qExpansion_of_mem_intLattice_of_ratCurveModel_of_cuspSection_compat_of_neZero322 below · depth 26 - Integral q-expansions of germs at the cusp of a ℤ₍ₚ₎-model
ModularCurve.exists_powerSeries_map_eq_ffEquiv_symm_stalkMap_stalkSpecializes_cuspSection_of_ratCurveModel_compat_of_neZero346 below · depth 26 - Integral q-parameter at the cusp of a ℤ₍ₚ₎-model
ModularCurve.exists_algHom_retraction_param_stalk_cuspSection_ffEquiv_symm_eq_ofPowerSeries_isUnit_coeff_one_of_ratCurveModel_compat_of_neZero342 below · depth 27 - Germs at the cusp with p-divisible q-expansion are p-divisible
ModularCurve.exists_eq_germ_mul_of_ffEquiv_symm_stalkMap_stalkSpecializes_eq_ofPowerSeries_smul_cuspSection_of_ratCurveModel_compat_of_neZero3 below · depth 27 - Invertibility of j at generic-fibre points over the cusp
ModularCurve.exists_isUnit_stalk_ffEquiv_symm_stalkMap_genericPoint_eq_jq_of_specializes_cuspSection_of_ratCurveModel_compat_of_neZero288 below · depth 28 - Cusp parameter has q-expansion 1/j up to a unit
ModularCurve.exists_isUnit_stalk_ffEquiv_symm_stalkMap_mul_stalkSpecializes_eq_jq_inv_cuspSection_of_ratCurveModel_compat_of_neZero8 below · depth 28 - Modular invariant j as a unit along the special fibre
ModularCurve.exists_notMem_span_germ_and_ffEquiv_symm_stalkMap_stalkSpecializes_eq_jq_mul_cuspSection_of_ratCurveModel_compat_of_neZero323 below · depth 28 - Reduction mod ℓ carries the cusp ∞ to the q-adic place
ModularCurve.IsPlaceReductionModL.apply_cuspInftyBar_eq_and_eq_cuspInftyBar_of_apply_eq_of_ord_ne_zero276 below · depth 29 - Uniqueness of the place over the cusp ∞ after base change
ModularCurve.eq_cuspInftyBar_of_comap_toSubring_eq_cuspInftyFull0 below · depth 29 - Vertical order of j at the cusp section's special point
ModularCurve.exists_int_notMem_span_germ_and_ffEquiv_symm_stalkMap_stalkSpecializes_eq_jq_mul_zpow_mul_cuspSection_of_ratCurveModel_compat_of_neZero4 below · depth 29 - Valuation-ring lift of a ℚ̄-point along a specialisation
ModularCurve.exists_liesOverPrime_schemeHomOver_comp_eq_base_closedPoint_eq_of_specializes0 below · depth 29 - No pole of j along the special fibre at the cusp
ModularCurve.false_of_ffEquiv_symm_stalkMap_stalkSpecializes_eq_jq_mul_pow_mul_cuspSection_of_ratCurveModel_compat_of_neZero309 below · depth 29 - No zero of j along the special fibre
ModularCurve.false_of_pow_mul_ffEquiv_symm_stalkMap_stalkSpecializes_eq_jq_mul_cuspSection_of_ratCurveModel_compat_of_neZero319 below · depth 29 - Finitely many zeros and poles of ̄ j on the special fibre
ModularCurve.false_of_infinite_setOf_ord_pointEquivPlace_jqModC_ne_zero_cuspSection_of_ratCurveModel_compat_of_neZero113 below · depth 30 - An open set containing infinitely many κ-points of the special fibre
ModularCurve.infinite_setOf_base_closedPoint_mem_of_fromSpecStalk_span_germ_mem_cuspSection_of_ratCurveModel_compat_of_neZero47 below · depth 30 - Pole of ̄ j at the reduction of an A-point
ModularCurve.ord_apply_pointEquivPlace_jqModC_neg_of_stalkClosedPointTo_mem_maximalIdeal_of_ffEquiv_symm_stalkMap_eq_jq_inv_cuspSection_of_ratCurveModel_compat_of_neZero277 below · depth 30 - An A-point with j∈mathfrak m_A reduces to a zero of ̄ j
ModularCurve.ord_apply_pointEquivPlace_jqModC_pos_of_stalkClosedPointTo_mem_maximalIdeal_of_ffEquiv_symm_stalkMap_eq_jq_cuspSection_of_ratCurveModel_compat_of_neZero287 below · depth 30 - Geometric function field identification is base change of the rational one
ModularCurve.coe_ffEquiv_symm_stalkMap_eq_coeffEmb_ffEquiv_symm_of_galoisCompat_of_placeCompat44 below · depth 31