Documentation

Mathlib.Algebra.LinearRecurrence

Linear recurrence #

Informally, a "linear recurrence" is an assertion of the form ∀ n : ℕ, u (n + d) = a 0 * u n + a 1 * u (n+1) + ... + a (d-1) * u (n+d-1), where u is a sequence, d is the order of the recurrence and the a i are its coefficients.

In this file, we define the structure LinearRecurrence so that LinearRecurrence.mk d a represents the above relation, and we call a sequence u which verifies it a solution of the linear recurrence.

We prove a few basic lemmas about this concept, such as :

Of course, although we can inductively generate solutions (cf mkSol), the interesting part would be to determinate closed-forms for the solutions. This is currently not implemented, as we are waiting for definition and properties of eigenvalues and eigenvectors.

structure LinearRecurrence (R : Type u_1) [CommSemiring R] :
Type u_1

A "linear recurrence relation" over a commutative semiring is given by its order n and n coefficients.

  • order :

    Order of the linear recurrence

  • coeffs : Fin self.orderR

    Coefficients of the linear recurrence

Instances For
    Equations
    def LinearRecurrence.IsSolution {R : Type u_1} [CommSemiring R] (E : LinearRecurrence R) (u : R) :

    We say that a sequence u is solution of LinearRecurrence order coeffs when we have u (n + order) = ∑ i : Fin order, coeffs i * u (n + i) for any n.

    Equations
    Instances For
      @[irreducible]
      def LinearRecurrence.mkSol {R : Type u_1} [CommSemiring R] (E : LinearRecurrence R) (init : Fin E.orderR) :
      R

      A solution of a LinearRecurrence which satisfies certain initial conditions. We will prove this is the only such solution.

      Equations
      Instances For
        theorem LinearRecurrence.is_sol_mkSol {R : Type u_1} [CommSemiring R] (E : LinearRecurrence R) (init : Fin E.orderR) :
        E.IsSolution (E.mkSol init)

        E.mkSol indeed gives solutions to E.

        theorem LinearRecurrence.mkSol_eq_init {R : Type u_1} [CommSemiring R] (E : LinearRecurrence R) (init : Fin E.orderR) (n : Fin E.order) :
        E.mkSol init n = init n

        E.mkSol init's first E.order terms are init.

        @[irreducible]
        theorem LinearRecurrence.eq_mk_of_is_sol_of_eq_init {R : Type u_1} [CommSemiring R] (E : LinearRecurrence R) {u : R} {init : Fin E.orderR} (h : E.IsSolution u) (heq : ∀ (n : Fin E.order), u n = init n) (n : ) :
        u n = E.mkSol init n

        If u is a solution to E and init designates its first E.order values, then ∀ n, u n = E.mkSol init n.

        theorem LinearRecurrence.eq_mk_of_is_sol_of_eq_init' {R : Type u_1} [CommSemiring R] (E : LinearRecurrence R) {u : R} {init : Fin E.orderR} (h : E.IsSolution u) (heq : ∀ (n : Fin E.order), u n = init n) :
        u = E.mkSol init

        If u is a solution to E and init designates its first E.order values, then u = E.mkSol init. This proves that E.mkSol init is the only solution of E whose first E.order values are given by init.

        The space of solutions of E, as a Submodule over R of the module ℕ → R.

        Equations
        Instances For

          Defining property of the solution space : u is a solution iff it belongs to the solution space.

          The function that maps a solution u of E to its first E.order terms as a LinearEquiv.

          Equations
          Instances For
            theorem LinearRecurrence.sol_eq_of_eq_init {R : Type u_1} [CommSemiring R] (E : LinearRecurrence R) (u v : R) (hu : E.IsSolution u) (hv : E.IsSolution v) :

            Two solutions are equal iff they are equal on range E.order.

            E.tupleSucc maps ![s₀, s₁, ..., sₙ] to ![s₁, ..., sₙ, ∑ (E.coeffs i) * sᵢ], where n := E.order. This operation is quite useful for determining closed-form solutions of E.

            E.tupleSucc maps ![s₀, s₁, ..., sₙ] to ![s₁, ..., sₙ, ∑ (E.coeffs i) * sᵢ], where n := E.order.

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

              The dimension of E.solSpace is E.order.

              The characteristic polynomial of E is X ^ E.order - ∑ i : Fin E.order, (E.coeffs i) * X ^ i.

              Equations
              Instances For
                theorem LinearRecurrence.geom_sol_iff_root_charPoly {R : Type u_1} [CommRing R] (E : LinearRecurrence R) (q : R) :
                (E.IsSolution fun (n : ) => q ^ n) E.charPoly.IsRoot q

                The geometric sequence q^n is a solution of E iff q is a root of E's characteristic polynomial.