import Definitions.Def_FLTPrelim_FreyPackage import Definitions.Def_FLTPrelim_GaloisRep import Definitions.Def_FLTPrelim_Modularity import Definitions.Def_FLTPrelim_ModularRep import Definitions.Def_FLTPrelim_Ramification import Definitions.Def_FreyPackage_LevelRaising import Definitions.Def_RibetLevelLowering_CharacterGroupApparatusV2 import Definitions.Def_GaloisRep_GlobalUnramifiedAt import Definitions.Def_FreyPackage_GaloisRep import Definitions.Def_FreyPackage_ExchangeCase import Definitions.Def_FreyPackage_LoweringAt import Definitions.Def_FreyPackage_AtPNewLowering import Definitions.Def_WeierstrassCurve_PeuRamifiee import Definitions.Def_WeierstrassCurve_Semistability set_option autoImplicit false noncomputable section open WeierstrassCurve WeierstrassCurve.Affine.Point FreyCurve open scoped CongruenceSubgroup namespace FreyPackage noncomputable local instance instDecEqQbarUniformPin : DecidableEq (AlgebraicClosure ā„š) := Classical.decEq _ def ModularRepOfLevelNewAtPinned (P : FreyPackage) (M q : ā„•) : Prop := ∃ (g : CuspForm (CongruenceSubgroup.Gamma0 M) 2) (š”Ŗ : Ideal (integralClosure ℤ ā„‚)), g.IsNormalizedEigenform ∧ š”Ŗ.IsMaximal ∧ (P.p : integralClosure ℤ ā„‚) ∈ š”Ŗ ∧ (āˆ€ ā„“ : ā„•, ā„“.Prime → (freyCurveInt P).IsGoodPrimeFor ā„“ → ¬ ā„“ ∣ M → ā„“ ≠ P.p → ∃ a : integralClosure ℤ ā„‚, (a : ā„‚) = ModularFormClass.qCoeff g ā„“ ∧ a - (((freyCurveInt P).apOfModel ā„“ : ℤ) : integralClosure ℤ ā„‚) ∈ š”Ŗ) ∧ g.IsNewAt q def MazurPrincipleNewLoweringAtUniform (P : FreyPackage) (q : ā„•) : Prop := āˆ€ N : ā„•, 0 < N → q.Prime → q ≠ 2 → q ≠ P.p → ¬ q ∣ N → ¬ P.ExchangeCongruence q → GaloisRepIsIrreducible (K := AlgebraicClosure ā„š) ā„š P.freyCurve P.p → GlobalGaloisRep.IsUnramifiedAt P.freyGaloisRep q → P.ModularRepOfLevelNewAtPinned (N * q) q → P.ModularRepOfLevelAt N def ExchangeCaseLoweringAtUniform (P : FreyPackage) (q : ā„•) : Prop := āˆ€ N : ā„•, 0 < N → q.Prime → q ≠ 2 → q ≠ P.p → ¬ q ∣ N → P.ExchangeCongruence q → GaloisRepIsIrreducible (K := AlgebraicClosure ā„š) ā„š P.freyCurve P.p → GlobalGaloisRep.IsUnramifiedAt P.freyGaloisRep q → P.ModularRepOfLevelNewAtPinned (N * q) q → P.ModularRepOfLevelAt N def AtPNewLoweringAtUniform (P : FreyPackage) : Prop := āˆ€ Nā‚€ : ā„•, 0 < Nā‚€ → ¬ P.p ∣ Nā‚€ → GaloisRepIsIrreducible (K := AlgebraicClosure ā„š) ā„š P.freyCurve P.p → P.freyCurve.IsPeuRamifieeAt P.p P.p → P.ModularRepOfLevelNewAtPinned (Nā‚€ * P.p) P.p → P.ModularRepOfLevelAt Nā‚€ end FreyPackage end