import OAI.NumberTheory.DirichletL.QuadraticSieve.CrossSeparationnamespace OAInoncomputable sectionopen scoped BigOperatorsopen MulChar AddCharopen scoped BigOperatorsopen Filter Asymptotics MeasureTheoryopen scoped Topologyopen MeasureTheory Realopen scoped FourierTransform SchwartzMapopen Finset Complexopen scoped Classicalopen scoped Classicalopen Filter Real Asymptoticsopen ActualEisensteinCubicopen Filteropen ActualEisensteinCubic RationalPrimeExtraction ShortDraftLatticeCountopen ActualEisensteinCubic ShortDraftLatticeCountopen Filteropen scoped Topologyopen EisensteinEmbedding ConcreteTraceCRT ActualEisensteinCubicopen MulChar AddCharopen Filter Asymptoticsopen scoped LSeries.notation ArithmeticFunction.Moebiusopen Filteropen MulChar AddCharopen MulChar AddCharopen scoped LSeries.notation ArithmeticFunction.Moebiusopen Filter Asymptotics MeasureTheoryopen scoped Topologyopen Filter Asymptoticsopen Ideal NumberField RingOfIntegers UniqueFactorizationMonoidopen Ideal NumberField RingOfIntegers UniqueFactorizationMonoidopen Ideal NumberField RingOfIntegers UniqueFactorizationMonoidopen Ideal NumberField RingOfIntegers UniqueFactorizationMonoidopen Ideal NumberField RingOfIntegers UniqueFactorizationMonoidopen Filter Asymptoticsopen Filter Asymptotics MeasureTheoryopen scoped Topologyopen Filter Asymptotics Ideal NumberFieldopen Filteropen Filter Asymptotics MeasureTheoryopen scoped Topologyopen Filter Asymptotics MeasureTheoryopen scoped Topologyopen Filter Asymptotics MeasureTheoryopen scoped Topologyopen MeasureTheory Realopen scoped ContDiff FourierTransform SchwartzMapopen scoped BigOperators Classicalopen scoped BigOperators Classicalopen scoped BigOperators Classicalopen scoped BigOperators Classical SchwartzMap ContDiffopen scoped BigOperators Classical SchwartzMap ContDiffopen scoped BigOperators Classicalopen scoped BigOperators Classical SchwartzMap ContDiffopen scoped BigOperators Classicalopen scoped BigOperators Classical SchwartzMap ContDiffopen scoped BigOperators Classical SchwartzMap ContDiffopen scoped BigOperators Classical SchwartzMap ContDiffopen scoped BigOperators Classicalopen scoped BigOperators Classical SchwartzMap ContDiffopen MeasureTheory Setopen scoped BigOperatorsopen scoped BigOperators Classicalopen scoped BigOperators Classicalopen ActualEisensteinCubic UniqueFactorizationMonoidnamespace IdealMobiusDivisorSumabbrev O := ActualEisensteinCubic.Odef idealDivisors (I : Ideal O) : Finset (Ideal O) := (Ideal.finite_setOfPred_absNorm_le (S := O) (Ideal.absNorm I)).toFinset.filter (fun J => J ∣ I)theorem mem_idealDivisors {I J : Ideal O} (hI : I ≠ ⊥) : J ∈ idealDivisors I ↔ J ∣ I := I:Ideal OJ:Ideal OhI:I ≠ ⊥⊢ J ∈ idealDivisors I ↔ J ∣ I I:Ideal OJ:Ideal OhI:I ≠ ⊥⊢ absNorm J ≤ absNorm I ∧ J ∣ I ↔ J ∣ I I:Ideal OJ:Ideal OhI:I ≠ ⊥⊢ absNorm J ≤ absNorm I ∧ J ∣ I → J ∣ II:Ideal OJ:Ideal OhI:I ≠ ⊥⊢ J ∣ I → absNorm J ≤ absNorm I ∧ J ∣ I I:Ideal OJ:Ideal OhI:I ≠ ⊥⊢ absNorm J ≤ absNorm I ∧ J ∣ I → J ∣ I All goals completed! 🐙 I:Ideal OJ:Ideal OhI:I ≠ ⊥⊢ J ∣ I → absNorm J ≤ absNorm I ∧ J ∣ I I:Ideal OJ:Ideal OhI:I ≠ ⊥hJI:J ∣ I⊢ absNorm J ≤ absNorm I ∧ J ∣ I I:Ideal OJ:Ideal OhI:I ≠ ⊥hJI:J ∣ Ihn:0 < absNorm I⊢ absNorm J ≤ absNorm I ∧ J ∣ I All goals completed! 🐙def primeSupport (I : Ideal O) : Finset (Ideal O) := (normalizedFactors I).toFinsettheorem support_prime {I : Ideal O} {P : Ideal O} (hP : P ∈ primeSupport I) : Prime P := prime_of_normalized_factor P (Multiset.mem_toFinset.mp hP)theorem support_product_ne_zero {I : Ideal O} {S : Finset (Ideal O)} (hS : S ⊆ primeSupport I) : (∏ P ∈ S, P) ≠ 0 := Finset.prod_ne_zero_iff.mpr (fun _P hP => (support_prime (hS hP)).ne_zero)theorem factors_support_product {I : Ideal O} {S : Finset (Ideal O)} (hS : S ⊆ primeSupport I) : normalizedFactors (∏ P ∈ S, P) = S.val := I:Ideal OS:Finset (Ideal O)hS:S ⊆ primeSupport I⊢ normalizedFactors (∏ P ∈ S, P) = S.val I:Ideal OS:Finset (Ideal O)hS:S ⊆ primeSupport Ihp:∀ P ∈ S.val, Prime P⊢ normalizedFactors (∏ P ∈ S, P) = S.val All goals completed! 🐙theorem squarefree_support_product {I : Ideal O} {S : Finset (Ideal O)} (hS : S ⊆ primeSupport I) : Squarefree (∏ P ∈ S, P) := I:Ideal OS:Finset (Ideal O)hS:S ⊆ primeSupport I⊢ Squarefree (∏ P ∈ S, P) I:Ideal OS:Finset (Ideal O)hS:S ⊆ primeSupport I⊢ (normalizedFactors (∏ P ∈ S, P)).Nodup I:Ideal OS:Finset (Ideal O)hS:S ⊆ primeSupport I⊢ S.val.Nodup All goals completed! 🐙theorem support_product_dvd {I : Ideal O} (hI : I ≠ ⊥) {S : Finset (Ideal O)} (hS : S ⊆ primeSupport I) : (∏ P ∈ S, P) ∣ I := I:Ideal OhI:I ≠ ⊥S:Finset (Ideal O)hS:S ⊆ primeSupport I⊢ ∏ P ∈ S, P ∣ I I:Ideal OhI:I ≠ ⊥S:Finset (Ideal O)hS:S ⊆ primeSupport I⊢ normalizedFactors (∏ P ∈ S, P) ≤ normalizedFactors I I:Ideal OhI:I ≠ ⊥S:Finset (Ideal O)hS:S ⊆ primeSupport I⊢ S.val ≤ normalizedFactors I I:Ideal OhI:I ≠ ⊥S:Finset (Ideal O)hS:S ⊆ primeSupport I⊢ S.val ⊆ normalizedFactors I I:Ideal OhI:I ≠ ⊥S:Finset (Ideal O)hS:S ⊆ primeSupport IP:Ideal OhP:P ∈ S.val⊢ P ∈ normalizedFactors I All goals completed! 🐙theorem moebius_support_product {I : Ideal O} {S : Finset (Ideal O)} (hS : S ⊆ primeSupport I) : (moebius (∏ P ∈ S, P) : ℂ) = (-1 : ℂ) ^ S.card := I:Ideal OS:Finset (Ideal O)hS:S ⊆ primeSupport I⊢ ↑(moebius (∏ P ∈ S, P)) = (-1) ^ #S I:Ideal OS:Finset (Ideal O)hS:S ⊆ primeSupport I⊢ ↑((-1) ^ S.val.card) = (-1) ^ #S All goals completed! 🐙theorem support_product_injective {I : Ideal O} {S T : Finset (Ideal O)} (hS : S ⊆ primeSupport I) (hT : T ⊆ primeSupport I) (h : (∏ P ∈ S, P) = ∏ P ∈ T, P) : S = T := I:Ideal OS:Finset (Ideal O)T:Finset (Ideal O)hS:S ⊆ primeSupport IhT:T ⊆ primeSupport Ih:∏ P ∈ S, P = ∏ P ∈ T, P⊢ S = T I:Ideal OS:Finset (Ideal O)T:Finset (Ideal O)hS:S ⊆ primeSupport IhT:T ⊆ primeSupport Ih:∏ P ∈ S, P = ∏ P ∈ T, Phf:normalizedFactors (∏ P ∈ S, P) = normalizedFactors (∏ P ∈ T, P)⊢ S = T I:Ideal OS:Finset (Ideal O)T:Finset (Ideal O)hS:S ⊆ primeSupport IhT:T ⊆ primeSupport Ih:∏ P ∈ S, P = ∏ P ∈ T, Phf:S.val = T.val⊢ S = T All goals completed! 🐙theorem squarefree_divisor_support {I J : Ideal O} (hI : I ≠ ⊥) (hJ : Squarefree J) (hJI : J ∣ I) : primeSupport J ⊆ primeSupport I := I:Ideal OJ:Ideal OhI:I ≠ ⊥hJ:Squarefree JhJI:J ∣ I⊢ primeSupport J ⊆ primeSupport I I:Ideal OJ:Ideal OhI:I ≠ ⊥hJ:Squarefree JhJI:J ∣ Ihf:normalizedFactors J ≤ normalizedFactors I⊢ primeSupport J ⊆ primeSupport I I:Ideal OJ:Ideal OhI:I ≠ ⊥hJ:Squarefree JhJI:J ∣ Ihf:normalizedFactors J ≤ normalizedFactors IP:Ideal OhP:P ∈ primeSupport J⊢ P ∈ primeSupport I All goals completed! 🐙theorem squarefree_support_product_self {J : Ideal O} (hJ : Squarefree J) : (∏ P ∈ primeSupport J, P) = J := J:Ideal OhJ:Squarefree J⊢ ∏ P ∈ primeSupport J, P = J J:Ideal OhJ:Squarefree Jhn:(normalizedFactors J).Nodup⊢ ∏ P ∈ primeSupport J, P = J J:Ideal OhJ:Squarefree Jhn:(normalizedFactors J).Noduphv:(primeSupport J).val = normalizedFactors J⊢ ∏ P ∈ primeSupport J, P = J calc _ = (primeSupport J).val.prod := (Finset.prod_val _).symm _ = (normalizedFactors J).prod := J:Ideal OhJ:Squarefree Jhn:(normalizedFactors J).Noduphv:(primeSupport J).val = normalizedFactors J⊢ (primeSupport J).val.prod = (normalizedFactors J).prod All goals completed! 🐙 _ = J := Ideal.prod_normalizedFactors_eq_self hJ.ne_zerotheorem squarefree_divisors_eq_image (I : Ideal O) (hI : I ≠ ⊥) : (idealDivisors I).filter Squarefree = (primeSupport I).powerset.image (fun S => ∏ P ∈ S, P) := I:Ideal OhI:I ≠ ⊥⊢ filter Squarefree (idealDivisors I) = Finset.image (fun S => ∏ P ∈ S, P) (primeSupport I).powerset I:Ideal OhI:I ≠ ⊥J:Ideal O⊢ J ∈ filter Squarefree (idealDivisors I) ↔ J ∈ Finset.image (fun S => ∏ P ∈ S, P) (primeSupport I).powerset I:Ideal OhI:I ≠ ⊥J:Ideal O⊢ J ∣ I ∧ Squarefree J ↔ ∃ a ⊆ primeSupport I, ∏ P ∈ a, P = J I:Ideal OhI:I ≠ ⊥J:Ideal O⊢ J ∣ I ∧ Squarefree J → ∃ a ⊆ primeSupport I, ∏ P ∈ a, P = JI:Ideal OhI:I ≠ ⊥J:Ideal O⊢ (∃ a ⊆ primeSupport I, ∏ P ∈ a, P = J) → J ∣ I ∧ Squarefree J I:Ideal OhI:I ≠ ⊥J:Ideal O⊢ J ∣ I ∧ Squarefree J → ∃ a ⊆ primeSupport I, ∏ P ∈ a, P = J I:Ideal OhI:I ≠ ⊥J:Ideal OhJI:J ∣ IhJ:Squarefree J⊢ ∃ a ⊆ primeSupport I, ∏ P ∈ a, P = J All goals completed! 🐙 I:Ideal OhI:I ≠ ⊥J:Ideal O⊢ (∃ a ⊆ primeSupport I, ∏ P ∈ a, P = J) → J ∣ I ∧ Squarefree J I:Ideal OhI:I ≠ ⊥S:Finset (Ideal O)hS:S ⊆ primeSupport I⊢ ∏ P ∈ S, P ∣ I ∧ Squarefree (∏ P ∈ S, P) All goals completed! 🐙theorem primeSupport_empty_iff (I : Ideal O) (hI : I ≠ ⊥) : primeSupport I = ∅ ↔ I = ⊤ := I:Ideal OhI:I ≠ ⊥⊢ primeSupport I = ∅ ↔ I = ⊤ I:Ideal OhI:I ≠ ⊥⊢ primeSupport I = ∅ → I = ⊤I:Ideal OhI:I ≠ ⊥⊢ I = ⊤ → primeSupport I = ∅ I:Ideal OhI:I ≠ ⊥⊢ primeSupport I = ∅ → I = ⊤ I:Ideal OhI:I ≠ ⊥h:primeSupport I = ∅⊢ I = ⊤ I:Ideal OhI:I ≠ ⊥h:primeSupport I = ∅hz:normalizedFactors I = 0⊢ I = ⊤ I:Ideal OhI:I ≠ ⊥h:primeSupport I = ∅hz:normalizedFactors I = 0hp:(normalizedFactors I).prod = I⊢ I = ⊤ I:Ideal OhI:I ≠ ⊥h:primeSupport I = ∅hz:normalizedFactors I = 0hp:1 = I⊢ I = ⊤ All goals completed! 🐙 I:Ideal OhI:I ≠ ⊥⊢ I = ⊤ → primeSupport I = ∅ I:Ideal OhI:I ≠ ⊥h:I = ⊤⊢ primeSupport I = ∅ hI:⊤ ≠ ⊥⊢ primeSupport ⊤ = ∅ All goals completed! 🐙theorem sum_moebius_divisors (I : Ideal O) (hI : I ≠ ⊥) : (∑ J ∈ idealDivisors I, (moebius J : ℂ)) = if I = ⊤ then 1 else 0 := I:Ideal OhI:I ≠ ⊥⊢ ∑ J ∈ idealDivisors I, ↑(moebius J) = if I = ⊤ then 1 else 0 I:Ideal OhI:I ≠ ⊥hfilter:∑ J ∈ idealDivisors I, ↑(moebius J) = ∑ J ∈ idealDivisors I with Squarefree J, ↑(moebius J)⊢ ∑ J ∈ idealDivisors I, ↑(moebius J) = if I = ⊤ then 1 else 0 I:Ideal OhI:I ≠ ⊥hfilter:∑ J ∈ idealDivisors I, ↑(moebius J) = ∑ J ∈ idealDivisors I with Squarefree J, ↑(moebius J)⊢ ∑ x ∈ (primeSupport I).powerset, ↑(moebius (∏ P ∈ x, P)) = if I = ⊤ then 1 else 0I:Ideal OhI:I ≠ ⊥hfilter:∑ J ∈ idealDivisors I, ↑(moebius J) = ∑ J ∈ idealDivisors I with Squarefree J, ↑(moebius J)⊢ InjOn (fun S => ∏ P ∈ S, P) ↑(primeSupport I).powerset I:Ideal OhI:I ≠ ⊥hfilter:∑ J ∈ idealDivisors I, ↑(moebius J) = ∑ J ∈ idealDivisors I with Squarefree J, ↑(moebius J)⊢ ∑ x ∈ (primeSupport I).powerset, ↑(moebius (∏ P ∈ x, P)) = if I = ⊤ then 1 else 0 I:Ideal OhI:I ≠ ⊥hfilter:∑ J ∈ idealDivisors I, ↑(moebius J) = ∑ J ∈ idealDivisors I with Squarefree J, ↑(moebius J)heq:∑ S ∈ (primeSupport I).powerset, ↑(moebius (∏ P ∈ S, P)) = ∑ S ∈ (primeSupport I).powerset, (-1) ^ #S⊢ ∑ x ∈ (primeSupport I).powerset, ↑(moebius (∏ P ∈ x, P)) = if I = ⊤ then 1 else 0 I:Ideal OhI:I ≠ ⊥hfilter:∑ J ∈ idealDivisors I, ↑(moebius J) = ∑ J ∈ idealDivisors I with Squarefree J, ↑(moebius J)heq:∑ S ∈ (primeSupport I).powerset, ↑(moebius (∏ P ∈ S, P)) = ∑ S ∈ (primeSupport I).powerset, (-1) ^ #S⊢ (if primeSupport I = ∅ then 1 else 0) = if I = ⊤ then 1 else 0 All goals completed! 🐙 I:Ideal OhI:I ≠ ⊥hfilter:∑ J ∈ idealDivisors I, ↑(moebius J) = ∑ J ∈ idealDivisors I with Squarefree J, ↑(moebius J)⊢ InjOn (fun S => ∏ P ∈ S, P) ↑(primeSupport I).powerset I:Ideal OhI:I ≠ ⊥hfilter:∑ J ∈ idealDivisors I, ↑(moebius J) = ∑ J ∈ idealDivisors I with Squarefree J, ↑(moebius J)S:Finset (Ideal O)hS:S ∈ ↑(primeSupport I).powersetT:Finset (Ideal O)hT:T ∈ ↑(primeSupport I).powersethST:(fun S => ∏ P ∈ S, P) S = (fun S => ∏ P ∈ S, P) T⊢ S = T All goals completed! 🐙end IdealMobiusDivisorSumopen scoped BigOperators Classicalnamespace CompletedGausssectionabbrev O := ActualEisensteinCubic.Oopen ActualEisensteinCubicdef primaryPrime (P : Ideal O) : O := if h : P.IsMaximal ∧ lambda ∉ P then letI : P.IsMaximal := h.1 (cubicJacobi_exists_primary_generator P h.2).choose else 0theorem primaryPrime_spec (P : Ideal O) (h : primaryPrime P ≠ 0) : P.IsMaximal ∧ lambda ∉ P ∧ Ideal.span {primaryPrime P} = P ∧ lambda ^ 2 ∣ primaryPrime P - 1 := P:Ideal Oh:primaryPrime P ≠ 0⊢ P.IsMaximal ∧ lambda ∉ P ∧ span {primaryPrime P} = P ∧ lambda ^ 2 ∣ primaryPrime P - 1 classical P:Ideal Oh:primaryPrime P ≠ 0hg:P.IsMaximal ∧ lambda ∉ P⊢ P.IsMaximal ∧ lambda ∉ P ∧ span {primaryPrime P} = P ∧ lambda ^ 2 ∣ primaryPrime P - 1P:Ideal Oh:primaryPrime P ≠ 0hg:¬(P.IsMaximal ∧ lambda ∉ P)⊢ P.IsMaximal ∧ lambda ∉ P ∧ span {primaryPrime P} = P ∧ lambda ^ 2 ∣ primaryPrime P - 1 P:Ideal Oh:primaryPrime P ≠ 0hg:P.IsMaximal ∧ lambda ∉ P⊢ P.IsMaximal ∧ lambda ∉ P ∧ span {primaryPrime P} = P ∧ lambda ^ 2 ∣ primaryPrime P - 1 P:Ideal Oh:primaryPrime P ≠ 0hg:P.IsMaximal ∧ lambda ∉ Pthis:P.IsMaximal := ···⊢ P.IsMaximal ∧ lambda ∉ P ∧ span {primaryPrime P} = P ∧ lambda ^ 2 ∣ primaryPrime P - 1 P:Ideal Oh:primaryPrime P ≠ 0hg:P.IsMaximal ∧ lambda ∉ Pthis:P.IsMaximal := ···hs:P = span {⋯.choose} ∧ lambda ^ 2 ∣ ⋯.choose - 1 ∧ jacobiSum (cubicChar P ⋯) (cubicChar P ⋯) = -⋯.choose⊢ P.IsMaximal ∧ lambda ∉ P ∧ span {primaryPrime P} = P ∧ lambda ^ 2 ∣ primaryPrime P - 1 All goals completed! 🐙 P:Ideal Oh:primaryPrime P ≠ 0hg:¬(P.IsMaximal ∧ lambda ∉ P)⊢ P.IsMaximal ∧ lambda ∉ P ∧ span {primaryPrime P} = P ∧ lambda ^ 2 ∣ primaryPrime P - 1 All goals completed! 🐙theorem primaryPrime_ne_zero (P : Ideal O) [P.IsMaximal] (hg : lambda ∉ P) : primaryPrime P ≠ 0 := P:Ideal Oinst✝:P.IsMaximalhg:lambda ∉ P⊢ primaryPrime P ≠ 0 classical P:Ideal Oinst✝:P.IsMaximalhg:lambda ∉ Phs:P = span {⋯.choose} ∧ lambda ^ 2 ∣ ⋯.choose - 1 ∧ jacobiSum (cubicChar P hg) (cubicChar P hg) = -⋯.choose⊢ primaryPrime P ≠ 0 P:Ideal Oinst✝:P.IsMaximalhg:lambda ∉ Phs:P = span {⋯.choose} ∧ lambda ^ 2 ∣ ⋯.choose - 1 ∧ jacobiSum (cubicChar P hg) (cubicChar P hg) = -⋯.choosehtest:P.IsMaximal ∧ lambda ∉ P⊢ primaryPrime P ≠ 0 P:Ideal Oinst✝:P.IsMaximalhg:lambda ∉ Phs:P = span {⋯.choose} ∧ lambda ^ 2 ∣ ⋯.choose - 1 ∧ jacobiSum (cubicChar P hg) (cubicChar P hg) = -⋯.choosehtest:P.IsMaximal ∧ lambda ∉ Phz:primaryPrime P = 0⊢ False P:Ideal Oinst✝:P.IsMaximalhg:lambda ∉ Phs:P = span {⋯.choose} ∧ lambda ^ 2 ∣ ⋯.choose - 1 ∧ jacobiSum (cubicChar P hg) (cubicChar P hg) = -⋯.choosehtest:P.IsMaximal ∧ lambda ∉ Phz:primaryPrime P = 0hp0:⋯.choose = 0⊢ False P:Ideal Oinst✝:P.IsMaximalhg:lambda ∉ Phs:P = span {0} ∧ lambda ^ 2 ∣ 0 - 1 ∧ jacobiSum (cubicChar P hg) (cubicChar P hg) = -0htest:P.IsMaximal ∧ lambda ∉ Phz:primaryPrime P = 0hp0:⋯.choose = 0⊢ False exact (NeZero.ne P) (P:Ideal Oinst✝:P.IsMaximalhg:lambda ∉ Phs:P = span {0} ∧ lambda ^ 2 ∣ 0 - 1 ∧ jacobiSum (cubicChar P hg) (cubicChar P hg) = -0htest:P.IsMaximal ∧ lambda ∉ Phz:primaryPrime P = 0hp0:⋯.choose = 0⊢ P = 0 All goals completed! 🐙)def primaryGenerator (I : Ideal O) : O := if I = 0 then 0 else ((UniqueFactorizationMonoid.normalizedFactors I).map primaryPrime).prod@[simp] theorem primaryGenerator_zero : primaryGenerator 0 = 0 := ⊢ primaryGenerator 0 = 0 All goals completed! 🐙@[simp] theorem primaryGenerator_bot : primaryGenerator ⊥ = 0 := primaryGenerator_zero@[simp] theorem primaryGenerator_one : primaryGenerator 1 = 1 := ⊢ primaryGenerator 1 = 1 ⊢ (Multiset.map primaryPrime 0).prod = 1 All goals completed! 🐙theorem primaryGenerator_mul (I J : Ideal O) : primaryGenerator (I * J) = primaryGenerator I * primaryGenerator J := I:Ideal OJ:Ideal O⊢ primaryGenerator (I * J) = primaryGenerator I * primaryGenerator J classical I:Ideal OJ:Ideal OhI:I = 0⊢ primaryGenerator (I * J) = primaryGenerator I * primaryGenerator JI:Ideal OJ:Ideal OhI:¬I = 0⊢ primaryGenerator (I * J) = primaryGenerator I * primaryGenerator J I:Ideal OJ:Ideal OhI:I = 0⊢ primaryGenerator (I * J) = primaryGenerator I * primaryGenerator J All goals completed! 🐙 I:Ideal OJ:Ideal OhI:¬I = 0hJ:J = 0⊢ primaryGenerator (I * J) = primaryGenerator I * primaryGenerator JI:Ideal OJ:Ideal OhI:¬I = 0hJ:¬J = 0⊢ primaryGenerator (I * J) = primaryGenerator I * primaryGenerator J I:Ideal OJ:Ideal OhI:¬I = 0hJ:J = 0⊢ primaryGenerator (I * J) = primaryGenerator I * primaryGenerator J All goals completed! 🐙 All goals completed! 🐙def primaryGeneratorHom : Ideal O →*₀ O where toFun := primaryGenerator map_zero' := primaryGenerator_zero map_one' := primaryGenerator_one map_mul' := primaryGenerator_multheorem primaryGenerator_ne_zero_ideal (I : Ideal O) (h : primaryGenerator I ≠ 0) : I ≠ 0 := I:Ideal Oh:primaryGenerator I ≠ 0⊢ I ≠ 0 I:Ideal Oh:primaryGenerator I ≠ 0hI:I = 0⊢ False exact h (I:Ideal Oh:primaryGenerator I ≠ 0hI:I = 0⊢ primaryGenerator I = 0 All goals completed! 🐙)theorem primaryPrime_factor_ne_zero (I P : Ideal O) (hI : primaryGenerator I ≠ 0) (hP : P ∈ UniqueFactorizationMonoid.normalizedFactors I) : primaryPrime P ≠ 0 := I:Ideal OP:Ideal OhI:primaryGenerator I ≠ 0hP:P ∈ normalizedFactors I⊢ primaryPrime P ≠ 0 I:Ideal OP:Ideal OhI:primaryGenerator I ≠ 0hP:P ∈ normalizedFactors IhI0:I ≠ 0⊢ primaryPrime P ≠ 0 I:Ideal OP:Ideal OhI:primaryGenerator I ≠ 0hP:P ∈ normalizedFactors IhI0:I ≠ 0hprod:(Multiset.map primaryPrime (normalizedFactors I)).prod ≠ 0⊢ primaryPrime P ≠ 0 I:Ideal OP:Ideal OhI:primaryGenerator I ≠ 0hP:P ∈ normalizedFactors IhI0:I ≠ 0hprod:(Multiset.map primaryPrime (normalizedFactors I)).prod ≠ 0hz:primaryPrime P = 0⊢ False All goals completed! 🐙theorem span_multiset_prod (s : Multiset O) : Ideal.span {s.prod} = (s.map (fun x => Ideal.span {x})).prod := s:Multiset O⊢ span {s.prod} = (Multiset.map (fun x => span {x}) s).prod induction s using Multiset.induction_on with ⊢ span {Multiset.prod 0} = (Multiset.map (fun x => span {x}) 0).prod All goals completed! 🐙 a:Os:Multiset Oih:span {s.prod} = (Multiset.map (fun x => span {x}) s).prod⊢ span {(a ::ₘ s).prod} = (Multiset.map (fun x => span {x}) (a ::ₘ s)).prod All goals completed! 🐙theorem primaryGenerator_spec (I : Ideal O) (h : primaryGenerator I ≠ 0) : Ideal.span {primaryGenerator I} = I ∧ lambda ^ 2 ∣ primaryGenerator I - 1 := I:Ideal Oh:primaryGenerator I ≠ 0⊢ span {primaryGenerator I} = I ∧ lambda ^ 2 ∣ primaryGenerator I - 1 classical I:Ideal Oh:primaryGenerator I ≠ 0hI0:I ≠ 0⊢ span {primaryGenerator I} = I ∧ lambda ^ 2 ∣ primaryGenerator I - 1 I:Ideal Oh:primaryGenerator I ≠ 0hI0:I ≠ 0hprime:∀ P ∈ normalizedFactors I, span {primaryPrime P} = P ∧ lambda ^ 2 ∣ primaryPrime P - 1⊢ span {primaryGenerator I} = I ∧ lambda ^ 2 ∣ primaryGenerator I - 1 I:Ideal Oh:primaryGenerator I ≠ 0hI0:I ≠ 0hprime:∀ P ∈ normalizedFactors I, span {primaryPrime P} = P ∧ lambda ^ 2 ∣ primaryPrime P - 1⊢ span {(Multiset.map primaryPrime (normalizedFactors I)).prod} = I ∧ lambda ^ 2 ∣ (Multiset.map primaryPrime (normalizedFactors I)).prod - 1 I:Ideal Oh:primaryGenerator I ≠ 0hI0:I ≠ 0hprime:∀ P ∈ normalizedFactors I, span {primaryPrime P} = P ∧ lambda ^ 2 ∣ primaryPrime P - 1⊢ span {(Multiset.map primaryPrime (normalizedFactors I)).prod} = II:Ideal Oh:primaryGenerator I ≠ 0hI0:I ≠ 0hprime:∀ P ∈ normalizedFactors I, span {primaryPrime P} = P ∧ lambda ^ 2 ∣ primaryPrime P - 1⊢ lambda ^ 2 ∣ (Multiset.map primaryPrime (normalizedFactors I)).prod - 1 I:Ideal Oh:primaryGenerator I ≠ 0hI0:I ≠ 0hprime:∀ P ∈ normalizedFactors I, span {primaryPrime P} = P ∧ lambda ^ 2 ∣ primaryPrime P - 1⊢ span {(Multiset.map primaryPrime (normalizedFactors I)).prod} = I I:Ideal Oh:primaryGenerator I ≠ 0hI0:I ≠ 0hprime:∀ P ∈ normalizedFactors I, span {primaryPrime P} = P ∧ lambda ^ 2 ∣ primaryPrime P - 1⊢ (Multiset.map ((fun x => span {x}) ∘ primaryPrime) (normalizedFactors I)).prod = I I:Ideal Oh:primaryGenerator I ≠ 0hI0:I ≠ 0hprime:∀ P ∈ normalizedFactors I, span {primaryPrime P} = P ∧ lambda ^ 2 ∣ primaryPrime P - 1hm:Multiset.map ((fun x => span {x}) ∘ primaryPrime) (normalizedFactors I) = normalizedFactors I⊢ (Multiset.map ((fun x => span {x}) ∘ primaryPrime) (normalizedFactors I)).prod = I I:Ideal Oh:primaryGenerator I ≠ 0hI0:I ≠ 0hprime:∀ P ∈ normalizedFactors I, span {primaryPrime P} = P ∧ lambda ^ 2 ∣ primaryPrime P - 1hm:Multiset.map ((fun x => span {x}) ∘ primaryPrime) (normalizedFactors I) = normalizedFactors I⊢ (normalizedFactors I).prod = I All goals completed! 🐙 I:Ideal Oh:primaryGenerator I ≠ 0hI0:I ≠ 0hprime:∀ P ∈ normalizedFactors I, span {primaryPrime P} = P ∧ lambda ^ 2 ∣ primaryPrime P - 1⊢ lambda ^ 2 ∣ (Multiset.map primaryPrime (normalizedFactors I)).prod - 1 I:Ideal Oh:primaryGenerator I ≠ 0hI0:I ≠ 0hprime:∀ P ∈ normalizedFactors I, span {primaryPrime P} = P ∧ lambda ^ 2 ∣ primaryPrime P - 1⊢ ∀ x ∈ Multiset.map primaryPrime (normalizedFactors I), lambda ^ 2 ∣ x - 1 I:Ideal Oh:primaryGenerator I ≠ 0hI0:I ≠ 0hprime:∀ P ∈ normalizedFactors I, span {primaryPrime P} = P ∧ lambda ^ 2 ∣ primaryPrime P - 1r:ActualEisensteinCubic.Ohr:r ∈ Multiset.map primaryPrime (normalizedFactors I)⊢ lambda ^ 2 ∣ r - 1 I:Ideal Oh:primaryGenerator I ≠ 0hI0:I ≠ 0hprime:∀ P ∈ normalizedFactors I, span {primaryPrime P} = P ∧ lambda ^ 2 ∣ primaryPrime P - 1P:Ideal OhP:P ∈ normalizedFactors Ihr:primaryPrime P ∈ Multiset.map primaryPrime (normalizedFactors I)⊢ lambda ^ 2 ∣ primaryPrime P - 1 All goals completed! 🐙theorem primaryGenerator_span (n : O) (hn : n ≠ 0) (hprimary : lambda ^ 2 ∣ n - 1) : primaryGenerator (Ideal.span {n}) = n := n:Ohn:n ≠ 0hprimary:lambda ^ 2 ∣ n - 1⊢ primaryGenerator (span {n}) = n classical n:Ohn:n ≠ 0hprimary:lambda ^ 2 ∣ n - 1hI0:span {n} ≠ 0⊢ primaryGenerator (span {n}) = n n:Ohn:n ≠ 0hprimary:lambda ^ 2 ∣ n - 1hI0:span {n} ≠ 0hgen:primaryGenerator (span {n}) ≠ 0⊢ primaryGenerator (span {n}) = n n:Ohn:n ≠ 0hprimary:lambda ^ 2 ∣ n - 1hI0:span {n} ≠ 0hgen:primaryGenerator (span {n}) ≠ 0hspec:span {primaryGenerator (span {n})} = span {n} ∧ lambda ^ 2 ∣ primaryGenerator (span {n}) - 1⊢ primaryGenerator (span {n}) = n All goals completed! 🐙theorem primaryGenerator_norm_sq (I : Ideal O) (h : primaryGenerator I ≠ 0) : ‖ConcreteTraceCRT.eisEmbedding (primaryGenerator I)‖ ^ 2 = (Ideal.absNorm I : ℝ) := I:Ideal Oh:primaryGenerator I ≠ 0⊢ ‖eisEmbedding (primaryGenerator I)‖ ^ 2 = ↑(absNorm I) All goals completed! 🐙open ActualEisensteinCubictheorem compact_window_bound (W : ℝ → ℂ) (hW : HasCompactSupport W) : ∃ B : ℝ, 0 < B ∧ ∀ y, W y ≠ 0 → y ≤ B := W:ℝ → ℂhW:HasCompactSupport W⊢ ∃ B, 0 < B ∧ ∀ (y : ℝ), W y ≠ 0 → y ≤ B W:ℝ → ℂhW:HasCompactSupport WB:ℝhB:B ∈ upperBounds (tsupport W)⊢ ∃ B, 0 < B ∧ ∀ (y : ℝ), W y ≠ 0 → y ≤ B W:ℝ → ℂhW:HasCompactSupport WB:ℝhB:B ∈ upperBounds (tsupport W)⊢ ∀ (y : ℝ), W y ≠ 0 → y ≤ max B 1 W:ℝ → ℂhW:HasCompactSupport WB:ℝhB:B ∈ upperBounds (tsupport W)y:ℝhy:W y ≠ 0⊢ y ≤ max B 1 All goals completed! 🐙theorem norm_at_least_one (I : Ideal O) (hI : I ≠ 0) : (1 : ℝ) ≤ Ideal.absNorm I := I:Ideal OhI:I ≠ 0⊢ 1 ≤ ↑(absNorm I) All goals completed! 🐙theorem triple_scale_bounds (a b c : ℝ) (ha : 1 ≤ a) (hb : 1 ≤ b) (hc : 1 ≤ c) : a ≤ a * b ^ 3 * c ^ 3 ∧ b ≤ a * b ^ 3 * c ^ 3 ∧ c ≤ a * b ^ 3 * c ^ 3 := a:ℝb:ℝc:ℝha:1 ≤ ahb:1 ≤ bhc:1 ≤ c⊢ a ≤ a * b ^ 3 * c ^ 3 ∧ b ≤ a * b ^ 3 * c ^ 3 ∧ c ≤ a * b ^ 3 * c ^ 3 a:ℝb:ℝc:ℝha:1 ≤ ahb:1 ≤ bhc:1 ≤ cha0:0 ≤ a⊢ a ≤ a * b ^ 3 * c ^ 3 ∧ b ≤ a * b ^ 3 * c ^ 3 ∧ c ≤ a * b ^ 3 * c ^ 3 a:ℝb:ℝc:ℝha:1 ≤ ahb:1 ≤ bhc:1 ≤ cha0:0 ≤ ahb0:0 ≤ b⊢ a ≤ a * b ^ 3 * c ^ 3 ∧ b ≤ a * b ^ 3 * c ^ 3 ∧ c ≤ a * b ^ 3 * c ^ 3 a:ℝb:ℝc:ℝha:1 ≤ ahb:1 ≤ bhc:1 ≤ cha0:0 ≤ ahb0:0 ≤ bhc0:0 ≤ c⊢ a ≤ a * b ^ 3 * c ^ 3 ∧ b ≤ a * b ^ 3 * c ^ 3 ∧ c ≤ a * b ^ 3 * c ^ 3 a:ℝb:ℝc:ℝha:1 ≤ ahb:1 ≤ bhc:1 ≤ cha0:0 ≤ ahb0:0 ≤ bhc0:0 ≤ chb3:1 ≤ b ^ 3⊢ a ≤ a * b ^ 3 * c ^ 3 ∧ b ≤ a * b ^ 3 * c ^ 3 ∧ c ≤ a * b ^ 3 * c ^ 3 a:ℝb:ℝc:ℝha:1 ≤ ahb:1 ≤ bhc:1 ≤ cha0:0 ≤ ahb0:0 ≤ bhc0:0 ≤ chb3:1 ≤ b ^ 3hc3:1 ≤ c ^ 3⊢ a ≤ a * b ^ 3 * c ^ 3 ∧ b ≤ a * b ^ 3 * c ^ 3 ∧ c ≤ a * b ^ 3 * c ^ 3 a:ℝb:ℝc:ℝha:1 ≤ ahb:1 ≤ bhc:1 ≤ cha0:0 ≤ ahb0:0 ≤ bhc0:0 ≤ chb3:1 ≤ b ^ 3hc3:1 ≤ c ^ 3⊢ a ≤ a * b ^ 3 * c ^ 3a:ℝb:ℝc:ℝha:1 ≤ ahb:1 ≤ bhc:1 ≤ cha0:0 ≤ ahb0:0 ≤ bhc0:0 ≤ chb3:1 ≤ b ^ 3hc3:1 ≤ c ^ 3⊢ b ≤ a * b ^ 3 * c ^ 3 ∧ c ≤ a * b ^ 3 * c ^ 3 a:ℝb:ℝc:ℝha:1 ≤ ahb:1 ≤ bhc:1 ≤ cha0:0 ≤ ahb0:0 ≤ bhc0:0 ≤ chb3:1 ≤ b ^ 3hc3:1 ≤ c ^ 3⊢ a ≤ a * b ^ 3 * c ^ 3 calc a = a * 1 * 1 := a:ℝb:ℝc:ℝha:1 ≤ ahb:1 ≤ bhc:1 ≤ cha0:0 ≤ ahb0:0 ≤ bhc0:0 ≤ chb3:1 ≤ b ^ 3hc3:1 ≤ c ^ 3⊢ a = a * 1 * 1 All goals completed! 🐙 _ ≤ a * b ^ 3 * c ^ 3 := a:ℝb:ℝc:ℝha:1 ≤ ahb:1 ≤ bhc:1 ≤ cha0:0 ≤ ahb0:0 ≤ bhc0:0 ≤ chb3:1 ≤ b ^ 3hc3:1 ≤ c ^ 3⊢ a * 1 * 1 ≤ a * b ^ 3 * c ^ 3 All goals completed! 🐙 a:ℝb:ℝc:ℝha:1 ≤ ahb:1 ≤ bhc:1 ≤ cha0:0 ≤ ahb0:0 ≤ bhc0:0 ≤ chb3:1 ≤ b ^ 3hc3:1 ≤ c ^ 3⊢ b ≤ a * b ^ 3 * c ^ 3a:ℝb:ℝc:ℝha:1 ≤ ahb:1 ≤ bhc:1 ≤ cha0:0 ≤ ahb0:0 ≤ bhc0:0 ≤ chb3:1 ≤ b ^ 3hc3:1 ≤ c ^ 3⊢ c ≤ a * b ^ 3 * c ^ 3 a:ℝb:ℝc:ℝha:1 ≤ ahb:1 ≤ bhc:1 ≤ cha0:0 ≤ ahb0:0 ≤ bhc0:0 ≤ chb3:1 ≤ b ^ 3hc3:1 ≤ c ^ 3⊢ b ≤ a * b ^ 3 * c ^ 3 calc b ≤ b ^ 3 := le_self_pow₀ hb (a:ℝb:ℝc:ℝha:1 ≤ ahb:1 ≤ bhc:1 ≤ cha0:0 ≤ ahb0:0 ≤ bhc0:0 ≤ chb3:1 ≤ b ^ 3hc3:1 ≤ c ^ 3⊢ 3 ≠ 0 All goals completed! 🐙) _ = 1 * b ^ 3 * 1 := a:ℝb:ℝc:ℝha:1 ≤ ahb:1 ≤ bhc:1 ≤ cha0:0 ≤ ahb0:0 ≤ bhc0:0 ≤ chb3:1 ≤ b ^ 3hc3:1 ≤ c ^ 3⊢ b ^ 3 = 1 * b ^ 3 * 1 All goals completed! 🐙 _ ≤ a * b ^ 3 * c ^ 3 := a:ℝb:ℝc:ℝha:1 ≤ ahb:1 ≤ bhc:1 ≤ cha0:0 ≤ ahb0:0 ≤ bhc0:0 ≤ chb3:1 ≤ b ^ 3hc3:1 ≤ c ^ 3⊢ 1 * b ^ 3 * 1 ≤ a * b ^ 3 * c ^ 3 All goals completed! 🐙 a:ℝb:ℝc:ℝha:1 ≤ ahb:1 ≤ bhc:1 ≤ cha0:0 ≤ ahb0:0 ≤ bhc0:0 ≤ chb3:1 ≤ b ^ 3hc3:1 ≤ c ^ 3⊢ c ≤ a * b ^ 3 * c ^ 3 calc c ≤ c ^ 3 := le_self_pow₀ hc (a:ℝb:ℝc:ℝha:1 ≤ ahb:1 ≤ bhc:1 ≤ cha0:0 ≤ ahb0:0 ≤ bhc0:0 ≤ chb3:1 ≤ b ^ 3hc3:1 ≤ c ^ 3⊢ 3 ≠ 0 All goals completed! 🐙) _ = 1 * 1 * c ^ 3 := a:ℝb:ℝc:ℝha:1 ≤ ahb:1 ≤ bhc:1 ≤ cha0:0 ≤ ahb0:0 ≤ bhc0:0 ≤ chb3:1 ≤ b ^ 3hc3:1 ≤ c ^ 3⊢ c ^ 3 = 1 * 1 * c ^ 3 All goals completed! 🐙 _ ≤ a * b ^ 3 * c ^ 3 := a:ℝb:ℝc:ℝha:1 ≤ ahb:1 ≤ bhc:1 ≤ cha0:0 ≤ ahb0:0 ≤ bhc0:0 ≤ chb3:1 ≤ b ^ 3hc3:1 ≤ c ^ 3⊢ 1 * 1 * c ^ 3 ≤ a * b ^ 3 * c ^ 3 All goals completed! 🐙theorem finite_support_norm_triple (W : ℝ → ℂ) (hW : HasCompactSupport W) (X : ℝ) (hX : 0 < X) (F : Ideal O × Ideal O × Ideal O → ℂ) (hzero : ∀ I J H, I = 0 ∨ J = 0 ∨ H = 0 → F (I, J, H) = 0) (hwindow : ∀ I J H, W ((Ideal.absNorm I : ℝ) * (Ideal.absNorm J : ℝ) ^ 3 * (Ideal.absNorm H : ℝ) ^ 3 / X) = 0 → F (I, J, H) = 0) : (Function.support F).Finite := W:ℝ → ℂhW:HasCompactSupport WX:ℝhX:0 < XF:Ideal O × Ideal O × Ideal O → ℂhzero:∀ (I J H : Ideal O), I = 0 ∨ J = 0 ∨ H = 0 → F (I, J, H) = 0hwindow:∀ (I J H : Ideal O), W (↑(absNorm I) * ↑(absNorm J) ^ 3 * ↑(absNorm H) ^ 3 / X) = 0 → F (I, J, H) = 0⊢ (Function.support F).Finite W:ℝ → ℂhW:HasCompactSupport WX:ℝhX:0 < XF:Ideal O × Ideal O × Ideal O → ℂhzero:∀ (I J H : Ideal O), I = 0 ∨ J = 0 ∨ H = 0 → F (I, J, H) = 0hwindow:∀ (I J H : Ideal O), W (↑(absNorm I) * ↑(absNorm J) ^ 3 * ↑(absNorm H) ^ 3 / X) = 0 → F (I, J, H) = 0B:ℝhB:0 < Bhbound:∀ (y : ℝ), W y ≠ 0 → y ≤ B⊢ (Function.support F).Finite W:ℝ → ℂhW:HasCompactSupport WX:ℝhX:0 < XF:Ideal O × Ideal O × Ideal O → ℂhzero:∀ (I J H : Ideal O), I = 0 ∨ J = 0 ∨ H = 0 → F (I, J, H) = 0hwindow:∀ (I J H : Ideal O), W (↑(absNorm I) * ↑(absNorm J) ^ 3 * ↑(absNorm H) ^ 3 / X) = 0 → F (I, J, H) = 0B:ℝhB:0 < Bhbound:∀ (y : ℝ), W y ≠ 0 → y ≤ BM:ℕhM:B * X < ↑M⊢ (Function.support F).Finite W:ℝ → ℂhW:HasCompactSupport WX:ℝhX:0 < XF:Ideal O × Ideal O × Ideal O → ℂhzero:∀ (I J H : Ideal O), I = 0 ∨ J = 0 ∨ H = 0 → F (I, J, H) = 0hwindow:∀ (I J H : Ideal O), W (↑(absNorm I) * ↑(absNorm J) ^ 3 * ↑(absNorm H) ^ 3 / X) = 0 → F (I, J, H) = 0B:ℝhB:0 < Bhbound:∀ (y : ℝ), W y ≠ 0 → y ≤ BM:ℕhM:B * X < ↑MS:Set (Ideal O) := {I | absNorm I ≤ M}⊢ (Function.support F).Finite W:ℝ → ℂhW:HasCompactSupport WX:ℝhX:0 < XF:Ideal O × Ideal O × Ideal O → ℂhzero:∀ (I J H : Ideal O), I = 0 ∨ J = 0 ∨ H = 0 → F (I, J, H) = 0hwindow:∀ (I J H : Ideal O), W (↑(absNorm I) * ↑(absNorm J) ^ 3 * ↑(absNorm H) ^ 3 / X) = 0 → F (I, J, H) = 0B:ℝhB:0 < Bhbound:∀ (y : ℝ), W y ≠ 0 → y ≤ BM:ℕhM:B * X < ↑MS:Set (Ideal O) := {I | absNorm I ≤ M}hS:S.Finite⊢ (Function.support F).Finite W:ℝ → ℂhW:HasCompactSupport WX:ℝhX:0 < XF:Ideal O × Ideal O × Ideal O → ℂhzero:∀ (I J H : Ideal O), I = 0 ∨ J = 0 ∨ H = 0 → F (I, J, H) = 0hwindow:∀ (I J H : Ideal O), W (↑(absNorm I) * ↑(absNorm J) ^ 3 * ↑(absNorm H) ^ 3 / X) = 0 → F (I, J, H) = 0B:ℝhB:0 < Bhbound:∀ (y : ℝ), W y ≠ 0 → y ≤ BM:ℕhM:B * X < ↑MS:Set (Ideal O) := {I | absNorm I ≤ M}hS:S.Finite⊢ Function.support F ⊆ S ×ˢ S ×ˢ S W:ℝ → ℂhW:HasCompactSupport WX:ℝhX:0 < XF:Ideal O × Ideal O × Ideal O → ℂhzero:∀ (I J H : Ideal O), I = 0 ∨ J = 0 ∨ H = 0 → F (I, J, H) = 0hwindow:∀ (I J H : Ideal O), W (↑(absNorm I) * ↑(absNorm J) ^ 3 * ↑(absNorm H) ^ 3 / X) = 0 → F (I, J, H) = 0B:ℝhB:0 < Bhbound:∀ (y : ℝ), W y ≠ 0 → y ≤ BM:ℕhM:B * X < ↑MS:Set (Ideal O) := {I | absNorm I ≤ M}hS:S.FiniteI:Ideal OJ:Ideal OH:Ideal OhF:(I, J, H) ∈ Function.support F⊢ (I, J, H) ∈ S ×ˢ S ×ˢ S W:ℝ → ℂhW:HasCompactSupport WX:ℝhX:0 < XF:Ideal O × Ideal O × Ideal O → ℂhzero:∀ (I J H : Ideal O), I = 0 ∨ J = 0 ∨ H = 0 → F (I, J, H) = 0hwindow:∀ (I J H : Ideal O), W (↑(absNorm I) * ↑(absNorm J) ^ 3 * ↑(absNorm H) ^ 3 / X) = 0 → F (I, J, H) = 0B:ℝhB:0 < Bhbound:∀ (y : ℝ), W y ≠ 0 → y ≤ BM:ℕhM:B * X < ↑MS:Set (Ideal O) := {I | absNorm I ≤ M}hS:S.FiniteI:Ideal OJ:Ideal OH:Ideal OhF:(I, J, H) ∈ Function.support FhF0:F (I, J, H) ≠ 0⊢ (I, J, H) ∈ S ×ˢ S ×ˢ S W:ℝ → ℂhW:HasCompactSupport WX:ℝhX:0 < XF:Ideal O × Ideal O × Ideal O → ℂhzero:∀ (I J H : Ideal O), I = 0 ∨ J = 0 ∨ H = 0 → F (I, J, H) = 0hwindow:∀ (I J H : Ideal O), W (↑(absNorm I) * ↑(absNorm J) ^ 3 * ↑(absNorm H) ^ 3 / X) = 0 → F (I, J, H) = 0B:ℝhB:0 < Bhbound:∀ (y : ℝ), W y ≠ 0 → y ≤ BM:ℕhM:B * X < ↑MS:Set (Ideal O) := {I | absNorm I ≤ M}hS:S.FiniteI:Ideal OJ:Ideal OH:Ideal OhF:(I, J, H) ∈ Function.support FhF0:F (I, J, H) ≠ 0hI:I ≠ 0⊢ (I, J, H) ∈ S ×ˢ S ×ˢ S W:ℝ → ℂhW:HasCompactSupport WX:ℝhX:0 < XF:Ideal O × Ideal O × Ideal O → ℂhzero:∀ (I J H : Ideal O), I = 0 ∨ J = 0 ∨ H = 0 → F (I, J, H) = 0hwindow:∀ (I J H : Ideal O), W (↑(absNorm I) * ↑(absNorm J) ^ 3 * ↑(absNorm H) ^ 3 / X) = 0 → F (I, J, H) = 0B:ℝhB:0 < Bhbound:∀ (y : ℝ), W y ≠ 0 → y ≤ BM:ℕhM:B * X < ↑MS:Set (Ideal O) := {I | absNorm I ≤ M}hS:S.FiniteI:Ideal OJ:Ideal OH:Ideal OhF:(I, J, H) ∈ Function.support FhF0:F (I, J, H) ≠ 0hI:I ≠ 0hJ:J ≠ 0⊢ (I, J, H) ∈ S ×ˢ S ×ˢ S W:ℝ → ℂhW:HasCompactSupport WX:ℝhX:0 < XF:Ideal O × Ideal O × Ideal O → ℂhzero:∀ (I J H : Ideal O), I = 0 ∨ J = 0 ∨ H = 0 → F (I, J, H) = 0hwindow:∀ (I J H : Ideal O), W (↑(absNorm I) * ↑(absNorm J) ^ 3 * ↑(absNorm H) ^ 3 / X) = 0 → F (I, J, H) = 0B:ℝhB:0 < Bhbound:∀ (y : ℝ), W y ≠ 0 → y ≤ BM:ℕhM:B * X < ↑MS:Set (Ideal O) := {I | absNorm I ≤ M}hS:S.FiniteI:Ideal OJ:Ideal OH:Ideal OhF:(I, J, H) ∈ Function.support FhF0:F (I, J, H) ≠ 0hI:I ≠ 0hJ:J ≠ 0hH:H ≠ 0⊢ (I, J, H) ∈ S ×ˢ S ×ˢ S W:ℝ → ℂhW:HasCompactSupport WX:ℝhX:0 < XF:Ideal O × Ideal O × Ideal O → ℂhzero:∀ (I J H : Ideal O), I = 0 ∨ J = 0 ∨ H = 0 → F (I, J, H) = 0hwindow:∀ (I J H : Ideal O), W (↑(absNorm I) * ↑(absNorm J) ^ 3 * ↑(absNorm H) ^ 3 / X) = 0 → F (I, J, H) = 0B:ℝhB:0 < Bhbound:∀ (y : ℝ), W y ≠ 0 → y ≤ BM:ℕhM:B * X < ↑MS:Set (Ideal O) := {I | absNorm I ≤ M}hS:S.FiniteI:Ideal OJ:Ideal OH:Ideal OhF:(I, J, H) ∈ Function.support FhF0:F (I, J, H) ≠ 0hI:I ≠ 0hJ:J ≠ 0hH:H ≠ 0hw:W (↑(absNorm I) * ↑(absNorm J) ^ 3 * ↑(absNorm H) ^ 3 / X) ≠ 0⊢ (I, J, H) ∈ S ×ˢ S ×ˢ S W:ℝ → ℂhW:HasCompactSupport WX:ℝhX:0 < XF:Ideal O × Ideal O × Ideal O → ℂhzero:∀ (I J H : Ideal O), I = 0 ∨ J = 0 ∨ H = 0 → F (I, J, H) = 0hwindow:∀ (I J H : Ideal O), W (↑(absNorm I) * ↑(absNorm J) ^ 3 * ↑(absNorm H) ^ 3 / X) = 0 → F (I, J, H) = 0B:ℝhB:0 < Bhbound:∀ (y : ℝ), W y ≠ 0 → y ≤ BM:ℕhM:B * X < ↑MS:Set (Ideal O) := {I | absNorm I ≤ M}hS:S.FiniteI:Ideal OJ:Ideal OH:Ideal OhF:(I, J, H) ∈ Function.support FhF0:F (I, J, H) ≠ 0hI:I ≠ 0hJ:J ≠ 0hH:H ≠ 0hw:W (↑(absNorm I) * ↑(absNorm J) ^ 3 * ↑(absNorm H) ^ 3 / X) ≠ 0hsize:↑(absNorm I) * ↑(absNorm J) ^ 3 * ↑(absNorm H) ^ 3 ≤ B * X⊢ (I, J, H) ∈ S ×ˢ S ×ˢ S W:ℝ → ℂhW:HasCompactSupport WX:ℝhX:0 < XF:Ideal O × Ideal O × Ideal O → ℂhzero:∀ (I J H : Ideal O), I = 0 ∨ J = 0 ∨ H = 0 → F (I, J, H) = 0hwindow:∀ (I J H : Ideal O), W (↑(absNorm I) * ↑(absNorm J) ^ 3 * ↑(absNorm H) ^ 3 / X) = 0 → F (I, J, H) = 0B:ℝhB:0 < Bhbound:∀ (y : ℝ), W y ≠ 0 → y ≤ BM:ℕhM:B * X < ↑MS:Set (Ideal O) := {I | absNorm I ≤ M}hS:S.FiniteI:Ideal OJ:Ideal OH:Ideal OhF:(I, J, H) ∈ Function.support FhF0:F (I, J, H) ≠ 0hI:I ≠ 0hJ:J ≠ 0hH:H ≠ 0hw:W (↑(absNorm I) * ↑(absNorm J) ^ 3 * ↑(absNorm H) ^ 3 / X) ≠ 0hsize:↑(absNorm I) * ↑(absNorm J) ^ 3 * ↑(absNorm H) ^ 3 ≤ B * Xhb:↑(absNorm I) ≤ ↑(absNorm I) * ↑(absNorm J) ^ 3 * ↑(absNorm H) ^ 3 ∧ ↑(absNorm J) ≤ ↑(absNorm I) * ↑(absNorm J) ^ 3 * ↑(absNorm H) ^ 3 ∧ ↑(absNorm H) ≤ ↑(absNorm I) * ↑(absNorm J) ^ 3 * ↑(absNorm H) ^ 3⊢ (I, J, H) ∈ S ×ˢ S ×ˢ S W:ℝ → ℂhW:HasCompactSupport WX:ℝhX:0 < XF:Ideal O × Ideal O × Ideal O → ℂhzero:∀ (I J H : Ideal O), I = 0 ∨ J = 0 ∨ H = 0 → F (I, J, H) = 0hwindow:∀ (I J H : Ideal O), W (↑(absNorm I) * ↑(absNorm J) ^ 3 * ↑(absNorm H) ^ 3 / X) = 0 → F (I, J, H) = 0B:ℝhB:0 < Bhbound:∀ (y : ℝ), W y ≠ 0 → y ≤ BM:ℕhM:B * X < ↑MS:Set (Ideal O) := {I | absNorm I ≤ M}hS:S.FiniteI:Ideal OJ:Ideal OH:Ideal OhF:(I, J, H) ∈ Function.support FhF0:F (I, J, H) ≠ 0hI:I ≠ 0hJ:J ≠ 0hH:H ≠ 0hw:W (↑(absNorm I) * ↑(absNorm J) ^ 3 * ↑(absNorm H) ^ 3 / X) ≠ 0hsize:↑(absNorm I) * ↑(absNorm J) ^ 3 * ↑(absNorm H) ^ 3 ≤ B * Xhb:↑(absNorm I) ≤ ↑(absNorm I) * ↑(absNorm J) ^ 3 * ↑(absNorm H) ^ 3 ∧ ↑(absNorm J) ≤ ↑(absNorm I) * ↑(absNorm J) ^ 3 * ↑(absNorm H) ^ 3 ∧ ↑(absNorm H) ≤ ↑(absNorm I) * ↑(absNorm J) ^ 3 * ↑(absNorm H) ^ 3hIM:absNorm I ≤ M⊢ (I, J, H) ∈ S ×ˢ S ×ˢ S W:ℝ → ℂhW:HasCompactSupport WX:ℝhX:0 < XF:Ideal O × Ideal O × Ideal O → ℂhzero:∀ (I J H : Ideal O), I = 0 ∨ J = 0 ∨ H = 0 → F (I, J, H) = 0hwindow:∀ (I J H : Ideal O), W (↑(absNorm I) * ↑(absNorm J) ^ 3 * ↑(absNorm H) ^ 3 / X) = 0 → F (I, J, H) = 0B:ℝhB:0 < Bhbound:∀ (y : ℝ), W y ≠ 0 → y ≤ BM:ℕhM:B * X < ↑MS:Set (Ideal O) := {I | absNorm I ≤ M}hS:S.FiniteI:Ideal OJ:Ideal OH:Ideal OhF:(I, J, H) ∈ Function.support FhF0:F (I, J, H) ≠ 0hI:I ≠ 0hJ:J ≠ 0hH:H ≠ 0hw:W (↑(absNorm I) * ↑(absNorm J) ^ 3 * ↑(absNorm H) ^ 3 / X) ≠ 0hsize:↑(absNorm I) * ↑(absNorm J) ^ 3 * ↑(absNorm H) ^ 3 ≤ B * Xhb:↑(absNorm I) ≤ ↑(absNorm I) * ↑(absNorm J) ^ 3 * ↑(absNorm H) ^ 3 ∧ ↑(absNorm J) ≤ ↑(absNorm I) * ↑(absNorm J) ^ 3 * ↑(absNorm H) ^ 3 ∧ ↑(absNorm H) ≤ ↑(absNorm I) * ↑(absNorm J) ^ 3 * ↑(absNorm H) ^ 3hIM:absNorm I ≤ MhJM:absNorm J ≤ M⊢ (I, J, H) ∈ S ×ˢ S ×ˢ S W:ℝ → ℂhW:HasCompactSupport WX:ℝhX:0 < XF:Ideal O × Ideal O × Ideal O → ℂhzero:∀ (I J H : Ideal O), I = 0 ∨ J = 0 ∨ H = 0 → F (I, J, H) = 0hwindow:∀ (I J H : Ideal O), W (↑(absNorm I) * ↑(absNorm J) ^ 3 * ↑(absNorm H) ^ 3 / X) = 0 → F (I, J, H) = 0B:ℝhB:0 < Bhbound:∀ (y : ℝ), W y ≠ 0 → y ≤ BM:ℕhM:B * X < ↑MS:Set (Ideal O) := {I | absNorm I ≤ M}hS:S.FiniteI:Ideal OJ:Ideal OH:Ideal OhF:(I, J, H) ∈ Function.support FhF0:F (I, J, H) ≠ 0hI:I ≠ 0hJ:J ≠ 0hH:H ≠ 0hw:W (↑(absNorm I) * ↑(absNorm J) ^ 3 * ↑(absNorm H) ^ 3 / X) ≠ 0hsize:↑(absNorm I) * ↑(absNorm J) ^ 3 * ↑(absNorm H) ^ 3 ≤ B * Xhb:↑(absNorm I) ≤ ↑(absNorm I) * ↑(absNorm J) ^ 3 * ↑(absNorm H) ^ 3 ∧ ↑(absNorm J) ≤ ↑(absNorm I) * ↑(absNorm J) ^ 3 * ↑(absNorm H) ^ 3 ∧ ↑(absNorm H) ≤ ↑(absNorm I) * ↑(absNorm J) ^ 3 * ↑(absNorm H) ^ 3hIM:absNorm I ≤ MhJM:absNorm J ≤ MhHM:absNorm H ≤ M⊢ (I, J, H) ∈ S ×ˢ S ×ˢ S All goals completed! 🐙endsectionopen ActualEisensteinCubic ConcreteTraceCRTdef primeSupport (I : Ideal O) : Finset (Ideal O) := (UniqueFactorizationMonoid.normalizedFactors I).toFinsetabbrev PrimeIndex (I : Ideal O) := {P : Ideal O // P ∈ primeSupport I}instance primeIndexMaximal (I : Ideal O) (P : PrimeIndex I) : P.val.IsMaximal := I:Ideal OP:PrimeIndex I⊢ (↑P).IsMaximal I:Ideal OP:PrimeIndex Ihp:Prime ↑P⊢ (↑P).IsMaximal All goals completed! 🐙theorem primeIndex_good (I : Ideal O) (hI : primaryGenerator I ≠ 0) (P : PrimeIndex I) : lambda ∉ P.val := (primaryPrime_spec P.val (primaryPrime_factor_ne_zero I P.val hI (Multiset.mem_toFinset.mp P.property))).2.1theorem primeIndex_le (I : Ideal O) (hI : I ≠ 0) (P : PrimeIndex I) : I ≤ P.val := ((Ideal.mem_normalizedFactors_iff hI).mp (Multiset.mem_toFinset.mp P.property)).2def cubicRow (I : Ideal O) (hI : primaryGenerator I ≠ 0) (x : O ⧸ I) : ℂ := ∏ P : PrimeIndex I, (canonicalSextic P.val (primeIndex_good I hI P) ^ 2) (Ideal.Quotient.factor (primeIndex_le I (primaryGenerator_ne_zero_ideal I hI) P) x)def gaussTwo (I : Ideal O) (hI : primaryGenerator I ≠ 0) : ℂ := I:Ideal OhI:primaryGenerator I ≠ 0⊢ ℂ I:Ideal OhI:primaryGenerator I ≠ 0n:O := primaryGenerator I⊢ ℂ I:Ideal OhI:primaryGenerator I ≠ 0n:O := primaryGenerator Ithis:Finite (O ⧸ span {n}) := ···⊢ ℂ I:Ideal OhI:primaryGenerator I ≠ 0n:O := primaryGenerator Ithis✝:Finite (O ⧸ span {n}) := ···this:Fintype (O ⧸ span {n}) := Fintype.ofFinite (O ⧸ span {n})⊢ ℂ I:Ideal OhI:primaryGenerator I ≠ 0n:O := primaryGenerator Ithis✝:Finite (O ⧸ span {n}) := ···this:Fintype (O ⧸ span {n}) := Fintype.ofFinite (O ⧸ span {n})e:O ⧸ span {primaryGenerator I} ≃+* O ⧸ I := quotEquivOfEq ⋯⊢ ℂ I:Ideal OhI:primaryGenerator I ≠ 0n:O := primaryGenerator Ithis✝:Finite (O ⧸ span {n}) := ···this:Fintype (O ⧸ span {n}) := Fintype.ofFinite (O ⧸ span {n})e:O ⧸ span {primaryGenerator I} ≃+* O ⧸ I := quotEquivOfEq ⋯ψ:AddChar (EisensteinEmbedding.O ⧸ span {n}) ℂ := eisTraceModChar ShortDraftTrace.breveE ConcreteBreveE.breveE_period_coordinates n hI⊢ ℂ All goals completed! 🐙def squarefreeGaussCoefficient (I : Ideal O) : ℂ := if h : Squarefree I ∧ primaryGenerator I ≠ 0 then star (FiniteGaussPhase.angularFactor (primaryGenerator I)) * gaussTwo I h.2 else 0@[simp] theorem squarefreeGaussCoefficient_zero : squarefreeGaussCoefficient 0 = 0 := ⊢ squarefreeGaussCoefficient 0 = 0 All goals completed! 🐙@[simp] theorem squarefreeGaussCoefficient_bot : squarefreeGaussCoefficient ⊥ = 0 := squarefreeGaussCoefficient_zerotheorem squarefreeGaussCoefficient_eq (I : Ideal O) (hs : Squarefree I) (hI : primaryGenerator I ≠ 0) : squarefreeGaussCoefficient I = star (FiniteGaussPhase.angularFactor (primaryGenerator I)) * gaussTwo I hI := I:Ideal Ohs:Squarefree IhI:primaryGenerator I ≠ 0⊢ squarefreeGaussCoefficient I = star (FiniteGaussPhase.angularFactor (primaryGenerator I)) * gaussTwo I hI All goals completed! 🐙theorem angularFactor_mul (a b : O) : FiniteGaussPhase.angularFactor (a * b) = FiniteGaussPhase.angularFactor a * FiniteGaussPhase.angularFactor b := a:Ob:O⊢ FiniteGaussPhase.angularFactor (a * b) = FiniteGaussPhase.angularFactor a * FiniteGaussPhase.angularFactor b a:Ob:O⊢ eisEmbedding a * eisEmbedding b / (↑‖eisEmbedding a‖ * ↑‖eisEmbedding b‖) = eisEmbedding a / ↑‖eisEmbedding a‖ * (eisEmbedding b / ↑‖eisEmbedding b‖) All goals completed! 🐙def cubeWeight (Ψ : O →* ℂ) : Ideal O →* ℂ where toFun I := star (FiniteGaussPhase.angularFactor (primaryGenerator I)) ^ 3 * Ψ (primaryGenerator I) ^ 3 / (Ideal.absNorm I : ℂ) map_one' := Ψ:O →* ℂ⊢ star (FiniteGaussPhase.angularFactor (primaryGenerator 1)) ^ 3 * Ψ (primaryGenerator 1) ^ 3 / ↑(absNorm 1) = 1 All goals completed! 🐙 map_mul' I J := Ψ:O →* ℂI:Ideal OJ:Ideal O⊢ star (FiniteGaussPhase.angularFactor (primaryGenerator (I * J))) ^ 3 * Ψ (primaryGenerator (I * J)) ^ 3 / ↑(absNorm (I * J)) = star (FiniteGaussPhase.angularFactor (primaryGenerator I)) ^ 3 * Ψ (primaryGenerator I) ^ 3 / ↑(absNorm I) * (star (FiniteGaussPhase.angularFactor (primaryGenerator J)) ^ 3 * Ψ (primaryGenerator J) ^ 3 / ↑(absNorm J)) Ψ:O →* ℂI:Ideal OJ:Ideal O⊢ star (FiniteGaussPhase.angularFactor (primaryGenerator J)) ^ 3 * star (FiniteGaussPhase.angularFactor (primaryGenerator I)) ^ 3 * (Ψ (primaryGenerator I) ^ 3 * Ψ (primaryGenerator J) ^ 3) / (↑(absNorm I) * ↑(absNorm J)) = star (FiniteGaussPhase.angularFactor (primaryGenerator I)) ^ 3 * Ψ (primaryGenerator I) ^ 3 / ↑(absNorm I) * (star (FiniteGaussPhase.angularFactor (primaryGenerator J)) ^ 3 * Ψ (primaryGenerator J) ^ 3 / ↑(absNorm J)) All goals completed! 🐙@[simp] theorem cubeWeight_zero (Ψ : O →* ℂ) : cubeWeight Ψ 0 = 0 := Ψ:O →* ℂ⊢ (cubeWeight Ψ) 0 = 0 All goals completed! 🐙@[simp] theorem cubeWeight_bot (Ψ : O →* ℂ) : cubeWeight Ψ ⊥ = 0 := cubeWeight_zero Ψdef columnWeight (Ψ : O →* ℂ) (I : Ideal O) : ℂ := squarefreeGaussCoefficient I * Ψ (primaryGenerator I)@[simp] theorem columnWeight_zero (Ψ : O →* ℂ) : columnWeight Ψ 0 = 0 := Ψ:O →* ℂ⊢ columnWeight Ψ 0 = 0 All goals completed! 🐙@[simp] theorem columnWeight_bot (Ψ : O →* ℂ) : columnWeight Ψ ⊥ = 0 := columnWeight_zero Ψdef Vstar (W : ℝ → ℂ) (y : ℝ) : ℂ := (Real.sqrt y : ℂ) * W ydef summand (Ψ : O →* ℂ) (W : ℝ → ℂ) (X : ℝ) (I J : Ideal O) : ℂ := columnWeight Ψ I / (Real.sqrt (Ideal.absNorm I : ℝ) : ℂ) * cubeWeight Ψ J * Vstar W ((Ideal.absNorm I : ℝ) * (Ideal.absNorm J : ℝ) ^ 3 / X)def completedT (Ψ : O →* ℂ) (W : ℝ → ℂ) (X : ℝ) : ℂ := ∑' I : Ideal O, ∑' J : Ideal O, summand Ψ W X I Jtheorem summand_zero_left (Ψ : O →* ℂ) (W : ℝ → ℂ) (X : ℝ) (J : Ideal O) : summand Ψ W X 0 J = 0 := Ψ:O →* ℂW:ℝ → ℂX:ℝJ:Ideal O⊢ summand Ψ W X 0 J = 0 All goals completed! 🐙theorem summand_zero_right (Ψ : O →* ℂ) (W : ℝ → ℂ) (X : ℝ) (I : Ideal O) : summand Ψ W X I 0 = 0 := Ψ:O →* ℂW:ℝ → ℂX:ℝI:Ideal O⊢ summand Ψ W X I 0 = 0 All goals completed! 🐙theorem summand_zero_window (Ψ : O →* ℂ) (W : ℝ → ℂ) (X : ℝ) (I J : Ideal O) (h : W ((Ideal.absNorm I : ℝ) * (Ideal.absNorm J : ℝ) ^ 3 / X) = 0) : summand Ψ W X I J = 0 := Ψ:O →* ℂW:ℝ → ℂX:ℝI:Ideal OJ:Ideal Oh:W (↑(absNorm I) * ↑(absNorm J) ^ 3 / X) = 0⊢ summand Ψ W X I J = 0 All goals completed! 🐙theorem cubicRow_mk (I : Ideal O) (hI : primaryGenerator I ≠ 0) (a : O) : cubicRow I hI (Ideal.Quotient.mk I a) = ∏ P : PrimeIndex I, (canonicalSextic P.val (primeIndex_good I hI P) ^ 2) (Ideal.Quotient.mk P.val a) := I:Ideal OhI:primaryGenerator I ≠ 0a:O⊢ cubicRow I hI ((Ideal.Quotient.mk I) a) = ∏ P, (canonicalSextic ↑P ⋯ ^ 2) ((Ideal.Quotient.mk ↑P) a) All goals completed! 🐙theorem cubicRow_zero_iff (I : Ideal O) (hI : primaryGenerator I ≠ 0) (a : O) : cubicRow I hI (Ideal.Quotient.mk I a) = 0 ↔ ∃ P ∈ primeSupport I, a ∈ P := I:Ideal OhI:primaryGenerator I ≠ 0a:O⊢ cubicRow I hI ((Ideal.Quotient.mk I) a) = 0 ↔ ∃ P ∈ primeSupport I, a ∈ P I:Ideal OhI:primaryGenerator I ≠ 0a:O⊢ (∃ a_1 ∈ Finset.univ, (canonicalSextic ↑a_1 ⋯ ^ 2) ((Ideal.Quotient.mk ↑a_1) a) = 0) ↔ ∃ P ∈ primeSupport I, a ∈ P I:Ideal OhI:primaryGenerator I ≠ 0a:Ohlocal:∀ (P : PrimeIndex I), (canonicalSextic ↑P ⋯ ^ 2) ((Ideal.Quotient.mk ↑P) a) = 0 ↔ a ∈ ↑P⊢ (∃ a_1 ∈ Finset.univ, (canonicalSextic ↑a_1 ⋯ ^ 2) ((Ideal.Quotient.mk ↑a_1) a) = 0) ↔ ∃ P ∈ primeSupport I, a ∈ P I:Ideal OhI:primaryGenerator I ≠ 0a:Ohlocal:∀ (P : PrimeIndex I), (canonicalSextic ↑P ⋯ ^ 2) ((Ideal.Quotient.mk ↑P) a) = 0 ↔ a ∈ ↑P⊢ (∃ a_1 ∈ Finset.univ, (canonicalSextic ↑a_1 ⋯ ^ 2) ((Ideal.Quotient.mk ↑a_1) a) = 0) → ∃ P ∈ primeSupport I, a ∈ PI:Ideal OhI:primaryGenerator I ≠ 0a:Ohlocal:∀ (P : PrimeIndex I), (canonicalSextic ↑P ⋯ ^ 2) ((Ideal.Quotient.mk ↑P) a) = 0 ↔ a ∈ ↑P⊢ (∃ P ∈ primeSupport I, a ∈ P) → ∃ a_2 ∈ Finset.univ, (canonicalSextic ↑a_2 ⋯ ^ 2) ((Ideal.Quotient.mk ↑a_2) a) = 0 I:Ideal OhI:primaryGenerator I ≠ 0a:Ohlocal:∀ (P : PrimeIndex I), (canonicalSextic ↑P ⋯ ^ 2) ((Ideal.Quotient.mk ↑P) a) = 0 ↔ a ∈ ↑P⊢ (∃ a_1 ∈ Finset.univ, (canonicalSextic ↑a_1 ⋯ ^ 2) ((Ideal.Quotient.mk ↑a_1) a) = 0) → ∃ P ∈ primeSupport I, a ∈ P I:Ideal OhI:primaryGenerator I ≠ 0a:Ohlocal:∀ (P : PrimeIndex I), (canonicalSextic ↑P ⋯ ^ 2) ((Ideal.Quotient.mk ↑P) a) = 0 ↔ a ∈ ↑PP:PrimeIndex Ileft✝:P ∈ Finset.univhP:(canonicalSextic ↑P ⋯ ^ 2) ((Ideal.Quotient.mk ↑P) a) = 0⊢ ∃ P ∈ primeSupport I, a ∈ P All goals completed! 🐙 I:Ideal OhI:primaryGenerator I ≠ 0a:Ohlocal:∀ (P : PrimeIndex I), (canonicalSextic ↑P ⋯ ^ 2) ((Ideal.Quotient.mk ↑P) a) = 0 ↔ a ∈ ↑P⊢ (∃ P ∈ primeSupport I, a ∈ P) → ∃ a_2 ∈ Finset.univ, (canonicalSextic ↑a_2 ⋯ ^ 2) ((Ideal.Quotient.mk ↑a_2) a) = 0 I:Ideal OhI:primaryGenerator I ≠ 0a:Ohlocal:∀ (P : PrimeIndex I), (canonicalSextic ↑P ⋯ ^ 2) ((Ideal.Quotient.mk ↑P) a) = 0 ↔ a ∈ ↑PP:Ideal OhP:P ∈ primeSupport Iha:a ∈ P⊢ ∃ a_1 ∈ Finset.univ, (canonicalSextic ↑a_1 ⋯ ^ 2) ((Ideal.Quotient.mk ↑a_1) a) = 0 All goals completed! 🐙theorem primaryGenerator_norm (I : Ideal O) (hI : primaryGenerator I ≠ 0) : ‖eisEmbedding (primaryGenerator I)‖ = Real.sqrt (Ideal.absNorm I : ℝ) := I:Ideal OhI:primaryGenerator I ≠ 0⊢ ‖eisEmbedding (primaryGenerator I)‖ = √↑(absNorm I) All goals completed! 🐙theorem cubeWeight_span (Ψ : O →* ℂ) (n : O) (hn : n ≠ 0) (hp : lambda ^ 2 ∣ n - 1) : cubeWeight Ψ (Ideal.span {n}) = star (FiniteGaussPhase.angularFactor n) ^ 3 * Ψ n ^ 3 / (ShortDraftLatticeCount.qNat n : ℂ) := Ψ:O →* ℂn:Ohn:n ≠ 0hp:lambda ^ 2 ∣ n - 1⊢ (cubeWeight Ψ) (span {n}) = star (FiniteGaussPhase.angularFactor n) ^ 3 * Ψ n ^ 3 / ↑(qNat n) Ψ:O →* ℂn:Ohn:n ≠ 0hp:lambda ^ 2 ∣ n - 1⊢ star (FiniteGaussPhase.angularFactor (primaryGenerator (span {n}))) ^ 3 * Ψ (primaryGenerator (span {n})) ^ 3 / ↑(absNorm (span {n})) = star (FiniteGaussPhase.angularFactor n) ^ 3 * Ψ n ^ 3 / ↑(qNat n) All goals completed! 🐙theorem columnWeight_eq (Ψ : O →* ℂ) (I : Ideal O) (hs : Squarefree I) (hI : primaryGenerator I ≠ 0) : columnWeight Ψ I = star (FiniteGaussPhase.angularFactor (primaryGenerator I)) * gaussTwo I hI * Ψ (primaryGenerator I) := Ψ:O →* ℂI:Ideal Ohs:Squarefree IhI:primaryGenerator I ≠ 0⊢ columnWeight Ψ I = star (FiniteGaussPhase.angularFactor (primaryGenerator I)) * gaussTwo I hI * Ψ (primaryGenerator I) All goals completed! 🐙theorem columnWeight_zero_of_mask (Ψ : O →* ℂ) (I : Ideal O) (h : Ψ (primaryGenerator I) = 0) : columnWeight Ψ I = 0 := Ψ:O →* ℂI:Ideal Oh:Ψ (primaryGenerator I) = 0⊢ columnWeight Ψ I = 0 All goals completed! 🐙theorem cubeWeight_zero_of_mask (Ψ : O →* ℂ) (I : Ideal O) (h : Ψ (primaryGenerator I) = 0) : cubeWeight Ψ I = 0 := Ψ:O →* ℂI:Ideal Oh:Ψ (primaryGenerator I) = 0⊢ (cubeWeight Ψ) I = 0 Ψ:O →* ℂI:Ideal Oh:Ψ (primaryGenerator I) = 0⊢ star (FiniteGaussPhase.angularFactor (primaryGenerator I)) ^ 3 * Ψ (primaryGenerator I) ^ 3 / ↑(absNorm I) = 0 All goals completed! 🐙endopen ActualEisensteinCubicopen IdealMobiusDivisorSum (idealDivisors mem_idealDivisors sum_moebius_divisors)def MulFiber (B : Ideal O) := {p : Ideal O × Ideal O // p.1 * p.2 = B}def mulFiberDivisorEquiv (B : Ideal O) (hB : B ≠ 0) : MulFiber B ≃ {D : Ideal O // D ∈ idealDivisors B} := B:Ideal OhB:B ≠ 0⊢ MulFiber B ≃ ↥(idealDivisors B) B:Ideal OhB:B ≠ 0f:MulFiber B → ↥(idealDivisors B) := fun p => ⟨(↑p).1, ⋯⟩⊢ MulFiber B ≃ ↥(idealDivisors B) B:Ideal OhB:B ≠ 0f:MulFiber B → ↥(idealDivisors B) := fun p => ⟨(↑p).1, ⋯⟩⊢ Function.Bijective f B:Ideal OhB:B ≠ 0f:MulFiber B → ↥(idealDivisors B) := fun p => ⟨(↑p).1, ⋯⟩⊢ Function.Injective fB:Ideal OhB:B ≠ 0f:MulFiber B → ↥(idealDivisors B) := fun p => ⟨(↑p).1, ⋯⟩⊢ Function.Surjective f B:Ideal OhB:B ≠ 0f:MulFiber B → ↥(idealDivisors B) := fun p => ⟨(↑p).1, ⋯⟩⊢ Function.Injective f B:Ideal OhB:B ≠ 0f:MulFiber B → ↥(idealDivisors B) := fun p => ⟨(↑p).1, ⋯⟩p:MulFiber Bq:MulFiber Bhpq:f p = f q⊢ p = q B:Ideal OhB:B ≠ 0f:MulFiber B → ↥(idealDivisors B) := fun p => ⟨(↑p).1, ⋯⟩p:MulFiber Bq:MulFiber Bhpq:f p = f qhfst:(↑p).1 = (↑q).1⊢ p = q B:Ideal OhB:B ≠ 0f:MulFiber B → ↥(idealDivisors B) := fun p => ⟨(↑p).1, ⋯⟩p:MulFiber Bq:MulFiber Bhpq:f p = f qhfst:(↑p).1 = (↑q).1⊢ ↑p = ↑q B:Ideal OhB:B ≠ 0f:MulFiber B → ↥(idealDivisors B) := fun p => ⟨(↑p).1, ⋯⟩p:MulFiber Bq:MulFiber Bhpq:f p = f qhfst:(↑p).1 = (↑q).1⊢ (↑p).2 = (↑q).2 B:Ideal OhB:B ≠ 0f:MulFiber B → ↥(idealDivisors B) := fun p => ⟨(↑p).1, ⋯⟩p:MulFiber Bq:MulFiber Bhpq:f p = f qhfst:(↑p).1 = (↑q).1hn:(↑p).1 ≠ 0⊢ (↑p).2 = (↑q).2 B:Ideal OhB:B ≠ 0f:MulFiber B → ↥(idealDivisors B) := fun p => ⟨(↑p).1, ⋯⟩p:MulFiber Bq:MulFiber Bhpq:f p = f qhfst:(↑p).1 = (↑q).1hn:(↑p).1 ≠ 0⊢ (↑p).1 * (↑p).2 = (↑p).1 * (↑q).2 All goals completed! 🐙 B:Ideal OhB:B ≠ 0f:MulFiber B → ↥(idealDivisors B) := fun p => ⟨(↑p).1, ⋯⟩⊢ Function.Surjective f B:Ideal OhB:B ≠ 0f:MulFiber B → ↥(idealDivisors B) := fun p => ⟨(↑p).1, ⋯⟩D:↥(idealDivisors B)⊢ ∃ a, f a = D B:Ideal OhB:B ≠ 0f:MulFiber B → ↥(idealDivisors B) := fun p => ⟨(↑p).1, ⋯⟩D:↥(idealDivisors B)J:Ideal IdealMobiusDivisorSum.OhJ:B = ↑D * J⊢ ∃ a, f a = D All goals completed! 🐙theorem mulFiber_moebius_sum (B : Ideal O) (hB : B ≠ 0) : (∑' p : MulFiber B, (UniqueFactorizationMonoid.moebius p.val.1 : ℂ)) = if B = 1 then 1 else 0 := B:Ideal OhB:B ≠ 0⊢ ∑' (p : MulFiber B), ↑(moebius (↑p).1) = if B = 1 then 1 else 0 B:Ideal OhB:B ≠ 0e:MulFiber B ≃ ↥(idealDivisors B) := mulFiberDivisorEquiv B hB⊢ ∑' (p : MulFiber B), ↑(moebius (↑p).1) = if B = 1 then 1 else 0 calc _ = ∑' D : {D : Ideal O // D ∈ idealDivisors B}, (UniqueFactorizationMonoid.moebius D.val : ℂ) := B:Ideal OhB:B ≠ 0e:MulFiber B ≃ ↥(idealDivisors B) := mulFiberDivisorEquiv B hB⊢ ∑' (p : MulFiber B), ↑(moebius (↑p).1) = ∑' (D : ↥(idealDivisors B)), ↑(moebius ↑D) All goals completed! 🐙 _ = ∑ D ∈ idealDivisors B, (UniqueFactorizationMonoid.moebius D : ℂ) := B:Ideal OhB:B ≠ 0e:MulFiber B ≃ ↥(idealDivisors B) := mulFiberDivisorEquiv B hB⊢ ∑' (D : ↥(idealDivisors B)), ↑(moebius ↑D) = ∑ D ∈ idealDivisors B, ↑(moebius D) B:Ideal OhB:B ≠ 0e:MulFiber B ≃ ↥(idealDivisors B) := mulFiberDivisorEquiv B hB⊢ ∑ b, ↑(moebius ↑b) = ∑ D ∈ idealDivisors B, ↑(moebius D) All goals completed! 🐙 _ = if B = 1 then 1 else 0 := B:Ideal OhB:B ≠ 0e:MulFiber B ≃ ↥(idealDivisors B) := mulFiberDivisorEquiv B hB⊢ ∑ D ∈ idealDivisors B, ↑(moebius D) = if B = 1 then 1 else 0 All goals completed! 🐙theorem ideal_cube_convolution (c : Ideal O →* ℂ) (hc0 : c 0 = 0) (f : Ideal O → ℂ) (hfinite : (Function.support (fun p : Ideal O × Ideal O => (UniqueFactorizationMonoid.moebius p.1 : ℂ) * c (p.1 * p.2) * f (p.1 * p.2))).Finite) : (∑' H : Ideal O, ∑' J : Ideal O, (UniqueFactorizationMonoid.moebius H : ℂ) * c (H * J) * f (H * J)) = f 1 := c:Ideal O →* ℂhc0:c 0 = 0f:Ideal O → ℂhfinite:(Function.support fun p => ↑(moebius p.1) * c (p.1 * p.2) * f (p.1 * p.2)).Finite⊢ ∑' (H : Ideal O) (J : Ideal O), ↑(moebius H) * c (H * J) * f (H * J) = f 1 c:Ideal O →* ℂhc0:c 0 = 0f:Ideal O → ℂhfinite:(Function.support fun p => ↑(moebius p.1) * c (p.1 * p.2) * f (p.1 * p.2)).FiniteF:Ideal O × Ideal O → ℂ := fun p => ↑(moebius p.1) * c (p.1 * p.2) * f (p.1 * p.2)⊢ ∑' (H : Ideal O) (J : Ideal O), ↑(moebius H) * c (H * J) * f (H * J) = f 1 c:Ideal O →* ℂhc0:c 0 = 0f:Ideal O → ℂhfinite:(Function.support fun p => ↑(moebius p.1) * c (p.1 * p.2) * f (p.1 * p.2)).FiniteF:Ideal O × Ideal O → ℂ := fun p => ↑(moebius p.1) * c (p.1 * p.2) * f (p.1 * p.2)hF:Summable F⊢ ∑' (H : Ideal O) (J : Ideal O), ↑(moebius H) * c (H * J) * f (H * J) = f 1 c:Ideal O →* ℂhc0:c 0 = 0f:Ideal O → ℂhfinite:(Function.support fun p => ↑(moebius p.1) * c (p.1 * p.2) * f (p.1 * p.2)).FiniteF:Ideal O × Ideal O → ℂ := fun p => ↑(moebius p.1) * c (p.1 * p.2) * f (p.1 * p.2)hF:Summable Fhfiber:∀ (B : Ideal O), ∑' (p : MulFiber B), F ↑p = if B = 1 then f 1 else 0⊢ ∑' (H : Ideal O) (J : Ideal O), ↑(moebius H) * c (H * J) * f (H * J) = f 1 c:Ideal O →* ℂhc0:c 0 = 0f:Ideal O → ℂhfinite:(Function.support fun p => ↑(moebius p.1) * c (p.1 * p.2) * f (p.1 * p.2)).FiniteF:Ideal O × Ideal O → ℂ := fun p => ↑(moebius p.1) * c (p.1 * p.2) * f (p.1 * p.2)hF:Summable Fhfiber:∀ (B : Ideal O), ∑' (p : MulFiber B), F ↑p = if B = 1 then f 1 else 0hs:HasSum (fun c => ∑' (b : ↑((fun p => p.1 * p.2) ⁻¹' {c})), F ↑b) (∑' (b : Ideal O × Ideal O), F b)⊢ ∑' (H : Ideal O) (J : Ideal O), ↑(moebius H) * c (H * J) * f (H * J) = f 1 c:Ideal O →* ℂhc0:c 0 = 0f:Ideal O → ℂhfinite:(Function.support fun p => ↑(moebius p.1) * c (p.1 * p.2) * f (p.1 * p.2)).FiniteF:Ideal O × Ideal O → ℂ := fun p => ↑(moebius p.1) * c (p.1 * p.2) * f (p.1 * p.2)hF:Summable Fhfiber:∀ (B : Ideal O), ∑' (p : MulFiber B), F ↑p = if B = 1 then f 1 else 0hs:HasSum (fun B => ∑' (p : MulFiber B), F ↑p) (∑' (p : Ideal O × Ideal O), F p)⊢ ∑' (H : Ideal O) (J : Ideal O), ↑(moebius H) * c (H * J) * f (H * J) = f 1 simp_rw c:Ideal O →* ℂhc0:c 0 = 0f:Ideal O → ℂhfinite:(Function.support fun p => ↑(moebius p.1) * c (p.1 * p.2) * f (p.1 * p.2)).FiniteF:Ideal O × Ideal O → ℂ := fun p => ↑(moebius p.1) * c (p.1 * p.2) * f (p.1 * p.2)hF:Summable Fhfiber:∀ (B : Ideal O), ∑' (p : MulFiber B), F ↑p = if B = 1 then f 1 else 0hs:HasSum (fun B => ∑' (p : MulFiber B), F ↑p) (∑' (p : Ideal O × Ideal O), F p)⊢ ∑' (H : Ideal O) (J : Ideal O), ↑(moebius H) * c (H * J) * f (H * J) = f 1c:Ideal O →* ℂhc0:c 0 = 0f:Ideal O → ℂhfinite:(Function.support fun p => ↑(moebius p.1) * c (p.1 * p.2) * f (p.1 * p.2)).FiniteF:Ideal O × Ideal O → ℂ := fun p => ↑(moebius p.1) * c (p.1 * p.2) * f (p.1 * p.2)hF:Summable Fhfiber:∀ (B : Ideal O), ∑' (p : MulFiber B), F ↑p = if B = 1 then f 1 else 0hs:HasSum (fun B => if B = 1 then f 1 else 0) (∑' (p : Ideal O × Ideal O), F p)⊢ ∑' (H : Ideal O) (J : Ideal O), ↑(moebius H) * c (H * J) * f (H * J) = f 1] at hs c:Ideal O →* ℂhc0:c 0 = 0f:Ideal O → ℂhfinite:(Function.support fun p => ↑(moebius p.1) * c (p.1 * p.2) * f (p.1 * p.2)).FiniteF:Ideal O × Ideal O → ℂ := fun p => ↑(moebius p.1) * c (p.1 * p.2) * f (p.1 * p.2)hF:Summable Fhfiber:∀ (B : Ideal O), ∑' (p : MulFiber B), F ↑p = if B = 1 then f 1 else 0hs:HasSum (fun B => if B = 1 then f 1 else 0) (∑' (p : Ideal O × Ideal O), F p)hsum:∑' (p : Ideal O × Ideal O), F p = f 1⊢ ∑' (H : Ideal O) (J : Ideal O), ↑(moebius H) * c (H * J) * f (H * J) = f 1 c:Ideal O →* ℂhc0:c 0 = 0f:Ideal O → ℂhfinite:(Function.support fun p => ↑(moebius p.1) * c (p.1 * p.2) * f (p.1 * p.2)).FiniteF:Ideal O × Ideal O → ℂ := fun p => ↑(moebius p.1) * c (p.1 * p.2) * f (p.1 * p.2)hF:Summable Fhfiber:∀ (B : Ideal O), ∑' (p : MulFiber B), F ↑p = if B = 1 then f 1 else 0hs:HasSum (fun B => if B = 1 then f 1 else 0) (∑' (p : Ideal O × Ideal O), F p)hsum:∑' (p : Ideal O × Ideal O), F p = f 1⊢ ∑' (p : Ideal O × Ideal O), F p = f 1 All goals completed! 🐙end CompletedGaussendend OAI