Skip to content
import OAI.NumberTheory.DirichletL.Hecke.MobiusEulerCorrectionnamespace OAInoncomputable sectionopen scoped BigOperatorsopen MulChar AddCharopen scoped BigOperatorsopen Filter Asymptotics MeasureTheoryopen scoped Topologyopen MeasureTheory Realopen scoped FourierTransform SchwartzMapopen Finset Complexopen scoped Classicalopen scoped Classicalopen Filter Real Asymptoticsopen ActualEisensteinCubicopen Filteropen ActualEisensteinCubic RationalPrimeExtraction ShortDraftLatticeCountopen ActualEisensteinCubic ShortDraftLatticeCountopen Filteropen scoped Topologyopen EisensteinEmbedding ConcreteTraceCRT ActualEisensteinCubicopen MulChar AddCharopen Filter Asymptoticsopen scoped LSeries.notation ArithmeticFunction.Moebiusopen Filteropen MulChar AddCharopen MulChar AddCharopen scoped LSeries.notation ArithmeticFunction.Moebiusopen Filter Asymptotics MeasureTheoryopen scoped Topologyopen Filter Asymptoticsopen Ideal NumberField RingOfIntegers UniqueFactorizationMonoidopen Ideal NumberField RingOfIntegers UniqueFactorizationMonoidopen Ideal NumberField RingOfIntegers UniqueFactorizationMonoidopen Ideal NumberField RingOfIntegers UniqueFactorizationMonoidopen Ideal NumberField RingOfIntegers UniqueFactorizationMonoidopen Filter Asymptoticsopen Filter Asymptotics MeasureTheoryopen scoped Topologyopen Filter Asymptotics Ideal NumberFieldopen Filteropen Filter Asymptotics MeasureTheoryopen scoped Topologyopen Filter Asymptotics MeasureTheoryopen scoped Topologyopen Filter Asymptotics MeasureTheoryopen scoped Topologyopen MeasureTheory Realopen scoped ContDiff FourierTransform SchwartzMapopen scoped BigOperators Classicalopen scoped BigOperators Classicalopen scoped BigOperators Classicalopen scoped BigOperators Classical SchwartzMap ContDiffopen scoped BigOperators Classical SchwartzMap ContDiffopen scoped BigOperators Classicalopen scoped BigOperators Classical SchwartzMap ContDiffopen scoped BigOperators Classicalopen scoped BigOperators Classical SchwartzMap ContDiffopen scoped BigOperators Classical SchwartzMap ContDiffopen scoped BigOperators Classical SchwartzMap ContDiffopen scoped BigOperators Classicalopen scoped BigOperators Classical SchwartzMap ContDiffopen MeasureTheory Setopen scoped BigOperatorsopen scoped BigOperators Classicalopen scoped BigOperators Classicalopen ActualEisensteinCubic UniqueFactorizationMonoidopen scoped BigOperatorsopen scoped BigOperatorsopen scoped BigOperators Classical SchwartzMapopen scoped BigOperators Classicalopen scoped BigOperators Classical ContDiff Topologynamespace CanonicalRowCompletionopen ActualEisensteinCubicopen ConcretePrimeRowBridge hiding Oopen ShortDraftHeckeBridgeopen CanonicalQuadraticSieve hiding Oopen SecondPassArithmetic hiding Oopen SixthPowerAverage CompactMellinBridge InitialMeanSquaretheorem corrected_weighted_mellin_identity {q : โ} [NeZero q]
(ฯ : DirichletCharacter โ q) (S : Finset (Ideal ActualEisensteinCubic.O))
(hS : โPโS,Prime P) (W : โโโ) (hW : ContDiff โ โ W)
(hs : โx,xโค1 โจ 2โคxโW x=0) (s : โ) (hRe : 2<s.re) :
(ฯ.LFunction s*(baseChangeChar ฯ).LFunction s)*
((finiteEulerFactor ฯ S s*SmoothMobiusCorrection.eulerCorrection ฯ S s)*
mellin (fun Z : โ=>weightedCompactSum ฯ S W Zโปยน) (-s))=
mellin W s := q:โinstโ:NeZero qฯ:DirichletCharacter โ qS:Finset (Ideal ActualEisensteinCubic.O)hS:โ P โ S, Prime PW:โ โ โhW:ContDiff โ โ Whs:โ (x : โ), x โค 1 โจ 2 โค x โ W x = 0s:โhRe:2 < s.reโข DirichletCharacter.LFunction ฯ s * DirichletCharacter.LFunction (baseChangeChar ฯ) s *
(finiteEulerFactor ฯ S s * SmoothMobiusCorrection.eulerCorrection ฯ S s *
mellin (fun Z => weightedCompactSum ฯ S W Zโปยน) (-s)) =
mellin W s
q:โinstโ:NeZero qฯ:DirichletCharacter โ qS:Finset (Ideal ActualEisensteinCubic.O)hS:โ P โ S, Prime PW:โ โ โhW:ContDiff โ โ Whs:โ (x : โ), x โค 1 โจ 2 โค x โ W x = 0s:โhRe:2 < s.reโข DirichletCharacter.LFunction ฯ s * DirichletCharacter.LFunction (baseChangeChar ฯ) s *
(finiteEulerFactor ฯ S s * SmoothMobiusCorrection.eulerCorrection ฯ S s * (mellin W s * L (weightedCoeff ฯ S) s)) =
mellin W s
have hc:=SmoothMobiusCorrection.full_LSeries_correction ฯ S hS s hReq:โinstโ:NeZero qฯ:DirichletCharacter โ qS:Finset (Ideal ActualEisensteinCubic.O)hS:โ P โ S, Prime PW:โ โ โhW:ContDiff โ โ Whs:โ (x : โ), x โค 1 โจ 2 โค x โ W x = 0s:โhRe:2 < s.rehc:L (normFiberCoeff (baseChangeWeight ฯ)) s =
finiteEulerFactor ฯ S s * SmoothMobiusCorrection.eulerCorrection ฯ S s * L (weightedCoeff ฯ S) sโข DirichletCharacter.LFunction ฯ s * DirichletCharacter.LFunction (baseChangeChar ฯ) s *
(finiteEulerFactor ฯ S s * SmoothMobiusCorrection.eulerCorrection ฯ S s * (mellin W s * L (weightedCoeff ฯ S) s)) =
mellin W s
have hp:=normFiber_LSeries_eq_pair_inverse ฯ (baseChangeChar ฯ) (baseChangeWeight ฯ)
(normFiberCoeff_baseChange_eq_pairInverseCoeff ฯ) sq:โinstโ:NeZero qฯ:DirichletCharacter โ qS:Finset (Ideal ActualEisensteinCubic.O)hS:โ P โ S, Prime PW:โ โ โhW:ContDiff โ โ Whs:โ (x : โ), x โค 1 โจ 2 โค x โ W x = 0s:โhRe:2 < s.rehc:L (normFiberCoeff (baseChangeWeight ฯ)) s =
finiteEulerFactor ฯ S s * SmoothMobiusCorrection.eulerCorrection ฯ S s * L (weightedCoeff ฯ S) shp:L (normFiberCoeff (baseChangeWeight ฯ)) s = L (pairInverseCoeff ฯ (baseChangeChar ฯ)) sโข DirichletCharacter.LFunction ฯ s * DirichletCharacter.LFunction (baseChangeChar ฯ) s *
(finiteEulerFactor ฯ S s * SmoothMobiusCorrection.eulerCorrection ฯ S s * (mellin W s * L (weightedCoeff ฯ S) s)) =
mellin W s
have he:=pair_inverse_euler_identity ฯ (baseChangeChar ฯ) s (byq:โinstโ:NeZero qฯ:DirichletCharacter โ qS:Finset (Ideal ActualEisensteinCubic.O)hS:โ P โ S, Prime PW:โ โ โhW:ContDiff โ โ Whs:โ (x : โ), x โค 1 โจ 2 โค x โ W x = 0s:โhRe:2 < s.rehc:L (normFiberCoeff (baseChangeWeight ฯ)) s =
finiteEulerFactor ฯ S s * SmoothMobiusCorrection.eulerCorrection ฯ S s * L (weightedCoeff ฯ S) shp:L (normFiberCoeff (baseChangeWeight ฯ)) s = L (pairInverseCoeff ฯ (baseChangeChar ฯ)) sโข 1 < s.re linarithAll goals completed! ๐ : 1<s.re)q:โinstโ:NeZero qฯ:DirichletCharacter โ qS:Finset (Ideal ActualEisensteinCubic.O)hS:โ P โ S, Prime PW:โ โ โhW:ContDiff โ โ Whs:โ (x : โ), x โค 1 โจ 2 โค x โ W x = 0s:โhRe:2 < s.rehc:L (normFiberCoeff (baseChangeWeight ฯ)) s =
finiteEulerFactor ฯ S s * SmoothMobiusCorrection.eulerCorrection ฯ S s * L (weightedCoeff ฯ S) shp:L (normFiberCoeff (baseChangeWeight ฯ)) s = L (pairInverseCoeff ฯ (baseChangeChar ฯ)) she:DirichletCharacter.LFunction ฯ s * DirichletCharacter.LFunction (baseChangeChar ฯ) s *
L (pairInverseCoeff ฯ (baseChangeChar ฯ)) s =
1โข DirichletCharacter.LFunction ฯ s * DirichletCharacter.LFunction (baseChangeChar ฯ) s *
(finiteEulerFactor ฯ S s * SmoothMobiusCorrection.eulerCorrection ฯ S s * (mellin W s * L (weightedCoeff ฯ S) s)) =
mellin W s
rw [โhp,q:โinstโ:NeZero qฯ:DirichletCharacter โ qS:Finset (Ideal ActualEisensteinCubic.O)hS:โ P โ S, Prime PW:โ โ โhW:ContDiff โ โ Whs:โ (x : โ), x โค 1 โจ 2 โค x โ W x = 0s:โhRe:2 < s.rehc:L (normFiberCoeff (baseChangeWeight ฯ)) s =
finiteEulerFactor ฯ S s * SmoothMobiusCorrection.eulerCorrection ฯ S s * L (weightedCoeff ฯ S) shp:L (normFiberCoeff (baseChangeWeight ฯ)) s = L (pairInverseCoeff ฯ (baseChangeChar ฯ)) she:DirichletCharacter.LFunction ฯ s * DirichletCharacter.LFunction (baseChangeChar ฯ) s *
L (normFiberCoeff (baseChangeWeight ฯ)) s =
1โข DirichletCharacter.LFunction ฯ s * DirichletCharacter.LFunction (baseChangeChar ฯ) s *
(finiteEulerFactor ฯ S s * SmoothMobiusCorrection.eulerCorrection ฯ S s * (mellin W s * L (weightedCoeff ฯ S) s)) =
mellin W shcq:โinstโ:NeZero qฯ:DirichletCharacter โ qS:Finset (Ideal ActualEisensteinCubic.O)hS:โ P โ S, Prime PW:โ โ โhW:ContDiff โ โ Whs:โ (x : โ), x โค 1 โจ 2 โค x โ W x = 0s:โhRe:2 < s.rehc:L (normFiberCoeff (baseChangeWeight ฯ)) s =
finiteEulerFactor ฯ S s * SmoothMobiusCorrection.eulerCorrection ฯ S s * L (weightedCoeff ฯ S) shp:L (normFiberCoeff (baseChangeWeight ฯ)) s = L (pairInverseCoeff ฯ (baseChangeChar ฯ)) she:DirichletCharacter.LFunction ฯ s * DirichletCharacter.LFunction (baseChangeChar ฯ) s *
(finiteEulerFactor ฯ S s * SmoothMobiusCorrection.eulerCorrection ฯ S s * L (weightedCoeff ฯ S) s) =
1โข DirichletCharacter.LFunction ฯ s * DirichletCharacter.LFunction (baseChangeChar ฯ) s *
(finiteEulerFactor ฯ S s * SmoothMobiusCorrection.eulerCorrection ฯ S s * (mellin W s * L (weightedCoeff ฯ S) s)) =
mellin W s] at heq:โinstโ:NeZero qฯ:DirichletCharacter โ qS:Finset (Ideal ActualEisensteinCubic.O)hS:โ P โ S, Prime PW:โ โ โhW:ContDiff โ โ Whs:โ (x : โ), x โค 1 โจ 2 โค x โ W x = 0s:โhRe:2 < s.rehc:L (normFiberCoeff (baseChangeWeight ฯ)) s =
finiteEulerFactor ฯ S s * SmoothMobiusCorrection.eulerCorrection ฯ S s * L (weightedCoeff ฯ S) shp:L (normFiberCoeff (baseChangeWeight ฯ)) s = L (pairInverseCoeff ฯ (baseChangeChar ฯ)) she:DirichletCharacter.LFunction ฯ s * DirichletCharacter.LFunction (baseChangeChar ฯ) s *
(finiteEulerFactor ฯ S s * SmoothMobiusCorrection.eulerCorrection ฯ S s * L (weightedCoeff ฯ S) s) =
1โข DirichletCharacter.LFunction ฯ s * DirichletCharacter.LFunction (baseChangeChar ฯ) s *
(finiteEulerFactor ฯ S s * SmoothMobiusCorrection.eulerCorrection ฯ S s * (mellin W s * L (weightedCoeff ฯ S) s)) =
mellin W s
calc
_=((ฯ.LFunction s*(baseChangeChar ฯ).LFunction s)*
((finiteEulerFactor ฯ S s*SmoothMobiusCorrection.eulerCorrection ฯ S s)*
LSeries (weightedCoeff ฯ S) s))*mellin W s := byq:โinstโ:NeZero qฯ:DirichletCharacter โ qS:Finset (Ideal ActualEisensteinCubic.O)hS:โ P โ S, Prime PW:โ โ โhW:ContDiff โ โ Whs:โ (x : โ), x โค 1 โจ 2 โค x โ W x = 0s:โhRe:2 < s.rehc:L (normFiberCoeff (baseChangeWeight ฯ)) s =
finiteEulerFactor ฯ S s * SmoothMobiusCorrection.eulerCorrection ฯ S s * L (weightedCoeff ฯ S) shp:L (normFiberCoeff (baseChangeWeight ฯ)) s = L (pairInverseCoeff ฯ (baseChangeChar ฯ)) she:DirichletCharacter.LFunction ฯ s * DirichletCharacter.LFunction (baseChangeChar ฯ) s *
(finiteEulerFactor ฯ S s * SmoothMobiusCorrection.eulerCorrection ฯ S s * L (weightedCoeff ฯ S) s) =
1โข DirichletCharacter.LFunction ฯ s * DirichletCharacter.LFunction (baseChangeChar ฯ) s *
(finiteEulerFactor ฯ S s * SmoothMobiusCorrection.eulerCorrection ฯ S s * (mellin W s * L (weightedCoeff ฯ S) s)) =
DirichletCharacter.LFunction ฯ s * DirichletCharacter.LFunction (baseChangeChar ฯ) s *
(finiteEulerFactor ฯ S s * SmoothMobiusCorrection.eulerCorrection ฯ S s * L (weightedCoeff ฯ S) s) *
mellin W s ringAll goals completed! ๐
_=mellin W s := byq:โinstโ:NeZero qฯ:DirichletCharacter โ qS:Finset (Ideal ActualEisensteinCubic.O)hS:โ P โ S, Prime PW:โ โ โhW:ContDiff โ โ Whs:โ (x : โ), x โค 1 โจ 2 โค x โ W x = 0s:โhRe:2 < s.rehc:L (normFiberCoeff (baseChangeWeight ฯ)) s =
finiteEulerFactor ฯ S s * SmoothMobiusCorrection.eulerCorrection ฯ S s * L (weightedCoeff ฯ S) shp:L (normFiberCoeff (baseChangeWeight ฯ)) s = L (pairInverseCoeff ฯ (baseChangeChar ฯ)) she:DirichletCharacter.LFunction ฯ s * DirichletCharacter.LFunction (baseChangeChar ฯ) s *
(finiteEulerFactor ฯ S s * SmoothMobiusCorrection.eulerCorrection ฯ S s * L (weightedCoeff ฯ S) s) =
1โข DirichletCharacter.LFunction ฯ s * DirichletCharacter.LFunction (baseChangeChar ฯ) s *
(finiteEulerFactor ฯ S s * SmoothMobiusCorrection.eulerCorrection ฯ S s * L (weightedCoeff ฯ S) s) *
mellin W s =
mellin W s rw [he,q:โinstโ:NeZero qฯ:DirichletCharacter โ qS:Finset (Ideal ActualEisensteinCubic.O)hS:โ P โ S, Prime PW:โ โ โhW:ContDiff โ โ Whs:โ (x : โ), x โค 1 โจ 2 โค x โ W x = 0s:โhRe:2 < s.rehc:L (normFiberCoeff (baseChangeWeight ฯ)) s =
finiteEulerFactor ฯ S s * SmoothMobiusCorrection.eulerCorrection ฯ S s * L (weightedCoeff ฯ S) shp:L (normFiberCoeff (baseChangeWeight ฯ)) s = L (pairInverseCoeff ฯ (baseChangeChar ฯ)) she:DirichletCharacter.LFunction ฯ s * DirichletCharacter.LFunction (baseChangeChar ฯ) s *
(finiteEulerFactor ฯ S s * SmoothMobiusCorrection.eulerCorrection ฯ S s * L (weightedCoeff ฯ S) s) =
1โข 1 * mellin W s = mellin W sone_mulq:โinstโ:NeZero qฯ:DirichletCharacter โ qS:Finset (Ideal ActualEisensteinCubic.O)hS:โ P โ S, Prime PW:โ โ โhW:ContDiff โ โ Whs:โ (x : โ), x โค 1 โจ 2 โค x โ W x = 0s:โhRe:2 < s.rehc:L (normFiberCoeff (baseChangeWeight ฯ)) s =
finiteEulerFactor ฯ S s * SmoothMobiusCorrection.eulerCorrection ฯ S s * L (weightedCoeff ฯ S) shp:L (normFiberCoeff (baseChangeWeight ฯ)) s = L (pairInverseCoeff ฯ (baseChangeChar ฯ)) she:DirichletCharacter.LFunction ฯ s * DirichletCharacter.LFunction (baseChangeChar ฯ) s *
(finiteEulerFactor ฯ S s * SmoothMobiusCorrection.eulerCorrection ฯ S s * L (weightedCoeff ฯ S) s) =
1โข mellin W s = mellin W s]All goals completed! ๐end CanonicalRowCompletionopen scoped BigOperators Classicalnamespace QuadraticAllOddCRTsectionopen ActualEisensteinCubicopen QuadraticGaussRay hiding Oopen ActualEisensteinCoordinates hiding O omegaopen CanonicalQuadraticSieve hiding Olocal instance : (Ideal.span {lambda} : Ideal ActualEisensteinCubic.O).IsMaximal:=lambdaIdeal_maximallemma lambda_odd : ringChar (ActualEisensteinCubic.OโงธIdeal.span {lambda})โ 2:=
ActualEisensteinSieve.lambda_residue_oddlemma lambda_residue : residue lambda=((3:ZMod 4),(1:ZMod 4)) := byโข residue lambda = (3, 1)
have h : lambda=eval (-1) 1 := by
change (ActualEisensteinCubic.omega-1:ActualEisensteinCubic.O)=((-1:โค):ActualEisensteinCubic.O)+((1:โค):ActualEisensteinCubic.O)*ActualEisensteinCubic.omegaโข omega - 1 = โ(-1) + โ1 * omega
push_castโข omega - 1 = -1 + 1 * omega
ringh:lambda = eval (-1) 1โข residue lambda = (3, 1)
rw [h,h:lambda = eval (-1) 1โข residue (eval (-1) 1) = (3, 1)residue_evalh:lambda = eval (-1) 1โข (โ(-1), โ1) = (3, 1)]h:lambda = eval (-1) 1โข (โ(-1), โ1) = (3, 1)
decideAll goals completed! ๐lemma lambda_quadratic_ray_ne_zero : quadraticRayValue (residue lambda)โ 0 := byโข quadraticRayValue (residue lambda) โ 0
apply quadraticRayValue_ne_zero_of_oddโข EisensteinEPrimaryPhase.odd (residue lambda)
rw [lambda_residueโข EisensteinEPrimaryPhase.odd (3, 1)]โข EisensteinEPrimaryPhase.odd (3, 1)
decideAll goals completed! ๐lemma character_lambda_primary (p : ActualEisensteinCubic.O) (hp : lambda^2โฃp-1) :
character (Ideal.span {lambda}) (Ideal.Quotient.mk (Ideal.span {lambda}) p)=1 := byp:ActualEisensteinCubic.Ohp:lambda ^ 2 โฃ p - 1โข (character (span {lambda})) ((Ideal.Quotient.mk (span {lambda})) p) = 1
have hm : Ideal.Quotient.mk (Ideal.span {lambda}) p=Ideal.Quotient.mk (Ideal.span {lambda}) (1:ActualEisensteinCubic.O) :=
Ideal.Quotient.eq.mpr (Ideal.mem_span_singleton.mpr
((dvd_pow_self lambda (byp:ActualEisensteinCubic.Ohp:lambda ^ 2 โฃ p - 1โข 2 โ 0 decideAll goals completed! ๐ : (2:โ)โ 0)).trans hp))p:ActualEisensteinCubic.Ohp:lambda ^ 2 โฃ p - 1hm:(Ideal.Quotient.mk (span {lambda})) p = (Ideal.Quotient.mk (span {lambda})) 1โข (character (span {lambda})) ((Ideal.Quotient.mk (span {lambda})) p) = 1
rw [hm,p:ActualEisensteinCubic.Ohp:lambda ^ 2 โฃ p - 1hm:(Ideal.Quotient.mk (span {lambda})) p = (Ideal.Quotient.mk (span {lambda})) 1โข (character (span {lambda})) ((Ideal.Quotient.mk (span {lambda})) 1) = 1map_one,p:ActualEisensteinCubic.Ohp:lambda ^ 2 โฃ p - 1hm:(Ideal.Quotient.mk (span {lambda})) p = (Ideal.Quotient.mk (span {lambda})) 1โข (character (span {lambda})) 1 = 1map_onep:ActualEisensteinCubic.Ohp:lambda ^ 2 โฃ p - 1hm:(Ideal.Quotient.mk (span {lambda})) p = (Ideal.Quotient.mk (span {lambda})) 1โข 1 = 1]All goals completed! ๐def lambdaQuadraticRay (r : EisensteinEPrimaryPhase.Coord) : โ:=
quadraticRayValue (EisensteinEPrimaryPhase.mul (residue lambda) r)/
(quadraticRayValue (residue lambda)*quadraticRayValue r)theorem character_lambda_eq_ray (p : ActualEisensteinCubic.O) (hp : pโ 0) [(Ideal.span {p}).IsMaximal]
(hg : lambdaโIdeal.span {p}) (hc : ringChar (ActualEisensteinCubic.OโงธIdeal.span {p})โ 2)
(hprimary : lambda^2โฃp-1) :
character (Ideal.span {p}) (Ideal.Quotient.mk (Ideal.span {p}) lambda)=
lambdaQuadraticRay (residue p) := byp:ActualEisensteinCubic.Ohp:p โ 0instโ:(span {p}).IsMaximalhg:lambda โ span {p}hc:ringChar (ActualEisensteinCubic.O โงธ span {p}) โ 2hprimary:lambda ^ 2 โฃ p - 1โข (character (span {p})) ((Ideal.Quotient.mk (span {p})) lambda) = lambdaQuadraticRay (residue p)
have hcop : IsCoprime (Ideal.span {lambda} : Ideal ActualEisensteinCubic.O) (Ideal.span {p}) := by
apply Ideal.isCoprime_of_isMaximalp:ActualEisensteinCubic.Ohp:p โ 0instโ:(span {p}).IsMaximalhg:lambda โ span {p}hc:ringChar (ActualEisensteinCubic.O โงธ span {p}) โ 2hprimary:lambda ^ 2 โฃ p - 1โข span {lambda} โ span {p}
intro hep:ActualEisensteinCubic.Ohp:p โ 0instโ:(span {p}).IsMaximalhg:lambda โ span {p}hc:ringChar (ActualEisensteinCubic.O โงธ span {p}) โ 2hprimary:lambda ^ 2 โฃ p - 1he:span {lambda} = span {p}โข False
apply hgp:ActualEisensteinCubic.Ohp:p โ 0instโ:(span {p}).IsMaximalhg:lambda โ span {p}hc:ringChar (ActualEisensteinCubic.O โงธ span {p}) โ 2hprimary:lambda ^ 2 โฃ p - 1he:span {lambda} = span {p}โข lambda โ span {p}
rw [โhep:ActualEisensteinCubic.Ohp:p โ 0instโ:(span {p}).IsMaximalhg:lambda โ span {p}hc:ringChar (ActualEisensteinCubic.O โงธ span {p}) โ 2hprimary:lambda ^ 2 โฃ p - 1he:span {lambda} = span {p}โข lambda โ span {lambda}]p:ActualEisensteinCubic.Ohp:p โ 0instโ:(span {p}).IsMaximalhg:lambda โ span {p}hc:ringChar (ActualEisensteinCubic.O โงธ span {p}) โ 2hprimary:lambda ^ 2 โฃ p - 1he:span {lambda} = span {p}โข lambda โ span {lambda}
exact Ideal.subset_span (byp:ActualEisensteinCubic.Ohp:p โ 0instโ:(span {p}).IsMaximalhg:lambda โ span {p}hc:ringChar (ActualEisensteinCubic.O โงธ span {p}) โ 2hprimary:lambda ^ 2 โฃ p - 1he:span {lambda} = span {p}โข lambda โ {lambda} simpAll goals completed! ๐)p:ActualEisensteinCubic.Ohp:p โ 0instโ:(span {p}).IsMaximalhg:lambda โ span {p}hc:ringChar (ActualEisensteinCubic.O โงธ span {p}) โ 2hprimary:lambda ^ 2 โฃ p - 1hcop:IsCoprime (span {lambda}) (span {p})โข (character (span {p})) ((Ideal.Quotient.mk (span {p})) lambda) = lambdaQuadraticRay (residue p)
have h:=quadratic_ray_cross lambda p PrimaryIdealUnitReindex.lambda_prime_actual.ne_zero hp hcop lambda_odd hcp:ActualEisensteinCubic.Ohp:p โ 0instโ:(span {p}).IsMaximalhg:lambda โ span {p}hc:ringChar (ActualEisensteinCubic.O โงธ span {p}) โ 2hprimary:lambda ^ 2 โฃ p - 1hcop:IsCoprime (span {lambda}) (span {p})h:quadraticRayValue (residue (lambda * p)) =
(character (span {lambda})) ((Ideal.Quotient.mk (span {lambda})) p) *
(character (span {p})) ((Ideal.Quotient.mk (span {p})) lambda) *
quadraticRayValue (residue lambda) *
quadraticRayValue (residue p)โข (character (span {p})) ((Ideal.Quotient.mk (span {p})) lambda) = lambdaQuadraticRay (residue p)
rw [character_lambda_primary p hprimary,p:ActualEisensteinCubic.Ohp:p โ 0instโ:(span {p}).IsMaximalhg:lambda โ span {p}hc:ringChar (ActualEisensteinCubic.O โงธ span {p}) โ 2hprimary:lambda ^ 2 โฃ p - 1hcop:IsCoprime (span {lambda}) (span {p})h:quadraticRayValue (residue (lambda * p)) =
1 * (character (span {p})) ((Ideal.Quotient.mk (span {p})) lambda) * quadraticRayValue (residue lambda) *
quadraticRayValue (residue p)โข (character (span {p})) ((Ideal.Quotient.mk (span {p})) lambda) = lambdaQuadraticRay (residue p)one_mulp:ActualEisensteinCubic.Ohp:p โ 0instโ:(span {p}).IsMaximalhg:lambda โ span {p}hc:ringChar (ActualEisensteinCubic.O โงธ span {p}) โ 2hprimary:lambda ^ 2 โฃ p - 1hcop:IsCoprime (span {lambda}) (span {p})h:quadraticRayValue (residue (lambda * p)) =
(character (span {p})) ((Ideal.Quotient.mk (span {p})) lambda) * quadraticRayValue (residue lambda) *
quadraticRayValue (residue p)โข (character (span {p})) ((Ideal.Quotient.mk (span {p})) lambda) = lambdaQuadraticRay (residue p)] at hp:ActualEisensteinCubic.Ohp:p โ 0instโ:(span {p}).IsMaximalhg:lambda โ span {p}hc:ringChar (ActualEisensteinCubic.O โงธ span {p}) โ 2hprimary:lambda ^ 2 โฃ p - 1hcop:IsCoprime (span {lambda}) (span {p})h:quadraticRayValue (residue (lambda * p)) =
(character (span {p})) ((Ideal.Quotient.mk (span {p})) lambda) * quadraticRayValue (residue lambda) *
quadraticRayValue (residue p)โข (character (span {p})) ((Ideal.Quotient.mk (span {p})) lambda) = lambdaQuadraticRay (residue p)
have hodd : EisensteinEPrimaryPhase.odd (residue p) := by
have hn : โquadraticRayValue (residue p)โ=1 := byp:ActualEisensteinCubic.Ohp:p โ 0instโ:(span {p}).IsMaximalhg:lambda โ span {p}hc:ringChar (ActualEisensteinCubic.O โงธ span {p}) โ 2hprimary:lambda ^ 2 โฃ p - 1โข (character (span {p})) ((Ideal.Quotient.mk (span {p})) lambda) = lambdaQuadraticRay (residue p)
let pp : UnitโActualEisensteinCubic.O:=fun _=>pp:ActualEisensteinCubic.Ohp:p โ 0instโ:(span {p}).IsMaximalhg:lambda โ span {p}hc:ringChar (ActualEisensteinCubic.O โงธ span {p}) โ 2hprimary:lambda ^ 2 โฃ p - 1hcop:IsCoprime (span {lambda}) (span {p})h:quadraticRayValue (residue (lambda * p)) =
(character (span {p})) ((Ideal.Quotient.mk (span {p})) lambda) * quadraticRayValue (residue lambda) *
quadraticRayValue (residue p)pp:Unit โ ActualEisensteinCubic.O := fun x => pโข โquadraticRayValue (residue p)โ = 1
have hpp : โi,pp iโ 0:=fun _=>hpp:ActualEisensteinCubic.Ohp:p โ 0instโ:(span {p}).IsMaximalhg:lambda โ span {p}hc:ringChar (ActualEisensteinCubic.O โงธ span {p}) โ 2hprimary:lambda ^ 2 โฃ p - 1hcop:IsCoprime (span {lambda}) (span {p})h:quadraticRayValue (residue (lambda * p)) =
(character (span {p})) ((Ideal.Quotient.mk (span {p})) lambda) * quadraticRayValue (residue lambda) *
quadraticRayValue (residue p)pp:Unit โ ActualEisensteinCubic.O := fun x => phpp:โ (i : Unit), pp i โ 0โข โquadraticRayValue (residue p)โ = 1
have hcp : Pairwise (Function.onFun IsCoprime (fun i=>Ideal.span {pp i})):=byp:ActualEisensteinCubic.Ohp:p โ 0instโ:(span {p}).IsMaximalhg:lambda โ span {p}hc:ringChar (ActualEisensteinCubic.O โงธ span {p}) โ 2hprimary:lambda ^ 2 โฃ p - 1โข (character (span {p})) ((Ideal.Quotient.mk (span {p})) lambda) = lambdaQuadraticRay (residue p)
intro i j hijp:ActualEisensteinCubic.Ohp:p โ 0instโ:(span {p}).IsMaximalhg:lambda โ span {p}hc:ringChar (ActualEisensteinCubic.O โงธ span {p}) โ 2hprimary:lambda ^ 2 โฃ p - 1hcop:IsCoprime (span {lambda}) (span {p})h:quadraticRayValue (residue (lambda * p)) =
(character (span {p})) ((Ideal.Quotient.mk (span {p})) lambda) * quadraticRayValue (residue lambda) *
quadraticRayValue (residue p)pp:Unit โ ActualEisensteinCubic.O := fun x => phpp:โ (i : Unit), pp i โ 0i:Unitj:Unithij:i โ jโข Function.onFun IsCoprime (fun i => span {pp i}) i j
exact False.elim (hij (Subsingleton.elim _ _))p:ActualEisensteinCubic.Ohp:p โ 0instโ:(span {p}).IsMaximalhg:lambda โ span {p}hc:ringChar (ActualEisensteinCubic.O โงธ span {p}) โ 2hprimary:lambda ^ 2 โฃ p - 1hcop:IsCoprime (span {lambda}) (span {p})h:quadraticRayValue (residue (lambda * p)) =
(character (span {p})) ((Ideal.Quotient.mk (span {p})) lambda) * quadraticRayValue (residue lambda) *
quadraticRayValue (residue p)pp:Unit โ ActualEisensteinCubic.O := fun x => phpp:โ (i : Unit), pp i โ 0hcp:Pairwise (Function.onFun IsCoprime fun i => span {pp i})โข โquadraticRayValue (residue p)โ = 1
have hh:=FiniteGaussPhase.norm_canonicalProductGauss pp hpp hcp (fun _=>hg) (fun _=>hc)
(fun _=>3) (byp:ActualEisensteinCubic.Ohp:p โ 0instโ:(span {p}).IsMaximalhg:lambda โ span {p}hc:ringChar (ActualEisensteinCubic.O โงธ span {p}) โ 2hprimary:lambda ^ 2 โฃ p - 1hcop:IsCoprime (span {lambda}) (span {p})h:quadraticRayValue (residue (lambda * p)) =
(character (span {p})) ((Ideal.Quotient.mk (span {p})) lambda) * quadraticRayValue (residue lambda) *
quadraticRayValue (residue p)pp:Unit โ ActualEisensteinCubic.O := fun x => phpp:โ (i : Unit), pp i โ 0hcp:Pairwise (Function.onFun IsCoprime fun i => span {pp i})โข โ (i : Unit), 3 โ 0 intro ip:ActualEisensteinCubic.Ohp:p โ 0instโ:(span {p}).IsMaximalhg:lambda โ span {p}hc:ringChar (ActualEisensteinCubic.O โงธ span {p}) โ 2hprimary:lambda ^ 2 โฃ p - 1hcop:IsCoprime (span {lambda}) (span {p})h:quadraticRayValue (residue (lambda * p)) =
(character (span {p})) ((Ideal.Quotient.mk (span {p})) lambda) * quadraticRayValue (residue lambda) *
quadraticRayValue (residue p)pp:Unit โ ActualEisensteinCubic.O := fun x => phpp:โ (i : Unit), pp i โ 0hcp:Pairwise (Function.onFun IsCoprime fun i => span {pp i})i:Unitโข 3 โ 0;decideAll goals completed! ๐) (byp:ActualEisensteinCubic.Ohp:p โ 0instโ:(span {p}).IsMaximalhg:lambda โ span {p}hc:ringChar (ActualEisensteinCubic.O โงธ span {p}) โ 2hprimary:lambda ^ 2 โฃ p - 1hcop:IsCoprime (span {lambda}) (span {p})h:quadraticRayValue (residue (lambda * p)) =
(character (span {p})) ((Ideal.Quotient.mk (span {p})) lambda) * quadraticRayValue (residue lambda) *
quadraticRayValue (residue p)pp:Unit โ ActualEisensteinCubic.O := fun x => phpp:โ (i : Unit), pp i โ 0hcp:Pairwise (Function.onFun IsCoprime fun i => span {pp i})โข โ (i : Unit), 3 < 6 intro ip:ActualEisensteinCubic.Ohp:p โ 0instโ:(span {p}).IsMaximalhg:lambda โ span {p}hc:ringChar (ActualEisensteinCubic.O โงธ span {p}) โ 2hprimary:lambda ^ 2 โฃ p - 1hcop:IsCoprime (span {lambda}) (span {p})h:quadraticRayValue (residue (lambda * p)) =
(character (span {p})) ((Ideal.Quotient.mk (span {p})) lambda) * quadraticRayValue (residue lambda) *
quadraticRayValue (residue p)pp:Unit โ ActualEisensteinCubic.O := fun x => phpp:โ (i : Unit), pp i โ 0hcp:Pairwise (Function.onFun IsCoprime fun i => span {pp i})i:Unitโข 3 < 6;decideAll goals completed! ๐)p:ActualEisensteinCubic.Ohp:p โ 0instโ:(span {p}).IsMaximalhg:lambda โ span {p}hc:ringChar (ActualEisensteinCubic.O โงธ span {p}) โ 2hprimary:lambda ^ 2 โฃ p - 1hcop:IsCoprime (span {lambda}) (span {p})h:quadraticRayValue (residue (lambda * p)) =
(character (span {p})) ((Ideal.Quotient.mk (span {p})) lambda) * quadraticRayValue (residue lambda) *
quadraticRayValue (residue p)pp:Unit โ ActualEisensteinCubic.O := fun x => phpp:โ (i : Unit), pp i โ 0hcp:Pairwise (Function.onFun IsCoprime fun i => span {pp i})hh:โFiniteGaussPhase.canonicalProductGauss pp hpp hcp โฏ fun x => 3โ = 1โข โquadraticRayValue (residue p)โ = 1
rw [QuadraticGaussRay.canonicalProductGauss_three_eq_rayValue pp hpp hcp (fun _=>hg) (fun _=>hc)p:ActualEisensteinCubic.Ohp:p โ 0instโ:(span {p}).IsMaximalhg:lambda โ span {p}hc:ringChar (ActualEisensteinCubic.O โงธ span {p}) โ 2hprimary:lambda ^ 2 โฃ p - 1hcop:IsCoprime (span {lambda}) (span {p})h:quadraticRayValue (residue (lambda * p)) =
(character (span {p})) ((Ideal.Quotient.mk (span {p})) lambda) * quadraticRayValue (residue lambda) *
quadraticRayValue (residue p)pp:Unit โ ActualEisensteinCubic.O := fun x => phpp:โ (i : Unit), pp i โ 0hcp:Pairwise (Function.onFun IsCoprime fun i => span {pp i})hh:โquadraticRayValue (residue (โ i, pp i))โ = 1โข โquadraticRayValue (residue p)โ = 1] at hhp:ActualEisensteinCubic.Ohp:p โ 0instโ:(span {p}).IsMaximalhg:lambda โ span {p}hc:ringChar (ActualEisensteinCubic.O โงธ span {p}) โ 2hprimary:lambda ^ 2 โฃ p - 1hcop:IsCoprime (span {lambda}) (span {p})h:quadraticRayValue (residue (lambda * p)) =
(character (span {p})) ((Ideal.Quotient.mk (span {p})) lambda) * quadraticRayValue (residue lambda) *
quadraticRayValue (residue p)pp:Unit โ ActualEisensteinCubic.O := fun x => phpp:โ (i : Unit), pp i โ 0hcp:Pairwise (Function.onFun IsCoprime fun i => span {pp i})hh:โquadraticRayValue (residue (โ i, pp i))โ = 1โข โquadraticRayValue (residue p)โ = 1
simpa [pp] using hhp:ActualEisensteinCubic.Ohp:p โ 0instโ:(span {p}).IsMaximalhg:lambda โ span {p}hc:ringChar (ActualEisensteinCubic.O โงธ span {p}) โ 2hprimary:lambda ^ 2 โฃ p - 1hcop:IsCoprime (span {lambda}) (span {p})h:quadraticRayValue (residue (lambda * p)) =
(character (span {p})) ((Ideal.Quotient.mk (span {p})) lambda) * quadraticRayValue (residue lambda) *
quadraticRayValue (residue p)hn:โquadraticRayValue (residue p)โ = 1โข EisensteinEPrimaryPhase.odd (residue p)
exact QuadraticUnitInvariance.odd_of_quadraticRayValue_norm_eq_one _ hnp:ActualEisensteinCubic.Ohp:p โ 0instโ:(span {p}).IsMaximalhg:lambda โ span {p}hc:ringChar (ActualEisensteinCubic.O โงธ span {p}) โ 2hprimary:lambda ^ 2 โฃ p - 1hcop:IsCoprime (span {lambda}) (span {p})h:quadraticRayValue (residue (lambda * p)) =
(character (span {p})) ((Ideal.Quotient.mk (span {p})) lambda) * quadraticRayValue (residue lambda) *
quadraticRayValue (residue p)hodd:EisensteinEPrimaryPhase.odd (residue p)โข (character (span {p})) ((Ideal.Quotient.mk (span {p})) lambda) = lambdaQuadraticRay (residue p)
unfold lambdaQuadraticRayp:ActualEisensteinCubic.Ohp:p โ 0instโ:(span {p}).IsMaximalhg:lambda โ span {p}hc:ringChar (ActualEisensteinCubic.O โงธ span {p}) โ 2hprimary:lambda ^ 2 โฃ p - 1hcop:IsCoprime (span {lambda}) (span {p})h:quadraticRayValue (residue (lambda * p)) =
(character (span {p})) ((Ideal.Quotient.mk (span {p})) lambda) * quadraticRayValue (residue lambda) *
quadraticRayValue (residue p)hodd:EisensteinEPrimaryPhase.odd (residue p)โข (character (span {p})) ((Ideal.Quotient.mk (span {p})) lambda) =
quadraticRayValue (EisensteinEPrimaryPhase.mul (residue lambda) (residue p)) /
(quadraticRayValue (residue lambda) * quadraticRayValue (residue p))
rw [โresidue_mulp:ActualEisensteinCubic.Ohp:p โ 0instโ:(span {p}).IsMaximalhg:lambda โ span {p}hc:ringChar (ActualEisensteinCubic.O โงธ span {p}) โ 2hprimary:lambda ^ 2 โฃ p - 1hcop:IsCoprime (span {lambda}) (span {p})h:quadraticRayValue (residue (lambda * p)) =
(character (span {p})) ((Ideal.Quotient.mk (span {p})) lambda) * quadraticRayValue (residue lambda) *
quadraticRayValue (residue p)hodd:EisensteinEPrimaryPhase.odd (residue p)โข (character (span {p})) ((Ideal.Quotient.mk (span {p})) lambda) =
quadraticRayValue (residue (lambda * p)) / (quadraticRayValue (residue lambda) * quadraticRayValue (residue p))]p:ActualEisensteinCubic.Ohp:p โ 0instโ:(span {p}).IsMaximalhg:lambda โ span {p}hc:ringChar (ActualEisensteinCubic.O โงธ span {p}) โ 2hprimary:lambda ^ 2 โฃ p - 1hcop:IsCoprime (span {lambda}) (span {p})h:quadraticRayValue (residue (lambda * p)) =
(character (span {p})) ((Ideal.Quotient.mk (span {p})) lambda) * quadraticRayValue (residue lambda) *
quadraticRayValue (residue p)hodd:EisensteinEPrimaryPhase.odd (residue p)โข (character (span {p})) ((Ideal.Quotient.mk (span {p})) lambda) =
quadraticRayValue (residue (lambda * p)) / (quadraticRayValue (residue lambda) * quadraticRayValue (residue p))
apply (eq_div_iff (mul_ne_zero lambda_quadratic_ray_ne_zero (quadraticRayValue_ne_zero_of_odd _ hodd))).mprp:ActualEisensteinCubic.Ohp:p โ 0instโ:(span {p}).IsMaximalhg:lambda โ span {p}hc:ringChar (ActualEisensteinCubic.O โงธ span {p}) โ 2hprimary:lambda ^ 2 โฃ p - 1hcop:IsCoprime (span {lambda}) (span {p})h:quadraticRayValue (residue (lambda * p)) =
(character (span {p})) ((Ideal.Quotient.mk (span {p})) lambda) * quadraticRayValue (residue lambda) *
quadraticRayValue (residue p)hodd:EisensteinEPrimaryPhase.odd (residue p)โข (character (span {p})) ((Ideal.Quotient.mk (span {p})) lambda) *
(quadraticRayValue (residue lambda) * quadraticRayValue (residue p)) =
quadraticRayValue (residue (lambda * p))
simpa only [mul_assoc] using h.symmAll goals completed! ๐endopen ActualEisensteinCubicopen QuadraticGaussRay hiding Oopen ActualEisensteinCoordinates hiding O omegadef lambdaQuadraticTable (r : EisensteinEPrimaryPhase.Coord) : โค :=
if ยฌEisensteinEPrimaryPhase.odd r then 0
else if rโ({(0,1),(1,0),(1,2),(1,3),(2,3),(3,3)} : Finset EisensteinEPrimaryPhase.Coord)
then 1 else -1lemma lambdaQuadraticTable_mul (r s : EisensteinEPrimaryPhase.Coord) :
lambdaQuadraticTable (EisensteinEPrimaryPhase.mul r s)=
lambdaQuadraticTable r*lambdaQuadraticTable s := byr:EisensteinEPrimaryPhase.Coords:EisensteinEPrimaryPhase.Coordโข lambdaQuadraticTable (EisensteinEPrimaryPhase.mul r s) = lambdaQuadraticTable r * lambdaQuadraticTable s
have h : โr s : EisensteinEPrimaryPhase.Coord,
lambdaQuadraticTable (EisensteinEPrimaryPhase.mul r s)=
lambdaQuadraticTable r*lambdaQuadraticTable s := by decider:EisensteinEPrimaryPhase.Coords:EisensteinEPrimaryPhase.Coordh:โ (r s : EisensteinEPrimaryPhase.Coord),
lambdaQuadraticTable (EisensteinEPrimaryPhase.mul r s) = lambdaQuadraticTable r * lambdaQuadraticTable sโข lambdaQuadraticTable (EisensteinEPrimaryPhase.mul r s) = lambdaQuadraticTable r * lambdaQuadraticTable s
exact h r sAll goals completed! ๐lemma lambdaQuadraticTable_eq_ray (r : EisensteinEPrimaryPhase.Coord)
(hr : EisensteinEPrimaryPhase.odd r) :
(lambdaQuadraticTable r:โ)=lambdaQuadraticRay r := byr:EisensteinEPrimaryPhase.Coordhr:EisensteinEPrimaryPhase.odd rโข โ(lambdaQuadraticTable r) = lambdaQuadraticRay r
have hcmp (a b : ZMod 4) : (a=b) โ (a.val=b.val) :=
(ZMod.val_injective 4).eq_iff.symmr:EisensteinEPrimaryPhase.Coordhr:EisensteinEPrimaryPhase.odd rhcmp:โ (a b : ZMod 4), a = b โ a.val = b.valโข โ(lambdaQuadraticTable r) = lambdaQuadraticRay r
have hn3 : (-3 : ZMod 4) = 1 := by decider:EisensteinEPrimaryPhase.Coordhr:EisensteinEPrimaryPhase.odd rhcmp:โ (a b : ZMod 4), a = b โ a.val = b.valhn3:-3 = 1โข โ(lambdaQuadraticTable r) = lambdaQuadraticRay r
rcases r with โจa,bโฉhcmp:โ (a b : ZMod 4), a = b โ a.val = b.valhn3:-3 = 1a:ZMod 4b:ZMod 4hr:EisensteinEPrimaryPhase.odd (a, b)โข โ(lambdaQuadraticTable (a, b)) = lambdaQuadraticRay (a, b)
have hcases : โ x : ZMod 4, x = 0 โจ x = 1 โจ x = 2 โจ x = 3 := byr:EisensteinEPrimaryPhase.Coordhr:EisensteinEPrimaryPhase.odd rโข โ(lambdaQuadraticTable r) = lambdaQuadraticRay r decidehcmp:โ (a b : ZMod 4), a = b โ a.val = b.valhn3:-3 = 1a:ZMod 4b:ZMod 4hr:EisensteinEPrimaryPhase.odd (a, b)hcases:โ (x : ZMod 4), x = 0 โจ x = 1 โจ x = 2 โจ x = 3โข โ(lambdaQuadraticTable (a, b)) = lambdaQuadraticRay (a, b)
rcases hcases a with rfl | rfl | rfl | rflinlhcmp:โ (a b : ZMod 4), a = b โ a.val = b.valhn3:-3 = 1b:ZMod 4hcases:โ (x : ZMod 4), x = 0 โจ x = 1 โจ x = 2 โจ x = 3hr:EisensteinEPrimaryPhase.odd (0, b)โข โ(lambdaQuadraticTable (0, b)) = lambdaQuadraticRay (0, b)inr.inlhcmp:โ (a b : ZMod 4), a = b โ a.val = b.valhn3:-3 = 1b:ZMod 4hcases:โ (x : ZMod 4), x = 0 โจ x = 1 โจ x = 2 โจ x = 3hr:EisensteinEPrimaryPhase.odd (1, b)โข โ(lambdaQuadraticTable (1, b)) = lambdaQuadraticRay (1, b)inr.inr.inlhcmp:โ (a b : ZMod 4), a = b โ a.val = b.valhn3:-3 = 1b:ZMod 4hcases:โ (x : ZMod 4), x = 0 โจ x = 1 โจ x = 2 โจ x = 3hr:EisensteinEPrimaryPhase.odd (2, b)โข โ(lambdaQuadraticTable (2, b)) = lambdaQuadraticRay (2, b)inr.inr.inrhcmp:โ (a b : ZMod 4), a = b โ a.val = b.valhn3:-3 = 1b:ZMod 4hcases:โ (x : ZMod 4), x = 0 โจ x = 1 โจ x = 2 โจ x = 3hr:EisensteinEPrimaryPhase.odd (3, b)โข โ(lambdaQuadraticTable (3, b)) = lambdaQuadraticRay (3, b) <;>inlhcmp:โ (a b : ZMod 4), a = b โ a.val = b.valhn3:-3 = 1b:ZMod 4hcases:โ (x : ZMod 4), x = 0 โจ x = 1 โจ x = 2 โจ x = 3hr:EisensteinEPrimaryPhase.odd (0, b)โข โ(lambdaQuadraticTable (0, b)) = lambdaQuadraticRay (0, b)inr.inlhcmp:โ (a b : ZMod 4), a = b โ a.val = b.valhn3:-3 = 1b:ZMod 4hcases:โ (x : ZMod 4), x = 0 โจ x = 1 โจ x = 2 โจ x = 3hr:EisensteinEPrimaryPhase.odd (1, b)โข โ(lambdaQuadraticTable (1, b)) = lambdaQuadraticRay (1, b)inr.inr.inlhcmp:โ (a b : ZMod 4), a = b โ a.val = b.valhn3:-3 = 1b:ZMod 4hcases:โ (x : ZMod 4), x = 0 โจ x = 1 โจ x = 2 โจ x = 3hr:EisensteinEPrimaryPhase.odd (2, b)โข โ(lambdaQuadraticTable (2, b)) = lambdaQuadraticRay (2, b)inr.inr.inrhcmp:โ (a b : ZMod 4), a = b โ a.val = b.valhn3:-3 = 1b:ZMod 4hcases:โ (x : ZMod 4), x = 0 โจ x = 1 โจ x = 2 โจ x = 3hr:EisensteinEPrimaryPhase.odd (3, b)โข โ(lambdaQuadraticTable (3, b)) = lambdaQuadraticRay (3, b)
rcases hcases b with rfl | rfl | rfl | rflinr.inr.inr.inlhcmp:โ (a b : ZMod 4), a = b โ a.val = b.valhn3:-3 = 1hcases:โ (x : ZMod 4), x = 0 โจ x = 1 โจ x = 2 โจ x = 3hr:EisensteinEPrimaryPhase.odd (3, 0)โข โ(lambdaQuadraticTable (3, 0)) = lambdaQuadraticRay (3, 0)inr.inr.inr.inr.inlhcmp:โ (a b : ZMod 4), a = b โ a.val = b.valhn3:-3 = 1hcases:โ (x : ZMod 4), x = 0 โจ x = 1 โจ x = 2 โจ x = 3hr:EisensteinEPrimaryPhase.odd (3, 1)โข โ(lambdaQuadraticTable (3, 1)) = lambdaQuadraticRay (3, 1)inr.inr.inr.inr.inr.inlhcmp:โ (a b : ZMod 4), a = b โ a.val = b.valhn3:-3 = 1hcases:โ (x : ZMod 4), x = 0 โจ x = 1 โจ x = 2 โจ x = 3hr:EisensteinEPrimaryPhase.odd (3, 2)โข โ(lambdaQuadraticTable (3, 2)) = lambdaQuadraticRay (3, 2)inr.inr.inr.inr.inr.inrhcmp:โ (a b : ZMod 4), a = b โ a.val = b.valhn3:-3 = 1hcases:โ (x : ZMod 4), x = 0 โจ x = 1 โจ x = 2 โจ x = 3hr:EisensteinEPrimaryPhase.odd (3, 3)โข โ(lambdaQuadraticTable (3, 3)) = lambdaQuadraticRay (3, 3) <;>inl.inlhcmp:โ (a b : ZMod 4), a = b โ a.val = b.valhn3:-3 = 1hcases:โ (x : ZMod 4), x = 0 โจ x = 1 โจ x = 2 โจ x = 3hr:EisensteinEPrimaryPhase.odd (0, 0)โข โ(lambdaQuadraticTable (0, 0)) = lambdaQuadraticRay (0, 0)inl.inr.inlhcmp:โ (a b : ZMod 4), a = b โ a.val = b.valhn3:-3 = 1hcases:โ (x : ZMod 4), x = 0 โจ x = 1 โจ x = 2 โจ x = 3hr:EisensteinEPrimaryPhase.odd (0, 1)โข โ(lambdaQuadraticTable (0, 1)) = lambdaQuadraticRay (0, 1)inl.inr.inr.inlhcmp:โ (a b : ZMod 4), a = b โ a.val = b.valhn3:-3 = 1hcases:โ (x : ZMod 4), x = 0 โจ x = 1 โจ x = 2 โจ x = 3hr:EisensteinEPrimaryPhase.odd (0, 2)โข โ(lambdaQuadraticTable (0, 2)) = lambdaQuadraticRay (0, 2)inl.inr.inr.inrhcmp:โ (a b : ZMod 4), a = b โ a.val = b.valhn3:-3 = 1hcases:โ (x : ZMod 4), x = 0 โจ x = 1 โจ x = 2 โจ x = 3hr:EisensteinEPrimaryPhase.odd (0, 3)โข โ(lambdaQuadraticTable (0, 3)) = lambdaQuadraticRay (0, 3)inr.inl.inlhcmp:โ (a b : ZMod 4), a = b โ a.val = b.valhn3:-3 = 1hcases:โ (x : ZMod 4), x = 0 โจ x = 1 โจ x = 2 โจ x = 3hr:EisensteinEPrimaryPhase.odd (1, 0)โข โ(lambdaQuadraticTable (1, 0)) = lambdaQuadraticRay (1, 0)inr.inl.inr.inlhcmp:โ (a b : ZMod 4), a = b โ a.val = b.valhn3:-3 = 1hcases:โ (x : ZMod 4), x = 0 โจ x = 1 โจ x = 2 โจ x = 3hr:EisensteinEPrimaryPhase.odd (1, 1)โข โ(lambdaQuadraticTable (1, 1)) = lambdaQuadraticRay (1, 1)inr.inl.inr.inr.inlhcmp:โ (a b : ZMod 4), a = b โ a.val = b.valhn3:-3 = 1hcases:โ (x : ZMod 4), x = 0 โจ x = 1 โจ x = 2 โจ x = 3hr:EisensteinEPrimaryPhase.odd (1, 2)โข โ(lambdaQuadraticTable (1, 2)) = lambdaQuadraticRay (1, 2)inr.inl.inr.inr.inrhcmp:โ (a b : ZMod 4), a = b โ a.val = b.valhn3:-3 = 1hcases:โ (x : ZMod 4), x = 0 โจ x = 1 โจ x = 2 โจ x = 3hr:EisensteinEPrimaryPhase.odd (1, 3)โข โ(lambdaQuadraticTable (1, 3)) = lambdaQuadraticRay (1, 3)inr.inr.inl.inlhcmp:โ (a b : ZMod 4), a = b โ a.val = b.valhn3:-3 = 1hcases:โ (x : ZMod 4), x = 0 โจ x = 1 โจ x = 2 โจ x = 3hr:EisensteinEPrimaryPhase.odd (2, 0)โข โ(lambdaQuadraticTable (2, 0)) = lambdaQuadraticRay (2, 0)inr.inr.inl.inr.inlhcmp:โ (a b : ZMod 4), a = b โ a.val = b.valhn3:-3 = 1hcases:โ (x : ZMod 4), x = 0 โจ x = 1 โจ x = 2 โจ x = 3hr:EisensteinEPrimaryPhase.odd (2, 1)โข โ(lambdaQuadraticTable (2, 1)) = lambdaQuadraticRay (2, 1)inr.inr.inl.inr.inr.inlhcmp:โ (a b : ZMod 4), a = b โ a.val = b.valhn3:-3 = 1hcases:โ (x : ZMod 4), x = 0 โจ x = 1 โจ x = 2 โจ x = 3hr:EisensteinEPrimaryPhase.odd (2, 2)โข โ(lambdaQuadraticTable (2, 2)) = lambdaQuadraticRay (2, 2)inr.inr.inl.inr.inr.inrhcmp:โ (a b : ZMod 4), a = b โ a.val = b.valhn3:-3 = 1hcases:โ (x : ZMod 4), x = 0 โจ x = 1 โจ x = 2 โจ x = 3hr:EisensteinEPrimaryPhase.odd (2, 3)โข โ(lambdaQuadraticTable (2, 3)) = lambdaQuadraticRay (2, 3)inr.inr.inr.inlhcmp:โ (a b : ZMod 4), a = b โ a.val = b.valhn3:-3 = 1hcases:โ (x : ZMod 4), x = 0 โจ x = 1 โจ x = 2 โจ x = 3hr:EisensteinEPrimaryPhase.odd (3, 0)โข โ(lambdaQuadraticTable (3, 0)) = lambdaQuadraticRay (3, 0)inr.inr.inr.inr.inlhcmp:โ (a b : ZMod 4), a = b โ a.val = b.valhn3:-3 = 1hcases:โ (x : ZMod 4), x = 0 โจ x = 1 โจ x = 2 โจ x = 3hr:EisensteinEPrimaryPhase.odd (3, 1)โข โ(lambdaQuadraticTable (3, 1)) = lambdaQuadraticRay (3, 1)inr.inr.inr.inr.inr.inlhcmp:โ (a b : ZMod 4), a = b โ a.val = b.valhn3:-3 = 1hcases:โ (x : ZMod 4), x = 0 โจ x = 1 โจ x = 2 โจ x = 3hr:EisensteinEPrimaryPhase.odd (3, 2)โข โ(lambdaQuadraticTable (3, 2)) = lambdaQuadraticRay (3, 2)inr.inr.inr.inr.inr.inrhcmp:โ (a b : ZMod 4), a = b โ a.val = b.valhn3:-3 = 1hcases:โ (x : ZMod 4), x = 0 โจ x = 1 โจ x = 2 โจ x = 3hr:EisensteinEPrimaryPhase.odd (3, 3)โข โ(lambdaQuadraticTable (3, 3)) = lambdaQuadraticRay (3, 3)
norm_num [EisensteinEPrimaryPhase.odd,ZMod.val_zero,ZMod.val_one_eq_one_mod,ZMod.val_ofNat] at hrinr.inr.inr.inr.inr.inrhcmp:โ (a b : ZMod 4), a = b โ a.val = b.valhn3:-3 = 1hcases:โ (x : ZMod 4), x = 0 โจ x = 1 โจ x = 2 โจ x = 3hr:Trueโข โ(lambdaQuadraticTable (3, 3)) = lambdaQuadraticRay (3, 3) <;>inl.inr.inlhcmp:โ (a b : ZMod 4), a = b โ a.val = b.valhn3:-3 = 1hcases:โ (x : ZMod 4), x = 0 โจ x = 1 โจ x = 2 โจ x = 3hr:Trueโข โ(lambdaQuadraticTable (0, 1)) = lambdaQuadraticRay (0, 1)inl.inr.inr.inrhcmp:โ (a b : ZMod 4), a = b โ a.val = b.valhn3:-3 = 1hcases:โ (x : ZMod 4), x = 0 โจ x = 1 โจ x = 2 โจ x = 3hr:Trueโข โ(lambdaQuadraticTable (0, 3)) = lambdaQuadraticRay (0, 3)inr.inl.inlhcmp:โ (a b : ZMod 4), a = b โ a.val = b.valhn3:-3 = 1hcases:โ (x : ZMod 4), x = 0 โจ x = 1 โจ x = 2 โจ x = 3hr:Trueโข โ(lambdaQuadraticTable (1, 0)) = lambdaQuadraticRay (1, 0)inr.inl.inr.inlhcmp:โ (a b : ZMod 4), a = b โ a.val = b.valhn3:-3 = 1hcases:โ (x : ZMod 4), x = 0 โจ x = 1 โจ x = 2 โจ x = 3hr:Trueโข โ(lambdaQuadraticTable (1, 1)) = lambdaQuadraticRay (1, 1)inr.inl.inr.inr.inlhcmp:โ (a b : ZMod 4), a = b โ a.val = b.valhn3:-3 = 1hcases:โ (x : ZMod 4), x = 0 โจ x = 1 โจ x = 2 โจ x = 3hr:Trueโข โ(lambdaQuadraticTable (1, 2)) = lambdaQuadraticRay (1, 2)inr.inl.inr.inr.inrhcmp:โ (a b : ZMod 4), a = b โ a.val = b.valhn3:-3 = 1hcases:โ (x : ZMod 4), x = 0 โจ x = 1 โจ x = 2 โจ x = 3hr:Trueโข โ(lambdaQuadraticTable (1, 3)) = lambdaQuadraticRay (1, 3)inr.inr.inl.inr.inlhcmp:โ (a b : ZMod 4), a = b โ a.val = b.valhn3:-3 = 1hcases:โ (x : ZMod 4), x = 0 โจ x = 1 โจ x = 2 โจ x = 3hr:Trueโข โ(lambdaQuadraticTable (2, 1)) = lambdaQuadraticRay (2, 1)inr.inr.inl.inr.inr.inrhcmp:โ (a b : ZMod 4), a = b โ a.val = b.valhn3:-3 = 1hcases:โ (x : ZMod 4), x = 0 โจ x = 1 โจ x = 2 โจ x = 3hr:Trueโข โ(lambdaQuadraticTable (2, 3)) = lambdaQuadraticRay (2, 3)inr.inr.inr.inlhcmp:โ (a b : ZMod 4), a = b โ a.val = b.valhn3:-3 = 1hcases:โ (x : ZMod 4), x = 0 โจ x = 1 โจ x = 2 โจ x = 3hr:Trueโข โ(lambdaQuadraticTable (3, 0)) = lambdaQuadraticRay (3, 0)inr.inr.inr.inr.inlhcmp:โ (a b : ZMod 4), a = b โ a.val = b.valhn3:-3 = 1hcases:โ (x : ZMod 4), x = 0 โจ x = 1 โจ x = 2 โจ x = 3hr:Trueโข โ(lambdaQuadraticTable (3, 1)) = lambdaQuadraticRay (3, 1)inr.inr.inr.inr.inr.inlhcmp:โ (a b : ZMod 4), a = b โ a.val = b.valhn3:-3 = 1hcases:โ (x : ZMod 4), x = 0 โจ x = 1 โจ x = 2 โจ x = 3hr:Trueโข โ(lambdaQuadraticTable (3, 2)) = lambdaQuadraticRay (3, 2)inr.inr.inr.inr.inr.inrhcmp:โ (a b : ZMod 4), a = b โ a.val = b.valhn3:-3 = 1hcases:โ (x : ZMod 4), x = 0 โจ x = 1 โจ x = 2 โจ x = 3hr:Trueโข โ(lambdaQuadraticTable (3, 3)) = lambdaQuadraticRay (3, 3)
norm_num [lambdaQuadraticTable,lambdaQuadraticRay,lambda_residue,EisensteinEPrimaryPhase.mul,
EisensteinEPrimaryPhase.odd,quadraticRayValue,breveGaussianFourTerms_formula,
Prod.mk.injEq,hcmp,hn3,ZMod.val_zero,ZMod.val_one_eq_one_mod,ZMod.val_ofNat,
ZMod.val_neg_one,ZMod.val_mul,ZMod.val_add,ZMod.val_sub,
Complex.I_sq,Complex.I_pow_three,Complex.inv_I,zpow_neg]inr.inr.inr.inr.inr.inrhcmp:โ (a b : ZMod 4), a = b โ a.val = b.valhn3:-3 = 1hcases:โ (x : ZMod 4), x = 0 โจ x = 1 โจ x = 2 โจ x = 3hr:Trueโข 1 = -I / ((1 + -I + -I + -1) / 2) <;>inl.inr.inlhcmp:โ (a b : ZMod 4), a = b โ a.val = b.valhn3:-3 = 1hcases:โ (x : ZMod 4), x = 0 โจ x = 1 โจ x = 2 โจ x = 3hr:Trueโข 1 = -I / ((1 + -I + -I + -1) / 2 * ((1 + -I + 1 + I) / 2))inl.inr.inr.inrhcmp:โ (a b : ZMod 4), a = b โ a.val = b.valhn3:-3 = 1hcases:โ (x : ZMod 4), x = 0 โจ x = 1 โจ x = 2 โจ x = 3hr:Trueโข -1 = (I ^ (-3).cast + I ^ (2 - (-3).cast)) / 2 / ((1 + -I + -I + -1) / 2 * ((1 + I + 1 + -I) / 2))inr.inl.inlhcmp:โ (a b : ZMod 4), a = b โ a.val = b.valhn3:-3 = 1hcases:โ (x : ZMod 4), x = 0 โจ x = 1 โจ x = 2 โจ x = 3hr:Trueโข 1 = (1 + -I + -I + -1) / 2 / ((1 + -I + -I + -1) / 2)inr.inl.inr.inlhcmp:โ (a b : ZMod 4), a = b โ a.val = b.valhn3:-3 = 1hcases:โ (x : ZMod 4), x = 0 โจ x = 1 โจ x = 2 โจ x = 3hr:Trueโข -1 = I / ((1 + -I + -I + -1) / 2)inr.inl.inr.inr.inlhcmp:โ (a b : ZMod 4), a = b โ a.val = b.valhn3:-3 = 1hcases:โ (x : ZMod 4), x = 0 โจ x = 1 โจ x = 2 โจ x = 3hr:Trueโข 1 = -(I * (2 / (1 + -I + -I + -1)))inr.inl.inr.inr.inrhcmp:โ (a b : ZMod 4), a = b โ a.val = b.valhn3:-3 = 1hcases:โ (x : ZMod 4), x = 0 โจ x = 1 โจ x = 2 โจ x = 3hr:Trueโข 1 = (1 + I + 1 + -I) / 2 / ((1 + -I + -I + -1) / 2 * ((1 + I + I + -1) / 2))inr.inr.inl.inr.inlhcmp:โ (a b : ZMod 4), a = b โ a.val = b.valhn3:-3 = 1hcases:โ (x : ZMod 4), x = 0 โจ x = 1 โจ x = 2 โจ x = 3hr:Trueโข -1 = I * (2 / (1 + -I + -I + -1))inr.inr.inl.inr.inr.inrhcmp:โ (a b : ZMod 4), a = b โ a.val = b.valhn3:-3 = 1hcases:โ (x : ZMod 4), x = 0 โจ x = 1 โจ x = 2 โจ x = 3hr:Trueโข 1 = -(I * (2 / (1 + -I + -I + -1)))inr.inr.inr.inlhcmp:โ (a b : ZMod 4), a = b โ a.val = b.valhn3:-3 = 1hcases:โ (x : ZMod 4), x = 0 โจ x = 1 โจ x = 2 โจ x = 3hr:Trueโข -1 = (1 + I + I + -1) / 2 / ((1 + -I + -I + -1) / 2)inr.inr.inr.inr.inlhcmp:โ (a b : ZMod 4), a = b โ a.val = b.valhn3:-3 = 1hcases:โ (x : ZMod 4), x = 0 โจ x = 1 โจ x = 2 โจ x = 3hr:Trueโข -1 = (1 + -I + 1 + I) / 2 / ((1 + -I + -I + -1) / 2 * ((1 + -I + -I + -1) / 2))inr.inr.inr.inr.inr.inlhcmp:โ (a b : ZMod 4), a = b โ a.val = b.valhn3:-3 = 1hcases:โ (x : ZMod 4), x = 0 โจ x = 1 โจ x = 2 โจ x = 3hr:Trueโข -1 = I * (2 / (1 + -I + -I + -1))inr.inr.inr.inr.inr.inrhcmp:โ (a b : ZMod 4), a = b โ a.val = b.valhn3:-3 = 1hcases:โ (x : ZMod 4), x = 0 โจ x = 1 โจ x = 2 โจ x = 3hr:Trueโข 1 = -I / ((1 + -I + -I + -1) / 2)
ring_nfinr.inr.inr.inr.inr.inrhcmp:โ (a b : ZMod 4), a = b โ a.val = b.valhn3:-3 = 1hcases:โ (x : ZMod 4), x = 0 โจ x = 1 โจ x = 2 โจ x = 3hr:Trueโข 1 = I * Iโปยน <;>inl.inr.inlhcmp:โ (a b : ZMod 4), a = b โ a.val = b.valhn3:-3 = 1hcases:โ (x : ZMod 4), x = 0 โจ x = 1 โจ x = 2 โจ x = 3hr:Trueโข 1 = I * Iโปยนinl.inr.inr.inrhcmp:โ (a b : ZMod 4), a = b โ a.val = b.valhn3:-3 = 1hcases:โ (x : ZMod 4), x = 0 โจ x = 1 โจ x = 2 โจ x = 3hr:Trueโข -1 = I ^ (-3).cast * Iโปยน * (-1 / 2) + I ^ (2 - (-3).cast) * Iโปยน * (-1 / 2)inr.inl.inlhcmp:โ (a b : ZMod 4), a = b โ a.val = b.valhn3:-3 = 1hcases:โ (x : ZMod 4), x = 0 โจ x = 1 โจ x = 2 โจ x = 3hr:Trueโข 1 = I * Iโปยนinr.inl.inr.inlhcmp:โ (a b : ZMod 4), a = b โ a.val = b.valhn3:-3 = 1hcases:โ (x : ZMod 4), x = 0 โจ x = 1 โจ x = 2 โจ x = 3hr:Trueโข -1 = -(I * Iโปยน)inr.inl.inr.inr.inlhcmp:โ (a b : ZMod 4), a = b โ a.val = b.valhn3:-3 = 1hcases:โ (x : ZMod 4), x = 0 โจ x = 1 โจ x = 2 โจ x = 3hr:Trueโข 1 = I * Iโปยนinr.inl.inr.inr.inrhcmp:โ (a b : ZMod 4), a = b โ a.val = b.valhn3:-3 = 1hcases:โ (x : ZMod 4), x = 0 โจ x = 1 โจ x = 2 โจ x = 3hr:Trueโข 1 = -Iโปยน ^ 2inr.inr.inl.inr.inlhcmp:โ (a b : ZMod 4), a = b โ a.val = b.valhn3:-3 = 1hcases:โ (x : ZMod 4), x = 0 โจ x = 1 โจ x = 2 โจ x = 3hr:Trueโข -1 = -(I * Iโปยน)inr.inr.inl.inr.inr.inrhcmp:โ (a b : ZMod 4), a = b โ a.val = b.valhn3:-3 = 1hcases:โ (x : ZMod 4), x = 0 โจ x = 1 โจ x = 2 โจ x = 3hr:Trueโข 1 = I * Iโปยนinr.inr.inr.inlhcmp:โ (a b : ZMod 4), a = b โ a.val = b.valhn3:-3 = 1hcases:โ (x : ZMod 4), x = 0 โจ x = 1 โจ x = 2 โจ x = 3hr:Trueโข -1 = -(I * Iโปยน)inr.inr.inr.inr.inlhcmp:โ (a b : ZMod 4), a = b โ a.val = b.valhn3:-3 = 1hcases:โ (x : ZMod 4), x = 0 โจ x = 1 โจ x = 2 โจ x = 3hr:Trueโข -1 = Iโปยน ^ 2inr.inr.inr.inr.inr.inlhcmp:โ (a b : ZMod 4), a = b โ a.val = b.valhn3:-3 = 1hcases:โ (x : ZMod 4), x = 0 โจ x = 1 โจ x = 2 โจ x = 3hr:Trueโข -1 = -(I * Iโปยน)inr.inr.inr.inr.inr.inrhcmp:โ (a b : ZMod 4), a = b โ a.val = b.valhn3:-3 = 1hcases:โ (x : ZMod 4), x = 0 โจ x = 1 โจ x = 2 โจ x = 3hr:Trueโข 1 = I * Iโปยน norm_num [Complex.I_sq,Complex.I_pow_three]All goals completed! ๐
all_goals
field_simp [Complex.I_ne_zero]inl.inr.inr.inrhcmp:โ (a b : ZMod 4), a = b โ a.val = b.valhn3:-3 = 1hcases:โ (x : ZMod 4), x = 0 โจ x = 1 โจ x = 2 โจ x = 3hr:Trueโข -2 = I * (I ^ (-3).cast + I ^ (2 - (-3).cast))
change (-2 : โ) = Complex.I * (Complex.I ^ (1 : โค) + Complex.I ^ (2 - 1 : โค))inl.inr.inr.inrhcmp:โ (a b : ZMod 4), a = b โ a.val = b.valhn3:-3 = 1hcases:โ (x : ZMod 4), x = 0 โจ x = 1 โจ x = 2 โจ x = 3hr:Trueโข -2 = I * (I ^ 1 + I ^ (2 - 1))
norm_num [Complex.I_sq]inl.inr.inr.inrhcmp:โ (a b : ZMod 4), a = b โ a.val = b.valhn3:-3 = 1hcases:โ (x : ZMod 4), x = 0 โจ x = 1 โจ x = 2 โจ x = 3hr:Trueโข -2 = I * (I + I)
ring_nfinl.inr.inr.inrhcmp:โ (a b : ZMod 4), a = b โ a.val = b.valhn3:-3 = 1hcases:โ (x : ZMod 4), x = 0 โจ x = 1 โจ x = 2 โจ x = 3hr:Trueโข -2 = I ^ 2 * 2
norm_num [Complex.I_sq]All goals completed! ๐def lambdaQuadraticCharacter : ActualEisensteinCubic.Oโ*โ where
toFun n:=(lambdaQuadraticTable (residue n):โ)
map_one' := byโข โ(lambdaQuadraticTable (residue 1)) = 1
have h : residue (1:ActualEisensteinCubic.O)=((1:ZMod 4),0):=by
have h1 : (1:ActualEisensteinCubic.O)=eval 1 0:=byโข โ(lambdaQuadraticTable (residue 1)) = 1 simp [eval]h1:1 = eval 1 0โข residue 1 = (1, 0)
rw [h1,h1:1 = eval 1 0โข residue (eval 1 0) = (1, 0)residue_evalh1:1 = eval 1 0โข (โ1, โ0) = (1, 0)]h1:1 = eval 1 0โข (โ1, โ0) = (1, 0)
norm_numh:residue 1 = (1, 0)โข โ(lambdaQuadraticTable (residue 1)) = 1
rw [hh:residue 1 = (1, 0)โข โ(lambdaQuadraticTable (1, 0)) = 1]h:residue 1 = (1, 0)โข โ(lambdaQuadraticTable (1, 0)) = 1
exact_mod_cast (show lambdaQuadraticTable ((1:ZMod 4),0)=1 from byh:residue 1 = (1, 0)โข lambdaQuadraticTable (1, 0) = 1 decideAll goals completed! ๐)
map_mul' x y := byx:ActualEisensteinCubic.Oy:ActualEisensteinCubic.Oโข โ(lambdaQuadraticTable (residue (x * y))) = โ(lambdaQuadraticTable (residue x)) * โ(lambdaQuadraticTable (residue y))
rw [residue_mul,x:ActualEisensteinCubic.Oy:ActualEisensteinCubic.Oโข โ(lambdaQuadraticTable (EisensteinEPrimaryPhase.mul (residue x) (residue y))) =
โ(lambdaQuadraticTable (residue x)) * โ(lambdaQuadraticTable (residue y))lambdaQuadraticTable_mulx:ActualEisensteinCubic.Oy:ActualEisensteinCubic.Oโข โ(lambdaQuadraticTable (residue x) * lambdaQuadraticTable (residue y)) =
โ(lambdaQuadraticTable (residue x)) * โ(lambdaQuadraticTable (residue y))]x:ActualEisensteinCubic.Oy:ActualEisensteinCubic.Oโข โ(lambdaQuadraticTable (residue x) * lambdaQuadraticTable (residue y)) =
โ(lambdaQuadraticTable (residue x)) * โ(lambdaQuadraticTable (residue y))
push_castx:ActualEisensteinCubic.Oy:ActualEisensteinCubic.Oโข โ(lambdaQuadraticTable (residue x)) * โ(lambdaQuadraticTable (residue y)) =
โ(lambdaQuadraticTable (residue x)) * โ(lambdaQuadraticTable (residue y))
rflAll goals completed! ๐lemma lambdaQuadraticCharacter_periodic (x y : ActualEisensteinCubic.O) (h : (4:ActualEisensteinCubic.O)โฃx-y) :
lambdaQuadraticCharacter x=lambdaQuadraticCharacter y := byx:ActualEisensteinCubic.Oy:ActualEisensteinCubic.Oh:4 โฃ x - yโข lambdaQuadraticCharacter x = lambdaQuadraticCharacter y
change (lambdaQuadraticTable (residue x):โ)=(lambdaQuadraticTable (residue y):โ)x:ActualEisensteinCubic.Oy:ActualEisensteinCubic.Oh:4 โฃ x - yโข โ(lambdaQuadraticTable (residue x)) = โ(lambdaQuadraticTable (residue y))
rw [QuadraticGaussRay.residue_eq_of_four_dvd_sub x y hx:ActualEisensteinCubic.Oy:ActualEisensteinCubic.Oh:4 โฃ x - yโข โ(lambdaQuadraticTable (residue y)) = โ(lambdaQuadraticTable (residue y))]All goals completed! ๐end QuadraticAllOddCRTopen scoped BigOperators Classicalnamespace CanonicalRowCompletionopen ActualEisensteinCubicopen CompletedGauss hiding Oopen CubicJacobiGlobal hiding Oopen QuadraticAllOddCRTopen CanonicalQuadraticSieve hiding Oopen ConcreteTraceCRT (eisEmbedding)open UniqueFactorizationMonoidlemma localRowValue_square (x : ActualEisensteinCubic.O) (P : Ideal ActualEisensteinCubic.O) :
localRowValue x P^2=eisEmbedding (primeValue P x) := byx:ActualEisensteinCubic.OP:Ideal ActualEisensteinCubic.Oโข localRowValue x P ^ 2 = eisEmbedding (primeValue P x)
unfold localRowValue primeValuex:ActualEisensteinCubic.OP:Ideal ActualEisensteinCubic.Oโข (if h : P.IsMaximal โง lambda โ P then (actualSextic P โฏ) ((Ideal.Quotient.mk P) x) else 0) ^ 2 =
eisEmbedding (if h : P.IsMaximal โง lambda โ P then (cubicChar P โฏ) ((Ideal.Quotient.mk P) x) else 0)
split_ifs with hposx:ActualEisensteinCubic.OP:Ideal ActualEisensteinCubic.Oh:P.IsMaximal โง lambda โ Pโข (actualSextic P โฏ) ((Ideal.Quotient.mk P) x) ^ 2 = eisEmbedding ((cubicChar P โฏ) ((Ideal.Quotient.mk P) x))negx:ActualEisensteinCubic.OP:Ideal ActualEisensteinCubic.Oh:ยฌ(P.IsMaximal โง lambda โ P)โข 0 ^ 2 = eisEmbedding 0
ยทposx:ActualEisensteinCubic.OP:Ideal ActualEisensteinCubic.Oh:P.IsMaximal โง lambda โ Pโข (actualSextic P โฏ) ((Ideal.Quotient.mk P) x) ^ 2 = eisEmbedding ((cubicChar P โฏ) ((Ideal.Quotient.mk P) x)) let : P.IsMaximal:=h.1posx:ActualEisensteinCubic.OP:Ideal ActualEisensteinCubic.Oh:P.IsMaximal โง lambda โ Pthis:P.IsMaximal := ยทยทยทโข (actualSextic P โฏ) ((Ideal.Quotient.mk P) x) ^ 2 = eisEmbedding ((cubicChar P โฏ) ((Ideal.Quotient.mk P) x))
change (actualSextic P h.2 (Ideal.Quotient.mk P x))^2=_posx:ActualEisensteinCubic.OP:Ideal ActualEisensteinCubic.Oh:P.IsMaximal โง lambda โ Pthis:P.IsMaximal := ยทยทยทโข (actualSextic P โฏ) ((Ideal.Quotient.mk P) x) ^ 2 = eisEmbedding ((cubicChar P โฏ) ((Ideal.Quotient.mk P) x))
rw [โMulChar.pow_apply' _ (byx:ActualEisensteinCubic.OP:Ideal ActualEisensteinCubic.Oh:P.IsMaximal โง lambda โ Pthis:P.IsMaximal := ยทยทยทโข 2 โ 0 decideAll goals completed! ๐ : (2:โ)โ 0),canonicalSextic_pow_twoposx:ActualEisensteinCubic.OP:Ideal ActualEisensteinCubic.Oh:P.IsMaximal โง lambda โ Pthis:P.IsMaximal := ยทยทยทโข ((cubicChar P โฏ).ringHomComp eisEmbedding) ((Ideal.Quotient.mk P) x) =
eisEmbedding ((cubicChar P โฏ) ((Ideal.Quotient.mk P) x))]posx:ActualEisensteinCubic.OP:Ideal ActualEisensteinCubic.Oh:P.IsMaximal โง lambda โ Pthis:P.IsMaximal := ยทยทยทโข ((cubicChar P โฏ).ringHomComp eisEmbedding) ((Ideal.Quotient.mk P) x) =
eisEmbedding ((cubicChar P โฏ) ((Ideal.Quotient.mk P) x))
rflAll goals completed! ๐
ยทnegx:ActualEisensteinCubic.OP:Ideal ActualEisensteinCubic.Oh:ยฌ(P.IsMaximal โง lambda โ P)โข 0 ^ 2 = eisEmbedding 0 simpAll goals completed! ๐theorem idealRowHom_square (x : ActualEisensteinCubic.O) (I : Ideal ActualEisensteinCubic.O) :
idealRowHom x I^2=eisEmbedding (idealSymbol I x) := byx:ActualEisensteinCubic.OI:Ideal ActualEisensteinCubic.Oโข (idealRowHom x) I ^ 2 = eisEmbedding (idealSymbol I x)
have hm (s : Multiset (Ideal ActualEisensteinCubic.O)) :
(s.map (localRowValue x)).prod^2=eisEmbedding ((s.map (fun P=>primeValue P x)).prod) := by
induction s using Multiset.induction_on with
| empty=>emptyx:ActualEisensteinCubic.OI:Ideal ActualEisensteinCubic.Oโข (Multiset.map (localRowValue x) 0).prod ^ 2 = eisEmbedding (Multiset.map (fun P => primeValue P x) 0).prodsimpAll goals completed! ๐
| @cons P s ih=>consx:ActualEisensteinCubic.OI:Ideal ActualEisensteinCubic.OP:Ideal ActualEisensteinCubic.Os:Multiset (Ideal ActualEisensteinCubic.O)ih:(Multiset.map (localRowValue x) s).prod ^ 2 = eisEmbedding (Multiset.map (fun P => primeValue P x) s).prodโข (Multiset.map (localRowValue x) (P ::โ s)).prod ^ 2 =
eisEmbedding (Multiset.map (fun P => primeValue P x) (P ::โ s)).prod
simp only [Multiset.map_cons,Multiset.prod_cons,mul_pow,map_mul,localRowValue_square,ih]x:ActualEisensteinCubic.OI:Ideal ActualEisensteinCubic.Ohm:โ (s : Multiset (Ideal ActualEisensteinCubic.O)),
(Multiset.map (localRowValue x) s).prod ^ 2 = eisEmbedding (Multiset.map (fun P => primeValue P x) s).prodโข (idealRowHom x) I ^ 2 = eisEmbedding (idealSymbol I x)
by_cases hI : I=0posx:ActualEisensteinCubic.OI:Ideal ActualEisensteinCubic.Ohm:โ (s : Multiset (Ideal ActualEisensteinCubic.O)),
(Multiset.map (localRowValue x) s).prod ^ 2 = eisEmbedding (Multiset.map (fun P => primeValue P x) s).prodhI:I = 0โข (idealRowHom x) I ^ 2 = eisEmbedding (idealSymbol I x)negx:ActualEisensteinCubic.OI:Ideal ActualEisensteinCubic.Ohm:โ (s : Multiset (Ideal ActualEisensteinCubic.O)),
(Multiset.map (localRowValue x) s).prod ^ 2 = eisEmbedding (Multiset.map (fun P => primeValue P x) s).prodhI:ยฌI = 0โข (idealRowHom x) I ^ 2 = eisEmbedding (idealSymbol I x)
ยทposx:ActualEisensteinCubic.OI:Ideal ActualEisensteinCubic.Ohm:โ (s : Multiset (Ideal ActualEisensteinCubic.O)),
(Multiset.map (localRowValue x) s).prod ^ 2 = eisEmbedding (Multiset.map (fun P => primeValue P x) s).prodhI:I = 0โข (idealRowHom x) I ^ 2 = eisEmbedding (idealSymbol I x) subst Iposx:ActualEisensteinCubic.Ohm:โ (s : Multiset (Ideal ActualEisensteinCubic.O)),
(Multiset.map (localRowValue x) s).prod ^ 2 = eisEmbedding (Multiset.map (fun P => primeValue P x) s).prodโข (idealRowHom x) 0 ^ 2 = eisEmbedding (idealSymbol 0 x)
simp only [map_zero,idealSymbol_zero,zero_pow (by decide : (2:โ)โ 0)]All goals completed! ๐
ยทnegx:ActualEisensteinCubic.OI:Ideal ActualEisensteinCubic.Ohm:โ (s : Multiset (Ideal ActualEisensteinCubic.O)),
(Multiset.map (localRowValue x) s).prod ^ 2 = eisEmbedding (Multiset.map (fun P => primeValue P x) s).prodhI:ยฌI = 0โข (idealRowHom x) I ^ 2 = eisEmbedding (idealSymbol I x) change (if I=0 then 0 else _)^2=eisEmbedding (if I=0 then 0 else _)negx:ActualEisensteinCubic.OI:Ideal ActualEisensteinCubic.Ohm:โ (s : Multiset (Ideal ActualEisensteinCubic.O)),
(Multiset.map (localRowValue x) s).prod ^ 2 = eisEmbedding (Multiset.map (fun P => primeValue P x) s).prodhI:ยฌI = 0โข (if I = 0 then 0 else (Multiset.map (localRowValue x) (normalizedFactors I)).prod) ^ 2 =
eisEmbedding (if I = 0 then 0 else (Multiset.map (fun P => primeValue P x) (normalizedFactors I)).prod)
simp only [ite_eq_right hI]negx:ActualEisensteinCubic.OI:Ideal ActualEisensteinCubic.Ohm:โ (s : Multiset (Ideal ActualEisensteinCubic.O)),
(Multiset.map (localRowValue x) s).prod ^ 2 = eisEmbedding (Multiset.map (fun P => primeValue P x) s).prodhI:ยฌI = 0โข (Multiset.map (localRowValue x) (normalizedFactors I)).prod ^ 2 =
eisEmbedding (Multiset.map (fun P => primeValue P x) (normalizedFactors I)).prod
exact hm _All goals completed! ๐lemma actualSextic_cube_quadratic (P : Ideal ActualEisensteinCubic.O) [P.IsMaximal] (hg : lambdaโP) :
actualSextic P hg^3=character P := byP:Ideal ActualEisensteinCubic.Oinstโ:P.IsMaximalhg:lambda โ Pโข actualSextic P hg ^ 3 = character P
let : Field (ActualEisensteinCubic.OโงธP):=Ideal.Quotient.field PP:Ideal ActualEisensteinCubic.Oinstโ:P.IsMaximalhg:lambda โ Pthis:Field (ActualEisensteinCubic.O โงธ P) := Quotient.field Pโข actualSextic P hg ^ 3 = character P
let : Fintype (ActualEisensteinCubic.OโงธP):=Fintype.ofFinite _P:Ideal ActualEisensteinCubic.Oinstโ:P.IsMaximalhg:lambda โ Pthisโ:Field (ActualEisensteinCubic.O โงธ P) := Quotient.field Pthis:Fintype (ActualEisensteinCubic.O โงธ P) := Fintype.ofFinite (ActualEisensteinCubic.O โงธ P)โข actualSextic P hg ^ 3 = character P
obtain โจฯ,hฯ,hฯ3โฉ : โฯ : MulChar (ActualEisensteinCubic.OโงธP) ActualEisensteinCubic.O,
actualSextic P hg=ฯ.ringHomComp eisEmbedding โง
ฯ^3=(quadraticChar (ActualEisensteinCubic.OโงธP)).ringHomComp (Int.castRingHom ActualEisensteinCubic.O) :=
โจ_,rfl,(sexticChar_powers P hg).2.1โฉP:Ideal ActualEisensteinCubic.Oinstโ:P.IsMaximalhg:lambda โ Pthisโ:Field (ActualEisensteinCubic.O โงธ P) := Quotient.field Pthis:Fintype (ActualEisensteinCubic.O โงธ P) := Fintype.ofFinite (ActualEisensteinCubic.O โงธ P)ฯ:MulChar (ActualEisensteinCubic.O โงธ P) ActualEisensteinCubic.Ohฯ:actualSextic P hg = ฯ.ringHomComp eisEmbeddinghฯ3:ฯ ^ 3 = (quadraticChar (ActualEisensteinCubic.O โงธ P)).ringHomComp (Int.castRingHom ActualEisensteinCubic.O)โข actualSextic P hg ^ 3 = character P
rw [hฯ,P:Ideal ActualEisensteinCubic.Oinstโ:P.IsMaximalhg:lambda โ Pthisโ:Field (ActualEisensteinCubic.O โงธ P) := Quotient.field Pthis:Fintype (ActualEisensteinCubic.O โงธ P) := Fintype.ofFinite (ActualEisensteinCubic.O โงธ P)ฯ:MulChar (ActualEisensteinCubic.O โงธ P) ActualEisensteinCubic.Ohฯ:actualSextic P hg = ฯ.ringHomComp eisEmbeddinghฯ3:ฯ ^ 3 = (quadraticChar (ActualEisensteinCubic.O โงธ P)).ringHomComp (Int.castRingHom ActualEisensteinCubic.O)โข ฯ.ringHomComp eisEmbedding ^ 3 = character PMulChar.ringHomComp_pow,P:Ideal ActualEisensteinCubic.Oinstโ:P.IsMaximalhg:lambda โ Pthisโ:Field (ActualEisensteinCubic.O โงธ P) := Quotient.field Pthis:Fintype (ActualEisensteinCubic.O โงธ P) := Fintype.ofFinite (ActualEisensteinCubic.O โงธ P)ฯ:MulChar (ActualEisensteinCubic.O โงธ P) ActualEisensteinCubic.Ohฯ:actualSextic P hg = ฯ.ringHomComp eisEmbeddinghฯ3:ฯ ^ 3 = (quadraticChar (ActualEisensteinCubic.O โงธ P)).ringHomComp (Int.castRingHom ActualEisensteinCubic.O)โข (ฯ ^ 3).ringHomComp eisEmbedding = character Phฯ3P:Ideal ActualEisensteinCubic.Oinstโ:P.IsMaximalhg:lambda โ Pthisโ:Field (ActualEisensteinCubic.O โงธ P) := Quotient.field Pthis:Fintype (ActualEisensteinCubic.O โงธ P) := Fintype.ofFinite (ActualEisensteinCubic.O โงธ P)ฯ:MulChar (ActualEisensteinCubic.O โงธ P) ActualEisensteinCubic.Ohฯ:actualSextic P hg = ฯ.ringHomComp eisEmbeddinghฯ3:ฯ ^ 3 = (quadraticChar (ActualEisensteinCubic.O โงธ P)).ringHomComp (Int.castRingHom ActualEisensteinCubic.O)โข ((quadraticChar (ActualEisensteinCubic.O โงธ P)).ringHomComp (Int.castRingHom ActualEisensteinCubic.O)).ringHomComp
eisEmbedding =
character P]P:Ideal ActualEisensteinCubic.Oinstโ:P.IsMaximalhg:lambda โ Pthisโ:Field (ActualEisensteinCubic.O โงธ P) := Quotient.field Pthis:Fintype (ActualEisensteinCubic.O โงธ P) := Fintype.ofFinite (ActualEisensteinCubic.O โงธ P)ฯ:MulChar (ActualEisensteinCubic.O โงธ P) ActualEisensteinCubic.Ohฯ:actualSextic P hg = ฯ.ringHomComp eisEmbeddinghฯ3:ฯ ^ 3 = (quadraticChar (ActualEisensteinCubic.O โงธ P)).ringHomComp (Int.castRingHom ActualEisensteinCubic.O)โข ((quadraticChar (ActualEisensteinCubic.O โงธ P)).ringHomComp (Int.castRingHom ActualEisensteinCubic.O)).ringHomComp
eisEmbedding =
character P
ext xP:Ideal ActualEisensteinCubic.Oinstโ:P.IsMaximalhg:lambda โ Pthisโ:Field (ActualEisensteinCubic.O โงธ P) := Quotient.field Pthis:Fintype (ActualEisensteinCubic.O โงธ P) := Fintype.ofFinite (ActualEisensteinCubic.O โงธ P)ฯ:MulChar (ActualEisensteinCubic.O โงธ P) ActualEisensteinCubic.Ohฯ:actualSextic P hg = ฯ.ringHomComp eisEmbeddinghฯ3:ฯ ^ 3 = (quadraticChar (ActualEisensteinCubic.O โงธ P)).ringHomComp (Int.castRingHom ActualEisensteinCubic.O)x:(ActualEisensteinCubic.O โงธ P)หฃโข (((quadraticChar (ActualEisensteinCubic.O โงธ P)).ringHomComp (Int.castRingHom ActualEisensteinCubic.O)).ringHomComp
eisEmbedding)
โx =
(character P) โx
change eisEmbedding ((quadraticChar (ActualEisensteinCubic.OโงธP) x:โค):ActualEisensteinCubic.O)=((quadraticChar (ActualEisensteinCubic.OโงธP) x:โค):โ)P:Ideal ActualEisensteinCubic.Oinstโ:P.IsMaximalhg:lambda โ Pthisโ:Field (ActualEisensteinCubic.O โงธ P) := Quotient.field Pthis:Fintype (ActualEisensteinCubic.O โงธ P) := Fintype.ofFinite (ActualEisensteinCubic.O โงธ P)ฯ:MulChar (ActualEisensteinCubic.O โงธ P) ActualEisensteinCubic.Ohฯ:actualSextic P hg = ฯ.ringHomComp eisEmbeddinghฯ3:ฯ ^ 3 = (quadraticChar (ActualEisensteinCubic.O โงธ P)).ringHomComp (Int.castRingHom ActualEisensteinCubic.O)x:(ActualEisensteinCubic.O โงธ P)หฃโข eisEmbedding โ((quadraticChar (ActualEisensteinCubic.O โงธ P)) โx) = โ((quadraticChar (ActualEisensteinCubic.O โงธ P)) โx)
simpAll goals completed! ๐lemma idealRowHom_lambda_prime_cube (p : ActualEisensteinCubic.O) (hp : Prime p)
(hprimary : lambda^2โฃp-1) (hs : Supported (Ideal.span {p})) :
idealRowHom lambda (Ideal.span {p})^3=lambdaQuadraticCharacter p := byp:ActualEisensteinCubic.Ohp:Prime phprimary:lambda ^ 2 โฃ p - 1hs:Supported (span {p})โข (idealRowHom lambda) (span {p}) ^ 3 = lambdaQuadraticCharacter p
let : (Ideal.span {p}).IsMaximal:=PrincipalIdealRing.isMaximal_of_irreducible hp.irreduciblep:ActualEisensteinCubic.Ohp:Prime phprimary:lambda ^ 2 โฃ p - 1hs:Supported (span {p})this:(span {p}).IsMaximal := ยทยทยทโข (idealRowHom lambda) (span {p}) ^ 3 = lambdaQuadraticCharacter p
have hmem : Ideal.span {p}โnormalizedFactors (Ideal.span {p}) :=
(Ideal.mem_normalizedFactors_iff hs.1).mpr โจinferInstance,le_rflโฉp:ActualEisensteinCubic.Ohp:Prime phprimary:lambda ^ 2 โฃ p - 1hs:Supported (span {p})this:(span {p}).IsMaximal := ยทยทยทhmem:span {p} โ normalizedFactors (span {p})โข (idealRowHom lambda) (span {p}) ^ 3 = lambdaQuadraticCharacter p
obtain โจhg,hcโฉ:=hs.2 _ hmemp:ActualEisensteinCubic.Ohp:Prime phprimary:lambda ^ 2 โฃ p - 1hs:Supported (span {p})this:(span {p}).IsMaximal := ยทยทยทhmem:span {p} โ normalizedFactors (span {p})hg:lambda โ span {p}hc:ringChar (CanonicalQuadraticSieve.O โงธ span {p}) โ 2โข (idealRowHom lambda) (span {p}) ^ 3 = lambdaQuadraticCharacter p
rw [idealRowHom_prime lambda _ hgp:ActualEisensteinCubic.Ohp:Prime phprimary:lambda ^ 2 โฃ p - 1hs:Supported (span {p})this:(span {p}).IsMaximal := ยทยทยทhmem:span {p} โ normalizedFactors (span {p})hg:lambda โ span {p}hc:ringChar (CanonicalQuadraticSieve.O โงธ span {p}) โ 2โข (actualSextic (span {p}) hg) ((Ideal.Quotient.mk (span {p})) lambda) ^ 3 = lambdaQuadraticCharacter p]p:ActualEisensteinCubic.Ohp:Prime phprimary:lambda ^ 2 โฃ p - 1hs:Supported (span {p})this:(span {p}).IsMaximal := ยทยทยทhmem:span {p} โ normalizedFactors (span {p})hg:lambda โ span {p}hc:ringChar (CanonicalQuadraticSieve.O โงธ span {p}) โ 2โข (actualSextic (span {p}) hg) ((Ideal.Quotient.mk (span {p})) lambda) ^ 3 = lambdaQuadraticCharacter p
change (actualSextic _ hg (Ideal.Quotient.mk _ lambda))^3=_p:ActualEisensteinCubic.Ohp:Prime phprimary:lambda ^ 2 โฃ p - 1hs:Supported (span {p})this:(span {p}).IsMaximal := ยทยทยทhmem:span {p} โ normalizedFactors (span {p})hg:lambda โ span {p}hc:ringChar (CanonicalQuadraticSieve.O โงธ span {p}) โ 2โข (actualSextic (span {p}) hg) ((Ideal.Quotient.mk (span {p})) lambda) ^ 3 = lambdaQuadraticCharacter p
rw [โMulChar.pow_apply' _ (byp:ActualEisensteinCubic.Ohp:Prime phprimary:lambda ^ 2 โฃ p - 1hs:Supported (span {p})this:(span {p}).IsMaximal := ยทยทยทhmem:span {p} โ normalizedFactors (span {p})hg:lambda โ span {p}hc:ringChar (CanonicalQuadraticSieve.O โงธ span {p}) โ 2โข 3 โ 0 decideAll goals completed! ๐ : (3:โ)โ 0),actualSextic_cube_quadraticp:ActualEisensteinCubic.Ohp:Prime phprimary:lambda ^ 2 โฃ p - 1hs:Supported (span {p})this:(span {p}).IsMaximal := ยทยทยทhmem:span {p} โ normalizedFactors (span {p})hg:lambda โ span {p}hc:ringChar (CanonicalQuadraticSieve.O โงธ span {p}) โ 2โข (character (span {p})) ((Ideal.Quotient.mk (span {p})) lambda) = lambdaQuadraticCharacter p]p:ActualEisensteinCubic.Ohp:Prime phprimary:lambda ^ 2 โฃ p - 1hs:Supported (span {p})this:(span {p}).IsMaximal := ยทยทยทhmem:span {p} โ normalizedFactors (span {p})hg:lambda โ span {p}hc:ringChar (CanonicalQuadraticSieve.O โงธ span {p}) โ 2โข (character (span {p})) ((Ideal.Quotient.mk (span {p})) lambda) = lambdaQuadraticCharacter p
have he:=character_lambda_eq_ray p hp.ne_zero hg hc hprimaryp:ActualEisensteinCubic.Ohp:Prime phprimary:lambda ^ 2 โฃ p - 1hs:Supported (span {p})this:(span {p}).IsMaximal := ยทยทยทhmem:span {p} โ normalizedFactors (span {p})hg:lambda โ span {p}hc:ringChar (CanonicalQuadraticSieve.O โงธ span {p}) โ 2he:(character (span {p})) ((Ideal.Quotient.mk (span {p})) lambda) =
lambdaQuadraticRay (ActualEisensteinCoordinates.residue p)โข (character (span {p})) ((Ideal.Quotient.mk (span {p})) lambda) = lambdaQuadraticCharacter p
have ho:=ActualEisensteinCoordinates.odd_residue_iff_not_two_dvd pp:ActualEisensteinCubic.Ohp:Prime phprimary:lambda ^ 2 โฃ p - 1hs:Supported (span {p})this:(span {p}).IsMaximal := ยทยทยทhmem:span {p} โ normalizedFactors (span {p})hg:lambda โ span {p}hc:ringChar (CanonicalQuadraticSieve.O โงธ span {p}) โ 2he:(character (span {p})) ((Ideal.Quotient.mk (span {p})) lambda) =
lambdaQuadraticRay (ActualEisensteinCoordinates.residue p)ho:EisensteinEPrimaryPhase.odd (ActualEisensteinCoordinates.residue p) โ ยฌ2 โฃ pโข (character (span {p})) ((Ideal.Quotient.mk (span {p})) lambda) = lambdaQuadraticCharacter p
have hs' := (supported_span_iff p).mp hsp:ActualEisensteinCubic.Ohp:Prime phprimary:lambda ^ 2 โฃ p - 1hs:Supported (span {p})this:(span {p}).IsMaximal := ยทยทยทhmem:span {p} โ normalizedFactors (span {p})hg:lambda โ span {p}hc:ringChar (CanonicalQuadraticSieve.O โงธ span {p}) โ 2he:(character (span {p})) ((Ideal.Quotient.mk (span {p})) lambda) =
lambdaQuadraticRay (ActualEisensteinCoordinates.residue p)ho:EisensteinEPrimaryPhase.odd (ActualEisensteinCoordinates.residue p) โ ยฌ2 โฃ phs':ยฌlambda โฃ p โง ยฌ2 โฃ pโข (character (span {p})) ((Ideal.Quotient.mk (span {p})) lambda) = lambdaQuadraticCharacter p
change character _ (Ideal.Quotient.mk _ lambda)=_p:ActualEisensteinCubic.Ohp:Prime phprimary:lambda ^ 2 โฃ p - 1hs:Supported (span {p})this:(span {p}).IsMaximal := ยทยทยทhmem:span {p} โ normalizedFactors (span {p})hg:lambda โ span {p}hc:ringChar (CanonicalQuadraticSieve.O โงธ span {p}) โ 2he:(character (span {p})) ((Ideal.Quotient.mk (span {p})) lambda) =
lambdaQuadraticRay (ActualEisensteinCoordinates.residue p)ho:EisensteinEPrimaryPhase.odd (ActualEisensteinCoordinates.residue p) โ ยฌ2 โฃ phs':ยฌlambda โฃ p โง ยฌ2 โฃ pโข (character (span {p})) ((Ideal.Quotient.mk (span {p})) lambda) = lambdaQuadraticCharacter p
rw [hep:ActualEisensteinCubic.Ohp:Prime phprimary:lambda ^ 2 โฃ p - 1hs:Supported (span {p})this:(span {p}).IsMaximal := ยทยทยทhmem:span {p} โ normalizedFactors (span {p})hg:lambda โ span {p}hc:ringChar (CanonicalQuadraticSieve.O โงธ span {p}) โ 2he:(character (span {p})) ((Ideal.Quotient.mk (span {p})) lambda) =
lambdaQuadraticRay (ActualEisensteinCoordinates.residue p)ho:EisensteinEPrimaryPhase.odd (ActualEisensteinCoordinates.residue p) โ ยฌ2 โฃ phs':ยฌlambda โฃ p โง ยฌ2 โฃ pโข lambdaQuadraticRay (ActualEisensteinCoordinates.residue p) = lambdaQuadraticCharacter p]p:ActualEisensteinCubic.Ohp:Prime phprimary:lambda ^ 2 โฃ p - 1hs:Supported (span {p})this:(span {p}).IsMaximal := ยทยทยทhmem:span {p} โ normalizedFactors (span {p})hg:lambda โ span {p}hc:ringChar (CanonicalQuadraticSieve.O โงธ span {p}) โ 2he:(character (span {p})) ((Ideal.Quotient.mk (span {p})) lambda) =
lambdaQuadraticRay (ActualEisensteinCoordinates.residue p)ho:EisensteinEPrimaryPhase.odd (ActualEisensteinCoordinates.residue p) โ ยฌ2 โฃ phs':ยฌlambda โฃ p โง ยฌ2 โฃ pโข lambdaQuadraticRay (ActualEisensteinCoordinates.residue p) = lambdaQuadraticCharacter p
exact (lambdaQuadraticTable_eq_ray _ (ho.mpr hs'.2)).symmAll goals completed! ๐theorem idealRowHom_lambda_cube (y : ActualEisensteinCubic.O) (hy : lambda^2โฃy-1)
(hs : Supported (Ideal.span {y})) :
idealRowHom lambda (Ideal.span {y})^3=lambdaQuadraticCharacter y := byy:ActualEisensteinCubic.Ohy:lambda ^ 2 โฃ y - 1hs:Supported (span {y})โข (idealRowHom lambda) (span {y}) ^ 3 = lambdaQuadraticCharacter y
have hy0 : yโ 0:=by
intro hey:ActualEisensteinCubic.Ohy:lambda ^ 2 โฃ y - 1hs:Supported (span {y})he:y = 0โข False
apply hs.1y:ActualEisensteinCubic.Ohy:lambda ^ 2 โฃ y - 1hs:Supported (span {y})he:y = 0โข span {y} = 0
simp [he]y:ActualEisensteinCubic.Ohy:lambda ^ 2 โฃ y - 1hs:Supported (span {y})hy0:y โ 0โข (idealRowHom lambda) (span {y}) ^ 3 = lambdaQuadraticCharacter y
obtain โจs,hprod,hfactorsโฉ:=exists_primary_prime_factorization y hy0 hyy:ActualEisensteinCubic.Ohy:lambda ^ 2 โฃ y - 1hs:Supported (span {y})hy0:y โ 0s:Multiset ActualEisensteinCubic.Ohprod:s.prod = yhfactors:โ r โ s, Prime r โง lambda ^ 2 โฃ r - 1โข (idealRowHom lambda) (span {y}) ^ 3 = lambdaQuadraticCharacter y
rw [โhprody:ActualEisensteinCubic.Ohy:lambda ^ 2 โฃ y - 1hy0:y โ 0s:Multiset ActualEisensteinCubic.Ohs:Supported (span {s.prod})hprod:s.prod = yhfactors:โ r โ s, Prime r โง lambda ^ 2 โฃ r - 1โข (idealRowHom lambda) (span {s.prod}) ^ 3 = lambdaQuadraticCharacter s.prod] at hs โขy:ActualEisensteinCubic.Ohy:lambda ^ 2 โฃ y - 1hy0:y โ 0s:Multiset ActualEisensteinCubic.Ohs:Supported (span {s.prod})hprod:s.prod = yhfactors:โ r โ s, Prime r โง lambda ^ 2 โฃ r - 1โข (idealRowHom lambda) (span {s.prod}) ^ 3 = lambdaQuadraticCharacter s.prod
clear hprod hy hy0 ys:Multiset ActualEisensteinCubic.Ohs:Supported (span {s.prod})hfactors:โ r โ s, Prime r โง lambda ^ 2 โฃ r - 1โข (idealRowHom lambda) (span {s.prod}) ^ 3 = lambdaQuadraticCharacter s.prod
induction s using Multiset.induction_on with
| empty=>emptyhs:Supported (span {Multiset.prod 0})hfactors:โ r โ 0, Prime r โง lambda ^ 2 โฃ r - 1โข (idealRowHom lambda) (span {Multiset.prod 0}) ^ 3 = lambdaQuadraticCharacter (Multiset.prod 0)
simp only [Multiset.prod_zero,Ideal.span_singleton_one,โIdeal.one_eq_top,map_one,one_pow]All goals completed! ๐
| @cons p s ih=>consp:ActualEisensteinCubic.Os:Multiset ActualEisensteinCubic.Oih:Supported (span {s.prod}) โ
(โ r โ s, Prime r โง lambda ^ 2 โฃ r - 1) โ (idealRowHom lambda) (span {s.prod}) ^ 3 = lambdaQuadraticCharacter s.prodhs:Supported (span {(p ::โ s).prod})hfactors:โ r โ p ::โ s, Prime r โง lambda ^ 2 โฃ r - 1โข (idealRowHom lambda) (span {(p ::โ s).prod}) ^ 3 = lambdaQuadraticCharacter (p ::โ s).prod
have hp:=hfactors p (Multiset.mem_cons_self _ _)consp:ActualEisensteinCubic.Os:Multiset ActualEisensteinCubic.Oih:Supported (span {s.prod}) โ
(โ r โ s, Prime r โง lambda ^ 2 โฃ r - 1) โ (idealRowHom lambda) (span {s.prod}) ^ 3 = lambdaQuadraticCharacter s.prodhs:Supported (span {(p ::โ s).prod})hfactors:โ r โ p ::โ s, Prime r โง lambda ^ 2 โฃ r - 1hp:Prime p โง lambda ^ 2 โฃ p - 1โข (idealRowHom lambda) (span {(p ::โ s).prod}) ^ 3 = lambdaQuadraticCharacter (p ::โ s).prod
have htail : โqโs,Prime q โง lambda^2โฃq-1:=
fun q hq=>hfactors q (Multiset.mem_cons_of_mem hq)consp:ActualEisensteinCubic.Os:Multiset ActualEisensteinCubic.Oih:Supported (span {s.prod}) โ
(โ r โ s, Prime r โง lambda ^ 2 โฃ r - 1) โ (idealRowHom lambda) (span {s.prod}) ^ 3 = lambdaQuadraticCharacter s.prodhs:Supported (span {(p ::โ s).prod})hfactors:โ r โ p ::โ s, Prime r โง lambda ^ 2 โฃ r - 1hp:Prime p โง lambda ^ 2 โฃ p - 1htail:โ q โ s, Prime q โง lambda ^ 2 โฃ q - 1โข (idealRowHom lambda) (span {(p ::โ s).prod}) ^ 3 = lambdaQuadraticCharacter (p ::โ s).prod
have hsplit : Supported (Ideal.span {p}) โง Supported (Ideal.span {s.prod}) := byy:ActualEisensteinCubic.Ohy:lambda ^ 2 โฃ y - 1hs:Supported (span {y})โข (idealRowHom lambda) (span {y}) ^ 3 = lambdaQuadraticCharacter y
simpa only [Multiset.prod_cons,โIdeal.span_singleton_mul_span_singleton,supported_mul_iff] using hsconsp:ActualEisensteinCubic.Os:Multiset ActualEisensteinCubic.Oih:Supported (span {s.prod}) โ
(โ r โ s, Prime r โง lambda ^ 2 โฃ r - 1) โ (idealRowHom lambda) (span {s.prod}) ^ 3 = lambdaQuadraticCharacter s.prodhs:Supported (span {(p ::โ s).prod})hfactors:โ r โ p ::โ s, Prime r โง lambda ^ 2 โฃ r - 1hp:Prime p โง lambda ^ 2 โฃ p - 1htail:โ q โ s, Prime q โง lambda ^ 2 โฃ q - 1hsplit:Supported (span {p}) โง Supported (span {s.prod})โข (idealRowHom lambda) (span {(p ::โ s).prod}) ^ 3 = lambdaQuadraticCharacter (p ::โ s).prod
rw [Multiset.prod_cons,consp:ActualEisensteinCubic.Os:Multiset ActualEisensteinCubic.Oih:Supported (span {s.prod}) โ
(โ r โ s, Prime r โง lambda ^ 2 โฃ r - 1) โ (idealRowHom lambda) (span {s.prod}) ^ 3 = lambdaQuadraticCharacter s.prodhs:Supported (span {(p ::โ s).prod})hfactors:โ r โ p ::โ s, Prime r โง lambda ^ 2 โฃ r - 1hp:Prime p โง lambda ^ 2 โฃ p - 1htail:โ q โ s, Prime q โง lambda ^ 2 โฃ q - 1hsplit:Supported (span {p}) โง Supported (span {s.prod})โข (idealRowHom lambda) (span {p * s.prod}) ^ 3 = lambdaQuadraticCharacter (p * s.prod)โIdeal.span_singleton_mul_span_singleton,consp:ActualEisensteinCubic.Os:Multiset ActualEisensteinCubic.Oih:Supported (span {s.prod}) โ
(โ r โ s, Prime r โง lambda ^ 2 โฃ r - 1) โ (idealRowHom lambda) (span {s.prod}) ^ 3 = lambdaQuadraticCharacter s.prodhs:Supported (span {(p ::โ s).prod})hfactors:โ r โ p ::โ s, Prime r โง lambda ^ 2 โฃ r - 1hp:Prime p โง lambda ^ 2 โฃ p - 1htail:โ q โ s, Prime q โง lambda ^ 2 โฃ q - 1hsplit:Supported (span {p}) โง Supported (span {s.prod})โข (idealRowHom lambda) (span {p} * span {s.prod}) ^ 3 = lambdaQuadraticCharacter (p * s.prod)map_mul,consp:ActualEisensteinCubic.Os:Multiset ActualEisensteinCubic.Oih:Supported (span {s.prod}) โ
(โ r โ s, Prime r โง lambda ^ 2 โฃ r - 1) โ (idealRowHom lambda) (span {s.prod}) ^ 3 = lambdaQuadraticCharacter s.prodhs:Supported (span {(p ::โ s).prod})hfactors:โ r โ p ::โ s, Prime r โง lambda ^ 2 โฃ r - 1hp:Prime p โง lambda ^ 2 โฃ p - 1htail:โ q โ s, Prime q โง lambda ^ 2 โฃ q - 1hsplit:Supported (span {p}) โง Supported (span {s.prod})โข ((idealRowHom lambda) (span {p}) * (idealRowHom lambda) (span {s.prod})) ^ 3 = lambdaQuadraticCharacter (p * s.prod)mul_pow,consp:ActualEisensteinCubic.Os:Multiset ActualEisensteinCubic.Oih:Supported (span {s.prod}) โ
(โ r โ s, Prime r โง lambda ^ 2 โฃ r - 1) โ (idealRowHom lambda) (span {s.prod}) ^ 3 = lambdaQuadraticCharacter s.prodhs:Supported (span {(p ::โ s).prod})hfactors:โ r โ p ::โ s, Prime r โง lambda ^ 2 โฃ r - 1hp:Prime p โง lambda ^ 2 โฃ p - 1htail:โ q โ s, Prime q โง lambda ^ 2 โฃ q - 1hsplit:Supported (span {p}) โง Supported (span {s.prod})โข (idealRowHom lambda) (span {p}) ^ 3 * (idealRowHom lambda) (span {s.prod}) ^ 3 = lambdaQuadraticCharacter (p * s.prod)
idealRowHom_lambda_prime_cube p hp.1 hp.2 hsplit.1,consp:ActualEisensteinCubic.Os:Multiset ActualEisensteinCubic.Oih:Supported (span {s.prod}) โ
(โ r โ s, Prime r โง lambda ^ 2 โฃ r - 1) โ (idealRowHom lambda) (span {s.prod}) ^ 3 = lambdaQuadraticCharacter s.prodhs:Supported (span {(p ::โ s).prod})hfactors:โ r โ p ::โ s, Prime r โง lambda ^ 2 โฃ r - 1hp:Prime p โง lambda ^ 2 โฃ p - 1htail:โ q โ s, Prime q โง lambda ^ 2 โฃ q - 1hsplit:Supported (span {p}) โง Supported (span {s.prod})โข lambdaQuadraticCharacter p * (idealRowHom lambda) (span {s.prod}) ^ 3 = lambdaQuadraticCharacter (p * s.prod)ih hsplit.2 htail,consp:ActualEisensteinCubic.Os:Multiset ActualEisensteinCubic.Oih:Supported (span {s.prod}) โ
(โ r โ s, Prime r โง lambda ^ 2 โฃ r - 1) โ (idealRowHom lambda) (span {s.prod}) ^ 3 = lambdaQuadraticCharacter s.prodhs:Supported (span {(p ::โ s).prod})hfactors:โ r โ p ::โ s, Prime r โง lambda ^ 2 โฃ r - 1hp:Prime p โง lambda ^ 2 โฃ p - 1htail:โ q โ s, Prime q โง lambda ^ 2 โฃ q - 1hsplit:Supported (span {p}) โง Supported (span {s.prod})โข lambdaQuadraticCharacter p * lambdaQuadraticCharacter s.prod = lambdaQuadraticCharacter (p * s.prod)map_mulconsp:ActualEisensteinCubic.Os:Multiset ActualEisensteinCubic.Oih:Supported (span {s.prod}) โ
(โ r โ s, Prime r โง lambda ^ 2 โฃ r - 1) โ (idealRowHom lambda) (span {s.prod}) ^ 3 = lambdaQuadraticCharacter s.prodhs:Supported (span {(p ::โ s).prod})hfactors:โ r โ p ::โ s, Prime r โง lambda ^ 2 โฃ r - 1hp:Prime p โง lambda ^ 2 โฃ p - 1htail:โ q โ s, Prime q โง lambda ^ 2 โฃ q - 1hsplit:Supported (span {p}) โง Supported (span {s.prod})โข lambdaQuadraticCharacter p * lambdaQuadraticCharacter s.prod =
lambdaQuadraticCharacter p * lambdaQuadraticCharacter s.prod]All goals completed! ๐theorem idealRowHom_lambda_formula (y : ActualEisensteinCubic.O) (hy : lambda^2โฃy-1)
(hs : Supported (Ideal.span {y})) :
idealRowHom lambda (Ideal.span {y})=
eisEmbedding (CubicRamified.linearRay 1 0 y)^2*lambdaQuadraticCharacter y := byy:ActualEisensteinCubic.Ohy:lambda ^ 2 โฃ y - 1hs:Supported (span {y})โข (idealRowHom lambda) (span {y}) = eisEmbedding (CubicRamified.linearRay 1 0 y) ^ 2 * lambdaQuadraticCharacter y
have htwo:=idealRowHom_square lambda (Ideal.span {y})y:ActualEisensteinCubic.Ohy:lambda ^ 2 โฃ y - 1hs:Supported (span {y})htwo:(idealRowHom lambda) (span {y}) ^ 2 = eisEmbedding (idealSymbol (span {y}) lambda)โข (idealRowHom lambda) (span {y}) = eisEmbedding (CubicRamified.linearRay 1 0 y) ^ 2 * lambdaQuadraticCharacter y
change idealRowHom lambda (Ideal.span {y})^2=eisEmbedding (symbol lambda y) at htwoy:ActualEisensteinCubic.Ohy:lambda ^ 2 โฃ y - 1hs:Supported (span {y})htwo:(idealRowHom lambda) (span {y}) ^ 2 = eisEmbedding (symbol lambda y)โข (idealRowHom lambda) (span {y}) = eisEmbedding (CubicRamified.linearRay 1 0 y) ^ 2 * lambdaQuadraticCharacter y
rw [CubicRamified.symbol_lambda_eq_linearRay y hyy:ActualEisensteinCubic.Ohy:lambda ^ 2 โฃ y - 1hs:Supported (span {y})htwo:(idealRowHom lambda) (span {y}) ^ 2 = eisEmbedding (CubicRamified.linearRay 1 0 y)โข (idealRowHom lambda) (span {y}) = eisEmbedding (CubicRamified.linearRay 1 0 y) ^ 2 * lambdaQuadraticCharacter y] at htwoy:ActualEisensteinCubic.Ohy:lambda ^ 2 โฃ y - 1hs:Supported (span {y})htwo:(idealRowHom lambda) (span {y}) ^ 2 = eisEmbedding (CubicRamified.linearRay 1 0 y)โข (idealRowHom lambda) (span {y}) = eisEmbedding (CubicRamified.linearRay 1 0 y) ^ 2 * lambdaQuadraticCharacter y
have hthree:=idealRowHom_lambda_cube y hy hsy:ActualEisensteinCubic.Ohy:lambda ^ 2 โฃ y - 1hs:Supported (span {y})htwo:(idealRowHom lambda) (span {y}) ^ 2 = eisEmbedding (CubicRamified.linearRay 1 0 y)hthree:(idealRowHom lambda) (span {y}) ^ 3 = lambdaQuadraticCharacter yโข (idealRowHom lambda) (span {y}) = eisEmbedding (CubicRamified.linearRay 1 0 y) ^ 2 * lambdaQuadraticCharacter y
have hq : lambdaQuadraticCharacter y^2=1 := by
change (lambdaQuadraticTable (ActualEisensteinCoordinates.residue y):โ)^2=1y:ActualEisensteinCubic.Ohy:lambda ^ 2 โฃ y - 1hs:Supported (span {y})htwo:(idealRowHom lambda) (span {y}) ^ 2 = eisEmbedding (CubicRamified.linearRay 1 0 y)hthree:(idealRowHom lambda) (span {y}) ^ 3 = lambdaQuadraticCharacter yโข โ(lambdaQuadraticTable (ActualEisensteinCoordinates.residue y)) ^ 2 = 1
have ho := ActualEisensteinCoordinates.odd_residue_iff_not_two_dvd y |>.mpr ((supported_span_iff y).mp hs).2y:ActualEisensteinCubic.Ohy:lambda ^ 2 โฃ y - 1hs:Supported (span {y})htwo:(idealRowHom lambda) (span {y}) ^ 2 = eisEmbedding (CubicRamified.linearRay 1 0 y)hthree:(idealRowHom lambda) (span {y}) ^ 3 = lambdaQuadraticCharacter yho:EisensteinEPrimaryPhase.odd (ActualEisensteinCoordinates.residue y)โข โ(lambdaQuadraticTable (ActualEisensteinCoordinates.residue y)) ^ 2 = 1
unfold lambdaQuadraticTabley:ActualEisensteinCubic.Ohy:lambda ^ 2 โฃ y - 1hs:Supported (span {y})htwo:(idealRowHom lambda) (span {y}) ^ 2 = eisEmbedding (CubicRamified.linearRay 1 0 y)hthree:(idealRowHom lambda) (span {y}) ^ 3 = lambdaQuadraticCharacter yho:EisensteinEPrimaryPhase.odd (ActualEisensteinCoordinates.residue y)โข โ(if ยฌEisensteinEPrimaryPhase.odd (ActualEisensteinCoordinates.residue y) then 0
else if ActualEisensteinCoordinates.residue y โ {(0, 1), (1, 0), (1, 2), (1, 3), (2, 3), (3, 3)} then 1 else -1) ^
2 =
1
rw [ite_eq_right (not_not.mpr ho)y:ActualEisensteinCubic.Ohy:lambda ^ 2 โฃ y - 1hs:Supported (span {y})htwo:(idealRowHom lambda) (span {y}) ^ 2 = eisEmbedding (CubicRamified.linearRay 1 0 y)hthree:(idealRowHom lambda) (span {y}) ^ 3 = lambdaQuadraticCharacter yho:EisensteinEPrimaryPhase.odd (ActualEisensteinCoordinates.residue y)โข โ(if ActualEisensteinCoordinates.residue y โ {(0, 1), (1, 0), (1, 2), (1, 3), (2, 3), (3, 3)} then 1 else -1) ^ 2 = 1]y:ActualEisensteinCubic.Ohy:lambda ^ 2 โฃ y - 1hs:Supported (span {y})htwo:(idealRowHom lambda) (span {y}) ^ 2 = eisEmbedding (CubicRamified.linearRay 1 0 y)hthree:(idealRowHom lambda) (span {y}) ^ 3 = lambdaQuadraticCharacter yho:EisensteinEPrimaryPhase.odd (ActualEisensteinCoordinates.residue y)โข โ(if ActualEisensteinCoordinates.residue y โ {(0, 1), (1, 0), (1, 2), (1, 3), (2, 3), (3, 3)} then 1 else -1) ^ 2 = 1
split_ifsposy:ActualEisensteinCubic.Ohy:lambda ^ 2 โฃ y - 1hs:Supported (span {y})htwo:(idealRowHom lambda) (span {y}) ^ 2 = eisEmbedding (CubicRamified.linearRay 1 0 y)hthree:(idealRowHom lambda) (span {y}) ^ 3 = lambdaQuadraticCharacter yho:EisensteinEPrimaryPhase.odd (ActualEisensteinCoordinates.residue y)hโ:ActualEisensteinCoordinates.residue y โ {(0, 1), (1, 0), (1, 2), (1, 3), (2, 3), (3, 3)}โข โ1 ^ 2 = 1negy:ActualEisensteinCubic.Ohy:lambda ^ 2 โฃ y - 1hs:Supported (span {y})htwo:(idealRowHom lambda) (span {y}) ^ 2 = eisEmbedding (CubicRamified.linearRay 1 0 y)hthree:(idealRowHom lambda) (span {y}) ^ 3 = lambdaQuadraticCharacter yho:EisensteinEPrimaryPhase.odd (ActualEisensteinCoordinates.residue y)hโ:ActualEisensteinCoordinates.residue y โ {(0, 1), (1, 0), (1, 2), (1, 3), (2, 3), (3, 3)}โข โ(-1) ^ 2 = 1 <;>posy:ActualEisensteinCubic.Ohy:lambda ^ 2 โฃ y - 1hs:Supported (span {y})htwo:(idealRowHom lambda) (span {y}) ^ 2 = eisEmbedding (CubicRamified.linearRay 1 0 y)hthree:(idealRowHom lambda) (span {y}) ^ 3 = lambdaQuadraticCharacter yho:EisensteinEPrimaryPhase.odd (ActualEisensteinCoordinates.residue y)hโ:ActualEisensteinCoordinates.residue y โ {(0, 1), (1, 0), (1, 2), (1, 3), (2, 3), (3, 3)}โข โ1 ^ 2 = 1negy:ActualEisensteinCubic.Ohy:lambda ^ 2 โฃ y - 1hs:Supported (span {y})htwo:(idealRowHom lambda) (span {y}) ^ 2 = eisEmbedding (CubicRamified.linearRay 1 0 y)hthree:(idealRowHom lambda) (span {y}) ^ 3 = lambdaQuadraticCharacter yho:EisensteinEPrimaryPhase.odd (ActualEisensteinCoordinates.residue y)hโ:ActualEisensteinCoordinates.residue y โ {(0, 1), (1, 0), (1, 2), (1, 3), (2, 3), (3, 3)}โข โ(-1) ^ 2 = 1 norm_numy:ActualEisensteinCubic.Ohy:lambda ^ 2 โฃ y - 1hs:Supported (span {y})htwo:(idealRowHom lambda) (span {y}) ^ 2 = eisEmbedding (CubicRamified.linearRay 1 0 y)hthree:(idealRowHom lambda) (span {y}) ^ 3 = lambdaQuadraticCharacter yhq:lambdaQuadraticCharacter y ^ 2 = 1โข (idealRowHom lambda) (span {y}) = eisEmbedding (CubicRamified.linearRay 1 0 y) ^ 2 * lambdaQuadraticCharacter y
have hsix : idealRowHom lambda (Ideal.span {y})^6=1 := by
calc
_ = (idealRowHom lambda (Ideal.span {y})^3)^2:=byy:ActualEisensteinCubic.Ohy:lambda ^ 2 โฃ y - 1hs:Supported (span {y})htwo:(idealRowHom lambda) (span {y}) ^ 2 = eisEmbedding (CubicRamified.linearRay 1 0 y)hthree:(idealRowHom lambda) (span {y}) ^ 3 = lambdaQuadraticCharacter yhq:lambdaQuadraticCharacter y ^ 2 = 1โข (idealRowHom lambda) (span {y}) ^ 6 = ((idealRowHom lambda) (span {y}) ^ 3) ^ 2 ringAll goals completed! ๐
_ = 1:=byy:ActualEisensteinCubic.Ohy:lambda ^ 2 โฃ y - 1hs:Supported (span {y})htwo:(idealRowHom lambda) (span {y}) ^ 2 = eisEmbedding (CubicRamified.linearRay 1 0 y)hthree:(idealRowHom lambda) (span {y}) ^ 3 = lambdaQuadraticCharacter yhq:lambdaQuadraticCharacter y ^ 2 = 1โข ((idealRowHom lambda) (span {y}) ^ 3) ^ 2 = 1 rw [hthree,y:ActualEisensteinCubic.Ohy:lambda ^ 2 โฃ y - 1hs:Supported (span {y})htwo:(idealRowHom lambda) (span {y}) ^ 2 = eisEmbedding (CubicRamified.linearRay 1 0 y)hthree:(idealRowHom lambda) (span {y}) ^ 3 = lambdaQuadraticCharacter yhq:lambdaQuadraticCharacter y ^ 2 = 1โข lambdaQuadraticCharacter y ^ 2 = 1hqy:ActualEisensteinCubic.Ohy:lambda ^ 2 โฃ y - 1hs:Supported (span {y})htwo:(idealRowHom lambda) (span {y}) ^ 2 = eisEmbedding (CubicRamified.linearRay 1 0 y)hthree:(idealRowHom lambda) (span {y}) ^ 3 = lambdaQuadraticCharacter yhq:lambdaQuadraticCharacter y ^ 2 = 1โข 1 = 1]y:ActualEisensteinCubic.Ohy:lambda ^ 2 โฃ y - 1hs:Supported (span {y})htwo:(idealRowHom lambda) (span {y}) ^ 2 = eisEmbedding (CubicRamified.linearRay 1 0 y)hthree:(idealRowHom lambda) (span {y}) ^ 3 = lambdaQuadraticCharacter yhq:lambdaQuadraticCharacter y ^ 2 = 1hsix:(idealRowHom lambda) (span {y}) ^ 6 = 1โข (idealRowHom lambda) (span {y}) = eisEmbedding (CubicRamified.linearRay 1 0 y) ^ 2 * lambdaQuadraticCharacter y
calc
_ = (idealRowHom lambda (Ideal.span {y})^2)^2*(idealRowHom lambda (Ideal.span {y})^3):=byy:ActualEisensteinCubic.Ohy:lambda ^ 2 โฃ y - 1hs:Supported (span {y})htwo:(idealRowHom lambda) (span {y}) ^ 2 = eisEmbedding (CubicRamified.linearRay 1 0 y)hthree:(idealRowHom lambda) (span {y}) ^ 3 = lambdaQuadraticCharacter yhq:lambdaQuadraticCharacter y ^ 2 = 1hsix:(idealRowHom lambda) (span {y}) ^ 6 = 1โข (idealRowHom lambda) (span {y}) = ((idealRowHom lambda) (span {y}) ^ 2) ^ 2 * (idealRowHom lambda) (span {y}) ^ 3
calc
_ = idealRowHom lambda (Ideal.span {y})*idealRowHom lambda (Ideal.span {y})^6:=byy:ActualEisensteinCubic.Ohy:lambda ^ 2 โฃ y - 1hs:Supported (span {y})htwo:(idealRowHom lambda) (span {y}) ^ 2 = eisEmbedding (CubicRamified.linearRay 1 0 y)hthree:(idealRowHom lambda) (span {y}) ^ 3 = lambdaQuadraticCharacter yhq:lambdaQuadraticCharacter y ^ 2 = 1hsix:(idealRowHom lambda) (span {y}) ^ 6 = 1โข (idealRowHom lambda) (span {y}) = (idealRowHom lambda) (span {y}) * (idealRowHom lambda) (span {y}) ^ 6 rw [hsix,y:ActualEisensteinCubic.Ohy:lambda ^ 2 โฃ y - 1hs:Supported (span {y})htwo:(idealRowHom lambda) (span {y}) ^ 2 = eisEmbedding (CubicRamified.linearRay 1 0 y)hthree:(idealRowHom lambda) (span {y}) ^ 3 = lambdaQuadraticCharacter yhq:lambdaQuadraticCharacter y ^ 2 = 1hsix:(idealRowHom lambda) (span {y}) ^ 6 = 1โข (idealRowHom lambda) (span {y}) = (idealRowHom lambda) (span {y}) * 1mul_oney:ActualEisensteinCubic.Ohy:lambda ^ 2 โฃ y - 1hs:Supported (span {y})htwo:(idealRowHom lambda) (span {y}) ^ 2 = eisEmbedding (CubicRamified.linearRay 1 0 y)hthree:(idealRowHom lambda) (span {y}) ^ 3 = lambdaQuadraticCharacter yhq:lambdaQuadraticCharacter y ^ 2 = 1hsix:(idealRowHom lambda) (span {y}) ^ 6 = 1โข (idealRowHom lambda) (span {y}) = (idealRowHom lambda) (span {y})]All goals completed! ๐
_ = _:=byy:ActualEisensteinCubic.Ohy:lambda ^ 2 โฃ y - 1hs:Supported (span {y})htwo:(idealRowHom lambda) (span {y}) ^ 2 = eisEmbedding (CubicRamified.linearRay 1 0 y)hthree:(idealRowHom lambda) (span {y}) ^ 3 = lambdaQuadraticCharacter yhq:lambdaQuadraticCharacter y ^ 2 = 1hsix:(idealRowHom lambda) (span {y}) ^ 6 = 1โข (idealRowHom lambda) (span {y}) * (idealRowHom lambda) (span {y}) ^ 6 =
((idealRowHom lambda) (span {y}) ^ 2) ^ 2 * (idealRowHom lambda) (span {y}) ^ 3 ringAll goals completed! ๐
_ = _:=byy:ActualEisensteinCubic.Ohy:lambda ^ 2 โฃ y - 1hs:Supported (span {y})htwo:(idealRowHom lambda) (span {y}) ^ 2 = eisEmbedding (CubicRamified.linearRay 1 0 y)hthree:(idealRowHom lambda) (span {y}) ^ 3 = lambdaQuadraticCharacter yhq:lambdaQuadraticCharacter y ^ 2 = 1hsix:(idealRowHom lambda) (span {y}) ^ 6 = 1โข ((idealRowHom lambda) (span {y}) ^ 2) ^ 2 * (idealRowHom lambda) (span {y}) ^ 3 =
eisEmbedding (CubicRamified.linearRay 1 0 y) ^ 2 * lambdaQuadraticCharacter y rw [htwo,y:ActualEisensteinCubic.Ohy:lambda ^ 2 โฃ y - 1hs:Supported (span {y})htwo:(idealRowHom lambda) (span {y}) ^ 2 = eisEmbedding (CubicRamified.linearRay 1 0 y)hthree:(idealRowHom lambda) (span {y}) ^ 3 = lambdaQuadraticCharacter yhq:lambdaQuadraticCharacter y ^ 2 = 1hsix:(idealRowHom lambda) (span {y}) ^ 6 = 1โข eisEmbedding (CubicRamified.linearRay 1 0 y) ^ 2 * (idealRowHom lambda) (span {y}) ^ 3 =
eisEmbedding (CubicRamified.linearRay 1 0 y) ^ 2 * lambdaQuadraticCharacter yhthreey:ActualEisensteinCubic.Ohy:lambda ^ 2 โฃ y - 1hs:Supported (span {y})htwo:(idealRowHom lambda) (span {y}) ^ 2 = eisEmbedding (CubicRamified.linearRay 1 0 y)hthree:(idealRowHom lambda) (span {y}) ^ 3 = lambdaQuadraticCharacter yhq:lambdaQuadraticCharacter y ^ 2 = 1hsix:(idealRowHom lambda) (span {y}) ^ 6 = 1โข eisEmbedding (CubicRamified.linearRay 1 0 y) ^ 2 * lambdaQuadraticCharacter y =
eisEmbedding (CubicRamified.linearRay 1 0 y) ^ 2 * lambdaQuadraticCharacter y]All goals completed! ๐theorem idealRowHom_lambda_mod_thirty_six (x y : ActualEisensteinCubic.O)
(hx : lambda^2โฃx-1) (hy : lambda^2โฃy-1)
(hsx : Supported (Ideal.span {x})) (hsy : Supported (Ideal.span {y}))
(hxy : (36:ActualEisensteinCubic.O)โฃx-y) :
idealRowHom lambda (Ideal.span {x})=idealRowHom lambda (Ideal.span {y}) := byx:ActualEisensteinCubic.Oy:ActualEisensteinCubic.Ohx:lambda ^ 2 โฃ x - 1hy:lambda ^ 2 โฃ y - 1hsx:Supported (span {x})hsy:Supported (span {y})hxy:36 โฃ x - yโข (idealRowHom lambda) (span {x}) = (idealRowHom lambda) (span {y})
rw [idealRowHom_lambda_formula x hx hsx,x:ActualEisensteinCubic.Oy:ActualEisensteinCubic.Ohx:lambda ^ 2 โฃ x - 1hy:lambda ^ 2 โฃ y - 1hsx:Supported (span {x})hsy:Supported (span {y})hxy:36 โฃ x - yโข eisEmbedding (CubicRamified.linearRay 1 0 x) ^ 2 * lambdaQuadraticCharacter x = (idealRowHom lambda) (span {y})idealRowHom_lambda_formula y hy hsy,x:ActualEisensteinCubic.Oy:ActualEisensteinCubic.Ohx:lambda ^ 2 โฃ x - 1hy:lambda ^ 2 โฃ y - 1hsx:Supported (span {x})hsy:Supported (span {y})hxy:36 โฃ x - yโข eisEmbedding (CubicRamified.linearRay 1 0 x) ^ 2 * lambdaQuadraticCharacter x =
eisEmbedding (CubicRamified.linearRay 1 0 y) ^ 2 * lambdaQuadraticCharacter y
CubicRamified.linearRay_congr_mod_nine 1 0 x y hx hy ((show (9:ActualEisensteinCubic.O)โฃ36 from โจ4,byx:ActualEisensteinCubic.Oy:ActualEisensteinCubic.Ohx:lambda ^ 2 โฃ x - 1hy:lambda ^ 2 โฃ y - 1hsx:Supported (span {x})hsy:Supported (span {y})hxy:36 โฃ x - yโข 36 = 9 * 4 norm_numAll goals completed! ๐โฉ).trans hxy),
lambdaQuadraticCharacter_periodic x y ((show (4:ActualEisensteinCubic.O)โฃ36 from โจ9,byx:ActualEisensteinCubic.Oy:ActualEisensteinCubic.Ohx:lambda ^ 2 โฃ x - 1hy:lambda ^ 2 โฃ y - 1hsx:Supported (span {x})hsy:Supported (span {y})hxy:36 โฃ x - yโข 36 = 4 * 9 norm_numAll goals completed! ๐โฉ).trans hxy)]All goals completed! ๐end CanonicalRowCompletionnamespace CubicEisensteinsectionopen Filter MeasureTheoryopen scoped BigOperators Classical Topology ContDiff MatrixGroupsopen ActualEisensteinCubic ConcreteTraceCRTlocal notation "O" => ActualEisensteinCubic.Olemma cuspRemainder_absolute_chart (a b : โ) (ha : 1โคa) (hab : a<b)
(s : โ) (hs : 4<s.re) (M : SL(2,ActualEisensteinCubic.O)) (z : โ) (hz : โzโโค1)
(v : โ) (hv : 1/2โคv) (hv0 : 0<v) :
Summable (fun r : CuspCosets => โcuspRemainderProfile a b s
(cosetHeight r (integralComplexMatrix M โข upperPoint z v hv0))โ) โง
(โ'r : CuspCosets,โcuspRemainderProfile a b s
(cosetHeight r (integralComplexMatrix M โข upperPoint z v hv0))โ)โคeisensteinRemainderBound b s := bya:โb:โha:1 โค ahab:a < bs:โhs:4 < s.reM:SL(2, O)z:โhz:โzโ โค 1v:โhv:1 / 2 โค vhv0:0 < vโข (Summable fun r => โcuspRemainderProfile a b s (cosetHeight r (integralComplexMatrix M โข upperPoint z v hv0))โ) โง
โ' (r : CuspCosets), โcuspRemainderProfile a b s (cosetHeight r (integralComplexMatrix M โข upperPoint z v hv0))โ โค
eisensteinRemainderBound b s
let G : ((Fin 2รFin 2)โโค)โโ := fun n => (max 5 (2*b))^s.re*โnโ^(-s.re)a:โb:โha:1 โค ahab:a < bs:โhs:4 < s.reM:SL(2, O)z:โhz:โzโ โค 1v:โhv:1 / 2 โค vhv0:0 < vG:(Fin 2 ร Fin 2 โ โค) โ โ := fun n => max 5 (2 * b) ^ s.re * โnโ ^ (-s.re)โข (Summable fun r => โcuspRemainderProfile a b s (cosetHeight r (integralComplexMatrix M โข upperPoint z v hv0))โ) โง
โ' (r : CuspCosets), โcuspRemainderProfile a b s (cosetHeight r (integralComplexMatrix M โข upperPoint z v hv0))โ โค
eisensteinRemainderBound b s
let f : CuspCosetsโ(Fin 2รFin 2)โโค := fun r => rowCoordinates (translatedCuspRow M r)a:โb:โha:1 โค ahab:a < bs:โhs:4 < s.reM:SL(2, O)z:โhz:โzโ โค 1v:โhv:1 / 2 โค vhv0:0 < vG:(Fin 2 ร Fin 2 โ โค) โ โ := fun n => max 5 (2 * b) ^ s.re * โnโ ^ (-s.re)f:CuspCosets โ Fin 2 ร Fin 2 โ โค := fun r => rowCoordinates (translatedCuspRow M r)โข (Summable fun r => โcuspRemainderProfile a b s (cosetHeight r (integralComplexMatrix M โข upperPoint z v hv0))โ) โง
โ' (r : CuspCosets), โcuspRemainderProfile a b s (cosetHeight r (integralComplexMatrix M โข upperPoint z v hv0))โ โค
eisensteinRemainderBound b s
let R : CuspCosetsโโ := fun r => โcuspRemainderProfile a b s
(cosetHeight r (integralComplexMatrix M โข upperPoint z v hv0))โa:โb:โha:1 โค ahab:a < bs:โhs:4 < s.reM:SL(2, O)z:โhz:โzโ โค 1v:โhv:1 / 2 โค vhv0:0 < vG:(Fin 2 ร Fin 2 โ โค) โ โ := fun n => max 5 (2 * b) ^ s.re * โnโ ^ (-s.re)f:CuspCosets โ Fin 2 ร Fin 2 โ โค := fun r => rowCoordinates (translatedCuspRow M r)R:CuspCosets โ โ := fun r => โcuspRemainderProfile a b s (cosetHeight r (integralComplexMatrix M โข upperPoint z v hv0))โโข (Summable fun r => โcuspRemainderProfile a b s (cosetHeight r (integralComplexMatrix M โข upperPoint z v hv0))โ) โง
โ' (r : CuspCosets), โcuspRemainderProfile a b s (cosetHeight r (integralComplexMatrix M โข upperPoint z v hv0))โ โค
eisensteinRemainderBound b s
have hg : Summable G := (summable_integer_four_rpow s.re hs).mul_left _a:โb:โha:1 โค ahab:a < bs:โhs:4 < s.reM:SL(2, O)z:โhz:โzโ โค 1v:โhv:1 / 2 โค vhv0:0 < vG:(Fin 2 ร Fin 2 โ โค) โ โ := fun n => max 5 (2 * b) ^ s.re * โnโ ^ (-s.re)f:CuspCosets โ Fin 2 ร Fin 2 โ โค := fun r => rowCoordinates (translatedCuspRow M r)R:CuspCosets โ โ := fun r => โcuspRemainderProfile a b s (cosetHeight r (integralComplexMatrix M โข upperPoint z v hv0))โhg:Summable Gโข (Summable fun r => โcuspRemainderProfile a b s (cosetHeight r (integralComplexMatrix M โข upperPoint z v hv0))โ) โง
โ' (r : CuspCosets), โcuspRemainderProfile a b s (cosetHeight r (integralComplexMatrix M โข upperPoint z v hv0))โ โค
eisensteinRemainderBound b s
have hi : Function.Injective f := rowCoordinates_injective.comp (translatedCuspRow_injective M)a:โb:โha:1 โค ahab:a < bs:โhs:4 < s.reM:SL(2, O)z:โhz:โzโ โค 1v:โhv:1 / 2 โค vhv0:0 < vG:(Fin 2 ร Fin 2 โ โค) โ โ := fun n => max 5 (2 * b) ^ s.re * โnโ ^ (-s.re)f:CuspCosets โ Fin 2 ร Fin 2 โ โค := fun r => rowCoordinates (translatedCuspRow M r)R:CuspCosets โ โ := fun r => โcuspRemainderProfile a b s (cosetHeight r (integralComplexMatrix M โข upperPoint z v hv0))โhg:Summable Ghi:Function.Injective fโข (Summable fun r => โcuspRemainderProfile a b s (cosetHeight r (integralComplexMatrix M โข upperPoint z v hv0))โ) โง
โ' (r : CuspCosets), โcuspRemainderProfile a b s (cosetHeight r (integralComplexMatrix M โข upperPoint z v hv0))โ โค
eisensteinRemainderBound b s
have hb : โr,R rโคG (f r) := by
intro ra:โb:โha:1 โค ahab:a < bs:โhs:4 < s.reM:SL(2, O)z:โhz:โzโ โค 1v:โhv:1 / 2 โค vhv0:0 < vG:(Fin 2 ร Fin 2 โ โค) โ โ := fun n => max 5 (2 * b) ^ s.re * โnโ ^ (-s.re)f:CuspCosets โ Fin 2 ร Fin 2 โ โค := fun r => rowCoordinates (translatedCuspRow M r)R:CuspCosets โ โ := fun r => โcuspRemainderProfile a b s (cosetHeight r (integralComplexMatrix M โข upperPoint z v hv0))โhg:Summable Ghi:Function.Injective fr:CuspCosetsโข R r โค G (f r)
simpa only [norm_mul,norm_inv,norm_cosetCharacter,inv_one,one_mul] using
translated_remainder_majorant a b s hab (bya:โb:โha:1 โค ahab:a < bs:โhs:4 < s.reM:SL(2, O)z:โhz:โzโ โค 1v:โhv:1 / 2 โค vhv0:0 < vG:(Fin 2 ร Fin 2 โ โค) โ โ := fun n => max 5 (2 * b) ^ s.re * โnโ ^ (-s.re)f:CuspCosets โ Fin 2 ร Fin 2 โ โค := fun r => rowCoordinates (translatedCuspRow M r)R:CuspCosets โ โ := fun r => โcuspRemainderProfile a b s (cosetHeight r (integralComplexMatrix M โข upperPoint z v hv0))โhg:Summable Ghi:Function.Injective fr:CuspCosetsโข 0 โค b linarithAll goals completed! ๐) (bya:โb:โha:1 โค ahab:a < bs:โhs:4 < s.reM:SL(2, O)z:โhz:โzโ โค 1v:โhv:1 / 2 โค vhv0:0 < vG:(Fin 2 ร Fin 2 โ โค) โ โ := fun n => max 5 (2 * b) ^ s.re * โnโ ^ (-s.re)f:CuspCosets โ Fin 2 ร Fin 2 โ โค := fun r => rowCoordinates (translatedCuspRow M r)R:CuspCosets โ โ := fun r => โcuspRemainderProfile a b s (cosetHeight r (integralComplexMatrix M โข upperPoint z v hv0))โhg:Summable Ghi:Function.Injective fr:CuspCosetsโข 0 โค s.re linarithAll goals completed! ๐) M z hz v hv hv0 ra:โb:โha:1 โค ahab:a < bs:โhs:4 < s.reM:SL(2, O)z:โhz:โzโ โค 1v:โhv:1 / 2 โค vhv0:0 < vG:(Fin 2 ร Fin 2 โ โค) โ โ := fun n => max 5 (2 * b) ^ s.re * โnโ ^ (-s.re)f:CuspCosets โ Fin 2 ร Fin 2 โ โค := fun r => rowCoordinates (translatedCuspRow M r)R:CuspCosets โ โ := fun r => โcuspRemainderProfile a b s (cosetHeight r (integralComplexMatrix M โข upperPoint z v hv0))โhg:Summable Ghi:Function.Injective fhb:โ (r : CuspCosets), R r โค G (f r)โข (Summable fun r => โcuspRemainderProfile a b s (cosetHeight r (integralComplexMatrix M โข upperPoint z v hv0))โ) โง
โ' (r : CuspCosets), โcuspRemainderProfile a b s (cosetHeight r (integralComplexMatrix M โข upperPoint z v hv0))โ โค
eisensteinRemainderBound b s
have hr : Summable R := (hg.comp_injective hi).of_nonneg_of_le (fun _ => norm_nonneg _) hba:โb:โha:1 โค ahab:a < bs:โhs:4 < s.reM:SL(2, O)z:โhz:โzโ โค 1v:โhv:1 / 2 โค vhv0:0 < vG:(Fin 2 ร Fin 2 โ โค) โ โ := fun n => max 5 (2 * b) ^ s.re * โnโ ^ (-s.re)f:CuspCosets โ Fin 2 ร Fin 2 โ โค := fun r => rowCoordinates (translatedCuspRow M r)R:CuspCosets โ โ := fun r => โcuspRemainderProfile a b s (cosetHeight r (integralComplexMatrix M โข upperPoint z v hv0))โhg:Summable Ghi:Function.Injective fhb:โ (r : CuspCosets), R r โค G (f r)hr:Summable Rโข (Summable fun r => โcuspRemainderProfile a b s (cosetHeight r (integralComplexMatrix M โข upperPoint z v hv0))โ) โง
โ' (r : CuspCosets), โcuspRemainderProfile a b s (cosetHeight r (integralComplexMatrix M โข upperPoint z v hv0))โ โค
eisensteinRemainderBound b s
refine โจhr,?_โฉa:โb:โha:1 โค ahab:a < bs:โhs:4 < s.reM:SL(2, O)z:โhz:โzโ โค 1v:โhv:1 / 2 โค vhv0:0 < vG:(Fin 2 ร Fin 2 โ โค) โ โ := fun n => max 5 (2 * b) ^ s.re * โnโ ^ (-s.re)f:CuspCosets โ Fin 2 ร Fin 2 โ โค := fun r => rowCoordinates (translatedCuspRow M r)R:CuspCosets โ โ := fun r => โcuspRemainderProfile a b s (cosetHeight r (integralComplexMatrix M โข upperPoint z v hv0))โhg:Summable Ghi:Function.Injective fhb:โ (r : CuspCosets), R r โค G (f r)hr:Summable Rโข โ' (r : CuspCosets), โcuspRemainderProfile a b s (cosetHeight r (integralComplexMatrix M โข upperPoint z v hv0))โ โค
eisensteinRemainderBound b s
have hsum : (โ'r,R r)โคโ'n,G n :=
Summable.tsum_le_tsum_of_inj f hi (fun _ _ => bya:โb:โha:1 โค ahab:a < bs:โhs:4 < s.reM:SL(2, O)z:โhz:โzโ โค 1v:โhv:1 / 2 โค vhv0:0 < vG:(Fin 2 ร Fin 2 โ โค) โ โ := fun n => max 5 (2 * b) ^ s.re * โnโ ^ (-s.re)f:CuspCosets โ Fin 2 ร Fin 2 โ โค := fun r => rowCoordinates (translatedCuspRow M r)R:CuspCosets โ โ := fun r => โcuspRemainderProfile a b s (cosetHeight r (integralComplexMatrix M โข upperPoint z v hv0))โhg:Summable Ghi:Function.Injective fhb:โ (r : CuspCosets), R r โค G (f r)hr:Summable Rxโยน:Fin 2 ร Fin 2 โ โคxโ:xโยน โ Set.range fโข 0 โค G xโยน dsimp [G]a:โb:โha:1 โค ahab:a < bs:โhs:4 < s.reM:SL(2, O)z:โhz:โzโ โค 1v:โhv:1 / 2 โค vhv0:0 < vG:(Fin 2 ร Fin 2 โ โค) โ โ := fun n => max 5 (2 * b) ^ s.re * โnโ ^ (-s.re)f:CuspCosets โ Fin 2 ร Fin 2 โ โค := fun r => rowCoordinates (translatedCuspRow M r)R:CuspCosets โ โ := fun r => โcuspRemainderProfile a b s (cosetHeight r (integralComplexMatrix M โข upperPoint z v hv0))โhg:Summable Ghi:Function.Injective fhb:โ (r : CuspCosets), R r โค G (f r)hr:Summable Rxโยน:Fin 2 ร Fin 2 โ โคxโ:xโยน โ Set.range fโข 0 โค max 5 (2 * b) ^ s.re * โxโยนโ ^ (-s.re); positivityAll goals completed! ๐) hb hr hga:โb:โha:1 โค ahab:a < bs:โhs:4 < s.reM:SL(2, O)z:โhz:โzโ โค 1v:โhv:1 / 2 โค vhv0:0 < vG:(Fin 2 ร Fin 2 โ โค) โ โ := fun n => max 5 (2 * b) ^ s.re * โnโ ^ (-s.re)f:CuspCosets โ Fin 2 ร Fin 2 โ โค := fun r => rowCoordinates (translatedCuspRow M r)R:CuspCosets โ โ := fun r => โcuspRemainderProfile a b s (cosetHeight r (integralComplexMatrix M โข upperPoint z v hv0))โhg:Summable Ghi:Function.Injective fhb:โ (r : CuspCosets), R r โค G (f r)hr:Summable Rhsum:โ' (r : CuspCosets), R r โค โ' (n : Fin 2 ร Fin 2 โ โค), G nโข โ' (r : CuspCosets), โcuspRemainderProfile a b s (cosetHeight r (integralComplexMatrix M โข upperPoint z v hv0))โ โค
eisensteinRemainderBound b s
simpa only [G,tsum_mul_left,eisensteinRemainderBound] using hsumAll goals completed! ๐theorem cuspRemainder_absolute_bound (a b : โ) (ha : 1โคa) (hab : a<b)
(s : โ) (hs : 4<s.re) (w : HyperbolicSpace) :
Summable (fun r : CuspCosets => โcuspRemainderProfile a b s (cosetHeight r w)โ) โง
(โ'r : CuspCosets,โcuspRemainderProfile a b s (cosetHeight r w)โ)โคeisensteinRemainderBound b s := bya:โb:โha:1 โค ahab:a < bs:โhs:4 < s.rew:HyperbolicSpaceโข (Summable fun r => โcuspRemainderProfile a b s (cosetHeight r w)โ) โง
โ' (r : CuspCosets), โcuspRemainderProfile a b s (cosetHeight r w)โ โค eisensteinRemainderBound b s
obtain โจM,z,v,hv,hMw,hz,hfloorโฉ := bianchi_reduction_height_floor wa:โb:โha:1 โค ahab:a < bs:โhs:4 < s.rew:HyperbolicSpaceM:SL(2, O)z:โv:โhv:0 < vhMw:integralComplexMatrix M โข w = upperPoint z v hvhz:normSq z โค 1 / 3hfloor:โ(2 / 3) โค vโข (Summable fun r => โcuspRemainderProfile a b s (cosetHeight r w)โ) โง
โ' (r : CuspCosets), โcuspRemainderProfile a b s (cosetHeight r w)โ โค eisensteinRemainderBound b s
have hz1 : โzโโค1 := by
rw [Complex.normSq_eq_norm_sqa:โb:โha:1 โค ahab:a < bs:โhs:4 < s.rew:HyperbolicSpaceM:SL(2, O)z:โv:โhv:0 < vhMw:integralComplexMatrix M โข w = upperPoint z v hvhz:โzโ ^ 2 โค 1 / 3hfloor:โ(2 / 3) โค vโข โzโ โค 1] at hza:โb:โha:1 โค ahab:a < bs:โhs:4 < s.rew:HyperbolicSpaceM:SL(2, O)z:โv:โhv:0 < vhMw:integralComplexMatrix M โข w = upperPoint z v hvhz:โzโ ^ 2 โค 1 / 3hfloor:โ(2 / 3) โค vโข โzโ โค 1
nlinarith [norm_nonneg z]a:โb:โha:1 โค ahab:a < bs:โhs:4 < s.rew:HyperbolicSpaceM:SL(2, O)z:โv:โhv:0 < vhMw:integralComplexMatrix M โข w = upperPoint z v hvhz:normSq z โค 1 / 3hfloor:โ(2 / 3) โค vhz1:โzโ โค 1โข (Summable fun r => โcuspRemainderProfile a b s (cosetHeight r w)โ) โง
โ' (r : CuspCosets), โcuspRemainderProfile a b s (cosetHeight r w)โ โค eisensteinRemainderBound b s
have hv1 : 1/2โคv := by
have hh := Real.sq_sqrt (bya:โb:โha:1 โค ahab:a < bs:โhs:4 < s.rew:HyperbolicSpaceM:SL(2, O)z:โv:โhv:0 < vhMw:integralComplexMatrix M โข w = upperPoint z v hvhz:normSq z โค 1 / 3hfloor:โ(2 / 3) โค vhz1:โzโ โค 1โข 0 โค 2 / 3 norm_numAll goals completed! ๐ : (0:โ)โค2/3)a:โb:โha:1 โค ahab:a < bs:โhs:4 < s.rew:HyperbolicSpaceM:SL(2, O)z:โv:โhv:0 < vhMw:integralComplexMatrix M โข w = upperPoint z v hvhz:normSq z โค 1 / 3hfloor:โ(2 / 3) โค vhz1:โzโ โค 1hh:โ(2 / 3) ^ 2 = 2 / 3โข 1 / 2 โค v
have hh0 := Real.sqrt_nonneg (2/3 : โ)a:โb:โha:1 โค ahab:a < bs:โhs:4 < s.rew:HyperbolicSpaceM:SL(2, O)z:โv:โhv:0 < vhMw:integralComplexMatrix M โข w = upperPoint z v hvhz:normSq z โค 1 / 3hfloor:โ(2 / 3) โค vhz1:โzโ โค 1hh:โ(2 / 3) ^ 2 = 2 / 3hh0:0 โค โ(2 / 3)โข 1 / 2 โค v
nlinaritha:โb:โha:1 โค ahab:a < bs:โhs:4 < s.rew:HyperbolicSpaceM:SL(2, O)z:โv:โhv:0 < vhMw:integralComplexMatrix M โข w = upperPoint z v hvhz:normSq z โค 1 / 3hfloor:โ(2 / 3) โค vhz1:โzโ โค 1hv1:1 / 2 โค vโข (Summable fun r => โcuspRemainderProfile a b s (cosetHeight r w)โ) โง
โ' (r : CuspCosets), โcuspRemainderProfile a b s (cosetHeight r w)โ โค eisensteinRemainderBound b s
have hw : w=integralComplexMatrix Mโปยน โข upperPoint z v hv := by
rw [โhMw,a:โb:โha:1 โค ahab:a < bs:โhs:4 < s.rew:HyperbolicSpaceM:SL(2, O)z:โv:โhv:0 < vhMw:integralComplexMatrix M โข w = upperPoint z v hvhz:normSq z โค 1 / 3hfloor:โ(2 / 3) โค vhz1:โzโ โค 1hv1:1 / 2 โค vโข w = integralComplexMatrix Mโปยน โข integralComplexMatrix M โข wmap_inv,a:โb:โha:1 โค ahab:a < bs:โhs:4 < s.rew:HyperbolicSpaceM:SL(2, O)z:โv:โhv:0 < vhMw:integralComplexMatrix M โข w = upperPoint z v hvhz:normSq z โค 1 / 3hfloor:โ(2 / 3) โค vhz1:โzโ โค 1hv1:1 / 2 โค vโข w = (integralComplexMatrix M)โปยน โข integralComplexMatrix M โข winv_smul_smula:โb:โha:1 โค ahab:a < bs:โhs:4 < s.rew:HyperbolicSpaceM:SL(2, O)z:โv:โhv:0 < vhMw:integralComplexMatrix M โข w = upperPoint z v hvhz:normSq z โค 1 / 3hfloor:โ(2 / 3) โค vhz1:โzโ โค 1hv1:1 / 2 โค vโข w = w]a:โb:โha:1 โค ahab:a < bs:โhs:4 < s.rew:HyperbolicSpaceM:SL(2, O)z:โv:โhv:0 < vhMw:integralComplexMatrix M โข w = upperPoint z v hvhz:normSq z โค 1 / 3hfloor:โ(2 / 3) โค vhz1:โzโ โค 1hv1:1 / 2 โค vhw:w = integralComplexMatrix Mโปยน โข upperPoint z v hvโข (Summable fun r => โcuspRemainderProfile a b s (cosetHeight r w)โ) โง
โ' (r : CuspCosets), โcuspRemainderProfile a b s (cosetHeight r w)โ โค eisensteinRemainderBound b s
rw [hwa:โb:โha:1 โค ahab:a < bs:โhs:4 < s.rew:HyperbolicSpaceM:SL(2, O)z:โv:โhv:0 < vhMw:integralComplexMatrix M โข w = upperPoint z v hvhz:normSq z โค 1 / 3hfloor:โ(2 / 3) โค vhz1:โzโ โค 1hv1:1 / 2 โค vhw:w = integralComplexMatrix Mโปยน โข upperPoint z v hvโข (Summable fun r => โcuspRemainderProfile a b s (cosetHeight r (integralComplexMatrix Mโปยน โข upperPoint z v hv))โ) โง
โ' (r : CuspCosets), โcuspRemainderProfile a b s (cosetHeight r (integralComplexMatrix Mโปยน โข upperPoint z v hv))โ โค
eisensteinRemainderBound b s]a:โb:โha:1 โค ahab:a < bs:โhs:4 < s.rew:HyperbolicSpaceM:SL(2, O)z:โv:โhv:0 < vhMw:integralComplexMatrix M โข w = upperPoint z v hvhz:normSq z โค 1 / 3hfloor:โ(2 / 3) โค vhz1:โzโ โค 1hv1:1 / 2 โค vhw:w = integralComplexMatrix Mโปยน โข upperPoint z v hvโข (Summable fun r => โcuspRemainderProfile a b s (cosetHeight r (integralComplexMatrix Mโปยน โข upperPoint z v hv))โ) โง
โ' (r : CuspCosets), โcuspRemainderProfile a b s (cosetHeight r (integralComplexMatrix Mโปยน โข upperPoint z v hv))โ โค
eisensteinRemainderBound b s
exact cuspRemainder_absolute_chart a b ha hab s hs Mโปยน z hz1 v hv1 hvAll goals completed! ๐lemma cuspRemainder_aux_norm (b : โ) (s : โ) (v : โ) (hv : 0<v) (hvb : vโคb) :
โcuspRemainderProfile (b+1) (b+2) s vโ=v^s.re := byb:โs:โv:โhv:0 < vhvb:v โค bโข โcuspRemainderProfile (b + 1) (b + 2) s vโ = v ^ s.re
rw [cuspRemainderProfile,b:โs:โv:โhv:0 < vhvb:v โค bโข โpositiveHeightPower s v - cuspSeedProfile (b + 1) (b + 2) s vโ = v ^ s.recuspSeedProfile_zero (b+1) (b+2) s v (byb:โs:โv:โhv:0 < vhvb:v โค bโข b + 1 < b + 2 linarithAll goals completed! ๐) (byb:โs:โv:โhv:0 < vhvb:v โค bโข v โค b + 1 linarithAll goals completed! ๐),
sub_zero,b:โs:โv:โhv:0 < vhvb:v โค bโข โpositiveHeightPower s vโ = v ^ s.repositiveHeightPower_eq_cpow s v hv,b:โs:โv:โhv:0 < vhvb:v โค bโข โโv ^ sโ = v ^ s.reComplex.norm_cpow_eq_rpow_re_of_pos hvb:โs:โv:โhv:0 < vhvb:v โค bโข v ^ s.re = v ^ s.re]All goals completed! ๐lemma cuspRemainder_row_scaled_deriv_aux_bound (a b : โ) (hab : a<b) (s : โ)
(C : โ) (hC0 : 0โคC) (hC : โv,|v*deriv (cuspTransition a b) v|โคC)
(u : Fin 2โโ) (hu : uโ 0) (p : SpatialCoordinates) (hp : 0<p 2) (j : Fin 3) :
โ(p 2:โ)*deriv (axisSlice (fun q => cuspRemainderProfile a b s (rowHeight u q)) p j) (p j)โโค
(โsโ+C)*โcuspRemainderProfile (b+1) (b+2) s (rowHeight u p)โ := bya:โb:โhab:a < bs:โC:โhC0:0 โค ChC:โ (v : โ), |v * deriv (cuspTransition a b) v| โค Cu:Fin 2 โ โhu:u โ 0p:SpatialCoordinateshp:0 < p 2j:Fin 3โข โโ(p 2) * deriv (axisSlice (fun q => cuspRemainderProfile a b s (rowHeight u q)) p j) (p j)โ โค
(โsโ + C) * โcuspRemainderProfile (b + 1) (b + 2) s (rowHeight u p)โ
have hh := rowHeight_pos u hu p hpa:โb:โhab:a < bs:โC:โhC0:0 โค ChC:โ (v : โ), |v * deriv (cuspTransition a b) v| โค Cu:Fin 2 โ โhu:u โ 0p:SpatialCoordinateshp:0 < p 2j:Fin 3hh:0 < rowHeight u pโข โโ(p 2) * deriv (axisSlice (fun q => cuspRemainderProfile a b s (rowHeight u q)) p j) (p j)โ โค
(โsโ + C) * โcuspRemainderProfile (b + 1) (b + 2) s (rowHeight u p)โ
by_cases hb : rowHeight u pโคbposa:โb:โhab:a < bs:โC:โhC0:0 โค ChC:โ (v : โ), |v * deriv (cuspTransition a b) v| โค Cu:Fin 2 โ โhu:u โ 0p:SpatialCoordinateshp:0 < p 2j:Fin 3hh:0 < rowHeight u phb:rowHeight u p โค bโข โโ(p 2) * deriv (axisSlice (fun q => cuspRemainderProfile a b s (rowHeight u q)) p j) (p j)โ โค
(โsโ + C) * โcuspRemainderProfile (b + 1) (b + 2) s (rowHeight u p)โnega:โb:โhab:a < bs:โC:โhC0:0 โค ChC:โ (v : โ), |v * deriv (cuspTransition a b) v| โค Cu:Fin 2 โ โhu:u โ 0p:SpatialCoordinateshp:0 < p 2j:Fin 3hh:0 < rowHeight u phb:ยฌrowHeight u p โค bโข โโ(p 2) * deriv (axisSlice (fun q => cuspRemainderProfile a b s (rowHeight u q)) p j) (p j)โ โค
(โsโ + C) * โcuspRemainderProfile (b + 1) (b + 2) s (rowHeight u p)โ
ยทposa:โb:โhab:a < bs:โC:โhC0:0 โค ChC:โ (v : โ), |v * deriv (cuspTransition a b) v| โค Cu:Fin 2 โ โhu:u โ 0p:SpatialCoordinateshp:0 < p 2j:Fin 3hh:0 < rowHeight u phb:rowHeight u p โค bโข โโ(p 2) * deriv (axisSlice (fun q => cuspRemainderProfile a b s (rowHeight u q)) p j) (p j)โ โค
(โsโ + C) * โcuspRemainderProfile (b + 1) (b + 2) s (rowHeight u p)โ rw [cuspRemainder_aux_norm b s _ hh hbposa:โb:โhab:a < bs:โC:โhC0:0 โค ChC:โ (v : โ), |v * deriv (cuspTransition a b) v| โค Cu:Fin 2 โ โhu:u โ 0p:SpatialCoordinateshp:0 < p 2j:Fin 3hh:0 < rowHeight u phb:rowHeight u p โค bโข โโ(p 2) * deriv (axisSlice (fun q => cuspRemainderProfile a b s (rowHeight u q)) p j) (p j)โ โค
(โsโ + C) * rowHeight u p ^ s.re]posa:โb:โhab:a < bs:โC:โhC0:0 โค ChC:โ (v : โ), |v * deriv (cuspTransition a b) v| โค Cu:Fin 2 โ โhu:u โ 0p:SpatialCoordinateshp:0 < p 2j:Fin 3hh:0 < rowHeight u phb:rowHeight u p โค bโข โโ(p 2) * deriv (axisSlice (fun q => cuspRemainderProfile a b s (rowHeight u q)) p j) (p j)โ โค
(โsโ + C) * rowHeight u p ^ s.re
exact cuspRemainder_row_scaled_deriv_bound a b s C hC u hu p hp jAll goals completed! ๐
ยทnega:โb:โhab:a < bs:โC:โhC0:0 โค ChC:โ (v : โ), |v * deriv (cuspTransition a b) v| โค Cu:Fin 2 โ โhu:u โ 0p:SpatialCoordinateshp:0 < p 2j:Fin 3hh:0 < rowHeight u phb:ยฌrowHeight u p โค bโข โโ(p 2) * deriv (axisSlice (fun q => cuspRemainderProfile a b s (rowHeight u q)) p j) (p j)โ โค
(โsโ + C) * โcuspRemainderProfile (b + 1) (b + 2) s (rowHeight u p)โ have hd := (rowProfile_axis_derivatives (cuspRemainderProfile a b s)
(cuspRemainderProfile_contDiffAt a b s) u hu p hp j).1nega:โb:โhab:a < bs:โC:โhC0:0 โค ChC:โ (v : โ), |v * deriv (cuspTransition a b) v| โค Cu:Fin 2 โ โhu:u โ 0p:SpatialCoordinateshp:0 < p 2j:Fin 3hh:0 < rowHeight u phb:ยฌrowHeight u p โค bhd:HasDerivAt (axisSlice (fun q => cuspRemainderProfile a b s (rowHeight u q)) p j)
(deriv (cuspRemainderProfile a b s) (rowHeight u p) * โ(rowHeight u p) * โ(rowLogD u p j)) (p j)โข โโ(p 2) * deriv (axisSlice (fun q => cuspRemainderProfile a b s (rowHeight u q)) p j) (p j)โ โค
(โsโ + C) * โcuspRemainderProfile (b + 1) (b + 2) s (rowHeight u p)โ
rw [hd.deriv,nega:โb:โhab:a < bs:โC:โhC0:0 โค ChC:โ (v : โ), |v * deriv (cuspTransition a b) v| โค Cu:Fin 2 โ โhu:u โ 0p:SpatialCoordinateshp:0 < p 2j:Fin 3hh:0 < rowHeight u phb:ยฌrowHeight u p โค bhd:HasDerivAt (axisSlice (fun q => cuspRemainderProfile a b s (rowHeight u q)) p j)
(deriv (cuspRemainderProfile a b s) (rowHeight u p) * โ(rowHeight u p) * โ(rowLogD u p j)) (p j)โข โโ(p 2) * (deriv (cuspRemainderProfile a b s) (rowHeight u p) * โ(rowHeight u p) * โ(rowLogD u p j))โ โค
(โsโ + C) * โcuspRemainderProfile (b + 1) (b + 2) s (rowHeight u p)โcuspRemainderProfile_deriv_zero a b s _ hab hh (lt_of_not_ge hb)nega:โb:โhab:a < bs:โC:โhC0:0 โค ChC:โ (v : โ), |v * deriv (cuspTransition a b) v| โค Cu:Fin 2 โ โhu:u โ 0p:SpatialCoordinateshp:0 < p 2j:Fin 3hh:0 < rowHeight u phb:ยฌrowHeight u p โค bhd:HasDerivAt (axisSlice (fun q => cuspRemainderProfile a b s (rowHeight u q)) p j)
(deriv (cuspRemainderProfile a b s) (rowHeight u p) * โ(rowHeight u p) * โ(rowLogD u p j)) (p j)โข โโ(p 2) * (0 * โ(rowHeight u p) * โ(rowLogD u p j))โ โค
(โsโ + C) * โcuspRemainderProfile (b + 1) (b + 2) s (rowHeight u p)โ]nega:โb:โhab:a < bs:โC:โhC0:0 โค ChC:โ (v : โ), |v * deriv (cuspTransition a b) v| โค Cu:Fin 2 โ โhu:u โ 0p:SpatialCoordinateshp:0 < p 2j:Fin 3hh:0 < rowHeight u phb:ยฌrowHeight u p โค bhd:HasDerivAt (axisSlice (fun q => cuspRemainderProfile a b s (rowHeight u q)) p j)
(deriv (cuspRemainderProfile a b s) (rowHeight u p) * โ(rowHeight u p) * โ(rowLogD u p j)) (p j)โข โโ(p 2) * (0 * โ(rowHeight u p) * โ(rowLogD u p j))โ โค
(โsโ + C) * โcuspRemainderProfile (b + 1) (b + 2) s (rowHeight u p)โ
simp only [zero_mul,mul_zero,norm_zero]nega:โb:โhab:a < bs:โC:โhC0:0 โค ChC:โ (v : โ), |v * deriv (cuspTransition a b) v| โค Cu:Fin 2 โ โhu:u โ 0p:SpatialCoordinateshp:0 < p 2j:Fin 3hh:0 < rowHeight u phb:ยฌrowHeight u p โค bhd:HasDerivAt (axisSlice (fun q => cuspRemainderProfile a b s (rowHeight u q)) p j)
(deriv (cuspRemainderProfile a b s) (rowHeight u p) * โ(rowHeight u p) * โ(rowLogD u p j)) (p j)โข 0 โค (โsโ + C) * โcuspRemainderProfile (b + 1) (b + 2) s (rowHeight u p)โ
exact mul_nonneg (add_nonneg (norm_nonneg s) hC0) (norm_nonneg _)All goals completed! ๐endopen Filteropen scoped BigOperators Classical Topology ContDiffdef weightedHeightProfile (F : โโโ) (r : CuspCosets) (p : SpatialCoordinates) : โ :=
(cosetCharacter r)โปยน*F (rowHeight (embeddedRow r) p)lemma weightedHeightProfile_axis_differentiable (F : โโโ)
(hF : โv,0<vโContDiffAt โ โ F v) (r : CuspCosets)
(p : SpatialCoordinates) (hp : 0<p 2) (j : Fin 3) :
DifferentiableAt โ (axisSlice (weightedHeightProfile F r) p j) (p j) :=
((rowProfile_axis_derivatives F hF (embeddedRow r) (embeddedRow_ne_zero r) p hp j).1.const_mul _).differentiableAtlemma heightPoincare_axis_termwise (F : โโโ) (hzero : โvโค1,F v=0)
(hF : โv,0<vโContDiffAt โ โ F v)
(p : SpatialCoordinates) (hp : 0<p 2) (j : Fin 3) :
Summable (fun r => deriv (axisSlice (weightedHeightProfile F r) p j) (p j)) โง
HasDerivAt (axisSlice (heightPoincareField F) p j)
(โ'r,deriv (axisSlice (weightedHeightProfile F r) p j) (p j)) (p j) := byF:โ โ โhzero:โ v โค 1, F v = 0hF:โ (v : โ), 0 < v โ ContDiffAt โ โ F vp:SpatialCoordinateshp:0 < p 2j:Fin 3โข (Summable fun r => deriv (axisSlice (weightedHeightProfile F r) p j) (p j)) โง
HasDerivAt (axisSlice (heightPoincareField F) p j)
(โ' (r : CuspCosets), deriv (axisSlice (weightedHeightProfile F r) p j) (p j)) (p j)
obtain โจU,hU,hpU,S,hrowsโฉ := locally_finite_high_rows p hpF:โ โ โhzero:โ v โค 1, F v = 0hF:โ (v : โ), 0 < v โ ContDiffAt โ โ F vp:SpatialCoordinateshp:0 < p 2j:Fin 3U:Set SpatialCoordinateshU:IsOpen UhpU:p โ US:Finset CuspCosetshrows:โ q โ U, 0 < q 2 โง โ r โ S, rowHeight (embeddedRow r) q < 1โข (Summable fun r => deriv (axisSlice (weightedHeightProfile F r) p j) (p j)) โง
HasDerivAt (axisSlice (heightPoincareField F) p j)
(โ' (r : CuspCosets), deriv (axisSlice (weightedHeightProfile F r) p j) (p j)) (p j)
have ht : Tendsto (fun t => Function.update p j t) (๐ (p j)) (๐ p) := by
simpa only [ContinuousAt,Function.update_eq_self] using
((continuous_axis_update p j).continuousAt (x := p j))F:โ โ โhzero:โ v โค 1, F v = 0hF:โ (v : โ), 0 < v โ ContDiffAt โ โ F vp:SpatialCoordinateshp:0 < p 2j:Fin 3U:Set SpatialCoordinateshU:IsOpen UhpU:p โ US:Finset CuspCosetshrows:โ q โ U, 0 < q 2 โง โ r โ S, rowHeight (embeddedRow r) q < 1ht:Tendsto (fun t => Function.update p j t) (๐ (p j)) (๐ p)โข (Summable fun r => deriv (axisSlice (weightedHeightProfile F r) p j) (p j)) โง
HasDerivAt (axisSlice (heightPoincareField F) p j)
(โ' (r : CuspCosets), deriv (axisSlice (weightedHeightProfile F r) p j) (p j)) (p j)
have hn : โแถ t in ๐ (p j),Function.update p j tโU := ht (hU.mem_nhds hpU)F:โ โ โhzero:โ v โค 1, F v = 0hF:โ (v : โ), 0 < v โ ContDiffAt โ โ F vp:SpatialCoordinateshp:0 < p 2j:Fin 3U:Set SpatialCoordinateshU:IsOpen UhpU:p โ US:Finset CuspCosetshrows:โ q โ U, 0 < q 2 โง โ r โ S, rowHeight (embeddedRow r) q < 1ht:Tendsto (fun t => Function.update p j t) (๐ (p j)) (๐ p)hn:โแถ (t : โ) in ๐ (p j), Function.update p j t โ Uโข (Summable fun r => deriv (axisSlice (weightedHeightProfile F r) p j) (p j)) โง
HasDerivAt (axisSlice (heightPoincareField F) p j)
(โ' (r : CuspCosets), deriv (axisSlice (weightedHeightProfile F r) p j) (p j)) (p j)
have hz (r : CuspCosets) (hr : rโS) :
deriv (axisSlice (weightedHeightProfile F r) p j) (p j)=0 := by
have he : axisSlice (weightedHeightProfile F r) p j=แถ [๐ (p j)] (fun _ => 0) := byF:โ โ โhzero:โ v โค 1, F v = 0hF:โ (v : โ), 0 < v โ ContDiffAt โ โ F vp:SpatialCoordinateshp:0 < p 2j:Fin 3โข (Summable fun r => deriv (axisSlice (weightedHeightProfile F r) p j) (p j)) โง
HasDerivAt (axisSlice (heightPoincareField F) p j)
(โ' (r : CuspCosets), deriv (axisSlice (weightedHeightProfile F r) p j) (p j)) (p j)
filter_upwards [hn] with t htF:โ โ โhzero:โ v โค 1, F v = 0hF:โ (v : โ), 0 < v โ ContDiffAt โ โ F vp:SpatialCoordinateshp:0 < p 2j:Fin 3U:Set SpatialCoordinateshU:IsOpen UhpU:p โ US:Finset CuspCosetshrows:โ q โ U, 0 < q 2 โง โ r โ S, rowHeight (embeddedRow r) q < 1htโ:Tendsto (fun t => Function.update p j t) (๐ (p j)) (๐ p)hn:โแถ (t : โ) in ๐ (p j), Function.update p j t โ Ur:CuspCosetshr:r โ St:โht:Function.update p j t โ Uโข axisSlice (weightedHeightProfile F r) p j t = 0
change (cosetCharacter r)โปยน*F (rowHeight (embeddedRow r) (Function.update p j t))=0F:โ โ โhzero:โ v โค 1, F v = 0hF:โ (v : โ), 0 < v โ ContDiffAt โ โ F vp:SpatialCoordinateshp:0 < p 2j:Fin 3U:Set SpatialCoordinateshU:IsOpen UhpU:p โ US:Finset CuspCosetshrows:โ q โ U, 0 < q 2 โง โ r โ S, rowHeight (embeddedRow r) q < 1htโ:Tendsto (fun t => Function.update p j t) (๐ (p j)) (๐ p)hn:โแถ (t : โ) in ๐ (p j), Function.update p j t โ Ur:CuspCosetshr:r โ St:โht:Function.update p j t โ Uโข (cosetCharacter r)โปยน * F (rowHeight (embeddedRow r) (Function.update p j t)) = 0
rw [hzero _ ((hrows _ ht).2 r hr).le,F:โ โ โhzero:โ v โค 1, F v = 0hF:โ (v : โ), 0 < v โ ContDiffAt โ โ F vp:SpatialCoordinateshp:0 < p 2j:Fin 3U:Set SpatialCoordinateshU:IsOpen UhpU:p โ US:Finset CuspCosetshrows:โ q โ U, 0 < q 2 โง โ r โ S, rowHeight (embeddedRow r) q < 1htโ:Tendsto (fun t => Function.update p j t) (๐ (p j)) (๐ p)hn:โแถ (t : โ) in ๐ (p j), Function.update p j t โ Ur:CuspCosetshr:r โ St:โht:Function.update p j t โ Uโข (cosetCharacter r)โปยน * 0 = 0mul_zeroF:โ โ โhzero:โ v โค 1, F v = 0hF:โ (v : โ), 0 < v โ ContDiffAt โ โ F vp:SpatialCoordinateshp:0 < p 2j:Fin 3U:Set SpatialCoordinateshU:IsOpen UhpU:p โ US:Finset CuspCosetshrows:โ q โ U, 0 < q 2 โง โ r โ S, rowHeight (embeddedRow r) q < 1htโ:Tendsto (fun t => Function.update p j t) (๐ (p j)) (๐ p)hn:โแถ (t : โ) in ๐ (p j), Function.update p j t โ Ur:CuspCosetshr:r โ St:โht:Function.update p j t โ Uโข 0 = 0]F:โ โ โhzero:โ v โค 1, F v = 0hF:โ (v : โ), 0 < v โ ContDiffAt โ โ F vp:SpatialCoordinateshp:0 < p 2j:Fin 3U:Set SpatialCoordinateshU:IsOpen UhpU:p โ US:Finset CuspCosetshrows:โ q โ U, 0 < q 2 โง โ r โ S, rowHeight (embeddedRow r) q < 1ht:Tendsto (fun t => Function.update p j t) (๐ (p j)) (๐ p)hn:โแถ (t : โ) in ๐ (p j), Function.update p j t โ Ur:CuspCosetshr:r โ She:axisSlice (weightedHeightProfile F r) p j =แถ [๐ (p j)] fun x => 0โข deriv (axisSlice (weightedHeightProfile F r) p j) (p j) = 0
exact he.deriv_eq.trans (deriv_const _ _)F:โ โ โhzero:โ v โค 1, F v = 0hF:โ (v : โ), 0 < v โ ContDiffAt โ โ F vp:SpatialCoordinateshp:0 < p 2j:Fin 3U:Set SpatialCoordinateshU:IsOpen UhpU:p โ US:Finset CuspCosetshrows:โ q โ U, 0 < q 2 โง โ r โ S, rowHeight (embeddedRow r) q < 1ht:Tendsto (fun t => Function.update p j t) (๐ (p j)) (๐ p)hn:โแถ (t : โ) in ๐ (p j), Function.update p j t โ Uhz:โ r โ S, deriv (axisSlice (weightedHeightProfile F r) p j) (p j) = 0โข (Summable fun r => deriv (axisSlice (weightedHeightProfile F r) p j) (p j)) โง
HasDerivAt (axisSlice (heightPoincareField F) p j)
(โ' (r : CuspCosets), deriv (axisSlice (weightedHeightProfile F r) p j) (p j)) (p j)
refine โจsummable_of_ne_finset_zero hz,?_โฉF:โ โ โhzero:โ v โค 1, F v = 0hF:โ (v : โ), 0 < v โ ContDiffAt โ โ F vp:SpatialCoordinateshp:0 < p 2j:Fin 3U:Set SpatialCoordinateshU:IsOpen UhpU:p โ US:Finset CuspCosetshrows:โ q โ U, 0 < q 2 โง โ r โ S, rowHeight (embeddedRow r) q < 1ht:Tendsto (fun t => Function.update p j t) (๐ (p j)) (๐ p)hn:โแถ (t : โ) in ๐ (p j), Function.update p j t โ Uhz:โ r โ S, deriv (axisSlice (weightedHeightProfile F r) p j) (p j) = 0โข HasDerivAt (axisSlice (heightPoincareField F) p j)
(โ' (r : CuspCosets), deriv (axisSlice (weightedHeightProfile F r) p j) (p j)) (p j)
rw [tsum_eq_sum hzF:โ โ โhzero:โ v โค 1, F v = 0hF:โ (v : โ), 0 < v โ ContDiffAt โ โ F vp:SpatialCoordinateshp:0 < p 2j:Fin 3U:Set SpatialCoordinateshU:IsOpen UhpU:p โ US:Finset CuspCosetshrows:โ q โ U, 0 < q 2 โง โ r โ S, rowHeight (embeddedRow r) q < 1ht:Tendsto (fun t => Function.update p j t) (๐ (p j)) (๐ p)hn:โแถ (t : โ) in ๐ (p j), Function.update p j t โ Uhz:โ r โ S, deriv (axisSlice (weightedHeightProfile F r) p j) (p j) = 0โข HasDerivAt (axisSlice (heightPoincareField F) p j) (โ b โ S, deriv (axisSlice (weightedHeightProfile F b) p j) (p j))
(p j)]F:โ โ โhzero:โ v โค 1, F v = 0hF:โ (v : โ), 0 < v โ ContDiffAt โ โ F vp:SpatialCoordinateshp:0 < p 2j:Fin 3U:Set SpatialCoordinateshU:IsOpen UhpU:p โ US:Finset CuspCosetshrows:โ q โ U, 0 < q 2 โง โ r โ S, rowHeight (embeddedRow r) q < 1ht:Tendsto (fun t => Function.update p j t) (๐ (p j)) (๐ p)hn:โแถ (t : โ) in ๐ (p j), Function.update p j t โ Uhz:โ r โ S, deriv (axisSlice (weightedHeightProfile F r) p j) (p j) = 0โข HasDerivAt (axisSlice (heightPoincareField F) p j) (โ b โ S, deriv (axisSlice (weightedHeightProfile F b) p j) (p j))
(p j)
have hd := HasDerivAt.sum (u := S) (fun r hr =>
(weightedHeightProfile_axis_differentiable F hF r p hp j).hasDerivAt)F:โ โ โhzero:โ v โค 1, F v = 0hF:โ (v : โ), 0 < v โ ContDiffAt โ โ F vp:SpatialCoordinateshp:0 < p 2j:Fin 3U:Set SpatialCoordinateshU:IsOpen UhpU:p โ US:Finset CuspCosetshrows:โ q โ U, 0 < q 2 โง โ r โ S, rowHeight (embeddedRow r) q < 1ht:Tendsto (fun t => Function.update p j t) (๐ (p j)) (๐ p)hn:โแถ (t : โ) in ๐ (p j), Function.update p j t โ Uhz:โ r โ S, deriv (axisSlice (weightedHeightProfile F r) p j) (p j) = 0hd:HasDerivAt (โ i โ S, axisSlice (weightedHeightProfile F i) p j)
(โ i โ S, deriv (axisSlice (weightedHeightProfile F i) p j) (p j)) (p j)โข HasDerivAt (axisSlice (heightPoincareField F) p j) (โ b โ S, deriv (axisSlice (weightedHeightProfile F b) p j) (p j))
(p j)
apply hd.congr_of_eventuallyEqF:โ โ โhzero:โ v โค 1, F v = 0hF:โ (v : โ), 0 < v โ ContDiffAt โ โ F vp:SpatialCoordinateshp:0 < p 2j:Fin 3U:Set SpatialCoordinateshU:IsOpen UhpU:p โ US:Finset CuspCosetshrows:โ q โ U, 0 < q 2 โง โ r โ S, rowHeight (embeddedRow r) q < 1ht:Tendsto (fun t => Function.update p j t) (๐ (p j)) (๐ p)hn:โแถ (t : โ) in ๐ (p j), Function.update p j t โ Uhz:โ r โ S, deriv (axisSlice (weightedHeightProfile F r) p j) (p j) = 0hd:HasDerivAt (โ i โ S, axisSlice (weightedHeightProfile F i) p j)
(โ i โ S, deriv (axisSlice (weightedHeightProfile F i) p j) (p j)) (p j)โข axisSlice (heightPoincareField F) p j =แถ [๐ (p j)] โ i โ S, axisSlice (weightedHeightProfile F i) p j
filter_upwards [hn] with t htF:โ โ โhzero:โ v โค 1, F v = 0hF:โ (v : โ), 0 < v โ ContDiffAt โ โ F vp:SpatialCoordinateshp:0 < p 2j:Fin 3U:Set SpatialCoordinateshU:IsOpen UhpU:p โ US:Finset CuspCosetshrows:โ q โ U, 0 < q 2 โง โ r โ S, rowHeight (embeddedRow r) q < 1htโ:Tendsto (fun t => Function.update p j t) (๐ (p j)) (๐ p)hn:โแถ (t : โ) in ๐ (p j), Function.update p j t โ Uhz:โ r โ S, deriv (axisSlice (weightedHeightProfile F r) p j) (p j) = 0hd:HasDerivAt (โ i โ S, axisSlice (weightedHeightProfile F i) p j)
(โ i โ S, deriv (axisSlice (weightedHeightProfile F i) p j) (p j)) (p j)t:โht:Function.update p j t โ Uโข axisSlice (heightPoincareField F) p j t = (โ i โ S, axisSlice (weightedHeightProfile F i) p j) t
simp only [Finset.sum_apply]F:โ โ โhzero:โ v โค 1, F v = 0hF:โ (v : โ), 0 < v โ ContDiffAt โ โ F vp:SpatialCoordinateshp:0 < p 2j:Fin 3U:Set SpatialCoordinateshU:IsOpen UhpU:p โ US:Finset CuspCosetshrows:โ q โ U, 0 < q 2 โง โ r โ S, rowHeight (embeddedRow r) q < 1htโ:Tendsto (fun t => Function.update p j t) (๐ (p j)) (๐ p)hn:โแถ (t : โ) in ๐ (p j), Function.update p j t โ Uhz:โ r โ S, deriv (axisSlice (weightedHeightProfile F r) p j) (p j) = 0hd:HasDerivAt (โ i โ S, axisSlice (weightedHeightProfile F i) p j)
(โ i โ S, deriv (axisSlice (weightedHeightProfile F i) p j) (p j)) (p j)t:โht:Function.update p j t โ Uโข axisSlice (heightPoincareField F) p j t = โ c โ S, axisSlice (weightedHeightProfile F c) p j t
change (โ'r,weightedHeightProfile F r (Function.update p j t))=
โrโS,weightedHeightProfile F r (Function.update p j t)F:โ โ โhzero:โ v โค 1, F v = 0hF:โ (v : โ), 0 < v โ ContDiffAt โ โ F vp:SpatialCoordinateshp:0 < p 2j:Fin 3U:Set SpatialCoordinateshU:IsOpen UhpU:p โ US:Finset CuspCosetshrows:โ q โ U, 0 < q 2 โง โ r โ S, rowHeight (embeddedRow r) q < 1htโ:Tendsto (fun t => Function.update p j t) (๐ (p j)) (๐ p)hn:โแถ (t : โ) in ๐ (p j), Function.update p j t โ Uhz:โ r โ S, deriv (axisSlice (weightedHeightProfile F r) p j) (p j) = 0hd:HasDerivAt (โ i โ S, axisSlice (weightedHeightProfile F i) p j)
(โ i โ S, deriv (axisSlice (weightedHeightProfile F i) p j) (p j)) (p j)t:โht:Function.update p j t โ Uโข โ' (r : CuspCosets), weightedHeightProfile F r (Function.update p j t) =
โ r โ S, weightedHeightProfile F r (Function.update p j t)
apply tsum_eq_sumF:โ โ โhzero:โ v โค 1, F v = 0hF:โ (v : โ), 0 < v โ ContDiffAt โ โ F vp:SpatialCoordinateshp:0 < p 2j:Fin 3U:Set SpatialCoordinateshU:IsOpen UhpU:p โ US:Finset CuspCosetshrows:โ q โ U, 0 < q 2 โง โ r โ S, rowHeight (embeddedRow r) q < 1htโ:Tendsto (fun t => Function.update p j t) (๐ (p j)) (๐ p)hn:โแถ (t : โ) in ๐ (p j), Function.update p j t โ Uhz:โ r โ S, deriv (axisSlice (weightedHeightProfile F r) p j) (p j) = 0hd:HasDerivAt (โ i โ S, axisSlice (weightedHeightProfile F i) p j)
(โ i โ S, deriv (axisSlice (weightedHeightProfile F i) p j) (p j)) (p j)t:โht:Function.update p j t โ Uโข โ b โ S, weightedHeightProfile F b (Function.update p j t) = 0
intro r hrF:โ โ โhzero:โ v โค 1, F v = 0hF:โ (v : โ), 0 < v โ ContDiffAt โ โ F vp:SpatialCoordinateshp:0 < p 2j:Fin 3U:Set SpatialCoordinateshU:IsOpen UhpU:p โ US:Finset CuspCosetshrows:โ q โ U, 0 < q 2 โง โ r โ S, rowHeight (embeddedRow r) q < 1htโ:Tendsto (fun t => Function.update p j t) (๐ (p j)) (๐ p)hn:โแถ (t : โ) in ๐ (p j), Function.update p j t โ Uhz:โ r โ S, deriv (axisSlice (weightedHeightProfile F r) p j) (p j) = 0hd:HasDerivAt (โ i โ S, axisSlice (weightedHeightProfile F i) p j)
(โ i โ S, deriv (axisSlice (weightedHeightProfile F i) p j) (p j)) (p j)t:โht:Function.update p j t โ Ur:CuspCosetshr:r โ Sโข weightedHeightProfile F r (Function.update p j t) = 0
change (cosetCharacter r)โปยน*F (rowHeight (embeddedRow r) (Function.update p j t))=0F:โ โ โhzero:โ v โค 1, F v = 0hF:โ (v : โ), 0 < v โ ContDiffAt โ โ F vp:SpatialCoordinateshp:0 < p 2j:Fin 3U:Set SpatialCoordinateshU:IsOpen UhpU:p โ US:Finset CuspCosetshrows:โ q โ U, 0 < q 2 โง โ r โ S, rowHeight (embeddedRow r) q < 1htโ:Tendsto (fun t => Function.update p j t) (๐ (p j)) (๐ p)hn:โแถ (t : โ) in ๐ (p j), Function.update p j t โ Uhz:โ r โ S, deriv (axisSlice (weightedHeightProfile F r) p j) (p j) = 0hd:HasDerivAt (โ i โ S, axisSlice (weightedHeightProfile F i) p j)
(โ i โ S, deriv (axisSlice (weightedHeightProfile F i) p j) (p j)) (p j)t:โht:Function.update p j t โ Ur:CuspCosetshr:r โ Sโข (cosetCharacter r)โปยน * F (rowHeight (embeddedRow r) (Function.update p j t)) = 0
rw [hzero _ ((hrows _ ht).2 r hr).le,F:โ โ โhzero:โ v โค 1, F v = 0hF:โ (v : โ), 0 < v โ ContDiffAt โ โ F vp:SpatialCoordinateshp:0 < p 2j:Fin 3U:Set SpatialCoordinateshU:IsOpen UhpU:p โ US:Finset CuspCosetshrows:โ q โ U, 0 < q 2 โง โ r โ S, rowHeight (embeddedRow r) q < 1htโ:Tendsto (fun t => Function.update p j t) (๐ (p j)) (๐ p)hn:โแถ (t : โ) in ๐ (p j), Function.update p j t โ Uhz:โ r โ S, deriv (axisSlice (weightedHeightProfile F r) p j) (p j) = 0hd:HasDerivAt (โ i โ S, axisSlice (weightedHeightProfile F i) p j)
(โ i โ S, deriv (axisSlice (weightedHeightProfile F i) p j) (p j)) (p j)t:โht:Function.update p j t โ Ur:CuspCosetshr:r โ Sโข (cosetCharacter r)โปยน * 0 = 0mul_zeroF:โ โ โhzero:โ v โค 1, F v = 0hF:โ (v : โ), 0 < v โ ContDiffAt โ โ F vp:SpatialCoordinateshp:0 < p 2j:Fin 3U:Set SpatialCoordinateshU:IsOpen UhpU:p โ US:Finset CuspCosetshrows:โ q โ U, 0 < q 2 โง โ r โ S, rowHeight (embeddedRow r) q < 1htโ:Tendsto (fun t => Function.update p j t) (๐ (p j)) (๐ p)hn:โแถ (t : โ) in ๐ (p j), Function.update p j t โ Uhz:โ r โ S, deriv (axisSlice (weightedHeightProfile F r) p j) (p j) = 0hd:HasDerivAt (โ i โ S, axisSlice (weightedHeightProfile F i) p j)
(โ i โ S, deriv (axisSlice (weightedHeightProfile F i) p j) (p j)) (p j)t:โht:Function.update p j t โ Ur:CuspCosetshr:r โ Sโข 0 = 0]All goals completed! ๐lemma weightedRemainder_axis_deriv (a b : โ) (s : โ) (r : CuspCosets)
(p : SpatialCoordinates) (hp : 0<p 2) (j : Fin 3) :
deriv (axisSlice (weightedHeightProfile (cuspRemainderProfile a b s) r) p j) (p j)=
deriv (axisSlice (smoothSummand s r) p j) (p j)-
deriv (axisSlice (weightedHeightProfile (cuspSeedProfile a b s) r) p j) (p j) := bya:โb:โs:โr:CuspCosetsp:SpatialCoordinateshp:0 < p 2j:Fin 3โข deriv (axisSlice (weightedHeightProfile (cuspRemainderProfile a b s) r) p j) (p j) =
deriv (axisSlice (smoothSummand s r) p j) (p j) -
deriv (axisSlice (weightedHeightProfile (cuspSeedProfile a b s) r) p j) (p j)
have hn : โแถ t in ๐ (p j),0<(Function.update p j t) 2 := by
apply ((continuous_apply 2).comp (continuous_axis_update p j)).continuousAt.eventually_const_lta:โb:โs:โr:CuspCosetsp:SpatialCoordinateshp:0 < p 2j:Fin 3โข 0 < ((fun p => p 2) โ fun t => Function.update p j t) (p j)
simpa only [Function.comp_apply,Function.update_eq_self] using hpa:โb:โs:โr:CuspCosetsp:SpatialCoordinateshp:0 < p 2j:Fin 3hn:โแถ (t : โ) in ๐ (p j), 0 < Function.update p j t 2โข deriv (axisSlice (weightedHeightProfile (cuspRemainderProfile a b s) r) p j) (p j) =
deriv (axisSlice (smoothSummand s r) p j) (p j) -
deriv (axisSlice (weightedHeightProfile (cuspSeedProfile a b s) r) p j) (p j)
have he : axisSlice (weightedHeightProfile (cuspRemainderProfile a b s) r) p j=แถ [๐ (p j)]
(fun t => axisSlice (smoothSummand s r) p j t-
axisSlice (weightedHeightProfile (cuspSeedProfile a b s) r) p j t) := by
filter_upwards [hn] with t hta:โb:โs:โr:CuspCosetsp:SpatialCoordinateshp:0 < p 2j:Fin 3hn:โแถ (t : โ) in ๐ (p j), 0 < Function.update p j t 2t:โht:0 < Function.update p j t 2โข axisSlice (weightedHeightProfile (cuspRemainderProfile a b s) r) p j t =
axisSlice (smoothSummand s r) p j t - axisSlice (weightedHeightProfile (cuspSeedProfile a b s) r) p j t
simp only [axisSlice,weightedHeightProfile,cuspRemainderProfile,smoothSummand]a:โb:โs:โr:CuspCosetsp:SpatialCoordinateshp:0 < p 2j:Fin 3hn:โแถ (t : โ) in ๐ (p j), 0 < Function.update p j t 2t:โht:0 < Function.update p j t 2โข (cosetCharacter r)โปยน *
(positiveHeightPower s (rowHeight (embeddedRow r) (Function.update p j t)) -
cuspSeedProfile a b s (rowHeight (embeddedRow r) (Function.update p j t))) =
(cosetCharacter r)โปยน * rowSmoothPower s (embeddedRow r) (Function.update p j t) -
(cosetCharacter r)โปยน * cuspSeedProfile a b s (rowHeight (embeddedRow r) (Function.update p j t))
rw [rowSmoothPower_eq_height s _ (embeddedRow_ne_zero r) _ ht,a:โb:โs:โr:CuspCosetsp:SpatialCoordinateshp:0 < p 2j:Fin 3hn:โแถ (t : โ) in ๐ (p j), 0 < Function.update p j t 2t:โht:0 < Function.update p j t 2โข (cosetCharacter r)โปยน *
(positiveHeightPower s (rowHeight (embeddedRow r) (Function.update p j t)) -
cuspSeedProfile a b s (rowHeight (embeddedRow r) (Function.update p j t))) =
(cosetCharacter r)โปยน * โ(rowHeight (embeddedRow r) (Function.update p j t)) ^ s -
(cosetCharacter r)โปยน * cuspSeedProfile a b s (rowHeight (embeddedRow r) (Function.update p j t))
positiveHeightPower_eq_cpow s _ (rowHeight_pos _ (embeddedRow_ne_zero r) _ ht)a:โb:โs:โr:CuspCosetsp:SpatialCoordinateshp:0 < p 2j:Fin 3hn:โแถ (t : โ) in ๐ (p j), 0 < Function.update p j t 2t:โht:0 < Function.update p j t 2โข (cosetCharacter r)โปยน *
(โ(rowHeight (embeddedRow r) (Function.update p j t)) ^ s -
cuspSeedProfile a b s (rowHeight (embeddedRow r) (Function.update p j t))) =
(cosetCharacter r)โปยน * โ(rowHeight (embeddedRow r) (Function.update p j t)) ^ s -
(cosetCharacter r)โปยน * cuspSeedProfile a b s (rowHeight (embeddedRow r) (Function.update p j t))]a:โb:โs:โr:CuspCosetsp:SpatialCoordinateshp:0 < p 2j:Fin 3hn:โแถ (t : โ) in ๐ (p j), 0 < Function.update p j t 2t:โht:0 < Function.update p j t 2โข (cosetCharacter r)โปยน *
(โ(rowHeight (embeddedRow r) (Function.update p j t)) ^ s -
cuspSeedProfile a b s (rowHeight (embeddedRow r) (Function.update p j t))) =
(cosetCharacter r)โปยน * โ(rowHeight (embeddedRow r) (Function.update p j t)) ^ s -
(cosetCharacter r)โปยน * cuspSeedProfile a b s (rowHeight (embeddedRow r) (Function.update p j t))
ringa:โb:โs:โr:CuspCosetsp:SpatialCoordinateshp:0 < p 2j:Fin 3hn:โแถ (t : โ) in ๐ (p j), 0 < Function.update p j t 2he:axisSlice (weightedHeightProfile (cuspRemainderProfile a b s) r) p j =แถ [๐ (p j)] fun t =>
axisSlice (smoothSummand s r) p j t - axisSlice (weightedHeightProfile (cuspSeedProfile a b s) r) p j tโข deriv (axisSlice (weightedHeightProfile (cuspRemainderProfile a b s) r) p j) (p j) =
deriv (axisSlice (smoothSummand s r) p j) (p j) -
deriv (axisSlice (weightedHeightProfile (cuspSeedProfile a b s) r) p j) (p j)
rw [he.deriv_eqa:โb:โs:โr:CuspCosetsp:SpatialCoordinateshp:0 < p 2j:Fin 3hn:โแถ (t : โ) in ๐ (p j), 0 < Function.update p j t 2he:axisSlice (weightedHeightProfile (cuspRemainderProfile a b s) r) p j =แถ [๐ (p j)] fun t =>
axisSlice (smoothSummand s r) p j t - axisSlice (weightedHeightProfile (cuspSeedProfile a b s) r) p j tโข deriv (fun t => axisSlice (smoothSummand s r) p j t - axisSlice (weightedHeightProfile (cuspSeedProfile a b s) r) p j t)
(p j) =
deriv (axisSlice (smoothSummand s r) p j) (p j) -
deriv (axisSlice (weightedHeightProfile (cuspSeedProfile a b s) r) p j) (p j)]a:โb:โs:โr:CuspCosetsp:SpatialCoordinateshp:0 < p 2j:Fin 3hn:โแถ (t : โ) in ๐ (p j), 0 < Function.update p j t 2he:axisSlice (weightedHeightProfile (cuspRemainderProfile a b s) r) p j =แถ [๐ (p j)] fun t =>
axisSlice (smoothSummand s r) p j t - axisSlice (weightedHeightProfile (cuspSeedProfile a b s) r) p j tโข deriv (fun t => axisSlice (smoothSummand s r) p j t - axisSlice (weightedHeightProfile (cuspSeedProfile a b s) r) p j t)
(p j) =
deriv (axisSlice (smoothSummand s r) p j) (p j) -
deriv (axisSlice (weightedHeightProfile (cuspSeedProfile a b s) r) p j) (p j)
exact deriv_sub (smooth_axis_differentiable s r p hp j)
(weightedHeightProfile_axis_differentiable _ (cuspSeedProfile_contDiffAt a b s) r p hp j)All goals completed! ๐def eisensteinRemainderField (a b : โ) (s : โ) (p : SpatialCoordinates) : โ :=
smoothEisenstein s p-smoothCuspSeedField a b s ptheorem eisensteinRemainder_axis_termwise (a b : โ) (ha : 1<a) (hab : a<b)
(s : โ) (hs : 2<s.re) (p : SpatialCoordinates) (hp : 0<p 2) (j : Fin 3) :
Summable (fun r => deriv (axisSlice (weightedHeightProfile (cuspRemainderProfile a b s) r) p j) (p j)) โง
HasDerivAt (axisSlice (eisensteinRemainderField a b s) p j)
(โ'r,deriv (axisSlice (weightedHeightProfile (cuspRemainderProfile a b s) r) p j) (p j)) (p j) := bya:โb:โha:1 < ahab:a < bs:โhs:2 < s.rep:SpatialCoordinateshp:0 < p 2j:Fin 3โข (Summable fun r => deriv (axisSlice (weightedHeightProfile (cuspRemainderProfile a b s) r) p j) (p j)) โง
HasDerivAt (axisSlice (eisensteinRemainderField a b s) p j)
(โ' (r : CuspCosets), deriv (axisSlice (weightedHeightProfile (cuspRemainderProfile a b s) r) p j) (p j)) (p j)
have hE := eisenstein_axis_termwise s hs p hp ja:โb:โha:1 < ahab:a < bs:โhs:2 < s.rep:SpatialCoordinateshp:0 < p 2j:Fin 3hE:(Summable fun r => deriv (axisSlice (smoothSummand s r) p j) (p j)) โง
(Summable fun r => deriv (deriv (axisSlice (smoothSummand s r) p j)) (p j)) โง
HasDerivAt (axisSlice (smoothEisenstein s) p j)
(โ' (r : CuspCosets), deriv (axisSlice (smoothSummand s r) p j) (p j)) (p j) โง
HasDerivAt (deriv (axisSlice (smoothEisenstein s) p j))
(โ' (r : CuspCosets), deriv (deriv (axisSlice (smoothSummand s r) p j)) (p j)) (p j)โข (Summable fun r => deriv (axisSlice (weightedHeightProfile (cuspRemainderProfile a b s) r) p j) (p j)) โง
HasDerivAt (axisSlice (eisensteinRemainderField a b s) p j)
(โ' (r : CuspCosets), deriv (axisSlice (weightedHeightProfile (cuspRemainderProfile a b s) r) p j) (p j)) (p j)
have hS := heightPoincare_axis_termwise (cuspSeedProfile a b s)
(fun v hv => cuspSeedProfile_zero a b s v hab (hv.trans ha.le))
(cuspSeedProfile_contDiffAt a b s) p hp ja:โb:โha:1 < ahab:a < bs:โhs:2 < s.rep:SpatialCoordinateshp:0 < p 2j:Fin 3hE:(Summable fun r => deriv (axisSlice (smoothSummand s r) p j) (p j)) โง
(Summable fun r => deriv (deriv (axisSlice (smoothSummand s r) p j)) (p j)) โง
HasDerivAt (axisSlice (smoothEisenstein s) p j)
(โ' (r : CuspCosets), deriv (axisSlice (smoothSummand s r) p j) (p j)) (p j) โง
HasDerivAt (deriv (axisSlice (smoothEisenstein s) p j))
(โ' (r : CuspCosets), deriv (deriv (axisSlice (smoothSummand s r) p j)) (p j)) (p j)hS:(Summable fun r => deriv (axisSlice (weightedHeightProfile (cuspSeedProfile a b s) r) p j) (p j)) โง
HasDerivAt (axisSlice (heightPoincareField (cuspSeedProfile a b s)) p j)
(โ' (r : CuspCosets), deriv (axisSlice (weightedHeightProfile (cuspSeedProfile a b s) r) p j) (p j)) (p j)โข (Summable fun r => deriv (axisSlice (weightedHeightProfile (cuspRemainderProfile a b s) r) p j) (p j)) โง
HasDerivAt (axisSlice (eisensteinRemainderField a b s) p j)
(โ' (r : CuspCosets), deriv (axisSlice (weightedHeightProfile (cuspRemainderProfile a b s) r) p j) (p j)) (p j)
have hcoeff : (โ'r,deriv (axisSlice (weightedHeightProfile (cuspRemainderProfile a b s) r) p j) (p j))=
(โ'r,deriv (axisSlice (smoothSummand s r) p j) (p j))-
โ'r,deriv (axisSlice (weightedHeightProfile (cuspSeedProfile a b s) r) p j) (p j) := by
simp_rw [a:โb:โha:1 < ahab:a < bs:โhs:2 < s.rep:SpatialCoordinateshp:0 < p 2j:Fin 3hE:(Summable fun r => deriv (axisSlice (smoothSummand s r) p j) (p j)) โง
(Summable fun r => deriv (deriv (axisSlice (smoothSummand s r) p j)) (p j)) โง
HasDerivAt (axisSlice (smoothEisenstein s) p j)
(โ' (r : CuspCosets), deriv (axisSlice (smoothSummand s r) p j) (p j)) (p j) โง
HasDerivAt (deriv (axisSlice (smoothEisenstein s) p j))
(โ' (r : CuspCosets), deriv (deriv (axisSlice (smoothSummand s r) p j)) (p j)) (p j)hS:(Summable fun r => deriv (axisSlice (weightedHeightProfile (cuspSeedProfile a b s) r) p j) (p j)) โง
HasDerivAt (axisSlice (heightPoincareField (cuspSeedProfile a b s)) p j)
(โ' (r : CuspCosets), deriv (axisSlice (weightedHeightProfile (cuspSeedProfile a b s) r) p j) (p j)) (p j)โข โ' (r : CuspCosets), deriv (axisSlice (weightedHeightProfile (cuspRemainderProfile a b s) r) p j) (p j) =
โ' (r : CuspCosets), deriv (axisSlice (smoothSummand s r) p j) (p j) -
โ' (r : CuspCosets), deriv (axisSlice (weightedHeightProfile (cuspSeedProfile a b s) r) p j) (p j)weightedRemainder_axis_deriv a b s _ p hp ja:โb:โha:1 < ahab:a < bs:โhs:2 < s.rep:SpatialCoordinateshp:0 < p 2j:Fin 3hE:(Summable fun r => deriv (axisSlice (smoothSummand s r) p j) (p j)) โง
(Summable fun r => deriv (deriv (axisSlice (smoothSummand s r) p j)) (p j)) โง
HasDerivAt (axisSlice (smoothEisenstein s) p j)
(โ' (r : CuspCosets), deriv (axisSlice (smoothSummand s r) p j) (p j)) (p j) โง
HasDerivAt (deriv (axisSlice (smoothEisenstein s) p j))
(โ' (r : CuspCosets), deriv (deriv (axisSlice (smoothSummand s r) p j)) (p j)) (p j)hS:(Summable fun r => deriv (axisSlice (weightedHeightProfile (cuspSeedProfile a b s) r) p j) (p j)) โง
HasDerivAt (axisSlice (heightPoincareField (cuspSeedProfile a b s)) p j)
(โ' (r : CuspCosets), deriv (axisSlice (weightedHeightProfile (cuspSeedProfile a b s) r) p j) (p j)) (p j)โข โ' (r : CuspCosets),
(deriv (axisSlice (smoothSummand s r) p j) (p j) -
deriv (axisSlice (weightedHeightProfile (cuspSeedProfile a b s) r) p j) (p j)) =
โ' (r : CuspCosets), deriv (axisSlice (smoothSummand s r) p j) (p j) -
โ' (r : CuspCosets), deriv (axisSlice (weightedHeightProfile (cuspSeedProfile a b s) r) p j) (p j)]
exact hE.1.tsum_sub hS.1a:โb:โha:1 < ahab:a < bs:โhs:2 < s.rep:SpatialCoordinateshp:0 < p 2j:Fin 3hE:(Summable fun r => deriv (axisSlice (smoothSummand s r) p j) (p j)) โง
(Summable fun r => deriv (deriv (axisSlice (smoothSummand s r) p j)) (p j)) โง
HasDerivAt (axisSlice (smoothEisenstein s) p j)
(โ' (r : CuspCosets), deriv (axisSlice (smoothSummand s r) p j) (p j)) (p j) โง
HasDerivAt (deriv (axisSlice (smoothEisenstein s) p j))
(โ' (r : CuspCosets), deriv (deriv (axisSlice (smoothSummand s r) p j)) (p j)) (p j)hS:(Summable fun r => deriv (axisSlice (weightedHeightProfile (cuspSeedProfile a b s) r) p j) (p j)) โง
HasDerivAt (axisSlice (heightPoincareField (cuspSeedProfile a b s)) p j)
(โ' (r : CuspCosets), deriv (axisSlice (weightedHeightProfile (cuspSeedProfile a b s) r) p j) (p j)) (p j)hcoeff:โ' (r : CuspCosets), deriv (axisSlice (weightedHeightProfile (cuspRemainderProfile a b s) r) p j) (p j) =
โ' (r : CuspCosets), deriv (axisSlice (smoothSummand s r) p j) (p j) -
โ' (r : CuspCosets), deriv (axisSlice (weightedHeightProfile (cuspSeedProfile a b s) r) p j) (p j)โข (Summable fun r => deriv (axisSlice (weightedHeightProfile (cuspRemainderProfile a b s) r) p j) (p j)) โง
HasDerivAt (axisSlice (eisensteinRemainderField a b s) p j)
(โ' (r : CuspCosets), deriv (axisSlice (weightedHeightProfile (cuspRemainderProfile a b s) r) p j) (p j)) (p j)
refine โจ(hE.1.sub hS.1).congr (fun r => (weightedRemainder_axis_deriv a b s r p hp j).symm),?_โฉa:โb:โha:1 < ahab:a < bs:โhs:2 < s.rep:SpatialCoordinateshp:0 < p 2j:Fin 3hE:(Summable fun r => deriv (axisSlice (smoothSummand s r) p j) (p j)) โง
(Summable fun r => deriv (deriv (axisSlice (smoothSummand s r) p j)) (p j)) โง
HasDerivAt (axisSlice (smoothEisenstein s) p j)
(โ' (r : CuspCosets), deriv (axisSlice (smoothSummand s r) p j) (p j)) (p j) โง
HasDerivAt (deriv (axisSlice (smoothEisenstein s) p j))
(โ' (r : CuspCosets), deriv (deriv (axisSlice (smoothSummand s r) p j)) (p j)) (p j)hS:(Summable fun r => deriv (axisSlice (weightedHeightProfile (cuspSeedProfile a b s) r) p j) (p j)) โง
HasDerivAt (axisSlice (heightPoincareField (cuspSeedProfile a b s)) p j)
(โ' (r : CuspCosets), deriv (axisSlice (weightedHeightProfile (cuspSeedProfile a b s) r) p j) (p j)) (p j)hcoeff:โ' (r : CuspCosets), deriv (axisSlice (weightedHeightProfile (cuspRemainderProfile a b s) r) p j) (p j) =
โ' (r : CuspCosets), deriv (axisSlice (smoothSummand s r) p j) (p j) -
โ' (r : CuspCosets), deriv (axisSlice (weightedHeightProfile (cuspSeedProfile a b s) r) p j) (p j)โข HasDerivAt (axisSlice (eisensteinRemainderField a b s) p j)
(โ' (r : CuspCosets), deriv (axisSlice (weightedHeightProfile (cuspRemainderProfile a b s) r) p j) (p j)) (p j)
rw [hcoeffa:โb:โha:1 < ahab:a < bs:โhs:2 < s.rep:SpatialCoordinateshp:0 < p 2j:Fin 3hE:(Summable fun r => deriv (axisSlice (smoothSummand s r) p j) (p j)) โง
(Summable fun r => deriv (deriv (axisSlice (smoothSummand s r) p j)) (p j)) โง
HasDerivAt (axisSlice (smoothEisenstein s) p j)
(โ' (r : CuspCosets), deriv (axisSlice (smoothSummand s r) p j) (p j)) (p j) โง
HasDerivAt (deriv (axisSlice (smoothEisenstein s) p j))
(โ' (r : CuspCosets), deriv (deriv (axisSlice (smoothSummand s r) p j)) (p j)) (p j)hS:(Summable fun r => deriv (axisSlice (weightedHeightProfile (cuspSeedProfile a b s) r) p j) (p j)) โง
HasDerivAt (axisSlice (heightPoincareField (cuspSeedProfile a b s)) p j)
(โ' (r : CuspCosets), deriv (axisSlice (weightedHeightProfile (cuspSeedProfile a b s) r) p j) (p j)) (p j)hcoeff:โ' (r : CuspCosets), deriv (axisSlice (weightedHeightProfile (cuspRemainderProfile a b s) r) p j) (p j) =
โ' (r : CuspCosets), deriv (axisSlice (smoothSummand s r) p j) (p j) -
โ' (r : CuspCosets), deriv (axisSlice (weightedHeightProfile (cuspSeedProfile a b s) r) p j) (p j)โข HasDerivAt (axisSlice (eisensteinRemainderField a b s) p j)
(โ' (r : CuspCosets), deriv (axisSlice (smoothSummand s r) p j) (p j) -
โ' (r : CuspCosets), deriv (axisSlice (weightedHeightProfile (cuspSeedProfile a b s) r) p j) (p j))
(p j)]a:โb:โha:1 < ahab:a < bs:โhs:2 < s.rep:SpatialCoordinateshp:0 < p 2j:Fin 3hE:(Summable fun r => deriv (axisSlice (smoothSummand s r) p j) (p j)) โง
(Summable fun r => deriv (deriv (axisSlice (smoothSummand s r) p j)) (p j)) โง
HasDerivAt (axisSlice (smoothEisenstein s) p j)
(โ' (r : CuspCosets), deriv (axisSlice (smoothSummand s r) p j) (p j)) (p j) โง
HasDerivAt (deriv (axisSlice (smoothEisenstein s) p j))
(โ' (r : CuspCosets), deriv (deriv (axisSlice (smoothSummand s r) p j)) (p j)) (p j)hS:(Summable fun r => deriv (axisSlice (weightedHeightProfile (cuspSeedProfile a b s) r) p j) (p j)) โง
HasDerivAt (axisSlice (heightPoincareField (cuspSeedProfile a b s)) p j)
(โ' (r : CuspCosets), deriv (axisSlice (weightedHeightProfile (cuspSeedProfile a b s) r) p j) (p j)) (p j)hcoeff:โ' (r : CuspCosets), deriv (axisSlice (weightedHeightProfile (cuspRemainderProfile a b s) r) p j) (p j) =
โ' (r : CuspCosets), deriv (axisSlice (smoothSummand s r) p j) (p j) -
โ' (r : CuspCosets), deriv (axisSlice (weightedHeightProfile (cuspSeedProfile a b s) r) p j) (p j)โข HasDerivAt (axisSlice (eisensteinRemainderField a b s) p j)
(โ' (r : CuspCosets), deriv (axisSlice (smoothSummand s r) p j) (p j) -
โ' (r : CuspCosets), deriv (axisSlice (weightedHeightProfile (cuspSeedProfile a b s) r) p j) (p j))
(p j)
apply (hE.2.2.1.sub hS.2).congr_of_eventuallyEqa:โb:โha:1 < ahab:a < bs:โhs:2 < s.rep:SpatialCoordinateshp:0 < p 2j:Fin 3hE:(Summable fun r => deriv (axisSlice (smoothSummand s r) p j) (p j)) โง
(Summable fun r => deriv (deriv (axisSlice (smoothSummand s r) p j)) (p j)) โง
HasDerivAt (axisSlice (smoothEisenstein s) p j)
(โ' (r : CuspCosets), deriv (axisSlice (smoothSummand s r) p j) (p j)) (p j) โง
HasDerivAt (deriv (axisSlice (smoothEisenstein s) p j))
(โ' (r : CuspCosets), deriv (deriv (axisSlice (smoothSummand s r) p j)) (p j)) (p j)hS:(Summable fun r => deriv (axisSlice (weightedHeightProfile (cuspSeedProfile a b s) r) p j) (p j)) โง
HasDerivAt (axisSlice (heightPoincareField (cuspSeedProfile a b s)) p j)
(โ' (r : CuspCosets), deriv (axisSlice (weightedHeightProfile (cuspSeedProfile a b s) r) p j) (p j)) (p j)hcoeff:โ' (r : CuspCosets), deriv (axisSlice (weightedHeightProfile (cuspRemainderProfile a b s) r) p j) (p j) =
โ' (r : CuspCosets), deriv (axisSlice (smoothSummand s r) p j) (p j) -
โ' (r : CuspCosets), deriv (axisSlice (weightedHeightProfile (cuspSeedProfile a b s) r) p j) (p j)โข axisSlice (eisensteinRemainderField a b s) p j =แถ [๐ (p j)]
axisSlice (smoothEisenstein s) p j - axisSlice (heightPoincareField (cuspSeedProfile a b s)) p j
have hn : โแถ t in ๐ (p j),0<(Function.update p j t) 2 := bya:โb:โha:1 < ahab:a < bs:โhs:2 < s.rep:SpatialCoordinateshp:0 < p 2j:Fin 3โข (Summable fun r => deriv (axisSlice (weightedHeightProfile (cuspRemainderProfile a b s) r) p j) (p j)) โง
HasDerivAt (axisSlice (eisensteinRemainderField a b s) p j)
(โ' (r : CuspCosets), deriv (axisSlice (weightedHeightProfile (cuspRemainderProfile a b s) r) p j) (p j)) (p j)
apply ((continuous_apply 2).comp (continuous_axis_update p j)).continuousAt.eventually_const_lta:โb:โha:1 < ahab:a < bs:โhs:2 < s.rep:SpatialCoordinateshp:0 < p 2j:Fin 3hE:(Summable fun r => deriv (axisSlice (smoothSummand s r) p j) (p j)) โง
(Summable fun r => deriv (deriv (axisSlice (smoothSummand s r) p j)) (p j)) โง
HasDerivAt (axisSlice (smoothEisenstein s) p j)
(โ' (r : CuspCosets), deriv (axisSlice (smoothSummand s r) p j) (p j)) (p j) โง
HasDerivAt (deriv (axisSlice (smoothEisenstein s) p j))
(โ' (r : CuspCosets), deriv (deriv (axisSlice (smoothSummand s r) p j)) (p j)) (p j)hS:(Summable fun r => deriv (axisSlice (weightedHeightProfile (cuspSeedProfile a b s) r) p j) (p j)) โง
HasDerivAt (axisSlice (heightPoincareField (cuspSeedProfile a b s)) p j)
(โ' (r : CuspCosets), deriv (axisSlice (weightedHeightProfile (cuspSeedProfile a b s) r) p j) (p j)) (p j)hcoeff:โ' (r : CuspCosets), deriv (axisSlice (weightedHeightProfile (cuspRemainderProfile a b s) r) p j) (p j) =
โ' (r : CuspCosets), deriv (axisSlice (smoothSummand s r) p j) (p j) -
โ' (r : CuspCosets), deriv (axisSlice (weightedHeightProfile (cuspSeedProfile a b s) r) p j) (p j)โข 0 < ((fun p => p 2) โ fun t => Function.update p j t) (p j)
simpa only [Function.comp_apply,Function.update_eq_self] using hpa:โb:โha:1 < ahab:a < bs:โhs:2 < s.rep:SpatialCoordinateshp:0 < p 2j:Fin 3hE:(Summable fun r => deriv (axisSlice (smoothSummand s r) p j) (p j)) โง
(Summable fun r => deriv (deriv (axisSlice (smoothSummand s r) p j)) (p j)) โง
HasDerivAt (axisSlice (smoothEisenstein s) p j)
(โ' (r : CuspCosets), deriv (axisSlice (smoothSummand s r) p j) (p j)) (p j) โง
HasDerivAt (deriv (axisSlice (smoothEisenstein s) p j))
(โ' (r : CuspCosets), deriv (deriv (axisSlice (smoothSummand s r) p j)) (p j)) (p j)hS:(Summable fun r => deriv (axisSlice (weightedHeightProfile (cuspSeedProfile a b s) r) p j) (p j)) โง
HasDerivAt (axisSlice (heightPoincareField (cuspSeedProfile a b s)) p j)
(โ' (r : CuspCosets), deriv (axisSlice (weightedHeightProfile (cuspSeedProfile a b s) r) p j) (p j)) (p j)hcoeff:โ' (r : CuspCosets), deriv (axisSlice (weightedHeightProfile (cuspRemainderProfile a b s) r) p j) (p j) =
โ' (r : CuspCosets), deriv (axisSlice (smoothSummand s r) p j) (p j) -
โ' (r : CuspCosets), deriv (axisSlice (weightedHeightProfile (cuspSeedProfile a b s) r) p j) (p j)hn:โแถ (t : โ) in ๐ (p j), 0 < Function.update p j t 2โข axisSlice (eisensteinRemainderField a b s) p j =แถ [๐ (p j)]
axisSlice (smoothEisenstein s) p j - axisSlice (heightPoincareField (cuspSeedProfile a b s)) p j
filter_upwards [hn] with t hta:โb:โha:1 < ahab:a < bs:โhs:2 < s.rep:SpatialCoordinateshp:0 < p 2j:Fin 3hE:(Summable fun r => deriv (axisSlice (smoothSummand s r) p j) (p j)) โง
(Summable fun r => deriv (deriv (axisSlice (smoothSummand s r) p j)) (p j)) โง
HasDerivAt (axisSlice (smoothEisenstein s) p j)
(โ' (r : CuspCosets), deriv (axisSlice (smoothSummand s r) p j) (p j)) (p j) โง
HasDerivAt (deriv (axisSlice (smoothEisenstein s) p j))
(โ' (r : CuspCosets), deriv (deriv (axisSlice (smoothSummand s r) p j)) (p j)) (p j)hS:(Summable fun r => deriv (axisSlice (weightedHeightProfile (cuspSeedProfile a b s) r) p j) (p j)) โง
HasDerivAt (axisSlice (heightPoincareField (cuspSeedProfile a b s)) p j)
(โ' (r : CuspCosets), deriv (axisSlice (weightedHeightProfile (cuspSeedProfile a b s) r) p j) (p j)) (p j)hcoeff:โ' (r : CuspCosets), deriv (axisSlice (weightedHeightProfile (cuspRemainderProfile a b s) r) p j) (p j) =
โ' (r : CuspCosets), deriv (axisSlice (smoothSummand s r) p j) (p j) -
โ' (r : CuspCosets), deriv (axisSlice (weightedHeightProfile (cuspSeedProfile a b s) r) p j) (p j)hn:โแถ (t : โ) in ๐ (p j), 0 < Function.update p j t 2t:โht:0 < Function.update p j t 2โข axisSlice (eisensteinRemainderField a b s) p j t =
(axisSlice (smoothEisenstein s) p j - axisSlice (heightPoincareField (cuspSeedProfile a b s)) p j) t
change smoothEisenstein s _-smoothCuspSeedField a b s _=
smoothEisenstein s _-heightPoincareField (cuspSeedProfile a b s) _a:โb:โha:1 < ahab:a < bs:โhs:2 < s.rep:SpatialCoordinateshp:0 < p 2j:Fin 3hE:(Summable fun r => deriv (axisSlice (smoothSummand s r) p j) (p j)) โง
(Summable fun r => deriv (deriv (axisSlice (smoothSummand s r) p j)) (p j)) โง
HasDerivAt (axisSlice (smoothEisenstein s) p j)
(โ' (r : CuspCosets), deriv (axisSlice (smoothSummand s r) p j) (p j)) (p j) โง
HasDerivAt (deriv (axisSlice (smoothEisenstein s) p j))
(โ' (r : CuspCosets), deriv (deriv (axisSlice (smoothSummand s r) p j)) (p j)) (p j)hS:(Summable fun r => deriv (axisSlice (weightedHeightProfile (cuspSeedProfile a b s) r) p j) (p j)) โง
HasDerivAt (axisSlice (heightPoincareField (cuspSeedProfile a b s)) p j)
(โ' (r : CuspCosets), deriv (axisSlice (weightedHeightProfile (cuspSeedProfile a b s) r) p j) (p j)) (p j)hcoeff:โ' (r : CuspCosets), deriv (axisSlice (weightedHeightProfile (cuspRemainderProfile a b s) r) p j) (p j) =
โ' (r : CuspCosets), deriv (axisSlice (smoothSummand s r) p j) (p j) -
โ' (r : CuspCosets), deriv (axisSlice (weightedHeightProfile (cuspSeedProfile a b s) r) p j) (p j)hn:โแถ (t : โ) in ๐ (p j), 0 < Function.update p j t 2t:โht:0 < Function.update p j t 2โข smoothEisenstein s (Function.update p j t) - smoothCuspSeedField a b s (Function.update p j t) =
smoothEisenstein s (Function.update p j t) - heightPoincareField (cuspSeedProfile a b s) (Function.update p j t)
rw [smoothCuspSeedField_eq a b s ha hab _ hta:โb:โha:1 < ahab:a < bs:โhs:2 < s.rep:SpatialCoordinateshp:0 < p 2j:Fin 3hE:(Summable fun r => deriv (axisSlice (smoothSummand s r) p j) (p j)) โง
(Summable fun r => deriv (deriv (axisSlice (smoothSummand s r) p j)) (p j)) โง
HasDerivAt (axisSlice (smoothEisenstein s) p j)
(โ' (r : CuspCosets), deriv (axisSlice (smoothSummand s r) p j) (p j)) (p j) โง
HasDerivAt (deriv (axisSlice (smoothEisenstein s) p j))
(โ' (r : CuspCosets), deriv (deriv (axisSlice (smoothSummand s r) p j)) (p j)) (p j)hS:(Summable fun r => deriv (axisSlice (weightedHeightProfile (cuspSeedProfile a b s) r) p j) (p j)) โง
HasDerivAt (axisSlice (heightPoincareField (cuspSeedProfile a b s)) p j)
(โ' (r : CuspCosets), deriv (axisSlice (weightedHeightProfile (cuspSeedProfile a b s) r) p j) (p j)) (p j)hcoeff:โ' (r : CuspCosets), deriv (axisSlice (weightedHeightProfile (cuspRemainderProfile a b s) r) p j) (p j) =
โ' (r : CuspCosets), deriv (axisSlice (smoothSummand s r) p j) (p j) -
โ' (r : CuspCosets), deriv (axisSlice (weightedHeightProfile (cuspSeedProfile a b s) r) p j) (p j)hn:โแถ (t : โ) in ๐ (p j), 0 < Function.update p j t 2t:โht:0 < Function.update p j t 2โข smoothEisenstein s (Function.update p j t) - heightPoincareField (cuspSeedProfile a b s) (Function.update p j t) =
smoothEisenstein s (Function.update p j t) - heightPoincareField (cuspSeedProfile a b s) (Function.update p j t)]All goals completed! ๐end CubicEisensteinopen Filter MeasureTheoryopen scoped BigOperators Classical Topology ContDiff Manifoldnamespace CubicEisensteinlemma weightedRemainder_scaled_deriv_bound (a b : โ) (hab : a<b) (s : โ)
(C : โ) (hC0 : 0โคC) (hC : โv,|v*deriv (cuspTransition a b) v|โคC)
(r : CuspCosets) (p : SpatialCoordinates) (hp : 0<p 2) (j : Fin 3) :
โ(p 2:โ)*deriv (axisSlice (weightedHeightProfile (cuspRemainderProfile a b s) r) p j) (p j)โโค
(โsโ+C)*โcuspRemainderProfile (b+1) (b+2) s (rowHeight (embeddedRow r) p)โ := bya:โb:โhab:a < bs:โC:โhC0:0 โค ChC:โ (v : โ), |v * deriv (cuspTransition a b) v| โค Cr:CuspCosetsp:SpatialCoordinateshp:0 < p 2j:Fin 3โข โโ(p 2) * deriv (axisSlice (weightedHeightProfile (cuspRemainderProfile a b s) r) p j) (p j)โ โค
(โsโ + C) * โcuspRemainderProfile (b + 1) (b + 2) s (rowHeight (embeddedRow r) p)โ
let g : SpatialCoordinatesโโ:=fun q => cuspRemainderProfile a b s (rowHeight (embeddedRow r) q)a:โb:โhab:a < bs:โC:โhC0:0 โค ChC:โ (v : โ), |v * deriv (cuspTransition a b) v| โค Cr:CuspCosetsp:SpatialCoordinateshp:0 < p 2j:Fin 3g:SpatialCoordinates โ โ := fun q => cuspRemainderProfile a b s (rowHeight (embeddedRow r) q)โข โโ(p 2) * deriv (axisSlice (weightedHeightProfile (cuspRemainderProfile a b s) r) p j) (p j)โ โค
(โsโ + C) * โcuspRemainderProfile (b + 1) (b + 2) s (rowHeight (embeddedRow r) p)โ
have hd := (rowProfile_axis_derivatives (cuspRemainderProfile a b s)
(cuspRemainderProfile_contDiffAt a b s) (embeddedRow r) (embeddedRow_ne_zero r) p hp j).1a:โb:โhab:a < bs:โC:โhC0:0 โค ChC:โ (v : โ), |v * deriv (cuspTransition a b) v| โค Cr:CuspCosetsp:SpatialCoordinateshp:0 < p 2j:Fin 3g:SpatialCoordinates โ โ := fun q => cuspRemainderProfile a b s (rowHeight (embeddedRow r) q)hd:HasDerivAt (axisSlice (fun q => cuspRemainderProfile a b s (rowHeight (embeddedRow r) q)) p j)
(deriv (cuspRemainderProfile a b s) (rowHeight (embeddedRow r) p) * โ(rowHeight (embeddedRow r) p) *
โ(rowLogD (embeddedRow r) p j))
(p j)โข โโ(p 2) * deriv (axisSlice (weightedHeightProfile (cuspRemainderProfile a b s) r) p j) (p j)โ โค
(โsโ + C) * โcuspRemainderProfile (b + 1) (b + 2) s (rowHeight (embeddedRow r) p)โ
have hw := hd.const_mul (cosetCharacter r)โปยนa:โb:โhab:a < bs:โC:โhC0:0 โค ChC:โ (v : โ), |v * deriv (cuspTransition a b) v| โค Cr:CuspCosetsp:SpatialCoordinateshp:0 < p 2j:Fin 3g:SpatialCoordinates โ โ := fun q => cuspRemainderProfile a b s (rowHeight (embeddedRow r) q)hd:HasDerivAt (axisSlice (fun q => cuspRemainderProfile a b s (rowHeight (embeddedRow r) q)) p j)
(deriv (cuspRemainderProfile a b s) (rowHeight (embeddedRow r) p) * โ(rowHeight (embeddedRow r) p) *
โ(rowLogD (embeddedRow r) p j))
(p j)hw:HasDerivAt
(fun y => (cosetCharacter r)โปยน * axisSlice (fun q => cuspRemainderProfile a b s (rowHeight (embeddedRow r) q)) p j y)
((cosetCharacter r)โปยน *
(deriv (cuspRemainderProfile a b s) (rowHeight (embeddedRow r) p) * โ(rowHeight (embeddedRow r) p) *
โ(rowLogD (embeddedRow r) p j)))
(p j)โข โโ(p 2) * deriv (axisSlice (weightedHeightProfile (cuspRemainderProfile a b s) r) p j) (p j)โ โค
(โsโ + C) * โcuspRemainderProfile (b + 1) (b + 2) s (rowHeight (embeddedRow r) p)โ
have he : deriv (axisSlice (weightedHeightProfile (cuspRemainderProfile a b s) r) p j) (p j)=
(cosetCharacter r)โปยน*deriv (axisSlice g p j) (p j) := by
change deriv (fun t => (cosetCharacter r)โปยน*axisSlice g p j t) (p j)=_a:โb:โhab:a < bs:โC:โhC0:0 โค ChC:โ (v : โ), |v * deriv (cuspTransition a b) v| โค Cr:CuspCosetsp:SpatialCoordinateshp:0 < p 2j:Fin 3g:SpatialCoordinates โ โ := fun q => cuspRemainderProfile a b s (rowHeight (embeddedRow r) q)hd:HasDerivAt (axisSlice (fun q => cuspRemainderProfile a b s (rowHeight (embeddedRow r) q)) p j)
(deriv (cuspRemainderProfile a b s) (rowHeight (embeddedRow r) p) * โ(rowHeight (embeddedRow r) p) *
โ(rowLogD (embeddedRow r) p j))
(p j)hw:HasDerivAt
(fun y => (cosetCharacter r)โปยน * axisSlice (fun q => cuspRemainderProfile a b s (rowHeight (embeddedRow r) q)) p j y)
((cosetCharacter r)โปยน *
(deriv (cuspRemainderProfile a b s) (rowHeight (embeddedRow r) p) * โ(rowHeight (embeddedRow r) p) *
โ(rowLogD (embeddedRow r) p j)))
(p j)โข deriv (fun t => (cosetCharacter r)โปยน * axisSlice g p j t) (p j) = (cosetCharacter r)โปยน * deriv (axisSlice g p j) (p j)
rw [hw.deriv,a:โb:โhab:a < bs:โC:โhC0:0 โค ChC:โ (v : โ), |v * deriv (cuspTransition a b) v| โค Cr:CuspCosetsp:SpatialCoordinateshp:0 < p 2j:Fin 3g:SpatialCoordinates โ โ := fun q => cuspRemainderProfile a b s (rowHeight (embeddedRow r) q)hd:HasDerivAt (axisSlice (fun q => cuspRemainderProfile a b s (rowHeight (embeddedRow r) q)) p j)
(deriv (cuspRemainderProfile a b s) (rowHeight (embeddedRow r) p) * โ(rowHeight (embeddedRow r) p) *
โ(rowLogD (embeddedRow r) p j))
(p j)hw:HasDerivAt
(fun y => (cosetCharacter r)โปยน * axisSlice (fun q => cuspRemainderProfile a b s (rowHeight (embeddedRow r) q)) p j y)
((cosetCharacter r)โปยน *
(deriv (cuspRemainderProfile a b s) (rowHeight (embeddedRow r) p) * โ(rowHeight (embeddedRow r) p) *
โ(rowLogD (embeddedRow r) p j)))
(p j)โข (cosetCharacter r)โปยน *
(deriv (cuspRemainderProfile a b s) (rowHeight (embeddedRow r) p) * โ(rowHeight (embeddedRow r) p) *
โ(rowLogD (embeddedRow r) p j)) =
(cosetCharacter r)โปยน * deriv (axisSlice g p j) (p j)hd.deriva:โb:โhab:a < bs:โC:โhC0:0 โค ChC:โ (v : โ), |v * deriv (cuspTransition a b) v| โค Cr:CuspCosetsp:SpatialCoordinateshp:0 < p 2j:Fin 3g:SpatialCoordinates โ โ := fun q => cuspRemainderProfile a b s (rowHeight (embeddedRow r) q)hd:HasDerivAt (axisSlice (fun q => cuspRemainderProfile a b s (rowHeight (embeddedRow r) q)) p j)
(deriv (cuspRemainderProfile a b s) (rowHeight (embeddedRow r) p) * โ(rowHeight (embeddedRow r) p) *
โ(rowLogD (embeddedRow r) p j))
(p j)hw:HasDerivAt
(fun y => (cosetCharacter r)โปยน * axisSlice (fun q => cuspRemainderProfile a b s (rowHeight (embeddedRow r) q)) p j y)
((cosetCharacter r)โปยน *
(deriv (cuspRemainderProfile a b s) (rowHeight (embeddedRow r) p) * โ(rowHeight (embeddedRow r) p) *
โ(rowLogD (embeddedRow r) p j)))
(p j)โข (cosetCharacter r)โปยน *
(deriv (cuspRemainderProfile a b s) (rowHeight (embeddedRow r) p) * โ(rowHeight (embeddedRow r) p) *
โ(rowLogD (embeddedRow r) p j)) =
(cosetCharacter r)โปยน *
(deriv (cuspRemainderProfile a b s) (rowHeight (embeddedRow r) p) * โ(rowHeight (embeddedRow r) p) *
โ(rowLogD (embeddedRow r) p j))]a:โb:โhab:a < bs:โC:โhC0:0 โค ChC:โ (v : โ), |v * deriv (cuspTransition a b) v| โค Cr:CuspCosetsp:SpatialCoordinateshp:0 < p 2j:Fin 3g:SpatialCoordinates โ โ := fun q => cuspRemainderProfile a b s (rowHeight (embeddedRow r) q)hd:HasDerivAt (axisSlice (fun q => cuspRemainderProfile a b s (rowHeight (embeddedRow r) q)) p j)
(deriv (cuspRemainderProfile a b s) (rowHeight (embeddedRow r) p) * โ(rowHeight (embeddedRow r) p) *
โ(rowLogD (embeddedRow r) p j))
(p j)hw:HasDerivAt
(fun y => (cosetCharacter r)โปยน * axisSlice (fun q => cuspRemainderProfile a b s (rowHeight (embeddedRow r) q)) p j y)
((cosetCharacter r)โปยน *
(deriv (cuspRemainderProfile a b s) (rowHeight (embeddedRow r) p) * โ(rowHeight (embeddedRow r) p) *
โ(rowLogD (embeddedRow r) p j)))
(p j)he:deriv (axisSlice (weightedHeightProfile (cuspRemainderProfile a b s) r) p j) (p j) =
(cosetCharacter r)โปยน * deriv (axisSlice g p j) (p j)โข โโ(p 2) * deriv (axisSlice (weightedHeightProfile (cuspRemainderProfile a b s) r) p j) (p j)โ โค
(โsโ + C) * โcuspRemainderProfile (b + 1) (b + 2) s (rowHeight (embeddedRow r) p)โ
rw [hea:โb:โhab:a < bs:โC:โhC0:0 โค ChC:โ (v : โ), |v * deriv (cuspTransition a b) v| โค Cr:CuspCosetsp:SpatialCoordinateshp:0 < p 2j:Fin 3g:SpatialCoordinates โ โ := fun q => cuspRemainderProfile a b s (rowHeight (embeddedRow r) q)hd:HasDerivAt (axisSlice (fun q => cuspRemainderProfile a b s (rowHeight (embeddedRow r) q)) p j)
(deriv (cuspRemainderProfile a b s) (rowHeight (embeddedRow r) p) * โ(rowHeight (embeddedRow r) p) *
โ(rowLogD (embeddedRow r) p j))
(p j)hw:HasDerivAt
(fun y => (cosetCharacter r)โปยน * axisSlice (fun q => cuspRemainderProfile a b s (rowHeight (embeddedRow r) q)) p j y)
((cosetCharacter r)โปยน *
(deriv (cuspRemainderProfile a b s) (rowHeight (embeddedRow r) p) * โ(rowHeight (embeddedRow r) p) *
โ(rowLogD (embeddedRow r) p j)))
(p j)he:deriv (axisSlice (weightedHeightProfile (cuspRemainderProfile a b s) r) p j) (p j) =
(cosetCharacter r)โปยน * deriv (axisSlice g p j) (p j)โข โโ(p 2) * ((cosetCharacter r)โปยน * deriv (axisSlice g p j) (p j))โ โค
(โsโ + C) * โcuspRemainderProfile (b + 1) (b + 2) s (rowHeight (embeddedRow r) p)โ]a:โb:โhab:a < bs:โC:โhC0:0 โค ChC:โ (v : โ), |v * deriv (cuspTransition a b) v| โค Cr:CuspCosetsp:SpatialCoordinateshp:0 < p 2j:Fin 3g:SpatialCoordinates โ โ := fun q => cuspRemainderProfile a b s (rowHeight (embeddedRow r) q)hd:HasDerivAt (axisSlice (fun q => cuspRemainderProfile a b s (rowHeight (embeddedRow r) q)) p j)
(deriv (cuspRemainderProfile a b s) (rowHeight (embeddedRow r) p) * โ(rowHeight (embeddedRow r) p) *
โ(rowLogD (embeddedRow r) p j))
(p j)hw:HasDerivAt
(fun y => (cosetCharacter r)โปยน * axisSlice (fun q => cuspRemainderProfile a b s (rowHeight (embeddedRow r) q)) p j y)
((cosetCharacter r)โปยน *
(deriv (cuspRemainderProfile a b s) (rowHeight (embeddedRow r) p) * โ(rowHeight (embeddedRow r) p) *
โ(rowLogD (embeddedRow r) p j)))
(p j)he:deriv (axisSlice (weightedHeightProfile (cuspRemainderProfile a b s) r) p j) (p j) =
(cosetCharacter r)โปยน * deriv (axisSlice g p j) (p j)โข โโ(p 2) * ((cosetCharacter r)โปยน * deriv (axisSlice g p j) (p j))โ โค
(โsโ + C) * โcuspRemainderProfile (b + 1) (b + 2) s (rowHeight (embeddedRow r) p)โ
calc
โ(p 2:โ)*((cosetCharacter r)โปยน*deriv (axisSlice g p j) (p j))โ
= โ(cosetCharacter r)โปยน*((p 2:โ)*deriv (axisSlice g p j) (p j))โ := bya:โb:โhab:a < bs:โC:โhC0:0 โค ChC:โ (v : โ), |v * deriv (cuspTransition a b) v| โค Cr:CuspCosetsp:SpatialCoordinateshp:0 < p 2j:Fin 3g:SpatialCoordinates โ โ := fun q => cuspRemainderProfile a b s (rowHeight (embeddedRow r) q)hd:HasDerivAt (axisSlice (fun q => cuspRemainderProfile a b s (rowHeight (embeddedRow r) q)) p j)
(deriv (cuspRemainderProfile a b s) (rowHeight (embeddedRow r) p) * โ(rowHeight (embeddedRow r) p) *
โ(rowLogD (embeddedRow r) p j))
(p j)hw:HasDerivAt
(fun y => (cosetCharacter r)โปยน * axisSlice (fun q => cuspRemainderProfile a b s (rowHeight (embeddedRow r) q)) p j y)
((cosetCharacter r)โปยน *
(deriv (cuspRemainderProfile a b s) (rowHeight (embeddedRow r) p) * โ(rowHeight (embeddedRow r) p) *
โ(rowLogD (embeddedRow r) p j)))
(p j)he:deriv (axisSlice (weightedHeightProfile (cuspRemainderProfile a b s) r) p j) (p j) =
(cosetCharacter r)โปยน * deriv (axisSlice g p j) (p j)โข โโ(p 2) * ((cosetCharacter r)โปยน * deriv (axisSlice g p j) (p j))โ =
โ(cosetCharacter r)โปยน * (โ(p 2) * deriv (axisSlice g p j) (p j))โ congr 1a:โb:โhab:a < bs:โC:โhC0:0 โค ChC:โ (v : โ), |v * deriv (cuspTransition a b) v| โค Cr:CuspCosetsp:SpatialCoordinateshp:0 < p 2j:Fin 3g:SpatialCoordinates โ โ := fun q => cuspRemainderProfile a b s (rowHeight (embeddedRow r) q)hd:HasDerivAt (axisSlice (fun q => cuspRemainderProfile a b s (rowHeight (embeddedRow r) q)) p j)
(deriv (cuspRemainderProfile a b s) (rowHeight (embeddedRow r) p) * โ(rowHeight (embeddedRow r) p) *
โ(rowLogD (embeddedRow r) p j))
(p j)hw:HasDerivAt
(fun y => (cosetCharacter r)โปยน * axisSlice (fun q => cuspRemainderProfile a b s (rowHeight (embeddedRow r) q)) p j y)
((cosetCharacter r)โปยน *
(deriv (cuspRemainderProfile a b s) (rowHeight (embeddedRow r) p) * โ(rowHeight (embeddedRow r) p) *
โ(rowLogD (embeddedRow r) p j)))
(p j)he:deriv (axisSlice (weightedHeightProfile (cuspRemainderProfile a b s) r) p j) (p j) =
(cosetCharacter r)โปยน * deriv (axisSlice g p j) (p j)โข โ(p 2) * ((cosetCharacter r)โปยน * deriv (axisSlice g p j) (p j)) =
(cosetCharacter r)โปยน * (โ(p 2) * deriv (axisSlice g p j) (p j)); ringAll goals completed! ๐
_ = โ(p 2:โ)*deriv (axisSlice g p j) (p j)โ := bya:โb:โhab:a < bs:โC:โhC0:0 โค ChC:โ (v : โ), |v * deriv (cuspTransition a b) v| โค Cr:CuspCosetsp:SpatialCoordinateshp:0 < p 2j:Fin 3g:SpatialCoordinates โ โ := fun q => cuspRemainderProfile a b s (rowHeight (embeddedRow r) q)hd:HasDerivAt (axisSlice (fun q => cuspRemainderProfile a b s (rowHeight (embeddedRow r) q)) p j)
(deriv (cuspRemainderProfile a b s) (rowHeight (embeddedRow r) p) * โ(rowHeight (embeddedRow r) p) *
โ(rowLogD (embeddedRow r) p j))
(p j)hw:HasDerivAt
(fun y => (cosetCharacter r)โปยน * axisSlice (fun q => cuspRemainderProfile a b s (rowHeight (embeddedRow r) q)) p j y)
((cosetCharacter r)โปยน *
(deriv (cuspRemainderProfile a b s) (rowHeight (embeddedRow r) p) * โ(rowHeight (embeddedRow r) p) *
โ(rowLogD (embeddedRow r) p j)))
(p j)he:deriv (axisSlice (weightedHeightProfile (cuspRemainderProfile a b s) r) p j) (p j) =
(cosetCharacter r)โปยน * deriv (axisSlice g p j) (p j)โข โ(cosetCharacter r)โปยน * (โ(p 2) * deriv (axisSlice g p j) (p j))โ = โโ(p 2) * deriv (axisSlice g p j) (p j)โ
rw [norm_mul,a:โb:โhab:a < bs:โC:โhC0:0 โค ChC:โ (v : โ), |v * deriv (cuspTransition a b) v| โค Cr:CuspCosetsp:SpatialCoordinateshp:0 < p 2j:Fin 3g:SpatialCoordinates โ โ := fun q => cuspRemainderProfile a b s (rowHeight (embeddedRow r) q)hd:HasDerivAt (axisSlice (fun q => cuspRemainderProfile a b s (rowHeight (embeddedRow r) q)) p j)
(deriv (cuspRemainderProfile a b s) (rowHeight (embeddedRow r) p) * โ(rowHeight (embeddedRow r) p) *
โ(rowLogD (embeddedRow r) p j))
(p j)hw:HasDerivAt
(fun y => (cosetCharacter r)โปยน * axisSlice (fun q => cuspRemainderProfile a b s (rowHeight (embeddedRow r) q)) p j y)
((cosetCharacter r)โปยน *
(deriv (cuspRemainderProfile a b s) (rowHeight (embeddedRow r) p) * โ(rowHeight (embeddedRow r) p) *
โ(rowLogD (embeddedRow r) p j)))
(p j)he:deriv (axisSlice (weightedHeightProfile (cuspRemainderProfile a b s) r) p j) (p j) =
(cosetCharacter r)โปยน * deriv (axisSlice g p j) (p j)โข โ(cosetCharacter r)โปยนโ * โโ(p 2) * deriv (axisSlice g p j) (p j)โ = โโ(p 2) * deriv (axisSlice g p j) (p j)โnorm_inv,a:โb:โhab:a < bs:โC:โhC0:0 โค ChC:โ (v : โ), |v * deriv (cuspTransition a b) v| โค Cr:CuspCosetsp:SpatialCoordinateshp:0 < p 2j:Fin 3g:SpatialCoordinates โ โ := fun q => cuspRemainderProfile a b s (rowHeight (embeddedRow r) q)hd:HasDerivAt (axisSlice (fun q => cuspRemainderProfile a b s (rowHeight (embeddedRow r) q)) p j)
(deriv (cuspRemainderProfile a b s) (rowHeight (embeddedRow r) p) * โ(rowHeight (embeddedRow r) p) *
โ(rowLogD (embeddedRow r) p j))
(p j)hw:HasDerivAt
(fun y => (cosetCharacter r)โปยน * axisSlice (fun q => cuspRemainderProfile a b s (rowHeight (embeddedRow r) q)) p j y)
((cosetCharacter r)โปยน *
(deriv (cuspRemainderProfile a b s) (rowHeight (embeddedRow r) p) * โ(rowHeight (embeddedRow r) p) *
โ(rowLogD (embeddedRow r) p j)))
(p j)he:deriv (axisSlice (weightedHeightProfile (cuspRemainderProfile a b s) r) p j) (p j) =
(cosetCharacter r)โปยน * deriv (axisSlice g p j) (p j)โข โcosetCharacter rโโปยน * โโ(p 2) * deriv (axisSlice g p j) (p j)โ = โโ(p 2) * deriv (axisSlice g p j) (p j)โnorm_cosetCharacter,a:โb:โhab:a < bs:โC:โhC0:0 โค ChC:โ (v : โ), |v * deriv (cuspTransition a b) v| โค Cr:CuspCosetsp:SpatialCoordinateshp:0 < p 2j:Fin 3g:SpatialCoordinates โ โ := fun q => cuspRemainderProfile a b s (rowHeight (embeddedRow r) q)hd:HasDerivAt (axisSlice (fun q => cuspRemainderProfile a b s (rowHeight (embeddedRow r) q)) p j)
(deriv (cuspRemainderProfile a b s) (rowHeight (embeddedRow r) p) * โ(rowHeight (embeddedRow r) p) *
โ(rowLogD (embeddedRow r) p j))
(p j)hw:HasDerivAt
(fun y => (cosetCharacter r)โปยน * axisSlice (fun q => cuspRemainderProfile a b s (rowHeight (embeddedRow r) q)) p j y)
((cosetCharacter r)โปยน *
(deriv (cuspRemainderProfile a b s) (rowHeight (embeddedRow r) p) * โ(rowHeight (embeddedRow r) p) *
โ(rowLogD (embeddedRow r) p j)))
(p j)he:deriv (axisSlice (weightedHeightProfile (cuspRemainderProfile a b s) r) p j) (p j) =
(cosetCharacter r)โปยน * deriv (axisSlice g p j) (p j)โข 1โปยน * โโ(p 2) * deriv (axisSlice g p j) (p j)โ = โโ(p 2) * deriv (axisSlice g p j) (p j)โinv_one,a:โb:โhab:a < bs:โC:โhC0:0 โค ChC:โ (v : โ), |v * deriv (cuspTransition a b) v| โค Cr:CuspCosetsp:SpatialCoordinateshp:0 < p 2j:Fin 3g:SpatialCoordinates โ โ := fun q => cuspRemainderProfile a b s (rowHeight (embeddedRow r) q)hd:HasDerivAt (axisSlice (fun q => cuspRemainderProfile a b s (rowHeight (embeddedRow r) q)) p j)
(deriv (cuspRemainderProfile a b s) (rowHeight (embeddedRow r) p) * โ(rowHeight (embeddedRow r) p) *
โ(rowLogD (embeddedRow r) p j))
(p j)hw:HasDerivAt
(fun y => (cosetCharacter r)โปยน * axisSlice (fun q => cuspRemainderProfile a b s (rowHeight (embeddedRow r) q)) p j y)
((cosetCharacter r)โปยน *
(deriv (cuspRemainderProfile a b s) (rowHeight (embeddedRow r) p) * โ(rowHeight (embeddedRow r) p) *
โ(rowLogD (embeddedRow r) p j)))
(p j)he:deriv (axisSlice (weightedHeightProfile (cuspRemainderProfile a b s) r) p j) (p j) =
(cosetCharacter r)โปยน * deriv (axisSlice g p j) (p j)โข 1 * โโ(p 2) * deriv (axisSlice g p j) (p j)โ = โโ(p 2) * deriv (axisSlice g p j) (p j)โone_mula:โb:โhab:a < bs:โC:โhC0:0 โค ChC:โ (v : โ), |v * deriv (cuspTransition a b) v| โค Cr:CuspCosetsp:SpatialCoordinateshp:0 < p 2j:Fin 3g:SpatialCoordinates โ โ := fun q => cuspRemainderProfile a b s (rowHeight (embeddedRow r) q)hd:HasDerivAt (axisSlice (fun q => cuspRemainderProfile a b s (rowHeight (embeddedRow r) q)) p j)
(deriv (cuspRemainderProfile a b s) (rowHeight (embeddedRow r) p) * โ(rowHeight (embeddedRow r) p) *
โ(rowLogD (embeddedRow r) p j))
(p j)hw:HasDerivAt
(fun y => (cosetCharacter r)โปยน * axisSlice (fun q => cuspRemainderProfile a b s (rowHeight (embeddedRow r) q)) p j y)
((cosetCharacter r)โปยน *
(deriv (cuspRemainderProfile a b s) (rowHeight (embeddedRow r) p) * โ(rowHeight (embeddedRow r) p) *
โ(rowLogD (embeddedRow r) p j)))
(p j)he:deriv (axisSlice (weightedHeightProfile (cuspRemainderProfile a b s) r) p j) (p j) =
(cosetCharacter r)โปยน * deriv (axisSlice g p j) (p j)โข โโ(p 2) * deriv (axisSlice g p j) (p j)โ = โโ(p 2) * deriv (axisSlice g p j) (p j)โ]All goals completed! ๐
_ โค _ := cuspRemainder_row_scaled_deriv_aux_bound a b hab s C hC0 hC _ (embeddedRow_ne_zero r) p hp jtheorem eisensteinRemainder_scaled_axis_bound (a b : โ) (ha : 1<a) (hab : a<b)
(s : โ) (hs : 4<s.re) :
โB : โ,0โคB โง โp : SpatialCoordinates,0<p 2โโj : Fin 3,
โ(p 2:โ)*deriv (axisSlice (eisensteinRemainderField a b s) p j) (p j)โโคB := bya:โb:โha:1 < ahab:a < bs:โhs:4 < s.reโข โ B,
0 โค B โง
โ (p : SpatialCoordinates),
0 < p 2 โ โ (j : Fin 3), โโ(p 2) * deriv (axisSlice (eisensteinRemainderField a b s) p j) (p j)โ โค B
obtain โจC,hC0,hCโฉ := cuspTransition_euler_bounded a b haba:โb:โha:1 < ahab:a < bs:โhs:4 < s.reC:โhC0:0 โค ChC:โ (v : โ), |v * deriv (cuspTransition a b) v| โค Cโข โ B,
0 โค B โง
โ (p : SpatialCoordinates),
0 < p 2 โ โ (j : Fin 3), โโ(p 2) * deriv (axisSlice (eisensteinRemainderField a b s) p j) (p j)โ โค B
refine โจ(โsโ+C)*eisensteinRemainderBound (b+2) s,
mul_nonneg (add_nonneg (norm_nonneg s) hC0) (eisensteinRemainderBound_nonneg _ _),?_โฉa:โb:โha:1 < ahab:a < bs:โhs:4 < s.reC:โhC0:0 โค ChC:โ (v : โ), |v * deriv (cuspTransition a b) v| โค Cโข โ (p : SpatialCoordinates),
0 < p 2 โ
โ (j : Fin 3),
โโ(p 2) * deriv (axisSlice (eisensteinRemainderField a b s) p j) (p j)โ โค
(โsโ + C) * eisensteinRemainderBound (b + 2) s
intro p hp ja:โb:โha:1 < ahab:a < bs:โhs:4 < s.reC:โhC0:0 โค ChC:โ (v : โ), |v * deriv (cuspTransition a b) v| โค Cp:SpatialCoordinateshp:0 < p 2j:Fin 3โข โโ(p 2) * deriv (axisSlice (eisensteinRemainderField a b s) p j) (p j)โ โค (โsโ + C) * eisensteinRemainderBound (b + 2) s
have hA : Summable (fun r : CuspCosets =>
โcuspRemainderProfile (b+1) (b+2) s (rowHeight (embeddedRow r) p)โ) โง
(โ'r : CuspCosets,โcuspRemainderProfile (b+1) (b+2) s (rowHeight (embeddedRow r) p)โ)โค
eisensteinRemainderBound (b+2) s := bya:โb:โha:1 < ahab:a < bs:โhs:4 < s.reโข โ B,
0 โค B โง
โ (p : SpatialCoordinates),
0 < p 2 โ โ (j : Fin 3), โโ(p 2) * deriv (axisSlice (eisensteinRemainderField a b s) p j) (p j)โ โค B
simpa only [cosetHeight_upperPoint_rowHeight] using
cuspRemainder_absolute_bound (b+1) (b+2) (bya:โb:โha:1 < ahab:a < bs:โhs:4 < s.reC:โhC0:0 โค ChC:โ (v : โ), |v * deriv (cuspTransition a b) v| โค Cp:SpatialCoordinateshp:0 < p 2j:Fin 3โข 1 โค b + 1 linarithAll goals completed! ๐) (bya:โb:โha:1 < ahab:a < bs:โhs:4 < s.reC:โhC0:0 โค ChC:โ (v : โ), |v * deriv (cuspTransition a b) v| โค Cp:SpatialCoordinateshp:0 < p 2j:Fin 3โข b + 1 < b + 2 linarithAll goals completed! ๐) s hs
(upperPoint ((p 0:โ)+(p 1:โ)*Complex.I) (p 2) hp)a:โb:โha:1 < ahab:a < bs:โhs:4 < s.reC:โhC0:0 โค ChC:โ (v : โ), |v * deriv (cuspTransition a b) v| โค Cp:SpatialCoordinateshp:0 < p 2j:Fin 3hA:(Summable fun r => โcuspRemainderProfile (b + 1) (b + 2) s (rowHeight (embeddedRow r) p)โ) โง
โ' (r : CuspCosets), โcuspRemainderProfile (b + 1) (b + 2) s (rowHeight (embeddedRow r) p)โ โค
eisensteinRemainderBound (b + 2) sโข โโ(p 2) * deriv (axisSlice (eisensteinRemainderField a b s) p j) (p j)โ โค (โsโ + C) * eisensteinRemainderBound (b + 2) s
have hB := hA.1.mul_left (โsโ+C)a:โb:โha:1 < ahab:a < bs:โhs:4 < s.reC:โhC0:0 โค ChC:โ (v : โ), |v * deriv (cuspTransition a b) v| โค Cp:SpatialCoordinateshp:0 < p 2j:Fin 3hA:(Summable fun r => โcuspRemainderProfile (b + 1) (b + 2) s (rowHeight (embeddedRow r) p)โ) โง
โ' (r : CuspCosets), โcuspRemainderProfile (b + 1) (b + 2) s (rowHeight (embeddedRow r) p)โ โค
eisensteinRemainderBound (b + 2) shB:Summable fun i => (โsโ + C) * โcuspRemainderProfile (b + 1) (b + 2) s (rowHeight (embeddedRow i) p)โโข โโ(p 2) * deriv (axisSlice (eisensteinRemainderField a b s) p j) (p j)โ โค (โsโ + C) * eisensteinRemainderBound (b + 2) s
have hb (r : CuspCosets) := weightedRemainder_scaled_deriv_bound a b hab s C hC0 hC r p hp ja:โb:โha:1 < ahab:a < bs:โhs:4 < s.reC:โhC0:0 โค ChC:โ (v : โ), |v * deriv (cuspTransition a b) v| โค Cp:SpatialCoordinateshp:0 < p 2j:Fin 3hA:(Summable fun r => โcuspRemainderProfile (b + 1) (b + 2) s (rowHeight (embeddedRow r) p)โ) โง
โ' (r : CuspCosets), โcuspRemainderProfile (b + 1) (b + 2) s (rowHeight (embeddedRow r) p)โ โค
eisensteinRemainderBound (b + 2) shB:Summable fun i => (โsโ + C) * โcuspRemainderProfile (b + 1) (b + 2) s (rowHeight (embeddedRow i) p)โhb:โ (r : CuspCosets),
โโ(p 2) * deriv (axisSlice (weightedHeightProfile (cuspRemainderProfile a b s) r) p j) (p j)โ โค
(โsโ + C) * โcuspRemainderProfile (b + 1) (b + 2) s (rowHeight (embeddedRow r) p)โโข โโ(p 2) * deriv (axisSlice (eisensteinRemainderField a b s) p j) (p j)โ โค (โsโ + C) * eisensteinRemainderBound (b + 2) s
have hnorm := hB.of_nonneg_of_le (fun r => norm_nonneg
((p 2:โ)*deriv (axisSlice (weightedHeightProfile (cuspRemainderProfile a b s) r) p j) (p j))) hba:โb:โha:1 < ahab:a < bs:โhs:4 < s.reC:โhC0:0 โค ChC:โ (v : โ), |v * deriv (cuspTransition a b) v| โค Cp:SpatialCoordinateshp:0 < p 2j:Fin 3hA:(Summable fun r => โcuspRemainderProfile (b + 1) (b + 2) s (rowHeight (embeddedRow r) p)โ) โง
โ' (r : CuspCosets), โcuspRemainderProfile (b + 1) (b + 2) s (rowHeight (embeddedRow r) p)โ โค
eisensteinRemainderBound (b + 2) shB:Summable fun i => (โsโ + C) * โcuspRemainderProfile (b + 1) (b + 2) s (rowHeight (embeddedRow i) p)โhb:โ (r : CuspCosets),
โโ(p 2) * deriv (axisSlice (weightedHeightProfile (cuspRemainderProfile a b s) r) p j) (p j)โ โค
(โsโ + C) * โcuspRemainderProfile (b + 1) (b + 2) s (rowHeight (embeddedRow r) p)โhnorm:Summable fun r => โโ(p 2) * deriv (axisSlice (weightedHeightProfile (cuspRemainderProfile a b s) r) p j) (p j)โโข โโ(p 2) * deriv (axisSlice (eisensteinRemainderField a b s) p j) (p j)โ โค (โsโ + C) * eisensteinRemainderBound (b + 2) s
have ht := eisensteinRemainder_axis_termwise a b ha hab s (bya:โb:โha:1 < ahab:a < bs:โhs:4 < s.reC:โhC0:0 โค ChC:โ (v : โ), |v * deriv (cuspTransition a b) v| โค Cp:SpatialCoordinateshp:0 < p 2j:Fin 3hA:(Summable fun r => โcuspRemainderProfile (b + 1) (b + 2) s (rowHeight (embeddedRow r) p)โ) โง
โ' (r : CuspCosets), โcuspRemainderProfile (b + 1) (b + 2) s (rowHeight (embeddedRow r) p)โ โค
eisensteinRemainderBound (b + 2) shB:Summable fun i => (โsโ + C) * โcuspRemainderProfile (b + 1) (b + 2) s (rowHeight (embeddedRow i) p)โhb:โ (r : CuspCosets),
โโ(p 2) * deriv (axisSlice (weightedHeightProfile (cuspRemainderProfile a b s) r) p j) (p j)โ โค
(โsโ + C) * โcuspRemainderProfile (b + 1) (b + 2) s (rowHeight (embeddedRow r) p)โhnorm:Summable fun r => โโ(p 2) * deriv (axisSlice (weightedHeightProfile (cuspRemainderProfile a b s) r) p j) (p j)โโข 2 < s.re linarithAll goals completed! ๐) p hp ja:โb:โha:1 < ahab:a < bs:โhs:4 < s.reC:โhC0:0 โค ChC:โ (v : โ), |v * deriv (cuspTransition a b) v| โค Cp:SpatialCoordinateshp:0 < p 2j:Fin 3hA:(Summable fun r => โcuspRemainderProfile (b + 1) (b + 2) s (rowHeight (embeddedRow r) p)โ) โง
โ' (r : CuspCosets), โcuspRemainderProfile (b + 1) (b + 2) s (rowHeight (embeddedRow r) p)โ โค
eisensteinRemainderBound (b + 2) shB:Summable fun i => (โsโ + C) * โcuspRemainderProfile (b + 1) (b + 2) s (rowHeight (embeddedRow i) p)โhb:โ (r : CuspCosets),
โโ(p 2) * deriv (axisSlice (weightedHeightProfile (cuspRemainderProfile a b s) r) p j) (p j)โ โค
(โsโ + C) * โcuspRemainderProfile (b + 1) (b + 2) s (rowHeight (embeddedRow r) p)โhnorm:Summable fun r => โโ(p 2) * deriv (axisSlice (weightedHeightProfile (cuspRemainderProfile a b s) r) p j) (p j)โht:(Summable fun r => deriv (axisSlice (weightedHeightProfile (cuspRemainderProfile a b s) r) p j) (p j)) โง
HasDerivAt (axisSlice (eisensteinRemainderField a b s) p j)
(โ' (r : CuspCosets), deriv (axisSlice (weightedHeightProfile (cuspRemainderProfile a b s) r) p j) (p j)) (p j)โข โโ(p 2) * deriv (axisSlice (eisensteinRemainderField a b s) p j) (p j)โ โค (โsโ + C) * eisensteinRemainderBound (b + 2) s
rw [ht.2.deriv,a:โb:โha:1 < ahab:a < bs:โhs:4 < s.reC:โhC0:0 โค ChC:โ (v : โ), |v * deriv (cuspTransition a b) v| โค Cp:SpatialCoordinateshp:0 < p 2j:Fin 3hA:(Summable fun r => โcuspRemainderProfile (b + 1) (b + 2) s (rowHeight (embeddedRow r) p)โ) โง
โ' (r : CuspCosets), โcuspRemainderProfile (b + 1) (b + 2) s (rowHeight (embeddedRow r) p)โ โค
eisensteinRemainderBound (b + 2) shB:Summable fun i => (โsโ + C) * โcuspRemainderProfile (b + 1) (b + 2) s (rowHeight (embeddedRow i) p)โhb:โ (r : CuspCosets),
โโ(p 2) * deriv (axisSlice (weightedHeightProfile (cuspRemainderProfile a b s) r) p j) (p j)โ โค
(โsโ + C) * โcuspRemainderProfile (b + 1) (b + 2) s (rowHeight (embeddedRow r) p)โhnorm:Summable fun r => โโ(p 2) * deriv (axisSlice (weightedHeightProfile (cuspRemainderProfile a b s) r) p j) (p j)โht:(Summable fun r => deriv (axisSlice (weightedHeightProfile (cuspRemainderProfile a b s) r) p j) (p j)) โง
HasDerivAt (axisSlice (eisensteinRemainderField a b s) p j)
(โ' (r : CuspCosets), deriv (axisSlice (weightedHeightProfile (cuspRemainderProfile a b s) r) p j) (p j)) (p j)โข โโ(p 2) * โ' (r : CuspCosets), deriv (axisSlice (weightedHeightProfile (cuspRemainderProfile a b s) r) p j) (p j)โ โค
(โsโ + C) * eisensteinRemainderBound (b + 2) sโtsum_mul_lefta:โb:โha:1 < ahab:a < bs:โhs:4 < s.reC:โhC0:0 โค ChC:โ (v : โ), |v * deriv (cuspTransition a b) v| โค Cp:SpatialCoordinateshp:0 < p 2j:Fin 3hA:(Summable fun r => โcuspRemainderProfile (b + 1) (b + 2) s (rowHeight (embeddedRow r) p)โ) โง
โ' (r : CuspCosets), โcuspRemainderProfile (b + 1) (b + 2) s (rowHeight (embeddedRow r) p)โ โค
eisensteinRemainderBound (b + 2) shB:Summable fun i => (โsโ + C) * โcuspRemainderProfile (b + 1) (b + 2) s (rowHeight (embeddedRow i) p)โhb:โ (r : CuspCosets),
โโ(p 2) * deriv (axisSlice (weightedHeightProfile (cuspRemainderProfile a b s) r) p j) (p j)โ โค
(โsโ + C) * โcuspRemainderProfile (b + 1) (b + 2) s (rowHeight (embeddedRow r) p)โhnorm:Summable fun r => โโ(p 2) * deriv (axisSlice (weightedHeightProfile (cuspRemainderProfile a b s) r) p j) (p j)โht:(Summable fun r => deriv (axisSlice (weightedHeightProfile (cuspRemainderProfile a b s) r) p j) (p j)) โง
HasDerivAt (axisSlice (eisensteinRemainderField a b s) p j)
(โ' (r : CuspCosets), deriv (axisSlice (weightedHeightProfile (cuspRemainderProfile a b s) r) p j) (p j)) (p j)โข โโ' (x : CuspCosets), โ(p 2) * deriv (axisSlice (weightedHeightProfile (cuspRemainderProfile a b s) x) p j) (p j)โ โค
(โsโ + C) * eisensteinRemainderBound (b + 2) s]a:โb:โha:1 < ahab:a < bs:โhs:4 < s.reC:โhC0:0 โค ChC:โ (v : โ), |v * deriv (cuspTransition a b) v| โค Cp:SpatialCoordinateshp:0 < p 2j:Fin 3hA:(Summable fun r => โcuspRemainderProfile (b + 1) (b + 2) s (rowHeight (embeddedRow r) p)โ) โง
โ' (r : CuspCosets), โcuspRemainderProfile (b + 1) (b + 2) s (rowHeight (embeddedRow r) p)โ โค
eisensteinRemainderBound (b + 2) shB:Summable fun i => (โsโ + C) * โcuspRemainderProfile (b + 1) (b + 2) s (rowHeight (embeddedRow i) p)โhb:โ (r : CuspCosets),
โโ(p 2) * deriv (axisSlice (weightedHeightProfile (cuspRemainderProfile a b s) r) p j) (p j)โ โค
(โsโ + C) * โcuspRemainderProfile (b + 1) (b + 2) s (rowHeight (embeddedRow r) p)โhnorm:Summable fun r => โโ(p 2) * deriv (axisSlice (weightedHeightProfile (cuspRemainderProfile a b s) r) p j) (p j)โht:(Summable fun r => deriv (axisSlice (weightedHeightProfile (cuspRemainderProfile a b s) r) p j) (p j)) โง
HasDerivAt (axisSlice (eisensteinRemainderField a b s) p j)
(โ' (r : CuspCosets), deriv (axisSlice (weightedHeightProfile (cuspRemainderProfile a b s) r) p j) (p j)) (p j)โข โโ' (x : CuspCosets), โ(p 2) * deriv (axisSlice (weightedHeightProfile (cuspRemainderProfile a b s) x) p j) (p j)โ โค
(โsโ + C) * eisensteinRemainderBound (b + 2) s
apply (norm_tsum_le_tsum_norm hnorm).transa:โb:โha:1 < ahab:a < bs:โhs:4 < s.reC:โhC0:0 โค ChC:โ (v : โ), |v * deriv (cuspTransition a b) v| โค Cp:SpatialCoordinateshp:0 < p 2j:Fin 3hA:(Summable fun r => โcuspRemainderProfile (b + 1) (b + 2) s (rowHeight (embeddedRow r) p)โ) โง
โ' (r : CuspCosets), โcuspRemainderProfile (b + 1) (b + 2) s (rowHeight (embeddedRow r) p)โ โค
eisensteinRemainderBound (b + 2) shB:Summable fun i => (โsโ + C) * โcuspRemainderProfile (b + 1) (b + 2) s (rowHeight (embeddedRow i) p)โhb:โ (r : CuspCosets),
โโ(p 2) * deriv (axisSlice (weightedHeightProfile (cuspRemainderProfile a b s) r) p j) (p j)โ โค
(โsโ + C) * โcuspRemainderProfile (b + 1) (b + 2) s (rowHeight (embeddedRow r) p)โhnorm:Summable fun r => โโ(p 2) * deriv (axisSlice (weightedHeightProfile (cuspRemainderProfile a b s) r) p j) (p j)โht:(Summable fun r => deriv (axisSlice (weightedHeightProfile (cuspRemainderProfile a b s) r) p j) (p j)) โง
HasDerivAt (axisSlice (eisensteinRemainderField a b s) p j)
(โ' (r : CuspCosets), deriv (axisSlice (weightedHeightProfile (cuspRemainderProfile a b s) r) p j) (p j)) (p j)โข โ' (i : CuspCosets), โโ(p 2) * deriv (axisSlice (weightedHeightProfile (cuspRemainderProfile a b s) i) p j) (p j)โ โค
(โsโ + C) * eisensteinRemainderBound (b + 2) s
apply (Summable.tsum_le_tsum hb hnorm hB).transa:โb:โha:1 < ahab:a < bs:โhs:4 < s.reC:โhC0:0 โค ChC:โ (v : โ), |v * deriv (cuspTransition a b) v| โค Cp:SpatialCoordinateshp:0 < p 2j:Fin 3hA:(Summable fun r => โcuspRemainderProfile (b + 1) (b + 2) s (rowHeight (embeddedRow r) p)โ) โง
โ' (r : CuspCosets), โcuspRemainderProfile (b + 1) (b + 2) s (rowHeight (embeddedRow r) p)โ โค
eisensteinRemainderBound (b + 2) shB:Summable fun i => (โsโ + C) * โcuspRemainderProfile (b + 1) (b + 2) s (rowHeight (embeddedRow i) p)โhb:โ (r : CuspCosets),
โโ(p 2) * deriv (axisSlice (weightedHeightProfile (cuspRemainderProfile a b s) r) p j) (p j)โ โค
(โsโ + C) * โcuspRemainderProfile (b + 1) (b + 2) s (rowHeight (embeddedRow r) p)โhnorm:Summable fun r => โโ(p 2) * deriv (axisSlice (weightedHeightProfile (cuspRemainderProfile a b s) r) p j) (p j)โht:(Summable fun r => deriv (axisSlice (weightedHeightProfile (cuspRemainderProfile a b s) r) p j) (p j)) โง
HasDerivAt (axisSlice (eisensteinRemainderField a b s) p j)
(โ' (r : CuspCosets), deriv (axisSlice (weightedHeightProfile (cuspRemainderProfile a b s) r) p j) (p j)) (p j)โข โ' (i : CuspCosets), (โsโ + C) * โcuspRemainderProfile (b + 1) (b + 2) s (rowHeight (embeddedRow i) p)โ โค
(โsโ + C) * eisensteinRemainderBound (b + 2) s
rw [tsum_mul_lefta:โb:โha:1 < ahab:a < bs:โhs:4 < s.reC:โhC0:0 โค ChC:โ (v : โ), |v * deriv (cuspTransition a b) v| โค Cp:SpatialCoordinateshp:0 < p 2j:Fin 3hA:(Summable fun r => โcuspRemainderProfile (b + 1) (b + 2) s (rowHeight (embeddedRow r) p)โ) โง
โ' (r : CuspCosets), โcuspRemainderProfile (b + 1) (b + 2) s (rowHeight (embeddedRow r) p)โ โค
eisensteinRemainderBound (b + 2) shB:Summable fun i => (โsโ + C) * โcuspRemainderProfile (b + 1) (b + 2) s (rowHeight (embeddedRow i) p)โhb:โ (r : CuspCosets),
โโ(p 2) * deriv (axisSlice (weightedHeightProfile (cuspRemainderProfile a b s) r) p j) (p j)โ โค
(โsโ + C) * โcuspRemainderProfile (b + 1) (b + 2) s (rowHeight (embeddedRow r) p)โhnorm:Summable fun r => โโ(p 2) * deriv (axisSlice (weightedHeightProfile (cuspRemainderProfile a b s) r) p j) (p j)โht:(Summable fun r => deriv (axisSlice (weightedHeightProfile (cuspRemainderProfile a b s) r) p j) (p j)) โง
HasDerivAt (axisSlice (eisensteinRemainderField a b s) p j)
(โ' (r : CuspCosets), deriv (axisSlice (weightedHeightProfile (cuspRemainderProfile a b s) r) p j) (p j)) (p j)โข (โsโ + C) * โ' (x : CuspCosets), โcuspRemainderProfile (b + 1) (b + 2) s (rowHeight (embeddedRow x) p)โ โค
(โsโ + C) * eisensteinRemainderBound (b + 2) s]a:โb:โha:1 < ahab:a < bs:โhs:4 < s.reC:โhC0:0 โค ChC:โ (v : โ), |v * deriv (cuspTransition a b) v| โค Cp:SpatialCoordinateshp:0 < p 2j:Fin 3hA:(Summable fun r => โcuspRemainderProfile (b + 1) (b + 2) s (rowHeight (embeddedRow r) p)โ) โง
โ' (r : CuspCosets), โcuspRemainderProfile (b + 1) (b + 2) s (rowHeight (embeddedRow r) p)โ โค
eisensteinRemainderBound (b + 2) shB:Summable fun i => (โsโ + C) * โcuspRemainderProfile (b + 1) (b + 2) s (rowHeight (embeddedRow i) p)โhb:โ (r : CuspCosets),
โโ(p 2) * deriv (axisSlice (weightedHeightProfile (cuspRemainderProfile a b s) r) p j) (p j)โ โค
(โsโ + C) * โcuspRemainderProfile (b + 1) (b + 2) s (rowHeight (embeddedRow r) p)โhnorm:Summable fun r => โโ(p 2) * deriv (axisSlice (weightedHeightProfile (cuspRemainderProfile a b s) r) p j) (p j)โht:(Summable fun r => deriv (axisSlice (weightedHeightProfile (cuspRemainderProfile a b s) r) p j) (p j)) โง
HasDerivAt (axisSlice (eisensteinRemainderField a b s) p j)
(โ' (r : CuspCosets), deriv (axisSlice (weightedHeightProfile (cuspRemainderProfile a b s) r) p j) (p j)) (p j)โข (โsโ + C) * โ' (x : CuspCosets), โcuspRemainderProfile (b + 1) (b + 2) s (rowHeight (embeddedRow x) p)โ โค
(โsโ + C) * eisensteinRemainderBound (b + 2) s
exact mul_le_mul_of_nonneg_left hA.2 (add_nonneg (norm_nonneg s) hC0)All goals completed! ๐def kernelEisensteinRemainder (a b : โ) (s : โ) (hs : 2<s.re) : KernelQuotientโโ :=
fun q => kernelQuotientEisenstein s hs q-kernelQuotientSeed a b s qlemma kernelEisensteinRemainder_smooth (a b : โ) (ha : 1<a) (hab : a<b)
(s : โ) (hs : 2<s.re) :
ContMDiff ๐(โ,SpatialCoordinates) ๐(โ,โ) โ (kernelEisensteinRemainder a b s hs) :=
(kernelQuotientEisenstein_contMDiff s hs).sub (kernelQuotientSeed_contMDiff a b s ha hab)lemma kernelEisensteinRemainder_euclidean_smooth (a b : โ) (ha : 1<a) (hab : a<b)
(s : โ) (hs : 2<s.re) (p : EuclideanSpatial) (hp : 0<p 2) :
ContDiffAt โ โ (fun q => kernelEisensteinRemainder a b s hs (kernelEuclideanProjection q)) p :=
((((kernelEisensteinRemainder_smooth a b ha hab s hs).comp kernelProjection_contMDiff)
(euclideanToHyperbolic p)).comp p (euclideanToHyperbolic_contMDiffAt p hp)).contDiffAtlemma kernelEisensteinRemainder_euclidean_eq (a b : โ) (s : โ) (hs : 2<s.re)
(p : EuclideanSpatial) (hp : 0<p 2) :
kernelEisensteinRemainder a b s hs (kernelEuclideanProjection p)=eisensteinRemainderField a b s p.ofLp := bya:โb:โs:โhs:2 < s.rep:EuclideanSpatialhp:0 < p.ofLp 2โข kernelEisensteinRemainder a b s hs (kernelEuclideanProjection p) = eisensteinRemainderField a b s p.ofLp
unfold kernelEisensteinRemainder kernelEuclideanProjectiona:โb:โs:โhs:2 < s.rep:EuclideanSpatialhp:0 < p.ofLp 2โข kernelQuotientEisenstein s hs ((integralOrbitProjection globalKubotaKernel โ euclideanToHyperbolic) p) -
kernelQuotientSeed a b s ((integralOrbitProjection globalKubotaKernel โ euclideanToHyperbolic) p) =
eisensteinRemainderField a b s p.ofLp
simp only [Function.comp_apply]a:โb:โs:โhs:2 < s.rep:EuclideanSpatialhp:0 < p.ofLp 2โข kernelQuotientEisenstein s hs (integralOrbitProjection globalKubotaKernel (euclideanToHyperbolic p)) -
kernelQuotientSeed a b s (integralOrbitProjection globalKubotaKernel (euclideanToHyperbolic p)) =
eisensteinRemainderField a b s p.ofLp
rw [euclideanToHyperbolic_positive p hp,a:โb:โs:โhs:2 < s.rep:EuclideanSpatialhp:0 < p.ofLp 2โข kernelQuotientEisenstein s hs
(integralOrbitProjection globalKubotaKernel (upperPoint (โ(p.ofLp 0) + I * โ(p.ofLp 1)) (p.ofLp 2) hp)) -
kernelQuotientSeed a b s
(integralOrbitProjection globalKubotaKernel (upperPoint (โ(p.ofLp 0) + I * โ(p.ofLp 1)) (p.ofLp 2) hp)) =
eisensteinRemainderField a b s p.ofLpkernelQuotientEisenstein_mk,a:โb:โs:โhs:2 < s.rep:EuclideanSpatialhp:0 < p.ofLp 2โข hyperbolicEisenstein s (upperPoint (โ(p.ofLp 0) + I * โ(p.ofLp 1)) (p.ofLp 2) hp) -
kernelQuotientSeed a b s
(integralOrbitProjection globalKubotaKernel (upperPoint (โ(p.ofLp 0) + I * โ(p.ofLp 1)) (p.ofLp 2) hp)) =
eisensteinRemainderField a b s p.ofLphyperbolicEisenstein_upperPointa:โb:โs:โhs:2 < s.rep:EuclideanSpatialhp:0 < p.ofLp 2โข upperEisenstein (โ(p.ofLp 0) + I * โ(p.ofLp 1)) (p.ofLp 2) hp s -
kernelQuotientSeed a b s
(integralOrbitProjection globalKubotaKernel (upperPoint (โ(p.ofLp 0) + I * โ(p.ofLp 1)) (p.ofLp 2) hp)) =
eisensteinRemainderField a b s p.ofLp]a:โb:โs:โhs:2 < s.rep:EuclideanSpatialhp:0 < p.ofLp 2โข upperEisenstein (โ(p.ofLp 0) + I * โ(p.ofLp 1)) (p.ofLp 2) hp s -
kernelQuotientSeed a b s
(integralOrbitProjection globalKubotaKernel (upperPoint (โ(p.ofLp 0) + I * โ(p.ofLp 1)) (p.ofLp 2) hp)) =
eisensteinRemainderField a b s p.ofLp
unfold eisensteinRemainderFielda:โb:โs:โhs:2 < s.rep:EuclideanSpatialhp:0 < p.ofLp 2โข upperEisenstein (โ(p.ofLp 0) + I * โ(p.ofLp 1)) (p.ofLp 2) hp s -
kernelQuotientSeed a b s
(integralOrbitProjection globalKubotaKernel (upperPoint (โ(p.ofLp 0) + I * โ(p.ofLp 1)) (p.ofLp 2) hp)) =
smoothEisenstein s p.ofLp - smoothCuspSeedField a b s p.ofLp
rw [smoothEisenstein_eq_actual s p.ofLp hp,a:โb:โs:โhs:2 < s.rep:EuclideanSpatialhp:0 < p.ofLp 2โข upperEisenstein (โ(p.ofLp 0) + I * โ(p.ofLp 1)) (p.ofLp 2) hp s -
kernelQuotientSeed a b s
(integralOrbitProjection globalKubotaKernel (upperPoint (โ(p.ofLp 0) + I * โ(p.ofLp 1)) (p.ofLp 2) hp)) =
upperEisenstein (โ(p.ofLp 0) + โ(p.ofLp 1) * I) (p.ofLp 2) hp s - smoothCuspSeedField a b s p.ofLpsmoothCuspSeedField,a:โb:โs:โhs:2 < s.rep:EuclideanSpatialhp:0 < p.ofLp 2โข upperEisenstein (โ(p.ofLp 0) + I * โ(p.ofLp 1)) (p.ofLp 2) hp s -
kernelQuotientSeed a b s
(integralOrbitProjection globalKubotaKernel (upperPoint (โ(p.ofLp 0) + I * โ(p.ofLp 1)) (p.ofLp 2) hp)) =
upperEisenstein (โ(p.ofLp 0) + โ(p.ofLp 1) * I) (p.ofLp 2) hp s -
if hp : 0 < p.ofLp 2 then smoothCuspSeed a b s (upperPoint (โ(p.ofLp 0) + โ(p.ofLp 1) * I) (p.ofLp 2) hp) else 0dite_eq_left hpa:โb:โs:โhs:2 < s.rep:EuclideanSpatialhp:0 < p.ofLp 2โข upperEisenstein (โ(p.ofLp 0) + I * โ(p.ofLp 1)) (p.ofLp 2) hp s -
kernelQuotientSeed a b s
(integralOrbitProjection globalKubotaKernel (upperPoint (โ(p.ofLp 0) + I * โ(p.ofLp 1)) (p.ofLp 2) hp)) =
upperEisenstein (โ(p.ofLp 0) + โ(p.ofLp 1) * I) (p.ofLp 2) hp s -
smoothCuspSeed a b s (upperPoint (โ(p.ofLp 0) + โ(p.ofLp 1) * I) (p.ofLp 2) hp)]a:โb:โs:โhs:2 < s.rep:EuclideanSpatialhp:0 < p.ofLp 2โข upperEisenstein (โ(p.ofLp 0) + I * โ(p.ofLp 1)) (p.ofLp 2) hp s -
kernelQuotientSeed a b s
(integralOrbitProjection globalKubotaKernel (upperPoint (โ(p.ofLp 0) + I * โ(p.ofLp 1)) (p.ofLp 2) hp)) =
upperEisenstein (โ(p.ofLp 0) + โ(p.ofLp 1) * I) (p.ofLp 2) hp s -
smoothCuspSeed a b s (upperPoint (โ(p.ofLp 0) + โ(p.ofLp 1) * I) (p.ofLp 2) hp)
simp only [mul_comm Complex.I]a:โb:โs:โhs:2 < s.rep:EuclideanSpatialhp:0 < p.ofLp 2โข upperEisenstein (โ(p.ofLp 0) + โ(p.ofLp 1) * I) (p.ofLp 2) hp s -
kernelQuotientSeed a b s
(integralOrbitProjection globalKubotaKernel (upperPoint (โ(p.ofLp 0) + โ(p.ofLp 1) * I) (p.ofLp 2) hp)) =
upperEisenstein (โ(p.ofLp 0) + โ(p.ofLp 1) * I) (p.ofLp 2) hp s -
smoothCuspSeed a b s (upperPoint (โ(p.ofLp 0) + โ(p.ofLp 1) * I) (p.ofLp 2) hp)
rflAll goals completed! ๐theorem kernelEisensteinRemainder_scaled_fderiv_bound (a b : โ) (ha : 1<a) (hab : a<b)
(s : โ) (hs : 4<s.re) :
โB : โ,0โคB โง โp : EuclideanSpatial,0<p 2โโj : Fin 3,
โ(p 2:โ)*fderiv โ (fun q => kernelEisensteinRemainder a b s (bya:โb:โha:1 < ahab:a < bs:โhs:4 < s.reB:โp:EuclideanSpatialj:Fin 3q:EuclideanSpatialโข 2 < s.re linarithAll goals completed! ๐)
(kernelEuclideanProjection q)) p (euclideanCoordinateVector j)โโคB := bya:โb:โha:1 < ahab:a < bs:โhs:4 < s.reโข โ B,
0 โค B โง
โ (p : EuclideanSpatial),
0 < p.ofLp 2 โ
โ (j : Fin 3),
โโ(p.ofLp 2) *
(fderiv โ (fun q => kernelEisensteinRemainder a b s โฏ (kernelEuclideanProjection q)) p)
(euclideanCoordinateVector j)โ โค
B
obtain โจB,hB,hboundโฉ := eisensteinRemainder_scaled_axis_bound a b ha hab s hsa:โb:โha:1 < ahab:a < bs:โhs:4 < s.reB:โhB:0 โค Bhbound:โ (p : SpatialCoordinates),
0 < p 2 โ โ (j : Fin 3), โโ(p 2) * deriv (axisSlice (eisensteinRemainderField a b s) p j) (p j)โ โค Bโข โ B,
0 โค B โง
โ (p : EuclideanSpatial),
0 < p.ofLp 2 โ
โ (j : Fin 3),
โโ(p.ofLp 2) *
(fderiv โ (fun q => kernelEisensteinRemainder a b s โฏ (kernelEuclideanProjection q)) p)
(euclideanCoordinateVector j)โ โค
B
refine โจB,hB,?_โฉa:โb:โha:1 < ahab:a < bs:โhs:4 < s.reB:โhB:0 โค Bhbound:โ (p : SpatialCoordinates),
0 < p 2 โ โ (j : Fin 3), โโ(p 2) * deriv (axisSlice (eisensteinRemainderField a b s) p j) (p j)โ โค Bโข โ (p : EuclideanSpatial),
0 < p.ofLp 2 โ
โ (j : Fin 3),
โโ(p.ofLp 2) *
(fderiv โ (fun q => kernelEisensteinRemainder a b s โฏ (kernelEuclideanProjection q)) p)
(euclideanCoordinateVector j)โ โค
B
intro p hp ja:โb:โha:1 < ahab:a < bs:โhs:4 < s.reB:โhB:0 โค Bhbound:โ (p : SpatialCoordinates),
0 < p 2 โ โ (j : Fin 3), โโ(p 2) * deriv (axisSlice (eisensteinRemainderField a b s) p j) (p j)โ โค Bp:EuclideanSpatialhp:0 < p.ofLp 2j:Fin 3โข โโ(p.ofLp 2) *
(fderiv โ (fun q => kernelEisensteinRemainder a b s โฏ (kernelEuclideanProjection q)) p)
(euclideanCoordinateVector j)โ โค
B
let f : EuclideanSpatialโโ:=fun q => kernelEisensteinRemainder a b s (bya:โb:โha:1 < ahab:a < bs:โhs:4 < s.reB:โhB:0 โค Bhbound:โ (p : SpatialCoordinates),
0 < p 2 โ โ (j : Fin 3), โโ(p 2) * deriv (axisSlice (eisensteinRemainderField a b s) p j) (p j)โ โค Bp:EuclideanSpatialhp:0 < p.ofLp 2j:Fin 3q:EuclideanSpatialโข 2 < s.re linarithAll goals completed! ๐) (kernelEuclideanProjection q)a:โb:โha:1 < ahab:a < bs:โhs:4 < s.reB:โhB:0 โค Bhbound:โ (p : SpatialCoordinates),
0 < p 2 โ โ (j : Fin 3), โโ(p 2) * deriv (axisSlice (eisensteinRemainderField a b s) p j) (p j)โ โค Bp:EuclideanSpatialhp:0 < p.ofLp 2j:Fin 3f:EuclideanSpatial โ โ := fun q => kernelEisensteinRemainder a b s โฏ (kernelEuclideanProjection q)โข โโ(p.ofLp 2) *
(fderiv โ (fun q => kernelEisensteinRemainder a b s โฏ (kernelEuclideanProjection q)) p)
(euclideanCoordinateVector j)โ โค
B
have hf : โq,0<q 2โContDiffAt โ โ f q := kernelEisensteinRemainder_euclidean_smooth a b ha hab s (bya:โb:โha:1 < ahab:a < bs:โhs:4 < s.reB:โhB:0 โค Bhbound:โ (p : SpatialCoordinates),
0 < p 2 โ โ (j : Fin 3), โโ(p 2) * deriv (axisSlice (eisensteinRemainderField a b s) p j) (p j)โ โค Bp:EuclideanSpatialhp:0 < p.ofLp 2j:Fin 3f:EuclideanSpatial โ โ := fun q => kernelEisensteinRemainder a b s โฏ (kernelEuclideanProjection q)โข 2 < s.re linarithAll goals completed! ๐)a:โb:โha:1 < ahab:a < bs:โhs:4 < s.reB:โhB:0 โค Bhbound:โ (p : SpatialCoordinates),
0 < p 2 โ โ (j : Fin 3), โโ(p 2) * deriv (axisSlice (eisensteinRemainderField a b s) p j) (p j)โ โค Bp:EuclideanSpatialhp:0 < p.ofLp 2j:Fin 3f:EuclideanSpatial โ โ := fun q => kernelEisensteinRemainder a b s โฏ (kernelEuclideanProjection q)hf:โ (q : EuclideanSpatial), 0 < q.ofLp 2 โ ContDiffAt โ โ f qโข โโ(p.ofLp 2) *
(fderiv โ (fun q => kernelEisensteinRemainder a b s โฏ (kernelEuclideanProjection q)) p)
(euclideanCoordinateVector j)โ โค
B
have he : โq : SpatialCoordinates,0<q 2โf (WithLp.toLp 2 q)=eisensteinRemainderField a b s q := bya:โb:โha:1 < ahab:a < bs:โhs:4 < s.reโข โ B,
0 โค B โง
โ (p : EuclideanSpatial),
0 < p.ofLp 2 โ
โ (j : Fin 3),
โโ(p.ofLp 2) *
(fderiv โ (fun q => kernelEisensteinRemainder a b s โฏ (kernelEuclideanProjection q)) p)
(euclideanCoordinateVector j)โ โค
B
intro q hqa:โb:โha:1 < ahab:a < bs:โhs:4 < s.reB:โhB:0 โค Bhbound:โ (p : SpatialCoordinates),
0 < p 2 โ โ (j : Fin 3), โโ(p 2) * deriv (axisSlice (eisensteinRemainderField a b s) p j) (p j)โ โค Bp:EuclideanSpatialhp:0 < p.ofLp 2j:Fin 3f:EuclideanSpatial โ โ := fun q => kernelEisensteinRemainder a b s โฏ (kernelEuclideanProjection q)hf:โ (q : EuclideanSpatial), 0 < q.ofLp 2 โ ContDiffAt โ โ f qq:SpatialCoordinateshq:0 < q 2โข f (WithLp.toLp 2 q) = eisensteinRemainderField a b s q
exact kernelEisensteinRemainder_euclidean_eq a b s (bya:โb:โha:1 < ahab:a < bs:โhs:4 < s.reB:โhB:0 โค Bhbound:โ (p : SpatialCoordinates),
0 < p 2 โ โ (j : Fin 3), โโ(p 2) * deriv (axisSlice (eisensteinRemainderField a b s) p j) (p j)โ โค Bp:EuclideanSpatialhp:0 < p.ofLp 2j:Fin 3f:EuclideanSpatial โ โ := fun q => kernelEisensteinRemainder a b s โฏ (kernelEuclideanProjection q)hf:โ (q : EuclideanSpatial), 0 < q.ofLp 2 โ ContDiffAt โ โ f qq:SpatialCoordinateshq:0 < q 2โข 2 < s.re linarithAll goals completed! ๐) (WithLp.toLp 2 q) hqa:โb:โha:1 < ahab:a < bs:โhs:4 < s.reB:โhB:0 โค Bhbound:โ (p : SpatialCoordinates),
0 < p 2 โ โ (j : Fin 3), โโ(p 2) * deriv (axisSlice (eisensteinRemainderField a b s) p j) (p j)โ โค Bp:EuclideanSpatialhp:0 < p.ofLp 2j:Fin 3f:EuclideanSpatial โ โ := fun q => kernelEisensteinRemainder a b s โฏ (kernelEuclideanProjection q)hf:โ (q : EuclideanSpatial), 0 < q.ofLp 2 โ ContDiffAt โ โ f qhe:โ (q : SpatialCoordinates), 0 < q 2 โ f (WithLp.toLp 2 q) = eisensteinRemainderField a b s qโข โโ(p.ofLp 2) *
(fderiv โ (fun q => kernelEisensteinRemainder a b s โฏ (kernelEuclideanProjection q)) p)
(euclideanCoordinateVector j)โ โค
B
have heq := axisSlice_eventuallyEq_of_positive _ _ he p.ofLp hp ja:โb:โha:1 < ahab:a < bs:โhs:4 < s.reB:โhB:0 โค Bhbound:โ (p : SpatialCoordinates),
0 < p 2 โ โ (j : Fin 3), โโ(p 2) * deriv (axisSlice (eisensteinRemainderField a b s) p j) (p j)โ โค Bp:EuclideanSpatialhp:0 < p.ofLp 2j:Fin 3f:EuclideanSpatial โ โ := fun q => kernelEisensteinRemainder a b s โฏ (kernelEuclideanProjection q)hf:โ (q : EuclideanSpatial), 0 < q.ofLp 2 โ ContDiffAt โ โ f qhe:โ (q : SpatialCoordinates), 0 < q 2 โ f (WithLp.toLp 2 q) = eisensteinRemainderField a b s qheq:axisSlice (fun q => f (WithLp.toLp 2 q)) p.ofLp j =แถ [๐ (p.ofLp j)] axisSlice (eisensteinRemainderField a b s) p.ofLp jโข โโ(p.ofLp 2) *
(fderiv โ (fun q => kernelEisensteinRemainder a b s โฏ (kernelEuclideanProjection q)) p)
(euclideanCoordinateVector j)โ โค
B
change โ(p 2:โ)*fderiv โ f p (euclideanCoordinateVector j)โโคBa:โb:โha:1 < ahab:a < bs:โhs:4 < s.reB:โhB:0 โค Bhbound:โ (p : SpatialCoordinates),
0 < p 2 โ โ (j : Fin 3), โโ(p 2) * deriv (axisSlice (eisensteinRemainderField a b s) p j) (p j)โ โค Bp:EuclideanSpatialhp:0 < p.ofLp 2j:Fin 3f:EuclideanSpatial โ โ := fun q => kernelEisensteinRemainder a b s โฏ (kernelEuclideanProjection q)hf:โ (q : EuclideanSpatial), 0 < q.ofLp 2 โ ContDiffAt โ โ f qhe:โ (q : SpatialCoordinates), 0 < q 2 โ f (WithLp.toLp 2 q) = eisensteinRemainderField a b s qheq:axisSlice (fun q => f (WithLp.toLp 2 q)) p.ofLp j =แถ [๐ (p.ofLp j)] axisSlice (eisensteinRemainderField a b s) p.ofLp jโข โโ(p.ofLp 2) * (fderiv โ f p) (euclideanCoordinateVector j)โ โค B
rw [โ(euclideanAxisSlice_derivatives f hf p hp j).1,a:โb:โha:1 < ahab:a < bs:โhs:4 < s.reB:โhB:0 โค Bhbound:โ (p : SpatialCoordinates),
0 < p 2 โ โ (j : Fin 3), โโ(p 2) * deriv (axisSlice (eisensteinRemainderField a b s) p j) (p j)โ โค Bp:EuclideanSpatialhp:0 < p.ofLp 2j:Fin 3f:EuclideanSpatial โ โ := fun q => kernelEisensteinRemainder a b s โฏ (kernelEuclideanProjection q)hf:โ (q : EuclideanSpatial), 0 < q.ofLp 2 โ ContDiffAt โ โ f qhe:โ (q : SpatialCoordinates), 0 < q 2 โ f (WithLp.toLp 2 q) = eisensteinRemainderField a b s qheq:axisSlice (fun q => f (WithLp.toLp 2 q)) p.ofLp j =แถ [๐ (p.ofLp j)] axisSlice (eisensteinRemainderField a b s) p.ofLp jโข โโ(p.ofLp 2) * deriv (axisSlice (fun q => f (WithLp.toLp 2 q)) p.ofLp j) (p.ofLp j)โ โค Bheq.deriv_eqa:โb:โha:1 < ahab:a < bs:โhs:4 < s.reB:โhB:0 โค Bhbound:โ (p : SpatialCoordinates),
0 < p 2 โ โ (j : Fin 3), โโ(p 2) * deriv (axisSlice (eisensteinRemainderField a b s) p j) (p j)โ โค Bp:EuclideanSpatialhp:0 < p.ofLp 2j:Fin 3f:EuclideanSpatial โ โ := fun q => kernelEisensteinRemainder a b s โฏ (kernelEuclideanProjection q)hf:โ (q : EuclideanSpatial), 0 < q.ofLp 2 โ ContDiffAt โ โ f qhe:โ (q : SpatialCoordinates), 0 < q 2 โ f (WithLp.toLp 2 q) = eisensteinRemainderField a b s qheq:axisSlice (fun q => f (WithLp.toLp 2 q)) p.ofLp j =แถ [๐ (p.ofLp j)] axisSlice (eisensteinRemainderField a b s) p.ofLp jโข โโ(p.ofLp 2) * deriv (axisSlice (eisensteinRemainderField a b s) p.ofLp j) (p.ofLp j)โ โค B]a:โb:โha:1 < ahab:a < bs:โhs:4 < s.reB:โhB:0 โค Bhbound:โ (p : SpatialCoordinates),
0 < p 2 โ โ (j : Fin 3), โโ(p 2) * deriv (axisSlice (eisensteinRemainderField a b s) p j) (p j)โ โค Bp:EuclideanSpatialhp:0 < p.ofLp 2j:Fin 3f:EuclideanSpatial โ โ := fun q => kernelEisensteinRemainder a b s โฏ (kernelEuclideanProjection q)hf:โ (q : EuclideanSpatial), 0 < q.ofLp 2 โ ContDiffAt โ โ f qhe:โ (q : SpatialCoordinates), 0 < q 2 โ f (WithLp.toLp 2 q) = eisensteinRemainderField a b s qheq:axisSlice (fun q => f (WithLp.toLp 2 q)) p.ofLp j =แถ [๐ (p.ofLp j)] axisSlice (eisensteinRemainderField a b s) p.ofLp jโข โโ(p.ofLp 2) * deriv (axisSlice (eisensteinRemainderField a b s) p.ofLp j) (p.ofLp j)โ โค B
exact hbound p.ofLp hp jAll goals completed! ๐end CubicEisensteinendend OAI