import Definitions.Def_FrobeniusDensity_BadPrimes import Mathlib.NumberTheory.NumberField.DedekindZeta import Mathlib.RingTheory.DedekindDomain.Factorization set_option autoImplicit false open Ideal NumberField Filter Topology Asymptotics IsDedekindDomain UniqueFactorizationMonoid open scoped ENNReal NNReal namespace FrobeniusDensity variable (K : Type*) [Field K] [NumberField K] noncomputable def normRpow (s : โ„) (I : Ideal (๐“ž K)) : โ„โ‰ฅ0โˆž := (Ideal.absNorm I : โ„โ‰ฅ0โˆž) ^ (-s) noncomputable def idealSum (s : โ„) : โ„โ‰ฅ0โˆž := โˆ‘' I : {I : Ideal (๐“ž K) // I โ‰  โŠฅ}, normRpow K s I.1 noncomputable def primeSum (s : โ„) : โ„โ‰ฅ0โˆž := โˆ‘' v : HeightOneSpectrum (๐“ž K), normRpow K s v.asIdeal noncomputable def primeSqSum (s : โ„) : โ„โ‰ฅ0โˆž := โˆ‘' v : HeightOneSpectrum (๐“ž K), normRpow K s v.asIdeal ^ 2 variable {K} def IsFactoredBy (T : Finset (HeightOneSpectrum (๐“ž K))) (I : Ideal (๐“ž K)) : Prop := I โ‰  โŠฅ โˆง โˆ€ v : HeightOneSpectrum (๐“ž K), v.asIdeal โˆฃ I โ†’ v โˆˆ T variable (K) in noncomputable def factoredSum (T : Finset (HeightOneSpectrum (๐“ž K))) (s : โ„) : โ„โ‰ฅ0โˆž := โˆ‘' I : {I : Ideal (๐“ž K) // IsFactoredBy T I}, normRpow K s I.1 lemma one_le_absNorm {I : Ideal (๐“ž K)} (hI : I โ‰  โŠฅ) : 1 โ‰ค Ideal.absNorm I := Nat.one_le_iff_ne_zero.mpr (fun h => hI (Ideal.absNorm_eq_zero_iff.mp h)) variable (K) in noncomputable def primeFactors (I : Ideal (๐“ž K)) : Finset (HeightOneSpectrum (๐“ž K)) := if hI : I = โŠฅ then โˆ… else (finite_setOf_dvd hI).toFinset variable (K) theorem exists_prime_liesOver (v : HeightOneSpectrum (๐“ž K)) : โˆƒ โ„“ : โ„•, โ„“.Prime โˆง v.asIdeal.LiesOver (ratPrimeIdeal โ„“) := by have hJp : (v.asIdeal.under โ„ค).IsPrime := Ideal.IsPrime.under โ„ค v.asIdeal have hmem : (Ideal.absNorm v.asIdeal : โ„ค) โˆˆ v.asIdeal.under โ„ค := by rw [Ideal.under_def, Ideal.mem_comap, algebraMap_int_eq, map_natCast] exact Ideal.absNorm_mem v.asIdeal have hJne : v.asIdeal.under โ„ค โ‰  โŠฅ := by intro h rw [h, Ideal.mem_bot, Int.natCast_eq_zero] at hmem exact Nat.one_le_iff_ne_zero.mp (one_le_absNorm v.ne_bot) hmem refine โŸจ(Submodule.IsPrincipal.generator (v.asIdeal.under โ„ค)).natAbs, Int.prime_iff_natAbs_prime.mp (Submodule.IsPrincipal.prime_generator_of_isPrime _ hJne), โŸจ?_โŸฉโŸฉ rw [ratPrimeIdeal, Int.span_natAbs, Ideal.span_singleton_generator] variable {K} noncomputable def ratBelow (v : HeightOneSpectrum (๐“ž K)) : โ„• := (exists_prime_liesOver K v).choose theorem ratBelow_prime (v : HeightOneSpectrum (๐“ž K)) : (ratBelow v).Prime := (exists_prime_liesOver K v).choose_spec.1 instance liesOver_ratBelow (v : HeightOneSpectrum (๐“ž K)) : v.asIdeal.LiesOver (ratPrimeIdeal (ratBelow v)) := (exists_prime_liesOver K v).choose_spec.2 variable (K) noncomputable def degOneSum (Sโ‚€ : Finset โ„•) (s : โ„) : โ„โ‰ฅ0โˆž := โˆ‘' โ„“ : โ„•, (if โ„“ โˆˆ Sโ‚€ then 0 else (degOneCount K โ„“ : โ„โ‰ฅ0โˆž)) * (โ„“ : โ„โ‰ฅ0โˆž) ^ (-s) noncomputable def cutSum (Sโ‚€ : Finset โ„•) (s : โ„) : โ„โ‰ฅ0โˆž := โˆ‘' โ„“ : โ„•, (if โ„“ โˆˆ Sโ‚€ then (degOneCount K โ„“ : โ„โ‰ฅ0โˆž) else 0) * (โ„“ : โ„โ‰ฅ0โˆž) ^ (-s) noncomputable def tailSum (s : โ„) : โ„โ‰ฅ0โˆž := โˆ‘' v : HeightOneSpectrum (๐“ž K), if (Ideal.absNorm v.asIdeal).Prime then 0 else normRpow K s v.asIdeal noncomputable def tailConst : โ„โ‰ฅ0โˆž := โˆ‘' โ„“ : โ„•, if โ„“.Prime then ((โ„“ : โ„โ‰ฅ0โˆž) ^ 2)โปยน else 0 noncomputable def idealCount (n : โ„•) : โ„• := Nat.card {I : Ideal (๐“ž K) // Ideal.absNorm I = n} noncomputable def zetaTerm (s : โ„) (n : โ„•) : โ„ := if n = 0 then 0 else idealCount K n * (n : โ„) ^ (-s) end FrobeniusDensity