GAP 
Main BranchesDownloads Installation Overview Data Libraries Packages Documentation Contacts FAQ GAP 3 

SitemapNavigation Tree

Frequently Asked QuestionsGeneral Obtaining GAP Installation Hardware/OS Usage Complaints Computing with GAP Programming GAP 7. Computing with GAP7.4: In many algebra books the quaternion group is a group on 8 distinct symbols {i,j,k,1,1,i,j,k}. How can I make GAP use these elements?GAP's group constructors will generally, and by default, construct a group of the specified isomorphism type, in whatever form is most efficient for computation. No specific nomenclature for the elements if guaranteed. So gap> q8 := SmallGroup(8,4); <pc group of size 8 with 3 generators> gap> Elements(q8); [ <identity> of ..., f1, f2, f3, f1*f2, f1*f3, f2*f3, f1*f2*f3 ] gap> is a perfectly good description of a group of order 8 isomorphic to the group generated by the quaternions i and j. We can actually see that by making the group of quaternions: gap> q := QuaternionAlgebra(Rationals); <algebrawithone of dimension 4 over Rationals> gap> gens := GeneratorsOfAlgebraWithOne(q); [ e, i, j, k ] gap> e := gens[1]; i := gens[2]; j := gens[3]; k := gens[4]; e i j k gap> g := Group(i,j); #I default `IsGeneratorsOfMagmaWithInverses' method returns `true' for [ i, j ] <group with 2 generators> gap> Elements(g); [ (1)*e, (1)*i, (1)*j, (1)*k, k, j, i, e ] gap> IsomorphismGroups(q8,g); [ f1, f2, f3 ] > [ j, i, (1)*e ] Here we construct the group Q_{8} that you were expecting, list its elements and, in the last line, demonstrate an isomorphism between the library group SmallGroup(8,4) and the group of quaternions. Using this group g, we can, for instance print the normal subgroups gap> Print(NormalSubgroups(g),"\n");; [ Group( [ i, j ] ), Group( [ (1)*k, (1)*e ]), Group( [ (1)*j, (1)*e ] ), Group( [ i, (1)*e ] ), Group( [(1)*e ] ), Group( e ) ] Each subgroup is still given only in terms of generating elements because as soon as your groups get much larger you almost never actually want the complete list of elements. If you want them in this case, you can do gap> for n in NormalSubgroups(g) do Print(Elements(n),"\n"); od; [ (1)*e, (1)*i, (1)*j, (1)*k, k, j, i, e ] [ (1)*e, (1)*k, k, e ] [ (1)*e, (1)*j, j, e ] [ (1)*e, (1)*i, i, e ] [ (1)*e, e ] [ e ] gap> In general, if you want to see the elements of your group in some particular notation, you need to construct the group from elements of that kind. Then, if you ask for the Elements of a subgroup or coset, you will get what you want. For instance, when you say you want the generating elements for a particular subgroup of Q_{8}, in what form do you want them? The standard representation (because it's the best for computing), is as words in what are called polycylic generators. If you would prefer permutations, you can specify this when constructing the group. 

The GAP Group Last updated: Thu Jun 14 14:56:33 2012 