Documentation

LeanPool.ArchonFirstProofResults.FirstProof4.Auxiliary.Defs

Basic Definitions and E-Transform #

This file defines the core algebraic objects for the finite additive convolution (box-plus operation) and proves translation invariance via the E-transform.

Main definitions #

Main theorems #

Notation #

Basic definitions #

noncomputable def Problem4.boxPlusCoeff (n : ℕ) (a b : ℕ → ℝ) (k : ℕ) :

The coefficient formula for box-plus convolution: c_k = ∑_{i+j=k} [(n-i)!(n-j)! / (n!(n-k)!)] · aᵢ · bⱼ We work with real coefficients throughout.

Equations
Instances For
    noncomputable def Problem4.boxPlusConv (n : ℕ) (a b : ℕ → ℝ) :
    ℕ → ℝ

    The box-plus convolution of two coefficient sequences of degree ≤ n. Given a = (a₀, a₁, ..., aₙ) and b = (b₀, b₁, ..., bₙ), returns the coefficient sequence c = (c₀, c₁, ..., cₙ).

    Equations
    Instances For

      Convert a polynomial to its coefficient sequence in the basis x^{n-k}: p(x) = ∑_k a_k x^{n-k}, so a_k is the coefficient of x^{n-k} in p.

      Equations
      Instances For
        noncomputable def Problem4.coeffsToPoly (a : ℕ → ℝ) (n : ℕ) :

        Convert a coefficient sequence back to a polynomial.

        Equations
        Instances For
          noncomputable def Problem4.polyBoxPlus (n : ℕ) (p q : Polynomial ℝ) :

          The box-plus convolution of two polynomials of degree ≤ n.

          Equations
          Instances For

            Notation p ⊞[n] q for polyBoxPlus n p q, the degree-n box-plus convolution.

            Equations
            • One or more equations did not get rendered due to their size.
            Instances For

              The Eₙ transform #

              noncomputable def Problem4.eTransform (n : ℕ) (a : ℕ → ℝ) :

              The Eₙ transform: E_n(f)(t) = ∑_k (a_k / n^{(k)}) t^k.

              Equations
              Instances For
                noncomputable def Problem4.polyTrunc (d : ℕ) (p : Polynomial ℝ) :

                Truncation of a polynomial to degree ≤ d.

                Equations
                Instances For

                  n! is nonzero as a real number.

                  theorem Problem4.descFactorial_eq_div (n k : ℕ) (hk : k ≤ n) :
                  ↑(n.descFactorial k) = ↑n.factorial / ↑(n - k).factorial

                  n.descFactorial k expressed as n!/(n-k)! over ℝ.

                  theorem Problem4.coeff_eTransform (n : ℕ) (a : ℕ → ℝ) (k : ℕ) :
                  (eTransform n a).coeff k = if k ≤ n then a k / ↑(n.descFactorial k) else 0

                  Coefficient extraction for eTransform.

                  theorem Problem4.coeff_polyTrunc (d : ℕ) (p : Polynomial ℝ) (k : ℕ) :
                  (polyTrunc d p).coeff k = if k ≤ d then p.coeff k else 0

                  Coefficient extraction for polyTrunc.

                  theorem Problem4.eTransform_boxPlus (n : ℕ) (a b : ℕ → ℝ) :

                  Key property: E_n(p ⊞_n q) = (E_n(p) · E_n(q)) truncated to degree ≤ n. This is equation (2.2) from the informal proof.

                  Translation invariance: helper lemmas #

                  theorem Problem4.descFactorial_ne_zero_real (n k : ℕ) (hk : k ≤ n) :
                  ↑(n.descFactorial k) ≠ 0

                  n.descFactorial k is nonzero over ℝ when k ≤ n.

                  theorem Problem4.descFactorial_split (n k s : ℕ) (hk : k ≤ n) (hs : s ≤ k) :

                  Splitting identity: n^{(k)} = n^{(k-s)} · (n-k+s)^{(s)} for s ≤ k ≤ n.

                  theorem Problem4.choose_div_descFactorial (n k s : ℕ) (hk : k ≤ n) (hs : s ≤ k) :
                  ↑((n - k + s).choose s) / ↑(n.descFactorial k) = 1 / (↑s.factorial * ↑(n.descFactorial (k - s)))

                  Key combinatorial identity: C(n-k+s, s) / n^{(k)} = 1/(s! · n^{(k-s)}). This underlies the E-transform translation formula.

                  theorem Problem4.coeff_comp_X_sub_C (p : Polynomial ℝ) (a : ℝ) (j N : ℕ) (hN : p.natDegree < N) :
                  (p.comp (Polynomial.X - Polynomial.C a)).coeff j = ∑ i ∈ Finset.range N, p.coeff i * (-a) ^ (i - j) * ↑(i.choose j)

                  Coefficient of p.comp (X - C a) via Taylor expansion.

                  noncomputable def Problem4.truncExp (n : ℕ) (a : ℝ) :

                  The truncated exponential e^{-at} to degree ≤ n.

                  Equations
                  Instances For
                    theorem Problem4.coeff_truncExp (n : ℕ) (a : ℝ) (k : ℕ) :
                    (truncExp n a).coeff k = if k ≤ n then (-a) ^ k / ↑k.factorial else 0

                    Coefficient extraction for truncExp.

                    theorem Problem4.polyTrunc_mul_left (n : ℕ) (f g : Polynomial ℝ) :
                    polyTrunc n (polyTrunc n f * g) = polyTrunc n (f * g)

                    polyTrunc on left factor: polyTrunc n (polyTrunc n f * g) = polyTrunc n (f * g).

                    theorem Problem4.polyTrunc_mul_right (n : ℕ) (f g : Polynomial ℝ) :
                    polyTrunc n (f * polyTrunc n g) = polyTrunc n (f * g)

                    polyTrunc on right factor: polyTrunc n (f * polyTrunc n g) = polyTrunc n (f * g).

                    polyTrunc distributes over truncated products: polyTrunc n (polyTrunc n f * polyTrunc n g) = polyTrunc n (f * g).

                    theorem Problem4.exp_product_coeff (a b : ℝ) (k : ℕ) :
                    ∑ s ∈ Finset.range (k + 1), (-a) ^ s / ↑s.factorial * ((-b) ^ (k - s) / ↑(k - s).factorial) = (-(a + b)) ^ k / ↑k.factorial

                    Binomial theorem for truncated exponentials: Σ_{s=0}^k (-a)^s/s! · (-b)^{k-s}/(k-s)! = (-(a+b))^k / k!

                    theorem Problem4.truncExp_mul (n : ℕ) (a b : ℝ) :
                    polyTrunc n (truncExp n a * truncExp n b) = truncExp n (a + b)

                    Product of truncated exponentials: polyTrunc n (truncExp n a * truncExp n b) = truncExp n (a + b).

                    theorem Problem4.eTransform_translate_coeff (n m : ℕ) (p : Polynomial ℝ) (a : ℝ) (_hp : p.natDegree ≤ n) (hm : m ≤ n) :
                    (∑ i ∈ Finset.range (n + 1), p.coeff i * (-a) ^ (i - (n - m)) * ↑(i.choose (n - m))) / ↑(n.descFactorial m) = ∑ s ∈ Finset.range (m + 1), (-a) ^ s / ↑s.factorial * (p.coeff (n - (m - s)) / ↑(n.descFactorial (m - s)))

                    Key coefficient identity for E-transform translation: the Taylor expansion coefficients divided by descFactorial equal the Cauchy product of truncated exponential and E-transform coefficients.

                    E-transform of translated polynomial: E_n(polyToCoeffs(p(x-a), n)) = polyTrunc n (truncExp a * E_n(p)). This is the formal version of E_n(p_a) = (e^{-at} E_n(p))_{≤n}.

                    theorem Problem4.coeff_coeffsToPoly (a : ℕ → ℝ) (n j : ℕ) :
                    (coeffsToPoly a n).coeff j = if j ≤ n then a (n - j) else 0

                    Coefficient extraction for coeffsToPoly.

                    theorem Problem4.polyToCoeffs_coeffsToPoly (a : ℕ → ℝ) (n k : ℕ) (hk : k ≤ n) :

                    Round-trip: polyToCoeffs ∘ coeffsToPoly = id for k ≤ n.

                    Round-trip: coeffsToPoly ∘ polyToCoeffs = id for degree ≤ n.

                    coeffsToPoly produces a polynomial of degree ≤ n.

                    theorem Problem4.coeffsToPoly_congr (f g : ℕ → ℝ) (n : ℕ) (h : ∀ k ≤ n, f k = g k) :

                    coeffsToPoly depends only on values at indices ≤ n.

                    polyBoxPlus produces a polynomial of degree ≤ n.

                    theorem Problem4.polyBoxPlus_coeff_top (n : ℕ) (p q : Polynomial ℝ) (hp_monic : p.Monic) (hq_monic : q.Monic) (hp_deg : p.natDegree = n) (hq_deg : q.natDegree = n) :
                    (p ⊞[n] q).coeff n = 1

                    The top coefficient of polyBoxPlus n p q is 1 when both inputs are monic of degree n.

                    theorem Problem4.polyBoxPlus_natDegree (n : ℕ) (p q : Polynomial ℝ) (hp_monic : p.Monic) (hq_monic : q.Monic) (hp_deg : p.natDegree = n) (hq_deg : q.natDegree = n) :
                    (p ⊞[n] q).natDegree = n

                    polyBoxPlus n p q has natDegree exactly n when both inputs are monic of degree n.

                    theorem Problem4.polyBoxPlus_monic (n : ℕ) (p q : Polynomial ℝ) (hp_monic : p.Monic) (hq_monic : q.Monic) (hp_deg : p.natDegree = n) (hq_deg : q.natDegree = n) :
                    (p ⊞[n] q).Monic

                    polyBoxPlus n p q is monic when both inputs are monic of degree n.

                    theorem Problem4.boxPlusCoeff_comm (n : ℕ) (a b : ℕ → ℝ) (k : ℕ) :
                    boxPlusCoeff n a b k = boxPlusCoeff n b a k

                    The box-plus coefficient formula is symmetric: swapping the two input sequences yields the same result. This follows by reindexing i ↦ k - i in the defining sum.

                    theorem Problem4.boxPlusConv_comm (n : ℕ) (a b : ℕ → ℝ) :

                    boxPlusConv is symmetric: boxPlusConv n a b = boxPlusConv n b a.

                    theorem Problem4.polyBoxPlus_comm (n : ℕ) (p q : Polynomial ℝ) :
                    (p ⊞[n] q) = q ⊞[n] p

                    polyBoxPlus is commutative: polyBoxPlus n p q = polyBoxPlus n q p.

                    natDegree of p.comp(X - C a) ≤ natDegree of p.

                    Translation invariance #

                    If p_a(x) = p(x - a) and q_b(x) = q(x - b), then p_a ⊞_n q_b(x) = (p ⊞_n q)(x - a - b). Requires degree ≤ n since polyBoxPlus only reads coefficients up to degree n.

                    theorem Problem4.coeff_polyBoxPlus_uniform (n : ℕ) (q : Polynomial ℝ) :
                    ∃ (C : ℝ), 0 < C ∧ ∀ (p₁ p₂ : Polynomial ℝ) (δ : ℝ), 0 < δ → (∀ (k : ℕ), |p₁.coeff k - p₂.coeff k| ≤ δ) → ∀ (k : ℕ), |(p₁ ⊞[n] q).coeff k - (p₂ ⊞[n] q).coeff k| ≤ C * δ

                    Uniform Lipschitz bound for polyBoxPlus: the constant C depends only on n and q, not on the polynomials being compared or the perturbation size δ.