Re: command for producing subgroups of a given group
- To: mathgroup at smc.vnet.net
- Subject: [mg42409] Re: [mg42401] command for producing subgroups of a given group
- From: Ken Levasseur <klevasseur at mac.com>
- Date: Sat, 5 Jul 2003 03:10:55 -0400 (EDT)
- Sender: owner-wri-mathgroup at wolfram.com
Brian: For relatively small groups, you might want to try the AbstractAlgebra packages that Al Hibbard and I have developed. They can be downloaded at http://www.central.edu/eaam/index.asp Here are some examples. The function Subgroups only works in a reasonable amount of time for relatively small groups (less than 20 elements?); but CyclicSubgroups can be used for groups that are know to have only cyclic subgroups. In[1]:= <<AbstractAlgebra` In[13]:= G=DirectProduct[Z[8],Z[3]] Out[13]= Groupoid[{{0, 0}, {0, 1}, {0, 2}, {1, 0}, {1, 1}, {1, 2}, {2, 0}, {2, 1}, {2, 2}, {3, 0}, {3, 1}, {3, 2}, {4, 0}, {4, 1}, {4, 2}, {5, 0}, {5, 1}, {5, 2}, {6, 0}, {6, 1}, {6, 2}, {7, 0}, {7, 1}, {7, 2}}, -Operation-] In[14]:= CyclicSubgroups[G] Out[14]= {Groupoid[{{0, 0}}, -Operation-], Groupoid[{{0, 0}, {4, 0}}, -Operation-], Groupoid[{{0, 0}, {0, 1}, {0, 2}}, -Operation-], Groupoid[{{0, 0}, {2, 0}, {4, 0}, {6, 0}}, -Operation-], Groupoid[{{0, 0}, {0, 1}, {0, 2}, {4, 0}, {4, 1}, {4, 2}}, -Operation-], Groupoid[{{0, 0}, {1, 0}, {2, 0}, {3, 0}, {4, 0}, {5, 0}, {6, 0}, {7, 0}}, -Operation-], Groupoid[{{0, 0}, {0, 1}, {0, 2}, {2, 0}, {2, 1}, {2, 2}, {4, 0}, {4, 1}, {4, 2}, {6, 0}, {6, 1}, {6, 2}}, -Operation-], Groupoid[{{0, 0}, {0, 1}, {0, 2}, {1, 0}, {1, 1}, {1, 2}, {2, 0}, {2, 1}, {2, 2}, {3, 0}, {3, 1}, {3, 2}, {4, 0}, {4, 1}, {4, 2}, {5, 0}, {5, 1}, {5, 2}, {6, 0}, {6, 1}, {6, 2}, {7, 0}, {7, 1}, {7, 2}}, -Operation-]} In[12]:= Subgroups[Alternating[4]] Out[12]= {Groupoid[{{1, 2, 3, 4}}, -Operation-], Groupoid[{{1, 2, 3, 4}, {2, 1, 4, 3}}, -Operation-], Groupoid[{{1, 2, 3, 4}, {3, 4, 1, 2}}, -Operation-], Groupoid[{{1, 2, 3, 4}, {4, 3, 2, 1}}, -Operation-], Groupoid[{{1, 2, 3, 4}, {1, 3, 4, 2}, {1, 4, 2, 3}}, -Operation-], Groupoid[{{1, 2, 3, 4}, {2, 3, 1, 4}, {3, 1, 2, 4}}, -Operation-], Groupoid[{{1, 2, 3, 4}, {2, 4, 3, 1}, {4, 1, 3, 2}}, -Operation-], Groupoid[{{1, 2, 3, 4}, {3, 2, 4, 1}, {4, 2, 1, 3}}, -Operation-], Groupoid[{{1, 2, 3, 4}, {2, 1, 4, 3}, {3, 4, 1, 2}, {4, 3, 2, 1}}, -Operation-], Groupoid[{{1, 2, 3, 4}, {1, 3, 4, 2}, {1, 4, 2, 3}, {2, 1, 4, 3}, {2, 3, 1, 4}, {2, 4, 3, 1}, {3, 1, 2, 4}, {3, 2, 4, 1}, {3, 4, 1, 2}, {4, 1, 3, 2}, {4, 2, 1, 3}, {4, 3, 2, 1}}, -Operation-]} For Z_m x Z_n and larger values of m and n, you can use basic number theory to list all subgroups by their generators most efficiently. In[18]:= subgroups[m_,n_]:=("<"<>ToString[#1]<>"> x <"<>ToString[#2]<>">")&@@#&/@CartesianProduct[Mod[#,m]&/@Divisors[m],Mod[#,n ]&/@Divisors[n]] In[19]:= subgroups[45,28] Out[19]= {<1> x <1>, <1> x <2>, <1> x <4>, <1> x <7>, <1> x <14>, <1> x <0>, <3> x <1>, <3> x <2>, <3> x <4>, <3> x <7>, <3> x <14>, <3> x <0>, <5> x <1>, <5> x <2>, <5> x <4>, <5> x <7>, <5> x <14>, <5> x <0>, <9> x <1>, <9> x <2>, <9> x <4>, <9> x <7>, <9> x <14>, <9> x <0>, <15> x <1>, <15> x <2>, <15> x <4>, <15> x <7>, <15> x <14>, <15> x <0>, <0> x <1>, <0> x <2>, <0> x <4>, <0> x <7>, <0> x <14>, <0> x <0>} Ken Levasseur Math. Sci. UMass Lowell > From: brian.ginsberg at yale.edu (BDG) To: mathgroup at smc.vnet.net > Date: Fri, 04 Jul 2003 01:33:17 -0400 (EDT) > To: mathgroup at smc.vnet.net > Subject: [mg42409] [mg42401] command for producing subgroups of a given group > > Hi, > > I'm wondering if there's a Mathematica > function that lets me input a group of the form Z_p x Z_q, where p and > q are any positive integers, and will output > > (1) all subgroups of that group and > (2) the generator(s) of each subgroup. > > If no such predefined command exists, any help with creating a > notebook (for Mathematica) or routine that does this would be much > appreciated. Thanks! > > BDG >