# Check if a finitely generated matrix group is finite (works with QQ and not with CC) This post is a wiki. Anyone with karma >750 is welcome to improve it.

Dear all, I am a newbie in sage. I would like to check if a finitely generated matrix group is finite. Before to proceed with the calculation on my actual problem (where matrices have complex entries), I have tried a very simple example. Consider the group generated by the matrices [1,0,0,1] and [0,1,1,0], this group is clearly finite. Can somebody explain me why the following code works:

sage: MS = MatrixSpace(QQ, 2, 2)
sage: G = MatrixGroup([MS([1,0,0,1]),MS([0,1,1,0])])
sage: G.is_finite()
True


but if I change the field QQ -> RR (or CC), an error is generated:

sage: MS = MatrixSpace(RR, 2, 2)
sage: G = MatrixGroup([MS([1,0,0,1]),MS([0,1,1,0])])
sage: G.is_finite()
---------------------------------------------------------------------------
NotImplementedError                       Traceback (most recent call last)
<ipython-input-215-0022a668c150> in <module>()
----> 1 G.is_finite()

/Applications/SageMath-7.6.app/Contents/Resources/sage/src/sage/groups/group.pyx in sage.groups.group.Group.is_finite (/Applications/SageMath-7.6.app/Contents/Resources/sage/src/build/cythonized/sage/groups/group.c:2696)()
179             NotImplementedError
180         """
--> 181         return self.order() != infinity
182
183     def is_multiplicative(self):

/Applications/SageMath-7.6.app/Contents/Resources/sage/src/sage/groups/group.pyx in sage.groups.group.Group.order (/Applications/SageMath-7.6.app/Contents/Resources/sage/src/build/cythonized/sage/groups/group.c:2623)()
164             NotImplementedError
165         """
--> 166         raise NotImplementedError
167
168     def is_finite(self):

NotImplementedError:


Is there any way to force the second piece of code to work with matrices with entries in CC?

edit retag close merge delete

In the first case we can also compute the order, and the list of elements. In the second case, we use non-exact objects. (Why do we do this!?) Then i expect humanly that there is no multiplicative order method implemented for such a numerical matrix, being really glad that there is no one! Why should we work with inexact entries in a finite matrix group?

Note that we run into a NotImplementedError: multiplicative order is only implemented for matrices over finite fields in both following cases...

g = matrix( RR, 2, 2, [ sqrt(3)/2.0, 0.5, 0.5, sqrt(3)/2.0 ] )
g.multiplicative_order()    # --> NotImplementedError

# and

sage: g = matrix(K, 2,2, [a/2,1/2,-1/2,a/2] )
sage: g^12
[1 0]
[0 1]
sage: g.multiplicative_order()    # --> NotImplementedError


Use an exact ring, such as QQbar or AA or UniversalCyclotomicField instead of CC.

Sort by » oldest newest most voted

The problem is that a matrix (in characteristic 0, at least) has finite order if and only if it's diagonalizable and has roots of unity for eigenvalues. The latter is certainly not preserved under numerical pertubations, so cannot be determined for matrices with floating point entries.

more