[go: up one dir, main page]

Featured Post

 

 

For Maple 17, in 2013, we introduced the GroupTheory package. It has seen a lot of improvements since its introduction, and I figured I would write something about how you can use it to teach a group theory course.

 

First of all, I think it would be a great idea to have your students just play with the GroupTheory package in Maple, and get some intuition for what makes group theory tick by getting their hands dirty. But that is not what I want to talk about today. Instead, I want to discuss how you might use it for giving your lectures - to show some visualizations while you show your beamer presentation or write on the black- or whiteboard.

 

When starting out with the definition of a group, you might want to compare the Cayley table of a group with that of a binary operation that doesn't define a group. A set with any binary operation is called a magma; to find good examples, we might want to use one group; one magma that has an identity and is associative but not invertible; and one magma that is has an identity and is invertible but not associative. Maybe we also want the group to not be cyclic (so the group order will have to not be prime), because those Cayley tables look a little boring. For this we can use the Magma package.

 

We note that a magma that is invertible and has an identity element is called a loop. We can enumerate all magmas of a given order and with certain properties using the command Magma:-Enumerate, finding either the number of such objects (by default) or a list of the multiplication tables (with the output = list option). Can we find interesting examples of order 4?

 

with(Magma)

Enumerate(4, group), Enumerate(4, loop), Enumerate(4, associative, identity)

2, 2, 35

(1)

 

No: all loops of order 4 are groups. Let's try order 6.

 

Enumerate(6, group), Enumerate(6, loop), Enumerate(6, associative, identity)

2, 109, 2237

(2)

 

Yes, we can find examples here. We find the Cayley tables of three suitable magmas; we call the non-cyclic group one m1, the non-associative loop one m2, and the non-invertible magma m3.

 

Enumerate(6, group, output = list)

(3)

"m1 := ?[2]:"

Enumerate(6, loop, output = list)[1 .. 5]

(4)

 

"m2 := ?[2]:"

Enumerate(6, associative, identity, output = list)[1 .. 5]

(5)

 

Most of these appear to have many more of one value than of another (e.g., many more threes). Let's find one where that is not so extreme. For example, we might want to minimize the standard deviation of the frequencies of the values occurring in the Cayley table.

 

lst := Enumerate(6, associative, identity, output = list)

lst := remove(IsLeftInvertible, lst)

numelems(lst)

2235

(6)

frequencies := map(proc (m) options operator, arrow; map2(numboccur, m, [seq(1 .. 6)]) end proc, lst)``

with(Statistics)

sds := map(StandardDeviation, convert(frequencies, 'set'))

{HFloat(2.449489742783178), HFloat(3.0983866769659336), HFloat(3.1622776601683795), HFloat(3.22490309931942), HFloat(3.286335345030997), HFloat(3.3466401061363027), HFloat(3.4058772731852804), HFloat(3.4641016151377544), HFloat(3.464101615137755), HFloat(3.521363372331802), HFloat(3.5213633723318023), HFloat(3.5777087639996634), HFloat(3.6331804249169903), HFloat(3.687817782917155), HFloat(3.7416573867739413), HFloat(3.794733192202055), HFloat(3.8470768123342687), HFloat(3.847076812334269), HFloat(3.898717737923586), HFloat(3.9496835316262997), HFloat(3.9496835316263), HFloat(3.9999999999999996), HFloat(4.0), HFloat(4.049691346263318), HFloat(4.09878030638384), HFloat(4.147288270665544), HFloat(4.195235392680606), HFloat(4.1952353926806065), HFloat(4.2895221179054435), HFloat(4.33589667773576), HFloat(4.3817804600413295), HFloat(4.427188724235731), HFloat(4.47213595499958), HFloat(4.5166359162544865), HFloat(4.560701700396552), HFloat(4.604345773288535), HFloat(4.604345773288536), HFloat(4.6475800154489), HFloat(4.69041575982343), HFloat(4.732863826479693), HFloat(4.774934554525329), HFloat(4.77493455452533), HFloat(4.8166378315169185), HFloat(4.857983120596447), HFloat(4.898979485566356), HFloat(4.9396356140913875), HFloat(4.939635614091388), HFloat(4.979959839195493), HFloat(5.019960159204453), HFloat(5.059644256269407), HFloat(5.0990195135927845), HFloat(5.138093031466052), HFloat(5.176871642217914), HFloat(5.215361924162119), HFloat(5.253570214625479), HFloat(5.291502622129181), HFloat(5.329165037789691), HFloat(5.366563145999495), HFloat(5.403702434442518), HFloat(5.440588203494177), HFloat(5.477225575051661), HFloat(5.513619500836089), HFloat(5.549774770204643), HFloat(5.585696017507577), HFloat(5.621387729022079), HFloat(5.656854249492381), HFloat(5.692099788303083), HFloat(5.727128425310542), HFloat(5.761944116355173), HFloat(5.796550698475776), HFloat(5.830951894845301), HFloat(5.865151319446072), HFloat(5.8991524815010505), HFloat(5.93295878967653), HFloat(5.932958789676531), HFloat(5.966573556070519), HFloat(6.0), HFloat(6.0332412515993425), HFloat(6.066300355241241), HFloat(6.066300355241242), HFloat(6.099180272790763), HFloat(6.131883886702357), HFloat(6.164414002968976), HFloat(6.196773353931867), HFloat(6.228964600958975), HFloat(6.260990336999411), HFloat(6.29285308902091), HFloat(6.324555320336759), HFloat(6.356099432828282), HFloat(6.418722614352485), HFloat(6.48074069840786), HFloat(6.511528238439883), HFloat(6.542170893518451), HFloat(6.572670690061994), HFloat(6.603029607687671), HFloat(6.603029607687672), HFloat(6.6332495807108), HFloat(6.663332499583073), HFloat(6.6932802122726045), HFloat(6.693280212272605), HFloat(6.723094525588644), HFloat(6.723094525588645), HFloat(6.752777206453653), HFloat(6.782329983125268), HFloat(6.811754546370561), HFloat(6.928203230275509), HFloat(6.957010852370435), HFloat(6.985699678629192), HFloat(7.014271166700073), HFloat(7.042726744663604), HFloat(7.0710678118654755), HFloat(7.127411872482185), HFloat(7.155417527999327), HFloat(7.183313998427188), HFloat(7.18331399842719), HFloat(7.293833011524188), HFloat(7.429670248402684), HFloat(7.4565407529228995), HFloat(7.4565407529229), HFloat(7.483314773547883), HFloat(7.536577472566709), HFloat(7.53657747256671), HFloat(7.563068160475615), HFloat(7.64198926981712), HFloat(7.77174369109018), HFloat(7.8993670632526), HFloat(7.92464510246358), HFloat(7.9498427657407165), HFloat(8.024961059095553), HFloat(8.12403840463596), HFloat(8.366600265340756), HFloat(8.390470785361211), HFloat(8.390470785361213), HFloat(8.414273587185052), HFloat(8.438009243891594), HFloat(8.508818954473059), HFloat(8.854377448471462), HFloat(8.87693640846886), HFloat(8.921883209278185), HFloat(9.338094023943), HFloat(9.338094023943002), HFloat(9.359487165438072), HFloat(9.81835016690686), HFloat(9.818350166906862), HFloat(10.295630140987)}

(7)

 

Aha, the smallest standard deviation is a bit under two and a half, and the next possible value is greater than 3. Let's examine the Cayley tables that show this standard deviation.

NULL

small_sd_index := select(proc (i) options operator, arrow; StandardDeviation(frequencies[i]) < 3 end proc, [seq(1 .. numelems(frequencies))])

[1636, 1638, 2234, 2235]

(8)

small_sd := lst[small_sd_index]

(9)

 

The last of these looks interesting.

 

m3 := small_sd[-1]

NULL

Now we can display these three Cayley tables:

CayleyColorTable(m1); CayleyColorTable(m2); CayleyColorTable(m3)

 

It's clear that the multiplication shown in the third Cayley table is not invertible (because multiplying by any element other than 1, on either side, is not a permutation of the elements: rows and columns beyond the first don't have all colors). It's less visually obvious that the second Cayley table doesn't show an associative multiplication, but a quick loop showed that 5*(3*3) = 5*5 and 5*5 = 4 whereas 3*(3*5) = 3 and 3 = 3. I'm not sure if there is something real underpinning this, but to my mind this is a nice parallel to the fact that when you're proving a set with a given operation is a group, it's easier to show that there are inverses than that the operation is associative.

 

A second nice visualization, also usable in the first week or two of a group theory course, is also named after Cayley: Cayley graphs. Here is a Cayley graph for the dihedral group D[3] of order 6:

 

with(GroupTheory)

D3 := DihedralGroup(3)

_m132248572811840

(10)

with(GraphTheory)

DrawGraph(CayleyGraph(D3), layout = spring)

 

NULL

Here is a well-known presentation of the alternating group on 4 letters. I find "grabbing and turning" the 3D plot shows the structure much better than simply an embedding of the graph in the plane.

 

a4 := `<|>`(`<,>`(a, b), `<,>`(a^3, b^2, a.b.a = b.(a^2).b))

_m132249105458016

(11)

DrawGraph(CayleyGraph(a4), layout = spring, dimension = 3, size = [800, 800])

 

 

Another great opportunity for a visualization comes a couple of weeks later, when you talk about subgroup lattices. Here are a few examples:

 

with(GroupTheory)``

qd := QuasiDihedralGroup(2)

_m132249751531168

(12)

GroupOrder(qd)

16

(13)

DrawSubgroupLattice(qd, normal = false, center = false)

 

 

This is the plain subgroup lattice. Note how the subgroups in the first and second nontrivial "layer" from the bottom are grouped by conjugacy class. The default visualization of a subgroup lattice highlights the centre in light blue and the (in this case six) other normal subgroups in green.

 

DrawSubgroupLattice(qd)

 

 

We see that every conjugacy class of size one is a normal subgroup. We can also highlight other subgroups, if we want. Maybe we want to show which are the (cyclic) subgroups generated by one of the chosen generators:

 

generators := Generators(qd)

[_m132249751506336, _m132249751509600]

(14)

DrawSubgroupLattice(qd, highlight = [seq({g}, `in`(g, generators))])

 

 

Of course you can also show more advanced topics in this way. For example, here is the Frattini series of this group.

 

DrawSubgroupLattice(qd, highlight = FrattiniSeries(qd))

 

NULL NULL


 

Download blogpost-algebra.mw

Featured Post

13410

Recently, a local Math olympiad included the following problem:

 

 

 Compute:Limit(n*(Int(x^n/(x^n+x+2024), x = 0 .. 1)), n = infinity).

 

 

I was almost sure that Maple can compute it, but unfortunately it needed help!

restart;

J:=n->n*int(x^n/(x^n+x+2024),x=0..1);

proc (n) options operator, arrow; n*(int(x^n/(x^n+x+2024), x = 0 .. 1)) end proc

(1)

limit(J(n), n=infinity); # Maple gives up.

limit(n*(int(x^n/(x^n+x+2024), x = 0 .. 1)), n = infinity)

(2)

simplify(IntegrationTools:-Change(J(n), x=t^(1/n), t)) assuming n>1;

int(t^(1/n)/(t+t^(1/n)+2024), t = 0 .. 1)

(3)

ans:=limit(%, n=infinity);

ln(2)+ln(1013)-4*ln(3)-2*ln(5)

(4)

#map(combine,ans, ln);

combine(ans,ln, integer);

4*ln((1/15)*2026^(1/4)*5^(1/2))

(5)

ln(exp(%)); # should be obtainable with convert

ln(2026/2025)

(6)

evalf(% = J(100)); # sanity check;

0.4937051076e-3 = 0.488824e-3+0.*I

(7)


Download lim-int-vv.mw