Ask Your Question
1

Special linear group of finite ring is finite

asked 2023-04-11 22:10:34 +0200

Bakerbakura gravatar image

updated 2023-04-12 13:49:39 +0200

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?

edit retag flag offensive close merge delete

Comments

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

Max Alekseyev gravatar imageMax Alekseyev ( 2023-04-12 02:31:13 +0200 )edit
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 ( 2023-04-12 12:22:20 +0200 )edit

2 Answers

Sort by » oldest newest most voted
2

answered 2023-04-12 22:00:35 +0200

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 $\Bbb F_{49}=\Bbb F_7[j]$, with $j^2=-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
edit flag offensive delete link more
1

answered 2023-04-12 08:22:29 +0200

Emmanuel Charpentier gravatar image

updated 2023-04-12 08:35:17 +0200

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,

edit flag offensive delete link more

Comments

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

Max Alekseyev gravatar imageMax Alekseyev ( 2023-04-12 21:59:22 +0200 )edit

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: 2023-04-11 22:10:34 +0200

Seen: 141 times

Last updated: Apr 12 '23