Documentation

Mathlib.Algebra.ContinuedFractions.Basic

Basic Definitions/Theorems for Continued Fractions #

Summary #

We define generalised, simple, and regular continued fractions and functions to evaluate their convergents. We follow the naming conventions from Wikipedia and [wall2018analytic], Chapter 1.

Main definitions #

  1. Generalised continued fractions (gcfs)
  2. Simple continued fractions (scfs)
  3. (Regular) continued fractions ((r)cfs)
  4. Computation of convergents using the recurrence relation in convergents.
  5. Computation of convergents by directly evaluating the fraction described by the gcf in convergents'.

Implementation notes #

  1. The most commonly used kind of continued fractions in the literature are regular continued fractions. We hence just call them ContinuedFractions in the library.
  2. We use sequences from Data.Seq to encode potentially infinite sequences.

References #

Tags #

numerics, number theory, approximations, fractions

Definitions #

structure GeneralizedContinuedFraction.Pair (α : Type u_1) :
Type u_1

We collect a partial numerator aᵢ and partial denominator bᵢ in a pair ⟨aᵢ, bᵢ⟩.

  • a : α

    Partial numerator

  • b : α

    Partial denominator

Instances For
    Equations
    • GeneralizedContinuedFraction.instInhabitedPair = { default := { a := default, b := default } }

    Interlude: define some expected coercions and instances.

    Make a GCF.Pair printable.

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

    Maps a function f on both components of a given pair.

    Equations
    Instances For

      The coercion between numerator-denominator pairs happens componentwise.

      Equations
      Instances For

        Coerce a pair by elementwise coercion.

        Equations
        • GeneralizedContinuedFraction.Pair.instCoePairPair = { coe := GeneralizedContinuedFraction.Pair.coeFn }
        @[simp]
        theorem GeneralizedContinuedFraction.Pair.coe_toPair {α : Type u_1} {β : Type u_2} [Coe α β] {a : α} {b : α} :
        { a := a, b := b } = { a := Coe.coe a, b := Coe.coe b }
        theorem GeneralizedContinuedFraction.ext {α : Type u_1} (x : GeneralizedContinuedFraction α) (y : GeneralizedContinuedFraction α) (h : x.h = y.h) (s : x.s = y.s) :
        x = y
        structure GeneralizedContinuedFraction (α : Type u_1) :
        Type u_1

        A generalised continued fraction (gcf) is a potentially infinite expression of the form $$ h + \dfrac{a_0} {b_0 + \dfrac{a_1} {b_1 + \dfrac{a_2} {b_2 + \dfrac{a_3} {b_3 + \dots}}}} $$ where h is called the head term or integer part, the aᵢ are called the partial numerators and the bᵢ the partial denominators of the gcf. We store the sequence of partial numerators and denominators in a sequence of GeneralizedContinuedFraction.Pairs s. For convenience, one often writes [h; (a₀, b₀), (a₁, b₁), (a₂, b₂),...].

        Instances For

          Constructs a generalized continued fraction without fractional part.

          Equations
          Instances For
            Equations

            Returns the sequence of partial numerators aᵢ of g.

            Equations
            Instances For

              Returns the sequence of partial denominators bᵢ of g.

              Equations
              Instances For

                A gcf terminated at position n if its sequence terminates at position n.

                Equations
                Instances For

                  It is decidable whether a gcf terminated at a given position.

                  Equations

                  A gcf terminates if its sequence terminates.

                  Equations
                  Instances For

                    Interlude: define some expected coercions.

                    The coercion between GeneralizedContinuedFraction happens on the head term and all numerator-denominator pairs componentwise.

                    Equations
                    Instances For

                      Coerce a gcf by elementwise coercion.

                      Equations
                      • GeneralizedContinuedFraction.instCoeGeneralizedContinuedFractionGeneralizedContinuedFraction = { coe := GeneralizedContinuedFraction.coeFn }
                      @[simp]
                      theorem GeneralizedContinuedFraction.coe_toGeneralizedContinuedFraction {α : Type u_1} {β : Type u_2} [Coe α β] {g : GeneralizedContinuedFraction α} :
                      g = { h := Coe.coe g.h, s := Stream'.Seq.map GeneralizedContinuedFraction.Pair.coeFn g.s }

                      A generalized continued fraction is a simple continued fraction if all partial numerators are equal to one. $$ h + \dfrac{1} {b_0 + \dfrac{1} {b_1 + \dfrac{1} {b_2 + \dfrac{1} {b_3 + \dots}}}} $$

                      Equations
                      Instances For
                        def SimpleContinuedFraction (α : Type u_1) [One α] :
                        Type u_1

                        A simple continued fraction (scf) is a generalized continued fraction (gcf) whose partial numerators are equal to one. $$ h + \dfrac{1} {b_0 + \dfrac{1} {b_1 + \dfrac{1} {b_2 + \dfrac{1} {b_3 + \dots}}}} $$ For convenience, one often writes [h; b₀, b₁, b₂,...]. It is encoded as the subtype of gcfs that satisfy GeneralizedContinuedFraction.IsSimpleContinuedFraction.

                        Equations
                        Instances For

                          Constructs a simple continued fraction without fractional part.

                          Equations
                          Instances For
                            Equations

                            Lift a scf to a gcf using the inclusion map.

                            Equations
                            • SimpleContinuedFraction.instCoeSimpleContinuedFractionGeneralizedContinuedFraction = { coe := Subtype.val }

                            A simple continued fraction is a (regular) continued fraction ((r)cf) if all partial denominators bᵢ are positive, i.e. 0 < bᵢ.

                            Equations
                            Instances For
                              def ContinuedFraction (α : Type u_1) [One α] [Zero α] [LT α] :
                              Type u_1

                              A (regular) continued fraction ((r)cf) is a simple continued fraction (scf) whose partial denominators are all positive. It is the subtype of scfs that satisfy SimpleContinuedFraction.IsContinuedFraction.

                              Equations
                              Instances For

                                Interlude: define some expected coercions.

                                def ContinuedFraction.ofInteger {α : Type u_1} [One α] [Zero α] [LT α] (a : α) :

                                Constructs a continued fraction without fractional part.

                                Equations
                                Instances For
                                  Equations

                                  Lift a cf to a scf using the inclusion map.

                                  Equations
                                  • ContinuedFraction.instCoeContinuedFractionSimpleContinuedFraction = { coe := Subtype.val }

                                  Lift a cf to a scf using the inclusion map.

                                  Equations
                                  • ContinuedFraction.instCoeContinuedFractionGeneralizedContinuedFraction = { coe := fun (c : ContinuedFraction α) => c }

                                  Computation of Convergents #

                                  We now define how to compute the convergents of a gcf. There are two standard ways to do this: directly evaluating the (infinite) fraction described by the gcf or using a recurrence relation. For (r)cfs, these computations are equivalent as shown in Algebra.ContinuedFractions.ConvergentsEquiv.

                                  We start with the definition of the recurrence relation. Given a gcf g, for all n ≥ 1, we define

                                  Aₙ, Bₙ are called the nth continuants, Aₙ the nth numerator, and Bₙ the nth denominator of g. The nth convergent of g is given by Aₙ / Bₙ.

                                  def GeneralizedContinuedFraction.nextNumerator {K : Type u_2} [DivisionRing K] (a : K) (b : K) (ppredA : K) (predA : K) :
                                  K

                                  Returns the next numerator Aₙ = bₙ₋₁ * Aₙ₋₁ + aₙ₋₁ * Aₙ₋₂, where predA is Aₙ₋₁, ppredA is Aₙ₋₂, a is aₙ₋₁, and b is bₙ₋₁.

                                  Equations
                                  Instances For
                                    def GeneralizedContinuedFraction.nextDenominator {K : Type u_2} [DivisionRing K] (aₙ : K) (bₙ : K) (ppredB : K) (predB : K) :
                                    K

                                    Returns the next denominator Bₙ = bₙ₋₁ * Bₙ₋₁ + aₙ₋₁ * Bₙ₋₂, where predB is Bₙ₋₁ and ppredB is Bₙ₋₂, a is aₙ₋₁, and b is bₙ₋₁.

                                    Equations
                                    Instances For

                                      Returns the next continuants ⟨Aₙ, Bₙ⟩ using nextNumerator and nextDenominator, where pred is ⟨Aₙ₋₁, Bₙ₋₁⟩, ppred is ⟨Aₙ₋₂, Bₙ₋₂⟩, a is aₙ₋₁, and b is bₙ₋₁.

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

                                        Returns the continuants ⟨Aₙ₋₁, Bₙ₋₁⟩ of g.

                                        Equations
                                        Instances For

                                          Returns the numerators Aₙ of g.

                                          Equations
                                          Instances For

                                            Returns the denominators Bₙ of g.

                                            Equations
                                            Instances For

                                              Returns the convergents Aₙ / Bₙ of g, where Aₙ, Bₙ are the nth continuants of g.

                                              Equations
                                              Instances For

                                                Returns the approximation of the fraction described by the given sequence up to a given position n. For example, convergents'Aux [(1, 2), (3, 4), (5, 6)] 2 = 1 / (2 + 3 / 4) and convergents'Aux [(1, 2), (3, 4), (5, 6)] 0 = 0.

                                                Equations
                                                Instances For

                                                  Returns the convergents of g by evaluating the fraction described by g up to a given position n. For example, convergents' [9; (1, 2), (3, 4), (5, 6)] 2 = 9 + 1 / (2 + 3 / 4) and convergents' [9; (1, 2), (3, 4), (5, 6)] 0 = 9

                                                  Equations
                                                  Instances For