Boundedness of \(k\)-Regular Sequences¶
This module contains a collection of algorithms to check for boundedness. This is done - based on eigenvalues and - by the criterion presented in [MS1977a].
Various¶
See also
sage.combinat.regular_sequence,
recognizable series,
sage.rings.cfinite_sequence,
sage.combinat.binary_recurrence_sequences.
AUTHORS:
Gabriel Lipnik (2017)
ACKNOWLEDGEMENT:
Gabriel Lipnik is supported by the Austrian Science Fund (FWF): P 24644-N26.
- sage.combinat.regular_sequence_bounded.construct_phi(matrices)[source]¶
Return the set \(\phi(S)\) as defined in [MS1977a].
INPUT:
matrices– a list of non-negative square matrices in the same dimension
OUTPUT:
A list of matrices.
EXAMPLES:
sage: from sage.combinat.regular_sequence_bounded import construct_phi sage: L = [Matrix([[2, 2], [1, 3]]), Matrix([[0, 2], [1, 1]])] sage: construct_phi(L) [ [2 2] [2 2] [0 2] [2 2], [1 2], [1 1] ]
>>> from sage.all import * >>> from sage.combinat.regular_sequence_bounded import construct_phi >>> L = [Matrix([[Integer(2), Integer(2)], [Integer(1), Integer(3)]]), Matrix([[Integer(0), Integer(2)], [Integer(1), Integer(1)]])] >>> construct_phi(L) [ [2 2] [2 2] [0 2] [2 2], [1 2], [1 1] ]
sage: L = [Matrix([[42, 1, 0], [5, 0, 1], [0, 0, 1]]), Matrix([[0, 1, 1], ....: [4, 1, 1], [1, 2, 2]]), Matrix([[5, 1, 1], [1, 7, 1], [0, 1, 32]])] sage: construct_phi(L) [ [2 2 1] [1 2 2] [2 2 2] [2 2 2] [2 2 2] [2 2 2] [2 0 2] [2 2 2] [2 2 1] [2 2 2] [2 2 2] [2 2 2] [2 2 2] [2 2 2] [2 2 2] [2 1 2] [0 0 1], [2 2 2], [2 2 2], [0 1 2], [2 0 2], [0 0 1], [2 1 2], [2 1 2], [2 1 2] [2 2 2] [2 2 2] [2 2 2] [2 1 1] [2 2 2] [0 1 1] [2 1 0] [2 2 2] [1 2 2] [2 2 2] [2 2 2] [1 2 1] [2 1 2] [2 1 1] [2 0 1] [2 2 2], [1 2 2], [1 2 2], [2 1 2], [0 1 2], [2 0 2], [1 2 2], [0 0 1] ]
>>> from sage.all import * >>> L = [Matrix([[Integer(42), Integer(1), Integer(0)], [Integer(5), Integer(0), Integer(1)], [Integer(0), Integer(0), Integer(1)]]), Matrix([[Integer(0), Integer(1), Integer(1)], ... [Integer(4), Integer(1), Integer(1)], [Integer(1), Integer(2), Integer(2)]]), Matrix([[Integer(5), Integer(1), Integer(1)], [Integer(1), Integer(7), Integer(1)], [Integer(0), Integer(1), Integer(32)]])] >>> construct_phi(L) [ [2 2 1] [1 2 2] [2 2 2] [2 2 2] [2 2 2] [2 2 2] [2 0 2] [2 2 2] [2 2 1] [2 2 2] [2 2 2] [2 2 2] [2 2 2] [2 2 2] [2 2 2] [2 1 2] [0 0 1], [2 2 2], [2 2 2], [0 1 2], [2 0 2], [0 0 1], [2 1 2], [2 1 2], <BLANKLINE> [2 1 2] [2 2 2] [2 2 2] [2 2 2] [2 1 1] [2 2 2] [0 1 1] [2 1 0] [2 2 2] [1 2 2] [2 2 2] [2 2 2] [1 2 1] [2 1 2] [2 1 1] [2 0 1] [2 2 2], [1 2 2], [1 2 2], [2 1 2], [0 1 2], [2 0 2], [1 2 2], [0 0 1] ]
- sage.combinat.regular_sequence_bounded.has_bounded_matrix_powers(matrices)[source]¶
Return whether \(M^n\) is bounded for \(n \to \infty\) for all \(M\) in
matrices.INPUT:
matrices– a list of square matrices
ALGORITHM:
Eigenvalues are used for the check.
EXAMPLES:
Maximum of the absolute value of the eigenvalues \(=1\), algebraic multiplicity equals geometric multiplicity for all eigenvalues with absolute value \(=1\):
sage: from sage.combinat.regular_sequence_bounded import has_bounded_matrix_powers sage: matrices = [Matrix([[-1, 1, 1], [-1, 1, 1], [1, -1, 1]]), ....: Matrix([[-1, 1, 1], [-1, 0, 0], [1, 1, 1]])] sage: has_bounded_matrix_powers(matrices) True
>>> from sage.all import * >>> from sage.combinat.regular_sequence_bounded import has_bounded_matrix_powers >>> matrices = [Matrix([[-Integer(1), Integer(1), Integer(1)], [-Integer(1), Integer(1), Integer(1)], [Integer(1), -Integer(1), Integer(1)]]), ... Matrix([[-Integer(1), Integer(1), Integer(1)], [-Integer(1), Integer(0), Integer(0)], [Integer(1), Integer(1), Integer(1)]])] >>> has_bounded_matrix_powers(matrices) True
Maximum of the absolute value of the eigenvalues \(>1\):
sage: matrices = [Matrix([[1, 1], [1/2, -1]])] sage: has_bounded_matrix_powers(matrices) False
>>> from sage.all import * >>> matrices = [Matrix([[Integer(1), Integer(1)], [Integer(1)/Integer(2), -Integer(1)]])] >>> has_bounded_matrix_powers(matrices) False
Maximum of the absolute value of the eigenvalues \(=1\), algebraic and geometric multiplicities different for eigenvalue \(1\):
sage: matrices = [Matrix([[1,1],[0,1]])] sage: has_bounded_matrix_powers(matrices) False
>>> from sage.all import * >>> matrices = [Matrix([[Integer(1),Integer(1)],[Integer(0),Integer(1)]])] >>> has_bounded_matrix_powers(matrices) False
Maximum of the absolute value of the eigenvalues \(<1\):
sage: matrices = [Matrix([[1, -1], [1/2, -1]])] sage: has_bounded_matrix_powers(matrices) True
>>> from sage.all import * >>> matrices = [Matrix([[Integer(1), -Integer(1)], [Integer(1)/Integer(2), -Integer(1)]])] >>> has_bounded_matrix_powers(matrices) True
- sage.combinat.regular_sequence_bounded.is_bounded_via_mandel_simon_algorithm(matrices)[source]¶
Return whether the semigroup generated whether the semigroup of all possible products of
matricesis finite/bounded.INPUT:
matrices– a list of non-negative square matrices in the same dimension
OUTPUT:
A boolean.
ALGORITHM:
A criterion based on [MS1977a] is used here.
EXAMPLES:
sage: from sage.combinat.regular_sequence_bounded import is_bounded_via_mandel_simon_algorithm sage: J = [Matrix([[1, 0, 1], [0, 1, 1], [0, 0, 0]])] sage: is_bounded_via_mandel_simon_algorithm(J) True
>>> from sage.all import * >>> from sage.combinat.regular_sequence_bounded import is_bounded_via_mandel_simon_algorithm >>> J = [Matrix([[Integer(1), Integer(0), Integer(1)], [Integer(0), Integer(1), Integer(1)], [Integer(0), Integer(0), Integer(0)]])] >>> is_bounded_via_mandel_simon_algorithm(J) True
sage: from sage.combinat.regular_sequence_bounded import is_bounded_via_mandel_simon_algorithm sage: K = [Matrix([[1, 1], [1, 1]])] sage: is_bounded_via_mandel_simon_algorithm(K) False
>>> from sage.all import * >>> from sage.combinat.regular_sequence_bounded import is_bounded_via_mandel_simon_algorithm >>> K = [Matrix([[Integer(1), Integer(1)], [Integer(1), Integer(1)]])] >>> is_bounded_via_mandel_simon_algorithm(K) False
sage: L = [Matrix([[1, 0], [0, 1]]), Matrix([[1, 0], [0, 0]])] sage: is_bounded_via_mandel_simon_algorithm(L) True
>>> from sage.all import * >>> L = [Matrix([[Integer(1), Integer(0)], [Integer(0), Integer(1)]]), Matrix([[Integer(1), Integer(0)], [Integer(0), Integer(0)]])] >>> is_bounded_via_mandel_simon_algorithm(L) True
sage: M = [Matrix([[1, 0], [0, 2]]), Matrix([[1, 0], [0, 0]])] sage: is_bounded_via_mandel_simon_algorithm(M) False
>>> from sage.all import * >>> M = [Matrix([[Integer(1), Integer(0)], [Integer(0), Integer(2)]]), Matrix([[Integer(1), Integer(0)], [Integer(0), Integer(0)]])] >>> is_bounded_via_mandel_simon_algorithm(M) False
Non-integer-valued input:
sage: N = [Matrix([[0.5, 0], [1, 0]])] sage: is_bounded_via_mandel_simon_algorithm(N) Traceback (most recent call last): ... ValueError: Not all matrices are integer-valued.
>>> from sage.all import * >>> N = [Matrix([[RealNumber('0.5'), Integer(0)], [Integer(1), Integer(0)]])] >>> is_bounded_via_mandel_simon_algorithm(N) Traceback (most recent call last): ... ValueError: Not all matrices are integer-valued.
- sage.combinat.regular_sequence_bounded.is_integer_valued(matrices)[source]¶
Return whether every matrix in
matricesis integer-valued.INPUT:
matrices– a list of square matrices in the same dimension
OUTPUT:
A boolean.
EXAMPLES:
sage: from sage.combinat.regular_sequence_bounded import is_integer_valued sage: matrices = [Matrix([[1, 2], [-1, 0]]), Matrix([[42, -42], [0, 0]])] sage: is_integer_valued(matrices) True
>>> from sage.all import * >>> from sage.combinat.regular_sequence_bounded import is_integer_valued >>> matrices = [Matrix([[Integer(1), Integer(2)], [-Integer(1), Integer(0)]]), Matrix([[Integer(42), -Integer(42)], [Integer(0), Integer(0)]])] >>> is_integer_valued(matrices) True
sage: matrices = [Matrix([[1, pi], [-1, 0]])] sage: is_integer_valued(matrices) False
>>> from sage.all import * >>> matrices = [Matrix([[Integer(1), pi], [-Integer(1), Integer(0)]])] >>> is_integer_valued(matrices) False
sage: matrices = [Matrix([[1, 1/2], [2/4, 0]])] sage: is_integer_valued(matrices) False
>>> from sage.all import * >>> matrices = [Matrix([[Integer(1), Integer(1)/Integer(2)], [Integer(2)/Integer(4), Integer(0)]])] >>> is_integer_valued(matrices) False
sage: matrices = [Matrix([[1, 4/2], [-1, 0]])] sage: is_integer_valued(matrices) True
>>> from sage.all import * >>> matrices = [Matrix([[Integer(1), Integer(4)/Integer(2)], [-Integer(1), Integer(0)]])] >>> is_integer_valued(matrices) True
- sage.combinat.regular_sequence_bounded.is_non_negative(matrices)[source]¶
Return whether every matrix in
matricesis non-negative.INPUT:
matrices– a list of square matrices in the same dimension
OUTPUT:
A boolean.
EXAMPLES:
sage: from sage.combinat.regular_sequence_bounded import is_non_negative sage: matrices = [Matrix([[1, 2], [1, 0]]), Matrix([[42, -42], [0, 0]])] sage: is_non_negative(matrices) False
>>> from sage.all import * >>> from sage.combinat.regular_sequence_bounded import is_non_negative >>> matrices = [Matrix([[Integer(1), Integer(2)], [Integer(1), Integer(0)]]), Matrix([[Integer(42), -Integer(42)], [Integer(0), Integer(0)]])] >>> is_non_negative(matrices) False
sage: matrices = [Matrix([[0]])] sage: is_non_negative(matrices) True
>>> from sage.all import * >>> matrices = [Matrix([[Integer(0)]])] >>> is_non_negative(matrices) True
sage: matrices = [Matrix([[1, 1/2], [2/4, 0]])] sage: is_non_negative(matrices) True
>>> from sage.all import * >>> matrices = [Matrix([[Integer(1), Integer(1)/Integer(2)], [Integer(2)/Integer(4), Integer(0)]])] >>> is_non_negative(matrices) True
- sage.combinat.regular_sequence_bounded.make_positive(matrices)[source]¶
Return a list of non-negative matrices
INPUT:
matrices– a list of matrices where every matrix is either non-negative or non-positive.
OUTPUT:
A list of matrices containing every non-negative matrix of
matrices, and \(-M\) if \(M\) is a non-positive matrix ofmatrices.EXAMPLES:
sage: from sage.combinat.regular_sequence_bounded import make_positive sage: matrices = [Matrix([[1, 2], [1, 0]]), Matrix([[42, 42], [0, 0]])] sage: make_positive(matrices) [ [1 2] [42 42] [1 0], [ 0 0] ]
>>> from sage.all import * >>> from sage.combinat.regular_sequence_bounded import make_positive >>> matrices = [Matrix([[Integer(1), Integer(2)], [Integer(1), Integer(0)]]), Matrix([[Integer(42), Integer(42)], [Integer(0), Integer(0)]])] >>> make_positive(matrices) [ [1 2] [42 42] [1 0], [ 0 0] ]
sage: matrices = [Matrix([[1, 2], [1, 0]]), Matrix([[-42, -42], [0, 0]])] sage: make_positive(matrices) [ [1 2] [42 42] [1 0], [ 0 0] ]
>>> from sage.all import * >>> matrices = [Matrix([[Integer(1), Integer(2)], [Integer(1), Integer(0)]]), Matrix([[-Integer(42), -Integer(42)], [Integer(0), Integer(0)]])] >>> make_positive(matrices) [ [1 2] [42 42] [1 0], [ 0 0] ]
sage: matrices = [Matrix([[1, 2], [1, 0]]), Matrix([[42, -42], [0, 0]])] sage: make_positive(matrices) Traceback (most recent call last): ... ValueError: There is a matrix which is neither non-negative nor non-positive.
>>> from sage.all import * >>> matrices = [Matrix([[Integer(1), Integer(2)], [Integer(1), Integer(0)]]), Matrix([[Integer(42), -Integer(42)], [Integer(0), Integer(0)]])] >>> make_positive(matrices) Traceback (most recent call last): ... ValueError: There is a matrix which is neither non-negative nor non-positive.
- sage.combinat.regular_sequence_bounded.multiply_reduce(A, B)[source]¶
Return the matrix \(A\cdot B\) with entries \(\min{(A\cdot B)_{ij},2}\).
INPUT:
A– an \(m \times n\) matrixB– an \(n \times p\) matrix
OUTPUT:
An \(m \times p\) matrix with entries \(\min{(A\cdot B)_{ij},2}\).
EXAMPLES:
sage: from sage.combinat.regular_sequence_bounded import multiply_reduce sage: A = Matrix([[2, 0], [0, 2]]) sage: B = Matrix([[-2, 0], [0, 2]]) sage: A*B [-4 0] [ 0 4] sage: multiply_reduce(A, B) [-4 0] [ 0 2]
>>> from sage.all import * >>> from sage.combinat.regular_sequence_bounded import multiply_reduce >>> A = Matrix([[Integer(2), Integer(0)], [Integer(0), Integer(2)]]) >>> B = Matrix([[-Integer(2), Integer(0)], [Integer(0), Integer(2)]]) >>> A*B [-4 0] [ 0 4] >>> multiply_reduce(A, B) [-4 0] [ 0 2]
sage: A = Matrix([[1, 2, 3], [-1, -2, -3], [1, 2, 3]]) sage: B = Matrix([[1, 2, 3], [2, 3, 4], [1, 2, 3]]) sage: A*B [ 8 14 20] [ -8 -14 -20] [ 8 14 20] sage: multiply_reduce(A, B) [ 2 2 2] [ -8 -14 -20] [ 2 2 2]
>>> from sage.all import * >>> A = Matrix([[Integer(1), Integer(2), Integer(3)], [-Integer(1), -Integer(2), -Integer(3)], [Integer(1), Integer(2), Integer(3)]]) >>> B = Matrix([[Integer(1), Integer(2), Integer(3)], [Integer(2), Integer(3), Integer(4)], [Integer(1), Integer(2), Integer(3)]]) >>> A*B [ 8 14 20] [ -8 -14 -20] [ 8 14 20] >>> multiply_reduce(A, B) [ 2 2 2] [ -8 -14 -20] [ 2 2 2]
- sage.combinat.regular_sequence_bounded.regular_sequence_is_bounded(S)[source]¶
Return whether this \(k\)-regular sequence is bounded.
INPUT:
S– a \(k\)-regular sequence
OUTPUT:
A boolean.
EXAMPLES:
Thue–Morse Sequence:
sage: from sage.combinat.regular_sequence_bounded import regular_sequence_is_bounded sage: Seq2 = RegularSequenceRing(2, ZZ) sage: TM = Seq2([Matrix([[1, 0], [0, 1]]), Matrix([[0, 1], [1, 0]])], ....: left=vector([1, 0]), right=vector([0, 1])) sage: regular_sequence_is_bounded(TM) True
>>> from sage.all import * >>> from sage.combinat.regular_sequence_bounded import regular_sequence_is_bounded >>> Seq2 = RegularSequenceRing(Integer(2), ZZ) >>> TM = Seq2([Matrix([[Integer(1), Integer(0)], [Integer(0), Integer(1)]]), Matrix([[Integer(0), Integer(1)], [Integer(1), Integer(0)]])], ... left=vector([Integer(1), Integer(0)]), right=vector([Integer(0), Integer(1)])) >>> regular_sequence_is_bounded(TM) True
Binary Sum of Digits:
sage: SD = Seq2([Matrix([[1, 0], [0, 1]]), Matrix([[0, -1], [1, 2]])], ....: left=vector([0, 1]), right=vector([1, 0])) sage: regular_sequence_is_bounded(SD) False
>>> from sage.all import * >>> SD = Seq2([Matrix([[Integer(1), Integer(0)], [Integer(0), Integer(1)]]), Matrix([[Integer(0), -Integer(1)], [Integer(1), Integer(2)]])], ... left=vector([Integer(0), Integer(1)]), right=vector([Integer(1), Integer(0)])) >>> regular_sequence_is_bounded(SD) False
Sequence of All Natural Numbers:
sage: N = Seq2([Matrix([[2, 0], [2, 1]]), Matrix([[0, 1], [-2, 3]])], ....: left=vector([1, 0]), right=vector([0, 1])) sage: regular_sequence_is_bounded(N) False
>>> from sage.all import * >>> N = Seq2([Matrix([[Integer(2), Integer(0)], [Integer(2), Integer(1)]]), Matrix([[Integer(0), Integer(1)], [-Integer(2), Integer(3)]])], ... left=vector([Integer(1), Integer(0)]), right=vector([Integer(0), Integer(1)])) >>> regular_sequence_is_bounded(N) False
Indicator Function of Even Integers:
sage: E = Seq2([Matrix([[0, 1], [0, 1]]), Matrix([[0, 0], [0, 1]])], ....: left=vector([1, 0]), right=vector([1, 1])) sage: regular_sequence_is_bounded(E) True
>>> from sage.all import * >>> E = Seq2([Matrix([[Integer(0), Integer(1)], [Integer(0), Integer(1)]]), Matrix([[Integer(0), Integer(0)], [Integer(0), Integer(1)]])], ... left=vector([Integer(1), Integer(0)]), right=vector([Integer(1), Integer(1)])) >>> regular_sequence_is_bounded(E) True
Indicator Function of Odd Integers:
sage: O = Seq2([Matrix([[0, 0], [0, 1]]), Matrix([[0, 1], [0, 1]])], ....: left=vector([1, 0]), right=vector([0, 1])) sage: regular_sequence_is_bounded(O) True
>>> from sage.all import * >>> O = Seq2([Matrix([[Integer(0), Integer(0)], [Integer(0), Integer(1)]]), Matrix([[Integer(0), Integer(1)], [Integer(0), Integer(1)]])], ... left=vector([Integer(1), Integer(0)]), right=vector([Integer(0), Integer(1)])) >>> regular_sequence_is_bounded(O) True
Number of Odd Entries in Pascal’s Triangle:
sage: U = Seq2([Matrix([[3, 0], [6, 1]]), Matrix([[0, 1], [-6, 5]])], ....: left=vector([1, 0]), right=vector([0, 1])) sage: regular_sequence_is_bounded(U) False
>>> from sage.all import * >>> U = Seq2([Matrix([[Integer(3), Integer(0)], [Integer(6), Integer(1)]]), Matrix([[Integer(0), Integer(1)], [-Integer(6), Integer(5)]])], ... left=vector([Integer(1), Integer(0)]), right=vector([Integer(0), Integer(1)])) >>> regular_sequence_is_bounded(U) False
Counting ‘10’ in the Binary Representation:
sage: C = Seq2([Matrix([[0, 1, 0, 0], [0, 0, 0, 1], ....: [-1, 0, 1, 1], [0, 0, 0, 1]]), ....: Matrix([[0, 0, 1, 0], [0, 1, 0, 0], ....: [0, 0, 1, 0], [-1, 0, 1, 1]])], ....: left=vector([1, 0, 0, 0]), ....: right=vector([0, 0, 1, 0])) sage: regular_sequence_is_bounded(C) False
>>> from sage.all import * >>> C = Seq2([Matrix([[Integer(0), Integer(1), Integer(0), Integer(0)], [Integer(0), Integer(0), Integer(0), Integer(1)], ... [-Integer(1), Integer(0), Integer(1), Integer(1)], [Integer(0), Integer(0), Integer(0), Integer(1)]]), ... Matrix([[Integer(0), Integer(0), Integer(1), Integer(0)], [Integer(0), Integer(1), Integer(0), Integer(0)], ... [Integer(0), Integer(0), Integer(1), Integer(0)], [-Integer(1), Integer(0), Integer(1), Integer(1)]])], ... left=vector([Integer(1), Integer(0), Integer(0), Integer(0)]), ... right=vector([Integer(0), Integer(0), Integer(1), Integer(0)])) >>> regular_sequence_is_bounded(C) False
Numbers Starting with ‘10’:
sage: D = Seq2([Matrix([[0, 1, 0, 0], [0, 0, 1, 0], ....: [0, -2, 3, 0], [0, -2, 2, 1]]), ....: Matrix([[2, 0, 0, 0], [0, 0, 0, 1], ....: [0, 2, 0, 1], [0, -2, 0, 3]])], ....: left=vector([1, 0, 0, 0]), ....: right=vector([2, 2, 2, 5])) sage: regular_sequence_is_bounded(D) False
>>> from sage.all import * >>> D = Seq2([Matrix([[Integer(0), Integer(1), Integer(0), Integer(0)], [Integer(0), Integer(0), Integer(1), Integer(0)], ... [Integer(0), -Integer(2), Integer(3), Integer(0)], [Integer(0), -Integer(2), Integer(2), Integer(1)]]), ... Matrix([[Integer(2), Integer(0), Integer(0), Integer(0)], [Integer(0), Integer(0), Integer(0), Integer(1)], ... [Integer(0), Integer(2), Integer(0), Integer(1)], [Integer(0), -Integer(2), Integer(0), Integer(3)]])], ... left=vector([Integer(1), Integer(0), Integer(0), Integer(0)]), ... right=vector([Integer(2), Integer(2), Integer(2), Integer(5)])) >>> regular_sequence_is_bounded(D) False
Signum Function:
sage: S = Seq2([Matrix([[1, 0], [0, 1]]), Matrix([[0, 1], [0, 1]])], ....: left=vector([1, 0]), right=vector([0, 1])) sage: regular_sequence_is_bounded(S) True
>>> from sage.all import * >>> S = Seq2([Matrix([[Integer(1), Integer(0)], [Integer(0), Integer(1)]]), Matrix([[Integer(0), Integer(1)], [Integer(0), Integer(1)]])], ... left=vector([Integer(1), Integer(0)]), right=vector([Integer(0), Integer(1)])) >>> regular_sequence_is_bounded(S) True
Number of Digits from the Right to the First ‘1’:
sage: S = Seq2([Matrix([[0, 1, 0], [-1, 2, 0], [0, 0, 1]]), ....: Matrix([[0, 0, 1], [0, 0, 2], [0, 0, 1]])], ....: left=vector([1, 0, 0]), right=vector([0, 0, 1])) sage: regular_sequence_is_bounded(S) False
>>> from sage.all import * >>> S = Seq2([Matrix([[Integer(0), Integer(1), Integer(0)], [-Integer(1), Integer(2), Integer(0)], [Integer(0), Integer(0), Integer(1)]]), ... Matrix([[Integer(0), Integer(0), Integer(1)], [Integer(0), Integer(0), Integer(2)], [Integer(0), Integer(0), Integer(1)]])], ... left=vector([Integer(1), Integer(0), Integer(0)]), right=vector([Integer(0), Integer(0), Integer(1)])) >>> regular_sequence_is_bounded(S) False