/-
Copyright (c) 2026 Bjørn Kjos-Hanssen. All rights reserved.
Released under Apache 2.0 license as described in the file LICENSE.
Authors: Bjørn Kjos-Hanssen
-/modulepublicimportMathlib.Analysis.Calculus.Gradient.BasicpublicimportMathlib.Analysis.Calculus.ContDiff.FTaylorSeriespublicimportMathlib.LinearAlgebra.QuadraticForm.BasicpublicimportMathlib.Analysis.Calculus.FDeriv.AnalyticpublicimportMathlib.Analysis.Analytic.IteratedFDerivpublicimportMathlib.Analysis.Calculus.FDeriv.SymmetricpublicimportMathlib.Analysis.InnerProductSpace.PiL2publicimportPhyslibAlpha.Mathematics.PartialDerivativeTest
Coupled spring potential
As a proof of concept, we use the second derivative test in
PhyslibAlpha.Mathematics.PartialDerivativeTest
to prove that the coupled spring potential
U := fun x : EuclideanSpace ℝ (Fin 2) => (x 0)^2 + x 0 * x 1 + (x 1)^2
has a local minimum at zero.
@[expose]publicsection/-
The coupling potential is analytic everywhere (it is a polynomial).
-/lemmacouplingPotential_analyticAt(z:EuclideanSpaceℝ(Fin2)):AnalyticAtℝcouplingPotentialz:=z:EuclideanSpaceℝ(Fin2)⊢ AnalyticAtℝcouplingPotentialzz:EuclideanSpaceℝ(Fin2)h0:AnalyticAtℝ(funx=>x.ofLp0)z⊢ AnalyticAtℝcouplingPotentialzz:EuclideanSpaceℝ(Fin2)h0:AnalyticAtℝ(funx=>x.ofLp0)zh1:AnalyticAtℝ(funx=>x.ofLp1)z⊢ AnalyticAtℝcouplingPotentialzz:EuclideanSpaceℝ(Fin2)h0:AnalyticAtℝ(funx=>x.ofLp0)zh1:AnalyticAtℝ(funx=>x.ofLp1)z⊢ AnalyticAtℝ(funx=>x.ofLp0^2+x.ofLp0*x.ofLp1+x.ofLp1^2)zAll goals completed! 🐙x:EuclideanSpaceℝ(Fin2)h0:HasFDerivAt(funx=>x.ofLp0)(EuclideanSpace.proj0)xh1:HasFDerivAt(funx=>x.ofLp1)(EuclideanSpace.proj1)x⊢ HasFDerivAtcouplingPotential((2*x.ofLp0+x.ofLp1)•EuclideanSpace.proj0+(x.ofLp0+2*x.ofLp1)•EuclideanSpace.proj1)xconvert!HasFDerivAt.add(HasFDerivAt.add(h0.pow2)(h0.mulh1))(h1.pow2)using1e'_12x:EuclideanSpaceℝ(Fin2)h0:HasFDerivAt(funx=>x.ofLp0)(EuclideanSpace.proj0)xh1:HasFDerivAt(funx=>x.ofLp1)(EuclideanSpace.proj1)xe_4✝:WithLp.instAddCommGroup2((i:Fin2)→(funx=>ℝ)i)=(PiLp.normedAddCommGroup2funx=>ℝ).toAddCommGrouphe✝¹:WithLp.instModule2ℝ((i:Fin2)→(funx=>ℝ)i)=(PiLp.normedSpace2ℝfunx=>ℝ).toModulee_6✝:(PiLp.topologicalSpace2funx=>ℝ)=PseudoMetricSpace.toUniformSpace.toTopologicalSpacee_8✝:Real.instAddCommGroup=Real.normedAddCommGroup.toAddCommGrouphe✝:Semiring.toModule=RCLike.toInnerProductSpaceReal.toModule⊢ (2*x.ofLp0+x.ofLp1)•EuclideanSpace.proj0+(x.ofLp0+2*x.ofLp1)•EuclideanSpace.proj1=(2•x.ofLp0^(2-1))•EuclideanSpace.proj0+(x.ofLp0•EuclideanSpace.proj1+x.ofLp1•EuclideanSpace.proj0)+(2•x.ofLp1^(2-1))•EuclideanSpace.proj1exte'_12x:EuclideanSpaceℝ(Fin2)h0:HasFDerivAt(funx=>x.ofLp0)(EuclideanSpace.proj0)xh1:HasFDerivAt(funx=>x.ofLp1)(EuclideanSpace.proj1)xe_4✝:WithLp.instAddCommGroup2((i:Fin2)→(funx=>ℝ)i)=(PiLp.normedAddCommGroup2funx=>ℝ).toAddCommGrouphe✝¹:WithLp.instModule2ℝ((i:Fin2)→(funx=>ℝ)i)=(PiLp.normedSpace2ℝfunx=>ℝ).toModulee_6✝:(PiLp.topologicalSpace2funx=>ℝ)=PseudoMetricSpace.toUniformSpace.toTopologicalSpacee_8✝:Real.instAddCommGroup=Real.normedAddCommGroup.toAddCommGrouphe✝:Semiring.toModule=RCLike.toInnerProductSpaceReal.toModulex✝:EuclideanSpaceℝ(Fin2)⊢ ((2*x.ofLp0+x.ofLp1)•EuclideanSpace.proj0+(x.ofLp0+2*x.ofLp1)•EuclideanSpace.proj1)x✝=((2•x.ofLp0^(2-1))•EuclideanSpace.proj0+(x.ofLp0•EuclideanSpace.proj1+x.ofLp1•EuclideanSpace.proj0)+(2•x.ofLp1^(2-1))•EuclideanSpace.proj1)x✝;norm_nume'_12x:EuclideanSpaceℝ(Fin2)h0:HasFDerivAt(funx=>x.ofLp0)(EuclideanSpace.proj0)xh1:HasFDerivAt(funx=>x.ofLp1)(EuclideanSpace.proj1)xe_4✝:WithLp.instAddCommGroup2((i:Fin2)→(funx=>ℝ)i)=(PiLp.normedAddCommGroup2funx=>ℝ).toAddCommGrouphe✝¹:WithLp.instModule2ℝ((i:Fin2)→(funx=>ℝ)i)=(PiLp.normedSpace2ℝfunx=>ℝ).toModulee_6✝:(PiLp.topologicalSpace2funx=>ℝ)=PseudoMetricSpace.toUniformSpace.toTopologicalSpacee_8✝:Real.instAddCommGroup=Real.normedAddCommGroup.toAddCommGrouphe✝:Semiring.toModule=RCLike.toInnerProductSpaceReal.toModulex✝:EuclideanSpaceℝ(Fin2)⊢ (2*x.ofLp0+x.ofLp1)*x✝.ofLp0+(x.ofLp0+2*x.ofLp1)*x✝.ofLp1=2*x.ofLp0*x✝.ofLp0+(x.ofLp0*x✝.ofLp1+x.ofLp1*x✝.ofLp0)+2*x.ofLp1*x✝.ofLp1;ringAll goals completed! 🐙/-
The gradient of the coupling potential vanishes at the origin.
-/lemmacouplingPotential_gradient_zero:gradientcouplingPotential(!2[0,0]:EuclideanSpaceℝ(Fin2))=0:=by⊢ gradientcouplingPotential!₂[0,0]=0convert!(InnerProductSpace.toDualℝ(EuclideanSpaceℝ(Fin2))).symm_apply_eq.mpr?_convert_3⊢ fderivℝcouplingPotential!₂[0,0]=(InnerProductSpace.toDualℝ(EuclideanSpaceℝ(Fin2))).toLinearEquiv0;convert!HasFDerivAt.fderiv(couplingPotential_hasFDerivAt_)using1e'_3⊢ (InnerProductSpace.toDualℝ(EuclideanSpaceℝ(Fin2))).toLinearEquiv0=(2*!₂[0,0].ofLp0+!₂[0,0].ofLp1)•EuclideanSpace.proj0+(!₂[0,0].ofLp0+2*!₂[0,0].ofLp1)•EuclideanSpace.proj1norm_num[fderiv_apply_one_eq_deriv]All goals completed! 🐙/-
The value of the second derivative quadratic map of the coupling potential.
-/lemmacouplingPotential_iteratedFDeriv_two(z:EuclideanSpaceℝ(Fin2))(ab:EuclideanSpaceℝ(Fin2)):iteratedFDerivℝ2couplingPotentialz![a,b]=2*a0*b0+a0*b1+a1*b0+2*a1*b1:=byz:EuclideanSpaceℝ(Fin2)a:EuclideanSpaceℝ(Fin2)b:EuclideanSpaceℝ(Fin2)⊢ (iteratedFDerivℝ2couplingPotentialz)![a,b]=2*a.ofLp0*b.ofLp0+a.ofLp0*b.ofLp1+a.ofLp1*b.ofLp0+2*a.ofLp1*b.ofLp1haveh_second_deriv:fderivℝ(fderivℝcouplingPotential)z=(2•(EuclideanSpace.proj(𝕜:=ℝ)0).smulRight(EuclideanSpace.proj(𝕜:=ℝ)0)+(EuclideanSpace.proj(𝕜:=ℝ)0).smulRight(EuclideanSpace.proj(𝕜:=ℝ)1)+(EuclideanSpace.proj(𝕜:=ℝ)1).smulRight(EuclideanSpace.proj(𝕜:=ℝ)0)+2•(EuclideanSpace.proj(𝕜:=ℝ)1).smulRight(EuclideanSpace.proj(𝕜:=ℝ)1)):=byrefine'HasFDerivAt.fderiv_z:EuclideanSpaceℝ(Fin2)a:EuclideanSpaceℝ(Fin2)b:EuclideanSpaceℝ(Fin2)⊢ HasFDerivAt(fderivℝcouplingPotential)(2•ContinuousLinearMap.smulRight(EuclideanSpace.proj0)(EuclideanSpace.proj0)+ContinuousLinearMap.smulRight(EuclideanSpace.proj0)(EuclideanSpace.proj1)+ContinuousLinearMap.smulRight(EuclideanSpace.proj1)(EuclideanSpace.proj0)+2•ContinuousLinearMap.smulRight(EuclideanSpace.proj1)(EuclideanSpace.proj1))zz:EuclideanSpaceℝ(Fin2)a:EuclideanSpaceℝ(Fin2)b:EuclideanSpaceℝ(Fin2)h_second_deriv:fderivℝ(fderivℝcouplingPotential)z=2•ContinuousLinearMap.smulRight(EuclideanSpace.proj0)(EuclideanSpace.proj0)+ContinuousLinearMap.smulRight(EuclideanSpace.proj0)(EuclideanSpace.proj1)+ContinuousLinearMap.smulRight(EuclideanSpace.proj1)(EuclideanSpace.proj0)+2•ContinuousLinearMap.smulRight(EuclideanSpace.proj1)(EuclideanSpace.proj1)⊢ (iteratedFDerivℝ2couplingPotentialz)![a,b]=2*a.ofLp0*b.ofLp0+a.ofLp0*b.ofLp1+a.ofLp1*b.ofLp0+2*a.ofLp1*b.ofLp1;rw[showfderivℝcouplingPotential=_fromfunextfunx=>HasFDerivAt.fderiv(couplingPotential_hasFDerivAtx)z:EuclideanSpaceℝ(Fin2)a:EuclideanSpaceℝ(Fin2)b:EuclideanSpaceℝ(Fin2)⊢ HasFDerivAt(funx=>(2*x.ofLp0+x.ofLp1)•EuclideanSpace.proj0+(x.ofLp0+2*x.ofLp1)•EuclideanSpace.proj1)(2•ContinuousLinearMap.smulRight(EuclideanSpace.proj0)(EuclideanSpace.proj0)+ContinuousLinearMap.smulRight(EuclideanSpace.proj0)(EuclideanSpace.proj1)+ContinuousLinearMap.smulRight(EuclideanSpace.proj1)(EuclideanSpace.proj0)+2•ContinuousLinearMap.smulRight(EuclideanSpace.proj1)(EuclideanSpace.proj1))zz:EuclideanSpaceℝ(Fin2)a:EuclideanSpaceℝ(Fin2)b:EuclideanSpaceℝ(Fin2)⊢ HasFDerivAt(funx=>(2*x.ofLp0+x.ofLp1)•EuclideanSpace.proj0+(x.ofLp0+2*x.ofLp1)•EuclideanSpace.proj1)(2•ContinuousLinearMap.smulRight(EuclideanSpace.proj0)(EuclideanSpace.proj0)+ContinuousLinearMap.smulRight(EuclideanSpace.proj0)(EuclideanSpace.proj1)+ContinuousLinearMap.smulRight(EuclideanSpace.proj1)(EuclideanSpace.proj0)+2•ContinuousLinearMap.smulRight(EuclideanSpace.proj1)(EuclideanSpace.proj1))zz:EuclideanSpaceℝ(Fin2)a:EuclideanSpaceℝ(Fin2)b:EuclideanSpaceℝ(Fin2)h_second_deriv:fderivℝ(fderivℝcouplingPotential)z=2•ContinuousLinearMap.smulRight(EuclideanSpace.proj0)(EuclideanSpace.proj0)+ContinuousLinearMap.smulRight(EuclideanSpace.proj0)(EuclideanSpace.proj1)+ContinuousLinearMap.smulRight(EuclideanSpace.proj1)(EuclideanSpace.proj0)+2•ContinuousLinearMap.smulRight(EuclideanSpace.proj1)(EuclideanSpace.proj1)⊢ (iteratedFDerivℝ2couplingPotentialz)![a,b]=2*a.ofLp0*b.ofLp0+a.ofLp0*b.ofLp1+a.ofLp1*b.ofLp0+2*a.ofLp1*b.ofLp1]z:EuclideanSpaceℝ(Fin2)a:EuclideanSpaceℝ(Fin2)b:EuclideanSpaceℝ(Fin2)⊢ HasFDerivAt(funx=>(2*x.ofLp0+x.ofLp1)•EuclideanSpace.proj0+(x.ofLp0+2*x.ofLp1)•EuclideanSpace.proj1)(2•ContinuousLinearMap.smulRight(EuclideanSpace.proj0)(EuclideanSpace.proj0)+ContinuousLinearMap.smulRight(EuclideanSpace.proj0)(EuclideanSpace.proj1)+ContinuousLinearMap.smulRight(EuclideanSpace.proj1)(EuclideanSpace.proj0)+2•ContinuousLinearMap.smulRight(EuclideanSpace.proj1)(EuclideanSpace.proj1))zz:EuclideanSpaceℝ(Fin2)a:EuclideanSpaceℝ(Fin2)b:EuclideanSpaceℝ(Fin2)h_second_deriv:fderivℝ(fderivℝcouplingPotential)z=2•ContinuousLinearMap.smulRight(EuclideanSpace.proj0)(EuclideanSpace.proj0)+ContinuousLinearMap.smulRight(EuclideanSpace.proj0)(EuclideanSpace.proj1)+ContinuousLinearMap.smulRight(EuclideanSpace.proj1)(EuclideanSpace.proj0)+2•ContinuousLinearMap.smulRight(EuclideanSpace.proj1)(EuclideanSpace.proj1)⊢ (iteratedFDerivℝ2couplingPotentialz)![a,b]=2*a.ofLp0*b.ofLp0+a.ofLp0*b.ofLp1+a.ofLp1*b.ofLp0+2*a.ofLp1*b.ofLp1;rw[hasFDerivAt_iff_isLittleO_nhds_zeroz:EuclideanSpaceℝ(Fin2)a:EuclideanSpaceℝ(Fin2)b:EuclideanSpaceℝ(Fin2)⊢ (funh=>(2*(z+h).ofLp0+(z+h).ofLp1)•EuclideanSpace.proj0+((z+h).ofLp0+2*(z+h).ofLp1)•EuclideanSpace.proj1-((2*z.ofLp0+z.ofLp1)•EuclideanSpace.proj0+(z.ofLp0+2*z.ofLp1)•EuclideanSpace.proj1)-(2•ContinuousLinearMap.smulRight(EuclideanSpace.proj0)(EuclideanSpace.proj0)+ContinuousLinearMap.smulRight(EuclideanSpace.proj0)(EuclideanSpace.proj1)+ContinuousLinearMap.smulRight(EuclideanSpace.proj1)(EuclideanSpace.proj0)+2•ContinuousLinearMap.smulRight(EuclideanSpace.proj1)(EuclideanSpace.proj1))h)=o[nhds0]funh=>hz:EuclideanSpaceℝ(Fin2)a:EuclideanSpaceℝ(Fin2)b:EuclideanSpaceℝ(Fin2)⊢ (funh=>(2*(z+h).ofLp0+(z+h).ofLp1)•EuclideanSpace.proj0+((z+h).ofLp0+2*(z+h).ofLp1)•EuclideanSpace.proj1-((2*z.ofLp0+z.ofLp1)•EuclideanSpace.proj0+(z.ofLp0+2*z.ofLp1)•EuclideanSpace.proj1)-(2•ContinuousLinearMap.smulRight(EuclideanSpace.proj0)(EuclideanSpace.proj0)+ContinuousLinearMap.smulRight(EuclideanSpace.proj0)(EuclideanSpace.proj1)+ContinuousLinearMap.smulRight(EuclideanSpace.proj1)(EuclideanSpace.proj0)+2•ContinuousLinearMap.smulRight(EuclideanSpace.proj1)(EuclideanSpace.proj1))h)=o[nhds0]funh=>hz:EuclideanSpaceℝ(Fin2)a:EuclideanSpaceℝ(Fin2)b:EuclideanSpaceℝ(Fin2)h_second_deriv:fderivℝ(fderivℝcouplingPotential)z=2•ContinuousLinearMap.smulRight(EuclideanSpace.proj0)(EuclideanSpace.proj0)+ContinuousLinearMap.smulRight(EuclideanSpace.proj0)(EuclideanSpace.proj1)+ContinuousLinearMap.smulRight(EuclideanSpace.proj1)(EuclideanSpace.proj0)+2•ContinuousLinearMap.smulRight(EuclideanSpace.proj1)(EuclideanSpace.proj1)⊢ (iteratedFDerivℝ2couplingPotentialz)![a,b]=2*a.ofLp0*b.ofLp0+a.ofLp0*b.ofLp1+a.ofLp1*b.ofLp0+2*a.ofLp1*b.ofLp1]z:EuclideanSpaceℝ(Fin2)a:EuclideanSpaceℝ(Fin2)b:EuclideanSpaceℝ(Fin2)⊢ (funh=>(2*(z+h).ofLp0+(z+h).ofLp1)•EuclideanSpace.proj0+((z+h).ofLp0+2*(z+h).ofLp1)•EuclideanSpace.proj1-((2*z.ofLp0+z.ofLp1)•EuclideanSpace.proj0+(z.ofLp0+2*z.ofLp1)•EuclideanSpace.proj1)-(2•ContinuousLinearMap.smulRight(EuclideanSpace.proj0)(EuclideanSpace.proj0)+ContinuousLinearMap.smulRight(EuclideanSpace.proj0)(EuclideanSpace.proj1)+ContinuousLinearMap.smulRight(EuclideanSpace.proj1)(EuclideanSpace.proj0)+2•ContinuousLinearMap.smulRight(EuclideanSpace.proj1)(EuclideanSpace.proj1))h)=o[nhds0]funh=>hz:EuclideanSpaceℝ(Fin2)a:EuclideanSpaceℝ(Fin2)b:EuclideanSpaceℝ(Fin2)h_second_deriv:fderivℝ(fderivℝcouplingPotential)z=2•ContinuousLinearMap.smulRight(EuclideanSpace.proj0)(EuclideanSpace.proj0)+ContinuousLinearMap.smulRight(EuclideanSpace.proj0)(EuclideanSpace.proj1)+ContinuousLinearMap.smulRight(EuclideanSpace.proj1)(EuclideanSpace.proj0)+2•ContinuousLinearMap.smulRight(EuclideanSpace.proj1)(EuclideanSpace.proj1)⊢ (iteratedFDerivℝ2couplingPotentialz)![a,b]=2*a.ofLp0*b.ofLp0+a.ofLp0*b.ofLp1+a.ofLp1*b.ofLp0+2*a.ofLp1*b.ofLp1;norm_num[Asymptotics.isLittleO_iff]z:EuclideanSpaceℝ(Fin2)a:EuclideanSpaceℝ(Fin2)b:EuclideanSpaceℝ(Fin2)⊢ ∀⦃c:ℝ⦄,0<c→∀ᶠ(x:EuclideanSpaceℝ(Fin2))innhds0,‖(2*(z.ofLp0+x.ofLp0)+(z.ofLp1+x.ofLp1))•EuclideanSpace.proj0+(z.ofLp0+x.ofLp0+2*(z.ofLp1+x.ofLp1))•EuclideanSpace.proj1-((2*z.ofLp0+z.ofLp1)•EuclideanSpace.proj0+(z.ofLp0+2*z.ofLp1)•EuclideanSpace.proj1)-(2•x.ofLp0•EuclideanSpace.proj0+x.ofLp0•EuclideanSpace.proj1+x.ofLp1•EuclideanSpace.proj0+2•x.ofLp1•EuclideanSpace.proj1)‖≤c*‖x‖z:EuclideanSpaceℝ(Fin2)a:EuclideanSpaceℝ(Fin2)b:EuclideanSpaceℝ(Fin2)h_second_deriv:fderivℝ(fderivℝcouplingPotential)z=2•ContinuousLinearMap.smulRight(EuclideanSpace.proj0)(EuclideanSpace.proj0)+ContinuousLinearMap.smulRight(EuclideanSpace.proj0)(EuclideanSpace.proj1)+ContinuousLinearMap.smulRight(EuclideanSpace.proj1)(EuclideanSpace.proj0)+2•ContinuousLinearMap.smulRight(EuclideanSpace.proj1)(EuclideanSpace.proj1)⊢ (iteratedFDerivℝ2couplingPotentialz)![a,b]=2*a.ofLp0*b.ofLp0+a.ofLp0*b.ofLp1+a.ofLp1*b.ofLp0+2*a.ofLp1*b.ofLp1;introεhεz:EuclideanSpaceℝ(Fin2)a:EuclideanSpaceℝ(Fin2)b:EuclideanSpaceℝ(Fin2)ε:ℝhε:0<ε⊢ ∀ᶠ(x:EuclideanSpaceℝ(Fin2))innhds0,‖(2*(z.ofLp0+x.ofLp0)+(z.ofLp1+x.ofLp1))•EuclideanSpace.proj0+(z.ofLp0+x.ofLp0+2*(z.ofLp1+x.ofLp1))•EuclideanSpace.proj1-((2*z.ofLp0+z.ofLp1)•EuclideanSpace.proj0+(z.ofLp0+2*z.ofLp1)•EuclideanSpace.proj1)-(2•x.ofLp0•EuclideanSpace.proj0+x.ofLp0•EuclideanSpace.proj1+x.ofLp1•EuclideanSpace.proj0+2•x.ofLp1•EuclideanSpace.proj1)‖≤ε*‖x‖z:EuclideanSpaceℝ(Fin2)a:EuclideanSpaceℝ(Fin2)b:EuclideanSpaceℝ(Fin2)h_second_deriv:fderivℝ(fderivℝcouplingPotential)z=2•ContinuousLinearMap.smulRight(EuclideanSpace.proj0)(EuclideanSpace.proj0)+ContinuousLinearMap.smulRight(EuclideanSpace.proj0)(EuclideanSpace.proj1)+ContinuousLinearMap.smulRight(EuclideanSpace.proj1)(EuclideanSpace.proj0)+2•ContinuousLinearMap.smulRight(EuclideanSpace.proj1)(EuclideanSpace.proj1)⊢ (iteratedFDerivℝ2couplingPotentialz)![a,b]=2*a.ofLp0*b.ofLp0+a.ofLp0*b.ofLp1+a.ofLp1*b.ofLp0+2*a.ofLp1*b.ofLp1;filter_upwards[Metric.ball_mem_nhds_hε]withxhxz:EuclideanSpaceℝ(Fin2)a:EuclideanSpaceℝ(Fin2)b:EuclideanSpaceℝ(Fin2)ε:ℝhε:0<εx:EuclideanSpaceℝ(Fin2)hx:x∈Metric.ball0ε⊢ ‖(2*(z.ofLp0+x.ofLp0)+(z.ofLp1+x.ofLp1))•EuclideanSpace.proj0+(z.ofLp0+x.ofLp0+2*(z.ofLp1+x.ofLp1))•EuclideanSpace.proj1-((2*z.ofLp0+z.ofLp1)•EuclideanSpace.proj0+(z.ofLp0+2*z.ofLp1)•EuclideanSpace.proj1)-(2•x.ofLp0•EuclideanSpace.proj0+x.ofLp0•EuclideanSpace.proj1+x.ofLp1•EuclideanSpace.proj0+2•x.ofLp1•EuclideanSpace.proj1)‖≤ε*‖x‖z:EuclideanSpaceℝ(Fin2)a:EuclideanSpaceℝ(Fin2)b:EuclideanSpaceℝ(Fin2)h_second_deriv:fderivℝ(fderivℝcouplingPotential)z=2•ContinuousLinearMap.smulRight(EuclideanSpace.proj0)(EuclideanSpace.proj0)+ContinuousLinearMap.smulRight(EuclideanSpace.proj0)(EuclideanSpace.proj1)+ContinuousLinearMap.smulRight(EuclideanSpace.proj1)(EuclideanSpace.proj0)+2•ContinuousLinearMap.smulRight(EuclideanSpace.proj1)(EuclideanSpace.proj1)⊢ (iteratedFDerivℝ2couplingPotentialz)![a,b]=2*a.ofLp0*b.ofLp0+a.ofLp0*b.ofLp1+a.ofLp1*b.ofLp0+2*a.ofLp1*b.ofLp1;ring_nfz:EuclideanSpaceℝ(Fin2)a:EuclideanSpaceℝ(Fin2)b:EuclideanSpaceℝ(Fin2)ε:ℝhε:0<εx:EuclideanSpaceℝ(Fin2)hx:x∈Metric.ball0ε⊢ ‖(z.ofLp0*2+x.ofLp0*2+z.ofLp1+x.ofLp1)•EuclideanSpace.proj0+(z.ofLp0+x.ofLp0+z.ofLp1*2+x.ofLp1*2)•EuclideanSpace.proj1-((z.ofLp0*2+z.ofLp1)•EuclideanSpace.proj0+(z.ofLp0+z.ofLp1*2)•EuclideanSpace.proj1)-(2•x.ofLp0•EuclideanSpace.proj0+x.ofLp0•EuclideanSpace.proj1+x.ofLp1•EuclideanSpace.proj0+2•x.ofLp1•EuclideanSpace.proj1)‖≤ε*‖x‖z:EuclideanSpaceℝ(Fin2)a:EuclideanSpaceℝ(Fin2)b:EuclideanSpaceℝ(Fin2)h_second_deriv:fderivℝ(fderivℝcouplingPotential)z=2•ContinuousLinearMap.smulRight(EuclideanSpace.proj0)(EuclideanSpace.proj0)+ContinuousLinearMap.smulRight(EuclideanSpace.proj0)(EuclideanSpace.proj1)+ContinuousLinearMap.smulRight(EuclideanSpace.proj1)(EuclideanSpace.proj0)+2•ContinuousLinearMap.smulRight(EuclideanSpace.proj1)(EuclideanSpace.proj1)⊢ (iteratedFDerivℝ2couplingPotentialz)![a,b]=2*a.ofLp0*b.ofLp0+a.ofLp0*b.ofLp1+a.ofLp1*b.ofLp0+2*a.ofLp1*b.ofLp1;erw[show((z.ofLp0*2+x.ofLp0*2+z.ofLp1+x.ofLp1)•EuclideanSpace.proj0+(z.ofLp0+x.ofLp0+z.ofLp1*2+x.ofLp1*2)•EuclideanSpace.proj1-((z.ofLp0*2+z.ofLp1)•EuclideanSpace.proj0+(z.ofLp0+z.ofLp1*2)•EuclideanSpace.proj1)-(2•x.ofLp0•EuclideanSpace.proj0+x.ofLp0•EuclideanSpace.proj1+x.ofLp1•EuclideanSpace.proj0+2•x.ofLp1•EuclideanSpace.proj1):EuclideanSpaceℝ(Fin2)→L[ℝ]ℝ)=0frombyz:EuclideanSpaceℝ(Fin2)a:EuclideanSpaceℝ(Fin2)b:EuclideanSpaceℝ(Fin2)ε:ℝhε:0<εx:EuclideanSpaceℝ(Fin2)hx:x∈Metric.ball0ε⊢ (z.ofLp0*2+x.ofLp0*2+z.ofLp1+x.ofLp1)•EuclideanSpace.proj0+(z.ofLp0+x.ofLp0+z.ofLp1*2+x.ofLp1*2)•EuclideanSpace.proj1-((z.ofLp0*2+z.ofLp1)•EuclideanSpace.proj0+(z.ofLp0+z.ofLp1*2)•EuclideanSpace.proj1)-(2•x.ofLp0•EuclideanSpace.proj0+x.ofLp0•EuclideanSpace.proj1+x.ofLp1•EuclideanSpace.proj0+2•x.ofLp1•EuclideanSpace.proj1)=0z:EuclideanSpaceℝ(Fin2)a:EuclideanSpaceℝ(Fin2)b:EuclideanSpaceℝ(Fin2)h_second_deriv:fderivℝ(fderivℝcouplingPotential)z=2•ContinuousLinearMap.smulRight(EuclideanSpace.proj0)(EuclideanSpace.proj0)+ContinuousLinearMap.smulRight(EuclideanSpace.proj0)(EuclideanSpace.proj1)+ContinuousLinearMap.smulRight(EuclideanSpace.proj1)(EuclideanSpace.proj0)+2•ContinuousLinearMap.smulRight(EuclideanSpace.proj1)(EuclideanSpace.proj1)⊢ (iteratedFDerivℝ2couplingPotentialz)![a,b]=2*a.ofLp0*b.ofLp0+a.ofLp0*b.ofLp1+a.ofLp1*b.ofLp0+2*a.ofLp1*b.ofLp1extz:EuclideanSpaceℝ(Fin2)a:EuclideanSpaceℝ(Fin2)b:EuclideanSpaceℝ(Fin2)ε:ℝhε:0<εx:EuclideanSpaceℝ(Fin2)hx:x∈Metric.ball0εx✝:EuclideanSpaceℝ(Fin2)⊢ ((z.ofLp0*2+x.ofLp0*2+z.ofLp1+x.ofLp1)•EuclideanSpace.proj0+(z.ofLp0+x.ofLp0+z.ofLp1*2+x.ofLp1*2)•EuclideanSpace.proj1-((z.ofLp0*2+z.ofLp1)•EuclideanSpace.proj0+(z.ofLp0+z.ofLp1*2)•EuclideanSpace.proj1)-(2•x.ofLp0•EuclideanSpace.proj0+x.ofLp0•EuclideanSpace.proj1+x.ofLp1•EuclideanSpace.proj0+2•x.ofLp1•EuclideanSpace.proj1))x✝=0x✝z:EuclideanSpaceℝ(Fin2)a:EuclideanSpaceℝ(Fin2)b:EuclideanSpaceℝ(Fin2)h_second_deriv:fderivℝ(fderivℝcouplingPotential)z=2•ContinuousLinearMap.smulRight(EuclideanSpace.proj0)(EuclideanSpace.proj0)+ContinuousLinearMap.smulRight(EuclideanSpace.proj0)(EuclideanSpace.proj1)+ContinuousLinearMap.smulRight(EuclideanSpace.proj1)(EuclideanSpace.proj0)+2•ContinuousLinearMap.smulRight(EuclideanSpace.proj1)(EuclideanSpace.proj1)⊢ (iteratedFDerivℝ2couplingPotentialz)![a,b]=2*a.ofLp0*b.ofLp0+a.ofLp0*b.ofLp1+a.ofLp1*b.ofLp0+2*a.ofLp1*b.ofLp1;norm_numz:EuclideanSpaceℝ(Fin2)a:EuclideanSpaceℝ(Fin2)b:EuclideanSpaceℝ(Fin2)ε:ℝhε:0<εx:EuclideanSpaceℝ(Fin2)hx:x∈Metric.ball0εx✝:EuclideanSpaceℝ(Fin2)⊢ (z.ofLp0*2+x.ofLp0*2+z.ofLp1+x.ofLp1)*x✝.ofLp0+(z.ofLp0+x.ofLp0+z.ofLp1*2+x.ofLp1*2)*x✝.ofLp1-((z.ofLp0*2+z.ofLp1)*x✝.ofLp0+(z.ofLp0+z.ofLp1*2)*x✝.ofLp1)-(2*(x.ofLp0*x✝.ofLp0)+x.ofLp0*x✝.ofLp1+x.ofLp1*x✝.ofLp0+2*(x.ofLp1*x✝.ofLp1))=0z:EuclideanSpaceℝ(Fin2)a:EuclideanSpaceℝ(Fin2)b:EuclideanSpaceℝ(Fin2)h_second_deriv:fderivℝ(fderivℝcouplingPotential)z=2•ContinuousLinearMap.smulRight(EuclideanSpace.proj0)(EuclideanSpace.proj0)+ContinuousLinearMap.smulRight(EuclideanSpace.proj0)(EuclideanSpace.proj1)+ContinuousLinearMap.smulRight(EuclideanSpace.proj1)(EuclideanSpace.proj0)+2•ContinuousLinearMap.smulRight(EuclideanSpace.proj1)(EuclideanSpace.proj1)⊢ (iteratedFDerivℝ2couplingPotentialz)![a,b]=2*a.ofLp0*b.ofLp0+a.ofLp0*b.ofLp1+a.ofLp1*b.ofLp0+2*a.ofLp1*b.ofLp1;ringAll goals completed! 🐙z:EuclideanSpaceℝ(Fin2)a:EuclideanSpaceℝ(Fin2)b:EuclideanSpaceℝ(Fin2)h_second_deriv:fderivℝ(fderivℝcouplingPotential)z=2•ContinuousLinearMap.smulRight(EuclideanSpace.proj0)(EuclideanSpace.proj0)+ContinuousLinearMap.smulRight(EuclideanSpace.proj0)(EuclideanSpace.proj1)+ContinuousLinearMap.smulRight(EuclideanSpace.proj1)(EuclideanSpace.proj0)+2•ContinuousLinearMap.smulRight(EuclideanSpace.proj1)(EuclideanSpace.proj1)⊢ (iteratedFDerivℝ2couplingPotentialz)![a,b]=2*a.ofLp0*b.ofLp0+a.ofLp0*b.ofLp1+a.ofLp1*b.ofLp0+2*a.ofLp1*b.ofLp1]z:EuclideanSpaceℝ(Fin2)a:EuclideanSpaceℝ(Fin2)b:EuclideanSpaceℝ(Fin2)ε:ℝhε:0<εx:EuclideanSpaceℝ(Fin2)hx:x∈Metric.ball0ε⊢ ‖0‖≤ε*‖x‖z:EuclideanSpaceℝ(Fin2)a:EuclideanSpaceℝ(Fin2)b:EuclideanSpaceℝ(Fin2)h_second_deriv:fderivℝ(fderivℝcouplingPotential)z=2•ContinuousLinearMap.smulRight(EuclideanSpace.proj0)(EuclideanSpace.proj0)+ContinuousLinearMap.smulRight(EuclideanSpace.proj0)(EuclideanSpace.proj1)+ContinuousLinearMap.smulRight(EuclideanSpace.proj1)(EuclideanSpace.proj0)+2•ContinuousLinearMap.smulRight(EuclideanSpace.proj1)(EuclideanSpace.proj1)⊢ (iteratedFDerivℝ2couplingPotentialz)![a,b]=2*a.ofLp0*b.ofLp0+a.ofLp0*b.ofLp1+a.ofLp1*b.ofLp0+2*a.ofLp1*b.ofLp1;norm_num[hε.le]z:EuclideanSpaceℝ(Fin2)a:EuclideanSpaceℝ(Fin2)b:EuclideanSpaceℝ(Fin2)ε:ℝhε:0<εx:EuclideanSpaceℝ(Fin2)hx:x∈Metric.ball0ε⊢ 0≤ε*‖x‖z:EuclideanSpaceℝ(Fin2)a:EuclideanSpaceℝ(Fin2)b:EuclideanSpaceℝ(Fin2)h_second_deriv:fderivℝ(fderivℝcouplingPotential)z=2•ContinuousLinearMap.smulRight(EuclideanSpace.proj0)(EuclideanSpace.proj0)+ContinuousLinearMap.smulRight(EuclideanSpace.proj0)(EuclideanSpace.proj1)+ContinuousLinearMap.smulRight(EuclideanSpace.proj1)(EuclideanSpace.proj0)+2•ContinuousLinearMap.smulRight(EuclideanSpace.proj1)(EuclideanSpace.proj1)⊢ (iteratedFDerivℝ2couplingPotentialz)![a,b]=2*a.ofLp0*b.ofLp0+a.ofLp0*b.ofLp1+a.ofLp1*b.ofLp0+2*a.ofLp1*b.ofLp1;positivityAll goals completed! 🐙z:EuclideanSpaceℝ(Fin2)a:EuclideanSpaceℝ(Fin2)b:EuclideanSpaceℝ(Fin2)h_second_deriv:fderivℝ(fderivℝcouplingPotential)z=2•ContinuousLinearMap.smulRight(EuclideanSpace.proj0)(EuclideanSpace.proj0)+ContinuousLinearMap.smulRight(EuclideanSpace.proj0)(EuclideanSpace.proj1)+ContinuousLinearMap.smulRight(EuclideanSpace.proj1)(EuclideanSpace.proj0)+2•ContinuousLinearMap.smulRight(EuclideanSpace.proj1)(EuclideanSpace.proj1)⊢ (iteratedFDerivℝ2couplingPotentialz)![a,b]=2*a.ofLp0*b.ofLp0+a.ofLp0*b.ofLp1+a.ofLp1*b.ofLp0+2*a.ofLp1*b.ofLp1;z:EuclideanSpaceℝ(Fin2)a:EuclideanSpaceℝ(Fin2)b:EuclideanSpaceℝ(Fin2)h_second_deriv:fderivℝ(fderivℝcouplingPotential)z=2•ContinuousLinearMap.smulRight(EuclideanSpace.proj0)(EuclideanSpace.proj0)+ContinuousLinearMap.smulRight(EuclideanSpace.proj0)(EuclideanSpace.proj1)+ContinuousLinearMap.smulRight(EuclideanSpace.proj1)(EuclideanSpace.proj0)+2•ContinuousLinearMap.smulRight(EuclideanSpace.proj1)(EuclideanSpace.proj1)⊢ (iteratedFDerivℝ2couplingPotentialz)![a,b]=2*a.ofLp0*b.ofLp0+a.ofLp0*b.ofLp1+a.ofLp1*b.ofLp0+2*a.ofLp1*b.ofLp1rw[iteratedFDeriv_succ_apply_rightz:EuclideanSpaceℝ(Fin2)a:EuclideanSpaceℝ(Fin2)b:EuclideanSpaceℝ(Fin2)h_second_deriv:fderivℝ(fderivℝcouplingPotential)z=2•ContinuousLinearMap.smulRight(EuclideanSpace.proj0)(EuclideanSpace.proj0)+ContinuousLinearMap.smulRight(EuclideanSpace.proj0)(EuclideanSpace.proj1)+ContinuousLinearMap.smulRight(EuclideanSpace.proj1)(EuclideanSpace.proj0)+2•ContinuousLinearMap.smulRight(EuclideanSpace.proj1)(EuclideanSpace.proj1)⊢ ((iteratedFDerivℝ1(funy=>fderivℝcouplingPotentialy)z)(Fin.init![a,b]))()=2*a.ofLp0*b.ofLp0+a.ofLp0*b.ofLp1+a.ofLp1*b.ofLp0+2*a.ofLp1*b.ofLp1z:EuclideanSpaceℝ(Fin2)a:EuclideanSpaceℝ(Fin2)b:EuclideanSpaceℝ(Fin2)h_second_deriv:fderivℝ(fderivℝcouplingPotential)z=2•ContinuousLinearMap.smulRight(EuclideanSpace.proj0)(EuclideanSpace.proj0)+ContinuousLinearMap.smulRight(EuclideanSpace.proj0)(EuclideanSpace.proj1)+ContinuousLinearMap.smulRight(EuclideanSpace.proj1)(EuclideanSpace.proj0)+2•ContinuousLinearMap.smulRight(EuclideanSpace.proj1)(EuclideanSpace.proj1)⊢ ((iteratedFDerivℝ1(funy=>fderivℝcouplingPotentialy)z)(Fin.init![a,b]))()=2*a.ofLp0*b.ofLp0+a.ofLp0*b.ofLp1+a.ofLp1*b.ofLp0+2*a.ofLp1*b.ofLp1]z:EuclideanSpaceℝ(Fin2)a:EuclideanSpaceℝ(Fin2)b:EuclideanSpaceℝ(Fin2)h_second_deriv:fderivℝ(fderivℝcouplingPotential)z=2•ContinuousLinearMap.smulRight(EuclideanSpace.proj0)(EuclideanSpace.proj0)+ContinuousLinearMap.smulRight(EuclideanSpace.proj0)(EuclideanSpace.proj1)+ContinuousLinearMap.smulRight(EuclideanSpace.proj1)(EuclideanSpace.proj0)+2•ContinuousLinearMap.smulRight(EuclideanSpace.proj1)(EuclideanSpace.proj1)⊢ ((iteratedFDerivℝ1(funy=>fderivℝcouplingPotentialy)z)(Fin.init![a,b]))()=2*a.ofLp0*b.ofLp0+a.ofLp0*b.ofLp1+a.ofLp1*b.ofLp0+2*a.ofLp1*b.ofLp1;simp+decide[h_second_deriv]z:EuclideanSpaceℝ(Fin2)a:EuclideanSpaceℝ(Fin2)b:EuclideanSpaceℝ(Fin2)h_second_deriv:fderivℝ(fderivℝcouplingPotential)z=2•ContinuousLinearMap.smulRight(EuclideanSpace.proj0)(EuclideanSpace.proj0)+ContinuousLinearMap.smulRight(EuclideanSpace.proj0)(EuclideanSpace.proj1)+ContinuousLinearMap.smulRight(EuclideanSpace.proj1)(EuclideanSpace.proj0)+2•ContinuousLinearMap.smulRight(EuclideanSpace.proj1)(EuclideanSpace.proj1)⊢ 2*((Fin.init![a,b]0).ofLp0*b.ofLp0)+(Fin.init![a,b]0).ofLp0*b.ofLp1+(Fin.init![a,b]0).ofLp1*b.ofLp0+2*((Fin.init![a,b]0).ofLp1*b.ofLp1)=2*a.ofLp0*b.ofLp0+a.ofLp0*b.ofLp1+a.ofLp1*b.ofLp0+2*a.ofLp1*b.ofLp1;ring!All goals completed! 🐙;/-
The second derivative quadratic map of the coupling potential is positive definite
at the origin.
-/lemmacouplingPotential_posDef:(iteratedFDerivQuadraticMapcouplingPotential(!2[0,0]:EuclideanSpaceℝ(Fin2))).PosDef:=by⊢ (iteratedFDerivQuadraticMapcouplingPotential!₂[0,0]).PosDefintrosyhyy:EuclideanSpaceℝ(Fin2)hy:y≠0⊢ 0<(iteratedFDerivQuadraticMapcouplingPotential!₂[0,0])y;convert!(show0<2*y0^2+2*y0*y1+2*y1^2by⊢ (iteratedFDerivQuadraticMapcouplingPotential!₂[0,0]).PosDefexactnot_le.mpfunh=>hy<|byy:EuclideanSpaceℝ(Fin2)hy:y≠0h:2*y.ofLp0^2+2*y.ofLp0*y.ofLp1+2*y.ofLp1^2≤0⊢ y=0extiy:EuclideanSpaceℝ(Fin2)hy:y≠0h:2*y.ofLp0^2+2*y.ofLp0*y.ofLp1+2*y.ofLp1^2≤0i:Fin2⊢ y.ofLpi=WithLp.ofLp0ifin_casesi«0»y:EuclideanSpaceℝ(Fin2)hy:y≠0h:2*y.ofLp0^2+2*y.ofLp0*y.ofLp1+2*y.ofLp1^2≤0⊢ y.ofLp((funi=>i)⟨0,⋯⟩)=WithLp.ofLp0((funi=>i)⟨0,⋯⟩)«1»y:EuclideanSpaceℝ(Fin2)hy:y≠0h:2*y.ofLp0^2+2*y.ofLp0*y.ofLp1+2*y.ofLp1^2≤0⊢ y.ofLp((funi=>i)⟨1,⋯⟩)=WithLp.ofLp0((funi=>i)⟨1,⋯⟩)<;>«0»y:EuclideanSpaceℝ(Fin2)hy:y≠0h:2*y.ofLp0^2+2*y.ofLp0*y.ofLp1+2*y.ofLp1^2≤0⊢ y.ofLp((funi=>i)⟨0,⋯⟩)=WithLp.ofLp0((funi=>i)⟨0,⋯⟩)«1»y:EuclideanSpaceℝ(Fin2)hy:y≠0h:2*y.ofLp0^2+2*y.ofLp0*y.ofLp1+2*y.ofLp1^2≤0⊢ y.ofLp((funi=>i)⟨1,⋯⟩)=WithLp.ofLp0((funi=>i)⟨1,⋯⟩)norm_num«1»y:EuclideanSpaceℝ(Fin2)hy:y≠0h:2*y.ofLp0^2+2*y.ofLp0*y.ofLp1+2*y.ofLp1^2≤0⊢ y.ofLp1=0<;>«0»y:EuclideanSpaceℝ(Fin2)hy:y≠0h:2*y.ofLp0^2+2*y.ofLp0*y.ofLp1+2*y.ofLp1^2≤0⊢ y.ofLp0=0«1»y:EuclideanSpaceℝ(Fin2)hy:y≠0h:2*y.ofLp0^2+2*y.ofLp0*y.ofLp1+2*y.ofLp1^2≤0⊢ y.ofLp1=0nlinarith![sq_nonneg(y.ofLp0+y.ofLp1)]All goals completed! 🐙)using1generalize_proofsat*e'_4y:EuclideanSpaceℝ(Fin2)hy:y≠0pf✝¹:Nat.AtLeastTwo2pf✝:NeZero2⊢ (iteratedFDerivQuadraticMapcouplingPotential!₂[0,0])y=2*y.ofLp0^2+2*y.ofLp0*y.ofLp1+2*y.ofLp1^2;convert!couplingPotential_iteratedFDeriv_two!2[0,0]yyusing1e'_3y:EuclideanSpaceℝ(Fin2)hy:y≠0pf✝¹:Nat.AtLeastTwo2pf✝:NeZero2⊢ 2*y.ofLp0^2+2*y.ofLp0*y.ofLp1+2*y.ofLp1^2=2*y.ofLp0*y.ofLp0+y.ofLp0*y.ofLp1+y.ofLp1*y.ofLp0+2*y.ofLp1*y.ofLp1;ring!All goals completed! 🐙lemmacoupled_spring_potential:letU:=funx:EuclideanSpaceℝ(Fin2)=>(x0)^2+x0*x1+(x1)^2IsLocalMinU{ofLp:=![0,0]}:=by⊢ letU:=funx=>x.ofLp0^2+x.ofLp0*x.ofLp1+x.ofLp1^2;IsLocalMinU!₂[0,0]showIsLocalMincouplingPotential(!2[0,0]:EuclideanSpaceℝ(Fin2))⊢ IsLocalMincouplingPotential!₂[0,0]exactsecond_derivative_test_analyticAtcouplingPotential_gradient_zero(couplingPotential_analyticAt_)couplingPotential_posDefAll goals completed! 🐙