Ask Your Question

Check if a finitely generated matrix group is finite (works with QQ and not with CC)

asked 2017-07-25 17:22:22 +0200

this post is marked as community wiki

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()

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/ in (/Applications/
179             NotImplementedError
180         """
--> 181         return self.order() != infinity
183     def is_multiplicative(self):

/Applications/ in (/Applications/
164             NotImplementedError
165         """
--> 166         raise NotImplementedError
168     def is_finite(self):


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

Thank you in advance.

edit retag flag offensive 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: K.<a> = QuadraticField(3)
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
dan_fulea gravatar imagedan_fulea ( 2017-07-25 20:32:20 +0200 )edit

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

FrédéricC gravatar imageFrédéricC ( 2017-07-27 08:13:06 +0200 )edit

1 Answer

Sort by » oldest newest most voted

answered 2017-07-26 22:14:51 +0200

nbruin gravatar image

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.

edit flag offensive delete link more

Your Answer

Please start posting anonymously - your entry will be published after you log in or create a new account.

Add Answer

Question Tools

1 follower


Asked: 2017-07-25 17:22:22 +0200

Seen: 621 times

Last updated: Jul 26 '17