Termination of Continued Fraction Computations (GenContFract.of
) #
Summary #
We show that the continued fraction for a value v
, as defined in
Mathlib.Algebra.ContinuedFractions.Basic
, terminates if and only if v
corresponds to a
rational number, that is ↑v = q
for some q : ℚ
.
Main Theorems #
GenContFract.coe_of_rat_eq
shows thatGenContFract.of v = GenContFract.of q
forv : α
given that↑v = q
andq : ℚ
.GenContFract.terminates_iff_rat
shows thatGenContFract.of v
terminates if and only if↑v = q
for someq : ℚ
.
Tags #
rational, continued fraction, termination
Terminating Continued Fractions Are Rational #
We want to show that the computation of a continued fraction GenContFract.of v
terminates if and only if v ∈ ℚ
. In this section, we show the implication from left to right.
We first show that every finite convergent corresponds to a rational number q
and then use the
finite correctness proof (of_correctness_of_terminates
) of GenContFract.of
to show that
v = ↑q
.
Every finite convergent corresponds to a rational number.
Every terminating continued fraction corresponds to a rational number.
Technical Translation Lemmas #
Before we can show that the continued fraction of a rational number terminates, we have to prove
some technical translation lemmas. More precisely, in this section, we show that, given a rational
number q : ℚ
and value v : K
with v = ↑q
, the continued fraction of q
and v
coincide.
In particular, we show that
(↑(GenContFract.of q : GenContFract ℚ) : GenContFract K) = GenContFract.of v`
in GenContFract.coe_of_rat_eq
.
To do this, we proceed bottom-up, showing the correspondence between the basic functions involved in the Computation first and then lift the results step-by-step.
First, we show the correspondence for the very basic functions in
GenContFract.IntFractPair
.
Now we lift the coercion results to the continued fraction computation.
Given (v : K), (q : ℚ), and v = q
, we have that of q = of v
Continued Fractions of Rationals Terminate #
Finally, we show that the continued fraction of a rational number terminates.
The crucial insight is that, given any q : ℚ
with 0 < q < 1
, the numerator of Int.fract q
is
smaller than the numerator of q
. As the continued fraction computation recursively operates on
the fractional part of a value v
and 0 ≤ Int.fract v < 1
, we infer that the numerator of the
fractional part in the computation decreases by at least one in each step. As 0 ≤ Int.fract v
,
this process must stop after finite number of steps, and the computation hence terminates.
Shows that for any q : ℚ
with 0 < q < 1
, the numerator of the fractional part of
IntFractPair.of q⁻¹
is smaller than the numerator of q
.
Shows that the sequence of numerators of the fractional parts of the stream is strictly antitone.
The continued fraction of a rational number terminates.
The continued fraction GenContFract.of v
terminates if and only if v ∈ ℚ
.