Proper Bézout sequence
Definition
Let \(\frac{a_1}{b_1} < \frac{a_2}{b_2} < \cdots < \frac{a_p}{b_p}\) be a Bézout sequence. It is said that a Bézout sequence is proper if \(a_{i+h}b_i - a_ib_{i+h} \ge 2\) for all \(h \ge 2\) such that \(i, i + h \in \{1, 2, \ldots, p\}\).
Every Bézout sequence can be refined to a proper Bézout sequence by just removing those terms strictly between \(\frac{a_i}{b_i}\) and \(\frac{a_{i+h}}{b_{i+h}}\) whenever \(a_{i+h}b_i - a_i b_{i+h} = 1\).
Examples
\(\circ\) The Bézout sequence \(\frac{5}{3} < \frac{12}{7} < \frac{7}{4} < \frac{9}{5}\) is not proper, since \(a_{1 + 2}b_1 - a_1 b_{1 + 2} = 7 \cdot 3 - 5 \cdot 4 = 1\). If we remove the fraction \(\frac{12}{7}\), it is obtained the proper Bézout sequence \(\frac{5}{3} < \frac{7}{4} < \frac{9}{5}\).
Examples with GAP
Nowadays, there are no functions in package NumericalSgps related to proper Bézout sequence. However, given a list \(I = [a_1/b_1, \ldots, a_p/b_p]\) where \(a_i, b_i\) are positive integers for all \(i \in \{1, \ldots, p\}\), the following function returns true if \(\frac{a_1}{b_1} < \ldots < \frac{a_p}{b_p}\) is a proper Bézout sequence and false otherwise.
gap> IsProperBezoutSequence := function(I)
> local n, q_i, q_j, a_i, b_i, a_j, b_j, i, j;
> if not IsBezoutSequence(I) then
> return false;
> fi;
> n := Length(I);
> for i in [1..n-2] do
> q_i := I[i];
> for j in [i+2..n] do
> q_j := I[j];
> a_i := NumeratorRat(q_i); b_i := DenominatorRat(q_i);
> a_j := NumeratorRat(q_j); b_j := DenominatorRat(q_j);
> if a_j*b_i - a_i*b_j < 2 then
> return false;
> fi;
> od;
> od;
> return true;
> end;
function( I ) ... end
\(\diamond\) Let \(\frac{131}{50} < \frac{76}{29} < \frac{21}{8} < \frac{8}{3}\).
gap> I := [ 131/50, 76/29, 21/8, 8/3 ];
131/50, 76/29, 21/8, 8/3 ]
[ gap> IsProperBezoutSequence(I);
true
Then, the sequence is a Bézout sequence and is proper.
\(\diamond\) Let \(I = \{4/5, 1, 2, 3, 10/3, 17/5 \}\), in GAP:
gap> I := [4/5, 1, 2, 3, 10/3, 17/5];
4/5, 1, 2, 3, 10/3, 17/5 ] [
Given a list \(I = [a_1/b_1, \ldots, a_p/b_p]\) such that \(\frac{a_1}{b_1} < \ldots < \frac{a_p}{b_p}\) is a Bézout sequence, the following function returns the proper Bézout sequence using the method described in the definition.
gap> BezoutSequenceToProper := function(I)
> local list_ind, n, i, j, q_i, q_j, a_i, b_i, a_j, b_j;
> if not IsBezoutSequence(I) then
> Error("The argument is not a Bézout sequence");
> fi;
> list_ind := [];
> n := Length(I);
> i := 1;
> while i < n+1 do
> Add(list_ind, i);
> q_i := I[i];
> for j in [i+2..n] do
> q_j := I[j];
> a_i := NumeratorRat(q_i); b_i := DenominatorRat(q_i);
> a_j := NumeratorRat(q_j); b_j := DenominatorRat(q_j);
> if a_j*b_i - a_i*b_j < 2 then
> i := j-1;
> break;
> fi;
> od;
> i := i + 1;
> od;
> return I{list_ind};
> end;
function( I ) ... end
In this case, \(I\) is a proper Bézout sequence.
gap> BezoutSequenceToProper(I);
4/5, 1, 2, 3, 10/3, 17/5 ]
[ gap> IsProperBezoutSequence(I);
true
References
https://gap-packages.github.io/
numericalsgps
.