Loading [MathJax]/jax/output/HTML-CSS/jax.js

First time here? Check out the FAQ!

Ask Your Question
1

Special linear group of finite ring is finite

asked 1 year ago

Bakerbakura gravatar image

updated 1 year ago

Hello there

I am trying to do some computations with the special linear group of a finite ring (given as the quotient ring of a larger ring), and am running into an issue in which it seems that Sagemath doesn't know that the special linear group of a finite ring is finite? Here is a minimal working example which reproduces the error:

Z6 = QuotientRing(ZZ,6*ZZ)
S = SL(2,Z6)
S.is_finite()

In addition, although this link says that I can find all (conjugacy classes of) subgroups of a group G using G.conjugacy_classes_subgroups(), this method does not seem to be implemented for the special linear group above. Why is this so, and which code can I use instead?

Edit: there have been some helpful comments which show that (for some reason) Zmod(6) is recognised as a finite ring, and can be used instead of QuotientRing(ZZ,6*ZZ)! Unfortunately my actual problem is more like the following:

q = 7
FqT.<T> = GF(q)[]
N = T^2+1
FqTN = QuotientRing(FqT, N*FqT)
S = SL(2,FqTN)
S.is_finite()

Unfortunately, in this case I couldn't find an analogous method to Zmod(6) to construct the finite quotient ring FqTN. Any ideas for what I can do in this case?

Preview: (hide)

Comments

Your particular example works if you replace Z6 = QuotientRing(ZZ,6*ZZ) with Z6 = Zmod(6).

Max Alekseyev gravatar imageMax Alekseyev ( 1 year ago )
1

Compare

sage: Z6.category()
Join of Category of commutative rings and Category of subquotients of monoids and Category of quotients of semigroups
sage: Zmod(6).category()
Join of Category of finite commutative rings and Category of subquotients of monoids and Category of quotients of semigroups and Category of finite enumerated sets
FrédéricC gravatar imageFrédéricC ( 1 year ago )

2 Answers

Sort by » oldest newest most voted
2

answered 1 year ago

dan_fulea gravatar image

In general, for my purposes and in my opinion sage (or any other computer algebra system) cannot be an all-purpose computational device, so computations should / must often be complemented by putting the problem to be solved in position to be digested by the computational engine. This means that it is often simpler to search for the best setting to implement a specific question. (This is mentioned here, since it better introduces the answer.) So here we go.

For the special case of the quadratic extension F49=F7[j], with j2=1, we are still in shape to use "standard" sage constructions:

R.<T> = PolynomialRing(GF(7))
F.<j> = GF(7^2, modulus=T^2 + 1)
S = SL(2, F)

And now:

sage: S.cardinality()
117600
sage: S.is_finite()
True

For the second question, sage has dedicated methods implemented in special classes. Often, the algorithm used needs a specific algorithm. To insure the algorithm can be applied (in a needed structure) means in program terms that a situation is or can be modeled in a specific class. In our case:

sage: K = DihedralGroup(12)
sage: K.__class__
<class 'sage.groups.perm_gps.permgroup_named.DihedralGroup_with_category'>
sage: K.conjugacy_classes_subgroups
<bound method PermutationGroup_generic.conjugacy_classes_subgroups of Dihedral group of order 24 
    as a permutation group>

(Lines were manually adjusted.) So the method wants a "permutation group", maybe. To see why it works for K, we ask for

sage: K.conjugacy_classes_subgroups??

and get the code, and the file...

Source:   
    def conjugacy_classes_subgroups(self):
        """
        Return a complete list of representatives of conjugacy classes of
        subgroups in a permutation group `G`.

        The ordering is that given by GAP.

        EXAMPLES::

            sage: G = PermutationGroup([[(1,2),(3,4)], [(1,2,3,4)]])
            sage: cl = G.conjugacy_classes_subgroups()
            sage: cl
            [Subgroup generated by [()] of (Permutation Group with generators [(1,2)(3,4), (1,2,3,4)]),
             Subgroup generated by [(1,2)(3,4)] of (Permutation Group with generators [(1,2)(3,4), (1,2,3,4)]),
             Subgroup generated by [(1,3)(2,4)] of (Permutation Group with generators [(1,2)(3,4), (1,2,3,4)]),
             Subgroup generated by [(2,4)] of (Permutation Group with generators [(1,2)(3,4), (1,2,3,4)]),
             Subgroup generated by [(1,2)(3,4), (1,4)(2,3)] of (Permutation Group with generators [(1,2)(3,4), (1,2,3,4)]),
             Subgroup generated by [(2,4), (1,3)(2,4)] of (Permutation Group with generators [(1,2)(3,4), (1,2,3,4)]),
             Subgroup generated by [(1,2,3,4), (1,3)(2,4)] of (Permutation Group with generators [(1,2)(3,4), (1,2,3,4)]),
             Subgroup generated by [(2,4), (1,2)(3,4), (1,4)(2,3)] of (Permutation Group with generators [(1,2)(3,4), (1,2,3,4)])]

        ::

            sage: G = SymmetricGroup(3)
            sage: G.conjugacy_classes_subgroups()
            [Subgroup generated by [()] of (Symmetric group of order 3! as a permutation group),
             Subgroup generated by [(2,3)] of (Symmetric group of order 3! as a permutation group),
             Subgroup generated by [(1,2,3)] of (Symmetric group of order 3! as a permutation group),
             Subgroup generated by [(2,3), (1,2,3)] of (Symmetric group of order 3! as a permutation group)]

        AUTHORS:

        - David Joyner (2006-10)
        """
        cl = self._libgap_().ConjugacyClassesSubgroups()
        return [self.subgroup(gap_group=sub.Representative()) for sub in cl]
File:      /usr/lib/python3.10/site-packages/sage/groups/perm_gps/permgroup.py
Type:      method

So the instance self needs that _libgap_ - and on this object we further ask for ConjugacyClassesSubgroups.

So i tried for S the obvious

sage: S._libgap_().ConjugacyClassesSubgroups()

and to my surprise the screen was filled after some seconds with many (gap specific) lines like...

Group([ [ [ Z(7)^3, 0*Z(7) ], [ 0*Z(7), Z(7)^3 ] ], [ [ Z(7^2)^18, Z(7^2)^11 ], [ Z(7^2)^23, Z(7^2)^45 ] ], [ [ Z(7^2)^45, Z(7) ], [ Z(7^2)^22, Z(7^2)^6 ] ] ])^G, 

Group([ [ [ Z(7)^3, 0*Z(7) ], [ 0*Z(7), Z(7)^3 ] ], [ [ Z(7^2)^18, Z(7^2)^11 ], [ Z(7^2)^23, Z(7^2)^45 ] ], [ [ Z(7)^5, Z(7^2)^31 ], [ Z(7^2)^41, 0*Z(7) ] ] ])^G
Preview: (hide)
link
1

answered 1 year ago

Emmanuel Charpentier gravatar image

updated 1 year ago

WorksForMe(TM) in Sage 10.0.beta7 :

sage: SL(5, Zmod(6)).is_finite()
True
sage: SL(2, Zmod(6)).cardinality()
144

However,notwithstanding that

sage: QuotientRing(ZZ,6*ZZ) == Zmod(6)
True

SL(2, QuotientRing(ZZ,6*ZZ)) has neither is_finite nor cardinality usable methods... Some discussion on Sage support may be worthwhile...

HTH,

Preview: (hide)
link

Comments

Just for the record: discussion at sage-support and the corresponding bugreport.

Max Alekseyev gravatar imageMax Alekseyev ( 1 year ago )

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

Stats

Asked: 1 year ago

Seen: 263 times

Last updated: Apr 12 '23