Skip to content
import OAI.NumberTheory.DirichletL.GaussSum.CubicNormalizationnamespace OAInoncomputable sectionopen scoped BigOperatorsopen MulChar AddCharopen scoped BigOperatorsopen Filter Asymptotics MeasureTheoryopen scoped Topologyopen MeasureTheory Realopen scoped FourierTransform SchwartzMapopen Finset Complexopen scoped Classicalopen scoped Classicalnamespace ActualEisensteinCubicsectionopen EisensteinEmbedding ConcreteTraceCRT PrimitiveTracenoncomputable def breveGamma1 (P : Ideal O) [P.IsMaximal]
(hgood : lambda ∉ P) (p : O) (hP : P = Ideal.span {p})
(hp : p ≠ 0) : ℂ :=
gaussSum (canonicalSextic P hgood)
(hP.symm ▸ eisTraceModChar ShortDraftTrace.breveE
ConcreteBreveE.breveE_period_coordinates p hp) /
(‖eisEmbedding p‖ : ℂ)noncomputable def breveGamma3 (P : Ideal O) [P.IsMaximal]
(hgood : lambda ∉ P) (p : O) (hP : P = Ideal.span {p})
(hp : p ≠ 0) : ℂ :=
gaussSum (canonicalSextic P hgood ^ 3)
(hP.symm ▸ eisTraceModChar ShortDraftTrace.breveE
ConcreteBreveE.breveE_period_coordinates p hp) /
(‖eisEmbedding p‖ : ℂ)theorem canonicalSextic_pow_three_quadratic (P : Ideal O)
[P.IsMaximal] (hgood : lambda ∉ P) :
canonicalSextic P hgood ^ 3 =
(quadraticChar (O ⧸ P)).ringHomComp (Int.castRingHom ℂ) := P:Ideal Oinst✝:P.IsMaximalhgood:lambda ∉ P⊢ canonicalSextic P hgood ^ 3 = (quadraticChar (O ⧸ P)).ringHomComp (Int.castRingHom ℂ)
P:Ideal Oinst✝:P.IsMaximalhgood:lambda ∉ P⊢ (sexticChar P hgood).ringHomComp eisEmbedding ^ 3 = (quadraticChar (O ⧸ P)).ringHomComp (Int.castRingHom ℂ)
P:Ideal Oinst✝:P.IsMaximalhgood:lambda ∉ P⊢ (OAI.ActualEisensteinCubic.quadraticCharO✝ P).ringHomComp eisEmbedding =
(quadraticChar (O ⧸ P)).ringHomComp (Int.castRingHom ℂ)
ext xP:Ideal Oinst✝:P.IsMaximalhgood:lambda ∉ Px:(O ⧸ P)ˣ⊢ ((OAI.ActualEisensteinCubic.quadraticCharO✝ P).ringHomComp eisEmbedding) ↑x =
((quadraticChar (O ⧸ P)).ringHomComp (Int.castRingHom ℂ)) ↑x
change eisEmbedding ((quadraticChar (O ⧸ P) x : ℤ) : O) =
((quadraticChar (O ⧸ P) x : ℤ) : ℂ)P:Ideal Oinst✝:P.IsMaximalhgood:lambda ∉ Px:(O ⧸ P)ˣ⊢ eisEmbedding ↑((quadraticChar (O ⧸ P)) ↑x) = ↑((quadraticChar (O ⧸ P)) ↑x)
simpAll goals completed! 🐙theorem breveGamma1_gamma2_relation (P : Ideal O) [P.IsMaximal]
(hgood : lambda ∉ P) (hchar : ringChar (O ⧸ P) ≠ 2)
(p : O) (hP : P = Ideal.span {p}) (hp : p ≠ 0)
(hprimary : lambda ^ 2 ∣ p - 1) :
breveGamma1 P hgood p hP hp * breveGamma2 P hgood p hP hp =
(canonicalSextic P hgood
(Ideal.Quotient.mk P (4 : O)))⁻¹ *
breveGamma3 P hgood p hP hp *
(breveGamma2 P hgood p hP hp) ^ 3 := byP:Ideal Oinst✝:P.IsMaximalhgood:lambda ∉ Phchar:ringChar (O ⧸ P) ≠ 2p:OhP:P = Ideal.span {p}hp:p ≠ 0hprimary:lambda ^ 2 ∣ p - 1⊢ breveGamma1 P hgood p hP hp * breveGamma2 P hgood p hP hp =
((canonicalSextic P hgood) ((Ideal.Quotient.mk P) 4))⁻¹ * breveGamma3 P hgood p hP hp *
breveGamma2 P hgood p hP hp ^ 3
subst Pp:Ohp:p ≠ 0hprimary:lambda ^ 2 ∣ p - 1inst✝:(Ideal.span {p}).IsMaximalhgood:lambda ∉ Ideal.span {p}hchar:ringChar (O ⧸ Ideal.span {p}) ≠ 2⊢ breveGamma1 (Ideal.span {p}) hgood p ⋯ hp * breveGamma2 (Ideal.span {p}) hgood p ⋯ hp =
((canonicalSextic (Ideal.span {p}) hgood) ((Ideal.Quotient.mk (Ideal.span {p})) 4))⁻¹ *
breveGamma3 (Ideal.span {p}) hgood p ⋯ hp *
breveGamma2 (Ideal.span {p}) hgood p ⋯ hp ^ 3
let χ := canonicalSextic (Ideal.span {p}) hgoodp:Ohp:p ≠ 0hprimary:lambda ^ 2 ∣ p - 1inst✝:(Ideal.span {p}).IsMaximalhgood:lambda ∉ Ideal.span {p}hchar:ringChar (O ⧸ Ideal.span {p}) ≠ 2χ:MulChar (O ⧸ Ideal.span {p}) ℂ := canonicalSextic (Ideal.span {p}) hgood⊢ breveGamma1 (Ideal.span {p}) hgood p ⋯ hp * breveGamma2 (Ideal.span {p}) hgood p ⋯ hp =
((canonicalSextic (Ideal.span {p}) hgood) ((Ideal.Quotient.mk (Ideal.span {p})) 4))⁻¹ *
breveGamma3 (Ideal.span {p}) hgood p ⋯ hp *
breveGamma2 (Ideal.span {p}) hgood p ⋯ hp ^ 3
let ψ := eisTraceModChar ShortDraftTrace.breveE
ConcreteBreveE.breveE_period_coordinates p hpp:Ohp:p ≠ 0hprimary:lambda ^ 2 ∣ p - 1inst✝:(Ideal.span {p}).IsMaximalhgood:lambda ∉ Ideal.span {p}hchar:ringChar (O ⧸ Ideal.span {p}) ≠ 2χ:MulChar (O ⧸ Ideal.span {p}) ℂ := canonicalSextic (Ideal.span {p}) hgoodψ:AddChar (EisensteinEmbedding.O ⧸ Ideal.span {p}) ℂ := eisTraceModChar ShortDraftTrace.breveE ConcreteBreveE.breveE_period_coordinates p hp⊢ breveGamma1 (Ideal.span {p}) hgood p ⋯ hp * breveGamma2 (Ideal.span {p}) hgood p ⋯ hp =
((canonicalSextic (Ideal.span {p}) hgood) ((Ideal.Quotient.mk (Ideal.span {p})) 4))⁻¹ *
breveGamma3 (Ideal.span {p}) hgood p ⋯ hp *
breveGamma2 (Ideal.span {p}) hgood p ⋯ hp ^ 3
let s : ℂ := ‖eisEmbedding p‖p:Ohp:p ≠ 0hprimary:lambda ^ 2 ∣ p - 1inst✝:(Ideal.span {p}).IsMaximalhgood:lambda ∉ Ideal.span {p}hchar:ringChar (O ⧸ Ideal.span {p}) ≠ 2χ:MulChar (O ⧸ Ideal.span {p}) ℂ := canonicalSextic (Ideal.span {p}) hgoodψ:AddChar (EisensteinEmbedding.O ⧸ Ideal.span {p}) ℂ := eisTraceModChar ShortDraftTrace.breveE ConcreteBreveE.breveE_period_coordinates p hps:ℂ := ↑‖eisEmbedding p‖⊢ breveGamma1 (Ideal.span {p}) hgood p ⋯ hp * breveGamma2 (Ideal.span {p}) hgood p ⋯ hp =
((canonicalSextic (Ideal.span {p}) hgood) ((Ideal.Quotient.mk (Ideal.span {p})) 4))⁻¹ *
breveGamma3 (Ideal.span {p}) hgood p ⋯ hp *
breveGamma2 (Ideal.span {p}) hgood p ⋯ hp ^ 3
have hψ : ψ.IsPrimitive :=
eisTraceModChar_breveE_primitive (Ideal.span {p}) p rfl hpp:Ohp:p ≠ 0hprimary:lambda ^ 2 ∣ p - 1inst✝:(Ideal.span {p}).IsMaximalhgood:lambda ∉ Ideal.span {p}hchar:ringChar (O ⧸ Ideal.span {p}) ≠ 2χ:MulChar (O ⧸ Ideal.span {p}) ℂ := canonicalSextic (Ideal.span {p}) hgoodψ:AddChar (EisensteinEmbedding.O ⧸ Ideal.span {p}) ℂ := eisTraceModChar ShortDraftTrace.breveE ConcreteBreveE.breveE_period_coordinates p hps:ℂ := ↑‖eisEmbedding p‖hψ:ψ.IsPrimitive⊢ breveGamma1 (Ideal.span {p}) hgood p ⋯ hp * breveGamma2 (Ideal.span {p}) hgood p ⋯ hp =
((canonicalSextic (Ideal.span {p}) hgood) ((Ideal.Quotient.mk (Ideal.span {p})) 4))⁻¹ *
breveGamma3 (Ideal.span {p}) hgood p ⋯ hp *
breveGamma2 (Ideal.span {p}) hgood p ⋯ hp ^ 3
have hχ1 : χ ≠ 1 := byP:Ideal Oinst✝:P.IsMaximalhgood:lambda ∉ Phchar:ringChar (O ⧸ P) ≠ 2p:OhP:P = Ideal.span {p}hp:p ≠ 0hprimary:lambda ^ 2 ∣ p - 1⊢ breveGamma1 P hgood p hP hp * breveGamma2 P hgood p hP hp =
((canonicalSextic P hgood) ((Ideal.Quotient.mk P) 4))⁻¹ * breveGamma3 P hgood p hP hp *
breveGamma2 P hgood p hP hp ^ 3
simpa only [pow_one] using
(canonicalSextic_pow_ne_one (Ideal.span {p}) hgood hchar
(byp:Ohp:p ≠ 0hprimary:lambda ^ 2 ∣ p - 1inst✝:(Ideal.span {p}).IsMaximalhgood:lambda ∉ Ideal.span {p}hchar:ringChar (O ⧸ Ideal.span {p}) ≠ 2χ:MulChar (O ⧸ Ideal.span {p}) ℂ := canonicalSextic (Ideal.span {p}) hgoodψ:AddChar (EisensteinEmbedding.O ⧸ Ideal.span {p}) ℂ := eisTraceModChar ShortDraftTrace.breveE ConcreteBreveE.breveE_period_coordinates p hps:ℂ := ↑‖eisEmbedding p‖hψ:ψ.IsPrimitive⊢ 1 ≠ 0 decideAll goals completed! 🐙 : (1 : ℕ) ≠ 0) (byp:Ohp:p ≠ 0hprimary:lambda ^ 2 ∣ p - 1inst✝:(Ideal.span {p}).IsMaximalhgood:lambda ∉ Ideal.span {p}hchar:ringChar (O ⧸ Ideal.span {p}) ≠ 2χ:MulChar (O ⧸ Ideal.span {p}) ℂ := canonicalSextic (Ideal.span {p}) hgoodψ:AddChar (EisensteinEmbedding.O ⧸ Ideal.span {p}) ℂ := eisTraceModChar ShortDraftTrace.breveE ConcreteBreveE.breveE_period_coordinates p hps:ℂ := ↑‖eisEmbedding p‖hψ:ψ.IsPrimitive⊢ 1 < 6 decideAll goals completed! 🐙 : (1 : ℕ) < 6))p:Ohp:p ≠ 0hprimary:lambda ^ 2 ∣ p - 1inst✝:(Ideal.span {p}).IsMaximalhgood:lambda ∉ Ideal.span {p}hchar:ringChar (O ⧸ Ideal.span {p}) ≠ 2χ:MulChar (O ⧸ Ideal.span {p}) ℂ := canonicalSextic (Ideal.span {p}) hgoodψ:AddChar (EisensteinEmbedding.O ⧸ Ideal.span {p}) ℂ := eisTraceModChar ShortDraftTrace.breveE ConcreteBreveE.breveE_period_coordinates p hps:ℂ := ↑‖eisEmbedding p‖hψ:ψ.IsPrimitivehχ1:χ ≠ 1⊢ breveGamma1 (Ideal.span {p}) hgood p ⋯ hp * breveGamma2 (Ideal.span {p}) hgood p ⋯ hp =
((canonicalSextic (Ideal.span {p}) hgood) ((Ideal.Quotient.mk (Ideal.span {p})) 4))⁻¹ *
breveGamma3 (Ideal.span {p}) hgood p ⋯ hp *
breveGamma2 (Ideal.span {p}) hgood p ⋯ hp ^ 3
have hχ2 : χ ^ 2 ≠ 1 := canonicalSextic_pow_ne_one (Ideal.span {p}) hgood hchar
(byp:Ohp:p ≠ 0hprimary:lambda ^ 2 ∣ p - 1inst✝:(Ideal.span {p}).IsMaximalhgood:lambda ∉ Ideal.span {p}hchar:ringChar (O ⧸ Ideal.span {p}) ≠ 2χ:MulChar (O ⧸ Ideal.span {p}) ℂ := canonicalSextic (Ideal.span {p}) hgoodψ:AddChar (EisensteinEmbedding.O ⧸ Ideal.span {p}) ℂ := eisTraceModChar ShortDraftTrace.breveE ConcreteBreveE.breveE_period_coordinates p hps:ℂ := ↑‖eisEmbedding p‖hψ:ψ.IsPrimitivehχ1:χ ≠ 1⊢ 2 ≠ 0 decideAll goals completed! 🐙 : (2 : ℕ) ≠ 0) (byp:Ohp:p ≠ 0hprimary:lambda ^ 2 ∣ p - 1inst✝:(Ideal.span {p}).IsMaximalhgood:lambda ∉ Ideal.span {p}hchar:ringChar (O ⧸ Ideal.span {p}) ≠ 2χ:MulChar (O ⧸ Ideal.span {p}) ℂ := canonicalSextic (Ideal.span {p}) hgoodψ:AddChar (EisensteinEmbedding.O ⧸ Ideal.span {p}) ℂ := eisTraceModChar ShortDraftTrace.breveE ConcreteBreveE.breveE_period_coordinates p hps:ℂ := ↑‖eisEmbedding p‖hψ:ψ.IsPrimitivehχ1:χ ≠ 1⊢ 2 < 6 decideAll goals completed! 🐙 : (2 : ℕ) < 6)p:Ohp:p ≠ 0hprimary:lambda ^ 2 ∣ p - 1inst✝:(Ideal.span {p}).IsMaximalhgood:lambda ∉ Ideal.span {p}hchar:ringChar (O ⧸ Ideal.span {p}) ≠ 2χ:MulChar (O ⧸ Ideal.span {p}) ℂ := canonicalSextic (Ideal.span {p}) hgoodψ:AddChar (EisensteinEmbedding.O ⧸ Ideal.span {p}) ℂ := eisTraceModChar ShortDraftTrace.breveE ConcreteBreveE.breveE_period_coordinates p hps:ℂ := ↑‖eisEmbedding p‖hψ:ψ.IsPrimitivehχ1:χ ≠ 1hχ2:χ ^ 2 ≠ 1⊢ breveGamma1 (Ideal.span {p}) hgood p ⋯ hp * breveGamma2 (Ideal.span {p}) hgood p ⋯ hp =
((canonicalSextic (Ideal.span {p}) hgood) ((Ideal.Quotient.mk (Ideal.span {p})) 4))⁻¹ *
breveGamma3 (Ideal.span {p}) hgood p ⋯ hp *
breveGamma2 (Ideal.span {p}) hgood p ⋯ hp ^ 3
have hχ4 : χ ^ 4 ≠ 1 := canonicalSextic_pow_ne_one (Ideal.span {p}) hgood hchar
(byp:Ohp:p ≠ 0hprimary:lambda ^ 2 ∣ p - 1inst✝:(Ideal.span {p}).IsMaximalhgood:lambda ∉ Ideal.span {p}hchar:ringChar (O ⧸ Ideal.span {p}) ≠ 2χ:MulChar (O ⧸ Ideal.span {p}) ℂ := canonicalSextic (Ideal.span {p}) hgoodψ:AddChar (EisensteinEmbedding.O ⧸ Ideal.span {p}) ℂ := eisTraceModChar ShortDraftTrace.breveE ConcreteBreveE.breveE_period_coordinates p hps:ℂ := ↑‖eisEmbedding p‖hψ:ψ.IsPrimitivehχ1:χ ≠ 1hχ2:χ ^ 2 ≠ 1⊢ 4 ≠ 0 decideAll goals completed! 🐙 : (4 : ℕ) ≠ 0) (byp:Ohp:p ≠ 0hprimary:lambda ^ 2 ∣ p - 1inst✝:(Ideal.span {p}).IsMaximalhgood:lambda ∉ Ideal.span {p}hchar:ringChar (O ⧸ Ideal.span {p}) ≠ 2χ:MulChar (O ⧸ Ideal.span {p}) ℂ := canonicalSextic (Ideal.span {p}) hgoodψ:AddChar (EisensteinEmbedding.O ⧸ Ideal.span {p}) ℂ := eisTraceModChar ShortDraftTrace.breveE ConcreteBreveE.breveE_period_coordinates p hps:ℂ := ↑‖eisEmbedding p‖hψ:ψ.IsPrimitivehχ1:χ ≠ 1hχ2:χ ^ 2 ≠ 1⊢ 4 < 6 decideAll goals completed! 🐙 : (4 : ℕ) < 6)p:Ohp:p ≠ 0hprimary:lambda ^ 2 ∣ p - 1inst✝:(Ideal.span {p}).IsMaximalhgood:lambda ∉ Ideal.span {p}hchar:ringChar (O ⧸ Ideal.span {p}) ≠ 2χ:MulChar (O ⧸ Ideal.span {p}) ℂ := canonicalSextic (Ideal.span {p}) hgoodψ:AddChar (EisensteinEmbedding.O ⧸ Ideal.span {p}) ℂ := eisTraceModChar ShortDraftTrace.breveE ConcreteBreveE.breveE_period_coordinates p hps:ℂ := ↑‖eisEmbedding p‖hψ:ψ.IsPrimitivehχ1:χ ≠ 1hχ2:χ ^ 2 ≠ 1hχ4:χ ^ 4 ≠ 1⊢ breveGamma1 (Ideal.span {p}) hgood p ⋯ hp * breveGamma2 (Ideal.span {p}) hgood p ⋯ hp =
((canonicalSextic (Ideal.span {p}) hgood) ((Ideal.Quotient.mk (Ideal.span {p})) 4))⁻¹ *
breveGamma3 (Ideal.span {p}) hgood p ⋯ hp *
breveGamma2 (Ideal.span {p}) hgood p ⋯ hp ^ 3
have hχ3 : χ ^ 3 = (quadraticChar (O ⧸ Ideal.span {p})).ringHomComp
(Int.castRingHom ℂ) := canonicalSextic_pow_three_quadratic (Ideal.span {p}) hgoodp:Ohp:p ≠ 0hprimary:lambda ^ 2 ∣ p - 1inst✝:(Ideal.span {p}).IsMaximalhgood:lambda ∉ Ideal.span {p}hchar:ringChar (O ⧸ Ideal.span {p}) ≠ 2χ:MulChar (O ⧸ Ideal.span {p}) ℂ := canonicalSextic (Ideal.span {p}) hgoodψ:AddChar (EisensteinEmbedding.O ⧸ Ideal.span {p}) ℂ := eisTraceModChar ShortDraftTrace.breveE ConcreteBreveE.breveE_period_coordinates p hps:ℂ := ↑‖eisEmbedding p‖hψ:ψ.IsPrimitivehχ1:χ ≠ 1hχ2:χ ^ 2 ≠ 1hχ4:χ ^ 4 ≠ 1hχ3:χ ^ 3 = (quadraticChar (O ⧸ Ideal.span {p})).ringHomComp (Int.castRingHom ℂ)⊢ breveGamma1 (Ideal.span {p}) hgood p ⋯ hp * breveGamma2 (Ideal.span {p}) hgood p ⋯ hp =
((canonicalSextic (Ideal.span {p}) hgood) ((Ideal.Quotient.mk (Ideal.span {p})) 4))⁻¹ *
breveGamma3 (Ideal.span {p}) hgood p ⋯ hp *
breveGamma2 (Ideal.span {p}) hgood p ⋯ hp ^ 3
have hχ6 : χ ^ 6 = 1 := canonicalSextic_pow_six (Ideal.span {p}) hgoodp:Ohp:p ≠ 0hprimary:lambda ^ 2 ∣ p - 1inst✝:(Ideal.span {p}).IsMaximalhgood:lambda ∉ Ideal.span {p}hchar:ringChar (O ⧸ Ideal.span {p}) ≠ 2χ:MulChar (O ⧸ Ideal.span {p}) ℂ := canonicalSextic (Ideal.span {p}) hgoodψ:AddChar (EisensteinEmbedding.O ⧸ Ideal.span {p}) ℂ := eisTraceModChar ShortDraftTrace.breveE ConcreteBreveE.breveE_period_coordinates p hps:ℂ := ↑‖eisEmbedding p‖hψ:ψ.IsPrimitivehχ1:χ ≠ 1hχ2:χ ^ 2 ≠ 1hχ4:χ ^ 4 ≠ 1hχ3:χ ^ 3 = (quadraticChar (O ⧸ Ideal.span {p})).ringHomComp (Int.castRingHom ℂ)hχ6:χ ^ 6 = 1⊢ breveGamma1 (Ideal.span {p}) hgood p ⋯ hp * breveGamma2 (Ideal.span {p}) hgood p ⋯ hp =
((canonicalSextic (Ideal.span {p}) hgood) ((Ideal.Quotient.mk (Ideal.span {p})) 4))⁻¹ *
breveGamma3 (Ideal.span {p}) hgood p ⋯ hp *
breveGamma2 (Ideal.span {p}) hgood p ⋯ hp ^ 3
have hs : s ^ 2 = (Fintype.card (O ⧸ Ideal.span {p}) : ℂ) := byP:Ideal Oinst✝:P.IsMaximalhgood:lambda ∉ Phchar:ringChar (O ⧸ P) ≠ 2p:OhP:P = Ideal.span {p}hp:p ≠ 0hprimary:lambda ^ 2 ∣ p - 1⊢ breveGamma1 P hgood p hP hp * breveGamma2 P hgood p hP hp =
((canonicalSextic P hgood) ((Ideal.Quotient.mk P) 4))⁻¹ * breveGamma3 P hgood p hP hp *
breveGamma2 P hgood p hP hp ^ 3
have hnormO := primary_generator_mul_conj_eq_card
(Ideal.span {p}) hgood p rfl hprimaryp:Ohp:p ≠ 0hprimary:lambda ^ 2 ∣ p - 1inst✝:(Ideal.span {p}).IsMaximalhgood:lambda ∉ Ideal.span {p}hchar:ringChar (O ⧸ Ideal.span {p}) ≠ 2χ:MulChar (O ⧸ Ideal.span {p}) ℂ := canonicalSextic (Ideal.span {p}) hgoodψ:AddChar (EisensteinEmbedding.O ⧸ Ideal.span {p}) ℂ := eisTraceModChar ShortDraftTrace.breveE ConcreteBreveE.breveE_period_coordinates p hps:ℂ := ↑‖eisEmbedding p‖hψ:ψ.IsPrimitivehχ1:χ ≠ 1hχ2:χ ^ 2 ≠ 1hχ4:χ ^ 4 ≠ 1hχ3:χ ^ 3 = (quadraticChar (O ⧸ Ideal.span {p})).ringHomComp (Int.castRingHom ℂ)hχ6:χ ^ 6 = 1hnormO:p * conjO p = ↑(Nat.card (O ⧸ Ideal.span {p}))⊢ s ^ 2 = ↑(Fintype.card (O ⧸ Ideal.span {p}))
have hnormC := congrArg eisEmbedding hnormOp:Ohp:p ≠ 0hprimary:lambda ^ 2 ∣ p - 1inst✝:(Ideal.span {p}).IsMaximalhgood:lambda ∉ Ideal.span {p}hchar:ringChar (O ⧸ Ideal.span {p}) ≠ 2χ:MulChar (O ⧸ Ideal.span {p}) ℂ := canonicalSextic (Ideal.span {p}) hgoodψ:AddChar (EisensteinEmbedding.O ⧸ Ideal.span {p}) ℂ := eisTraceModChar ShortDraftTrace.breveE ConcreteBreveE.breveE_period_coordinates p hps:ℂ := ↑‖eisEmbedding p‖hψ:ψ.IsPrimitivehχ1:χ ≠ 1hχ2:χ ^ 2 ≠ 1hχ4:χ ^ 4 ≠ 1hχ3:χ ^ 3 = (quadraticChar (O ⧸ Ideal.span {p})).ringHomComp (Int.castRingHom ℂ)hχ6:χ ^ 6 = 1hnormO:p * conjO p = ↑(Nat.card (O ⧸ Ideal.span {p}))hnormC:eisEmbedding (p * conjO p) = eisEmbedding ↑(Nat.card (O ⧸ Ideal.span {p}))⊢ s ^ 2 = ↑(Fintype.card (O ⧸ Ideal.span {p}))
rw [map_mul,p:Ohp:p ≠ 0hprimary:lambda ^ 2 ∣ p - 1inst✝:(Ideal.span {p}).IsMaximalhgood:lambda ∉ Ideal.span {p}hchar:ringChar (O ⧸ Ideal.span {p}) ≠ 2χ:MulChar (O ⧸ Ideal.span {p}) ℂ := canonicalSextic (Ideal.span {p}) hgoodψ:AddChar (EisensteinEmbedding.O ⧸ Ideal.span {p}) ℂ := eisTraceModChar ShortDraftTrace.breveE ConcreteBreveE.breveE_period_coordinates p hps:ℂ := ↑‖eisEmbedding p‖hψ:ψ.IsPrimitivehχ1:χ ≠ 1hχ2:χ ^ 2 ≠ 1hχ4:χ ^ 4 ≠ 1hχ3:χ ^ 3 = (quadraticChar (O ⧸ Ideal.span {p})).ringHomComp (Int.castRingHom ℂ)hχ6:χ ^ 6 = 1hnormO:p * conjO p = ↑(Nat.card (O ⧸ Ideal.span {p}))hnormC:eisEmbedding p * eisEmbedding (conjO p) = eisEmbedding ↑(Nat.card (O ⧸ Ideal.span {p}))⊢ s ^ 2 = ↑(Fintype.card (O ⧸ Ideal.span {p})) eisEmbedding_conjO,p:Ohp:p ≠ 0hprimary:lambda ^ 2 ∣ p - 1inst✝:(Ideal.span {p}).IsMaximalhgood:lambda ∉ Ideal.span {p}hchar:ringChar (O ⧸ Ideal.span {p}) ≠ 2χ:MulChar (O ⧸ Ideal.span {p}) ℂ := canonicalSextic (Ideal.span {p}) hgoodψ:AddChar (EisensteinEmbedding.O ⧸ Ideal.span {p}) ℂ := eisTraceModChar ShortDraftTrace.breveE ConcreteBreveE.breveE_period_coordinates p hps:ℂ := ↑‖eisEmbedding p‖hψ:ψ.IsPrimitivehχ1:χ ≠ 1hχ2:χ ^ 2 ≠ 1hχ4:χ ^ 4 ≠ 1hχ3:χ ^ 3 = (quadraticChar (O ⧸ Ideal.span {p})).ringHomComp (Int.castRingHom ℂ)hχ6:χ ^ 6 = 1hnormO:p * conjO p = ↑(Nat.card (O ⧸ Ideal.span {p}))hnormC:eisEmbedding p * star (eisEmbedding p) = eisEmbedding ↑(Nat.card (O ⧸ Ideal.span {p}))⊢ s ^ 2 = ↑(Fintype.card (O ⧸ Ideal.span {p})) map_natCastp:Ohp:p ≠ 0hprimary:lambda ^ 2 ∣ p - 1inst✝:(Ideal.span {p}).IsMaximalhgood:lambda ∉ Ideal.span {p}hchar:ringChar (O ⧸ Ideal.span {p}) ≠ 2χ:MulChar (O ⧸ Ideal.span {p}) ℂ := canonicalSextic (Ideal.span {p}) hgoodψ:AddChar (EisensteinEmbedding.O ⧸ Ideal.span {p}) ℂ := eisTraceModChar ShortDraftTrace.breveE ConcreteBreveE.breveE_period_coordinates p hps:ℂ := ↑‖eisEmbedding p‖hψ:ψ.IsPrimitivehχ1:χ ≠ 1hχ2:χ ^ 2 ≠ 1hχ4:χ ^ 4 ≠ 1hχ3:χ ^ 3 = (quadraticChar (O ⧸ Ideal.span {p})).ringHomComp (Int.castRingHom ℂ)hχ6:χ ^ 6 = 1hnormO:p * conjO p = ↑(Nat.card (O ⧸ Ideal.span {p}))hnormC:eisEmbedding p * star (eisEmbedding p) = ↑(Nat.card (O ⧸ Ideal.span {p}))⊢ s ^ 2 = ↑(Fintype.card (O ⧸ Ideal.span {p}))] at hnormCp:Ohp:p ≠ 0hprimary:lambda ^ 2 ∣ p - 1inst✝:(Ideal.span {p}).IsMaximalhgood:lambda ∉ Ideal.span {p}hchar:ringChar (O ⧸ Ideal.span {p}) ≠ 2χ:MulChar (O ⧸ Ideal.span {p}) ℂ := canonicalSextic (Ideal.span {p}) hgoodψ:AddChar (EisensteinEmbedding.O ⧸ Ideal.span {p}) ℂ := eisTraceModChar ShortDraftTrace.breveE ConcreteBreveE.breveE_period_coordinates p hps:ℂ := ↑‖eisEmbedding p‖hψ:ψ.IsPrimitivehχ1:χ ≠ 1hχ2:χ ^ 2 ≠ 1hχ4:χ ^ 4 ≠ 1hχ3:χ ^ 3 = (quadraticChar (O ⧸ Ideal.span {p})).ringHomComp (Int.castRingHom ℂ)hχ6:χ ^ 6 = 1hnormO:p * conjO p = ↑(Nat.card (O ⧸ Ideal.span {p}))hnormC:eisEmbedding p * star (eisEmbedding p) = ↑(Nat.card (O ⧸ Ideal.span {p}))⊢ s ^ 2 = ↑(Fintype.card (O ⧸ Ideal.span {p}))
simpa only [s, ← starRingEnd_apply, Complex.mul_conj',
Nat.card_eq_fintype_card] using hnormCp:Ohp:p ≠ 0hprimary:lambda ^ 2 ∣ p - 1inst✝:(Ideal.span {p}).IsMaximalhgood:lambda ∉ Ideal.span {p}hchar:ringChar (O ⧸ Ideal.span {p}) ≠ 2χ:MulChar (O ⧸ Ideal.span {p}) ℂ := canonicalSextic (Ideal.span {p}) hgoodψ:AddChar (EisensteinEmbedding.O ⧸ Ideal.span {p}) ℂ := eisTraceModChar ShortDraftTrace.breveE ConcreteBreveE.breveE_period_coordinates p hps:ℂ := ↑‖eisEmbedding p‖hψ:ψ.IsPrimitivehχ1:χ ≠ 1hχ2:χ ^ 2 ≠ 1hχ4:χ ^ 4 ≠ 1hχ3:χ ^ 3 = (quadraticChar (O ⧸ Ideal.span {p})).ringHomComp (Int.castRingHom ℂ)hχ6:χ ^ 6 = 1hs:s ^ 2 = ↑(Fintype.card (O ⧸ Ideal.span {p}))⊢ breveGamma1 (Ideal.span {p}) hgood p ⋯ hp * breveGamma2 (Ideal.span {p}) hgood p ⋯ hp =
((canonicalSextic (Ideal.span {p}) hgood) ((Ideal.Quotient.mk (Ideal.span {p})) 4))⁻¹ *
breveGamma3 (Ideal.span {p}) hgood p ⋯ hp *
breveGamma2 (Ideal.span {p}) hgood p ⋯ hp ^ 3
have hs0 : s ≠ 0 := byP:Ideal Oinst✝:P.IsMaximalhgood:lambda ∉ Phchar:ringChar (O ⧸ P) ≠ 2p:OhP:P = Ideal.span {p}hp:p ≠ 0hprimary:lambda ^ 2 ∣ p - 1⊢ breveGamma1 P hgood p hP hp * breveGamma2 P hgood p hP hp =
((canonicalSextic P hgood) ((Ideal.Quotient.mk P) 4))⁻¹ * breveGamma3 P hgood p hP hp *
breveGamma2 P hgood p hP hp ^ 3
dsimp [s]p:Ohp:p ≠ 0hprimary:lambda ^ 2 ∣ p - 1inst✝:(Ideal.span {p}).IsMaximalhgood:lambda ∉ Ideal.span {p}hchar:ringChar (O ⧸ Ideal.span {p}) ≠ 2χ:MulChar (O ⧸ Ideal.span {p}) ℂ := canonicalSextic (Ideal.span {p}) hgoodψ:AddChar (EisensteinEmbedding.O ⧸ Ideal.span {p}) ℂ := eisTraceModChar ShortDraftTrace.breveE ConcreteBreveE.breveE_period_coordinates p hps:ℂ := ↑‖eisEmbedding p‖hψ:ψ.IsPrimitivehχ1:χ ≠ 1hχ2:χ ^ 2 ≠ 1hχ4:χ ^ 4 ≠ 1hχ3:χ ^ 3 = (quadraticChar (O ⧸ Ideal.span {p})).ringHomComp (Int.castRingHom ℂ)hχ6:χ ^ 6 = 1hs:s ^ 2 = ↑(Fintype.card (O ⧸ Ideal.span {p}))⊢ ¬↑‖eisEmbedding p‖ = 0
exact_mod_cast (norm_ne_zero_iff.mpr (eisEmbedding_ne_zero hp))p:Ohp:p ≠ 0hprimary:lambda ^ 2 ∣ p - 1inst✝:(Ideal.span {p}).IsMaximalhgood:lambda ∉ Ideal.span {p}hchar:ringChar (O ⧸ Ideal.span {p}) ≠ 2χ:MulChar (O ⧸ Ideal.span {p}) ℂ := canonicalSextic (Ideal.span {p}) hgoodψ:AddChar (EisensteinEmbedding.O ⧸ Ideal.span {p}) ℂ := eisTraceModChar ShortDraftTrace.breveE ConcreteBreveE.breveE_period_coordinates p hps:ℂ := ↑‖eisEmbedding p‖hψ:ψ.IsPrimitivehχ1:χ ≠ 1hχ2:χ ^ 2 ≠ 1hχ4:χ ^ 4 ≠ 1hχ3:χ ^ 3 = (quadraticChar (O ⧸ Ideal.span {p})).ringHomComp (Int.castRingHom ℂ)hχ6:χ ^ 6 = 1hs:s ^ 2 = ↑(Fintype.card (O ⧸ Ideal.span {p}))hs0:s ≠ 0⊢ breveGamma1 (Ideal.span {p}) hgood p ⋯ hp * breveGamma2 (Ideal.span {p}) hgood p ⋯ hp =
((canonicalSextic (Ideal.span {p}) hgood) ((Ideal.Quotient.mk (Ideal.span {p})) 4))⁻¹ *
breveGamma3 (Ideal.span {p}) hgood p ⋯ hp *
breveGamma2 (Ideal.span {p}) hgood p ⋯ hp ^ 3
have hmul := JacobiQuadratic.normalized_gauss_sextic_relation
χ ψ hchar hψ hχ1 hχ2 hχ4 hχ3 hχ6 s hs hs0p:Ohp:p ≠ 0hprimary:lambda ^ 2 ∣ p - 1inst✝:(Ideal.span {p}).IsMaximalhgood:lambda ∉ Ideal.span {p}hchar:ringChar (O ⧸ Ideal.span {p}) ≠ 2χ:MulChar (O ⧸ Ideal.span {p}) ℂ := canonicalSextic (Ideal.span {p}) hgoodψ:AddChar (EisensteinEmbedding.O ⧸ Ideal.span {p}) ℂ := eisTraceModChar ShortDraftTrace.breveE ConcreteBreveE.breveE_period_coordinates p hps:ℂ := ↑‖eisEmbedding p‖hψ:ψ.IsPrimitivehχ1:χ ≠ 1hχ2:χ ^ 2 ≠ 1hχ4:χ ^ 4 ≠ 1hχ3:χ ^ 3 = (quadraticChar (O ⧸ Ideal.span {p})).ringHomComp (Int.castRingHom ℂ)hχ6:χ ^ 6 = 1hs:s ^ 2 = ↑(Fintype.card (O ⧸ Ideal.span {p}))hs0:s ≠ 0hmul:χ 4 * (gaussSum χ ψ / s) * (gaussSum (χ ^ 2) ψ / s) = gaussSum (χ ^ 3) ψ / s * (gaussSum (χ ^ 2) ψ / s) ^ 3⊢ breveGamma1 (Ideal.span {p}) hgood p ⋯ hp * breveGamma2 (Ideal.span {p}) hgood p ⋯ hp =
((canonicalSextic (Ideal.span {p}) hgood) ((Ideal.Quotient.mk (Ideal.span {p})) 4))⁻¹ *
breveGamma3 (Ideal.span {p}) hgood p ⋯ hp *
breveGamma2 (Ideal.span {p}) hgood p ⋯ hp ^ 3
have hfour : (4 : O ⧸ Ideal.span {p}) ≠ 0 := byP:Ideal Oinst✝:P.IsMaximalhgood:lambda ∉ Phchar:ringChar (O ⧸ P) ≠ 2p:OhP:P = Ideal.span {p}hp:p ≠ 0hprimary:lambda ^ 2 ∣ p - 1⊢ breveGamma1 P hgood p hP hp * breveGamma2 P hgood p hP hp =
((canonicalSextic P hgood) ((Ideal.Quotient.mk P) 4))⁻¹ * breveGamma3 P hgood p hP hp *
breveGamma2 P hgood p hP hp ^ 3
have htwo : (2 : O ⧸ Ideal.span {p}) ≠ 0 := Ring.two_ne_zero hcharp:Ohp:p ≠ 0hprimary:lambda ^ 2 ∣ p - 1inst✝:(Ideal.span {p}).IsMaximalhgood:lambda ∉ Ideal.span {p}hchar:ringChar (O ⧸ Ideal.span {p}) ≠ 2χ:MulChar (O ⧸ Ideal.span {p}) ℂ := canonicalSextic (Ideal.span {p}) hgoodψ:AddChar (EisensteinEmbedding.O ⧸ Ideal.span {p}) ℂ := eisTraceModChar ShortDraftTrace.breveE ConcreteBreveE.breveE_period_coordinates p hps:ℂ := ↑‖eisEmbedding p‖hψ:ψ.IsPrimitivehχ1:χ ≠ 1hχ2:χ ^ 2 ≠ 1hχ4:χ ^ 4 ≠ 1hχ3:χ ^ 3 = (quadraticChar (O ⧸ Ideal.span {p})).ringHomComp (Int.castRingHom ℂ)hχ6:χ ^ 6 = 1hs:s ^ 2 = ↑(Fintype.card (O ⧸ Ideal.span {p}))hs0:s ≠ 0hmul:χ 4 * (gaussSum χ ψ / s) * (gaussSum (χ ^ 2) ψ / s) = gaussSum (χ ^ 3) ψ / s * (gaussSum (χ ^ 2) ψ / s) ^ 3htwo:2 ≠ 0⊢ 4 ≠ 0
convert pow_ne_zero 2 htwo using 1p:Ohp:p ≠ 0hprimary:lambda ^ 2 ∣ p - 1inst✝:(Ideal.span {p}).IsMaximalhgood:lambda ∉ Ideal.span {p}hchar:ringChar (O ⧸ Ideal.span {p}) ≠ 2χ:MulChar (O ⧸ Ideal.span {p}) ℂ := canonicalSextic (Ideal.span {p}) hgoodψ:AddChar (EisensteinEmbedding.O ⧸ Ideal.span {p}) ℂ := eisTraceModChar ShortDraftTrace.breveE ConcreteBreveE.breveE_period_coordinates p hps:ℂ := ↑‖eisEmbedding p‖hψ:ψ.IsPrimitivehχ1:χ ≠ 1hχ2:χ ^ 2 ≠ 1hχ4:χ ^ 4 ≠ 1hχ3:χ ^ 3 = (quadraticChar (O ⧸ Ideal.span {p})).ringHomComp (Int.castRingHom ℂ)hχ6:χ ^ 6 = 1hs:s ^ 2 = ↑(Fintype.card (O ⧸ Ideal.span {p}))hs0:s ≠ 0hmul:χ 4 * (gaussSum χ ψ / s) * (gaussSum (χ ^ 2) ψ / s) = gaussSum (χ ^ 3) ψ / s * (gaussSum (χ ^ 2) ψ / s) ^ 3htwo:2 ≠ 0⊢ 4 = 2 ^ 2 ; norm_nump:Ohp:p ≠ 0hprimary:lambda ^ 2 ∣ p - 1inst✝:(Ideal.span {p}).IsMaximalhgood:lambda ∉ Ideal.span {p}hchar:ringChar (O ⧸ Ideal.span {p}) ≠ 2χ:MulChar (O ⧸ Ideal.span {p}) ℂ := canonicalSextic (Ideal.span {p}) hgoodψ:AddChar (EisensteinEmbedding.O ⧸ Ideal.span {p}) ℂ := eisTraceModChar ShortDraftTrace.breveE ConcreteBreveE.breveE_period_coordinates p hps:ℂ := ↑‖eisEmbedding p‖hψ:ψ.IsPrimitivehχ1:χ ≠ 1hχ2:χ ^ 2 ≠ 1hχ4:χ ^ 4 ≠ 1hχ3:χ ^ 3 = (quadraticChar (O ⧸ Ideal.span {p})).ringHomComp (Int.castRingHom ℂ)hχ6:χ ^ 6 = 1hs:s ^ 2 = ↑(Fintype.card (O ⧸ Ideal.span {p}))hs0:s ≠ 0hmul:χ 4 * (gaussSum χ ψ / s) * (gaussSum (χ ^ 2) ψ / s) = gaussSum (χ ^ 3) ψ / s * (gaussSum (χ ^ 2) ψ / s) ^ 3hfour:4 ≠ 0⊢ breveGamma1 (Ideal.span {p}) hgood p ⋯ hp * breveGamma2 (Ideal.span {p}) hgood p ⋯ hp =
((canonicalSextic (Ideal.span {p}) hgood) ((Ideal.Quotient.mk (Ideal.span {p})) 4))⁻¹ *
breveGamma3 (Ideal.span {p}) hgood p ⋯ hp *
breveGamma2 (Ideal.span {p}) hgood p ⋯ hp ^ 3
have hχfour : χ (4 : O ⧸ Ideal.span {p}) ≠ 0 :=
χ.apply_ne_zero_iff.mpr (isUnit_iff_ne_zero.mpr hfour)p:Ohp:p ≠ 0hprimary:lambda ^ 2 ∣ p - 1inst✝:(Ideal.span {p}).IsMaximalhgood:lambda ∉ Ideal.span {p}hchar:ringChar (O ⧸ Ideal.span {p}) ≠ 2χ:MulChar (O ⧸ Ideal.span {p}) ℂ := canonicalSextic (Ideal.span {p}) hgoodψ:AddChar (EisensteinEmbedding.O ⧸ Ideal.span {p}) ℂ := eisTraceModChar ShortDraftTrace.breveE ConcreteBreveE.breveE_period_coordinates p hps:ℂ := ↑‖eisEmbedding p‖hψ:ψ.IsPrimitivehχ1:χ ≠ 1hχ2:χ ^ 2 ≠ 1hχ4:χ ^ 4 ≠ 1hχ3:χ ^ 3 = (quadraticChar (O ⧸ Ideal.span {p})).ringHomComp (Int.castRingHom ℂ)hχ6:χ ^ 6 = 1hs:s ^ 2 = ↑(Fintype.card (O ⧸ Ideal.span {p}))hs0:s ≠ 0hmul:χ 4 * (gaussSum χ ψ / s) * (gaussSum (χ ^ 2) ψ / s) = gaussSum (χ ^ 3) ψ / s * (gaussSum (χ ^ 2) ψ / s) ^ 3hfour:4 ≠ 0hχfour:χ 4 ≠ 0⊢ breveGamma1 (Ideal.span {p}) hgood p ⋯ hp * breveGamma2 (Ideal.span {p}) hgood p ⋯ hp =
((canonicalSextic (Ideal.span {p}) hgood) ((Ideal.Quotient.mk (Ideal.span {p})) 4))⁻¹ *
breveGamma3 (Ideal.span {p}) hgood p ⋯ hp *
breveGamma2 (Ideal.span {p}) hgood p ⋯ hp ^ 3
change χ 4 * breveGamma1 (Ideal.span {p}) hgood p rfl hp *
breveGamma2 (Ideal.span {p}) hgood p rfl hp =
breveGamma3 (Ideal.span {p}) hgood p rfl hp *
breveGamma2 (Ideal.span {p}) hgood p rfl hp ^ 3 at hmulp:Ohp:p ≠ 0hprimary:lambda ^ 2 ∣ p - 1inst✝:(Ideal.span {p}).IsMaximalhgood:lambda ∉ Ideal.span {p}hchar:ringChar (O ⧸ Ideal.span {p}) ≠ 2χ:MulChar (O ⧸ Ideal.span {p}) ℂ := canonicalSextic (Ideal.span {p}) hgoodψ:AddChar (EisensteinEmbedding.O ⧸ Ideal.span {p}) ℂ := eisTraceModChar ShortDraftTrace.breveE ConcreteBreveE.breveE_period_coordinates p hps:ℂ := ↑‖eisEmbedding p‖hψ:ψ.IsPrimitivehχ1:χ ≠ 1hχ2:χ ^ 2 ≠ 1hχ4:χ ^ 4 ≠ 1hχ3:χ ^ 3 = (quadraticChar (O ⧸ Ideal.span {p})).ringHomComp (Int.castRingHom ℂ)hχ6:χ ^ 6 = 1hs:s ^ 2 = ↑(Fintype.card (O ⧸ Ideal.span {p}))hs0:s ≠ 0hfour:4 ≠ 0hχfour:χ 4 ≠ 0hmul:χ 4 * breveGamma1 (Ideal.span {p}) hgood p ⋯ hp * breveGamma2 (Ideal.span {p}) hgood p ⋯ hp =
breveGamma3 (Ideal.span {p}) hgood p ⋯ hp * breveGamma2 (Ideal.span {p}) hgood p ⋯ hp ^ 3⊢ breveGamma1 (Ideal.span {p}) hgood p ⋯ hp * breveGamma2 (Ideal.span {p}) hgood p ⋯ hp =
((canonicalSextic (Ideal.span {p}) hgood) ((Ideal.Quotient.mk (Ideal.span {p})) 4))⁻¹ *
breveGamma3 (Ideal.span {p}) hgood p ⋯ hp *
breveGamma2 (Ideal.span {p}) hgood p ⋯ hp ^ 3
change breveGamma1 (Ideal.span {p}) hgood p rfl hp *
breveGamma2 (Ideal.span {p}) hgood p rfl hp =
(χ 4)⁻¹ * breveGamma3 (Ideal.span {p}) hgood p rfl hp *
breveGamma2 (Ideal.span {p}) hgood p rfl hp ^ 3p:Ohp:p ≠ 0hprimary:lambda ^ 2 ∣ p - 1inst✝:(Ideal.span {p}).IsMaximalhgood:lambda ∉ Ideal.span {p}hchar:ringChar (O ⧸ Ideal.span {p}) ≠ 2χ:MulChar (O ⧸ Ideal.span {p}) ℂ := canonicalSextic (Ideal.span {p}) hgoodψ:AddChar (EisensteinEmbedding.O ⧸ Ideal.span {p}) ℂ := eisTraceModChar ShortDraftTrace.breveE ConcreteBreveE.breveE_period_coordinates p hps:ℂ := ↑‖eisEmbedding p‖hψ:ψ.IsPrimitivehχ1:χ ≠ 1hχ2:χ ^ 2 ≠ 1hχ4:χ ^ 4 ≠ 1hχ3:χ ^ 3 = (quadraticChar (O ⧸ Ideal.span {p})).ringHomComp (Int.castRingHom ℂ)hχ6:χ ^ 6 = 1hs:s ^ 2 = ↑(Fintype.card (O ⧸ Ideal.span {p}))hs0:s ≠ 0hfour:4 ≠ 0hχfour:χ 4 ≠ 0hmul:χ 4 * breveGamma1 (Ideal.span {p}) hgood p ⋯ hp * breveGamma2 (Ideal.span {p}) hgood p ⋯ hp =
breveGamma3 (Ideal.span {p}) hgood p ⋯ hp * breveGamma2 (Ideal.span {p}) hgood p ⋯ hp ^ 3⊢ breveGamma1 (Ideal.span {p}) hgood p ⋯ hp * breveGamma2 (Ideal.span {p}) hgood p ⋯ hp =
(χ 4)⁻¹ * breveGamma3 (Ideal.span {p}) hgood p ⋯ hp * breveGamma2 (Ideal.span {p}) hgood p ⋯ hp ^ 3
calc
breveGamma1 (Ideal.span {p}) hgood p rfl hp *
breveGamma2 (Ideal.span {p}) hgood p rfl hp =
(χ 4)⁻¹ * (χ 4 * breveGamma1 (Ideal.span {p}) hgood p rfl hp *
breveGamma2 (Ideal.span {p}) hgood p rfl hp) := byp:Ohp:p ≠ 0hprimary:lambda ^ 2 ∣ p - 1inst✝:(Ideal.span {p}).IsMaximalhgood:lambda ∉ Ideal.span {p}hchar:ringChar (O ⧸ Ideal.span {p}) ≠ 2χ:MulChar (O ⧸ Ideal.span {p}) ℂ := canonicalSextic (Ideal.span {p}) hgoodψ:AddChar (EisensteinEmbedding.O ⧸ Ideal.span {p}) ℂ := eisTraceModChar ShortDraftTrace.breveE ConcreteBreveE.breveE_period_coordinates p hps:ℂ := ↑‖eisEmbedding p‖hψ:ψ.IsPrimitivehχ1:χ ≠ 1hχ2:χ ^ 2 ≠ 1hχ4:χ ^ 4 ≠ 1hχ3:χ ^ 3 = (quadraticChar (O ⧸ Ideal.span {p})).ringHomComp (Int.castRingHom ℂ)hχ6:χ ^ 6 = 1hs:s ^ 2 = ↑(Fintype.card (O ⧸ Ideal.span {p}))hs0:s ≠ 0hfour:4 ≠ 0hχfour:χ 4 ≠ 0hmul:χ 4 * breveGamma1 (Ideal.span {p}) hgood p ⋯ hp * breveGamma2 (Ideal.span {p}) hgood p ⋯ hp =
breveGamma3 (Ideal.span {p}) hgood p ⋯ hp * breveGamma2 (Ideal.span {p}) hgood p ⋯ hp ^ 3⊢ breveGamma1 (Ideal.span {p}) hgood p ⋯ hp * breveGamma2 (Ideal.span {p}) hgood p ⋯ hp =
(χ 4)⁻¹ * (χ 4 * breveGamma1 (Ideal.span {p}) hgood p ⋯ hp * breveGamma2 (Ideal.span {p}) hgood p ⋯ hp) field_simpAll goals completed! 🐙
_ = (χ 4)⁻¹ * (breveGamma3 (Ideal.span {p}) hgood p rfl hp *
breveGamma2 (Ideal.span {p}) hgood p rfl hp ^ 3) := byp:Ohp:p ≠ 0hprimary:lambda ^ 2 ∣ p - 1inst✝:(Ideal.span {p}).IsMaximalhgood:lambda ∉ Ideal.span {p}hchar:ringChar (O ⧸ Ideal.span {p}) ≠ 2χ:MulChar (O ⧸ Ideal.span {p}) ℂ := canonicalSextic (Ideal.span {p}) hgoodψ:AddChar (EisensteinEmbedding.O ⧸ Ideal.span {p}) ℂ := eisTraceModChar ShortDraftTrace.breveE ConcreteBreveE.breveE_period_coordinates p hps:ℂ := ↑‖eisEmbedding p‖hψ:ψ.IsPrimitivehχ1:χ ≠ 1hχ2:χ ^ 2 ≠ 1hχ4:χ ^ 4 ≠ 1hχ3:χ ^ 3 = (quadraticChar (O ⧸ Ideal.span {p})).ringHomComp (Int.castRingHom ℂ)hχ6:χ ^ 6 = 1hs:s ^ 2 = ↑(Fintype.card (O ⧸ Ideal.span {p}))hs0:s ≠ 0hfour:4 ≠ 0hχfour:χ 4 ≠ 0hmul:χ 4 * breveGamma1 (Ideal.span {p}) hgood p ⋯ hp * breveGamma2 (Ideal.span {p}) hgood p ⋯ hp =
breveGamma3 (Ideal.span {p}) hgood p ⋯ hp * breveGamma2 (Ideal.span {p}) hgood p ⋯ hp ^ 3⊢ (χ 4)⁻¹ * (χ 4 * breveGamma1 (Ideal.span {p}) hgood p ⋯ hp * breveGamma2 (Ideal.span {p}) hgood p ⋯ hp) =
(χ 4)⁻¹ * (breveGamma3 (Ideal.span {p}) hgood p ⋯ hp * breveGamma2 (Ideal.span {p}) hgood p ⋯ hp ^ 3) rw [hmulp:Ohp:p ≠ 0hprimary:lambda ^ 2 ∣ p - 1inst✝:(Ideal.span {p}).IsMaximalhgood:lambda ∉ Ideal.span {p}hchar:ringChar (O ⧸ Ideal.span {p}) ≠ 2χ:MulChar (O ⧸ Ideal.span {p}) ℂ := canonicalSextic (Ideal.span {p}) hgoodψ:AddChar (EisensteinEmbedding.O ⧸ Ideal.span {p}) ℂ := eisTraceModChar ShortDraftTrace.breveE ConcreteBreveE.breveE_period_coordinates p hps:ℂ := ↑‖eisEmbedding p‖hψ:ψ.IsPrimitivehχ1:χ ≠ 1hχ2:χ ^ 2 ≠ 1hχ4:χ ^ 4 ≠ 1hχ3:χ ^ 3 = (quadraticChar (O ⧸ Ideal.span {p})).ringHomComp (Int.castRingHom ℂ)hχ6:χ ^ 6 = 1hs:s ^ 2 = ↑(Fintype.card (O ⧸ Ideal.span {p}))hs0:s ≠ 0hfour:4 ≠ 0hχfour:χ 4 ≠ 0hmul:χ 4 * breveGamma1 (Ideal.span {p}) hgood p ⋯ hp * breveGamma2 (Ideal.span {p}) hgood p ⋯ hp =
breveGamma3 (Ideal.span {p}) hgood p ⋯ hp * breveGamma2 (Ideal.span {p}) hgood p ⋯ hp ^ 3⊢ (χ 4)⁻¹ * (breveGamma3 (Ideal.span {p}) hgood p ⋯ hp * breveGamma2 (Ideal.span {p}) hgood p ⋯ hp ^ 3) =
(χ 4)⁻¹ * (breveGamma3 (Ideal.span {p}) hgood p ⋯ hp * breveGamma2 (Ideal.span {p}) hgood p ⋯ hp ^ 3)]All goals completed! 🐙
_ = _ := byp:Ohp:p ≠ 0hprimary:lambda ^ 2 ∣ p - 1inst✝:(Ideal.span {p}).IsMaximalhgood:lambda ∉ Ideal.span {p}hchar:ringChar (O ⧸ Ideal.span {p}) ≠ 2χ:MulChar (O ⧸ Ideal.span {p}) ℂ := canonicalSextic (Ideal.span {p}) hgoodψ:AddChar (EisensteinEmbedding.O ⧸ Ideal.span {p}) ℂ := eisTraceModChar ShortDraftTrace.breveE ConcreteBreveE.breveE_period_coordinates p hps:ℂ := ↑‖eisEmbedding p‖hψ:ψ.IsPrimitivehχ1:χ ≠ 1hχ2:χ ^ 2 ≠ 1hχ4:χ ^ 4 ≠ 1hχ3:χ ^ 3 = (quadraticChar (O ⧸ Ideal.span {p})).ringHomComp (Int.castRingHom ℂ)hχ6:χ ^ 6 = 1hs:s ^ 2 = ↑(Fintype.card (O ⧸ Ideal.span {p}))hs0:s ≠ 0hfour:4 ≠ 0hχfour:χ 4 ≠ 0hmul:χ 4 * breveGamma1 (Ideal.span {p}) hgood p ⋯ hp * breveGamma2 (Ideal.span {p}) hgood p ⋯ hp =
breveGamma3 (Ideal.span {p}) hgood p ⋯ hp * breveGamma2 (Ideal.span {p}) hgood p ⋯ hp ^ 3⊢ (χ 4)⁻¹ * (breveGamma3 (Ideal.span {p}) hgood p ⋯ hp * breveGamma2 (Ideal.span {p}) hgood p ⋯ hp ^ 3) =
(χ 4)⁻¹ * breveGamma3 (Ideal.span {p}) hgood p ⋯ hp * breveGamma2 (Ideal.span {p}) hgood p ⋯ hp ^ 3 ringAll goals completed! 🐙endsectionopen EisensteinEmbedding ConcreteTraceCRT IdealGaussCRTprivate theorem breveE_period_O (x : O) :
ShortDraftTrace.breveE (eisEmbedding x) = 1 := byx:O⊢ ShortDraftTrace.breveE (eisEmbedding x) = 1
obtain ⟨a, b, hx⟩ := exists_ab xx:Oa:ℤb:ℤhx:x = ↑a + ↑b * pb.gen⊢ ShortDraftTrace.breveE (eisEmbedding x) = 1
rw [hxx:Oa:ℤb:ℤhx:x = ↑a + ↑b * pb.gen⊢ ShortDraftTrace.breveE (eisEmbedding (↑a + ↑b * pb.gen)) = 1]x:Oa:ℤb:ℤhx:x = ↑a + ↑b * pb.gen⊢ ShortDraftTrace.breveE (eisEmbedding (↑a + ↑b * pb.gen)) = 1
change ShortDraftTrace.breveE
(embedding omega3 omega3_sq (a + b * pb.gen : O)) = 1x:Oa:ℤb:ℤhx:x = ↑a + ↑b * pb.gen⊢ ShortDraftTrace.breveE ((embedding omega3 omega3_sq) (↑a + ↑b * pb.gen)) = 1
rw [embedding_apply_abx:Oa:ℤb:ℤhx:x = ↑a + ↑b * pb.gen⊢ ShortDraftTrace.breveE (↑a + ↑b * omega3) = 1]x:Oa:ℤb:ℤhx:x = ↑a + ↑b * pb.gen⊢ ShortDraftTrace.breveE (↑a + ↑b * omega3) = 1
change ShortDraftTrace.breveE
((a : ℂ) + (b : ℂ) * ShortDraftTrace.ω₃) = 1x:Oa:ℤb:ℤhx:x = ↑a + ↑b * pb.gen⊢ ShortDraftTrace.breveE (↑a + ↑b * ShortDraftTrace.ω₃) = 1
exact ShortDraftTrace.breveE_period_integer a bAll goals completed! 🐙private noncomputable def eisBreveModChar (p : O) (hp : p ≠ 0) :
AddChar (O ⧸ Ideal.span {p}) ℂ :=
traceModChar eisEmbedding ShortDraftTrace.breveE 1 p
(eisEmbedding_ne_zero hp) one_ne_zero (byp:Ohp:p ≠ 0⊢ ∀ (x : EisensteinEmbedding.O), ShortDraftTrace.breveE (eisEmbedding x / 1) = 1
intro xp:Ohp:p ≠ 0x:EisensteinEmbedding.O⊢ ShortDraftTrace.breveE (eisEmbedding x / 1) = 1
simpa only [div_one] using breveE_period_O xAll goals completed! 🐙)theorem eisEmbedding_traceLambda :
eisEmbedding traceLambda = eisLam := by⊢ eisEmbedding traceLambda = eisLam
have hgen : pb.gen = omega := by
simpa only [pb, omega] using
(IsCyclotomicExtension.zeta_spec 3 ℚ K).integralPowerBasis_genhgen:pb.gen = omega⊢ eisEmbedding traceLambda = eisLam
change embedding omega3 omega3_sq (1 + 2 * omega : O) = 1 + 2 * omega3hgen:pb.gen = omega⊢ (embedding omega3 omega3_sq) (1 + 2 * omega) = 1 + 2 * omega3
rw [← hgenhgen:pb.gen = omega⊢ (embedding omega3 omega3_sq) (1 + 2 * pb.gen) = 1 + 2 * omega3]hgen:pb.gen = omega⊢ (embedding omega3 omega3_sq) (1 + 2 * pb.gen) = 1 + 2 * omega3
simp only [map_add, map_one, map_mul, map_ofNat, embedding_gen]All goals completed! 🐙private theorem eisBreveModChar_eq_mulShift (p : O) (hp : p ≠ 0) :
eisBreveModChar p hp =
(eisTraceModChar ShortDraftTrace.breveE
ConcreteBreveE.breveE_period_coordinates p hp).mulShift
(Ideal.Quotient.mk (Ideal.span {p}) traceLambda) := byp:Ohp:p ≠ 0⊢ eisBreveModChar p hp =
(eisTraceModChar ShortDraftTrace.breveE ConcreteBreveE.breveE_period_coordinates p hp).mulShift
((Ideal.Quotient.mk (Ideal.span {p})) traceLambda)
apply DFunLike.extp:Ohp:p ≠ 0⊢ ∀ (x : O ⧸ Ideal.span {p}),
(eisBreveModChar p hp) x =
((eisTraceModChar ShortDraftTrace.breveE ConcreteBreveE.breveE_period_coordinates p hp).mulShift
((Ideal.Quotient.mk (Ideal.span {p})) traceLambda))
x
intro zp:Ohp:p ≠ 0z:O ⧸ Ideal.span {p}⊢ (eisBreveModChar p hp) z =
((eisTraceModChar ShortDraftTrace.breveE ConcreteBreveE.breveE_period_coordinates p hp).mulShift
((Ideal.Quotient.mk (Ideal.span {p})) traceLambda))
z
refine Quotient.inductionOn' z ?_p:Ohp:p ≠ 0z:O ⧸ Ideal.span {p}⊢ ∀ (a : O),
(eisBreveModChar p hp) (Quotient.mk'' a) =
((eisTraceModChar ShortDraftTrace.breveE ConcreteBreveE.breveE_period_coordinates p hp).mulShift
((Ideal.Quotient.mk (Ideal.span {p})) traceLambda))
(Quotient.mk'' a)
intro xp:Ohp:p ≠ 0z:O ⧸ Ideal.span {p}x:O⊢ (eisBreveModChar p hp) (Quotient.mk'' x) =
((eisTraceModChar ShortDraftTrace.breveE ConcreteBreveE.breveE_period_coordinates p hp).mulShift
((Ideal.Quotient.mk (Ideal.span {p})) traceLambda))
(Quotient.mk'' x)
change ShortDraftTrace.breveE (eisEmbedding x / (eisEmbedding p * 1)) =
ShortDraftTrace.breveE
(eisEmbedding (traceLambda * x) / (eisEmbedding p * eisLam))p:Ohp:p ≠ 0z:O ⧸ Ideal.span {p}x:O⊢ ShortDraftTrace.breveE (eisEmbedding x / (eisEmbedding p * 1)) =
ShortDraftTrace.breveE (eisEmbedding (traceLambda * x) / (eisEmbedding p * eisLam))
congr 1e_6p:Ohp:p ≠ 0z:O ⧸ Ideal.span {p}x:O⊢ eisEmbedding x / (eisEmbedding p * 1) = eisEmbedding (traceLambda * x) / (eisEmbedding p * eisLam)
rw [map_mul,e_6p:Ohp:p ≠ 0z:O ⧸ Ideal.span {p}x:O⊢ eisEmbedding x / (eisEmbedding p * 1) = eisEmbedding traceLambda * eisEmbedding x / (eisEmbedding p * eisLam) eisEmbedding_traceLambdae_6p:Ohp:p ≠ 0z:O ⧸ Ideal.span {p}x:O⊢ eisEmbedding x / (eisEmbedding p * 1) = eisLam * eisEmbedding x / (eisEmbedding p * eisLam)]e_6p:Ohp:p ≠ 0z:O ⧸ Ideal.span {p}x:O⊢ eisEmbedding x / (eisEmbedding p * 1) = eisLam * eisEmbedding x / (eisEmbedding p * eisLam)
field_simp [eisEmbedding_ne_zero hp, eisLam_ne_zero]All goals completed! 🐙endsectionopen EisensteinEmbedding ConcreteTraceCRT PrimitiveTracenoncomputable def breveLocalG (P : Ideal O) [P.IsMaximal]
(hgood : lambda ∉ P) (p : O) (hP : P = Ideal.span {p})
(hp : p ≠ 0) : ℂ :=
(canonicalSextic P hgood (Ideal.Quotient.mk P (4 : O)))⁻¹ *
breveGamma3 P hgood p hP hptheorem breveGamma1_gamma2_eq_neg_alpha_G (P : Ideal O) [P.IsMaximal]
(hgood : lambda ∉ P) (hchar : ringChar (O ⧸ P) ≠ 2)
(p : O) (hP : P = Ideal.span {p}) (hp : p ≠ 0)
(hprimary : lambda ^ 2 ∣ p - 1) :
breveGamma1 P hgood p hP hp * breveGamma2 P hgood p hP hp =
(-(eisEmbedding p) / (‖eisEmbedding p‖ : ℂ)) *
breveLocalG P hgood p hP hp := byP:Ideal Oinst✝:P.IsMaximalhgood:lambda ∉ Phchar:ringChar (O ⧸ P) ≠ 2p:OhP:P = Ideal.span {p}hp:p ≠ 0hprimary:lambda ^ 2 ∣ p - 1⊢ breveGamma1 P hgood p hP hp * breveGamma2 P hgood p hP hp =
-eisEmbedding p / ↑‖eisEmbedding p‖ * breveLocalG P hgood p hP hp
rw [breveGamma1_gamma2_relation P hgood hchar p hP hp hprimary,P:Ideal Oinst✝:P.IsMaximalhgood:lambda ∉ Phchar:ringChar (O ⧸ P) ≠ 2p:OhP:P = Ideal.span {p}hp:p ≠ 0hprimary:lambda ^ 2 ∣ p - 1⊢ ((canonicalSextic P hgood) ((Ideal.Quotient.mk P) 4))⁻¹ * breveGamma3 P hgood p hP hp *
breveGamma2 P hgood p hP hp ^ 3 =
-eisEmbedding p / ↑‖eisEmbedding p‖ * breveLocalG P hgood p hP hp
breveGamma2_cube P hgood p hP hp hprimaryP:Ideal Oinst✝:P.IsMaximalhgood:lambda ∉ Phchar:ringChar (O ⧸ P) ≠ 2p:OhP:P = Ideal.span {p}hp:p ≠ 0hprimary:lambda ^ 2 ∣ p - 1⊢ ((canonicalSextic P hgood) ((Ideal.Quotient.mk P) 4))⁻¹ * breveGamma3 P hgood p hP hp *
(-eisEmbedding p / ↑‖eisEmbedding p‖) =
-eisEmbedding p / ↑‖eisEmbedding p‖ * breveLocalG P hgood p hP hp]P:Ideal Oinst✝:P.IsMaximalhgood:lambda ∉ Phchar:ringChar (O ⧸ P) ≠ 2p:OhP:P = Ideal.span {p}hp:p ≠ 0hprimary:lambda ^ 2 ∣ p - 1⊢ ((canonicalSextic P hgood) ((Ideal.Quotient.mk P) 4))⁻¹ * breveGamma3 P hgood p hP hp *
(-eisEmbedding p / ↑‖eisEmbedding p‖) =
-eisEmbedding p / ↑‖eisEmbedding p‖ * breveLocalG P hgood p hP hp
unfold breveLocalGP:Ideal Oinst✝:P.IsMaximalhgood:lambda ∉ Phchar:ringChar (O ⧸ P) ≠ 2p:OhP:P = Ideal.span {p}hp:p ≠ 0hprimary:lambda ^ 2 ∣ p - 1⊢ ((canonicalSextic P hgood) ((Ideal.Quotient.mk P) 4))⁻¹ * breveGamma3 P hgood p hP hp *
(-eisEmbedding p / ↑‖eisEmbedding p‖) =
-eisEmbedding p / ↑‖eisEmbedding p‖ *
(((canonicalSextic P hgood) ((Ideal.Quotient.mk P) 4))⁻¹ * breveGamma3 P hgood p hP hp)
ringAll goals completed! 🐙endopen EisensteinEmbedding ConcreteTraceCRT ConcreteBreveEnoncomputable def breveGamma2Product
(a b : O) (ha : a ≠ 0) (hb : b ≠ 0)
[haMax : (Ideal.span {a}).IsMaximal]
[hbMax : (Ideal.span {b}).IsMaximal]
(hgooda : lambda ∉ Ideal.span {a})
(hgoodb : lambda ∉ Ideal.span {b}) : ℂ := bya:Ob:Oha:a ≠ 0hb:b ≠ 0haMax:(Ideal.span {a}).IsMaximalhbMax:(Ideal.span {b}).IsMaximalhgooda:lambda ∉ Ideal.span {a}hgoodb:lambda ∉ Ideal.span {b}⊢ ℂ
letI : Finite (O ⧸ (Ideal.span {a}) * (Ideal.span {b})) :=
finite_quotient_product ha hba:Ob:Oha:a ≠ 0hb:b ≠ 0haMax:(Ideal.span {a}).IsMaximalhbMax:(Ideal.span {b}).IsMaximalhgooda:lambda ∉ Ideal.span {a}hgoodb:lambda ∉ Ideal.span {b}this:Finite (O ⧸ Ideal.span {a} * Ideal.span {b}) := ···⊢ ℂ
letI : Fintype (O ⧸ (Ideal.span {a}) * (Ideal.span {b})) := Fintype.ofFinite _a:Ob:Oha:a ≠ 0hb:b ≠ 0haMax:(Ideal.span {a}).IsMaximalhbMax:(Ideal.span {b}).IsMaximalhgooda:lambda ∉ Ideal.span {a}hgoodb:lambda ∉ Ideal.span {b}this✝:Finite (O ⧸ Ideal.span {a} * Ideal.span {b}) := ···this:Fintype (O ⧸ Ideal.span {a} * Ideal.span {b}) := Fintype.ofFinite (O ⧸ Ideal.span {a} * Ideal.span {b})⊢ ℂ
let χa := canonicalSextic (Ideal.span {a}) hgoodaa:Ob:Oha:a ≠ 0hb:b ≠ 0haMax:(Ideal.span {a}).IsMaximalhbMax:(Ideal.span {b}).IsMaximalhgooda:lambda ∉ Ideal.span {a}hgoodb:lambda ∉ Ideal.span {b}this✝:Finite (O ⧸ Ideal.span {a} * Ideal.span {b}) := ···this:Fintype (O ⧸ Ideal.span {a} * Ideal.span {b}) := Fintype.ofFinite (O ⧸ Ideal.span {a} * Ideal.span {b})χa:MulChar (O ⧸ Ideal.span {a}) ℂ := canonicalSextic (Ideal.span {a}) hgooda⊢ ℂ
let χb := canonicalSextic (Ideal.span {b}) hgoodba:Ob:Oha:a ≠ 0hb:b ≠ 0haMax:(Ideal.span {a}).IsMaximalhbMax:(Ideal.span {b}).IsMaximalhgooda:lambda ∉ Ideal.span {a}hgoodb:lambda ∉ Ideal.span {b}this✝:Finite (O ⧸ Ideal.span {a} * Ideal.span {b}) := ···this:Fintype (O ⧸ Ideal.span {a} * Ideal.span {b}) := Fintype.ofFinite (O ⧸ Ideal.span {a} * Ideal.span {b})χa:MulChar (O ⧸ Ideal.span {a}) ℂ := canonicalSextic (Ideal.span {a}) hgoodaχb:MulChar (O ⧸ Ideal.span {b}) ℂ := canonicalSextic (Ideal.span {b}) hgoodb⊢ ℂ
exact (∑ x : O ⧸ (Ideal.span {a}) * (Ideal.span {b}),
(χa ^ 2) (Ideal.Quotient.factor
(Ideal.mul_le_left : (Ideal.span {a}) * (Ideal.span {b}) ≤ Ideal.span {a}) x) *
(χb ^ 2) (Ideal.Quotient.factor
(Ideal.mul_le_right : (Ideal.span {a}) * (Ideal.span {b}) ≤ Ideal.span {b}) x) *
eisTraceProdChar ShortDraftTrace.breveE breveE_period_coordinates
a b ha hb x) / (‖eisEmbedding (a * b)‖ : ℂ)All goals completed! 🐙theorem breveGamma2Product_crt
(a b : O) (ha : a ≠ 0) (hb : b ≠ 0)
[haMax : (Ideal.span {a}).IsMaximal]
[hbMax : (Ideal.span {b}).IsMaximal]
(hgooda : lambda ∉ Ideal.span {a})
(hgoodb : lambda ∉ Ideal.span {b})
(hcop : IsCoprime (Ideal.span {a}) (Ideal.span {b})) :
breveGamma2Product a b ha hb hgooda hgoodb =
(canonicalSextic (Ideal.span {a}) hgooda
(Ideal.Quotient.mk (Ideal.span {a}) b)) ^ 2 *
(canonicalSextic (Ideal.span {b}) hgoodb
(Ideal.Quotient.mk (Ideal.span {b}) a)) ^ 2 *
breveGamma2 (Ideal.span {a}) hgooda a rfl ha *
breveGamma2 (Ideal.span {b}) hgoodb b rfl hb := bya:Ob:Oha:a ≠ 0hb:b ≠ 0haMax:(Ideal.span {a}).IsMaximalhbMax:(Ideal.span {b}).IsMaximalhgooda:lambda ∉ Ideal.span {a}hgoodb:lambda ∉ Ideal.span {b}hcop:IsCoprime (Ideal.span {a}) (Ideal.span {b})⊢ breveGamma2Product a b ha hb hgooda hgoodb =
(canonicalSextic (Ideal.span {a}) hgooda) ((Ideal.Quotient.mk (Ideal.span {a})) b) ^ 2 *
(canonicalSextic (Ideal.span {b}) hgoodb) ((Ideal.Quotient.mk (Ideal.span {b})) a) ^ 2 *
breveGamma2 (Ideal.span {a}) hgooda a ⋯ ha *
breveGamma2 (Ideal.span {b}) hgoodb b ⋯ hb
let : Finite (O ⧸ (Ideal.span {a}) * (Ideal.span {b})) :=
finite_quotient_product ha hba:Ob:Oha:a ≠ 0hb:b ≠ 0haMax:(Ideal.span {a}).IsMaximalhbMax:(Ideal.span {b}).IsMaximalhgooda:lambda ∉ Ideal.span {a}hgoodb:lambda ∉ Ideal.span {b}hcop:IsCoprime (Ideal.span {a}) (Ideal.span {b})this:Finite (O ⧸ Ideal.span {a} * Ideal.span {b}) := ···⊢ breveGamma2Product a b ha hb hgooda hgoodb =
(canonicalSextic (Ideal.span {a}) hgooda) ((Ideal.Quotient.mk (Ideal.span {a})) b) ^ 2 *
(canonicalSextic (Ideal.span {b}) hgoodb) ((Ideal.Quotient.mk (Ideal.span {b})) a) ^ 2 *
breveGamma2 (Ideal.span {a}) hgooda a ⋯ ha *
breveGamma2 (Ideal.span {b}) hgoodb b ⋯ hb
let : Fintype (O ⧸ (Ideal.span {a}) * (Ideal.span {b})) := Fintype.ofFinite _a:Ob:Oha:a ≠ 0hb:b ≠ 0haMax:(Ideal.span {a}).IsMaximalhbMax:(Ideal.span {b}).IsMaximalhgooda:lambda ∉ Ideal.span {a}hgoodb:lambda ∉ Ideal.span {b}hcop:IsCoprime (Ideal.span {a}) (Ideal.span {b})this✝:Finite (O ⧸ Ideal.span {a} * Ideal.span {b}) := ···this:Fintype (O ⧸ Ideal.span {a} * Ideal.span {b}) := Fintype.ofFinite (O ⧸ Ideal.span {a} * Ideal.span {b})⊢ breveGamma2Product a b ha hb hgooda hgoodb =
(canonicalSextic (Ideal.span {a}) hgooda) ((Ideal.Quotient.mk (Ideal.span {a})) b) ^ 2 *
(canonicalSextic (Ideal.span {b}) hgoodb) ((Ideal.Quotient.mk (Ideal.span {b})) a) ^ 2 *
breveGamma2 (Ideal.span {a}) hgooda a ⋯ ha *
breveGamma2 (Ideal.span {b}) hgoodb b ⋯ hb
let : Finite (O ⧸ Ideal.span {a}) := finite_quotient_span haa:Ob:Oha:a ≠ 0hb:b ≠ 0haMax:(Ideal.span {a}).IsMaximalhbMax:(Ideal.span {b}).IsMaximalhgooda:lambda ∉ Ideal.span {a}hgoodb:lambda ∉ Ideal.span {b}hcop:IsCoprime (Ideal.span {a}) (Ideal.span {b})this✝¹:Finite (O ⧸ Ideal.span {a} * Ideal.span {b}) := ···this✝:Fintype (O ⧸ Ideal.span {a} * Ideal.span {b}) := Fintype.ofFinite (O ⧸ Ideal.span {a} * Ideal.span {b})this:Finite (O ⧸ Ideal.span {a}) := ···⊢ breveGamma2Product a b ha hb hgooda hgoodb =
(canonicalSextic (Ideal.span {a}) hgooda) ((Ideal.Quotient.mk (Ideal.span {a})) b) ^ 2 *
(canonicalSextic (Ideal.span {b}) hgoodb) ((Ideal.Quotient.mk (Ideal.span {b})) a) ^ 2 *
breveGamma2 (Ideal.span {a}) hgooda a ⋯ ha *
breveGamma2 (Ideal.span {b}) hgoodb b ⋯ hb
let : Fintype (O ⧸ Ideal.span {a}) := Fintype.ofFinite _a:Ob:Oha:a ≠ 0hb:b ≠ 0haMax:(Ideal.span {a}).IsMaximalhbMax:(Ideal.span {b}).IsMaximalhgooda:lambda ∉ Ideal.span {a}hgoodb:lambda ∉ Ideal.span {b}hcop:IsCoprime (Ideal.span {a}) (Ideal.span {b})this✝²:Finite (O ⧸ Ideal.span {a} * Ideal.span {b}) := ···this✝¹:Fintype (O ⧸ Ideal.span {a} * Ideal.span {b}) := Fintype.ofFinite (O ⧸ Ideal.span {a} * Ideal.span {b})this✝:Finite (O ⧸ Ideal.span {a}) := ···this:Fintype (O ⧸ Ideal.span {a}) := Fintype.ofFinite (O ⧸ Ideal.span {a})⊢ breveGamma2Product a b ha hb hgooda hgoodb =
(canonicalSextic (Ideal.span {a}) hgooda) ((Ideal.Quotient.mk (Ideal.span {a})) b) ^ 2 *
(canonicalSextic (Ideal.span {b}) hgoodb) ((Ideal.Quotient.mk (Ideal.span {b})) a) ^ 2 *
breveGamma2 (Ideal.span {a}) hgooda a ⋯ ha *
breveGamma2 (Ideal.span {b}) hgoodb b ⋯ hb
let : Finite (O ⧸ Ideal.span {b}) := finite_quotient_span hba:Ob:Oha:a ≠ 0hb:b ≠ 0haMax:(Ideal.span {a}).IsMaximalhbMax:(Ideal.span {b}).IsMaximalhgooda:lambda ∉ Ideal.span {a}hgoodb:lambda ∉ Ideal.span {b}hcop:IsCoprime (Ideal.span {a}) (Ideal.span {b})this✝³:Finite (O ⧸ Ideal.span {a} * Ideal.span {b}) := ···this✝²:Fintype (O ⧸ Ideal.span {a} * Ideal.span {b}) := Fintype.ofFinite (O ⧸ Ideal.span {a} * Ideal.span {b})this✝¹:Finite (O ⧸ Ideal.span {a}) := ···this✝:Fintype (O ⧸ Ideal.span {a}) := Fintype.ofFinite (O ⧸ Ideal.span {a})this:Finite (O ⧸ Ideal.span {b}) := ···⊢ breveGamma2Product a b ha hb hgooda hgoodb =
(canonicalSextic (Ideal.span {a}) hgooda) ((Ideal.Quotient.mk (Ideal.span {a})) b) ^ 2 *
(canonicalSextic (Ideal.span {b}) hgoodb) ((Ideal.Quotient.mk (Ideal.span {b})) a) ^ 2 *
breveGamma2 (Ideal.span {a}) hgooda a ⋯ ha *
breveGamma2 (Ideal.span {b}) hgoodb b ⋯ hb
let : Fintype (O ⧸ Ideal.span {b}) := Fintype.ofFinite _a:Ob:Oha:a ≠ 0hb:b ≠ 0haMax:(Ideal.span {a}).IsMaximalhbMax:(Ideal.span {b}).IsMaximalhgooda:lambda ∉ Ideal.span {a}hgoodb:lambda ∉ Ideal.span {b}hcop:IsCoprime (Ideal.span {a}) (Ideal.span {b})this✝⁴:Finite (O ⧸ Ideal.span {a} * Ideal.span {b}) := ···this✝³:Fintype (O ⧸ Ideal.span {a} * Ideal.span {b}) := Fintype.ofFinite (O ⧸ Ideal.span {a} * Ideal.span {b})this✝²:Finite (O ⧸ Ideal.span {a}) := ···this✝¹:Fintype (O ⧸ Ideal.span {a}) := Fintype.ofFinite (O ⧸ Ideal.span {a})this✝:Finite (O ⧸ Ideal.span {b}) := ···this:Fintype (O ⧸ Ideal.span {b}) := Fintype.ofFinite (O ⧸ Ideal.span {b})⊢ breveGamma2Product a b ha hb hgooda hgoodb =
(canonicalSextic (Ideal.span {a}) hgooda) ((Ideal.Quotient.mk (Ideal.span {a})) b) ^ 2 *
(canonicalSextic (Ideal.span {b}) hgoodb) ((Ideal.Quotient.mk (Ideal.span {b})) a) ^ 2 *
breveGamma2 (Ideal.span {a}) hgooda a ⋯ ha *
breveGamma2 (Ideal.span {b}) hgoodb b ⋯ hb
let χa := canonicalSextic (Ideal.span {a}) hgoodaa:Ob:Oha:a ≠ 0hb:b ≠ 0haMax:(Ideal.span {a}).IsMaximalhbMax:(Ideal.span {b}).IsMaximalhgooda:lambda ∉ Ideal.span {a}hgoodb:lambda ∉ Ideal.span {b}hcop:IsCoprime (Ideal.span {a}) (Ideal.span {b})this✝⁴:Finite (O ⧸ Ideal.span {a} * Ideal.span {b}) := ···this✝³:Fintype (O ⧸ Ideal.span {a} * Ideal.span {b}) := Fintype.ofFinite (O ⧸ Ideal.span {a} * Ideal.span {b})this✝²:Finite (O ⧸ Ideal.span {a}) := ···this✝¹:Fintype (O ⧸ Ideal.span {a}) := Fintype.ofFinite (O ⧸ Ideal.span {a})this✝:Finite (O ⧸ Ideal.span {b}) := ···this:Fintype (O ⧸ Ideal.span {b}) := Fintype.ofFinite (O ⧸ Ideal.span {b})χa:MulChar (O ⧸ Ideal.span {a}) ℂ := canonicalSextic (Ideal.span {a}) hgooda⊢ breveGamma2Product a b ha hb hgooda hgoodb =
(canonicalSextic (Ideal.span {a}) hgooda) ((Ideal.Quotient.mk (Ideal.span {a})) b) ^ 2 *
(canonicalSextic (Ideal.span {b}) hgoodb) ((Ideal.Quotient.mk (Ideal.span {b})) a) ^ 2 *
breveGamma2 (Ideal.span {a}) hgooda a ⋯ ha *
breveGamma2 (Ideal.span {b}) hgoodb b ⋯ hb
let χb := canonicalSextic (Ideal.span {b}) hgoodba:Ob:Oha:a ≠ 0hb:b ≠ 0haMax:(Ideal.span {a}).IsMaximalhbMax:(Ideal.span {b}).IsMaximalhgooda:lambda ∉ Ideal.span {a}hgoodb:lambda ∉ Ideal.span {b}hcop:IsCoprime (Ideal.span {a}) (Ideal.span {b})this✝⁴:Finite (O ⧸ Ideal.span {a} * Ideal.span {b}) := ···this✝³:Fintype (O ⧸ Ideal.span {a} * Ideal.span {b}) := Fintype.ofFinite (O ⧸ Ideal.span {a} * Ideal.span {b})this✝²:Finite (O ⧸ Ideal.span {a}) := ···this✝¹:Fintype (O ⧸ Ideal.span {a}) := Fintype.ofFinite (O ⧸ Ideal.span {a})this✝:Finite (O ⧸ Ideal.span {b}) := ···this:Fintype (O ⧸ Ideal.span {b}) := Fintype.ofFinite (O ⧸ Ideal.span {b})χa:MulChar (O ⧸ Ideal.span {a}) ℂ := canonicalSextic (Ideal.span {a}) hgoodaχb:MulChar (O ⧸ Ideal.span {b}) ℂ := canonicalSextic (Ideal.span {b}) hgoodb⊢ breveGamma2Product a b ha hb hgooda hgoodb =
(canonicalSextic (Ideal.span {a}) hgooda) ((Ideal.Quotient.mk (Ideal.span {a})) b) ^ 2 *
(canonicalSextic (Ideal.span {b}) hgoodb) ((Ideal.Quotient.mk (Ideal.span {b})) a) ^ 2 *
breveGamma2 (Ideal.span {a}) hgooda a ⋯ ha *
breveGamma2 (Ideal.span {b}) hgoodb b ⋯ hb
have hsum := gauss_sum_breveE_actual_O a b ha hb hcop (χa ^ 2) (χb ^ 2)a:Ob:Oha:a ≠ 0hb:b ≠ 0haMax:(Ideal.span {a}).IsMaximalhbMax:(Ideal.span {b}).IsMaximalhgooda:lambda ∉ Ideal.span {a}hgoodb:lambda ∉ Ideal.span {b}hcop:IsCoprime (Ideal.span {a}) (Ideal.span {b})this✝⁴:Finite (O ⧸ Ideal.span {a} * Ideal.span {b}) := ···this✝³:Fintype (O ⧸ Ideal.span {a} * Ideal.span {b}) := Fintype.ofFinite (O ⧸ Ideal.span {a} * Ideal.span {b})this✝²:Finite (O ⧸ Ideal.span {a}) := ···this✝¹:Fintype (O ⧸ Ideal.span {a}) := Fintype.ofFinite (O ⧸ Ideal.span {a})this✝:Finite (O ⧸ Ideal.span {b}) := ···this:Fintype (O ⧸ Ideal.span {b}) := Fintype.ofFinite (O ⧸ Ideal.span {b})χa:MulChar (O ⧸ Ideal.span {a}) ℂ := canonicalSextic (Ideal.span {a}) hgoodaχb:MulChar (O ⧸ Ideal.span {b}) ℂ := canonicalSextic (Ideal.span {b}) hgoodbhsum:∑ x,
(χa ^ 2) ((Ideal.Quotient.factor ⋯) x) * (χb ^ 2) ((Ideal.Quotient.factor ⋯) x) *
(eisTraceProdChar ShortDraftTrace.breveE breveE_period_coordinates a b ha hb) x =
(χa ^ 2) ((Ideal.Quotient.mk (Ideal.span {a})) b) * (χb ^ 2) ((Ideal.Quotient.mk (Ideal.span {b})) a) *
gaussSum (χa ^ 2) (eisTraceModChar ShortDraftTrace.breveE breveE_period_coordinates a ha) *
gaussSum (χb ^ 2) (eisTraceModChar ShortDraftTrace.breveE breveE_period_coordinates b hb)⊢ breveGamma2Product a b ha hb hgooda hgoodb =
(canonicalSextic (Ideal.span {a}) hgooda) ((Ideal.Quotient.mk (Ideal.span {a})) b) ^ 2 *
(canonicalSextic (Ideal.span {b}) hgoodb) ((Ideal.Quotient.mk (Ideal.span {b})) a) ^ 2 *
breveGamma2 (Ideal.span {a}) hgooda a ⋯ ha *
breveGamma2 (Ideal.span {b}) hgoodb b ⋯ hb
have hnorm : (‖eisEmbedding (a * b)‖ : ℂ) =
(‖eisEmbedding a‖ : ℂ) * (‖eisEmbedding b‖ : ℂ) := by
rw [map_mul,a:Ob:Oha:a ≠ 0hb:b ≠ 0haMax:(Ideal.span {a}).IsMaximalhbMax:(Ideal.span {b}).IsMaximalhgooda:lambda ∉ Ideal.span {a}hgoodb:lambda ∉ Ideal.span {b}hcop:IsCoprime (Ideal.span {a}) (Ideal.span {b})this✝⁴:Finite (O ⧸ Ideal.span {a} * Ideal.span {b}) := ···this✝³:Fintype (O ⧸ Ideal.span {a} * Ideal.span {b}) := Fintype.ofFinite (O ⧸ Ideal.span {a} * Ideal.span {b})this✝²:Finite (O ⧸ Ideal.span {a}) := ···this✝¹:Fintype (O ⧸ Ideal.span {a}) := Fintype.ofFinite (O ⧸ Ideal.span {a})this✝:Finite (O ⧸ Ideal.span {b}) := ···this:Fintype (O ⧸ Ideal.span {b}) := Fintype.ofFinite (O ⧸ Ideal.span {b})χa:MulChar (O ⧸ Ideal.span {a}) ℂ := canonicalSextic (Ideal.span {a}) hgoodaχb:MulChar (O ⧸ Ideal.span {b}) ℂ := canonicalSextic (Ideal.span {b}) hgoodbhsum:∑ x,
(χa ^ 2) ((Ideal.Quotient.factor ⋯) x) * (χb ^ 2) ((Ideal.Quotient.factor ⋯) x) *
(eisTraceProdChar ShortDraftTrace.breveE breveE_period_coordinates a b ha hb) x =
(χa ^ 2) ((Ideal.Quotient.mk (Ideal.span {a})) b) * (χb ^ 2) ((Ideal.Quotient.mk (Ideal.span {b})) a) *
gaussSum (χa ^ 2) (eisTraceModChar ShortDraftTrace.breveE breveE_period_coordinates a ha) *
gaussSum (χb ^ 2) (eisTraceModChar ShortDraftTrace.breveE breveE_period_coordinates b hb)⊢ ↑‖eisEmbedding a * eisEmbedding b‖ = ↑‖eisEmbedding a‖ * ↑‖eisEmbedding b‖ norm_mula:Ob:Oha:a ≠ 0hb:b ≠ 0haMax:(Ideal.span {a}).IsMaximalhbMax:(Ideal.span {b}).IsMaximalhgooda:lambda ∉ Ideal.span {a}hgoodb:lambda ∉ Ideal.span {b}hcop:IsCoprime (Ideal.span {a}) (Ideal.span {b})this✝⁴:Finite (O ⧸ Ideal.span {a} * Ideal.span {b}) := ···this✝³:Fintype (O ⧸ Ideal.span {a} * Ideal.span {b}) := Fintype.ofFinite (O ⧸ Ideal.span {a} * Ideal.span {b})this✝²:Finite (O ⧸ Ideal.span {a}) := ···this✝¹:Fintype (O ⧸ Ideal.span {a}) := Fintype.ofFinite (O ⧸ Ideal.span {a})this✝:Finite (O ⧸ Ideal.span {b}) := ···this:Fintype (O ⧸ Ideal.span {b}) := Fintype.ofFinite (O ⧸ Ideal.span {b})χa:MulChar (O ⧸ Ideal.span {a}) ℂ := canonicalSextic (Ideal.span {a}) hgoodaχb:MulChar (O ⧸ Ideal.span {b}) ℂ := canonicalSextic (Ideal.span {b}) hgoodbhsum:∑ x,
(χa ^ 2) ((Ideal.Quotient.factor ⋯) x) * (χb ^ 2) ((Ideal.Quotient.factor ⋯) x) *
(eisTraceProdChar ShortDraftTrace.breveE breveE_period_coordinates a b ha hb) x =
(χa ^ 2) ((Ideal.Quotient.mk (Ideal.span {a})) b) * (χb ^ 2) ((Ideal.Quotient.mk (Ideal.span {b})) a) *
gaussSum (χa ^ 2) (eisTraceModChar ShortDraftTrace.breveE breveE_period_coordinates a ha) *
gaussSum (χb ^ 2) (eisTraceModChar ShortDraftTrace.breveE breveE_period_coordinates b hb)⊢ ↑(‖eisEmbedding a‖ * ‖eisEmbedding b‖) = ↑‖eisEmbedding a‖ * ↑‖eisEmbedding b‖]a:Ob:Oha:a ≠ 0hb:b ≠ 0haMax:(Ideal.span {a}).IsMaximalhbMax:(Ideal.span {b}).IsMaximalhgooda:lambda ∉ Ideal.span {a}hgoodb:lambda ∉ Ideal.span {b}hcop:IsCoprime (Ideal.span {a}) (Ideal.span {b})this✝⁴:Finite (O ⧸ Ideal.span {a} * Ideal.span {b}) := ···this✝³:Fintype (O ⧸ Ideal.span {a} * Ideal.span {b}) := Fintype.ofFinite (O ⧸ Ideal.span {a} * Ideal.span {b})this✝²:Finite (O ⧸ Ideal.span {a}) := ···this✝¹:Fintype (O ⧸ Ideal.span {a}) := Fintype.ofFinite (O ⧸ Ideal.span {a})this✝:Finite (O ⧸ Ideal.span {b}) := ···this:Fintype (O ⧸ Ideal.span {b}) := Fintype.ofFinite (O ⧸ Ideal.span {b})χa:MulChar (O ⧸ Ideal.span {a}) ℂ := canonicalSextic (Ideal.span {a}) hgoodaχb:MulChar (O ⧸ Ideal.span {b}) ℂ := canonicalSextic (Ideal.span {b}) hgoodbhsum:∑ x,
(χa ^ 2) ((Ideal.Quotient.factor ⋯) x) * (χb ^ 2) ((Ideal.Quotient.factor ⋯) x) *
(eisTraceProdChar ShortDraftTrace.breveE breveE_period_coordinates a b ha hb) x =
(χa ^ 2) ((Ideal.Quotient.mk (Ideal.span {a})) b) * (χb ^ 2) ((Ideal.Quotient.mk (Ideal.span {b})) a) *
gaussSum (χa ^ 2) (eisTraceModChar ShortDraftTrace.breveE breveE_period_coordinates a ha) *
gaussSum (χb ^ 2) (eisTraceModChar ShortDraftTrace.breveE breveE_period_coordinates b hb)⊢ ↑(‖eisEmbedding a‖ * ‖eisEmbedding b‖) = ↑‖eisEmbedding a‖ * ↑‖eisEmbedding b‖
norm_casta:Ob:Oha:a ≠ 0hb:b ≠ 0haMax:(Ideal.span {a}).IsMaximalhbMax:(Ideal.span {b}).IsMaximalhgooda:lambda ∉ Ideal.span {a}hgoodb:lambda ∉ Ideal.span {b}hcop:IsCoprime (Ideal.span {a}) (Ideal.span {b})this✝⁴:Finite (O ⧸ Ideal.span {a} * Ideal.span {b}) := ···this✝³:Fintype (O ⧸ Ideal.span {a} * Ideal.span {b}) := Fintype.ofFinite (O ⧸ Ideal.span {a} * Ideal.span {b})this✝²:Finite (O ⧸ Ideal.span {a}) := ···this✝¹:Fintype (O ⧸ Ideal.span {a}) := Fintype.ofFinite (O ⧸ Ideal.span {a})this✝:Finite (O ⧸ Ideal.span {b}) := ···this:Fintype (O ⧸ Ideal.span {b}) := Fintype.ofFinite (O ⧸ Ideal.span {b})χa:MulChar (O ⧸ Ideal.span {a}) ℂ := canonicalSextic (Ideal.span {a}) hgoodaχb:MulChar (O ⧸ Ideal.span {b}) ℂ := canonicalSextic (Ideal.span {b}) hgoodbhsum:∑ x,
(χa ^ 2) ((Ideal.Quotient.factor ⋯) x) * (χb ^ 2) ((Ideal.Quotient.factor ⋯) x) *
(eisTraceProdChar ShortDraftTrace.breveE breveE_period_coordinates a b ha hb) x =
(χa ^ 2) ((Ideal.Quotient.mk (Ideal.span {a})) b) * (χb ^ 2) ((Ideal.Quotient.mk (Ideal.span {b})) a) *
gaussSum (χa ^ 2) (eisTraceModChar ShortDraftTrace.breveE breveE_period_coordinates a ha) *
gaussSum (χb ^ 2) (eisTraceModChar ShortDraftTrace.breveE breveE_period_coordinates b hb)hnorm:↑‖eisEmbedding (a * b)‖ = ↑‖eisEmbedding a‖ * ↑‖eisEmbedding b‖⊢ breveGamma2Product a b ha hb hgooda hgoodb =
(canonicalSextic (Ideal.span {a}) hgooda) ((Ideal.Quotient.mk (Ideal.span {a})) b) ^ 2 *
(canonicalSextic (Ideal.span {b}) hgoodb) ((Ideal.Quotient.mk (Ideal.span {b})) a) ^ 2 *
breveGamma2 (Ideal.span {a}) hgooda a ⋯ ha *
breveGamma2 (Ideal.span {b}) hgoodb b ⋯ hb
change (∑ x : O ⧸ (Ideal.span {a}) * (Ideal.span {b}),
(χa ^ 2) (Ideal.Quotient.factor
(Ideal.mul_le_left : (Ideal.span {a}) * (Ideal.span {b}) ≤ Ideal.span {a}) x) *
(χb ^ 2) (Ideal.Quotient.factor
(Ideal.mul_le_right : (Ideal.span {a}) * (Ideal.span {b}) ≤ Ideal.span {b}) x) *
eisTraceProdChar ShortDraftTrace.breveE breveE_period_coordinates a b ha hb x) /
(‖eisEmbedding (a * b)‖ : ℂ) = _a:Ob:Oha:a ≠ 0hb:b ≠ 0haMax:(Ideal.span {a}).IsMaximalhbMax:(Ideal.span {b}).IsMaximalhgooda:lambda ∉ Ideal.span {a}hgoodb:lambda ∉ Ideal.span {b}hcop:IsCoprime (Ideal.span {a}) (Ideal.span {b})this✝⁴:Finite (O ⧸ Ideal.span {a} * Ideal.span {b}) := ···this✝³:Fintype (O ⧸ Ideal.span {a} * Ideal.span {b}) := Fintype.ofFinite (O ⧸ Ideal.span {a} * Ideal.span {b})this✝²:Finite (O ⧸ Ideal.span {a}) := ···this✝¹:Fintype (O ⧸ Ideal.span {a}) := Fintype.ofFinite (O ⧸ Ideal.span {a})this✝:Finite (O ⧸ Ideal.span {b}) := ···this:Fintype (O ⧸ Ideal.span {b}) := Fintype.ofFinite (O ⧸ Ideal.span {b})χa:MulChar (O ⧸ Ideal.span {a}) ℂ := canonicalSextic (Ideal.span {a}) hgoodaχb:MulChar (O ⧸ Ideal.span {b}) ℂ := canonicalSextic (Ideal.span {b}) hgoodbhsum:∑ x,
(χa ^ 2) ((Ideal.Quotient.factor ⋯) x) * (χb ^ 2) ((Ideal.Quotient.factor ⋯) x) *
(eisTraceProdChar ShortDraftTrace.breveE breveE_period_coordinates a b ha hb) x =
(χa ^ 2) ((Ideal.Quotient.mk (Ideal.span {a})) b) * (χb ^ 2) ((Ideal.Quotient.mk (Ideal.span {b})) a) *
gaussSum (χa ^ 2) (eisTraceModChar ShortDraftTrace.breveE breveE_period_coordinates a ha) *
gaussSum (χb ^ 2) (eisTraceModChar ShortDraftTrace.breveE breveE_period_coordinates b hb)hnorm:↑‖eisEmbedding (a * b)‖ = ↑‖eisEmbedding a‖ * ↑‖eisEmbedding b‖⊢ (∑ x,
(χa ^ 2) ((Ideal.Quotient.factor ⋯) x) * (χb ^ 2) ((Ideal.Quotient.factor ⋯) x) *
(eisTraceProdChar ShortDraftTrace.breveE breveE_period_coordinates a b ha hb) x) /
↑‖eisEmbedding (a * b)‖ =
(canonicalSextic (Ideal.span {a}) hgooda) ((Ideal.Quotient.mk (Ideal.span {a})) b) ^ 2 *
(canonicalSextic (Ideal.span {b}) hgoodb) ((Ideal.Quotient.mk (Ideal.span {b})) a) ^ 2 *
breveGamma2 (Ideal.span {a}) hgooda a ⋯ ha *
breveGamma2 (Ideal.span {b}) hgoodb b ⋯ hb
rw [hsum,a:Ob:Oha:a ≠ 0hb:b ≠ 0haMax:(Ideal.span {a}).IsMaximalhbMax:(Ideal.span {b}).IsMaximalhgooda:lambda ∉ Ideal.span {a}hgoodb:lambda ∉ Ideal.span {b}hcop:IsCoprime (Ideal.span {a}) (Ideal.span {b})this✝⁴:Finite (O ⧸ Ideal.span {a} * Ideal.span {b}) := ···this✝³:Fintype (O ⧸ Ideal.span {a} * Ideal.span {b}) := Fintype.ofFinite (O ⧸ Ideal.span {a} * Ideal.span {b})this✝²:Finite (O ⧸ Ideal.span {a}) := ···this✝¹:Fintype (O ⧸ Ideal.span {a}) := Fintype.ofFinite (O ⧸ Ideal.span {a})this✝:Finite (O ⧸ Ideal.span {b}) := ···this:Fintype (O ⧸ Ideal.span {b}) := Fintype.ofFinite (O ⧸ Ideal.span {b})χa:MulChar (O ⧸ Ideal.span {a}) ℂ := canonicalSextic (Ideal.span {a}) hgoodaχb:MulChar (O ⧸ Ideal.span {b}) ℂ := canonicalSextic (Ideal.span {b}) hgoodbhsum:∑ x,
(χa ^ 2) ((Ideal.Quotient.factor ⋯) x) * (χb ^ 2) ((Ideal.Quotient.factor ⋯) x) *
(eisTraceProdChar ShortDraftTrace.breveE breveE_period_coordinates a b ha hb) x =
(χa ^ 2) ((Ideal.Quotient.mk (Ideal.span {a})) b) * (χb ^ 2) ((Ideal.Quotient.mk (Ideal.span {b})) a) *
gaussSum (χa ^ 2) (eisTraceModChar ShortDraftTrace.breveE breveE_period_coordinates a ha) *
gaussSum (χb ^ 2) (eisTraceModChar ShortDraftTrace.breveE breveE_period_coordinates b hb)hnorm:↑‖eisEmbedding (a * b)‖ = ↑‖eisEmbedding a‖ * ↑‖eisEmbedding b‖⊢ (χa ^ 2) ((Ideal.Quotient.mk (Ideal.span {a})) b) * (χb ^ 2) ((Ideal.Quotient.mk (Ideal.span {b})) a) *
gaussSum (χa ^ 2) (eisTraceModChar ShortDraftTrace.breveE breveE_period_coordinates a ha) *
gaussSum (χb ^ 2) (eisTraceModChar ShortDraftTrace.breveE breveE_period_coordinates b hb) /
↑‖eisEmbedding (a * b)‖ =
(canonicalSextic (Ideal.span {a}) hgooda) ((Ideal.Quotient.mk (Ideal.span {a})) b) ^ 2 *
(canonicalSextic (Ideal.span {b}) hgoodb) ((Ideal.Quotient.mk (Ideal.span {b})) a) ^ 2 *
breveGamma2 (Ideal.span {a}) hgooda a ⋯ ha *
breveGamma2 (Ideal.span {b}) hgoodb b ⋯ hb hnorma:Ob:Oha:a ≠ 0hb:b ≠ 0haMax:(Ideal.span {a}).IsMaximalhbMax:(Ideal.span {b}).IsMaximalhgooda:lambda ∉ Ideal.span {a}hgoodb:lambda ∉ Ideal.span {b}hcop:IsCoprime (Ideal.span {a}) (Ideal.span {b})this✝⁴:Finite (O ⧸ Ideal.span {a} * Ideal.span {b}) := ···this✝³:Fintype (O ⧸ Ideal.span {a} * Ideal.span {b}) := Fintype.ofFinite (O ⧸ Ideal.span {a} * Ideal.span {b})this✝²:Finite (O ⧸ Ideal.span {a}) := ···this✝¹:Fintype (O ⧸ Ideal.span {a}) := Fintype.ofFinite (O ⧸ Ideal.span {a})this✝:Finite (O ⧸ Ideal.span {b}) := ···this:Fintype (O ⧸ Ideal.span {b}) := Fintype.ofFinite (O ⧸ Ideal.span {b})χa:MulChar (O ⧸ Ideal.span {a}) ℂ := canonicalSextic (Ideal.span {a}) hgoodaχb:MulChar (O ⧸ Ideal.span {b}) ℂ := canonicalSextic (Ideal.span {b}) hgoodbhsum:∑ x,
(χa ^ 2) ((Ideal.Quotient.factor ⋯) x) * (χb ^ 2) ((Ideal.Quotient.factor ⋯) x) *
(eisTraceProdChar ShortDraftTrace.breveE breveE_period_coordinates a b ha hb) x =
(χa ^ 2) ((Ideal.Quotient.mk (Ideal.span {a})) b) * (χb ^ 2) ((Ideal.Quotient.mk (Ideal.span {b})) a) *
gaussSum (χa ^ 2) (eisTraceModChar ShortDraftTrace.breveE breveE_period_coordinates a ha) *
gaussSum (χb ^ 2) (eisTraceModChar ShortDraftTrace.breveE breveE_period_coordinates b hb)hnorm:↑‖eisEmbedding (a * b)‖ = ↑‖eisEmbedding a‖ * ↑‖eisEmbedding b‖⊢ (χa ^ 2) ((Ideal.Quotient.mk (Ideal.span {a})) b) * (χb ^ 2) ((Ideal.Quotient.mk (Ideal.span {b})) a) *
gaussSum (χa ^ 2) (eisTraceModChar ShortDraftTrace.breveE breveE_period_coordinates a ha) *
gaussSum (χb ^ 2) (eisTraceModChar ShortDraftTrace.breveE breveE_period_coordinates b hb) /
(↑‖eisEmbedding a‖ * ↑‖eisEmbedding b‖) =
(canonicalSextic (Ideal.span {a}) hgooda) ((Ideal.Quotient.mk (Ideal.span {a})) b) ^ 2 *
(canonicalSextic (Ideal.span {b}) hgoodb) ((Ideal.Quotient.mk (Ideal.span {b})) a) ^ 2 *
breveGamma2 (Ideal.span {a}) hgooda a ⋯ ha *
breveGamma2 (Ideal.span {b}) hgoodb b ⋯ hb]a:Ob:Oha:a ≠ 0hb:b ≠ 0haMax:(Ideal.span {a}).IsMaximalhbMax:(Ideal.span {b}).IsMaximalhgooda:lambda ∉ Ideal.span {a}hgoodb:lambda ∉ Ideal.span {b}hcop:IsCoprime (Ideal.span {a}) (Ideal.span {b})this✝⁴:Finite (O ⧸ Ideal.span {a} * Ideal.span {b}) := ···this✝³:Fintype (O ⧸ Ideal.span {a} * Ideal.span {b}) := Fintype.ofFinite (O ⧸ Ideal.span {a} * Ideal.span {b})this✝²:Finite (O ⧸ Ideal.span {a}) := ···this✝¹:Fintype (O ⧸ Ideal.span {a}) := Fintype.ofFinite (O ⧸ Ideal.span {a})this✝:Finite (O ⧸ Ideal.span {b}) := ···this:Fintype (O ⧸ Ideal.span {b}) := Fintype.ofFinite (O ⧸ Ideal.span {b})χa:MulChar (O ⧸ Ideal.span {a}) ℂ := canonicalSextic (Ideal.span {a}) hgoodaχb:MulChar (O ⧸ Ideal.span {b}) ℂ := canonicalSextic (Ideal.span {b}) hgoodbhsum:∑ x,
(χa ^ 2) ((Ideal.Quotient.factor ⋯) x) * (χb ^ 2) ((Ideal.Quotient.factor ⋯) x) *
(eisTraceProdChar ShortDraftTrace.breveE breveE_period_coordinates a b ha hb) x =
(χa ^ 2) ((Ideal.Quotient.mk (Ideal.span {a})) b) * (χb ^ 2) ((Ideal.Quotient.mk (Ideal.span {b})) a) *
gaussSum (χa ^ 2) (eisTraceModChar ShortDraftTrace.breveE breveE_period_coordinates a ha) *
gaussSum (χb ^ 2) (eisTraceModChar ShortDraftTrace.breveE breveE_period_coordinates b hb)hnorm:↑‖eisEmbedding (a * b)‖ = ↑‖eisEmbedding a‖ * ↑‖eisEmbedding b‖⊢ (χa ^ 2) ((Ideal.Quotient.mk (Ideal.span {a})) b) * (χb ^ 2) ((Ideal.Quotient.mk (Ideal.span {b})) a) *
gaussSum (χa ^ 2) (eisTraceModChar ShortDraftTrace.breveE breveE_period_coordinates a ha) *
gaussSum (χb ^ 2) (eisTraceModChar ShortDraftTrace.breveE breveE_period_coordinates b hb) /
(↑‖eisEmbedding a‖ * ↑‖eisEmbedding b‖) =
(canonicalSextic (Ideal.span {a}) hgooda) ((Ideal.Quotient.mk (Ideal.span {a})) b) ^ 2 *
(canonicalSextic (Ideal.span {b}) hgoodb) ((Ideal.Quotient.mk (Ideal.span {b})) a) ^ 2 *
breveGamma2 (Ideal.span {a}) hgooda a ⋯ ha *
breveGamma2 (Ideal.span {b}) hgoodb b ⋯ hb
simp only [χa.pow_apply' (by decide : (2 : ℕ) ≠ 0),
χb.pow_apply' (by decide : (2 : ℕ) ≠ 0)]a:Ob:Oha:a ≠ 0hb:b ≠ 0haMax:(Ideal.span {a}).IsMaximalhbMax:(Ideal.span {b}).IsMaximalhgooda:lambda ∉ Ideal.span {a}hgoodb:lambda ∉ Ideal.span {b}hcop:IsCoprime (Ideal.span {a}) (Ideal.span {b})this✝⁴:Finite (O ⧸ Ideal.span {a} * Ideal.span {b}) := ···this✝³:Fintype (O ⧸ Ideal.span {a} * Ideal.span {b}) := Fintype.ofFinite (O ⧸ Ideal.span {a} * Ideal.span {b})this✝²:Finite (O ⧸ Ideal.span {a}) := ···this✝¹:Fintype (O ⧸ Ideal.span {a}) := Fintype.ofFinite (O ⧸ Ideal.span {a})this✝:Finite (O ⧸ Ideal.span {b}) := ···this:Fintype (O ⧸ Ideal.span {b}) := Fintype.ofFinite (O ⧸ Ideal.span {b})χa:MulChar (O ⧸ Ideal.span {a}) ℂ := canonicalSextic (Ideal.span {a}) hgoodaχb:MulChar (O ⧸ Ideal.span {b}) ℂ := canonicalSextic (Ideal.span {b}) hgoodbhsum:∑ x,
(χa ^ 2) ((Ideal.Quotient.factor ⋯) x) * (χb ^ 2) ((Ideal.Quotient.factor ⋯) x) *
(eisTraceProdChar ShortDraftTrace.breveE breveE_period_coordinates a b ha hb) x =
(χa ^ 2) ((Ideal.Quotient.mk (Ideal.span {a})) b) * (χb ^ 2) ((Ideal.Quotient.mk (Ideal.span {b})) a) *
gaussSum (χa ^ 2) (eisTraceModChar ShortDraftTrace.breveE breveE_period_coordinates a ha) *
gaussSum (χb ^ 2) (eisTraceModChar ShortDraftTrace.breveE breveE_period_coordinates b hb)hnorm:↑‖eisEmbedding (a * b)‖ = ↑‖eisEmbedding a‖ * ↑‖eisEmbedding b‖⊢ χa ((Ideal.Quotient.mk (Ideal.span {a})) b) ^ 2 * χb ((Ideal.Quotient.mk (Ideal.span {b})) a) ^ 2 *
gaussSum (χa ^ 2) (eisTraceModChar ShortDraftTrace.breveE breveE_period_coordinates a ha) *
gaussSum (χb ^ 2) (eisTraceModChar ShortDraftTrace.breveE breveE_period_coordinates b hb) /
(↑‖eisEmbedding a‖ * ↑‖eisEmbedding b‖) =
(canonicalSextic (Ideal.span {a}) hgooda) ((Ideal.Quotient.mk (Ideal.span {a})) b) ^ 2 *
(canonicalSextic (Ideal.span {b}) hgoodb) ((Ideal.Quotient.mk (Ideal.span {b})) a) ^ 2 *
breveGamma2 (Ideal.span {a}) hgooda a ⋯ ha *
breveGamma2 (Ideal.span {b}) hgoodb b ⋯ hb
unfold breveGamma2a:Ob:Oha:a ≠ 0hb:b ≠ 0haMax:(Ideal.span {a}).IsMaximalhbMax:(Ideal.span {b}).IsMaximalhgooda:lambda ∉ Ideal.span {a}hgoodb:lambda ∉ Ideal.span {b}hcop:IsCoprime (Ideal.span {a}) (Ideal.span {b})this✝⁴:Finite (O ⧸ Ideal.span {a} * Ideal.span {b}) := ···this✝³:Fintype (O ⧸ Ideal.span {a} * Ideal.span {b}) := Fintype.ofFinite (O ⧸ Ideal.span {a} * Ideal.span {b})this✝²:Finite (O ⧸ Ideal.span {a}) := ···this✝¹:Fintype (O ⧸ Ideal.span {a}) := Fintype.ofFinite (O ⧸ Ideal.span {a})this✝:Finite (O ⧸ Ideal.span {b}) := ···this:Fintype (O ⧸ Ideal.span {b}) := Fintype.ofFinite (O ⧸ Ideal.span {b})χa:MulChar (O ⧸ Ideal.span {a}) ℂ := canonicalSextic (Ideal.span {a}) hgoodaχb:MulChar (O ⧸ Ideal.span {b}) ℂ := canonicalSextic (Ideal.span {b}) hgoodbhsum:∑ x,
(χa ^ 2) ((Ideal.Quotient.factor ⋯) x) * (χb ^ 2) ((Ideal.Quotient.factor ⋯) x) *
(eisTraceProdChar ShortDraftTrace.breveE breveE_period_coordinates a b ha hb) x =
(χa ^ 2) ((Ideal.Quotient.mk (Ideal.span {a})) b) * (χb ^ 2) ((Ideal.Quotient.mk (Ideal.span {b})) a) *
gaussSum (χa ^ 2) (eisTraceModChar ShortDraftTrace.breveE breveE_period_coordinates a ha) *
gaussSum (χb ^ 2) (eisTraceModChar ShortDraftTrace.breveE breveE_period_coordinates b hb)hnorm:↑‖eisEmbedding (a * b)‖ = ↑‖eisEmbedding a‖ * ↑‖eisEmbedding b‖⊢ χa ((Ideal.Quotient.mk (Ideal.span {a})) b) ^ 2 * χb ((Ideal.Quotient.mk (Ideal.span {b})) a) ^ 2 *
gaussSum (χa ^ 2) (eisTraceModChar ShortDraftTrace.breveE breveE_period_coordinates a ha) *
gaussSum (χb ^ 2) (eisTraceModChar ShortDraftTrace.breveE breveE_period_coordinates b hb) /
(↑‖eisEmbedding a‖ * ↑‖eisEmbedding b‖) =
(canonicalSextic (Ideal.span {a}) hgooda) ((Ideal.Quotient.mk (Ideal.span {a})) b) ^ 2 *
(canonicalSextic (Ideal.span {b}) hgoodb) ((Ideal.Quotient.mk (Ideal.span {b})) a) ^ 2 *
(gaussSum (canonicalSextic (Ideal.span {a}) hgooda ^ 2)
(⋯ ▸ eisTraceModChar ShortDraftTrace.breveE breveE_period_coordinates a ha) /
↑‖eisEmbedding a‖) *
(gaussSum (canonicalSextic (Ideal.span {b}) hgoodb ^ 2)
(⋯ ▸ eisTraceModChar ShortDraftTrace.breveE breveE_period_coordinates b hb) /
↑‖eisEmbedding b‖)
ringAll goals completed! 🐙end ActualEisensteinCubicnamespace ConcreteBreveEopen EisensteinEmbedding ConcreteTraceCRTnoncomputable def normalizedTraceGauss
(a : O) (ha : a ≠ 0) (χ : MulChar (O ⧸ Ideal.span {a}) ℂ) : ℂ := bya:Oha:a ≠ 0χ:MulChar (O ⧸ Ideal.span {a}) ℂ⊢ ℂ
letI : Finite (O ⧸ Ideal.span {a}) := finite_quotient_span haa:Oha:a ≠ 0χ:MulChar (O ⧸ Ideal.span {a}) ℂthis:Finite (O ⧸ Ideal.span {a}) := ···⊢ ℂ
letI : Fintype (O ⧸ Ideal.span {a}) := Fintype.ofFinite _a:Oha:a ≠ 0χ:MulChar (O ⧸ Ideal.span {a}) ℂthis✝:Finite (O ⧸ Ideal.span {a}) := ···this:Fintype (O ⧸ Ideal.span {a}) := Fintype.ofFinite (O ⧸ Ideal.span {a})⊢ ℂ
exact gaussSum χ (eisTraceModChar ShortDraftTrace.breveE
breveE_period_coordinates a ha) / (‖eisEmbedding a‖ : ℂ)All goals completed! 🐙noncomputable def normalizedTraceGaussProduct
(a b : O) (ha : a ≠ 0) (hb : b ≠ 0)
(χa : MulChar (O ⧸ Ideal.span {a}) ℂ)
(χb : MulChar (O ⧸ Ideal.span {b}) ℂ) : ℂ := bya:Ob:Oha:a ≠ 0hb:b ≠ 0χa:MulChar (O ⧸ Ideal.span {a}) ℂχb:MulChar (O ⧸ Ideal.span {b}) ℂ⊢ ℂ
letI : Finite (O ⧸ (Ideal.span {a}) * (Ideal.span {b})) :=
finite_quotient_product ha hba:Ob:Oha:a ≠ 0hb:b ≠ 0χa:MulChar (O ⧸ Ideal.span {a}) ℂχb:MulChar (O ⧸ Ideal.span {b}) ℂthis:Finite (O ⧸ Ideal.span {a} * Ideal.span {b}) := ···⊢ ℂ
letI : Fintype (O ⧸ (Ideal.span {a}) * (Ideal.span {b})) := Fintype.ofFinite _a:Ob:Oha:a ≠ 0hb:b ≠ 0χa:MulChar (O ⧸ Ideal.span {a}) ℂχb:MulChar (O ⧸ Ideal.span {b}) ℂthis✝:Finite (O ⧸ Ideal.span {a} * Ideal.span {b}) := ···this:Fintype (O ⧸ Ideal.span {a} * Ideal.span {b}) := Fintype.ofFinite (O ⧸ Ideal.span {a} * Ideal.span {b})⊢ ℂ
exact (∑ x : O ⧸ (Ideal.span {a}) * (Ideal.span {b}),
χa (Ideal.Quotient.factor
(Ideal.mul_le_left : (Ideal.span {a}) * (Ideal.span {b}) ≤ Ideal.span {a}) x) *
χb (Ideal.Quotient.factor
(Ideal.mul_le_right : (Ideal.span {a}) * (Ideal.span {b}) ≤ Ideal.span {b}) x) *
eisTraceProdChar ShortDraftTrace.breveE breveE_period_coordinates
a b ha hb x) / (‖eisEmbedding (a * b)‖ : ℂ)All goals completed! 🐙theorem normalizedTraceGaussProduct_crt
(a b : O) (ha : a ≠ 0) (hb : b ≠ 0)
(hcop : IsCoprime (Ideal.span {a}) (Ideal.span {b}))
(χa : MulChar (O ⧸ Ideal.span {a}) ℂ)
(χb : MulChar (O ⧸ Ideal.span {b}) ℂ) :
normalizedTraceGaussProduct a b ha hb χa χb =
χa (Ideal.Quotient.mk (Ideal.span {a}) b) *
χb (Ideal.Quotient.mk (Ideal.span {b}) a) *
normalizedTraceGauss a ha χa * normalizedTraceGauss b hb χb := bya:Ob:Oha:a ≠ 0hb:b ≠ 0hcop:IsCoprime (Ideal.span {a}) (Ideal.span {b})χa:MulChar (O ⧸ Ideal.span {a}) ℂχb:MulChar (O ⧸ Ideal.span {b}) ℂ⊢ normalizedTraceGaussProduct a b ha hb χa χb =
χa ((Ideal.Quotient.mk (Ideal.span {a})) b) * χb ((Ideal.Quotient.mk (Ideal.span {b})) a) *
normalizedTraceGauss a ha χa *
normalizedTraceGauss b hb χb
let : Finite (O ⧸ (Ideal.span {a}) * (Ideal.span {b})) :=
finite_quotient_product ha hba:Ob:Oha:a ≠ 0hb:b ≠ 0hcop:IsCoprime (Ideal.span {a}) (Ideal.span {b})χa:MulChar (O ⧸ Ideal.span {a}) ℂχb:MulChar (O ⧸ Ideal.span {b}) ℂthis:Finite (O ⧸ Ideal.span {a} * Ideal.span {b}) := ···⊢ normalizedTraceGaussProduct a b ha hb χa χb =
χa ((Ideal.Quotient.mk (Ideal.span {a})) b) * χb ((Ideal.Quotient.mk (Ideal.span {b})) a) *
normalizedTraceGauss a ha χa *
normalizedTraceGauss b hb χb
let : Fintype (O ⧸ (Ideal.span {a}) * (Ideal.span {b})) := Fintype.ofFinite _a:Ob:Oha:a ≠ 0hb:b ≠ 0hcop:IsCoprime (Ideal.span {a}) (Ideal.span {b})χa:MulChar (O ⧸ Ideal.span {a}) ℂχb:MulChar (O ⧸ Ideal.span {b}) ℂthis✝:Finite (O ⧸ Ideal.span {a} * Ideal.span {b}) := ···this:Fintype (O ⧸ Ideal.span {a} * Ideal.span {b}) := Fintype.ofFinite (O ⧸ Ideal.span {a} * Ideal.span {b})⊢ normalizedTraceGaussProduct a b ha hb χa χb =
χa ((Ideal.Quotient.mk (Ideal.span {a})) b) * χb ((Ideal.Quotient.mk (Ideal.span {b})) a) *
normalizedTraceGauss a ha χa *
normalizedTraceGauss b hb χb
let : Finite (O ⧸ Ideal.span {a}) := finite_quotient_span haa:Ob:Oha:a ≠ 0hb:b ≠ 0hcop:IsCoprime (Ideal.span {a}) (Ideal.span {b})χa:MulChar (O ⧸ Ideal.span {a}) ℂχb:MulChar (O ⧸ Ideal.span {b}) ℂthis✝¹:Finite (O ⧸ Ideal.span {a} * Ideal.span {b}) := ···this✝:Fintype (O ⧸ Ideal.span {a} * Ideal.span {b}) := Fintype.ofFinite (O ⧸ Ideal.span {a} * Ideal.span {b})this:Finite (O ⧸ Ideal.span {a}) := ···⊢ normalizedTraceGaussProduct a b ha hb χa χb =
χa ((Ideal.Quotient.mk (Ideal.span {a})) b) * χb ((Ideal.Quotient.mk (Ideal.span {b})) a) *
normalizedTraceGauss a ha χa *
normalizedTraceGauss b hb χb
let : Fintype (O ⧸ Ideal.span {a}) := Fintype.ofFinite _a:Ob:Oha:a ≠ 0hb:b ≠ 0hcop:IsCoprime (Ideal.span {a}) (Ideal.span {b})χa:MulChar (O ⧸ Ideal.span {a}) ℂχb:MulChar (O ⧸ Ideal.span {b}) ℂthis✝²:Finite (O ⧸ Ideal.span {a} * Ideal.span {b}) := ···this✝¹:Fintype (O ⧸ Ideal.span {a} * Ideal.span {b}) := Fintype.ofFinite (O ⧸ Ideal.span {a} * Ideal.span {b})this✝:Finite (O ⧸ Ideal.span {a}) := ···this:Fintype (O ⧸ Ideal.span {a}) := Fintype.ofFinite (O ⧸ Ideal.span {a})⊢ normalizedTraceGaussProduct a b ha hb χa χb =
χa ((Ideal.Quotient.mk (Ideal.span {a})) b) * χb ((Ideal.Quotient.mk (Ideal.span {b})) a) *
normalizedTraceGauss a ha χa *
normalizedTraceGauss b hb χb
let : Finite (O ⧸ Ideal.span {b}) := finite_quotient_span hba:Ob:Oha:a ≠ 0hb:b ≠ 0hcop:IsCoprime (Ideal.span {a}) (Ideal.span {b})χa:MulChar (O ⧸ Ideal.span {a}) ℂχb:MulChar (O ⧸ Ideal.span {b}) ℂthis✝³:Finite (O ⧸ Ideal.span {a} * Ideal.span {b}) := ···this✝²:Fintype (O ⧸ Ideal.span {a} * Ideal.span {b}) := Fintype.ofFinite (O ⧸ Ideal.span {a} * Ideal.span {b})this✝¹:Finite (O ⧸ Ideal.span {a}) := ···this✝:Fintype (O ⧸ Ideal.span {a}) := Fintype.ofFinite (O ⧸ Ideal.span {a})this:Finite (O ⧸ Ideal.span {b}) := ···⊢ normalizedTraceGaussProduct a b ha hb χa χb =
χa ((Ideal.Quotient.mk (Ideal.span {a})) b) * χb ((Ideal.Quotient.mk (Ideal.span {b})) a) *
normalizedTraceGauss a ha χa *
normalizedTraceGauss b hb χb
let : Fintype (O ⧸ Ideal.span {b}) := Fintype.ofFinite _a:Ob:Oha:a ≠ 0hb:b ≠ 0hcop:IsCoprime (Ideal.span {a}) (Ideal.span {b})χa:MulChar (O ⧸ Ideal.span {a}) ℂχb:MulChar (O ⧸ Ideal.span {b}) ℂthis✝⁴:Finite (O ⧸ Ideal.span {a} * Ideal.span {b}) := ···this✝³:Fintype (O ⧸ Ideal.span {a} * Ideal.span {b}) := Fintype.ofFinite (O ⧸ Ideal.span {a} * Ideal.span {b})this✝²:Finite (O ⧸ Ideal.span {a}) := ···this✝¹:Fintype (O ⧸ Ideal.span {a}) := Fintype.ofFinite (O ⧸ Ideal.span {a})this✝:Finite (O ⧸ Ideal.span {b}) := ···this:Fintype (O ⧸ Ideal.span {b}) := Fintype.ofFinite (O ⧸ Ideal.span {b})⊢ normalizedTraceGaussProduct a b ha hb χa χb =
χa ((Ideal.Quotient.mk (Ideal.span {a})) b) * χb ((Ideal.Quotient.mk (Ideal.span {b})) a) *
normalizedTraceGauss a ha χa *
normalizedTraceGauss b hb χb
have hsum := gauss_sum_breveE_actual_O a b ha hb hcop χa χba:Ob:Oha:a ≠ 0hb:b ≠ 0hcop:IsCoprime (Ideal.span {a}) (Ideal.span {b})χa:MulChar (O ⧸ Ideal.span {a}) ℂχb:MulChar (O ⧸ Ideal.span {b}) ℂthis✝⁴:Finite (O ⧸ Ideal.span {a} * Ideal.span {b}) := ···this✝³:Fintype (O ⧸ Ideal.span {a} * Ideal.span {b}) := Fintype.ofFinite (O ⧸ Ideal.span {a} * Ideal.span {b})this✝²:Finite (O ⧸ Ideal.span {a}) := ···this✝¹:Fintype (O ⧸ Ideal.span {a}) := Fintype.ofFinite (O ⧸ Ideal.span {a})this✝:Finite (O ⧸ Ideal.span {b}) := ···this:Fintype (O ⧸ Ideal.span {b}) := Fintype.ofFinite (O ⧸ Ideal.span {b})hsum:∑ x,
χa ((Ideal.Quotient.factor ⋯) x) * χb ((Ideal.Quotient.factor ⋯) x) *
(eisTraceProdChar ShortDraftTrace.breveE breveE_period_coordinates a b ha hb) x =
χa ((Ideal.Quotient.mk (Ideal.span {a})) b) * χb ((Ideal.Quotient.mk (Ideal.span {b})) a) *
gaussSum χa (eisTraceModChar ShortDraftTrace.breveE breveE_period_coordinates a ha) *
gaussSum χb (eisTraceModChar ShortDraftTrace.breveE breveE_period_coordinates b hb)⊢ normalizedTraceGaussProduct a b ha hb χa χb =
χa ((Ideal.Quotient.mk (Ideal.span {a})) b) * χb ((Ideal.Quotient.mk (Ideal.span {b})) a) *
normalizedTraceGauss a ha χa *
normalizedTraceGauss b hb χb
have hnorm : (‖eisEmbedding (a * b)‖ : ℂ) =
(‖eisEmbedding a‖ : ℂ) * (‖eisEmbedding b‖ : ℂ) := by
rw [map_mul,a:Ob:Oha:a ≠ 0hb:b ≠ 0hcop:IsCoprime (Ideal.span {a}) (Ideal.span {b})χa:MulChar (O ⧸ Ideal.span {a}) ℂχb:MulChar (O ⧸ Ideal.span {b}) ℂthis✝⁴:Finite (O ⧸ Ideal.span {a} * Ideal.span {b}) := ···this✝³:Fintype (O ⧸ Ideal.span {a} * Ideal.span {b}) := Fintype.ofFinite (O ⧸ Ideal.span {a} * Ideal.span {b})this✝²:Finite (O ⧸ Ideal.span {a}) := ···this✝¹:Fintype (O ⧸ Ideal.span {a}) := Fintype.ofFinite (O ⧸ Ideal.span {a})this✝:Finite (O ⧸ Ideal.span {b}) := ···this:Fintype (O ⧸ Ideal.span {b}) := Fintype.ofFinite (O ⧸ Ideal.span {b})hsum:∑ x,
χa ((Ideal.Quotient.factor ⋯) x) * χb ((Ideal.Quotient.factor ⋯) x) *
(eisTraceProdChar ShortDraftTrace.breveE breveE_period_coordinates a b ha hb) x =
χa ((Ideal.Quotient.mk (Ideal.span {a})) b) * χb ((Ideal.Quotient.mk (Ideal.span {b})) a) *
gaussSum χa (eisTraceModChar ShortDraftTrace.breveE breveE_period_coordinates a ha) *
gaussSum χb (eisTraceModChar ShortDraftTrace.breveE breveE_period_coordinates b hb)⊢ ↑‖eisEmbedding a * eisEmbedding b‖ = ↑‖eisEmbedding a‖ * ↑‖eisEmbedding b‖ norm_mula:Ob:Oha:a ≠ 0hb:b ≠ 0hcop:IsCoprime (Ideal.span {a}) (Ideal.span {b})χa:MulChar (O ⧸ Ideal.span {a}) ℂχb:MulChar (O ⧸ Ideal.span {b}) ℂthis✝⁴:Finite (O ⧸ Ideal.span {a} * Ideal.span {b}) := ···this✝³:Fintype (O ⧸ Ideal.span {a} * Ideal.span {b}) := Fintype.ofFinite (O ⧸ Ideal.span {a} * Ideal.span {b})this✝²:Finite (O ⧸ Ideal.span {a}) := ···this✝¹:Fintype (O ⧸ Ideal.span {a}) := Fintype.ofFinite (O ⧸ Ideal.span {a})this✝:Finite (O ⧸ Ideal.span {b}) := ···this:Fintype (O ⧸ Ideal.span {b}) := Fintype.ofFinite (O ⧸ Ideal.span {b})hsum:∑ x,
χa ((Ideal.Quotient.factor ⋯) x) * χb ((Ideal.Quotient.factor ⋯) x) *
(eisTraceProdChar ShortDraftTrace.breveE breveE_period_coordinates a b ha hb) x =
χa ((Ideal.Quotient.mk (Ideal.span {a})) b) * χb ((Ideal.Quotient.mk (Ideal.span {b})) a) *
gaussSum χa (eisTraceModChar ShortDraftTrace.breveE breveE_period_coordinates a ha) *
gaussSum χb (eisTraceModChar ShortDraftTrace.breveE breveE_period_coordinates b hb)⊢ ↑(‖eisEmbedding a‖ * ‖eisEmbedding b‖) = ↑‖eisEmbedding a‖ * ↑‖eisEmbedding b‖]a:Ob:Oha:a ≠ 0hb:b ≠ 0hcop:IsCoprime (Ideal.span {a}) (Ideal.span {b})χa:MulChar (O ⧸ Ideal.span {a}) ℂχb:MulChar (O ⧸ Ideal.span {b}) ℂthis✝⁴:Finite (O ⧸ Ideal.span {a} * Ideal.span {b}) := ···this✝³:Fintype (O ⧸ Ideal.span {a} * Ideal.span {b}) := Fintype.ofFinite (O ⧸ Ideal.span {a} * Ideal.span {b})this✝²:Finite (O ⧸ Ideal.span {a}) := ···this✝¹:Fintype (O ⧸ Ideal.span {a}) := Fintype.ofFinite (O ⧸ Ideal.span {a})this✝:Finite (O ⧸ Ideal.span {b}) := ···this:Fintype (O ⧸ Ideal.span {b}) := Fintype.ofFinite (O ⧸ Ideal.span {b})hsum:∑ x,
χa ((Ideal.Quotient.factor ⋯) x) * χb ((Ideal.Quotient.factor ⋯) x) *
(eisTraceProdChar ShortDraftTrace.breveE breveE_period_coordinates a b ha hb) x =
χa ((Ideal.Quotient.mk (Ideal.span {a})) b) * χb ((Ideal.Quotient.mk (Ideal.span {b})) a) *
gaussSum χa (eisTraceModChar ShortDraftTrace.breveE breveE_period_coordinates a ha) *
gaussSum χb (eisTraceModChar ShortDraftTrace.breveE breveE_period_coordinates b hb)⊢ ↑(‖eisEmbedding a‖ * ‖eisEmbedding b‖) = ↑‖eisEmbedding a‖ * ↑‖eisEmbedding b‖
norm_casta:Ob:Oha:a ≠ 0hb:b ≠ 0hcop:IsCoprime (Ideal.span {a}) (Ideal.span {b})χa:MulChar (O ⧸ Ideal.span {a}) ℂχb:MulChar (O ⧸ Ideal.span {b}) ℂthis✝⁴:Finite (O ⧸ Ideal.span {a} * Ideal.span {b}) := ···this✝³:Fintype (O ⧸ Ideal.span {a} * Ideal.span {b}) := Fintype.ofFinite (O ⧸ Ideal.span {a} * Ideal.span {b})this✝²:Finite (O ⧸ Ideal.span {a}) := ···this✝¹:Fintype (O ⧸ Ideal.span {a}) := Fintype.ofFinite (O ⧸ Ideal.span {a})this✝:Finite (O ⧸ Ideal.span {b}) := ···this:Fintype (O ⧸ Ideal.span {b}) := Fintype.ofFinite (O ⧸ Ideal.span {b})hsum:∑ x,
χa ((Ideal.Quotient.factor ⋯) x) * χb ((Ideal.Quotient.factor ⋯) x) *
(eisTraceProdChar ShortDraftTrace.breveE breveE_period_coordinates a b ha hb) x =
χa ((Ideal.Quotient.mk (Ideal.span {a})) b) * χb ((Ideal.Quotient.mk (Ideal.span {b})) a) *
gaussSum χa (eisTraceModChar ShortDraftTrace.breveE breveE_period_coordinates a ha) *
gaussSum χb (eisTraceModChar ShortDraftTrace.breveE breveE_period_coordinates b hb)hnorm:↑‖eisEmbedding (a * b)‖ = ↑‖eisEmbedding a‖ * ↑‖eisEmbedding b‖⊢ normalizedTraceGaussProduct a b ha hb χa χb =
χa ((Ideal.Quotient.mk (Ideal.span {a})) b) * χb ((Ideal.Quotient.mk (Ideal.span {b})) a) *
normalizedTraceGauss a ha χa *
normalizedTraceGauss b hb χb
change (∑ x : O ⧸ (Ideal.span {a}) * (Ideal.span {b}),
χa (Ideal.Quotient.factor
(Ideal.mul_le_left : (Ideal.span {a}) * (Ideal.span {b}) ≤ Ideal.span {a}) x) *
χb (Ideal.Quotient.factor
(Ideal.mul_le_right : (Ideal.span {a}) * (Ideal.span {b}) ≤ Ideal.span {b}) x) *
eisTraceProdChar ShortDraftTrace.breveE breveE_period_coordinates a b ha hb x) /
(‖eisEmbedding (a * b)‖ : ℂ) = _a:Ob:Oha:a ≠ 0hb:b ≠ 0hcop:IsCoprime (Ideal.span {a}) (Ideal.span {b})χa:MulChar (O ⧸ Ideal.span {a}) ℂχb:MulChar (O ⧸ Ideal.span {b}) ℂthis✝⁴:Finite (O ⧸ Ideal.span {a} * Ideal.span {b}) := ···this✝³:Fintype (O ⧸ Ideal.span {a} * Ideal.span {b}) := Fintype.ofFinite (O ⧸ Ideal.span {a} * Ideal.span {b})this✝²:Finite (O ⧸ Ideal.span {a}) := ···this✝¹:Fintype (O ⧸ Ideal.span {a}) := Fintype.ofFinite (O ⧸ Ideal.span {a})this✝:Finite (O ⧸ Ideal.span {b}) := ···this:Fintype (O ⧸ Ideal.span {b}) := Fintype.ofFinite (O ⧸ Ideal.span {b})hsum:∑ x,
χa ((Ideal.Quotient.factor ⋯) x) * χb ((Ideal.Quotient.factor ⋯) x) *
(eisTraceProdChar ShortDraftTrace.breveE breveE_period_coordinates a b ha hb) x =
χa ((Ideal.Quotient.mk (Ideal.span {a})) b) * χb ((Ideal.Quotient.mk (Ideal.span {b})) a) *
gaussSum χa (eisTraceModChar ShortDraftTrace.breveE breveE_period_coordinates a ha) *
gaussSum χb (eisTraceModChar ShortDraftTrace.breveE breveE_period_coordinates b hb)hnorm:↑‖eisEmbedding (a * b)‖ = ↑‖eisEmbedding a‖ * ↑‖eisEmbedding b‖⊢ (∑ x,
χa ((Ideal.Quotient.factor ⋯) x) * χb ((Ideal.Quotient.factor ⋯) x) *
(eisTraceProdChar ShortDraftTrace.breveE breveE_period_coordinates a b ha hb) x) /
↑‖eisEmbedding (a * b)‖ =
χa ((Ideal.Quotient.mk (Ideal.span {a})) b) * χb ((Ideal.Quotient.mk (Ideal.span {b})) a) *
normalizedTraceGauss a ha χa *
normalizedTraceGauss b hb χb
rw [hsum,a:Ob:Oha:a ≠ 0hb:b ≠ 0hcop:IsCoprime (Ideal.span {a}) (Ideal.span {b})χa:MulChar (O ⧸ Ideal.span {a}) ℂχb:MulChar (O ⧸ Ideal.span {b}) ℂthis✝⁴:Finite (O ⧸ Ideal.span {a} * Ideal.span {b}) := ···this✝³:Fintype (O ⧸ Ideal.span {a} * Ideal.span {b}) := Fintype.ofFinite (O ⧸ Ideal.span {a} * Ideal.span {b})this✝²:Finite (O ⧸ Ideal.span {a}) := ···this✝¹:Fintype (O ⧸ Ideal.span {a}) := Fintype.ofFinite (O ⧸ Ideal.span {a})this✝:Finite (O ⧸ Ideal.span {b}) := ···this:Fintype (O ⧸ Ideal.span {b}) := Fintype.ofFinite (O ⧸ Ideal.span {b})hsum:∑ x,
χa ((Ideal.Quotient.factor ⋯) x) * χb ((Ideal.Quotient.factor ⋯) x) *
(eisTraceProdChar ShortDraftTrace.breveE breveE_period_coordinates a b ha hb) x =
χa ((Ideal.Quotient.mk (Ideal.span {a})) b) * χb ((Ideal.Quotient.mk (Ideal.span {b})) a) *
gaussSum χa (eisTraceModChar ShortDraftTrace.breveE breveE_period_coordinates a ha) *
gaussSum χb (eisTraceModChar ShortDraftTrace.breveE breveE_period_coordinates b hb)hnorm:↑‖eisEmbedding (a * b)‖ = ↑‖eisEmbedding a‖ * ↑‖eisEmbedding b‖⊢ χa ((Ideal.Quotient.mk (Ideal.span {a})) b) * χb ((Ideal.Quotient.mk (Ideal.span {b})) a) *
gaussSum χa (eisTraceModChar ShortDraftTrace.breveE breveE_period_coordinates a ha) *
gaussSum χb (eisTraceModChar ShortDraftTrace.breveE breveE_period_coordinates b hb) /
↑‖eisEmbedding (a * b)‖ =
χa ((Ideal.Quotient.mk (Ideal.span {a})) b) * χb ((Ideal.Quotient.mk (Ideal.span {b})) a) *
normalizedTraceGauss a ha χa *
normalizedTraceGauss b hb χb hnorma:Ob:Oha:a ≠ 0hb:b ≠ 0hcop:IsCoprime (Ideal.span {a}) (Ideal.span {b})χa:MulChar (O ⧸ Ideal.span {a}) ℂχb:MulChar (O ⧸ Ideal.span {b}) ℂthis✝⁴:Finite (O ⧸ Ideal.span {a} * Ideal.span {b}) := ···this✝³:Fintype (O ⧸ Ideal.span {a} * Ideal.span {b}) := Fintype.ofFinite (O ⧸ Ideal.span {a} * Ideal.span {b})this✝²:Finite (O ⧸ Ideal.span {a}) := ···this✝¹:Fintype (O ⧸ Ideal.span {a}) := Fintype.ofFinite (O ⧸ Ideal.span {a})this✝:Finite (O ⧸ Ideal.span {b}) := ···this:Fintype (O ⧸ Ideal.span {b}) := Fintype.ofFinite (O ⧸ Ideal.span {b})hsum:∑ x,
χa ((Ideal.Quotient.factor ⋯) x) * χb ((Ideal.Quotient.factor ⋯) x) *
(eisTraceProdChar ShortDraftTrace.breveE breveE_period_coordinates a b ha hb) x =
χa ((Ideal.Quotient.mk (Ideal.span {a})) b) * χb ((Ideal.Quotient.mk (Ideal.span {b})) a) *
gaussSum χa (eisTraceModChar ShortDraftTrace.breveE breveE_period_coordinates a ha) *
gaussSum χb (eisTraceModChar ShortDraftTrace.breveE breveE_period_coordinates b hb)hnorm:↑‖eisEmbedding (a * b)‖ = ↑‖eisEmbedding a‖ * ↑‖eisEmbedding b‖⊢ χa ((Ideal.Quotient.mk (Ideal.span {a})) b) * χb ((Ideal.Quotient.mk (Ideal.span {b})) a) *
gaussSum χa (eisTraceModChar ShortDraftTrace.breveE breveE_period_coordinates a ha) *
gaussSum χb (eisTraceModChar ShortDraftTrace.breveE breveE_period_coordinates b hb) /
(↑‖eisEmbedding a‖ * ↑‖eisEmbedding b‖) =
χa ((Ideal.Quotient.mk (Ideal.span {a})) b) * χb ((Ideal.Quotient.mk (Ideal.span {b})) a) *
normalizedTraceGauss a ha χa *
normalizedTraceGauss b hb χb]a:Ob:Oha:a ≠ 0hb:b ≠ 0hcop:IsCoprime (Ideal.span {a}) (Ideal.span {b})χa:MulChar (O ⧸ Ideal.span {a}) ℂχb:MulChar (O ⧸ Ideal.span {b}) ℂthis✝⁴:Finite (O ⧸ Ideal.span {a} * Ideal.span {b}) := ···this✝³:Fintype (O ⧸ Ideal.span {a} * Ideal.span {b}) := Fintype.ofFinite (O ⧸ Ideal.span {a} * Ideal.span {b})this✝²:Finite (O ⧸ Ideal.span {a}) := ···this✝¹:Fintype (O ⧸ Ideal.span {a}) := Fintype.ofFinite (O ⧸ Ideal.span {a})this✝:Finite (O ⧸ Ideal.span {b}) := ···this:Fintype (O ⧸ Ideal.span {b}) := Fintype.ofFinite (O ⧸ Ideal.span {b})hsum:∑ x,
χa ((Ideal.Quotient.factor ⋯) x) * χb ((Ideal.Quotient.factor ⋯) x) *
(eisTraceProdChar ShortDraftTrace.breveE breveE_period_coordinates a b ha hb) x =
χa ((Ideal.Quotient.mk (Ideal.span {a})) b) * χb ((Ideal.Quotient.mk (Ideal.span {b})) a) *
gaussSum χa (eisTraceModChar ShortDraftTrace.breveE breveE_period_coordinates a ha) *
gaussSum χb (eisTraceModChar ShortDraftTrace.breveE breveE_period_coordinates b hb)hnorm:↑‖eisEmbedding (a * b)‖ = ↑‖eisEmbedding a‖ * ↑‖eisEmbedding b‖⊢ χa ((Ideal.Quotient.mk (Ideal.span {a})) b) * χb ((Ideal.Quotient.mk (Ideal.span {b})) a) *
gaussSum χa (eisTraceModChar ShortDraftTrace.breveE breveE_period_coordinates a ha) *
gaussSum χb (eisTraceModChar ShortDraftTrace.breveE breveE_period_coordinates b hb) /
(↑‖eisEmbedding a‖ * ↑‖eisEmbedding b‖) =
χa ((Ideal.Quotient.mk (Ideal.span {a})) b) * χb ((Ideal.Quotient.mk (Ideal.span {b})) a) *
normalizedTraceGauss a ha χa *
normalizedTraceGauss b hb χb
unfold normalizedTraceGaussa:Ob:Oha:a ≠ 0hb:b ≠ 0hcop:IsCoprime (Ideal.span {a}) (Ideal.span {b})χa:MulChar (O ⧸ Ideal.span {a}) ℂχb:MulChar (O ⧸ Ideal.span {b}) ℂthis✝⁴:Finite (O ⧸ Ideal.span {a} * Ideal.span {b}) := ···this✝³:Fintype (O ⧸ Ideal.span {a} * Ideal.span {b}) := Fintype.ofFinite (O ⧸ Ideal.span {a} * Ideal.span {b})this✝²:Finite (O ⧸ Ideal.span {a}) := ···this✝¹:Fintype (O ⧸ Ideal.span {a}) := Fintype.ofFinite (O ⧸ Ideal.span {a})this✝:Finite (O ⧸ Ideal.span {b}) := ···this:Fintype (O ⧸ Ideal.span {b}) := Fintype.ofFinite (O ⧸ Ideal.span {b})hsum:∑ x,
χa ((Ideal.Quotient.factor ⋯) x) * χb ((Ideal.Quotient.factor ⋯) x) *
(eisTraceProdChar ShortDraftTrace.breveE breveE_period_coordinates a b ha hb) x =
χa ((Ideal.Quotient.mk (Ideal.span {a})) b) * χb ((Ideal.Quotient.mk (Ideal.span {b})) a) *
gaussSum χa (eisTraceModChar ShortDraftTrace.breveE breveE_period_coordinates a ha) *
gaussSum χb (eisTraceModChar ShortDraftTrace.breveE breveE_period_coordinates b hb)hnorm:↑‖eisEmbedding (a * b)‖ = ↑‖eisEmbedding a‖ * ↑‖eisEmbedding b‖⊢ χa ((Ideal.Quotient.mk (Ideal.span {a})) b) * χb ((Ideal.Quotient.mk (Ideal.span {b})) a) *
gaussSum χa (eisTraceModChar ShortDraftTrace.breveE breveE_period_coordinates a ha) *
gaussSum χb (eisTraceModChar ShortDraftTrace.breveE breveE_period_coordinates b hb) /
(↑‖eisEmbedding a‖ * ↑‖eisEmbedding b‖) =
χa ((Ideal.Quotient.mk (Ideal.span {a})) b) * χb ((Ideal.Quotient.mk (Ideal.span {b})) a) *
(gaussSum χa (eisTraceModChar ShortDraftTrace.breveE breveE_period_coordinates a ha) / ↑‖eisEmbedding a‖) *
(gaussSum χb (eisTraceModChar ShortDraftTrace.breveE breveE_period_coordinates b hb) / ↑‖eisEmbedding b‖)
ringAll goals completed! 🐙end ConcreteBreveEnamespace FixedRayActiveSetopen scoped BigOperatorsprivate theorem sum_zero_and_units {F : Type*} [Field F] [Fintype F]
(f : F → ℂ) :
(∑ x : F, f x) = f 0 + ∑ u : Fˣ, f (u : F) := byF:Type u_1inst✝¹:Field Finst✝:Fintype Ff:F → ℂ⊢ ∑ x, f x = f 0 + ∑ u, f ↑u
classical
calc
(∑ x : F, f x) = f 0 +
∑ x ∈ (Finset.univ : Finset F).erase 0, f x := byF:Type u_1inst✝¹:Field Finst✝:Fintype Ff:F → ℂ⊢ ∑ x, f x = f 0 + ∑ x ∈ univ.erase 0, f x
simpa only [add_comm] using
(Finset.sum_erase_add (Finset.univ : Finset F) f
(Finset.mem_univ (0 : F))).symmAll goals completed! 🐙
_ = f 0 + ∑ x : {x : F // x ≠ 0}, f x := byF:Type u_1inst✝¹:Field Finst✝:Fintype Ff:F → ℂ⊢ f 0 + ∑ x ∈ univ.erase 0, f x = f 0 + ∑ x, f ↑x
congr 1e_aF:Type u_1inst✝¹:Field Finst✝:Fintype Ff:F → ℂ⊢ ∑ x ∈ univ.erase 0, f x = ∑ x, f ↑x
apply Finset.sum_subtypee_aF:Type u_1inst✝¹:Field Finst✝:Fintype Ff:F → ℂ⊢ ∀ (x : F), x ∈ univ.erase 0 ↔ x ≠ 0
intro xe_aF:Type u_1inst✝¹:Field Finst✝:Fintype Ff:F → ℂx:F⊢ x ∈ univ.erase 0 ↔ x ≠ 0
simpAll goals completed! 🐙
_ = f 0 + ∑ u : Fˣ, f (u : F) := byF:Type u_1inst✝¹:Field Finst✝:Fintype Ff:F → ℂ⊢ f 0 + ∑ x, f ↑x = f 0 + ∑ u, f ↑u
congr 1e_aF:Type u_1inst✝¹:Field Finst✝:Fintype Ff:F → ℂ⊢ ∑ x, f ↑x = ∑ u, f ↑u
apply (Fintype.sum_equiv (unitsEquivNeZero : Fˣ ≃ {x : F // x ≠ 0})
(fun u : Fˣ => f (u : F))
(fun x : {x : F // x ≠ 0} => f x) ?_).symmF:Type u_1inst✝¹:Field Finst✝:Fintype Ff:F → ℂ⊢ ∀ (x : Fˣ), f ↑x = f ↑(unitsEquivNeZero x)
intro uF:Type u_1inst✝¹:Field Finst✝:Fintype Ff:F → ℂu:Fˣ⊢ f ↑u = f ↑(unitsEquivNeZero u)
rflAll goals completed! 🐙theorem product_sum_by_active_set
{ι : Type*} [Fintype ι]
(F : ι → Type*) [∀ i, Field (F i)] [∀ i, Fintype (F i)]
(f : ∀ i, F i → ℂ) :
(∑ h : ∀ i, F i, ∏ i, f i (h i)) =
∑ A ∈ (Finset.univ : Finset ι).powerset,
(∏ i ∈ A, ∑ u : (F i)ˣ, f i (u : F i)) *
(∏ i ∈ (Finset.univ : Finset ι) \ A, f i 0) := byι:Type u_1inst✝²:Fintype ιF:ι → Type u_2inst✝¹:(i : ι) → Field (F i)inst✝:(i : ι) → Fintype (F i)f:(i : ι) → F i → ℂ⊢ ∑ h, ∏ i, f i (h i) = ∑ A ∈ univ.powerset, (∏ i ∈ A, ∑ u, f i ↑u) * ∏ i ∈ univ \ A, f i 0
classical
calc
(∑ h : ∀ i, F i, ∏ i, f i (h i)) =
∏ i, ∑ h : F i, f i h := byι:Type u_1inst✝²:Fintype ιF:ι → Type u_2inst✝¹:(i : ι) → Field (F i)inst✝:(i : ι) → Fintype (F i)f:(i : ι) → F i → ℂ⊢ ∑ h, ∏ i, f i (h i) = ∏ i, ∑ h, f i h
simpa using (Fintype.prod_sum (fun i (h : F i) => f i h)).symmAll goals completed! 🐙
_ = ∏ i, ((∑ u : (F i)ˣ, f i (u : F i)) + f i 0) := byι:Type u_1inst✝²:Fintype ιF:ι → Type u_2inst✝¹:(i : ι) → Field (F i)inst✝:(i : ι) → Fintype (F i)f:(i : ι) → F i → ℂ⊢ ∏ i, ∑ h, f i h = ∏ i, (∑ u, f i ↑u + f i 0)
apply Finset.prod_congr rflι:Type u_1inst✝²:Fintype ιF:ι → Type u_2inst✝¹:(i : ι) → Field (F i)inst✝:(i : ι) → Fintype (F i)f:(i : ι) → F i → ℂ⊢ ∀ x ∈ univ, ∑ h, f x h = ∑ u, f x ↑u + f x 0
intro i _ι:Type u_1inst✝²:Fintype ιF:ι → Type u_2inst✝¹:(i : ι) → Field (F i)inst✝:(i : ι) → Fintype (F i)f:(i : ι) → F i → ℂi:ιa✝:i ∈ univ⊢ ∑ h, f i h = ∑ u, f i ↑u + f i 0
rw [sum_zero_and_unitsι:Type u_1inst✝²:Fintype ιF:ι → Type u_2inst✝¹:(i : ι) → Field (F i)inst✝:(i : ι) → Fintype (F i)f:(i : ι) → F i → ℂi:ιa✝:i ∈ univ⊢ f i 0 + ∑ u, f i ↑u = ∑ u, f i ↑u + f i 0]ι:Type u_1inst✝²:Fintype ιF:ι → Type u_2inst✝¹:(i : ι) → Field (F i)inst✝:(i : ι) → Fintype (F i)f:(i : ι) → F i → ℂi:ιa✝:i ∈ univ⊢ f i 0 + ∑ u, f i ↑u = ∑ u, f i ↑u + f i 0
ringAll goals completed! 🐙
_ = _ := Finset.prod_add
(fun i => ∑ u : (F i)ˣ, f i (u : F i))
(fun i => f i 0) Finset.univtheorem branch_zero_of_local_mask
{ι : Type*} [DecidableEq ι] (I A : Finset ι)
(scalar dual inactive : ι → ℂ)
(i : ι) (hi : i ∈ A) (hzero : dual i = 0) :
(∏ k ∈ A, scalar k * dual k) *
(∏ k ∈ I \ A, inactive k) = 0 := byι:Type u_1inst✝:DecidableEq ιI:Finset ιA:Finset ιscalar:ι → ℂdual:ι → ℂinactive:ι → ℂi:ιhi:i ∈ Ahzero:dual i = 0⊢ (∏ k ∈ A, scalar k * dual k) * ∏ k ∈ I \ A, inactive k = 0
have hprod : (∏ k ∈ A, scalar k * dual k) = 0 :=
Finset.prod_eq_zero hi (byι:Type u_1inst✝:DecidableEq ιI:Finset ιA:Finset ιscalar:ι → ℂdual:ι → ℂinactive:ι → ℂi:ιhi:i ∈ Ahzero:dual i = 0⊢ scalar i * dual i = 0 rw [hzero,ι:Type u_1inst✝:DecidableEq ιI:Finset ιA:Finset ιscalar:ι → ℂdual:ι → ℂinactive:ι → ℂi:ιhi:i ∈ Ahzero:dual i = 0⊢ scalar i * 0 = 0 mul_zeroι:Type u_1inst✝:DecidableEq ιI:Finset ιA:Finset ιscalar:ι → ℂdual:ι → ℂinactive:ι → ℂi:ιhi:i ∈ Ahzero:dual i = 0⊢ 0 = 0]All goals completed! 🐙)ι:Type u_1inst✝:DecidableEq ιI:Finset ιA:Finset ιscalar:ι → ℂdual:ι → ℂinactive:ι → ℂi:ιhi:i ∈ Ahzero:dual i = 0hprod:∏ k ∈ A, scalar k * dual k = 0⊢ (∏ k ∈ A, scalar k * dual k) * ∏ k ∈ I \ A, inactive k = 0
rw [hprod,ι:Type u_1inst✝:DecidableEq ιI:Finset ιA:Finset ιscalar:ι → ℂdual:ι → ℂinactive:ι → ℂi:ιhi:i ∈ Ahzero:dual i = 0hprod:∏ k ∈ A, scalar k * dual k = 0⊢ 0 * ∏ k ∈ I \ A, inactive k = 0 zero_mulι:Type u_1inst✝:DecidableEq ιI:Finset ιA:Finset ιscalar:ι → ℂdual:ι → ℂinactive:ι → ℂi:ιhi:i ∈ Ahzero:dual i = 0hprod:∏ k ∈ A, scalar k * dual k = 0⊢ 0 = 0]All goals completed! 🐙theorem admissible_branch_count
{ι : Type*} [Fintype ι] [DecidableEq ι]
(j : ι → ℕ) :
((Finset.univ : Finset ι).powerset.filter
(fun A => (Finset.univ.filter (fun i => j i ≠ 0)) ⊆ A)).card
≤ 2 ^ Fintype.card ι := byι:Type u_1inst✝¹:Fintype ιinst✝:DecidableEq ιj:ι → ℕ⊢ #({A ∈ univ.powerset | {i | j i ≠ 0} ⊆ A}) ≤ 2 ^ Fintype.card ι
calc
_ ≤ (Finset.univ : Finset ι).powerset.card := Finset.card_filter_le _ _
_ = 2 ^ Fintype.card ι := byι:Type u_1inst✝¹:Fintype ιinst✝:DecidableEq ιj:ι → ℕ⊢ #univ.powerset = 2 ^ Fintype.card ι simpAll goals completed! 🐙private theorem branch_zero_outside_admissible
{ι : Type*} [Fintype ι] [DecidableEq ι]
(j : ι → ℕ) (scalar dual inactive : ι → ℂ)
(hzero : ∀ i, j i ≠ 0 → inactive i = 0)
(A : Finset ι)
(hnot : ¬ (Finset.univ.filter (fun i => j i ≠ 0)) ⊆ A) :
(∏ i ∈ A, scalar i * dual i) *
(∏ i ∈ (Finset.univ : Finset ι) \ A, inactive i) = 0 := byι:Type u_1inst✝¹:Fintype ιinst✝:DecidableEq ιj:ι → ℕscalar:ι → ℂdual:ι → ℂinactive:ι → ℂhzero:∀ (i : ι), j i ≠ 0 → inactive i = 0A:Finset ιhnot:¬{i | j i ≠ 0} ⊆ A⊢ (∏ i ∈ A, scalar i * dual i) * ∏ i ∈ univ \ A, inactive i = 0
obtain ⟨i, hiM, hiA⟩ := Finset.not_subset.mp hnotι:Type u_1inst✝¹:Fintype ιinst✝:DecidableEq ιj:ι → ℕscalar:ι → ℂdual:ι → ℂinactive:ι → ℂhzero:∀ (i : ι), j i ≠ 0 → inactive i = 0A:Finset ιhnot:¬{i | j i ≠ 0} ⊆ Ai:ιhiM:i ∈ {i | j i ≠ 0}hiA:i ∉ A⊢ (∏ i ∈ A, scalar i * dual i) * ∏ i ∈ univ \ A, inactive i = 0
have hj : j i ≠ 0 := (Finset.mem_filter.mp hiM).2ι:Type u_1inst✝¹:Fintype ιinst✝:DecidableEq ιj:ι → ℕscalar:ι → ℂdual:ι → ℂinactive:ι → ℂhzero:∀ (i : ι), j i ≠ 0 → inactive i = 0A:Finset ιhnot:¬{i | j i ≠ 0} ⊆ Ai:ιhiM:i ∈ {i | j i ≠ 0}hiA:i ∉ Ahj:j i ≠ 0⊢ (∏ i ∈ A, scalar i * dual i) * ∏ i ∈ univ \ A, inactive i = 0
have hi : i ∈ (Finset.univ : Finset ι) \ A := by simp [hiA]ι:Type u_1inst✝¹:Fintype ιinst✝:DecidableEq ιj:ι → ℕscalar:ι → ℂdual:ι → ℂinactive:ι → ℂhzero:∀ (i : ι), j i ≠ 0 → inactive i = 0A:Finset ιhnot:¬{i | j i ≠ 0} ⊆ Ai:ιhiM:i ∈ {i | j i ≠ 0}hiA:i ∉ Ahj:j i ≠ 0hi:i ∈ univ \ A⊢ (∏ i ∈ A, scalar i * dual i) * ∏ i ∈ univ \ A, inactive i = 0
have hprod : (∏ k ∈ (Finset.univ : Finset ι) \ A, inactive k) = 0 :=
Finset.prod_eq_zero hi (hzero i hj)ι:Type u_1inst✝¹:Fintype ιinst✝:DecidableEq ιj:ι → ℕscalar:ι → ℂdual:ι → ℂinactive:ι → ℂhzero:∀ (i : ι), j i ≠ 0 → inactive i = 0A:Finset ιhnot:¬{i | j i ≠ 0} ⊆ Ai:ιhiM:i ∈ {i | j i ≠ 0}hiA:i ∉ Ahj:j i ≠ 0hi:i ∈ univ \ Ahprod:∏ k ∈ univ \ A, inactive k = 0⊢ (∏ i ∈ A, scalar i * dual i) * ∏ i ∈ univ \ A, inactive i = 0
rw [hprod,ι:Type u_1inst✝¹:Fintype ιinst✝:DecidableEq ιj:ι → ℕscalar:ι → ℂdual:ι → ℂinactive:ι → ℂhzero:∀ (i : ι), j i ≠ 0 → inactive i = 0A:Finset ιhnot:¬{i | j i ≠ 0} ⊆ Ai:ιhiM:i ∈ {i | j i ≠ 0}hiA:i ∉ Ahj:j i ≠ 0hi:i ∈ univ \ Ahprod:∏ k ∈ univ \ A, inactive k = 0⊢ (∏ i ∈ A, scalar i * dual i) * 0 = 0 mul_zeroι:Type u_1inst✝¹:Fintype ιinst✝:DecidableEq ιj:ι → ℕscalar:ι → ℂdual:ι → ℂinactive:ι → ℂhzero:∀ (i : ι), j i ≠ 0 → inactive i = 0A:Finset ιhnot:¬{i | j i ≠ 0} ⊆ Ai:ιhiM:i ∈ {i | j i ≠ 0}hiA:i ∉ Ahj:j i ≠ 0hi:i ∈ univ \ Ahprod:∏ k ∈ univ \ A, inactive k = 0⊢ 0 = 0]All goals completed! 🐙theorem assemble_local_A5
{ι : Type*} [Fintype ι]
(F : ι → Type*) [∀ i, Field (F i)] [∀ i, Fintype (F i)]
(j : ι → ℕ) (f : ∀ i, F i → ℂ)
(scalar dual : ι → ℂ)
(hzero : ∀ i, j i ≠ 0 → f i 0 = 0)
(hactive : ∀ i, (∑ u : (F i)ˣ, f i (u : F i)) =
scalar i * dual i) :
(∑ h : ∀ i, F i, ∏ i, f i (h i)) =
∑ A ∈ ((Finset.univ : Finset ι).powerset.filter
(fun A => (Finset.univ.filter (fun i => j i ≠ 0)) ⊆ A)),
(∏ i ∈ A, scalar i * dual i) *
(∏ i ∈ (Finset.univ : Finset ι) \ A, f i 0) := byι:Type u_1inst✝²:Fintype ιF:ι → Type u_2inst✝¹:(i : ι) → Field (F i)inst✝:(i : ι) → Fintype (F i)j:ι → ℕf:(i : ι) → F i → ℂscalar:ι → ℂdual:ι → ℂhzero:∀ (i : ι), j i ≠ 0 → f i 0 = 0hactive:∀ (i : ι), ∑ u, f i ↑u = scalar i * dual i⊢ ∑ h, ∏ i, f i (h i) = ∑ A ∈ univ.powerset with {i | j i ≠ 0} ⊆ A, (∏ i ∈ A, scalar i * dual i) * ∏ i ∈ univ \ A, f i 0
classical
rw [product_sum_by_active_setι:Type u_1inst✝²:Fintype ιF:ι → Type u_2inst✝¹:(i : ι) → Field (F i)inst✝:(i : ι) → Fintype (F i)j:ι → ℕf:(i : ι) → F i → ℂscalar:ι → ℂdual:ι → ℂhzero:∀ (i : ι), j i ≠ 0 → f i 0 = 0hactive:∀ (i : ι), ∑ u, f i ↑u = scalar i * dual i⊢ ∑ A ∈ univ.powerset, (∏ i ∈ A, ∑ u, f i ↑u) * ∏ i ∈ univ \ A, f i 0 =
∑ A ∈ univ.powerset with {i | j i ≠ 0} ⊆ A, (∏ i ∈ A, scalar i * dual i) * ∏ i ∈ univ \ A, f i 0]ι:Type u_1inst✝²:Fintype ιF:ι → Type u_2inst✝¹:(i : ι) → Field (F i)inst✝:(i : ι) → Fintype (F i)j:ι → ℕf:(i : ι) → F i → ℂscalar:ι → ℂdual:ι → ℂhzero:∀ (i : ι), j i ≠ 0 → f i 0 = 0hactive:∀ (i : ι), ∑ u, f i ↑u = scalar i * dual i⊢ ∑ A ∈ univ.powerset, (∏ i ∈ A, ∑ u, f i ↑u) * ∏ i ∈ univ \ A, f i 0 =
∑ A ∈ univ.powerset with {i | j i ≠ 0} ⊆ A, (∏ i ∈ A, scalar i * dual i) * ∏ i ∈ univ \ A, f i 0
have hreplace : ∀ A : Finset ι,
(∏ i ∈ A, ∑ u : (F i)ˣ, f i (u : F i)) =
∏ i ∈ A, scalar i * dual i := byι:Type u_1inst✝²:Fintype ιF:ι → Type u_2inst✝¹:(i : ι) → Field (F i)inst✝:(i : ι) → Fintype (F i)j:ι → ℕf:(i : ι) → F i → ℂscalar:ι → ℂdual:ι → ℂhzero:∀ (i : ι), j i ≠ 0 → f i 0 = 0hactive:∀ (i : ι), ∑ u, f i ↑u = scalar i * dual i⊢ ∑ h, ∏ i, f i (h i) = ∑ A ∈ univ.powerset with {i | j i ≠ 0} ⊆ A, (∏ i ∈ A, scalar i * dual i) * ∏ i ∈ univ \ A, f i 0
intro Aι:Type u_1inst✝²:Fintype ιF:ι → Type u_2inst✝¹:(i : ι) → Field (F i)inst✝:(i : ι) → Fintype (F i)j:ι → ℕf:(i : ι) → F i → ℂscalar:ι → ℂdual:ι → ℂhzero:∀ (i : ι), j i ≠ 0 → f i 0 = 0hactive:∀ (i : ι), ∑ u, f i ↑u = scalar i * dual iA:Finset ι⊢ ∏ i ∈ A, ∑ u, f i ↑u = ∏ i ∈ A, scalar i * dual i
apply Finset.prod_congr rflι:Type u_1inst✝²:Fintype ιF:ι → Type u_2inst✝¹:(i : ι) → Field (F i)inst✝:(i : ι) → Fintype (F i)j:ι → ℕf:(i : ι) → F i → ℂscalar:ι → ℂdual:ι → ℂhzero:∀ (i : ι), j i ≠ 0 → f i 0 = 0hactive:∀ (i : ι), ∑ u, f i ↑u = scalar i * dual iA:Finset ι⊢ ∀ x ∈ A, ∑ u, f x ↑u = scalar x * dual x
intro i _ι:Type u_1inst✝²:Fintype ιF:ι → Type u_2inst✝¹:(i : ι) → Field (F i)inst✝:(i : ι) → Fintype (F i)j:ι → ℕf:(i : ι) → F i → ℂscalar:ι → ℂdual:ι → ℂhzero:∀ (i : ι), j i ≠ 0 → f i 0 = 0hactive:∀ (i : ι), ∑ u, f i ↑u = scalar i * dual iA:Finset ιi:ιa✝:i ∈ A⊢ ∑ u, f i ↑u = scalar i * dual i
exact hactive iι:Type u_1inst✝²:Fintype ιF:ι → Type u_2inst✝¹:(i : ι) → Field (F i)inst✝:(i : ι) → Fintype (F i)j:ι → ℕf:(i : ι) → F i → ℂscalar:ι → ℂdual:ι → ℂhzero:∀ (i : ι), j i ≠ 0 → f i 0 = 0hactive:∀ (i : ι), ∑ u, f i ↑u = scalar i * dual ihreplace:∀ (A : Finset ι), ∏ i ∈ A, ∑ u, f i ↑u = ∏ i ∈ A, scalar i * dual i⊢ ∑ A ∈ univ.powerset, (∏ i ∈ A, ∑ u, f i ↑u) * ∏ i ∈ univ \ A, f i 0 =
∑ A ∈ univ.powerset with {i | j i ≠ 0} ⊆ A, (∏ i ∈ A, scalar i * dual i) * ∏ i ∈ univ \ A, f i 0
conv_lhs =>
arg 2ι:Type u_1inst✝²:Fintype ιF:ι → Type u_2inst✝¹:(i : ι) → Field (F i)inst✝:(i : ι) → Fintype (F i)j:ι → ℕf:(i : ι) → F i → ℂscalar:ι → ℂdual:ι → ℂhzero:∀ (i : ι), j i ≠ 0 → f i 0 = 0hactive:∀ (i : ι), ∑ u, f i ↑u = scalar i * dual ihreplace:∀ (A : Finset ι), ∏ i ∈ A, ∑ u, f i ↑u = ∏ i ∈ A, scalar i * dual i| fun A => (∏ i ∈ A, ∑ u, f i ↑u) * ∏ i ∈ univ \ A, f i 0
ext Aι:Type u_1inst✝²:Fintype ιF:ι → Type u_2inst✝¹:(i : ι) → Field (F i)inst✝:(i : ι) → Fintype (F i)j:ι → ℕf:(i : ι) → F i → ℂscalar:ι → ℂdual:ι → ℂhzero:∀ (i : ι), j i ≠ 0 → f i 0 = 0hactive:∀ (i : ι), ∑ u, f i ↑u = scalar i * dual ihreplace:∀ (A : Finset ι), ∏ i ∈ A, ∑ u, f i ↑u = ∏ i ∈ A, scalar i * dual iA:Finset ι| (∏ i ∈ A, ∑ u, f i ↑u) * ∏ i ∈ univ \ A, f i 0
rw [hreplace A]ι:Type u_1inst✝²:Fintype ιF:ι → Type u_2inst✝¹:(i : ι) → Field (F i)inst✝:(i : ι) → Fintype (F i)j:ι → ℕf:(i : ι) → F i → ℂscalar:ι → ℂdual:ι → ℂhzero:∀ (i : ι), j i ≠ 0 → f i 0 = 0hactive:∀ (i : ι), ∑ u, f i ↑u = scalar i * dual ihreplace:∀ (A : Finset ι), ∏ i ∈ A, ∑ u, f i ↑u = ∏ i ∈ A, scalar i * dual iA:Finset ι| (∏ i ∈ A, scalar i * dual i) * ∏ i ∈ univ \ A, f i 0
rw [Finset.sum_filterι:Type u_1inst✝²:Fintype ιF:ι → Type u_2inst✝¹:(i : ι) → Field (F i)inst✝:(i : ι) → Fintype (F i)j:ι → ℕf:(i : ι) → F i → ℂscalar:ι → ℂdual:ι → ℂhzero:∀ (i : ι), j i ≠ 0 → f i 0 = 0hactive:∀ (i : ι), ∑ u, f i ↑u = scalar i * dual ihreplace:∀ (A : Finset ι), ∏ i ∈ A, ∑ u, f i ↑u = ∏ i ∈ A, scalar i * dual i⊢ ∑ A ∈ univ.powerset, (∏ i ∈ A, scalar i * dual i) * ∏ i ∈ univ \ A, f i 0 =
∑ a ∈ univ.powerset, if {i | j i ≠ 0} ⊆ a then (∏ i ∈ a, scalar i * dual i) * ∏ i ∈ univ \ a, f i 0 else 0]ι:Type u_1inst✝²:Fintype ιF:ι → Type u_2inst✝¹:(i : ι) → Field (F i)inst✝:(i : ι) → Fintype (F i)j:ι → ℕf:(i : ι) → F i → ℂscalar:ι → ℂdual:ι → ℂhzero:∀ (i : ι), j i ≠ 0 → f i 0 = 0hactive:∀ (i : ι), ∑ u, f i ↑u = scalar i * dual ihreplace:∀ (A : Finset ι), ∏ i ∈ A, ∑ u, f i ↑u = ∏ i ∈ A, scalar i * dual i⊢ ∑ A ∈ univ.powerset, (∏ i ∈ A, scalar i * dual i) * ∏ i ∈ univ \ A, f i 0 =
∑ a ∈ univ.powerset, if {i | j i ≠ 0} ⊆ a then (∏ i ∈ a, scalar i * dual i) * ∏ i ∈ univ \ a, f i 0 else 0
apply Finset.sum_congr rflι:Type u_1inst✝²:Fintype ιF:ι → Type u_2inst✝¹:(i : ι) → Field (F i)inst✝:(i : ι) → Fintype (F i)j:ι → ℕf:(i : ι) → F i → ℂscalar:ι → ℂdual:ι → ℂhzero:∀ (i : ι), j i ≠ 0 → f i 0 = 0hactive:∀ (i : ι), ∑ u, f i ↑u = scalar i * dual ihreplace:∀ (A : Finset ι), ∏ i ∈ A, ∑ u, f i ↑u = ∏ i ∈ A, scalar i * dual i⊢ ∀ x ∈ univ.powerset,
(∏ i ∈ x, scalar i * dual i) * ∏ i ∈ univ \ x, f i 0 =
if {i | j i ≠ 0} ⊆ x then (∏ i ∈ x, scalar i * dual i) * ∏ i ∈ univ \ x, f i 0 else 0
intro A hAι:Type u_1inst✝²:Fintype ιF:ι → Type u_2inst✝¹:(i : ι) → Field (F i)inst✝:(i : ι) → Fintype (F i)j:ι → ℕf:(i : ι) → F i → ℂscalar:ι → ℂdual:ι → ℂhzero:∀ (i : ι), j i ≠ 0 → f i 0 = 0hactive:∀ (i : ι), ∑ u, f i ↑u = scalar i * dual ihreplace:∀ (A : Finset ι), ∏ i ∈ A, ∑ u, f i ↑u = ∏ i ∈ A, scalar i * dual iA:Finset ιhA:A ∈ univ.powerset⊢ (∏ i ∈ A, scalar i * dual i) * ∏ i ∈ univ \ A, f i 0 =
if {i | j i ≠ 0} ⊆ A then (∏ i ∈ A, scalar i * dual i) * ∏ i ∈ univ \ A, f i 0 else 0
by_cases hAdmissible : (Finset.univ.filter (fun i => j i ≠ 0)) ⊆ Aposι:Type u_1inst✝²:Fintype ιF:ι → Type u_2inst✝¹:(i : ι) → Field (F i)inst✝:(i : ι) → Fintype (F i)j:ι → ℕf:(i : ι) → F i → ℂscalar:ι → ℂdual:ι → ℂhzero:∀ (i : ι), j i ≠ 0 → f i 0 = 0hactive:∀ (i : ι), ∑ u, f i ↑u = scalar i * dual ihreplace:∀ (A : Finset ι), ∏ i ∈ A, ∑ u, f i ↑u = ∏ i ∈ A, scalar i * dual iA:Finset ιhA:A ∈ univ.powersethAdmissible:{i | j i ≠ 0} ⊆ A⊢ (∏ i ∈ A, scalar i * dual i) * ∏ i ∈ univ \ A, f i 0 =
if {i | j i ≠ 0} ⊆ A then (∏ i ∈ A, scalar i * dual i) * ∏ i ∈ univ \ A, f i 0 else 0negι:Type u_1inst✝²:Fintype ιF:ι → Type u_2inst✝¹:(i : ι) → Field (F i)inst✝:(i : ι) → Fintype (F i)j:ι → ℕf:(i : ι) → F i → ℂscalar:ι → ℂdual:ι → ℂhzero:∀ (i : ι), j i ≠ 0 → f i 0 = 0hactive:∀ (i : ι), ∑ u, f i ↑u = scalar i * dual ihreplace:∀ (A : Finset ι), ∏ i ∈ A, ∑ u, f i ↑u = ∏ i ∈ A, scalar i * dual iA:Finset ιhA:A ∈ univ.powersethAdmissible:¬{i | j i ≠ 0} ⊆ A⊢ (∏ i ∈ A, scalar i * dual i) * ∏ i ∈ univ \ A, f i 0 =
if {i | j i ≠ 0} ⊆ A then (∏ i ∈ A, scalar i * dual i) * ∏ i ∈ univ \ A, f i 0 else 0
·posι:Type u_1inst✝²:Fintype ιF:ι → Type u_2inst✝¹:(i : ι) → Field (F i)inst✝:(i : ι) → Fintype (F i)j:ι → ℕf:(i : ι) → F i → ℂscalar:ι → ℂdual:ι → ℂhzero:∀ (i : ι), j i ≠ 0 → f i 0 = 0hactive:∀ (i : ι), ∑ u, f i ↑u = scalar i * dual ihreplace:∀ (A : Finset ι), ∏ i ∈ A, ∑ u, f i ↑u = ∏ i ∈ A, scalar i * dual iA:Finset ιhA:A ∈ univ.powersethAdmissible:{i | j i ≠ 0} ⊆ A⊢ (∏ i ∈ A, scalar i * dual i) * ∏ i ∈ univ \ A, f i 0 =
if {i | j i ≠ 0} ⊆ A then (∏ i ∈ A, scalar i * dual i) * ∏ i ∈ univ \ A, f i 0 else 0 simp [hAdmissible]All goals completed! 🐙
·negι:Type u_1inst✝²:Fintype ιF:ι → Type u_2inst✝¹:(i : ι) → Field (F i)inst✝:(i : ι) → Fintype (F i)j:ι → ℕf:(i : ι) → F i → ℂscalar:ι → ℂdual:ι → ℂhzero:∀ (i : ι), j i ≠ 0 → f i 0 = 0hactive:∀ (i : ι), ∑ u, f i ↑u = scalar i * dual ihreplace:∀ (A : Finset ι), ∏ i ∈ A, ∑ u, f i ↑u = ∏ i ∈ A, scalar i * dual iA:Finset ιhA:A ∈ univ.powersethAdmissible:¬{i | j i ≠ 0} ⊆ A⊢ (∏ i ∈ A, scalar i * dual i) * ∏ i ∈ univ \ A, f i 0 =
if {i | j i ≠ 0} ⊆ A then (∏ i ∈ A, scalar i * dual i) * ∏ i ∈ univ \ A, f i 0 else 0 simp [hAdmissible,
branch_zero_outside_admissible j scalar dual (fun i => f i 0)
(fun i hj => hzero i hj)
A hAdmissible]All goals completed! 🐙end FixedRayActiveSetnamespace CubeInversiontheorem cube_index_filter_complex (m : ℕ) :
(∑ h ∈ m.divisors, (ArithmeticFunction.moebius h : ℂ)) =
if m = 1 then 1 else 0 := bym:ℕ⊢ ∑ h ∈ m.divisors, ↑(ArithmeticFunction.moebius h) = if m = 1 then 1 else 0
have h := congrArg (fun f : ArithmeticFunction ℤ => f m)
ArithmeticFunction.moebius_mul_coe_zetam:ℕh:(ArithmeticFunction.moebius * ↑ArithmeticFunction.zeta) m = 1 m⊢ ∑ h ∈ m.divisors, ↑(ArithmeticFunction.moebius h) = if m = 1 then 1 else 0
rw [ArithmeticFunction.coe_mul_zeta_apply,m:ℕh:∑ i ∈ m.divisors, ArithmeticFunction.moebius i = 1 m⊢ ∑ h ∈ m.divisors, ↑(ArithmeticFunction.moebius h) = if m = 1 then 1 else 0 ArithmeticFunction.one_applym:ℕh:∑ i ∈ m.divisors, ArithmeticFunction.moebius i = if m = 1 then 1 else 0⊢ ∑ h ∈ m.divisors, ↑(ArithmeticFunction.moebius h) = if m = 1 then 1 else 0] at hm:ℕh:∑ i ∈ m.divisors, ArithmeticFunction.moebius i = if m = 1 then 1 else 0⊢ ∑ h ∈ m.divisors, ↑(ArithmeticFunction.moebius h) = if m = 1 then 1 else 0
exact_mod_cast hAll goals completed! 🐙theorem cube_coefficient_filter
(m : ℕ) (c W : ℕ → ℂ)
(hc : ∀ a b, c (a * b) = c a * c b) :
(∑ h ∈ m.divisors,
(ArithmeticFunction.moebius h : ℂ) * c h * c (m / h) * W m) =
if m = 1 then c m * W m else 0 := bym:ℕc:ℕ → ℂW:ℕ → ℂhc:∀ (a b : ℕ), c (a * b) = c a * c b⊢ ∑ h ∈ m.divisors, ↑(ArithmeticFunction.moebius h) * c h * c (m / h) * W m = if m = 1 then c m * W m else 0
have heq (h : ℕ) (hh : h ∈ m.divisors) :
c h * c (m / h) = c m := by
rw [← hcm:ℕc:ℕ → ℂW:ℕ → ℂhc:∀ (a b : ℕ), c (a * b) = c a * c bh:ℕhh:h ∈ m.divisors⊢ c (h * (m / h)) = c m]m:ℕc:ℕ → ℂW:ℕ → ℂhc:∀ (a b : ℕ), c (a * b) = c a * c bh:ℕhh:h ∈ m.divisors⊢ c (h * (m / h)) = c m
congr 1m:ℕc:ℕ → ℂW:ℕ → ℂhc:∀ (a b : ℕ), c (a * b) = c a * c bh:ℕhh:h ∈ m.divisors⊢ h * (m / h) = m
exact Nat.mul_div_cancel' (Nat.dvd_of_mem_divisors hh)m:ℕc:ℕ → ℂW:ℕ → ℂhc:∀ (a b : ℕ), c (a * b) = c a * c bheq:∀ h ∈ m.divisors, c h * c (m / h) = c m⊢ ∑ h ∈ m.divisors, ↑(ArithmeticFunction.moebius h) * c h * c (m / h) * W m = if m = 1 then c m * W m else 0
calc
(∑ h ∈ m.divisors,
(ArithmeticFunction.moebius h : ℂ) * c h * c (m / h) * W m) =
(∑ h ∈ m.divisors,
(ArithmeticFunction.moebius h : ℂ)) * (c m * W m) := bym:ℕc:ℕ → ℂW:ℕ → ℂhc:∀ (a b : ℕ), c (a * b) = c a * c bheq:∀ h ∈ m.divisors, c h * c (m / h) = c m⊢ ∑ h ∈ m.divisors, ↑(ArithmeticFunction.moebius h) * c h * c (m / h) * W m =
(∑ h ∈ m.divisors, ↑(ArithmeticFunction.moebius h)) * (c m * W m)
rw [Finset.sum_mulm:ℕc:ℕ → ℂW:ℕ → ℂhc:∀ (a b : ℕ), c (a * b) = c a * c bheq:∀ h ∈ m.divisors, c h * c (m / h) = c m⊢ ∑ h ∈ m.divisors, ↑(ArithmeticFunction.moebius h) * c h * c (m / h) * W m =
∑ i ∈ m.divisors, ↑(ArithmeticFunction.moebius i) * (c m * W m)]m:ℕc:ℕ → ℂW:ℕ → ℂhc:∀ (a b : ℕ), c (a * b) = c a * c bheq:∀ h ∈ m.divisors, c h * c (m / h) = c m⊢ ∑ h ∈ m.divisors, ↑(ArithmeticFunction.moebius h) * c h * c (m / h) * W m =
∑ i ∈ m.divisors, ↑(ArithmeticFunction.moebius i) * (c m * W m)
apply Finset.sum_congr rflm:ℕc:ℕ → ℂW:ℕ → ℂhc:∀ (a b : ℕ), c (a * b) = c a * c bheq:∀ h ∈ m.divisors, c h * c (m / h) = c m⊢ ∀ x ∈ m.divisors,
↑(ArithmeticFunction.moebius x) * c x * c (m / x) * W m = ↑(ArithmeticFunction.moebius x) * (c m * W m)
intro h hhm:ℕc:ℕ → ℂW:ℕ → ℂhc:∀ (a b : ℕ), c (a * b) = c a * c bheq:∀ h ∈ m.divisors, c h * c (m / h) = c mh:ℕhh:h ∈ m.divisors⊢ ↑(ArithmeticFunction.moebius h) * c h * c (m / h) * W m = ↑(ArithmeticFunction.moebius h) * (c m * W m)
calc
(ArithmeticFunction.moebius h : ℂ) * c h * c (m / h) * W m =
(ArithmeticFunction.moebius h : ℂ) * (c h * c (m / h)) * W m := bym:ℕc:ℕ → ℂW:ℕ → ℂhc:∀ (a b : ℕ), c (a * b) = c a * c bheq:∀ h ∈ m.divisors, c h * c (m / h) = c mh:ℕhh:h ∈ m.divisors⊢ ↑(ArithmeticFunction.moebius h) * c h * c (m / h) * W m = ↑(ArithmeticFunction.moebius h) * (c h * c (m / h)) * W m ringAll goals completed! 🐙
_ = (ArithmeticFunction.moebius h : ℂ) * (c m * W m) := bym:ℕc:ℕ → ℂW:ℕ → ℂhc:∀ (a b : ℕ), c (a * b) = c a * c bheq:∀ h ∈ m.divisors, c h * c (m / h) = c mh:ℕhh:h ∈ m.divisors⊢ ↑(ArithmeticFunction.moebius h) * (c h * c (m / h)) * W m = ↑(ArithmeticFunction.moebius h) * (c m * W m)
rw [heq h hhm:ℕc:ℕ → ℂW:ℕ → ℂhc:∀ (a b : ℕ), c (a * b) = c a * c bheq:∀ h ∈ m.divisors, c h * c (m / h) = c mh:ℕhh:h ∈ m.divisors⊢ ↑(ArithmeticFunction.moebius h) * c m * W m = ↑(ArithmeticFunction.moebius h) * (c m * W m)]m:ℕc:ℕ → ℂW:ℕ → ℂhc:∀ (a b : ℕ), c (a * b) = c a * c bheq:∀ h ∈ m.divisors, c h * c (m / h) = c mh:ℕhh:h ∈ m.divisors⊢ ↑(ArithmeticFunction.moebius h) * c m * W m = ↑(ArithmeticFunction.moebius h) * (c m * W m)
ringAll goals completed! 🐙
_ = if m = 1 then c m * W m else 0 := bym:ℕc:ℕ → ℂW:ℕ → ℂhc:∀ (a b : ℕ), c (a * b) = c a * c bheq:∀ h ∈ m.divisors, c h * c (m / h) = c m⊢ (∑ h ∈ m.divisors, ↑(ArithmeticFunction.moebius h)) * (c m * W m) = if m = 1 then c m * W m else 0
rw [cube_index_filter_complexm:ℕc:ℕ → ℂW:ℕ → ℂhc:∀ (a b : ℕ), c (a * b) = c a * c bheq:∀ h ∈ m.divisors, c h * c (m / h) = c m⊢ (if m = 1 then 1 else 0) * (c m * W m) = if m = 1 then c m * W m else 0]m:ℕc:ℕ → ℂW:ℕ → ℂhc:∀ (a b : ℕ), c (a * b) = c a * c bheq:∀ h ∈ m.divisors, c h * c (m / h) = c m⊢ (if m = 1 then 1 else 0) * (c m * W m) = if m = 1 then c m * W m else 0
split_ifsposm:ℕc:ℕ → ℂW:ℕ → ℂhc:∀ (a b : ℕ), c (a * b) = c a * c bheq:∀ h ∈ m.divisors, c h * c (m / h) = c mh✝:m = 1⊢ 1 * (c m * W m) = c m * W mnegm:ℕc:ℕ → ℂW:ℕ → ℂhc:∀ (a b : ℕ), c (a * b) = c a * c bheq:∀ h ∈ m.divisors, c h * c (m / h) = c mh✝:¬m = 1⊢ 0 * (c m * W m) = 0 <;>posm:ℕc:ℕ → ℂW:ℕ → ℂhc:∀ (a b : ℕ), c (a * b) = c a * c bheq:∀ h ∈ m.divisors, c h * c (m / h) = c mh✝:m = 1⊢ 1 * (c m * W m) = c m * W mnegm:ℕc:ℕ → ℂW:ℕ → ℂhc:∀ (a b : ℕ), c (a * b) = c a * c bheq:∀ h ∈ m.divisors, c h * c (m / h) = c mh✝:¬m = 1⊢ 0 * (c m * W m) = 0 simpAll goals completed! 🐙theorem finite_cube_inversion
(S : Finset ℕ) (hS : 1 ∈ S) (c W : ℕ → ℂ)
(hc : ∀ a b, c (a * b) = c a * c b) :
(∑ m ∈ S, ∑ h ∈ m.divisors,
(ArithmeticFunction.moebius h : ℂ) * c h * c (m / h) * W m) =
c 1 * W 1 := byS:Finset ℕhS:1 ∈ Sc:ℕ → ℂW:ℕ → ℂhc:∀ (a b : ℕ), c (a * b) = c a * c b⊢ ∑ m ∈ S, ∑ h ∈ m.divisors, ↑(ArithmeticFunction.moebius h) * c h * c (m / h) * W m = c 1 * W 1
simp_rw [S:Finset ℕhS:1 ∈ Sc:ℕ → ℂW:ℕ → ℂhc:∀ (a b : ℕ), c (a * b) = c a * c b⊢ ∑ m ∈ S, ∑ h ∈ m.divisors, ↑(ArithmeticFunction.moebius h) * c h * c (m / h) * W m = c 1 * W 1cube_coefficient_filter (c := c) (W := W) (hc := hc)S:Finset ℕhS:1 ∈ Sc:ℕ → ℂW:ℕ → ℂhc:∀ (a b : ℕ), c (a * b) = c a * c b⊢ (∑ x ∈ S, if x = 1 then c x * W x else 0) = c 1 * W 1]
simp [hS]All goals completed! 🐙theorem finite_cube_inversion_with_columns {N : Type*} [DecidableEq N]
(columns : Finset N) (S : Finset ℕ) (hS : 1 ∈ S)
(a : N → ℂ) (c : ℕ → ℂ) (W : N → ℕ → ℂ)
(hc : ∀ x y, c (x * y) = c x * c y) :
(∑ n ∈ columns, a n *
(∑ m ∈ S, ∑ h ∈ m.divisors,
(ArithmeticFunction.moebius h : ℂ) * c h * c (m / h) * W n m)) =
∑ n ∈ columns, a n * (c 1 * W n 1) := byN:Type u_1inst✝:DecidableEq Ncolumns:Finset NS:Finset ℕhS:1 ∈ Sa:N → ℂc:ℕ → ℂW:N → ℕ → ℂhc:∀ (x y : ℕ), c (x * y) = c x * c y⊢ ∑ n ∈ columns, a n * ∑ m ∈ S, ∑ h ∈ m.divisors, ↑(ArithmeticFunction.moebius h) * c h * c (m / h) * W n m =
∑ n ∈ columns, a n * (c 1 * W n 1)
apply Finset.sum_congr rflN:Type u_1inst✝:DecidableEq Ncolumns:Finset NS:Finset ℕhS:1 ∈ Sa:N → ℂc:ℕ → ℂW:N → ℕ → ℂhc:∀ (x y : ℕ), c (x * y) = c x * c y⊢ ∀ x ∈ columns,
a x * ∑ m ∈ S, ∑ h ∈ m.divisors, ↑(ArithmeticFunction.moebius h) * c h * c (m / h) * W x m = a x * (c 1 * W x 1)
intro n hnN:Type u_1inst✝:DecidableEq Ncolumns:Finset NS:Finset ℕhS:1 ∈ Sa:N → ℂc:ℕ → ℂW:N → ℕ → ℂhc:∀ (x y : ℕ), c (x * y) = c x * c yn:Nhn:n ∈ columns⊢ a n * ∑ m ∈ S, ∑ h ∈ m.divisors, ↑(ArithmeticFunction.moebius h) * c h * c (m / h) * W n m = a n * (c 1 * W n 1)
rw [finite_cube_inversion S hS c (W n) hcN:Type u_1inst✝:DecidableEq Ncolumns:Finset NS:Finset ℕhS:1 ∈ Sa:N → ℂc:ℕ → ℂW:N → ℕ → ℂhc:∀ (x y : ℕ), c (x * y) = c x * c yn:Nhn:n ∈ columns⊢ a n * (c 1 * W n 1) = a n * (c 1 * W n 1)]All goals completed! 🐙end CubeInversionnamespace ActualEisensteinCubicopen EisensteinEmbedding ConcreteTraceCRT PrimitiveTracenoncomputable def breveGammaMinus1 (P : Ideal O) [P.IsMaximal]
(hgood : lambda ∉ P) (p : O) (hP : P = Ideal.span {p})
(hp : p ≠ 0) : ℂ :=
gaussSum (canonicalSextic P hgood)⁻¹
(hP.symm ▸ eisTraceModChar ShortDraftTrace.breveE
ConcreteBreveE.breveE_period_coordinates p hp) /
(‖eisEmbedding p‖ : ℂ)private theorem canonicalSextic_order_six (P : Ideal O) [P.IsMaximal]
(hgood : lambda ∉ P) (hchar : ringChar (O ⧸ P) ≠ 2) :
orderOf (canonicalSextic P hgood) = 6 := byP:Ideal Oinst✝:P.IsMaximalhgood:lambda ∉ Phchar:ringChar (O ⧸ P) ≠ 2⊢ orderOf (canonicalSextic P hgood) = 6
let Φ : MulChar (O ⧸ P) O →* MulChar (O ⧸ P) ℂ :=
MulChar.ringHomCompHom eisEmbeddingP:Ideal Oinst✝:P.IsMaximalhgood:lambda ∉ Phchar:ringChar (O ⧸ P) ≠ 2Φ:MulChar (O ⧸ P) O →* MulChar (O ⧸ P) ℂ := ringHomCompHom eisEmbedding⊢ orderOf (canonicalSextic P hgood) = 6
have hΦ : Function.Injective Φ := by
intro x y hP:Ideal Oinst✝:P.IsMaximalhgood:lambda ∉ Phchar:ringChar (O ⧸ P) ≠ 2Φ:MulChar (O ⧸ P) O →* MulChar (O ⧸ P) ℂ := ringHomCompHom eisEmbeddingx:MulChar (O ⧸ P) Oy:MulChar (O ⧸ P) Oh:Φ x = Φ y⊢ x = y
apply MulChar.extP:Ideal Oinst✝:P.IsMaximalhgood:lambda ∉ Phchar:ringChar (O ⧸ P) ≠ 2Φ:MulChar (O ⧸ P) O →* MulChar (O ⧸ P) ℂ := ringHomCompHom eisEmbeddingx:MulChar (O ⧸ P) Oy:MulChar (O ⧸ P) Oh:Φ x = Φ y⊢ ∀ (a : (O ⧸ P)ˣ), x ↑a = y ↑a
intro tP:Ideal Oinst✝:P.IsMaximalhgood:lambda ∉ Phchar:ringChar (O ⧸ P) ≠ 2Φ:MulChar (O ⧸ P) O →* MulChar (O ⧸ P) ℂ := ringHomCompHom eisEmbeddingx:MulChar (O ⧸ P) Oy:MulChar (O ⧸ P) Oh:Φ x = Φ yt:(O ⧸ P)ˣ⊢ x ↑t = y ↑t
apply eisEmbedding_injectiveP:Ideal Oinst✝:P.IsMaximalhgood:lambda ∉ Phchar:ringChar (O ⧸ P) ≠ 2Φ:MulChar (O ⧸ P) O →* MulChar (O ⧸ P) ℂ := ringHomCompHom eisEmbeddingx:MulChar (O ⧸ P) Oy:MulChar (O ⧸ P) Oh:Φ x = Φ yt:(O ⧸ P)ˣ⊢ eisEmbedding (x ↑t) = eisEmbedding (y ↑t)
exact congrArg (fun f : MulChar (O ⧸ P) ℂ => f t) hP:Ideal Oinst✝:P.IsMaximalhgood:lambda ∉ Phchar:ringChar (O ⧸ P) ≠ 2Φ:MulChar (O ⧸ P) O →* MulChar (O ⧸ P) ℂ := ringHomCompHom eisEmbeddinghΦ:Function.Injective ⇑Φ⊢ orderOf (canonicalSextic P hgood) = 6
change orderOf (Φ (sexticChar P hgood)) = 6P:Ideal Oinst✝:P.IsMaximalhgood:lambda ∉ Phchar:ringChar (O ⧸ P) ≠ 2Φ:MulChar (O ⧸ P) O →* MulChar (O ⧸ P) ℂ := ringHomCompHom eisEmbeddinghΦ:Function.Injective ⇑Φ⊢ orderOf (Φ (sexticChar P hgood)) = 6
rw [orderOf_injective Φ hΦ,P:Ideal Oinst✝:P.IsMaximalhgood:lambda ∉ Phchar:ringChar (O ⧸ P) ≠ 2Φ:MulChar (O ⧸ P) O →* MulChar (O ⧸ P) ℂ := ringHomCompHom eisEmbeddinghΦ:Function.Injective ⇑Φ⊢ orderOf (sexticChar P hgood) = 6 sexticChar_order P hgood hcharP:Ideal Oinst✝:P.IsMaximalhgood:lambda ∉ Phchar:ringChar (O ⧸ P) ≠ 2Φ:MulChar (O ⧸ P) O →* MulChar (O ⧸ P) ℂ := ringHomCompHom eisEmbeddinghΦ:Function.Injective ⇑Φ⊢ 6 = 6]All goals completed! 🐙theorem breveGamma1_gammaMinus1 (P : Ideal O) [P.IsMaximal]
(hgood : lambda ∉ P) (hchar : ringChar (O ⧸ P) ≠ 2)
(p : O) (hP : P = Ideal.span {p}) (hp : p ≠ 0)
(hprimary : lambda ^ 2 ∣ p - 1) :
breveGamma1 P hgood p hP hp * breveGammaMinus1 P hgood p hP hp =
canonicalSextic P hgood (Ideal.Quotient.mk P (-1 : O)) := byP:Ideal Oinst✝:P.IsMaximalhgood:lambda ∉ Phchar:ringChar (O ⧸ P) ≠ 2p:OhP:P = Ideal.span {p}hp:p ≠ 0hprimary:lambda ^ 2 ∣ p - 1⊢ breveGamma1 P hgood p hP hp * breveGammaMinus1 P hgood p hP hp = (canonicalSextic P hgood) ((Ideal.Quotient.mk P) (-1))
subst Pp:Ohp:p ≠ 0hprimary:lambda ^ 2 ∣ p - 1inst✝:(Ideal.span {p}).IsMaximalhgood:lambda ∉ Ideal.span {p}hchar:ringChar (O ⧸ Ideal.span {p}) ≠ 2⊢ breveGamma1 (Ideal.span {p}) hgood p ⋯ hp * breveGammaMinus1 (Ideal.span {p}) hgood p ⋯ hp =
(canonicalSextic (Ideal.span {p}) hgood) ((Ideal.Quotient.mk (Ideal.span {p})) (-1))
let χ := canonicalSextic (Ideal.span {p}) hgoodp:Ohp:p ≠ 0hprimary:lambda ^ 2 ∣ p - 1inst✝:(Ideal.span {p}).IsMaximalhgood:lambda ∉ Ideal.span {p}hchar:ringChar (O ⧸ Ideal.span {p}) ≠ 2χ:MulChar (O ⧸ Ideal.span {p}) ℂ := canonicalSextic (Ideal.span {p}) hgood⊢ breveGamma1 (Ideal.span {p}) hgood p ⋯ hp * breveGammaMinus1 (Ideal.span {p}) hgood p ⋯ hp =
(canonicalSextic (Ideal.span {p}) hgood) ((Ideal.Quotient.mk (Ideal.span {p})) (-1))
let ψ := eisTraceModChar ShortDraftTrace.breveE
ConcreteBreveE.breveE_period_coordinates p hpp:Ohp:p ≠ 0hprimary:lambda ^ 2 ∣ p - 1inst✝:(Ideal.span {p}).IsMaximalhgood:lambda ∉ Ideal.span {p}hchar:ringChar (O ⧸ Ideal.span {p}) ≠ 2χ:MulChar (O ⧸ Ideal.span {p}) ℂ := canonicalSextic (Ideal.span {p}) hgoodψ:AddChar (EisensteinEmbedding.O ⧸ Ideal.span {p}) ℂ := eisTraceModChar ShortDraftTrace.breveE ConcreteBreveE.breveE_period_coordinates p hp⊢ breveGamma1 (Ideal.span {p}) hgood p ⋯ hp * breveGammaMinus1 (Ideal.span {p}) hgood p ⋯ hp =
(canonicalSextic (Ideal.span {p}) hgood) ((Ideal.Quotient.mk (Ideal.span {p})) (-1))
let s : ℂ := ‖eisEmbedding p‖p:Ohp:p ≠ 0hprimary:lambda ^ 2 ∣ p - 1inst✝:(Ideal.span {p}).IsMaximalhgood:lambda ∉ Ideal.span {p}hchar:ringChar (O ⧸ Ideal.span {p}) ≠ 2χ:MulChar (O ⧸ Ideal.span {p}) ℂ := canonicalSextic (Ideal.span {p}) hgoodψ:AddChar (EisensteinEmbedding.O ⧸ Ideal.span {p}) ℂ := eisTraceModChar ShortDraftTrace.breveE ConcreteBreveE.breveE_period_coordinates p hps:ℂ := ↑‖eisEmbedding p‖⊢ breveGamma1 (Ideal.span {p}) hgood p ⋯ hp * breveGammaMinus1 (Ideal.span {p}) hgood p ⋯ hp =
(canonicalSextic (Ideal.span {p}) hgood) ((Ideal.Quotient.mk (Ideal.span {p})) (-1))
have hψ : ψ.IsPrimitive :=
eisTraceModChar_breveE_primitive (Ideal.span {p}) p rfl hpp:Ohp:p ≠ 0hprimary:lambda ^ 2 ∣ p - 1inst✝:(Ideal.span {p}).IsMaximalhgood:lambda ∉ Ideal.span {p}hchar:ringChar (O ⧸ Ideal.span {p}) ≠ 2χ:MulChar (O ⧸ Ideal.span {p}) ℂ := canonicalSextic (Ideal.span {p}) hgoodψ:AddChar (EisensteinEmbedding.O ⧸ Ideal.span {p}) ℂ := eisTraceModChar ShortDraftTrace.breveE ConcreteBreveE.breveE_period_coordinates p hps:ℂ := ↑‖eisEmbedding p‖hψ:ψ.IsPrimitive⊢ breveGamma1 (Ideal.span {p}) hgood p ⋯ hp * breveGammaMinus1 (Ideal.span {p}) hgood p ⋯ hp =
(canonicalSextic (Ideal.span {p}) hgood) ((Ideal.Quotient.mk (Ideal.span {p})) (-1))
have hχ1 : χ ≠ 1 := byP:Ideal Oinst✝:P.IsMaximalhgood:lambda ∉ Phchar:ringChar (O ⧸ P) ≠ 2p:OhP:P = Ideal.span {p}hp:p ≠ 0hprimary:lambda ^ 2 ∣ p - 1⊢ breveGamma1 P hgood p hP hp * breveGammaMinus1 P hgood p hP hp = (canonicalSextic P hgood) ((Ideal.Quotient.mk P) (-1))
simpa only [pow_one] using
(canonicalSextic_pow_ne_one (Ideal.span {p}) hgood hchar
(byp:Ohp:p ≠ 0hprimary:lambda ^ 2 ∣ p - 1inst✝:(Ideal.span {p}).IsMaximalhgood:lambda ∉ Ideal.span {p}hchar:ringChar (O ⧸ Ideal.span {p}) ≠ 2χ:MulChar (O ⧸ Ideal.span {p}) ℂ := canonicalSextic (Ideal.span {p}) hgoodψ:AddChar (EisensteinEmbedding.O ⧸ Ideal.span {p}) ℂ := eisTraceModChar ShortDraftTrace.breveE ConcreteBreveE.breveE_period_coordinates p hps:ℂ := ↑‖eisEmbedding p‖hψ:ψ.IsPrimitive⊢ 1 ≠ 0 decideAll goals completed! 🐙 : (1 : ℕ) ≠ 0) (byp:Ohp:p ≠ 0hprimary:lambda ^ 2 ∣ p - 1inst✝:(Ideal.span {p}).IsMaximalhgood:lambda ∉ Ideal.span {p}hchar:ringChar (O ⧸ Ideal.span {p}) ≠ 2χ:MulChar (O ⧸ Ideal.span {p}) ℂ := canonicalSextic (Ideal.span {p}) hgoodψ:AddChar (EisensteinEmbedding.O ⧸ Ideal.span {p}) ℂ := eisTraceModChar ShortDraftTrace.breveE ConcreteBreveE.breveE_period_coordinates p hps:ℂ := ↑‖eisEmbedding p‖hψ:ψ.IsPrimitive⊢ 1 < 6 decideAll goals completed! 🐙 : (1 : ℕ) < 6))p:Ohp:p ≠ 0hprimary:lambda ^ 2 ∣ p - 1inst✝:(Ideal.span {p}).IsMaximalhgood:lambda ∉ Ideal.span {p}hchar:ringChar (O ⧸ Ideal.span {p}) ≠ 2χ:MulChar (O ⧸ Ideal.span {p}) ℂ := canonicalSextic (Ideal.span {p}) hgoodψ:AddChar (EisensteinEmbedding.O ⧸ Ideal.span {p}) ℂ := eisTraceModChar ShortDraftTrace.breveE ConcreteBreveE.breveE_period_coordinates p hps:ℂ := ↑‖eisEmbedding p‖hψ:ψ.IsPrimitivehχ1:χ ≠ 1⊢ breveGamma1 (Ideal.span {p}) hgood p ⋯ hp * breveGammaMinus1 (Ideal.span {p}) hgood p ⋯ hp =
(canonicalSextic (Ideal.span {p}) hgood) ((Ideal.Quotient.mk (Ideal.span {p})) (-1))
have hχ6 : χ ^ 6 = 1 := canonicalSextic_pow_six (Ideal.span {p}) hgoodp:Ohp:p ≠ 0hprimary:lambda ^ 2 ∣ p - 1inst✝:(Ideal.span {p}).IsMaximalhgood:lambda ∉ Ideal.span {p}hchar:ringChar (O ⧸ Ideal.span {p}) ≠ 2χ:MulChar (O ⧸ Ideal.span {p}) ℂ := canonicalSextic (Ideal.span {p}) hgoodψ:AddChar (EisensteinEmbedding.O ⧸ Ideal.span {p}) ℂ := eisTraceModChar ShortDraftTrace.breveE ConcreteBreveE.breveE_period_coordinates p hps:ℂ := ↑‖eisEmbedding p‖hψ:ψ.IsPrimitivehχ1:χ ≠ 1hχ6:χ ^ 6 = 1⊢ breveGamma1 (Ideal.span {p}) hgood p ⋯ hp * breveGammaMinus1 (Ideal.span {p}) hgood p ⋯ hp =
(canonicalSextic (Ideal.span {p}) hgood) ((Ideal.Quotient.mk (Ideal.span {p})) (-1))
have horder : orderOf χ = 6 :=
canonicalSextic_order_six (Ideal.span {p}) hgood hcharp:Ohp:p ≠ 0hprimary:lambda ^ 2 ∣ p - 1inst✝:(Ideal.span {p}).IsMaximalhgood:lambda ∉ Ideal.span {p}hchar:ringChar (O ⧸ Ideal.span {p}) ≠ 2χ:MulChar (O ⧸ Ideal.span {p}) ℂ := canonicalSextic (Ideal.span {p}) hgoodψ:AddChar (EisensteinEmbedding.O ⧸ Ideal.span {p}) ℂ := eisTraceModChar ShortDraftTrace.breveE ConcreteBreveE.breveE_period_coordinates p hps:ℂ := ↑‖eisEmbedding p‖hψ:ψ.IsPrimitivehχ1:χ ≠ 1hχ6:χ ^ 6 = 1horder:orderOf χ = 6⊢ breveGamma1 (Ideal.span {p}) hgood p ⋯ hp * breveGammaMinus1 (Ideal.span {p}) hgood p ⋯ hp =
(canonicalSextic (Ideal.span {p}) hgood) ((Ideal.Quotient.mk (Ideal.span {p})) (-1))
have hχ5 : χ ^ 5 = χ⁻¹ := byP:Ideal Oinst✝:P.IsMaximalhgood:lambda ∉ Phchar:ringChar (O ⧸ P) ≠ 2p:OhP:P = Ideal.span {p}hp:p ≠ 0hprimary:lambda ^ 2 ∣ p - 1⊢ breveGamma1 P hgood p hP hp * breveGammaMinus1 P hgood p hP hp = (canonicalSextic P hgood) ((Ideal.Quotient.mk P) (-1))
apply (inv_eq_of_mul_eq_one_right ?_).symmp:Ohp:p ≠ 0hprimary:lambda ^ 2 ∣ p - 1inst✝:(Ideal.span {p}).IsMaximalhgood:lambda ∉ Ideal.span {p}hchar:ringChar (O ⧸ Ideal.span {p}) ≠ 2χ:MulChar (O ⧸ Ideal.span {p}) ℂ := canonicalSextic (Ideal.span {p}) hgoodψ:AddChar (EisensteinEmbedding.O ⧸ Ideal.span {p}) ℂ := eisTraceModChar ShortDraftTrace.breveE ConcreteBreveE.breveE_period_coordinates p hps:ℂ := ↑‖eisEmbedding p‖hψ:ψ.IsPrimitivehχ1:χ ≠ 1hχ6:χ ^ 6 = 1horder:orderOf χ = 6⊢ χ * χ ^ 5 = 1
calc
χ * χ ^ 5 = χ ^ 6 := byp:Ohp:p ≠ 0hprimary:lambda ^ 2 ∣ p - 1inst✝:(Ideal.span {p}).IsMaximalhgood:lambda ∉ Ideal.span {p}hchar:ringChar (O ⧸ Ideal.span {p}) ≠ 2χ:MulChar (O ⧸ Ideal.span {p}) ℂ := canonicalSextic (Ideal.span {p}) hgoodψ:AddChar (EisensteinEmbedding.O ⧸ Ideal.span {p}) ℂ := eisTraceModChar ShortDraftTrace.breveE ConcreteBreveE.breveE_period_coordinates p hps:ℂ := ↑‖eisEmbedding p‖hψ:ψ.IsPrimitivehχ1:χ ≠ 1hχ6:χ ^ 6 = 1horder:orderOf χ = 6⊢ χ * χ ^ 5 = χ ^ 6 groupAll goals completed! 🐙
_ = 1 := hχ6p:Ohp:p ≠ 0hprimary:lambda ^ 2 ∣ p - 1inst✝:(Ideal.span {p}).IsMaximalhgood:lambda ∉ Ideal.span {p}hchar:ringChar (O ⧸ Ideal.span {p}) ≠ 2χ:MulChar (O ⧸ Ideal.span {p}) ℂ := canonicalSextic (Ideal.span {p}) hgoodψ:AddChar (EisensteinEmbedding.O ⧸ Ideal.span {p}) ℂ := eisTraceModChar ShortDraftTrace.breveE ConcreteBreveE.breveE_period_coordinates p hps:ℂ := ↑‖eisEmbedding p‖hψ:ψ.IsPrimitivehχ1:χ ≠ 1hχ6:χ ^ 6 = 1horder:orderOf χ = 6hχ5:χ ^ 5 = χ⁻¹⊢ breveGamma1 (Ideal.span {p}) hgood p ⋯ hp * breveGammaMinus1 (Ideal.span {p}) hgood p ⋯ hp =
(canonicalSextic (Ideal.span {p}) hgood) ((Ideal.Quotient.mk (Ideal.span {p})) (-1))
have hprod := gaussSum_mul_gaussSum_pow_orderOf_sub_one hχ1 hψp:Ohp:p ≠ 0hprimary:lambda ^ 2 ∣ p - 1inst✝:(Ideal.span {p}).IsMaximalhgood:lambda ∉ Ideal.span {p}hchar:ringChar (O ⧸ Ideal.span {p}) ≠ 2χ:MulChar (O ⧸ Ideal.span {p}) ℂ := canonicalSextic (Ideal.span {p}) hgoodψ:AddChar (EisensteinEmbedding.O ⧸ Ideal.span {p}) ℂ := eisTraceModChar ShortDraftTrace.breveE ConcreteBreveE.breveE_period_coordinates p hps:ℂ := ↑‖eisEmbedding p‖hψ:ψ.IsPrimitivehχ1:χ ≠ 1hχ6:χ ^ 6 = 1horder:orderOf χ = 6hχ5:χ ^ 5 = χ⁻¹hprod:gaussSum χ ψ * gaussSum (χ ^ (orderOf χ - 1)) ψ = χ (-1) * ↑(Fintype.card (O ⧸ Ideal.span {p}))⊢ breveGamma1 (Ideal.span {p}) hgood p ⋯ hp * breveGammaMinus1 (Ideal.span {p}) hgood p ⋯ hp =
(canonicalSextic (Ideal.span {p}) hgood) ((Ideal.Quotient.mk (Ideal.span {p})) (-1))
rw [horder,p:Ohp:p ≠ 0hprimary:lambda ^ 2 ∣ p - 1inst✝:(Ideal.span {p}).IsMaximalhgood:lambda ∉ Ideal.span {p}hchar:ringChar (O ⧸ Ideal.span {p}) ≠ 2χ:MulChar (O ⧸ Ideal.span {p}) ℂ := canonicalSextic (Ideal.span {p}) hgoodψ:AddChar (EisensteinEmbedding.O ⧸ Ideal.span {p}) ℂ := eisTraceModChar ShortDraftTrace.breveE ConcreteBreveE.breveE_period_coordinates p hps:ℂ := ↑‖eisEmbedding p‖hψ:ψ.IsPrimitivehχ1:χ ≠ 1hχ6:χ ^ 6 = 1horder:orderOf χ = 6hχ5:χ ^ 5 = χ⁻¹hprod:gaussSum χ ψ * gaussSum (χ ^ (6 - 1)) ψ = χ (-1) * ↑(Fintype.card (O ⧸ Ideal.span {p}))⊢ breveGamma1 (Ideal.span {p}) hgood p ⋯ hp * breveGammaMinus1 (Ideal.span {p}) hgood p ⋯ hp =
(canonicalSextic (Ideal.span {p}) hgood) ((Ideal.Quotient.mk (Ideal.span {p})) (-1)) show 6 - 1 = 5 byP:Ideal Oinst✝:P.IsMaximalhgood:lambda ∉ Phchar:ringChar (O ⧸ P) ≠ 2p:OhP:P = Ideal.span {p}hp:p ≠ 0hprimary:lambda ^ 2 ∣ p - 1⊢ breveGamma1 P hgood p hP hp * breveGammaMinus1 P hgood p hP hp = (canonicalSextic P hgood) ((Ideal.Quotient.mk P) (-1)) decideAll goals completed! 🐙, hχ5p:Ohp:p ≠ 0hprimary:lambda ^ 2 ∣ p - 1inst✝:(Ideal.span {p}).IsMaximalhgood:lambda ∉ Ideal.span {p}hchar:ringChar (O ⧸ Ideal.span {p}) ≠ 2χ:MulChar (O ⧸ Ideal.span {p}) ℂ := canonicalSextic (Ideal.span {p}) hgoodψ:AddChar (EisensteinEmbedding.O ⧸ Ideal.span {p}) ℂ := eisTraceModChar ShortDraftTrace.breveE ConcreteBreveE.breveE_period_coordinates p hps:ℂ := ↑‖eisEmbedding p‖hψ:ψ.IsPrimitivehχ1:χ ≠ 1hχ6:χ ^ 6 = 1horder:orderOf χ = 6hχ5:χ ^ 5 = χ⁻¹hprod:gaussSum χ ψ * gaussSum χ⁻¹ ψ = χ (-1) * ↑(Fintype.card (O ⧸ Ideal.span {p}))⊢ breveGamma1 (Ideal.span {p}) hgood p ⋯ hp * breveGammaMinus1 (Ideal.span {p}) hgood p ⋯ hp =
(canonicalSextic (Ideal.span {p}) hgood) ((Ideal.Quotient.mk (Ideal.span {p})) (-1))] at hprodp:Ohp:p ≠ 0hprimary:lambda ^ 2 ∣ p - 1inst✝:(Ideal.span {p}).IsMaximalhgood:lambda ∉ Ideal.span {p}hchar:ringChar (O ⧸ Ideal.span {p}) ≠ 2χ:MulChar (O ⧸ Ideal.span {p}) ℂ := canonicalSextic (Ideal.span {p}) hgoodψ:AddChar (EisensteinEmbedding.O ⧸ Ideal.span {p}) ℂ := eisTraceModChar ShortDraftTrace.breveE ConcreteBreveE.breveE_period_coordinates p hps:ℂ := ↑‖eisEmbedding p‖hψ:ψ.IsPrimitivehχ1:χ ≠ 1hχ6:χ ^ 6 = 1horder:orderOf χ = 6hχ5:χ ^ 5 = χ⁻¹hprod:gaussSum χ ψ * gaussSum χ⁻¹ ψ = χ (-1) * ↑(Fintype.card (O ⧸ Ideal.span {p}))⊢ breveGamma1 (Ideal.span {p}) hgood p ⋯ hp * breveGammaMinus1 (Ideal.span {p}) hgood p ⋯ hp =
(canonicalSextic (Ideal.span {p}) hgood) ((Ideal.Quotient.mk (Ideal.span {p})) (-1))
have hs : s ^ 2 = (Fintype.card (O ⧸ Ideal.span {p}) : ℂ) := byP:Ideal Oinst✝:P.IsMaximalhgood:lambda ∉ Phchar:ringChar (O ⧸ P) ≠ 2p:OhP:P = Ideal.span {p}hp:p ≠ 0hprimary:lambda ^ 2 ∣ p - 1⊢ breveGamma1 P hgood p hP hp * breveGammaMinus1 P hgood p hP hp = (canonicalSextic P hgood) ((Ideal.Quotient.mk P) (-1))
have hnormO := primary_generator_mul_conj_eq_card
(Ideal.span {p}) hgood p rfl hprimaryp:Ohp:p ≠ 0hprimary:lambda ^ 2 ∣ p - 1inst✝:(Ideal.span {p}).IsMaximalhgood:lambda ∉ Ideal.span {p}hchar:ringChar (O ⧸ Ideal.span {p}) ≠ 2χ:MulChar (O ⧸ Ideal.span {p}) ℂ := canonicalSextic (Ideal.span {p}) hgoodψ:AddChar (EisensteinEmbedding.O ⧸ Ideal.span {p}) ℂ := eisTraceModChar ShortDraftTrace.breveE ConcreteBreveE.breveE_period_coordinates p hps:ℂ := ↑‖eisEmbedding p‖hψ:ψ.IsPrimitivehχ1:χ ≠ 1hχ6:χ ^ 6 = 1horder:orderOf χ = 6hχ5:χ ^ 5 = χ⁻¹hprod:gaussSum χ ψ * gaussSum χ⁻¹ ψ = χ (-1) * ↑(Fintype.card (O ⧸ Ideal.span {p}))hnormO:p * conjO p = ↑(Nat.card (O ⧸ Ideal.span {p}))⊢ s ^ 2 = ↑(Fintype.card (O ⧸ Ideal.span {p}))
have hnormC := congrArg eisEmbedding hnormOp:Ohp:p ≠ 0hprimary:lambda ^ 2 ∣ p - 1inst✝:(Ideal.span {p}).IsMaximalhgood:lambda ∉ Ideal.span {p}hchar:ringChar (O ⧸ Ideal.span {p}) ≠ 2χ:MulChar (O ⧸ Ideal.span {p}) ℂ := canonicalSextic (Ideal.span {p}) hgoodψ:AddChar (EisensteinEmbedding.O ⧸ Ideal.span {p}) ℂ := eisTraceModChar ShortDraftTrace.breveE ConcreteBreveE.breveE_period_coordinates p hps:ℂ := ↑‖eisEmbedding p‖hψ:ψ.IsPrimitivehχ1:χ ≠ 1hχ6:χ ^ 6 = 1horder:orderOf χ = 6hχ5:χ ^ 5 = χ⁻¹hprod:gaussSum χ ψ * gaussSum χ⁻¹ ψ = χ (-1) * ↑(Fintype.card (O ⧸ Ideal.span {p}))hnormO:p * conjO p = ↑(Nat.card (O ⧸ Ideal.span {p}))hnormC:eisEmbedding (p * conjO p) = eisEmbedding ↑(Nat.card (O ⧸ Ideal.span {p}))⊢ s ^ 2 = ↑(Fintype.card (O ⧸ Ideal.span {p}))
rw [map_mul,p:Ohp:p ≠ 0hprimary:lambda ^ 2 ∣ p - 1inst✝:(Ideal.span {p}).IsMaximalhgood:lambda ∉ Ideal.span {p}hchar:ringChar (O ⧸ Ideal.span {p}) ≠ 2χ:MulChar (O ⧸ Ideal.span {p}) ℂ := canonicalSextic (Ideal.span {p}) hgoodψ:AddChar (EisensteinEmbedding.O ⧸ Ideal.span {p}) ℂ := eisTraceModChar ShortDraftTrace.breveE ConcreteBreveE.breveE_period_coordinates p hps:ℂ := ↑‖eisEmbedding p‖hψ:ψ.IsPrimitivehχ1:χ ≠ 1hχ6:χ ^ 6 = 1horder:orderOf χ = 6hχ5:χ ^ 5 = χ⁻¹hprod:gaussSum χ ψ * gaussSum χ⁻¹ ψ = χ (-1) * ↑(Fintype.card (O ⧸ Ideal.span {p}))hnormO:p * conjO p = ↑(Nat.card (O ⧸ Ideal.span {p}))hnormC:eisEmbedding p * eisEmbedding (conjO p) = eisEmbedding ↑(Nat.card (O ⧸ Ideal.span {p}))⊢ s ^ 2 = ↑(Fintype.card (O ⧸ Ideal.span {p})) eisEmbedding_conjO,p:Ohp:p ≠ 0hprimary:lambda ^ 2 ∣ p - 1inst✝:(Ideal.span {p}).IsMaximalhgood:lambda ∉ Ideal.span {p}hchar:ringChar (O ⧸ Ideal.span {p}) ≠ 2χ:MulChar (O ⧸ Ideal.span {p}) ℂ := canonicalSextic (Ideal.span {p}) hgoodψ:AddChar (EisensteinEmbedding.O ⧸ Ideal.span {p}) ℂ := eisTraceModChar ShortDraftTrace.breveE ConcreteBreveE.breveE_period_coordinates p hps:ℂ := ↑‖eisEmbedding p‖hψ:ψ.IsPrimitivehχ1:χ ≠ 1hχ6:χ ^ 6 = 1horder:orderOf χ = 6hχ5:χ ^ 5 = χ⁻¹hprod:gaussSum χ ψ * gaussSum χ⁻¹ ψ = χ (-1) * ↑(Fintype.card (O ⧸ Ideal.span {p}))hnormO:p * conjO p = ↑(Nat.card (O ⧸ Ideal.span {p}))hnormC:eisEmbedding p * star (eisEmbedding p) = eisEmbedding ↑(Nat.card (O ⧸ Ideal.span {p}))⊢ s ^ 2 = ↑(Fintype.card (O ⧸ Ideal.span {p})) map_natCastp:Ohp:p ≠ 0hprimary:lambda ^ 2 ∣ p - 1inst✝:(Ideal.span {p}).IsMaximalhgood:lambda ∉ Ideal.span {p}hchar:ringChar (O ⧸ Ideal.span {p}) ≠ 2χ:MulChar (O ⧸ Ideal.span {p}) ℂ := canonicalSextic (Ideal.span {p}) hgoodψ:AddChar (EisensteinEmbedding.O ⧸ Ideal.span {p}) ℂ := eisTraceModChar ShortDraftTrace.breveE ConcreteBreveE.breveE_period_coordinates p hps:ℂ := ↑‖eisEmbedding p‖hψ:ψ.IsPrimitivehχ1:χ ≠ 1hχ6:χ ^ 6 = 1horder:orderOf χ = 6hχ5:χ ^ 5 = χ⁻¹hprod:gaussSum χ ψ * gaussSum χ⁻¹ ψ = χ (-1) * ↑(Fintype.card (O ⧸ Ideal.span {p}))hnormO:p * conjO p = ↑(Nat.card (O ⧸ Ideal.span {p}))hnormC:eisEmbedding p * star (eisEmbedding p) = ↑(Nat.card (O ⧸ Ideal.span {p}))⊢ s ^ 2 = ↑(Fintype.card (O ⧸ Ideal.span {p}))] at hnormCp:Ohp:p ≠ 0hprimary:lambda ^ 2 ∣ p - 1inst✝:(Ideal.span {p}).IsMaximalhgood:lambda ∉ Ideal.span {p}hchar:ringChar (O ⧸ Ideal.span {p}) ≠ 2χ:MulChar (O ⧸ Ideal.span {p}) ℂ := canonicalSextic (Ideal.span {p}) hgoodψ:AddChar (EisensteinEmbedding.O ⧸ Ideal.span {p}) ℂ := eisTraceModChar ShortDraftTrace.breveE ConcreteBreveE.breveE_period_coordinates p hps:ℂ := ↑‖eisEmbedding p‖hψ:ψ.IsPrimitivehχ1:χ ≠ 1hχ6:χ ^ 6 = 1horder:orderOf χ = 6hχ5:χ ^ 5 = χ⁻¹hprod:gaussSum χ ψ * gaussSum χ⁻¹ ψ = χ (-1) * ↑(Fintype.card (O ⧸ Ideal.span {p}))hnormO:p * conjO p = ↑(Nat.card (O ⧸ Ideal.span {p}))hnormC:eisEmbedding p * star (eisEmbedding p) = ↑(Nat.card (O ⧸ Ideal.span {p}))⊢ s ^ 2 = ↑(Fintype.card (O ⧸ Ideal.span {p}))
simpa only [s, ← starRingEnd_apply, Complex.mul_conj',
Nat.card_eq_fintype_card] using hnormCp:Ohp:p ≠ 0hprimary:lambda ^ 2 ∣ p - 1inst✝:(Ideal.span {p}).IsMaximalhgood:lambda ∉ Ideal.span {p}hchar:ringChar (O ⧸ Ideal.span {p}) ≠ 2χ:MulChar (O ⧸ Ideal.span {p}) ℂ := canonicalSextic (Ideal.span {p}) hgoodψ:AddChar (EisensteinEmbedding.O ⧸ Ideal.span {p}) ℂ := eisTraceModChar ShortDraftTrace.breveE ConcreteBreveE.breveE_period_coordinates p hps:ℂ := ↑‖eisEmbedding p‖hψ:ψ.IsPrimitivehχ1:χ ≠ 1hχ6:χ ^ 6 = 1horder:orderOf χ = 6hχ5:χ ^ 5 = χ⁻¹hprod:gaussSum χ ψ * gaussSum χ⁻¹ ψ = χ (-1) * ↑(Fintype.card (O ⧸ Ideal.span {p}))hs:s ^ 2 = ↑(Fintype.card (O ⧸ Ideal.span {p}))⊢ breveGamma1 (Ideal.span {p}) hgood p ⋯ hp * breveGammaMinus1 (Ideal.span {p}) hgood p ⋯ hp =
(canonicalSextic (Ideal.span {p}) hgood) ((Ideal.Quotient.mk (Ideal.span {p})) (-1))
have hs0 : s ≠ 0 := byP:Ideal Oinst✝:P.IsMaximalhgood:lambda ∉ Phchar:ringChar (O ⧸ P) ≠ 2p:OhP:P = Ideal.span {p}hp:p ≠ 0hprimary:lambda ^ 2 ∣ p - 1⊢ breveGamma1 P hgood p hP hp * breveGammaMinus1 P hgood p hP hp = (canonicalSextic P hgood) ((Ideal.Quotient.mk P) (-1))
dsimp [s]p:Ohp:p ≠ 0hprimary:lambda ^ 2 ∣ p - 1inst✝:(Ideal.span {p}).IsMaximalhgood:lambda ∉ Ideal.span {p}hchar:ringChar (O ⧸ Ideal.span {p}) ≠ 2χ:MulChar (O ⧸ Ideal.span {p}) ℂ := canonicalSextic (Ideal.span {p}) hgoodψ:AddChar (EisensteinEmbedding.O ⧸ Ideal.span {p}) ℂ := eisTraceModChar ShortDraftTrace.breveE ConcreteBreveE.breveE_period_coordinates p hps:ℂ := ↑‖eisEmbedding p‖hψ:ψ.IsPrimitivehχ1:χ ≠ 1hχ6:χ ^ 6 = 1horder:orderOf χ = 6hχ5:χ ^ 5 = χ⁻¹hprod:gaussSum χ ψ * gaussSum χ⁻¹ ψ = χ (-1) * ↑(Fintype.card (O ⧸ Ideal.span {p}))hs:s ^ 2 = ↑(Fintype.card (O ⧸ Ideal.span {p}))⊢ ¬↑‖eisEmbedding p‖ = 0
exact_mod_cast (norm_ne_zero_iff.mpr (eisEmbedding_ne_zero hp))p:Ohp:p ≠ 0hprimary:lambda ^ 2 ∣ p - 1inst✝:(Ideal.span {p}).IsMaximalhgood:lambda ∉ Ideal.span {p}hchar:ringChar (O ⧸ Ideal.span {p}) ≠ 2χ:MulChar (O ⧸ Ideal.span {p}) ℂ := canonicalSextic (Ideal.span {p}) hgoodψ:AddChar (EisensteinEmbedding.O ⧸ Ideal.span {p}) ℂ := eisTraceModChar ShortDraftTrace.breveE ConcreteBreveE.breveE_period_coordinates p hps:ℂ := ↑‖eisEmbedding p‖hψ:ψ.IsPrimitivehχ1:χ ≠ 1hχ6:χ ^ 6 = 1horder:orderOf χ = 6hχ5:χ ^ 5 = χ⁻¹hprod:gaussSum χ ψ * gaussSum χ⁻¹ ψ = χ (-1) * ↑(Fintype.card (O ⧸ Ideal.span {p}))hs:s ^ 2 = ↑(Fintype.card (O ⧸ Ideal.span {p}))hs0:s ≠ 0⊢ breveGamma1 (Ideal.span {p}) hgood p ⋯ hp * breveGammaMinus1 (Ideal.span {p}) hgood p ⋯ hp =
(canonicalSextic (Ideal.span {p}) hgood) ((Ideal.Quotient.mk (Ideal.span {p})) (-1))
change (gaussSum χ ψ / s) * (gaussSum χ⁻¹ ψ / s) = χ (-1)p:Ohp:p ≠ 0hprimary:lambda ^ 2 ∣ p - 1inst✝:(Ideal.span {p}).IsMaximalhgood:lambda ∉ Ideal.span {p}hchar:ringChar (O ⧸ Ideal.span {p}) ≠ 2χ:MulChar (O ⧸ Ideal.span {p}) ℂ := canonicalSextic (Ideal.span {p}) hgoodψ:AddChar (EisensteinEmbedding.O ⧸ Ideal.span {p}) ℂ := eisTraceModChar ShortDraftTrace.breveE ConcreteBreveE.breveE_period_coordinates p hps:ℂ := ↑‖eisEmbedding p‖hψ:ψ.IsPrimitivehχ1:χ ≠ 1hχ6:χ ^ 6 = 1horder:orderOf χ = 6hχ5:χ ^ 5 = χ⁻¹hprod:gaussSum χ ψ * gaussSum χ⁻¹ ψ = χ (-1) * ↑(Fintype.card (O ⧸ Ideal.span {p}))hs:s ^ 2 = ↑(Fintype.card (O ⧸ Ideal.span {p}))hs0:s ≠ 0⊢ gaussSum χ ψ / s * (gaussSum χ⁻¹ ψ / s) = χ (-1)
field_simpp:Ohp:p ≠ 0hprimary:lambda ^ 2 ∣ p - 1inst✝:(Ideal.span {p}).IsMaximalhgood:lambda ∉ Ideal.span {p}hchar:ringChar (O ⧸ Ideal.span {p}) ≠ 2χ:MulChar (O ⧸ Ideal.span {p}) ℂ := canonicalSextic (Ideal.span {p}) hgoodψ:AddChar (EisensteinEmbedding.O ⧸ Ideal.span {p}) ℂ := eisTraceModChar ShortDraftTrace.breveE ConcreteBreveE.breveE_period_coordinates p hps:ℂ := ↑‖eisEmbedding p‖hψ:ψ.IsPrimitivehχ1:χ ≠ 1hχ6:χ ^ 6 = 1horder:orderOf χ = 6hχ5:χ ^ 5 = χ⁻¹hprod:gaussSum χ ψ * gaussSum χ⁻¹ ψ = χ (-1) * ↑(Fintype.card (O ⧸ Ideal.span {p}))hs:s ^ 2 = ↑(Fintype.card (O ⧸ Ideal.span {p}))hs0:s ≠ 0⊢ gaussSum χ ψ * gaussSum χ⁻¹ ψ = s ^ 2 * χ (-1)
rw [hsp:Ohp:p ≠ 0hprimary:lambda ^ 2 ∣ p - 1inst✝:(Ideal.span {p}).IsMaximalhgood:lambda ∉ Ideal.span {p}hchar:ringChar (O ⧸ Ideal.span {p}) ≠ 2χ:MulChar (O ⧸ Ideal.span {p}) ℂ := canonicalSextic (Ideal.span {p}) hgoodψ:AddChar (EisensteinEmbedding.O ⧸ Ideal.span {p}) ℂ := eisTraceModChar ShortDraftTrace.breveE ConcreteBreveE.breveE_period_coordinates p hps:ℂ := ↑‖eisEmbedding p‖hψ:ψ.IsPrimitivehχ1:χ ≠ 1hχ6:χ ^ 6 = 1horder:orderOf χ = 6hχ5:χ ^ 5 = χ⁻¹hprod:gaussSum χ ψ * gaussSum χ⁻¹ ψ = χ (-1) * ↑(Fintype.card (O ⧸ Ideal.span {p}))hs:s ^ 2 = ↑(Fintype.card (O ⧸ Ideal.span {p}))hs0:s ≠ 0⊢ gaussSum χ ψ * gaussSum χ⁻¹ ψ = ↑(Fintype.card (O ⧸ Ideal.span {p})) * χ (-1)]p:Ohp:p ≠ 0hprimary:lambda ^ 2 ∣ p - 1inst✝:(Ideal.span {p}).IsMaximalhgood:lambda ∉ Ideal.span {p}hchar:ringChar (O ⧸ Ideal.span {p}) ≠ 2χ:MulChar (O ⧸ Ideal.span {p}) ℂ := canonicalSextic (Ideal.span {p}) hgoodψ:AddChar (EisensteinEmbedding.O ⧸ Ideal.span {p}) ℂ := eisTraceModChar ShortDraftTrace.breveE ConcreteBreveE.breveE_period_coordinates p hps:ℂ := ↑‖eisEmbedding p‖hψ:ψ.IsPrimitivehχ1:χ ≠ 1hχ6:χ ^ 6 = 1horder:orderOf χ = 6hχ5:χ ^ 5 = χ⁻¹hprod:gaussSum χ ψ * gaussSum χ⁻¹ ψ = χ (-1) * ↑(Fintype.card (O ⧸ Ideal.span {p}))hs:s ^ 2 = ↑(Fintype.card (O ⧸ Ideal.span {p}))hs0:s ≠ 0⊢ gaussSum χ ψ * gaussSum χ⁻¹ ψ = ↑(Fintype.card (O ⧸ Ideal.span {p})) * χ (-1)
simpa only [mul_comm] using hprodAll goals completed! 🐙end ActualEisensteinCubicendend OAI