import Definitions.Def_ModularCurve_HeckeOperator import Definitions.Def_ModularCurve_CharLFrobeniusGeomLevel import Definitions.Def_HeckeGalois_EichlerShimura set_option autoImplicit false namespace ModularCurve open AlgebraicCurve set_option maxHeartbeats 800000 in structure PlaceSpecialization (A : ValuationSubring (AlgebraicClosure ℚ)) (ℓ N : ℕ) [Fact ℓ.Prime] [NeZero N] (data : ModularPolynomialData ℓ) (hKr : KroneckerCongruence ℓ data) (k : Type*) [Field k] [CharP k ℓ] (red : A →+* k) (hα : HeckeAlphaBarIntegral (AlgebraicClosure ℚ) N ℓ) (hβ : HeckeBetaBarIntegral (AlgebraicClosure ℚ) N ℓ) where sp : Place (AlgebraicClosure ℚ) (modularFunctionFieldBar N) → Place k (modularFunctionFieldC k N) spPic0 : JZero N →+ Pic0 k (modularFunctionFieldC k N) d0_j : ∀ w : Place (AlgebraicClosure ℚ) (modularFunctionFieldBar N), ∀ a : A, 0 < w.ord (⟨coeffEmb (AlgebraicClosure ℚ) jq, coeffEmb_mem_laurentBaseChange (AlgebraicClosure ℚ) (modularFunctionField_le_full N (jq_mem N))⟩ - algebraMap (AlgebraicClosure ℚ) (modularFunctionFieldBar N) (a : AlgebraicClosure ℚ)) → 0 < (sp w).ord (⟨jqModC k, jqModC_mem k N⟩ - algebraMap k (modularFunctionFieldC k N) (red a)) d0_j_pole : ∀ w : Place (AlgebraicClosure ℚ) (modularFunctionFieldBar N), (∀ a : A, w.ord (⟨coeffEmb (AlgebraicClosure ℚ) jq, coeffEmb_mem_laurentBaseChange (AlgebraicClosure ℚ) (modularFunctionField_le_full N (jq_mem N))⟩ - algebraMap (AlgebraicClosure ℚ) (modularFunctionFieldBar N) (a : AlgebraicClosure ℚ)) ≤ 0) → (sp w).ord (⟨jqModC k, jqModC_mem k N⟩ : modularFunctionFieldC k N) < 0 d0_jN : ∀ w : Place (AlgebraicClosure ℚ) (modularFunctionFieldBar N), ∀ a : A, 0 < w.ord (⟨coeffEmb (AlgebraicClosure ℚ) (qExpand ℚ N jq), coeffEmb_mem_laurentBaseChange (AlgebraicClosure ℚ) (jqd_mem_full N (dvd_refl N))⟩ - algebraMap (AlgebraicClosure ℚ) (modularFunctionFieldBar N) (a : AlgebraicClosure ℚ)) → 0 < (sp w).ord (⟨jqNModC k N, jqNModC_mem k N⟩ - algebraMap k (modularFunctionFieldC k N) (red a)) d0_jN_pole : ∀ w : Place (AlgebraicClosure ℚ) (modularFunctionFieldBar N), (∀ a : A, w.ord (⟨coeffEmb (AlgebraicClosure ℚ) (qExpand ℚ N jq), coeffEmb_mem_laurentBaseChange (AlgebraicClosure ℚ) (jqd_mem_full N (dvd_refl N))⟩ - algebraMap (AlgebraicClosure ℚ) (modularFunctionFieldBar N) (a : AlgebraicClosure ℚ)) ≤ 0) → (sp w).ord (⟨jqNModC k N, jqNModC_mem k N⟩ : modularFunctionFieldC k N) < 0 d1 : ∀ W : Place (AlgebraicClosure ℚ) (laurentBaseChange (AlgebraicClosure ℚ) (modularFunctionFieldFull (N * ℓ))), sp (W.restrictAlong (heckeAlphaBar (AlgebraicClosure ℚ) N ℓ) hα) = frobOnPlacesGeomLevel k N data hKr (sp (W.restrictAlong (heckeBetaBar (AlgebraicClosure ℚ) N ℓ) hβ)) ∨ frobOnPlacesGeomLevel k N data hKr (sp (W.restrictAlong (heckeAlphaBar (AlgebraicClosure ℚ) N ℓ) hα)) = sp (W.restrictAlong (heckeBetaBar (AlgebraicClosure ℚ) N ℓ) hβ) d2 : ∀ v : Place (AlgebraicClosure ℚ) (modularFunctionFieldBar N), frobOnPlacesGeomLevel k N data hKr (frobOnPlacesGeomLevel k N data hKr (sp v)) ≠ sp v → ∃ W₀ : Place (AlgebraicClosure ℚ) (laurentBaseChange (AlgebraicClosure ℚ) (modularFunctionFieldFull (N * ℓ))), W₀.restrictAlong (heckeBetaBar (AlgebraicClosure ℚ) N ℓ) hβ = v ∧ sp (W₀.restrictAlong (heckeAlphaBar (AlgebraicClosure ℚ) N ℓ) hα) = frobOnPlacesGeomLevel k N data hKr (sp v) ∧ W₀.ramificationIndexAlong (heckeBetaBar (AlgebraicClosure ℚ) N ℓ) = 1 ∧ ∀ W : Place (AlgebraicClosure ℚ) (laurentBaseChange (AlgebraicClosure ℚ) (modularFunctionFieldFull (N * ℓ))), W.restrictAlong (heckeBetaBar (AlgebraicClosure ℚ) N ℓ) hβ = v → sp (W.restrictAlong (heckeAlphaBar (AlgebraicClosure ℚ) N ℓ) hα) = frobOnPlacesGeomLevel k N data hKr (sp v) → W = W₀ d4 : Function.Surjective sp d5 : ∀ f : modularFunctionFieldBar N, f ≠ 0 → ∀ D : Divisor (AlgebraicClosure ℚ) (modularFunctionFieldBar N), (∀ v, D v = v.ord f) → ∃ g : modularFunctionFieldC k N, g ≠ 0 ∧ ∀ v' : Place k (modularFunctionFieldC k N), Finsupp.mapDomain sp D v' = v'.ord g d6_inertia : ∀ σ : AlgebraicClosure ℚ ≃ₐ[ℚ] AlgebraicClosure ℚ, σ ∈ A.inertiaSubgroupIn ℚ → ∀ w : Place (AlgebraicClosure ℚ) (modularFunctionFieldBar N), sp (arithmeticGalois (modularFunctionFieldFull N) σ • w) = sp w d6_frobenius : ∀ σ : AlgebraicClosure ℚ ≃ₐ[ℚ] AlgebraicClosure ℚ, A.IsFrobeniusAt σ ℓ → ∀ w : Place (AlgebraicClosure ℚ) (modularFunctionFieldBar N), sp (arithmeticGalois (modularFunctionFieldFull N) σ • w) = frobOnPlacesGeomLevel k N data hKr (sp w) d7_dictInfty : ∀ (w : Place (AlgebraicClosure ℚ) (modularFunctionFieldBar N)) (τ : A) (ht : (⟨coeffEmb (AlgebraicClosure ℚ) (qExpand ℚ N jq), coeffEmb_mem_laurentBaseChange (AlgebraicClosure ℚ) (jqd_mem_full N (dvd_refl N))⟩ : modularFunctionFieldBar N) / (⟨coeffEmb (AlgebraicClosure ℚ) jq, coeffEmb_mem_laurentBaseChange (AlgebraicClosure ℚ) (modularFunctionField_le_full N (jq_mem N))⟩ : modularFunctionFieldBar N) ^ N ∈ w.toValuationSubring), (∀ a : A, w.ord (⟨coeffEmb (AlgebraicClosure ℚ) jq, coeffEmb_mem_laurentBaseChange (AlgebraicClosure ℚ) (modularFunctionField_le_full N (jq_mem N))⟩ - algebraMap (AlgebraicClosure ℚ) (modularFunctionFieldBar N) (a : AlgebraicClosure ℚ)) ≤ 0) → IsLocalRing.residue w.toValuationSubring ⟨_, ht⟩ = algebraMap (AlgebraicClosure ℚ) w.ResidueField (τ : AlgebraicClosure ℚ) → ⟨jqNModC k N, jqNModC_mem k N⟩ / (⟨jqModC k, jqModC_mem k N⟩ : modularFunctionFieldC k N) ^ N - algebraMap k (modularFunctionFieldC k N) (red τ) = 0 ∨ 0 < (sp w).ord (⟨jqNModC k N, jqNModC_mem k N⟩ / (⟨jqModC k, jqModC_mem k N⟩ : modularFunctionFieldC k N) ^ N - algebraMap k (modularFunctionFieldC k N) (red τ)) d7_dictZero : ∀ (w : Place (AlgebraicClosure ℚ) (modularFunctionFieldBar N)) (τ : A) (ht : (⟨coeffEmb (AlgebraicClosure ℚ) jq, coeffEmb_mem_laurentBaseChange (AlgebraicClosure ℚ) (modularFunctionField_le_full N (jq_mem N))⟩ : modularFunctionFieldBar N) / (⟨coeffEmb (AlgebraicClosure ℚ) (qExpand ℚ N jq), coeffEmb_mem_laurentBaseChange (AlgebraicClosure ℚ) (jqd_mem_full N (dvd_refl N))⟩ : modularFunctionFieldBar N) ^ N ∈ w.toValuationSubring), (∀ a : A, w.ord (⟨coeffEmb (AlgebraicClosure ℚ) (qExpand ℚ N jq), coeffEmb_mem_laurentBaseChange (AlgebraicClosure ℚ) (jqd_mem_full N (dvd_refl N))⟩ - algebraMap (AlgebraicClosure ℚ) (modularFunctionFieldBar N) (a : AlgebraicClosure ℚ)) ≤ 0) → IsLocalRing.residue w.toValuationSubring ⟨_, ht⟩ = algebraMap (AlgebraicClosure ℚ) w.ResidueField (τ : AlgebraicClosure ℚ) → ⟨jqModC k, jqModC_mem k N⟩ / (⟨jqNModC k N, jqNModC_mem k N⟩ : modularFunctionFieldC k N) ^ N - algebraMap k (modularFunctionFieldC k N) (red τ) = 0 ∨ 0 < (sp w).ord (⟨jqModC k, jqModC_mem k N⟩ / (⟨jqNModC k N, jqNModC_mem k N⟩ : modularFunctionFieldC k N) ^ N - algebraMap k (modularFunctionFieldC k N) (red τ)) spPic0_compat : ∀ D : Divisor.degZero (K := AlgebraicClosure ℚ) (F := ↥(modularFunctionFieldBar N)), ∃ D' : Divisor.degZero (K := k) (F := ↥(modularFunctionFieldC k N)), (D' : Divisor k (modularFunctionFieldC k N)) = Finsupp.mapDomain sp (D : Divisor (AlgebraicClosure ℚ) (modularFunctionFieldBar N)) ∧ spPic0 (Pic0.mk D) = Pic0.mk D' end ModularCurve