Example 7.7: Taylor Series Solution of Parameterized Equilibria #
We prove existence of the curve x(λ) satisfying x(λ)² - λ = 0 near lam0 using the radii polynomial approach from Section 7.7.
The Problem #
Given the equation x² - λ = 0 with f(x₀, lam0) = 0 where x₀ = √lam0,
find a Taylor series x(λ) = Σₙ aₙ(λ - lam0)ⁿ satisfying the equation.
Taylor Series Formulation #
Substituting x(λ) = Σₙ aₙ(λ - lam0)ⁿ into x² - λ = 0:
- LHS:
(Σₙ aₙtⁿ)² = Σₙ (a ⋆ a)ₙ tⁿ(Cauchy product) - RHS:
λ = lam0 + twheret = λ - lam0
This gives the zero-finding problem: F(a) = a ⋆ a - c = 0
where c = (lam0, 1, 0, 0, ...).
The Operator Structure #
Following Theorem 7.7.1, the operators have block-diagonal structure:
- A† (approximate derivative):
DF⁽ᴺ⁾(ā)on indices 0..N,2ā₀on tail - A (approximate inverse):
(DF⁽ᴺ⁾(ā))⁻¹on indices 0..N,1/(2ā₀)on tail
This matches the BlockDiagOp structure from OperatorNorm.lean.
Main Results #
paramSeqSpace: The constant sequencec = (lam0, 1, 0, 0, ...)F_eq_sq_sub:F(a) = a ⋆ a - cDF_eq_two_leftMul:DF(a)h = 2(a ⋆ h)Y₀_bound,Z₀_bound,Z₁_bound,Z₂_bound: The bounds from Theorem 7.7.1existence_theorem: Application of Theorem 7.6.2
References #
- Section 7.7: Taylor series solution of parameterized equilibria
- Theorem 7.7.1: The radii polynomial bounds
- Equation (7.40): x² - λ = 0
- Equations (7.41)-(7.43): The sequence formulation
The Constant Sequence c #
For the equation x² - λ = 0 expanded around lam0, the constant sequence is: c = (lam0, 1, 0, 0, ...)
This encodes λ = lam0 + (λ - lam0) in Taylor coefficients.
The constant sequence c = (lam0, 1, 0, 0, ...) from equation (7.44). This encodes λ = lam0 + t where t = λ - lam0.
Equations
- Example_7_7.paramSeq lam0 0 = lam0
- Example_7_7.paramSeq lam0 1 = 1
- Example_7_7.paramSeq lam0 n = 0
Instances For
The constant sequence is in ℓ¹_ν
The constant sequence as an element of ℓ¹_ν
Equations
- Example_7_7.c lam0 = lpWeighted.mk (Example_7_7.paramSeq lam0) ⋯
Instances For
c₀ = lam0
c₁ = 1
cₙ = 0 for n ≥ 2
The Zero-Finding Map F #
The map F(a) = a ⋆ a - c from equation (7.43).
The zero-finding map F(a) = a ⋆ a - c
Equations
- Example_7_7.F lam0 a = l1Weighted.F_sub_const (Example_7_7.c lam0) a
Instances For
F(a) = sq(a) - c
Component formula for F (equation 7.43): F₀(a) = a₀² - lam0 F₁(a) = 2a₀a₁ - 1 Fₙ(a) = (a ⋆ a)ₙ for n ≥ 2
F is Fréchet differentiable
The Fréchet derivative: DF(a)h = 2(a ⋆ h)
The Approximate Solution #
For the concrete example with lam0 = 1/3, we have: ā₀ ≈ √(1/3) ≈ 0.577... ā₁ ≈ 1/(2ā₀) ≈ 0.866... etc.
The approximate solution satisfies F⁽ᴺ⁾(ā⁽ᴺ⁾) ≈ 0 for the truncated system.
The extended sequence is in ℓ¹_ν
The approximate solution as an element of ℓ¹_ν
Equations
- sol.toL1 = lpWeighted.mk sol.toSeq ⋯
Instances For
The Block-Diagonal Operator Structure #
Following Theorem 7.7.1, the operators A† and A have block-diagonal structure:
A† = [DF⁽ᴺ⁾(ā), 0 ; 0 , 2ā₀·I] A = [(DF⁽ᴺ⁾(ā))⁻¹, 0 ; 0 , (1/2ā₀)·I]
This matches the BlockDiagOp structure from OperatorNorm.lean.
Computed Finite Projections #
These definitions compute F⁽ᴺ⁾(ā) and DF⁽ᴺ⁾(ā) directly from the definitions, rather than taking them as hypotheses. This is more honest to the textbook setup.
F⁽ᴺ⁾(ā): the first N+1 components of F(ā) = ā⋆ā - c
Equations
- Example_7_7.F_fin lam0 sol n = lpWeighted.toSeq (Example_7_7.F lam0 sol.toL1) ↑n
Instances For
DF⁽ᴺ⁾(ā): the (N+1)×(N+1) lower triangular matrix with entries 2āᵢ₋ⱼ for j ≤ i
Equations
Instances For
The approximate inverse A as a block-diagonal operator (equation 7.48).
- Finite block: A⁽ᴺ⁾ (numerical inverse of DF⁽ᴺ⁾(ā))
- Tail scalar: 1/(2ā₀)
Equations
Instances For
The approximate derivative A† as a block-diagonal operator (equation 7.47).
- Finite block: DF⁽ᴺ⁾(ā) = lower triangular with (DF){i,j} = 2ā{i-j} for j ≤ i, 0 otherwise
- Tail scalar: 2ā₀
Equations
Instances For
The Radii Polynomial Bounds (Theorem 7.7.1) #
We now define the Y₀, Z₀, Z₁, Z₂ bounds.
Y₀ bound (equation from Theorem 7.7.1): Y₀ = Σₙ₌₀ᴺ |[A⁽ᴺ⁾F⁽ᴺ⁾(ā)]ₙ| νⁿ + (1/2|ā₀|) Σₙ₌ₙ₊₁²ᴺ (Σⱼ₌₀^{2N-n} |ā_{N-j}||ā_{n-N+j}|) νⁿ
Equivalently with index k = N - j: Σₖ₌ₙ₋ₙᴺ |āₖ||āₙ₋ₖ|
Note: The textbook has a typo with inner sum ∑ⱼ₌₀^{N-n} but this is empty for n > N. The correct range is ∑ⱼ₌₀^{2N-n}, which corresponds to k ∈ [n-N, N].
This measures how close ā is to being a true solution.
Equations
- One or more equations did not get rendered due to their size.
Instances For
Z₀ bound (equation from Theorem 7.7.1): Z₀ = ‖I - A⁽ᴺ⁾DF⁽ᴺ⁾(ā)‖_{1,ν}
This measures how well A⁽ᴺ⁾ inverts DF⁽ᴺ⁾(ā).
Equations
- Example_7_7.Z₀_bound sol A_fin = l1Weighted.finWeightedMatrixNorm ν (1 - A_fin * Example_7_7.DF_fin sol)
Instances For
Z₁ bound (equation from Theorem 7.7.1): Z₁ = (1/|ā₀|) Σₙ₌₁ᴺ |āₙ| νⁿ
This measures the tail contribution from DF(ā) - A†.
Equations
Instances For
Z₂ bound (equation from Theorem 7.7.1): Z₂ = 2 max(‖A⁽ᴺ⁾‖_{1,ν}, 1/(2|ā₀|))
This bounds ‖A[DF(c) - DF(ā)]‖ for c in a ball around ā.
Equations
- Example_7_7.Z₂_bound sol A_fin = 2 * max (l1Weighted.finWeightedMatrixNorm ν A_fin) (1 / (2 * |sol.aBar_fin 0|))
Instances For
The radii polynomial for Example 7.7, using the general definition from RadiiPolyGeneral.lean.
Note: Z₂ is constant in this example (doesn't depend on r).
Equations
- One or more equations did not get rendered due to their size.
Instances For
Helper Lemmas for Y₀ Bound (Theorem 7.7.1) #
These lemmas break down the proof of Y₀_bound_valid into manageable subgoals.
Key observations:
- ā is zero-padded: āₙ = 0 for n > N
- Therefore (ā ⋆ ā)ₙ = 0 for n > 2N
- F(ā) = ā ⋆ ā - c where c = (λ₀, 1, 0, 0, ...)
- The block-diagonal operator A acts as A⁽ᴺ⁾ on [0,N] and 1/(2ā₀) on (N,∞)
āₙ = 0 for n > N, where ā = ApproxSolution.toSeq sol = (ā₀, ā₁, ..., āₙ, 0, 0, 0, ...)
The finite part of ā equals ā_fin
Helper Lemmas for Z₀ Bound (Theorem 7.7.1) #
These lemmas break down the proof of Z₀_bound_valid into manageable subgoals.
Key observations from the textbook (page 173):
- approxDeriv.finBlock = DF_fin sol (both are 2āᵢ₋ⱼ)
- Tail scalars multiply to 1: (1/(2ā₀)) * (2ā₀) = 1
- Therefore I - AA† = 0 on tail
- On finite: I - AA† = I - A_fin * DF_fin
approxDeriv finite block equals DF_fin
toSeq of A†.toCLM equals A†.action of toSeq
toSeq of A.toCLM equals A.action of toSeq
Action of (I - AA†) on tail is zero
Action of (I - AA†) on finite equals (I - A_fin * DF_fin) h^(N)
The tail contribution of (I - AA†)h is zero in the ℓ¹_ν norm. This follows from I_sub_comp_action_tail_eq_zero: each term is zero.
The finite part of (I - AA†)h equals (I - A_fin * DF_fin) applied to h^(N). Converts CLM action to matrix multiplication form.
DF(ā) - A† is zero on finite block [0,N]. From page 173: [(DF(ā) - A†)h]_n = [DF^(N)(ā)h^(N)]_n - [DF^(N)(ā)h^(N)]_n = 0 Both operators agree on finite because A† IS defined as DF^(N)(ā) on this block.
DF(ā) - A† on tail (n > N) equals 2∑{j=1}^N h{n-j}ā_j. Since ā_k = 0 for k > N, (ā⋆h)n - ā₀h_n = ∑{j=1}^N h_{n-j}ā_j.
A(DF(ā) - A†) is zero on finite block. Since DF(ā) - A† = 0 on finite, applying A preserves this.
A(DF(ā) - A†) on tail equals (1/ā₀)∑{j=1}^N h{n-j}ā_j. From textbook page 174.
The shifted sequence â = (0, ā₁, ..., āₙ, 0, ...) used in Z₁ bound
Equations
- Example_7_7.shiftedSeq sol k = if k ∈ Finset.Icc 1 N then sol.toSeq k else 0
Instances For
The shifted sequence has finite support in [1, N]
Inner sum equals Cauchy product for n > N
The shifted sequence is in ℓ¹_ν (finite support)
The shifted sequence as an element of ℓ¹_ν
Equations
- Example_7_7.shiftedL1 sol = lpWeighted.mk (Example_7_7.shiftedSeq sol) ⋯
Instances For
Norm of shifted sequence equals finite sum
Key bound for Z₁: tail sum bounded by Cauchy product norm
Z₂ Bound Helper Lemmas #
From the textbook proof (page 174):
- Since DF(a)h = 2a⋆h, we have DF(c) - DF(ā) = 2(c-ā)⋆(·)
- Thus ‖A(DF(c) - DF(ā))‖ ≤ 2‖A‖·‖c-ā‖ ≤ 2‖A‖·r
- For block-diagonal A: ‖A‖ ≤ max(‖A_fin‖_{1,ν}, 1/(2|ā₀|)) by Proposition 7.3.14
- Hence Z₂ = 2·max(‖A_fin‖_{1,ν}, 1/(2|ā₀|))
Subtraction distributes over leftMul: leftMul (a - b) = leftMul a - leftMul b Follows from leftMul_add and leftMul_smul.
The difference of Fréchet derivatives equals 2·leftMul(c - ā). From textbook: Since DF(a)h = 2a⋆h, we have DF(c) - DF(ā) = 2(c-ā)⋆(·)
Operator norm bound on the derivative difference: ‖DF(c) - DF(ā)‖ ≤ 2·‖c - ā‖ Uses: ‖2·leftMul(c-ā)‖ ≤ 2·‖leftMul(c-ā)‖ ≤ 2·‖c-ā‖
Operator norm bound for approxInverse A: ‖A‖ ≤ max(‖A_fin‖_{1,ν}, 1/(2|ā₀|)) This is Proposition 7.3.14 applied to the specific block-diagonal structure of A.
The Z₂ bound equals 2 times the operator norm bound for A
Bound Verification Lemmas (Theorem 7.7.1) #
These lemmas verify that the computable bounds Y₀, Z₀, Z₁, Z₂ satisfy the hypotheses of general_radii_polynomial_theorem.
Z₀ bound verification: ‖I - AA†‖ ≤ Z₀
From the textbook proof (page 173):
- On finite [0,N]: (I - AA†)h = (I - A_fin·DF_fin)h^(N)
- On tail (n > N): (I - AA†)h = 0 (since tail scalars multiply to 1)
Therefore ‖I - AA†‖ = ‖I - A_fin·DF_fin‖_{1,ν} = Z₀
Z₁ bound verification: ‖A(A† - DF(ā))‖ ≤ Z₁
From the textbook proof (page 173-174):
- On finite [0,N]: (A† - DF(ā))h = 0 (they agree on finite block)
- On tail (n > N): (A† - DF(ā))h = 2ā₀h_n - 2(ā⋆h)n = -2∑{j=1}^N h_{n-j}ā_j
Therefore [A(A† - DF(ā))h]n = (1/ā₀)∑{j=1}^N h_{n-j}ā_j for n > N, and 0 for n ≤ N.
The bound uses: ‖A(A† - DF(ā))‖ ≤ (1/|ā₀|)‖ā‖ where ā is restricted to [1,N].
Z₂ bound verification: ‖A(DF(c) - DF(ā))‖ ≤ Z₂·r for c ∈ B̄ᵣ(ā)
From the textbook proof (page 174): Since DF(a)h = 2a⋆h, we have DF(c) - DF(ā) = 2(c-ā)⋆(·) Thus ‖A(DF(c) - DF(ā))‖ ≤ 2‖A‖·‖c-ā‖ ≤ 2‖A‖·r
For block-diagonal A: ‖A‖ ≤ max(‖A_fin‖{1,ν}, 1/(2|ā₀|)) Hence Z₂ = 2·max(‖A_fin‖{1,ν}, 1/(2|ā₀|))
Injectivity Helper Lemmas #
From the textbook (page 168), Proposition 7.6.5:
- p(r₀) < 0 with r₀ > 0 implies Z₀ + Z₁ + Z₂r₀ < 1
- Since Z₂r₀ ≥ 0, we have Z₀ + Z₁ < 1
- Since Z₁ ≥ 0, we have Z₀ < 1
- Z₀ < 1 implies ‖I - A_fin · DF_fin‖ < 1, so A_fin · DF_fin is invertible
- For square matrices, if AB is invertible then A is invertible
- Block-diagonal operator is injective if A_fin is invertible and tailScalar ≠ 0
From p(r₀) < 0, derive Z₀ + Z₁ < 1. Uses general_radii_poly_neg_implies_Z_lt_one and Z₂r₀ ≥ 0.
The tail scalar of approxInverse is nonzero
Injectivity of A follows from Proposition 7.6.5 when p(r₀) < 0
From page 168: If p(r₀) < 0 then Z₀ + Z₁ < 1 by Corollary 7.6.3, hence ‖I - AA†‖ < 1. By Proposition 7.6.5, since A has block-diagonal form with injective tail (scalar 1/(2ā₀) ≠ 0), A is injective.
Main Theorem: Existence and uniqueness of Taylor series solution.
Given:
- lam0 > 0 (the parameter value)
- ā⁽ᴺ⁾ ∈ ℝᴺ⁺¹ with ā₀ ≠ 0 (approximate solution)
- A⁽ᴺ⁾ (numerical inverse of DF⁽ᴺ⁾(ā))
- r₀ > 0 such that p(r₀) < 0
Then there exists a unique ã ∈ ℓ¹_ν with:
- ‖ã - ā‖ < r₀
- F(ã) = ã ⋆ ã - c = 0
In other words, x(λ) = Σₙ ãₙ(λ - lam0)ⁿ satisfies x(λ)² - λ = 0 for |λ - lam0| < ν.