import Definitions.Def_HeckeGalois_EichlerShimura import Definitions.Def_FLTPrelim_Modularity import Definitions.Def_FreyPackage_LevelRaising namespace ModularCurve def IsTwoNewEigenformIdeal (M q q' : β„•) (π”ͺ : Ideal HeckeAlg) : Prop := βˆƒ (f : CuspForm (CongruenceSubgroup.Gamma0 M) 2) (_ : f.IsNormalizedEigenform) (_ : f.IsNewAt q) (_ : f.IsNewAt q') (k : Type) (_ : Field k) (_ : Finite k) (π’ͺ : Subring β„‚) (hπ’ͺ : βˆ€ β„“ : Nat.Primes, ModularFormClass.qCoeff f β„“ ∈ π’ͺ) (Ο† : π’ͺ β†’+* k), π”ͺ = eigenIdeal (fun β„“ => Ο† ⟨ModularFormClass.qCoeff f β„“, hπ’ͺ β„“βŸ©) def TwoNewEigensystemsFactor (M q q' : β„•) (Y : Type*) [AddCommGroup Y] [Module HeckeAlg Y] : Prop := βˆ€ (f : CuspForm (CongruenceSubgroup.Gamma0 M) 2), f.IsNormalizedEigenform β†’ f.IsNewAt q β†’ f.IsNewAt q' β†’ Module.annihilator HeckeAlg Y ≀ RingHom.ker (MvPolynomial.aeval (R := β„€) (fun β„“ : Nat.Primes => ModularFormClass.qCoeff f β„“)) end ModularCurve