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

Delgado, M., P. A. Garcia-Sanchez, and J. Morais. 2024. NumericalSgps, a Package for Numerical Semigroups, Version 1.4.0.” https://gap-packages.github.io/ numericalsgps.
Rosales, J. C., and P. A. Garcı́a-Sánchez. 2009. Numerical Semigroups. Springer.