(*********************************************************************** Mathematica-Compatible Notebook This notebook can be used on any computer system with Mathematica 3.0, MathReader 3.0, or any compatible application. The data for the notebook starts with the line of stars above. To get the notebook into a Mathematica-compatible application, do one of the following: * Save the data starting with the line of stars above into a file with a name ending in .nb, then open the file inside the application; * Copy the data starting with the line of stars above to the clipboard, then use the Paste menu command inside the application. Data for notebooks contains only printable 7-bit ASCII and can be sent directly in email or through ftp in text mode. Newlines can be CR, LF or CRLF (Unix, Macintosh or MS-DOS style). NOTE: If you modify the data for this notebook not in a Mathematica- compatible application, you must delete the line below containing the word CacheID, otherwise Mathematica-compatible applications may try to use invalid cache data. For more information on notebooks and Mathematica-compatible applications, contact Wolfram Research: web: http://www.wolfram.com email: info@wolfram.com phone: +1-217-398-0700 (U.S.) Notebook reader applications are available free of charge from Wolfram Research. ***********************************************************************) (*CacheID: 232*) (*NotebookFileLineBreakTest NotebookFileLineBreakTest*) (*NotebookOptionsPosition[ 42012, 1519]*) (*NotebookOutlinePosition[ 46801, 1661]*) (* CellTagsIndexPosition[ 46323, 1643]*) (*WindowFrame->Normal*) Notebook[{ Cell[CellGroupData[{ Cell["A Tour of AbstractAlgebra", "Title", CellMargins->{{Inherited, 79}, {Inherited, Inherited}}, Evaluatable->False, AspectRatioFixed->True], Cell[TextData[{ "An abbreviated tour through this notebook was given at the Worldwide ", StyleBox["Mathematica", FontSlant->"Italic"], " Conference held in Chicago, June, 1998." }], "Text"], Cell[CellGroupData[{ Cell[TextData[{ StyleBox[ "Al Hibbard (Central College - hibbarda@central.edu)\nKen Levasseur \ (UMass-Lowell - Kenneth_Levasseur@uml.edu)\n", CellMargins->{{Inherited, 79}, {Inherited, Inherited}}, Evaluatable->False, AspectRatioFixed->True, FontSize->18, FontSlant->"Plain"], ButtonBox["http://www.central.edu/eaam.html", ButtonData:>{ URL[ "http://www.central.edu/eaam.html"], None}, ButtonStyle->"Hyperlink"] }], "Subsubtitle", CellMargins->{{Inherited, 79}, {Inherited, Inherited}}, Evaluatable->False, TextAlignment->Center, TextJustification->0, AspectRatioFixed->True], Cell[CellGroupData[{ Cell["Startup", "Section"], Cell["\<\ First, we load the Master package, which will load in all of the \ names that are used in the AbstractAlgebra packages.\ \>", "Text"], Cell[BoxData[ \(Needs["\"]\)], "Input"], Cell["\<\ Since we will first consider groups, we switch the structure to \ Group.\ \>", "Text"], Cell[BoxData[ \(SwitchStructureTo[Group]\)], "Input"] }, Closed]], Cell[CellGroupData[{ Cell["The Basic Structures", "Section", Evaluatable->False, AspectRatioFixed->True], Cell[TextData[{ "There are three basic ", StyleBox["Mathematica", FontSlant->"Italic"], " data structures used in AbstractAlgebra: the Groupoid, Ringoid, and \ Morphoid. These are generalizations of groups, rings and morphisms. We will \ use groupoid, ringoid and function when we refer to the mathematical \ counterparts to the corresponding ", StyleBox["Mathematica", FontSlant->"Italic"], " data structures." }], "Text"], Cell[CellGroupData[{ Cell["Groupoids", "Subsection"], Cell["\<\ A Groupoid consists of a set of elements and a \"binary\" operation \ (two inputs from the space whose images do not need to belong to this space). \ One means of creating one of these is with the FormGroupoid option.\ \>", "Text"], Cell[TextData[ "G = FormGroupoid[{0, 2, 1, 4, 6}, Times, GroupoidName \[Rule] \"ex.1\"]"], "Input", AspectRatioFixed->True], Cell["\<\ We can easily extract the operation and elements of any groupoid.\ \ \>", "Text"], Cell[BoxData[{ \(Operation[G]\), \(Elements[G]\)}], "Input"], Cell["\<\ We are often interested in whether a groupoid has an identity \ element or not.\ \>", "Text"], Cell[BoxData[ \(HasIdentityQ[G]\)], "Input"], Cell["\<\ Many functions can take on additional Modes, such as Textual or \ Visual.\ \>", "Text"], Cell[BoxData[ \(HasIdentityQ[G, \ Mode\ \[Rule] \ Textual]\)], "Input"], Cell[BoxData[ \(HasIdentityQ[G, \ Mode\ \[Rule] \ Visual]\)], "Input"], Cell["\<\ Another group axiom to consider is whether all the elements have \ inverses.\ \>", "Text"], Cell[BoxData[ \(HasInversesQ[G, \ Mode\ \[Rule] Textual]\)], "Input"], Cell["\<\ Closure is another required property of being a group. Here is the \ Visual mode of this Boolean function.\ \>", "Text"], Cell[BoxData[ \(ClosedQ[G, \ Mode \[Rule] \ Visual]\)], "Input"], Cell["\<\ Finally, the last required property is associativity. This \ visualization chooses a random triple and pursues whether these three \ elements obey this property.\ \>", "Text"], Cell[BoxData[ \(AssociativeQ[G, \ Mode \[Rule] Visual]\)], "Input"], Cell["\<\ The GroupInfo function returns all the information learned about a \ groupoid from tests that have been performed.\ \>", "Text"], Cell[BoxData[ \(GroupInfo[G]\)], "Input"], Cell["\<\ Instead of testing the axiomatic properties individually, we can \ also test these together with one function.\ \>", "Text"], Cell[BoxData[ \(GroupQ[G]\)], "Input"], Cell["\<\ The Cayley table is a tool that can reveal a number of interesting \ properties regarding a group.\ \>", "Text"], Cell[BoxData[ \(CayleyTable[G, \ Mode\ \[Rule] \ Visual]\)], "Input"] }, Closed]], Cell[CellGroupData[{ Cell["Ringoids", "Subsection"], Cell["\<\ Since we now wish to consider rings, we switch our structure.\ \>", "Text"], Cell["SwitchStructureTo[Ring]", "Input", AspectRatioFixed->True], Cell["\<\ FormRingoid works in a fashion analogous to FormGroupoid. The \ required parameters are the list of elements, the addition operation and the \ multiplication operation. Options can be added afterwards.\ \>", "Text"], Cell[TextData[ "R = FormRingoid[{0, 2, 1, 4, 6}, Plus, Times, FormatOperator \[Rule] False, \ FormatElements \[Rule] True]"], "Input", AspectRatioFixed->True], Cell["\<\ RingQ is similar to GroupQ; upon the first failure, it returns \ False.\ \>", "Text"], Cell[BoxData[ \(RingQ[R]\)], "Input"], Cell["Similarly, RingInfo is similar to GroupInfo.", "Text"], Cell[BoxData[ \(RingInfo[R]\)], "Input"], Cell["\<\ Since there are two operations, we need to view the Cayley tables \ of both operations.\ \>", "Text"], Cell[BoxData[ \(CayleyTables[R, \ Mode\ \[Rule] \ Visual]\)], "Input"], Cell["\<\ Here we form the extension ring of polynomials over the Boolean \ ring on {1, 2, 3} and choose a random polynomial of degree 2 that is monic \ (leading coefficient is the unity).\ \>", "Text"], Cell[BoxData[ \(RandomElement[PolynomialsOver[BooleanRing[3]], 2, Monic \[Rule] True] \)], "Input", CellTags->"RandomPolynomials"], Cell["\<\ Next we consider a random 3 by 3 matrix whose elements come from \ the lattice ring on the divisors of 12 (with operation LCM/GCD for the \ addition and GCD for the multiplication.\ \>", "Text"], Cell[BoxData[ \(RandomElement[MatricesOver[LatticeRing[12], 3]] // MatrixForm\)], "Input", CellTags->"RandomPolynomials"], Cell[TextData[{ "The third type of ring extension is the ring of functions over a ring; \ here we use ", Cell[BoxData[ \(TraditionalForm\`\[DoubleStruckCapitalZ]\_12\)]], "." }], "Text"], Cell[BoxData[ \(RandomElement[FunctionsOver[ZR[12]]]\)], "Input", CellTags->"RandomPolynomials"], Cell["As a last example here, we form the Galois field of order 9.", "Text"], Cell[BoxData[ \(GF[9]\)], "Input"] }, Closed]], Cell[CellGroupData[{ Cell["Morphoids", "Subsection"], Cell["\<\ To form a Morphoid, the parameters are a (pure) function and then \ either two groupoids or two ringoids. (The function has the first structure \ as the domain and the second as the codomain.)\ \>", "Text"], Cell["f = FormMorphoid[Mod[#, 6]&, Z[12], Z[6]]", "Input", AspectRatioFixed->True], Cell["\<\ The MorphismQ function determines if this is a (ring) homomorphism.\ \ \>", "Text"], Cell["MorphismQ[f]", "Input", AspectRatioFixed->True], Cell["\<\ To see visually why the operation is preserved for the pair (3, 5), \ try the following.\ \>", "Text"], Cell[BoxData[ \(PreservesQ[f, \ {3, 5}, \ Mode\ \[Rule] \ Visual]\)], "Input"], Cell["We now switch back to groups.", "Text"], Cell[BoxData[ \(SwitchStructureTo[Group]\)], "Input"], Cell["At this point, we now build a group homomorphism.", "Text"], Cell["g = FormMorphoid[Mod[#, 6]&, Z[12], Z[6]]", "Input", AspectRatioFixed->True], Cell["\<\ We see different results now that we are working with groups.\ \>", "Text"], Cell[BoxData[ \(PreservesQ[g, \ {3, 5}, \ Mode\ \[Rule] \ Visual]\)], "Input"], Cell["\<\ Sometimes morphisms are more easily set up by matching how we want \ the elements to line up.\ \>", "Text"], Cell[BoxData[ \(\(FormMorphoidSetup[D[4], \ Z[8]]; \)\)], "Input"], Cell["\<\ We want to send the first element in the domain to the first \ element in the codomain, the second element in the domain to the third \ element in the codomain, the third to the fifth etc.\ \>", "Text"], Cell[BoxData[ \(h\ = FormMorphoid[{1, 3, 5, 7, 2, 4, 6, 8}, D[4], \ Z[8]]\)], "Input"], Cell["\<\ Here we see that this is not a homomorphism on the whole group, but \ note that we can see a homormorphism from the rotational subgroup to the set \ {0, 2, 4, 6}.\ \>", "Text"], Cell[BoxData[ \(MorphismQ[h, \ Mode\ \[Rule] \ Visual]\)], "Input"] }, Closed]] }, Closed]], Cell[CellGroupData[{ Cell["Help Browser", "Section"], Cell[TextData[{ "We have implemented full documentation into the Help Browser. Before \ using, you need to download and install from ", ButtonBox["http://www.central.edu/eaam.html", ButtonData:>{ URL[ "http://www.central.edu/eaam.html"], None}, ButtonStyle->"Hyperlink"], ", choose ", StyleBox["Rebuild Help Index", FontSlant->"Italic"], " from the ", StyleBox["Help", FontSlant->"Italic"], " menu and then access it from the ", ButtonBox["AddOns", ButtonData:>{"Introduction to AbstractAlgebra", "TAG"}, ButtonStyle->"AddOnsLink"], " button." }], "Text"] }, Closed]], Cell[CellGroupData[{ Cell[TextData[{ StyleBox["Exploring Abstract Algebra with", FontSlant->"Italic"], " ", StyleBox["Mathematica", FontSlant->"Italic"], " " }], "Section"], Cell[CellGroupData[{ Cell["description", "Subsection"], Cell[TextData[{ "The packages in ", StyleBox["AbstractAlgebra", FontFamily->"Courier"], " form the foundation for a series of 14 group labs and 13 ring labs \ designed to help students conceptualize abstract algebra. These are combined \ with documentation for ", StyleBox["AbstractAlgebra", FontFamily->"Courier"], " in a book entitled ", StyleBox["Exploring Abstract Algebra with Mathematica", FontSlant->"Italic"], " (EAAM) published by TELOS/Springer-Verlag (fall/winter 1998)." }], "Text"] }, Closed]], Cell[CellGroupData[{ Cell["group labs", "Subsection"], Cell[TextData[{ "Group Lab 1. ", StyleBox["Using symmetry to uncover a group", FontSlant->"Italic"], " -- ", StyleBox[ "This lab explores the underlying definitions of a group by looking at the \ symmetries of an equilateral triangle.", Evaluatable->False, AspectRatioFixed->True], "\n\nGroup Lab 2. ", StyleBox["Determining the symmetry group of a given figure", FontSlant->"Italic"], " -- ", StyleBox[ "The focus of this lab is to determine the symmetry group of a figure \ chosen randomly from a list of regular polygons and \"cyclic\" objects.", Evaluatable->False, AspectRatioFixed->True], "\n\nGroup Lab 3. ", StyleBox["Is this a group?", FontSlant->"Italic"], " -- ", StyleBox[ "This lab randomly presents a Cayley table of one of 20 \"possible \ groups.\" The goal is to determine which of the defining properties of a \ group are reflected in the Cayley table to see if it represents a group.", Evaluatable->False, AspectRatioFixed->True], "\n\nGroup Lab 4. ", StyleBox["Let's get these orders straight!", Evaluatable->False, AspectRatioFixed->True, FontSlant->"Italic"], StyleBox[ " -- This lab looks at the order of an element and its inverse, the \ distribution of the orders of the elements in ", Evaluatable->False, AspectRatioFixed->True], Cell[BoxData[ \(TraditionalForm\`\[DoubleStruckCapitalZ]\_n\)]], StyleBox[", investigates the probability that an element in ", Evaluatable->False, AspectRatioFixed->True], Cell[BoxData[ \(TraditionalForm\`\[DoubleStruckCapitalZ]\_n\)]], StyleBox[" has order ", Evaluatable->False, AspectRatioFixed->True], Cell[BoxData[ \(TraditionalForm\`n\)]], StyleBox[" and also explores the group ", Evaluatable->False, AspectRatioFixed->True], Cell[BoxData[ \(TraditionalForm\`U\_n\)]], StyleBox[" (the units in ", Evaluatable->False, AspectRatioFixed->True], Cell[BoxData[ \(TraditionalForm\`\[DoubleStruckCapitalZ]\_n\)]], StyleBox[").", Evaluatable->False, AspectRatioFixed->True], "\n\nGroup Lab 5. ", StyleBox["Subversively grouping our elements", Evaluatable->False, AspectRatioFixed->True, FontSlant->"Italic"], StyleBox[ " -- This lab explores the notion of a subgroup, including looking at the \ subgroups of ", Evaluatable->False, AspectRatioFixed->True], Cell[BoxData[ \(TraditionalForm\`\[DoubleStruckCapitalZ]\_n\)]], StyleBox[" and ", Evaluatable->False, AspectRatioFixed->True], Cell[BoxData[ \(TraditionalForm\`U\_n\)]], StyleBox[", calculating the probability that a random subset of ", Evaluatable->False, AspectRatioFixed->True], Cell[BoxData[ \(TraditionalForm\`\[DoubleStruckCapitalZ]\_n\)]], StyleBox[ " is a subgroup and determining what elements in a subset are necessary so \ that the closure yields the whole group.", Evaluatable->False, AspectRatioFixed->True], "\n\nGroup Lab 6. ", StyleBox["Cycling through the groups", Evaluatable->False, AspectRatioFixed->True, FontSlant->"Italic"], StyleBox[ " -- Here we focus on the notion of a cyclic group and its subgroup \ structure. We also look at the determining when the direct sum of ", Evaluatable->False, AspectRatioFixed->True], Cell[BoxData[ \(TraditionalForm\`\[DoubleStruckCapitalZ]\_m\)]], StyleBox[" and ", Evaluatable->False, AspectRatioFixed->True], Cell[BoxData[ \(TraditionalForm\`\[DoubleStruckCapitalZ]\_n\)]], StyleBox[" yields a cyclic group.", Evaluatable->False, AspectRatioFixed->True], "\n\nGroup Lab 7. ", StyleBox["Permutations", Evaluatable->False, AspectRatioFixed->True, FontSlant->"Italic"], StyleBox[ " -- This lab looks at the definition of a permutation, how to perform \ computations and explore properties. We also look at some applications of \ permutations.", Evaluatable->False, AspectRatioFixed->True], "\n\nGroup Lab 8. ", StyleBox["Isomorphisms", Evaluatable->False, AspectRatioFixed->True, FontSlant->"Italic"], StyleBox[ " -- Here we look at the definition of an isomorphism and then use various \ visual mechanisms to try to determine when two groups are or are not \ isomorphic.", Evaluatable->False, AspectRatioFixed->True], "\n\nGroup Lab 9. ", StyleBox["Automorphisms", FontSlant->"Italic"], " -- In this lab, w", StyleBox["e look at the group of automorphisms of ", Evaluatable->False, AspectRatioFixed->True], Cell[BoxData[ \(TraditionalForm\`\[DoubleStruckCapitalZ]\_n\)]], StyleBox[" and also look at inner automorphisms.", Evaluatable->False, AspectRatioFixed->True], "\n\nGroup Lab 10. ", StyleBox["Direct Products", Evaluatable->False, AspectRatioFixed->True, FontSlant->"Italic"], StyleBox[ " -- The notion of direct products (sums) are introduced and we determine \ the order of elements in a direct product. We also try to determine when the \ direct product of cyclic groups is still cyclic. We also look for \ isomorphisms between some ", Evaluatable->False, AspectRatioFixed->True], Cell[BoxData[ \(TraditionalForm\`U\_n\)]], StyleBox[" groups.", Evaluatable->False, AspectRatioFixed->True], "\n\nGroup Lab 11. ", StyleBox["Cosets", Evaluatable->False, AspectRatioFixed->True, FontSlant->"Italic"], StyleBox[" -- This lab explores the definition and properties of cosets.", Evaluatable->False, AspectRatioFixed->True], "\n\nGroup Lab 12. ", StyleBox["Normality and Factor groups", Evaluatable->False, AspectRatioFixed->True, FontSlant->"Italic"], StyleBox[ " -- A normal group is defined and explored and then used to define and \ explore factor groups.", Evaluatable->False, AspectRatioFixed->True], "\n\nGroup Lab 13. ", StyleBox["Homomorphisms", Evaluatable->False, AspectRatioFixed->True, FontSlant->"Italic"], StyleBox[" -- This lab explores group homomorphisms.", Evaluatable->False, AspectRatioFixed->True], "\n\nGroup Lab 14: ", StyleBox["Rotational groups of regular polyhedra", FontSlant->"Italic"], " -- Here we look at how to generate the rotational groups of several \ polyhedra." }], "Text"] }, Closed]], Cell[CellGroupData[{ Cell["ring labs", "Subsection"], Cell[TextData[{ "Ring Lab 1. ", StyleBox["An Introduction to Ringoids and Rings", FontSlant->"Italic"], " -- This introduces some of the definitions and properties of rings.\n\n\ Ring Lab 2. ", StyleBox["An Introduction to Rings: part two --", FontSlant->"Italic"], " Guess what this is about!\n\nRing Lab 3. ", StyleBox["An ideal part of rings", FontSlant->"Italic"], " -- This explores the notion of an ideal and properties related to it.\n\n\ Ring Lab 4. ", StyleBox["What does ", FontSlant->"Italic"], Cell[BoxData[ \(TraditionalForm \`\[DoubleStruckCapitalZ][i]/ \[LeftAngleBracket]a + b\ i\[RightAngleBracket]\)]], StyleBox[" look like?", FontSlant->"Italic"], " -- This lab focuses on the Gaussian integers mod an ideal generated by \ some Gaussian integer.\n\nRing Lab 5. ", StyleBox["Ring homomorphisms", FontSlant->"Italic"], " -- This lab looks at ring homomorphisms, the First Isomorphism Theorem, \ and the Chinese Remainder Theorem.\n\nRing Lab 6. ", StyleBox["Polynomial rings", FontSlant->"Italic"], " -- Some basic properties of polynomial rings are introduced and explored.\ \n\nRing Lab 7. ", StyleBox["Factoring and irreducibility", FontSlant->"Italic"], " -- What does it mean to factor a polynomial? Various definitions and \ techniques are introduced. \n\nRing Lab 8. ", StyleBox["Roots of unity", FontSlant->"Italic"], " -- This lab focuses on the polynomial ", Cell[BoxData[ \(TraditionalForm\`x\^n - 1\)]], " and explores graphically the zeros of this polynomial, in particular \ seeing how the zeros are related to the factors and how the group ", Cell[BoxData[ \(TraditionalForm\`U\_n\)]], " springs out of this.\n\nRing Lab 9. ", StyleBox["Cyclotomic polynomials", FontSlant->"Italic"], " -- This lab focuses on cyclotomic polynomials and the many properties \ related to them.\n\nRing Lab 10. ", StyleBox["Quotient rings of polynomials", FontSlant->"Italic"], " -- The notion of a quotient ring over a polynomial is introduced in this \ lab.\n\nRing Lab 11. ", StyleBox["Quadratic field extensions", FontSlant->"Italic"], " -- This lab continues the last by looking more closely at quotient rings \ modulo a quadratic polynomial where the result is a field.\n\nRing Lab 12. ", StyleBox["Factoring in", FontSlant->"Italic"], " ", Cell[BoxData[ FormBox[ RowBox[{ FormBox[\(\[DoubleStruckCapitalZ][\@d\), "TraditionalForm"], "]"}], TraditionalForm]]], " -- This lab focuses on the rings ", Cell[BoxData[ FormBox[ RowBox[{ FormBox[\(\[DoubleStruckCapitalZ][\@d\), "TraditionalForm"], "]"}], TraditionalForm]]], " and pursues the notion of divisibility and factoring in such rings. \ Several rings are illustrated as failing being a UFD.\n\nRing Lab 13. ", StyleBox["Finite Fields", FontSlant->"Italic"], " -- This lab continues the ideas formulated in lab 11 by looking at Galois \ fields and properties related to them." }], "Text"] }, Closed]] }, Closed]], Cell[CellGroupData[{ Cell["GroupCalculator", "Section"], Cell[TextData[{ "See our ", ButtonBox["web page", ButtonData:>{ URL[ "http://www.central.edu/eaam.html"], None}, ButtonStyle->"Hyperlink"], " for a group calculator to ", ButtonBox["download", ButtonData:>{ URL[ "http://www.central.edu/homepages/hibbarda/EAAM/GroupCalculator.nb"], None}, ButtonStyle->"Hyperlink"], " it. (For now, start with a clean kernel, clearing out any previous \ AbstractAlgebra definitions.)" }], "Text"] }, Closed]], Cell[CellGroupData[{ Cell["More Groupoids", "Section", Evaluatable->False, AspectRatioFixed->True], Cell["\<\ There are a number of options for controlling how groupoids, \ ringoids and morphoids are formed.\ \>", "Text"], Cell["Options[FormGroupoid]", "Input", AspectRatioFixed->True], Cell["We can form the permutation group on any set of elements.", "Text"], Cell[TextData["H = PermutationGroup[{\[Alpha], \[Beta], \[Gamma]}]"], "Input", AspectRatioFixed->True], Cell["\<\ Here is the Cayley table of the group just formed, using a Key \ since the elements are too wide for the table.\ \>", "Text"], Cell[BoxData[ \(\(CayleyTable[H, \ Mode \[Rule] \ Visual, \ KeyForm\ \[Rule] \ StandardForm]; \)\)], "Input"], Cell["We form a list of some groups, to be used below.", "Text"], Cell[BoxData[ \(someGroups\ = \ {Z[5], \ Dihedral[4], \ Symmetric[3], \ U[15]}\)], "Input"], Cell["\<\ Most functions can take a list of arguments, as shown here with \ CayleyTable.\ \>", "Text"], Cell[BoxData[ \(\(CayleyTable[someGroups, \ Mode\ \[Rule] \ Visual]; \)\)], "Input"], Cell["\<\ Here is a visualization of why the following groups are or are not \ cyclic.\ \>", "Text"], Cell[BoxData[ \(CyclicQ[someGroups, \ Mode\ \[Rule] \ Visual]\)], "Input"], Cell["\<\ Loops indicate self-inversive elements, while lines connect other \ inverses.\ \>", "Text"], Cell[BoxData[ \(Inverses[U[15], \ Mode\ \[Rule] \ Visual]\)], "Input"], Cell["We can form the direct product of any number of groupoids.", "Text"], Cell["G = DirectProduct[Z[5], U[4]]", "Input", AspectRatioFixed->True], Cell["\<\ Here we choose 2 random elements from this group, each of which are \ pairs.\ \>", "Text"], Cell[BoxData[ \({g, h}\ = \ RandomElements[G, \ 2]\)], "Input"], Cell["\<\ We can apply the group operation to these elements as follows.\ \>", "Text"], Cell["Operation[G][g,h]", "Input", AspectRatioFixed->True], Cell["\<\ Here is a nonsense groupoid formed by specifying the \"group\" \ table.\ \>", "Text"], Cell[BoxData[ \(H\ = \ FormGroupoidByTable[{b, a, a**b, a\^b}, {{a, a**b, b, a\^b}, {b, a, a\^b, a**b}, {a**b, a\^b, b, a}, {a\^b, a**b, a, b}}, "\<*\>", WideElements \[Rule] True]\)], "Input"], Cell["\<\ The CayleyTable function has a large number of options, as well as \ the ability to take Graphics options.\ \>", "Text"], Cell[BoxData[ \(CayleyTable[H, Mode \[Rule] Visual, \ ShowName\ \[Rule] \ False, \ VarToUse\ \[Rule] \ "\", \ KeyForm\ \[Rule] \ FullForm, \ Background \[Rule] \ Cyan, CayleyForm\ \[Rule] \ Characters, \ Epilog\ \[Rule] {RGBColor[1, 0, 0], Thickness[0.02], Line[{{\(-1\), 0}, {5, 6}}]}]\)], "Input", CellTags->"Cayley"], Cell["Each groupoid in CayleyTable can receive different options.", "Text"], Cell[BoxData[ \(\(CayleyTable[{G, H}, {{ShowBodyText \[Rule] False}, {ShowKey \[Rule] False}}, Mode \[Rule] Visual]; \)\)], "Input", CellTags->"Cayley"], Cell["We can work with Gaussian integers reduced some modulus.", "Text"], Cell[BoxData[ \(Z[4, I]\)], "Input"], Cell["\<\ The TwistedZ is an interesting groupoid that is sometimes a \ group.\ \>", "Text"], Cell[BoxData[ \(SubgroupQ[\ {0, \ 2\ , \ 8}, TwistedZ[13]]\)], "Input", CellTags->"Subgroups"], Cell["\<\ The SubgroupQ function takes multiple requests in the following \ fashion.\ \>", "Text"], Cell[BoxData[ \(SubgroupQ[{{\ {0, 3}, Z[5]}, \ {\ {1, 4}, U[9]}}, \ Mode\ \[Rule] \ Visual]\)], "Input", CellTags->"Subgroups"], Cell[TextData[{ "Given the set {1,4} of the group ", Cell[BoxData[ \(TraditionalForm\`\[DoubleStruckCapitalZ]\_9\)]], ", the following shows how the closure of this set is built up in three \ iterations." }], "Text"], Cell[BoxData[ \(Closure[Z[9], \ {1, \ 4}, \ ReportIterations\ \[Rule] \ True]\)], "Input", CellTags->"Subgroups"], Cell["One may want the elements to be canonically sorted.", "Text"], Cell[BoxData[ \(Closure[Z[9], \ {1, \ 4}, \ Sort\ \[Rule] \ True]\)], "Input", CellTags->"Subgroups"], Cell[TextData[{ "Here is a animation indicating the subgroup generated by 6 in the group ", Cell[BoxData[ \(TraditionalForm\`\[DoubleStruckCapitalZ]\_8\)]], "." }], "Text"], Cell[BoxData[ \(SubgroupGenerated[Z[8], \ 6, \ Mode\ \[Rule] \ Visual]\)], "Input", CellTags->"Subgroups"], Cell["Here is the same but using a GraphicsArray for its display.", "Text"], Cell[BoxData[ \(SubgroupGenerated[Z[8], \ 6, \ Mode\ \[Rule] \ Visual, \ Output\ \[Rule] \ GraphicsArray]\)], "Input", CellTags->"Subgroups"], Cell["We can find all cyclic subgroups of any group.", "Text"], Cell[BoxData[ \(CyclicSubgroups[D[4]]\)], "Input", CellTags->"Subgroups"], Cell[TextData[{ "Here is a visualization showing the left coset 7 + {0, 4} in the group ", Cell[BoxData[ \(TraditionalForm\`\[DoubleStruckCapitalZ]\_8\)]], "." }], "Text"], Cell[BoxData[ \(LeftCoset[Z[8], \ {0, \ 4}, \ 7, \ Mode\ \[Rule] \ Visual]\)], "Input",\ CellTags->"Quotients"], Cell["\<\ This illustrates how an operation makes sense on the following \ right cosets. This also shows a quotient group.\ \>", "Text"], Cell[BoxData[ \(\(gr1\ = \ RightCosets[Z[8], \ {0, \ 4}, \ Mode\ \[Rule] \ Visual, \ Output\ \[Rule] \ Graphics]; \)\)], "Input", CellTags->"Quotients"], Cell[TextData[ "By specifying Output \[Rule] Graphics, we indicate that we want the graphic \ as the output, not the actual Cayley table."], "Text"], Cell[BoxData[ \(\(gr2\ = \ CayleyTable[Z[4], \ Mode\ \[Rule] \ Visual, \ Output\ \[Rule] \ Graphics]; \)\)], "Input", CellTags->"Quotients"], Cell[TextData[{ "Putting the two side-by-side makes it clear to what group this quotient \ group ", Cell[BoxData[ \(TraditionalForm\`\[DoubleStruckCapitalZ]\_8/{0, 4}\)]], " is isomorphic." }], "Text"], Cell[BoxData[ \(\(Show[GraphicsArray[{gr1, \ gr2}]]; \)\)], "Input", CellTags->"Quotients"], Cell[TextData[{ "The following indicates that ", Cell[BoxData[ \(TraditionalForm \`\[LeftAngleBracket]{3, 2, 1}\[RightAngleBracket]\)]], " in ", Cell[BoxData[ \(TraditionalForm\`S\_3\)]], " is not normal." }], "Text"], Cell[BoxData[ \(NormalQ[H\ = \ SubgroupGenerated[Symmetric[3], \ {3, \ 2, \ 1}], Symmetric[3]]\)], "Input", CellTags->"Quotients"], Cell["\<\ Because of this lack of normality, the product of cosets is not a \ well-defined operation, as illustrated here by the failure of having square \ blocks for products.\ \>", "Text"], Cell[BoxData[ \(\(LeftCosets[Symmetric[3], \ \ H, \ Mode\ \[Rule] \ Visual]; \)\)], "Input", CellTags->"Quotients"], Cell[TextData[{ "Since {0, 4} is normal in ", Cell[BoxData[ \(TraditionalForm\`\[DoubleStruckCapitalZ]\_8\)]], ", we can form the quotient group." }], "Text"], Cell[BoxData[ \(QuotientGroup[Z[8], \ {0, \ 4}]\)], "Input", CellTags->"Quotients"], Cell["\<\ Here is a Cayley table of this group, using a different form and \ set of representatives for the representation of the elements.\ \>", "Text"], Cell[BoxData[ \(CayleyTable[ QuotientGroup[Z[8], \ {0, \ 4}, \ Form\ \[Rule] \ Representatives, \ Representatives\ \[Rule] \ {4, 1, 6, \ 3}], \ Mode\ \[Rule] \ Visual]\)], "Input", CellTags->"Quotients"], Cell["\<\ The same group is shown here using a coset list for each element.\ \ \>", "Text"], Cell[BoxData[ \(CayleyTable[ QuotientGroup[Z[8], \ {0, \ 4}, \ Form\ \[Rule] \ CosetLists], \ Mode\ \[Rule] \ Visual]\)], "Input", CellTags->"Quotients"], Cell[TextData[{ "This visulalization shows that 4 is the group exponent for the group ", Cell[BoxData[ \(TraditionalForm\`U\_15\)]], "." }], "Text"], Cell[BoxData[ \(GroupExponent[U[15], \ Mode\ \[Rule] \ Visual]\)], "Input", CellTags->"OtherProps"], Cell["GenerateGroupoid is another means of forming a groupoid.", "Text"], Cell[BoxData[ \(G\ = \ GenerateGroupoid[{{{2, 1}, {1, 1}}}, \ Mod[#1 . #2, \ 3]&, \ WideElements\ -> \ True]\)], "Input"] }, Closed]], Cell[CellGroupData[{ Cell["More Ringoids", "Section"], Cell["Before working with rings, we switch our dominant structure.", "Text"], Cell[BoxData[ \(SwitchStructureTo[Ring]\)], "Input"], Cell[TextData[{ "Here we see which rings ", Cell[BoxData[ \(TraditionalForm\`\[DoubleStruckCapitalZ]\_n\)]], " are fields." }], "Text"], Cell[BoxData[ \(Map[{#, FieldQ[Z[#]]}&, Range[3, 9]]\)], "Input", CellTags->"SpecializedRings"], Cell["This shows that this quotient ring is also a field.", "Text"], Cell[BoxData[ \(FieldQ[QuotientRing[Z[3], Poly[Z[3], x\^2 + x + 2]]]\)], "Input", CellTags->"SpecializedRings"], Cell[TextData[{ "This gives us a list of powers of the element (3, 6) in the direct product \ ", Cell[BoxData[ \(TraditionalForm \`\[DoubleStruckCapitalZ]\_6\[Cross]\[DoubleStruckCapitalZ]\_9\)]], "." }], "Text"], Cell[BoxData[ \(TableForm[ Map[{#, ElementToPower[DirectProduct[Z[6], Z[9]], {3, 6}, #]}&, Range[\(-1\), 4]], \ TableHeadings\ \[Rule] \ {None, \ {"\", \*"\"\<(3,6\!\(\()\^n\)\)\\n\>\""}}, \ TableDepth\ \[Rule] \ 2]\)], "Input", CellTags->"TestingOther"], Cell["Here we have a simple polynomial.", "Text"], Cell[BoxData[ \(p = Poly[Z[5], t\^2 + 2\ t + 3]\)], "Input", CellTags->"FormingPolynomials"], Cell["\<\ We can also form a polynomial by giving the list of coefficients.\ \ \>", "Text"], Cell[BoxData[ \(q = Poly[Z[5], 4, 3, 2, 1]\)], "Input", CellTags->"FormingPolynomials"], Cell["\<\ Since the list of coefficients have an ordering, we can specify how \ this should be interpreted if we don't want to assume we are working from \ left to right.\ \>", "Text"], Cell[BoxData[ \(Poly[Z[5], 4, 3, 2, 1, PowersIncrease \[Rule] RightToLeft]\)], "Input", CellTags->"FormingPolynomials"], Cell[TextData[{ "When we are over ", Cell[BoxData[ \(TraditionalForm\`\[DoubleStruckCapitalZ]\_n\)]], ", we have more flexibility is the choices of our coefficients in that they \ do not have to strictly be in the prescribed set, but are reduced first." }], "Text"], Cell[BoxData[ \(Poly[Z[5], x\^2 - x + 11]\)], "Input", CellTags->"FormingPolynomials"], Cell[TextData[{ "In this case, we choose 8 polynomials of degree 2, but allow lower degrees \ as well (", "LowerDegreeOK\[Rule]True", "). We allow any type of polynmial (SelectFrom \[Rule] Any), but we do not \ want repeats (Replacement \[Rule] False)." }], "Text"], Cell[BoxData[ \(RandomElements[PolynomialsOver[Z[2]], 2, 8, LowerDegreeOK \[Rule] True, \ SelectFrom\ \[Rule] \ Any, \ Replacement\ \[Rule] \ False]\)], "Input", CellTags->"RandomPolynomials"], Cell["Here is a basic polynomial.", "Text"], Cell[BoxData[ \(q\ = \ Poly[Z[12], \ x\^2 - 3 x\ + \ 8]\)], "Input"], Cell["We can ask for the zeros of this polynomial.", "Text"], Cell[BoxData[ \(Zeros[q]\)], "Input"], Cell["\<\ Finding zeros is equivalent to finding out when the polynomial is \ equal to the zero; the Solve command generalizes this (as an extension of the \ built-in Solve command).\ \>", "Text"], Cell[BoxData[ \(Solve[q\ == \ 6]\)], "Input"], Cell["We can verify that these are indeed solutions.", "Text"], Cell[BoxData[ \(q /. %\)], "Input"], Cell["\<\ The polynomials formed with Poly may look like ordinary \ polynomials, but they are not.\ \>", "Text"], Cell[BoxData[ \(p\ = \ Poly[Z[7], x\^2 - 8 x\ + \ 44]\)], "Input"], Cell["\<\ In most cases, they can be converted to standard polynomials, \ although there is rarely a need for this since there are standard polynomial \ functions to work with the Poly-type form.\ \>", "Text"], Cell[BoxData[ \(ToOrdinaryPolynomial[p]\)], "Input"], Cell[TextData[{ "In this example, we form a 5-by-5 matrix with elements from ", Cell[BoxData[ \(TraditionalForm\`\[DoubleStruckCapitalZ]\_3\)]], ", but restricted to using only the nonzero elements." }], "Text"], Cell[BoxData[ \(RandomElement[MatricesOver[Z[3], 5], SelectBaseElementsFrom \[Rule] NonZero] // MatrixForm\)], "Input", CellTags->"IndividualMatrices"], Cell["\<\ We can specify a number of different types of matrices when we want \ a random matrix.\ \>", "Text"], Cell[BoxData[ \(Map[TraditionalForm, examples = Map[RandomMatrix[Z[5], 3, MatrixType \[Rule] #]&, {\ GL, \ SL, \ Diag, \ UT, \ LT, \ UTD, \ \ LTD\ , All}]]\)], "Input", CellTags->"IndividualMatrices"], Cell["We can calculate the determinant of any of these as follows.", "Text"], Cell[BoxData[ \(Map[Det[Z[5], #]&, examples]\)], "Input", CellTags->"IndividualMatrices"], Cell["\<\ Any of these matrix extensions (if not too large) can be converted \ to a groupoid.\ \>", "Text"], Cell[BoxData[ \(ToGroupoid[GL[Z[3], 2]]\)], "Input", CellTags->"MatrixGroupoids"], Cell["Here is the Galois field of order 16.", "Text"], Cell[BoxData[ \(GF[16]\)], "Input"], Cell["It has a fourth degree extension.", "Text"], Cell[BoxData[ \(ExtensionDegree[GF[16]]\)], "Input"], Cell["\<\ This gives us a table to compare the multiplicative form using the \ generator x, against the additive form.\ \>", "Text"], Cell[BoxData[ \(TableOfPowers[GF[2, 4]] // MatrixForm\)], "Input", CellTags->"FiniteFields"], Cell["\<\ Instead of using the table, we can use the following function to \ make conversions (and another one to go the other direction).\ \>", "Text"], Cell[BoxData[ RowBox[{ StyleBox["AdditiveToMultiplicative", FontFamily->"Courier", FontWeight->"Bold"], StyleBox["[", FontFamily->"Courier", FontWeight->"Bold"], RowBox[{ StyleBox[\(GF[16]\), FontFamily->"Courier", FontWeight->"Bold"], StyleBox[",", FontFamily->"Courier", FontWeight->"Bold"], RowBox[{ StyleBox["1", FontFamily->"Courier", FontWeight->"Bold"], StyleBox["+", FontFamily->"Courier", FontWeight->"Bold"], SuperscriptBox[ StyleBox["x", FontFamily->"Courier", FontWeight->"Bold"], "2"], "+", \(x\^3\)}]}], "]"}]], "Input", CellTags->"FiniteFields"] }, Closed]], Cell[CellGroupData[{ Cell["More Morphoids", "Section"], Cell["We mostly work with groups here.", "Text"], Cell[BoxData[ \(SwitchStructureTo[Group]\)], "Input"], Cell[TextData[{ "This gives an animation of the maps from ", Cell[BoxData[ \(TraditionalForm\`\[DoubleStruckCapitalZ]\_12\)]], " to ", Cell[BoxData[ \(TraditionalForm\`\[DoubleStruckCapitalZ]\_k\)]], " from ", Cell[BoxData[ \(TraditionalForm\`k = 2\)]], " to ", Cell[BoxData[ \(TraditionalForm\`k = 13\)]], "." }], "Text"], Cell[BoxData[ \(Do[VisualizeMorphoid[ZMap[12, \ \ k]], {k, 2, 13}]\)], "Input"], Cell["\<\ This is a simple example showing that two cyclic groups of order 5 \ are indeed isomorphic.\ \>", "Text"], Cell[BoxData[{ \(Clear[g]\), \(f\ = FormMorphoid[g\ \[Rule] \ 3, \ Cyclic[5, \ Generator\ \[Rule] \ g], ZG[5], \ Mode\ \[Rule] \ Visual]\)}], "Input"], Cell["We can calculate the kernel and image of any Morphoid.", "Text"], Cell[BoxData[{ \(Kernel[f]\), \(Image[f]\)}], "Input"], Cell["We can also test for an isomorphism.", "Text"], Cell[BoxData[ \(IsomorphismQ[f]\)], "Input"], Cell["\<\ The automorphism group of any cyclic group is readily \ available.\ \>", "Text"], Cell[BoxData[ \(AutomorphismGroup[Z[8]]\)], "Input"], Cell["\<\ Similarly, the inner automorphism group for any group can be \ obtained.\ \>", "Text"], Cell[BoxData[ \(InnerAutomorphismGroup[Dihedral[5]]\)], "Input"], Cell["\<\ Since the elements were suppressed, we use the Elements function to \ reveal them.\ \>", "Text"], Cell[BoxData[ \(Elements[%]\)], "Input"] }, Closed]], Cell[CellGroupData[{ Cell["And other stuff", "Section"], Cell["Here is a random permutation.", "Text"], Cell[BoxData[ \(q = \ RandomPermutation[8]\)], "Input"], Cell["Here is another permutation.", "Text"], Cell[BoxData[ \(p\ = \ {1, 6, 2, 4, 7, 3, 5, 8, 9}\)], "Input"], Cell["\<\ We can multiply the permutations in either directions, depending on \ your convention.\ \>", "Text"], Cell[BoxData[{ \(MultiplyPermutations[p, q]\), \(MultiplyPermutations[p, q, ProductOrder\ \[Rule] \ LeftToRight]\)}], "Input"], Cell["Any permutation is readily converted to cycles.", "Text"], Cell[BoxData[ \(ToCycles[p]\)], "Input"], Cell["And back.", "Text"], Cell[BoxData[ \(FromCycles[%]\)], "Input"], Cell["\<\ If you like the form found in the standard packages, this is \ available, although not as clear.\ \>", "Text"], Cell[BoxData[ \(ToCycles[p, \ CycleAs\ \[Rule] \ List]\)], "Input"], Cell["Cycles can be multiplied.", "Text"], Cell[BoxData[ \(MultiplyCycles[Cycle[3, 6, 4], Cycle[1, 6, 5, 3]]\)], "Input"], Cell["\<\ The product is not commutative unless they are disjoint, so the \ following function can be used to test this.\ \>", "Text"], Cell[BoxData[ \(DisjointCyclesQ[Cycle[3, 6, 4], Cycle[1, 6, 5, 3]]\)], "Input"], Cell["\<\ Transpositions are just two-cycles and one can find a \ representation in terms of these.\ \>", "Text"], Cell[BoxData[ \(ToTranspositions[p]\)], "Input"], Cell["\<\ It is the number of transpositions that is important (determining \ if the permutation is odd or even).\ \>", "Text"], Cell[BoxData[{ \(Parity[p]\), \(OddPermutationQ[p]\)}], "Input"], Cell["\<\ Here we form a groupoid from a list of cycles or products of cycles \ (using @ as an infix operator for this).\ \>", "Text"], Cell[BoxData[ \(G\ = \ FormGroupoidFromCycles[{Cycle[1], \ Cycle[1, 3, 2]\ @\ \(Cycle[4, 6, 5]\ @\ Cycle[7, 8]\), \n Cycle[1, 3, 2]\ @\ Cycle[4, 6, 5]\ , \n Cycle[1, 2, 3]\ @\ Cycle[4, 5, 6]\ , \n Cycle[1, 2, 3]\ @\ \(Cycle[4, 5, 6]\ @\ Cycle[7, 8]\), \n Cycle[7, 8]}]\)], "Input", CellTags->"Stabilizers"], Cell["Given this group, we can find the orbit of the element 4.", "Text"], Cell[BoxData[ \(Orbit[G, \ Range[8], \ 4]\)], "Input", CellTags->"Stabilizers"], Cell[TextData[{ "Which of the following are units over ", Cell[BoxData[ \(TraditionalForm\`\[DoubleStruckCapitalZ][\@2]\)]], "?" }], "Text"], Cell[BoxData[ \(Map[ZdUnitQ[2, #]&, \ {1 + \@2, \(-1\), \ 2 + \@2, 1\ - \ \@2}]\)], "Input", CellTags->"BasicZ"] }, Closed]], Cell[CellGroupData[{ Cell["Not satisfied? Some More!", "Section", Evaluatable->False, AspectRatioFixed->True], Cell[TextData[{ "This gives the commutators for ", Cell[BoxData[ \(TraditionalForm\`D\_3\)]], "." }], "Text"], Cell[BoxData[ \(Commutators[Dihedral[3], \ Mode\ -> \ Visual]\)], "Input"], Cell[BoxData[{ \(G\ = \ Z[16, \ Structure\ -> \ Group]\), \(H\ = \ SubgroupGenerated[G, \ 4]\)}], "Input"], Cell["A quotient group is evident here.", "Text"], Cell[BoxData[ \(SubgroupQ[H, \ G, \ Mode\ -> \ Visual2]\)], "Input"], Cell["This gives us the order of all elements.", "Text"], Cell[BoxData[ \(U[10] // OrderOfAllElements\)], "Input"], Cell["\<\ Using the above, we can rearrange the elements when making the \ table, if we so desire. Compare this to the above table.\ \>", "Text"], Cell[BoxData[ \(CayleyTable[U[10], \ TheSet\ -> \ {1, 3, 9, 7}, \ Mode\ -> \ Visual, \ Output\ -> \ Graphics]\)], "Input"], Cell["\<\ The conjugacy class of elements in various groups can be \ found.\ \>", "Text"], Cell[BoxData[ \(ConjugacyClass[Symmetric[3], \ {2, 3, 1}]\)], "Input"], Cell[TextData[{ "Here are the generators of ", Cell[BoxData[ \(TraditionalForm\`U\_25\)]], "." }], "Text"], Cell[BoxData[ \(CyclicGenerators[U[25]]\)], "Input"], Cell["This gives us the center of a group.", "Text"], Cell[BoxData[ \(GroupCenter[Dihedral[4]]\)], "Input"] }, Closed]] }, Open ]] }, Open ]] }, FrontEndVersion->"Macintosh 3.0", ScreenRectangle->{{0, 832}, {0, 604}}, ScreenStyleEnvironment->"Presentation", WindowToolbars->"EditBar", WindowSize->{732, 556}, WindowMargins->{{4, Automatic}, {Automatic, 1}}, PrivateNotebookOptions->{"ColorPalette"->{RGBColor, -1}}, ShowGroupOpenCloseIcon->True, ShowCellLabel->True, ShowCellTags->False, RenderingOptions->{"ObjectDithering"->True, "RasterDithering"->False}, StyleDefinitions -> "Classic.nb", MacintoshSystemPageSetup->"\<\ AVU/IFiQKFD000000nM<00?WE=0000000<[B80?G^6P0AP1Y06`0I@1^0643id`0 0nMDl0000000b]800mNhJ00000000000000000?WC00000000000000000000000 00000000000000000000000000000000\>" ] (*********************************************************************** Cached data follows. If you edit this Notebook file directly, not using Mathematica, you must remove the line containing CacheID at the top of the file. The cache data will then be recreated when you save this file from within Mathematica. ***********************************************************************) (*CellTagsOutline CellTagsIndex->{ "RandomPolynomials"->{ Cell[7231, 269, 142, 3, 34, "Input", CellTags->"RandomPolynomials"], Cell[7583, 280, 130, 3, 34, "Input", CellTags->"RandomPolynomials"], Cell[7917, 293, 102, 2, 34, "Input", CellTags->"RandomPolynomials"], Cell[32440, 1134, 210, 4, 49, "Input", CellTags->"RandomPolynomials"]}, "Cayley"->{ Cell[24131, 837, 367, 6, 65, "Input", CellTags->"Cayley"], Cell[24579, 847, 174, 4, 49, "Input", CellTags->"Cayley"]}, "Subgroups"->{ Cell[24969, 863, 100, 2, 33, "Input", CellTags->"Subgroups"], Cell[25173, 872, 141, 3, 33, "Input", CellTags->"Subgroups"], Cell[25548, 885, 123, 3, 33, "Input", CellTags->"Subgroups"], Cell[25744, 892, 108, 2, 33, "Input", CellTags->"Subgroups"], Cell[26042, 903, 113, 2, 33, "Input", CellTags->"Subgroups"], Cell[26236, 909, 156, 3, 33, "Input", CellTags->"Subgroups"], Cell[26460, 916, 79, 2, 33, "Input", CellTags->"Subgroups"]}, "Quotients"->{ Cell[26728, 927, 119, 3, 33, "Input", CellTags->"Quotients"], Cell[26989, 937, 177, 4, 33, "Input", CellTags->"Quotients"], Cell[27320, 947, 165, 4, 33, "Input", CellTags->"Quotients"], Cell[27704, 961, 97, 2, 33, "Input", CellTags->"Quotients"], Cell[28052, 976, 144, 3, 33, "Input", CellTags->"Quotients"], Cell[28392, 987, 125, 3, 33, "Input", CellTags->"Quotients"], Cell[28693, 999, 89, 2, 33, "Input", CellTags->"Quotients"], Cell[28941, 1008, 234, 5, 65, "Input", CellTags->"Quotients"], Cell[29272, 1020, 174, 4, 33, "Input", CellTags->"Quotients"]}, "OtherProps"->{ Cell[29612, 1033, 106, 2, 33, "Input", CellTags->"OtherProps"]}, "SpecializedRings"->{ Cell[30299, 1061, 101, 2, 33, "Input", CellTags->"SpecializedRings"], Cell[30473, 1067, 117, 2, 39, "Input", CellTags->"SpecializedRings"]}, "TestingOther"->{ Cell[30826, 1080, 304, 7, 74, "Input", CellTags->"TestingOther"]}, "FormingPolynomials"->{ Cell[31185, 1091, 98, 2, 39, "Input", CellTags->"FormingPolynomials"], Cell[31380, 1100, 93, 2, 33, "Input", CellTags->"FormingPolynomials"], Cell[31663, 1110, 125, 2, 33, "Input", CellTags->"FormingPolynomials"], Cell[32071, 1122, 92, 2, 39, "Input", CellTags->"FormingPolynomials"]}, "IndividualMatrices"->{ Cell[33931, 1188, 166, 3, 49, "Input", CellTags->"IndividualMatrices"], Cell[34213, 1198, 235, 5, 49, "Input", CellTags->"IndividualMatrices"], Cell[34530, 1207, 95, 2, 33, "Input", CellTags->"IndividualMatrices"]}, "MatrixGroupoids"->{ Cell[34738, 1216, 87, 2, 33, "Input", CellTags->"MatrixGroupoids"]}, "FiniteFields"->{ Cell[35172, 1235, 98, 2, 33, "Input", CellTags->"FiniteFields"], Cell[35428, 1244, 804, 26, 39, "Input", CellTags->"FiniteFields"]}, "Stabilizers"->{ Cell[39700, 1425, 371, 8, 113, "Input", CellTags->"Stabilizers"], Cell[40150, 1437, 85, 2, 33, "Input", CellTags->"Stabilizers"]}, "BasicZ"->{ Cell[40393, 1448, 122, 3, 39, "Input", CellTags->"BasicZ"]} } *) (*CellTagsIndex CellTagsIndex->{ {"RandomPolynomials", 43110, 1548}, {"Cayley", 43443, 1557}, {"Subgroups", 43599, 1562}, {"Quotients", 44120, 1577}, {"OtherProps", 44787, 1596}, {"SpecializedRings", 44886, 1599}, {"TestingOther", 45067, 1604}, {"FormingPolynomials", 45170, 1607}, {"IndividualMatrices", 45522, 1616}, {"MatrixGroupoids", 45791, 1623}, {"FiniteFields", 45890, 1626}, {"Stabilizers", 46062, 1631}, {"BasicZ", 46227, 1636} } *) (*NotebookFileOutline Notebook[{ Cell[CellGroupData[{ Cell[1731, 51, 148, 3, 104, "Title", Evaluatable->False], Cell[1882, 56, 199, 5, 64, "Text"], Cell[CellGroupData[{ Cell[2106, 65, 626, 18, 92, "Subsubtitle", Evaluatable->False], Cell[CellGroupData[{ Cell[2757, 87, 26, 0, 71, "Section"], Cell[2786, 89, 143, 3, 64, "Text"], Cell[2932, 94, 69, 1, 33, "Input"], Cell[3004, 97, 96, 3, 42, "Text"], Cell[3103, 102, 57, 1, 33, "Input"] }, Closed]], Cell[CellGroupData[{ Cell[3197, 108, 87, 2, 43, "Section", Evaluatable->False], Cell[3287, 112, 441, 11, 108, "Text"], Cell[CellGroupData[{ Cell[3753, 127, 31, 0, 65, "Subsection"], Cell[3787, 129, 244, 5, 86, "Text"], Cell[4034, 136, 128, 3, 32, "Input"], Cell[4165, 141, 91, 3, 42, "Text"], Cell[4259, 146, 69, 2, 52, "Input"], Cell[4331, 150, 103, 3, 42, "Text"], Cell[4437, 155, 48, 1, 34, "Input"], Cell[4488, 158, 97, 3, 42, "Text"], Cell[4588, 163, 76, 1, 34, "Input"], Cell[4667, 166, 75, 1, 34, "Input"], Cell[4745, 169, 100, 3, 42, "Text"], Cell[4848, 174, 74, 1, 34, "Input"], Cell[4925, 177, 130, 3, 42, "Text"], Cell[5058, 182, 68, 1, 34, "Input"], Cell[5129, 185, 185, 4, 64, "Text"], Cell[5317, 191, 71, 1, 34, "Input"], Cell[5391, 194, 138, 3, 64, "Text"], Cell[5532, 199, 45, 1, 34, "Input"], Cell[5580, 202, 134, 3, 42, "Text"], Cell[5717, 207, 42, 1, 34, "Input"], Cell[5762, 210, 122, 3, 42, "Text"], Cell[5887, 215, 74, 1, 34, "Input"] }, Closed]], Cell[CellGroupData[{ Cell[5998, 221, 30, 0, 37, "Subsection"], Cell[6031, 223, 88, 3, 42, "Text"], Cell[6122, 228, 66, 1, 32, "Input"], Cell[6191, 231, 225, 4, 64, "Text"], Cell[6419, 237, 160, 3, 46, "Input"], Cell[6582, 242, 95, 3, 42, "Text"], Cell[6680, 247, 41, 1, 34, "Input"], Cell[6724, 250, 60, 0, 42, "Text"], Cell[6787, 252, 44, 1, 34, "Input"], Cell[6834, 255, 111, 3, 42, "Text"], Cell[6948, 260, 75, 1, 34, "Input"], Cell[7026, 263, 202, 4, 64, "Text"], Cell[7231, 269, 142, 3, 34, "Input", CellTags->"RandomPolynomials"], Cell[7376, 274, 204, 4, 64, "Text"], Cell[7583, 280, 130, 3, 34, "Input", CellTags->"RandomPolynomials"], Cell[7716, 285, 198, 6, 42, "Text"], Cell[7917, 293, 102, 2, 34, "Input", CellTags->"RandomPolynomials"], Cell[8022, 297, 76, 0, 42, "Text"], Cell[8101, 299, 38, 1, 34, "Input"] }, Closed]], Cell[CellGroupData[{ Cell[8176, 305, 31, 0, 37, "Subsection"], Cell[8210, 307, 216, 4, 64, "Text"], Cell[8429, 313, 84, 1, 31, "Input"], Cell[8516, 316, 93, 3, 42, "Text"], Cell[8612, 321, 55, 1, 31, "Input"], Cell[8670, 324, 112, 3, 42, "Text"], Cell[8785, 329, 83, 1, 33, "Input"], Cell[8871, 332, 45, 0, 42, "Text"], Cell[8919, 334, 57, 1, 33, "Input"], Cell[8979, 337, 65, 0, 42, "Text"], Cell[9047, 339, 84, 1, 31, "Input"], Cell[9134, 342, 88, 3, 42, "Text"], Cell[9225, 347, 83, 1, 34, "Input"], Cell[9311, 350, 117, 3, 42, "Text"], Cell[9431, 355, 70, 1, 34, "Input"], Cell[9504, 358, 212, 4, 64, "Text"], Cell[9719, 364, 91, 1, 34, "Input"], Cell[9813, 367, 186, 4, 64, "Text"], Cell[10002, 373, 72, 1, 34, "Input"] }, Closed]] }, Closed]], Cell[CellGroupData[{ Cell[10123, 380, 31, 0, 43, "Section"], Cell[10157, 382, 603, 18, 86, "Text"] }, Closed]], Cell[CellGroupData[{ Cell[10797, 405, 167, 7, 43, "Section"], Cell[CellGroupData[{ Cell[10989, 416, 33, 0, 65, "Subsection"], Cell[11025, 418, 520, 13, 108, "Text"] }, Closed]], Cell[CellGroupData[{ Cell[11582, 436, 32, 0, 37, "Subsection"], Cell[11617, 438, 6346, 193, 1010, "Text"] }, Closed]], Cell[CellGroupData[{ Cell[18000, 636, 31, 0, 37, "Subsection"], Cell[18034, 638, 3093, 77, 836, "Text"] }, Closed]] }, Closed]], Cell[CellGroupData[{ Cell[21176, 721, 34, 0, 43, "Section"], Cell[21213, 723, 481, 15, 64, "Text"] }, Closed]], Cell[CellGroupData[{ Cell[21731, 743, 81, 2, 43, "Section", Evaluatable->False], Cell[21815, 747, 121, 3, 42, "Text"], Cell[21939, 752, 64, 1, 31, "Input"], Cell[22006, 755, 73, 0, 42, "Text"], Cell[22082, 757, 104, 1, 31, "Input"], Cell[22189, 760, 135, 3, 64, "Text"], Cell[22327, 765, 121, 2, 33, "Input"], Cell[22451, 769, 64, 0, 42, "Text"], Cell[22518, 771, 99, 2, 33, "Input"], Cell[22620, 775, 102, 3, 42, "Text"], Cell[22725, 780, 89, 1, 33, "Input"], Cell[22817, 783, 100, 3, 42, "Text"], Cell[22920, 788, 79, 1, 33, "Input"], Cell[23002, 791, 101, 3, 42, "Text"], Cell[23106, 796, 75, 1, 33, "Input"], Cell[23184, 799, 74, 0, 42, "Text"], Cell[23261, 801, 72, 1, 31, "Input"], Cell[23336, 804, 100, 3, 42, "Text"], Cell[23439, 809, 68, 1, 33, "Input"], Cell[23510, 812, 89, 3, 42, "Text"], Cell[23602, 817, 60, 1, 31, "Input"], Cell[23665, 820, 95, 3, 42, "Text"], Cell[23763, 825, 232, 5, 81, "Input"], Cell[23998, 832, 130, 3, 42, "Text"], Cell[24131, 837, 367, 6, 65, "Input", CellTags->"Cayley"], Cell[24501, 845, 75, 0, 42, "Text"], Cell[24579, 847, 174, 4, 49, "Input", CellTags->"Cayley"], Cell[24756, 853, 72, 0, 42, "Text"], Cell[24831, 855, 40, 1, 33, "Input"], Cell[24874, 858, 92, 3, 42, "Text"], Cell[24969, 863, 100, 2, 33, "Input", CellTags->"Subgroups"], Cell[25072, 867, 98, 3, 42, "Text"], Cell[25173, 872, 141, 3, 33, "Input", CellTags->"Subgroups"], Cell[25317, 877, 228, 6, 64, "Text"], Cell[25548, 885, 123, 3, 33, "Input", CellTags->"Subgroups"], Cell[25674, 890, 67, 0, 42, "Text"], Cell[25744, 892, 108, 2, 33, "Input", CellTags->"Subgroups"], Cell[25855, 896, 184, 5, 42, "Text"], Cell[26042, 903, 113, 2, 33, "Input", CellTags->"Subgroups"], Cell[26158, 907, 75, 0, 42, "Text"], Cell[26236, 909, 156, 3, 33, "Input", CellTags->"Subgroups"], Cell[26395, 914, 62, 0, 42, "Text"], Cell[26460, 916, 79, 2, 33, "Input", CellTags->"Subgroups"], Cell[26542, 920, 183, 5, 42, "Text"], Cell[26728, 927, 119, 3, 33, "Input", CellTags->"Quotients"], Cell[26850, 932, 136, 3, 64, "Text"], Cell[26989, 937, 177, 4, 33, "Input", CellTags->"Quotients"], Cell[27169, 943, 148, 2, 64, "Text"], Cell[27320, 947, 165, 4, 33, "Input", CellTags->"Quotients"], Cell[27488, 953, 213, 6, 42, "Text"], Cell[27704, 961, 97, 2, 33, "Input", CellTags->"Quotients"], Cell[27804, 965, 245, 9, 42, "Text"], Cell[28052, 976, 144, 3, 33, "Input", CellTags->"Quotients"], Cell[28199, 981, 190, 4, 64, "Text"], Cell[28392, 987, 125, 3, 33, "Input", CellTags->"Quotients"], Cell[28520, 992, 170, 5, 42, "Text"], Cell[28693, 999, 89, 2, 33, "Input", CellTags->"Quotients"], Cell[28785, 1003, 153, 3, 64, "Text"], Cell[28941, 1008, 234, 5, 65, "Input", CellTags->"Quotients"], Cell[29178, 1015, 91, 3, 42, "Text"], Cell[29272, 1020, 174, 4, 33, "Input", CellTags->"Quotients"], Cell[29449, 1026, 160, 5, 42, "Text"], Cell[29612, 1033, 106, 2, 33, "Input", CellTags->"OtherProps"], Cell[29721, 1037, 72, 0, 42, "Text"], Cell[29796, 1039, 143, 3, 49, "Input"] }, Closed]], Cell[CellGroupData[{ Cell[29976, 1047, 32, 0, 43, "Section"], Cell[30011, 1049, 76, 0, 42, "Text"], Cell[30090, 1051, 56, 1, 33, "Input"], Cell[30149, 1054, 147, 5, 42, "Text"], Cell[30299, 1061, 101, 2, 33, "Input", CellTags->"SpecializedRings"], Cell[30403, 1065, 67, 0, 42, "Text"], Cell[30473, 1067, 117, 2, 39, "Input", CellTags->"SpecializedRings"], Cell[30593, 1071, 230, 7, 42, "Text"], Cell[30826, 1080, 304, 7, 74, "Input", CellTags->"TestingOther"], Cell[31133, 1089, 49, 0, 42, "Text"], Cell[31185, 1091, 98, 2, 39, "Input", CellTags->"FormingPolynomials"], Cell[31286, 1095, 91, 3, 42, "Text"], Cell[31380, 1100, 93, 2, 33, "Input", CellTags->"FormingPolynomials"], Cell[31476, 1104, 184, 4, 64, "Text"], Cell[31663, 1110, 125, 2, 33, "Input", CellTags->"FormingPolynomials"], Cell[31791, 1114, 277, 6, 64, "Text"], Cell[32071, 1122, 92, 2, 39, "Input", CellTags->"FormingPolynomials"], Cell[32166, 1126, 271, 6, 86, "Text"], Cell[32440, 1134, 210, 4, 49, "Input", CellTags->"RandomPolynomials"], Cell[32653, 1140, 43, 0, 42, "Text"], Cell[32699, 1142, 75, 1, 39, "Input"], Cell[32777, 1145, 60, 0, 42, "Text"], Cell[32840, 1147, 41, 1, 33, "Input"], Cell[32884, 1150, 196, 4, 64, "Text"], Cell[33083, 1156, 50, 1, 33, "Input"], Cell[33136, 1159, 62, 0, 42, "Text"], Cell[33201, 1161, 39, 1, 33, "Input"], Cell[33243, 1164, 112, 3, 42, "Text"], Cell[33358, 1169, 73, 1, 39, "Input"], Cell[33434, 1172, 209, 4, 64, "Text"], Cell[33646, 1178, 56, 1, 33, "Input"], Cell[33705, 1181, 223, 5, 64, "Text"], Cell[33931, 1188, 166, 3, 49, "Input", CellTags->"IndividualMatrices"], Cell[34100, 1193, 110, 3, 42, "Text"], Cell[34213, 1198, 235, 5, 49, "Input", CellTags->"IndividualMatrices"], Cell[34451, 1205, 76, 0, 42, "Text"], Cell[34530, 1207, 95, 2, 33, "Input", CellTags->"IndividualMatrices"], Cell[34628, 1211, 107, 3, 42, "Text"], Cell[34738, 1216, 87, 2, 33, "Input", CellTags->"MatrixGroupoids"], Cell[34828, 1220, 53, 0, 42, "Text"], Cell[34884, 1222, 39, 1, 33, "Input"], Cell[34926, 1225, 49, 0, 42, "Text"], Cell[34978, 1227, 56, 1, 33, "Input"], Cell[35037, 1230, 132, 3, 42, "Text"], Cell[35172, 1235, 98, 2, 33, "Input", CellTags->"FiniteFields"], Cell[35273, 1239, 152, 3, 64, "Text"], Cell[35428, 1244, 804, 26, 39, "Input", CellTags->"FiniteFields"] }, Closed]], Cell[CellGroupData[{ Cell[36269, 1275, 33, 0, 43, "Section"], Cell[36305, 1277, 48, 0, 42, "Text"], Cell[36356, 1279, 57, 1, 33, "Input"], Cell[36416, 1282, 364, 14, 42, "Text"], Cell[36783, 1298, 83, 1, 33, "Input"], Cell[36869, 1301, 115, 3, 42, "Text"], Cell[36987, 1306, 179, 4, 49, "Input"], Cell[37169, 1312, 70, 0, 42, "Text"], Cell[37242, 1314, 63, 2, 49, "Input"], Cell[37308, 1318, 52, 0, 42, "Text"], Cell[37363, 1320, 48, 1, 33, "Input"], Cell[37414, 1323, 90, 3, 42, "Text"], Cell[37507, 1328, 56, 1, 33, "Input"], Cell[37566, 1331, 96, 3, 42, "Text"], Cell[37665, 1336, 68, 1, 33, "Input"], Cell[37736, 1339, 106, 3, 42, "Text"], Cell[37845, 1344, 44, 1, 33, "Input"] }, Closed]], Cell[CellGroupData[{ Cell[37926, 1350, 34, 0, 43, "Section"], Cell[37963, 1352, 45, 0, 42, "Text"], Cell[38011, 1354, 59, 1, 33, "Input"], Cell[38073, 1357, 44, 0, 42, "Text"], Cell[38120, 1359, 68, 1, 33, "Input"], Cell[38191, 1362, 110, 3, 42, "Text"], Cell[38304, 1367, 139, 3, 49, "Input"], Cell[38446, 1372, 63, 0, 42, "Text"], Cell[38512, 1374, 44, 1, 33, "Input"], Cell[38559, 1377, 25, 0, 42, "Text"], Cell[38587, 1379, 46, 1, 33, "Input"], Cell[38636, 1382, 120, 3, 42, "Text"], Cell[38759, 1387, 72, 1, 33, "Input"], Cell[38834, 1390, 41, 0, 42, "Text"], Cell[38878, 1392, 82, 1, 33, "Input"], Cell[38963, 1395, 134, 3, 42, "Text"], Cell[39100, 1400, 83, 1, 33, "Input"], Cell[39186, 1403, 113, 3, 42, "Text"], Cell[39302, 1408, 52, 1, 33, "Input"], Cell[39357, 1411, 127, 3, 42, "Text"], Cell[39487, 1416, 73, 2, 49, "Input"], Cell[39563, 1420, 134, 3, 42, "Text"], Cell[39700, 1425, 371, 8, 113, "Input", CellTags->"Stabilizers"], Cell[40074, 1435, 73, 0, 42, "Text"], Cell[40150, 1437, 85, 2, 33, "Input", CellTags->"Stabilizers"], Cell[40238, 1441, 152, 5, 44, "Text"], Cell[40393, 1448, 122, 3, 39, "Input", CellTags->"BasicZ"] }, Closed]], Cell[CellGroupData[{ Cell[40552, 1456, 92, 2, 43, "Section", Evaluatable->False], Cell[40647, 1460, 121, 5, 42, "Text"], Cell[40771, 1467, 79, 1, 33, "Input"], Cell[40853, 1470, 118, 2, 49, "Input"], Cell[40974, 1474, 49, 0, 42, "Text"], Cell[41026, 1476, 73, 1, 33, "Input"], Cell[41102, 1479, 56, 0, 42, "Text"], Cell[41161, 1481, 60, 1, 33, "Input"], Cell[41224, 1484, 145, 3, 64, "Text"], Cell[41372, 1489, 136, 2, 49, "Input"], Cell[41511, 1493, 89, 3, 42, "Text"], Cell[41603, 1498, 74, 1, 33, "Input"], Cell[41680, 1501, 118, 5, 42, "Text"], Cell[41801, 1508, 56, 1, 33, "Input"], Cell[41860, 1511, 52, 0, 42, "Text"], Cell[41915, 1513, 57, 1, 33, "Input"] }, Closed]] }, Open ]] }, Open ]] } ] *) (*********************************************************************** End of Mathematica Notebook file. ***********************************************************************)