Attachment 'group_theory.txt'

Download

   1 Group_Theory_Primer
   2 system:sage
   3 
   4 <style> 
   5 /* start css.sty */
   6 .cmr-10{font-size:83%;}
   7 .cmr-8{font-size:66%;}
   8 .cmr-6{font-size:50%;}
   9 .cmmi-12{font-style: italic;}
  10 .cmmi-8{font-size:66%;font-style: italic;}
  11 .cmmi-6{font-size:50%;font-style: italic;}
  12 .cmsy-8{font-size:66%;}
  13 .cmsy-6{font-size:50%;}
  14 .cmex-8{font-size:66%;}
  15 .cmex-7x-x-85{font-size:49%;}
  16 .msam-8{font-size:66%;}
  17 .msam-6{font-size:50%;}
  18 .msbm-8{font-size:66%;}
  19 .msbm-6{font-size:50%;}
  20 .cmr-17{font-size:141%;}
  21 .cmsy-10x-x-109{font-size:90%;}
  22 .cmbx-12{ font-weight: bold;}
  23 .cmtt-12{font-family: monospace;}
  24 .cmti-12{ font-style: italic;}
  25 p.noindent { text-indent: 0em }
  26 td p.noindent { text-indent: 0em; margin-top:0em; }
  27 p.nopar { text-indent: 0em; }
  28 p.indent{ text-indent: 1.5em }
  29 @media print {div.crosslinks {visibility:hidden;}}
  30 a img { border-top: 0; border-left: 0; border-right: 0; }
  31 center { margin-top:1em; margin-bottom:1em; }
  32 td center { margin-top:0em; margin-bottom:0em; }
  33 .Canvas { position:relative; }
  34 li p.indent { text-indent: 0em }
  35 li p:first-child{ margin-top:0em; }
  36 li p:last-child, li div:last-child { margin-bottom:0.5em; }
  37 li p~ul:last-child, li p~ol:last-child{ margin-bottom:0.5em; }
  38 .enumerate1 {list-style-type:decimal;}
  39 .enumerate2 {list-style-type:lower-alpha;}
  40 .enumerate3 {list-style-type:lower-roman;}
  41 .enumerate4 {list-style-type:upper-alpha;}
  42 div.newtheorem { margin-bottom: 2em; margin-top: 2em;}
  43 .obeylines-h,.obeylines-v {white-space: nowrap; }
  44 div.obeylines-v p { margin-top:0; margin-bottom:0; }
  45 .overline{ text-decoration:overline; }
  46 .overline img{ border-top: 1px solid black; }
  47 td.displaylines {text-align:center; white-space:nowrap;}
  48 .centerline {text-align:center;}
  49 .rightline {text-align:right;}
  50 div.verbatim {font-family: monospace; white-space: nowrap; text-align:left; clear:both; }
  51 .fbox {padding-left:3.0pt; padding-right:3.0pt; text-indent:0pt; border:solid black 0.4pt; }
  52 div.fbox {display:table}
  53 div.center div.fbox {text-align:center; clear:both; padding-left:3.0pt; padding-right:3.0pt; text-indent:0pt; border:solid black 0.4pt; }
  54 div.minipage{width:100%;}
  55 div.center, div.center div.center {text-align: center; margin-left:1em; margin-right:1em;}
  56 div.center div {text-align: left;}
  57 div.flushright, div.flushright div.flushright {text-align: right;}
  58 div.flushright div {text-align: left;}
  59 div.flushleft {text-align: left;}
  60 .underline{ text-decoration:underline; }
  61 .underline img{ border-bottom: 1px solid black; margin-bottom:1pt; }
  62 .framebox-c, .framebox-l, .framebox-r { padding-left:3.0pt; padding-right:3.0pt; text-indent:0pt; border:solid black 0.4pt; }
  63 .framebox-c {text-align:center;}
  64 .framebox-l {text-align:left;}
  65 .framebox-r {text-align:right;}
  66 span.thank-mark{ vertical-align: super }
  67 span.footnote-mark sup.textsuperscript, span.footnote-mark a sup.textsuperscript{ font-size:80%; }
  68 div.tabular, div.center div.tabular {text-align: center; margin-top:0.5em; margin-bottom:0.5em; }
  69 table.tabular td p{margin-top:0em;}
  70 table.tabular {margin-left: auto; margin-right: auto;}
  71 td p:first-child{ margin-top:0em; }
  72 td p:last-child{ margin-bottom:0em; }
  73 div.td00{ margin-left:0pt; margin-right:0pt; }
  74 div.td01{ margin-left:0pt; margin-right:5pt; }
  75 div.td10{ margin-left:5pt; margin-right:0pt; }
  76 div.td11{ margin-left:5pt; margin-right:5pt; }
  77 table[rules] {border-left:solid black 0.4pt; border-right:solid black 0.4pt; }
  78 td.td00{ padding-left:0pt; padding-right:0pt; }
  79 td.td01{ padding-left:0pt; padding-right:5pt; }
  80 td.td10{ padding-left:5pt; padding-right:0pt; }
  81 td.td11{ padding-left:5pt; padding-right:5pt; }
  82 table[rules] {border-left:solid black 0.4pt; border-right:solid black 0.4pt; }
  83 .hline hr, .cline hr{ height : 1px; margin:0px; }
  84 .tabbing-right {text-align:right;}
  85 span.TEX {letter-spacing: -0.125em; }
  86 span.TEX span.E{ position:relative;top:0.5ex;left:-0.0417em;}
  87 a span.TEX span.E {text-decoration: none; }
  88 span.LATEX span.A{ position:relative; top:-0.5ex; left:-0.4em; font-size:85%;}
  89 span.LATEX span.TEX{ position:relative; left: -0.4em; }
  90 div.float img, div.float .caption {text-align:center;}
  91 div.figure img, div.figure .caption {text-align:center;}
  92 .marginpar {width:20%; float:right; text-align:left; margin-left:auto; margin-top:0.5em; font-size:85%; text-decoration:underline;}
  93 .marginpar p{margin-top:0.4em; margin-bottom:0.4em;}
  94 .equation td{text-align:center; vertical-align:middle; }
  95 td.eq-no{ width:5%; }
  96 table.equation { width:100%; } 
  97 div.math-display, div.par-math-display{text-align:center;}
  98 math .texttt { font-family: monospace; }
  99 math .textit { font-style: italic; }
 100 math .textsl { font-style: oblique; }
 101 math .textsf { font-family: sans-serif; }
 102 math .textbf { font-weight: bold; }
 103 .partToc a, .partToc, .likepartToc a, .likepartToc {line-height: 200%; font-weight:bold; font-size:110%;}
 104 .index-item, .index-subitem, .index-subsubitem {display:block}
 105 .caption td.id{font-weight: bold; white-space: nowrap; }
 106 table.caption {text-align:center;}
 107 h1.partHead{text-align: center}
 108 p.bibitem { text-indent: -2em; margin-left: 2em; margin-top:0.6em; margin-bottom:0.6em; }
 109 p.bibitem-p { text-indent: 0em; margin-left: 2em; margin-top:0.6em; margin-bottom:0.6em; }
 110 .paragraphHead, .likeparagraphHead { margin-top:2em; font-weight: bold;}
 111 .subparagraphHead, .likesubparagraphHead { font-weight: bold;}
 112 .quote {margin-bottom:0.25em; margin-top:0.25em; margin-left:1em; margin-right:1em; text-align:justify;}
 113 .verse{white-space:nowrap; margin-left:2em}
 114 div.maketitle {text-align:center;}
 115 h2.titleHead{text-align:center;}
 116 div.maketitle{ margin-bottom: 2em; }
 117 div.author, div.date {text-align:center;}
 118 div.thanks{text-align:left; margin-left:10%; font-size:85%; font-style:italic; }
 119 div.author{white-space: nowrap;}
 120 .quotation {margin-bottom:0.25em; margin-top:0.25em; margin-left:1em; }
 121 .abstract p {margin-left:5%; margin-right:5%;}
 122 div.abstract {width:100%;}
 123 .equation-star td{text-align:center; }
 124 table.equation-star { width:100%; }
 125 mtd.align-odd{margin-left:2em; text-align:right;}
 126 mtd.align-even{margin-right:2em; text-align:left;}
 127 .boxed{border: 1px solid black; padding-left:2px; padding-right:2px;}
 128 table.multline td {text-align:left; vertical-align:middle; padding-left: 2em; }
 129 table.multline td.eq-no { text-align:center; }
 130 table.multline { width:100%; }
 131 .boxed{border: 1px solid black; padding-left:2px; padding-right:2px;}
 132 .boxed{border: 1px solid black; padding-left:2px; padding-right:2px;}
 133 div.verbatiminput {font-family: monospace; white-space: nowrap; }
 134 .figure img.graphics {margin-left:10%;}
 135 /* jsMath suggested additions for spacing control */
 136 .jsMath_hiddenSpan {text-indent: 0px}
 137 .typeset {text-indent: 0px}
 138 /* end css.sty */
 139 
 140 </style>
 141 <div class="center" 
 142 >
 143 <!--l. 63--><p class="noindent" >
 144 </p><!--l. 64--><p class="noindent" ><span 
 145 class="cmr-17">Group Theory and SAGE: A Primer</span><br />
 146 Robert A. Beezer<br />
 147 University of Puget Sound<br />
 148 <span 
 149 class="cmsy-10x-x-120">©</span>2008   CC-A-SA
 150 License<span class="footnote-mark"><a 
 151 href="sage-group-theory-primer2.html#fn2x0"><sup class="textsuperscript"><!--l. 67--><span class="math" 
 152 >†</span></sup></a></span><a 
 153  id="x1-2f0"></a><br /><br />
 154 <span 
 155 class="cmbx-12">Version 1.0</span><br />
 156 <span 
 157 class="cmbx-12">January 30, 2009</span></p></div>
 158    <h3 class="likesectionHead"><a 
 159  id="x1-1000"></a>Introduction</h3>
 160 <!--l. 77--><p class="noindent" >This <span 
 161 class="cmtt-12">compilation</span> collects SAGE commands that are useful for a student in an introductory
 162 course in group theory. It is not intended to teach SAGE or to teach group theory. (There are
 163 many introductory texts on group theory and more information on SAGE can be found via
 164 <span 
 165 class="cmtt-12">sagemath.org</span>.) Rather, by presenting commands roughly in the order a student would learn the
 166 corresponding mathematics they might be encouraged to experiment and learn more about
 167 mathematics and learn more about SAGE. Not coincidentally, the “E” in SAGE once stood for
 168 “Exploration.”
 169 </p><!--l. 79--><p class="indent" >   This guide is distributed in PDF format, and as a SAGE worksheet. The worksheet version can be
 170 imported into the SAGE notebook environment running in a web browser, and then the displayed chunks
 171 of code may be executed by SAGE if one clicks on the small “evaluate” link below each cell, for a fully
 172 interactive experience.
 173 </p>
 174    <h3 class="likesectionHead"><a 
 175  id="x1-2000"></a>Basic Properties of the Integers</h3>
 176 <!--l. 83--><p class="noindent" >
 177 </p>
 178    <h5 class="likesubsubsectionHead"><a 
 179  id="x1-3000"></a>Integer Division</h5>
 180 <!--l. 84--><p class="noindent" ><span 
 181 class="cmtt-12">a %</span><span 
 182 class="cmtt-12"> b</span> will return the remainder upon division of
 183 <!--l. 84--><span class="math" 
 184 >a</span> by
 185 <!--l. 84--><span class="math" 
 186 >b</span>. In other words, the value
 187 is the unique integer <!--l. 84--><span class="math" 
 188 >r</span>
 189 such that (1) <!--l. 84--><span class="math" 
 190 >0 &#8804; r < b</span>, and
 191 (2) <!--l. 84--><span class="math" 
 192 >a = bq + r</span> for some integer
 193 <!--l. 84--><span class="math" 
 194 >q</span> (the quotient).
 195 Then <!--l. 84--><span class="math" 
 196 >(a &#8722; r)&#8725;b</span> will equal
 197 <!--l. 84--><span class="math" 
 198 >q</span>. For example, </p>
 199 
 200 {{{id=0|
 201 r = 14 % 3
 202 q = (14 - r)/3
 203 r, q
 204 ///
 205 }}}
 206 
 207 <!--l. 92--><p class="indent" >   will return <span 
 208 class="cmtt-12">2</span> for the value of <span 
 209 class="cmtt-12">r</span>, and <span 
 210 class="cmtt-12">4</span> for the value of <span 
 211 class="cmtt-12">q</span>. Note that the “<span 
 212 class="cmtt-12">/</span>” is <span 
 213 class="cmti-12">integer </span>division, where
 214 any remainder is cast away and the result is always an integer. So, for example, <span 
 215 class="cmtt-12">14/3</span> will again equal <span 
 216 class="cmtt-12">4</span>,
 217 not <span 
 218 class="cmtt-12">4.66666</span>.
 219 </p>
 220    <h5 class="likesubsubsectionHead"><a 
 221  id="x1-4000"></a>Greatest Common Divisor</h5>
 222 <!--l. 95--><p class="noindent" >The greatest common divisor of <!--l. 95--><span class="math" 
 223 >a</span>
 224 and <!--l. 95--><span class="math" 
 225 >b</span>
 226 is obtained with the command <span 
 227 class="cmtt-12">gcd(a,b)</span>, where in our first uses,
 228 <!--l. 95--><span class="math" 
 229 >a</span> and
 230 <!--l. 95--><span class="math" 
 231 >b</span> are integers.
 232 Later, <!--l. 95--><span class="math" 
 233 >a</span>
 234 and <!--l. 95--><span class="math" 
 235 >b</span>
 236 can be other objects with a notion of divisibility and “greatness,” such as polynomials. For example, </p>
 237 
 238 {{{id=1|
 239 gcd(2776, 2452)
 240 ///
 241 }}}
 242 
 243 <!--l. 101--><p class="indent" >   will return <span 
 244 class="cmtt-12">4</span>.
 245 </p>
 246    <h5 class="likesubsubsectionHead"><a 
 247  id="x1-5000"></a>Extended Greatest Common Divisor</h5>
 248 <!--l. 105--><p class="noindent" >The command <span 
 249 class="cmtt-12">xgcd(a,b)</span> (“eXtended GCD”) returns a triple where the first element is the greatest common
 250 divisor of <!--l. 105--><span class="math" 
 251 >a</span>
 252 and <!--l. 105--><span class="math" 
 253 >b</span>
 254 (as with the <span 
 255 class="cmtt-12">gcd(a,b)</span> command above), but the next two elements are the values of
 256 <!--l. 105--><span class="math" 
 257 >r</span> and
 258 <!--l. 105--><span class="math" 
 259 >s</span> such
 260 that <!--l. 105--><span class="math" 
 261 >ra + sb =\mathop{ gcd}(a,b)</span>.
 262 For example, <span 
 263 class="cmtt-12">xgcd(633,331)</span> returns <span 
 264 class="cmtt-12">(1, 194, -371)</span>. Portions of the triple can be extracted using <span 
 265 class="cmtt-12">[</span><span 
 266 class="cmtt-12"> ]</span> to
 267 access the entries of the triple, starting with the first as number <span 
 268 class="cmtt-12">0</span>. For example, the following should
 269 return the result <span 
 270 class="cmtt-12">True</span> (even if you change the values of <span 
 271 class="cmtt-12">a</span> and <span 
 272 class="cmtt-12">b</span>). Studying this block of code will go a long
 273 way towards helping you get the most out of SAGE’s output. (Note that “<span 
 274 class="cmtt-12">=</span>” is how a value is
 275 assigned to a variable, while as in the last line, “<span 
 276 class="cmtt-12">==</span>” is how we determine equality of two items.) </p>
 277 
 278 {{{id=2|
 279 a = 633
 280 b = 331
 281 extended = xgcd(a, b)
 282 g = extended[0]
 283 r = extended[1]
 284 s = extended[2]
 285 g == r*a + s*b
 286 ///
 287 }}}
 288 
 289 <!--l. 117--><p class="noindent" >
 290 </p>
 291    <h5 class="likesubsubsectionHead"><a 
 292  id="x1-6000"></a>Divisibility</h5>
 293 <!--l. 118--><p class="noindent" >A remainder of zero indicates divisibility. So <span 
 294 class="cmtt-12">(a %</span><span 
 295 class="cmtt-12"> b) == 0</span> will return <span 
 296 class="cmtt-12">True</span> if
 297 <!--l. 118--><span class="math" 
 298 >b</span> divides
 299 <!--l. 118--><span class="math" 
 300 >a</span>,
 301 and will otherwise return <span 
 302 class="cmtt-12">False</span>. For example, <span 
 303 class="cmtt-12">(9 %</span><span 
 304 class="cmtt-12"> 3) == 0</span> is <span 
 305 class="cmtt-12">True</span>, but <span 
 306 class="cmtt-12">(9 %</span><span 
 307 class="cmtt-12"> 4) == 0</span>
 308 is <span 
 309 class="cmtt-12">False</span>. Try predicting the output of the following before executing it in SAGE. </p>
 310 
 311 {{{id=3|
 312 answer1 = ((20 % 5) == 0)
 313 answer2 = ((17 % 4) == 0)
 314 answer1, answer2
 315 ///
 316 }}}
 317 
 318 <!--l. 127--><p class="noindent" >
 319 </p>
 320    <h5 class="likesubsubsectionHead"><a 
 321  id="x1-7000"></a>Factoring</h5>
 322 <!--l. 128--><p class="noindent" >As promised by the Fundamental Theorem of Arithmetic, <span 
 323 class="cmtt-12">factor(a)</span> will return a unique expression for
 324 <!--l. 128--><span class="math" 
 325 >a</span> as a product
 326 of powers of primes. It will print in a nicely-readable form, but can also be manipulated with Python as a list
 327 of pairs <!--l. 128--><span class="math" 
 328 >({p}_{i},{e}_{i})</span>
 329 containing primes as bases, and their associated exponents. For example, </p>
 330 
 331 {{{id=4|
 332 factor(2600)
 333 ///
 334 }}}
 335 
 336 <!--l. 136--><p class="indent" >   returns <span 
 337 class="cmtt-12">2^3 * 5^2 * 13</span>. We can strip off pieces of the prime decomposition using two levels of <span 
 338 class="cmtt-12">[</span><span 
 339 class="cmtt-12"> ]</span>.
 340 This is another good example to study in order to learn about how to drill down into Python lists. </p>
 341 
 342 {{{id=5|
 343 n = 2600
 344 decomposition = factor(n)
 345 print n, " decomposes as ", decomposition
 346 secondterm = decomposition[1]
 347 print "Base and exponent (pair) for second prime: ", secondterm
 348 base = secondterm[0]
 349 exponent = secondterm[1]
 350 print "Base is ", base
 351 print "Exponent is ", exponent
 352 thirdbase = decomposition[2][0]
 353 thirdexponent = decomposition[2][1]
 354 print "Base of third term is ", thirdbase, " with exponent ", thirdexponent
 355 ///
 356 }}}
 357 
 358 <!--l. 153--><p class="indent" >   With a bit more work, the <span 
 359 class="cmtt-12">factor()</span> command can be used to factor more complicated items, such as
 360 polynomials.
 361 </p>
 362    <h5 class="likesubsubsectionHead"><a 
 363  id="x1-8000"></a>Multiplicative Inverse, Modular Arithmetic</h5>
 364 <!--l. 156--><p class="noindent" ><span 
 365 class="cmtt-12">inverse</span><span 
 366 class="cmtt-12">_mod(a, n)</span> yields the multiplicative inverse of
 367 <!--l. 156--><span class="math" 
 368 >a</span> mod
 369 <!--l. 156--><span class="math" 
 370 >n</span> (or an error if it doesn’t exist). For example, </p>
 371 
 372 {{{id=6|
 373 inverse_mod(352, 917)
 374 ///
 375 }}}
 376 
 377 <!--l. 162--><p class="indent" >   yields <span 
 378 class="cmtt-12">508</span>. (As a check, find the integer <!--l. 163--><span class="math" 
 379 >m</span>
 380 such that <span 
 381 class="cmtt-12">352*508 = m*917+1</span>.)
 382 </p><!--l. 165--><p class="indent" >   Then  try  </p>
 383 
 384 {{{id=7|
 385 inverse_mod(4, 24)
 386 ///
 387 }}}
 388 
 389 <!--l. 171--><p class="indent" >   and explain the result.
 390 </p>
 391    <h5 class="likesubsubsectionHead"><a 
 392  id="x1-9000"></a>Powers with Modular Arithmetic</h5>
 393 <!--l. 175--><p class="noindent" ><span 
 394 class="cmtt-12">power</span><span 
 395 class="cmtt-12">_mod(a, m, n)</span> yields <!--l. 175--><span class="math" 
 396 >{a}^{m}</span>
 397 mod <!--l. 175--><span class="math" 
 398 >n</span>. For example, </p>
 399 
 400 {{{id=8|
 401 power_mod(15, 831, 23)
 402 ///
 403 }}}
 404 
 405 <!--l. 181--><p class="indent" >   returns <span 
 406 class="cmtt-12">10</span>. If <!--l. 181--><span class="math" 
 407 >m = &#8722;1</span>,
 408 then this command will duplicate the function of <span 
 409 class="cmtt-12">inverse</span><span 
 410 class="cmtt-12">_mod()</span>.
 411 </p>
 412    <h5 class="likesubsubsectionHead"><a 
 413  id="x1-10000"></a>Euler <!--l. 184--><span class="math" 
 414 >&#981;</span>-function</h5>
 415 <!--l. 185--><p class="noindent" ><span 
 416 class="cmtt-12">euler</span><span 
 417 class="cmtt-12">_phi(n)</span> will return the number of positive integers less than
 418 <!--l. 185--><span class="math" 
 419 >n</span>, and relatively prime to
 420 <!--l. 185--><span class="math" 
 421 >n</span> (i.e. having greatest
 422 common divisor with <!--l. 185--><span class="math" 
 423 >n</span>
 424 equal to <!--l. 185--><span class="math" 
 425 >1</span>). For example, </p>
 426 
 427 {{{id=9|
 428 euler_phi(345)
 429 ///
 430 }}}
 431 
 432 <!--l. 191--><p class="indent" >   should return <!--l. 191--><span class="math" 
 433 >176</span>.
 434 Experiment by running the following code several times: </p>
 435 
 436 {{{id=10|
 437 m = random_prime(10000)
 438 n = random_prime(10000)
 439 m, n, euler_phi(m*n) == euler_phi(m)*euler_phi(n)
 440 ///
 441 }}}
 442 
 443 <!--l. 199--><p class="indent" >   Feel a conjecture coming on? Can you generalize this result?
 444 </p>
 445    <h5 class="likesubsubsectionHead"><a 
 446  id="x1-11000"></a>Primes</h5>
 447 <!--l. 203--><p class="noindent" >The command <span 
 448 class="cmtt-12">is</span><span 
 449 class="cmtt-12">_prime(a)</span> returns <span 
 450 class="cmtt-12">True</span> or <span 
 451 class="cmtt-12">False</span> depending on if
 452 <!--l. 203--><span class="math" 
 453 >a</span> is prime or not. For example, </p>
 454 
 455 {{{id=11|
 456 is_prime(117371)
 457 ///
 458 }}}
 459 
 460 <!--l. 209--><p class="indent" >   returns  <span 
 461 class="cmtt-12">True</span>,  while  </p>
 462 
 463 {{{id=12|
 464 is_prime(14547073)
 465 ///
 466 }}}
 467 
 468 <!--l. 215--><p class="indent" >   returns <span 
 469 class="cmtt-12">False</span> since <!--l. 215--><span class="math" 
 470 >14547073 = 1597 &#8727; 9109</span>
 471 (as you could determine with the <span 
 472 class="cmtt-12">factor()</span> command).
 473 </p><!--l. 217--><p class="indent" >   The command <span 
 474 class="cmtt-12">random</span><span 
 475 class="cmtt-12">_prime(a,True)</span> will return a random prime between
 476 <!--l. 217--><span class="math" 
 477 >2</span> and
 478 <!--l. 217--><span class="math" 
 479 >a</span>.<br 
 480 class="newline" />Experiment  with  </p>
 481 
 482 {{{id=13|
 483 random_prime(10^21,True)
 484 ///
 485 }}}
 486 
 487 <!--l. 224--><p class="indent" >   (Replacing <span 
 488 class="cmtt-12">True</span> by <span 
 489 class="cmtt-12">False</span> will speed up the search, but there will be a very small probability the result
 490 will not be prime.)
 491 </p><!--l. 226--><p class="indent" >   The command <span 
 492 class="cmtt-12">prime</span><span 
 493 class="cmtt-12">_range(a,b)</span> returns an ordered list of all the primes from
 494 <!--l. 226--><span class="math" 
 495 >a</span> to
 496 <!--l. 226--><span class="math" 
 497 >b &#8722; 1</span>, inclusive. For example, </p>
 498 
 499 {{{id=14|
 500 prime_range(500,550)
 501 ///
 502 }}}
 503 
 504 <!--l. 232--><p class="indent" >   returns <span 
 505 class="cmtt-12">[503, 509, 521, 523, 541, 547]</span>.
 506 </p><!--l. 234--><p class="indent" >   The commands <span 
 507 class="cmtt-12">next</span><span 
 508 class="cmtt-12">_prime(a)</span> and <span 
 509 class="cmtt-12">previous</span><span 
 510 class="cmtt-12">_prime(a)</span> are other ways to get a single prime number
 511 of a desired size. Give ’em a try.
 512 </p>
 513    <h3 class="likesectionHead"><a 
 514  id="x1-12000"></a>Permutation Groups</h3>
 515 <!--l. 239--><p class="noindent" >A good portion of SAGE’s support for group theory is based on routines from GAP (Groups, Algorithms,
 516 and Programming at <span 
 517 class="cmtt-12">http://www.gap-system.org/</span>). Groups can be described in many different ways,
 518 such as sets of matrices or sets of symbols subject to a few defining relations. A very concrete
 519 way to represent groups is via permutations (one-to-one and onto functions of the integers
 520 <!--l. 240--><span class="math" 
 521 >1</span> through
 522 <!--l. 240--><span class="math" 
 523 >n</span>), using
 524 function composition as the operation in the group. SAGE has many routines designed to work with
 525 groups of this type and they are also a good way for those learning group theory to gain experience with
 526 the basic ideas of group theory. For both these reasons, we will concentrate on these types of
 527 groups.
 528 </p>
 529    <h5 class="likesubsubsectionHead"><a 
 530  id="x1-13000"></a>Writing Permutations</h5>
 531 <!--l. 243--><p class="noindent" >SAGE uses “disjoint cycle notation” for permutations, see any introductory text on group theory (such as
 532 Judson, Section 4.1) for more on this. Composition occurs <span 
 533 class="cmti-12">left to right</span>, which is not what you might expect
 534 and is exactly the reverse of what Judson and many others use. (There are good reasons to support either
 535 direction, you just need to be certain you know which one is in play.) There are two ways to write the
 536 permutation <!--l. 243--><span class="math" 
 537 >&#963; = (1\kern 1.95872pt 3)(2\kern 1.95872pt 5\kern 1.95872pt 4)</span>,
 538       </p><ol  class="enumerate1" >
 539       <li 
 540   class="enumerate" id="x1-13002x1">As a text string (include quotes): <span 
 541 class="cmtt-12">"(1,3)(2,5,4)"</span>
 542       </li>
 543       <li 
 544   class="enumerate" id="x1-13004x2">As a Python list of “tuples”: <span 
 545 class="cmtt-12">[(1,3), (2,5,4)]</span></li></ol>
 546 <!--l. 251--><p class="noindent" >
 547 </p>
 548    <h5 class="likesubsubsectionHead"><a 
 549  id="x1-14000"></a>Groups</h5>
 550 <!--l. 251--><p class="noindent" >SAGE knows many popular groups as sets of permutations. More are listed
 551 below, but for starters, the full “symmetric group” of all possible permutations of
 552 <!--l. 251--><span class="math" 
 553 >1</span> through
 554 <!--l. 251--><span class="math" 
 555 >n</span> can be
 556 built with the command <span 
 557 class="cmtt-12">SymmetricGroup(n)</span>.
 558 </p>
 559 <!--l. 254--><p class="noindent" ><span class="paragraphHead"><a 
 560  id="x1-15000"></a><span 
 561 class="cmbx-12">Permutation Elements</span></span>
 562    Elements of a group can be created, and composed, as follows </p>
 563 
 564 {{{id=15|
 565 G = SymmetricGroup(5)
 566 sigma = G("(1,3)(2,5,4)")
 567 rho = G([(1,4), (1,5)])
 568 rho^-1*sigma*rho
 569 ///
 570 }}}
 571 
 572 <!--l. 263--><p class="indent" >   Available functions for elements of a permutation group include finding the order of an element, i.e. for a permutation
 573 <!--l. 263--><span class="math" 
 574 >&#963;</span> the order is the smallest
 575 power of <!--l. 263--><span class="math" 
 576 >k</span> such that
 577 <!--l. 263--><span class="math" 
 578 >{&#963;}^{k}</span> equals the identity
 579 element <!--l. 263--><span class="math" 
 580 >()</span>. For example, </p>
 581 
 582 {{{id=16|
 583 sigma = G("(1,3)(2,5,4)")
 584 sigma.order()
 585 ///
 586 }}}
 587 
 588 <!--l. 270--><p class="indent" >   will return <!--l. 270--><span class="math" 
 589 >6</span>.
 590 </p><!--l. 272--><p class="indent" >   The sign of the permutation <!--l. 272--><span class="math" 
 591 >&#963;</span> is defined
 592 to be <!--l. 272--><span class="math" 
 593 >1</span> for an even permutation and
 594 <!--l. 272--><span class="math" 
 595 > &#8722; 1</span> for an odd permutation. For example, </p>
 596 
 597 {{{id=17|
 598 sigma = G("(1,3)(2,5,4)")
 599 sigma.sign()
 600 ///
 601 }}}
 602 
 603 <!--l. 279--><p class="indent" >   will return <!--l. 279--><span class="math" 
 604 > &#8722; 1</span>
 605 since <!--l. 279--><span class="math" 
 606 >&#963;</span> is
 607 an odd permutation.
 608 </p><!--l. 281--><p class="indent" >   Many more available functions that can be applied to a permutation can be found via
 609 “tab-completion.” With <span 
 610 class="cmtt-12">sigma</span> defined as an element of a permutation group, in a SAGE cell, type <span 
 611 class="cmtt-12">sigma.</span>
 612 (Note the “<span 
 613 class="cmtt-12">.</span>”) and then press the tab key. You’ll get a list of available functions (you may need to scroll
 614 down to see the whole list). Experiment and explore! It’s what SAGE is all about. You really can’t break
 615 anything.
 616 </p>
 617    <h5 class="likesubsubsectionHead"><a 
 618  id="x1-16000"></a>Creating Groups</h5>
 619 <!--l. 284--><p class="noindent" >This is an annotated list of some small well-known permutation groups that can be created simply in
 620 SAGE.<br 
 621 class="newline" />(You can find more in the source code file <br 
 622 class="newline" /><span 
 623 class="cmtt-12">/sage/devel/sage/sage/groups/perm</span><span 
 624 class="cmtt-12">_gps/permgroup</span><span 
 625 class="cmtt-12">_named.py</span>)
 626 </p><!--l. 285--><p class="noindent" ><span 
 627 class="cmtt-12">SymmetricGroup(n)</span>: All <!--l. 287--><span class="math" 
 628 >n!</span>
 629 permutations on <!--l. 287--><span class="math" 
 630 >n</span>
 631 symbols.<br 
 632 class="newline" /><span 
 633 class="cmtt-12">DihedralGroup(n)</span>: Symmetries of an <!--l. 288--><span class="math" 
 634 >n</span>-gon.
 635 Rotations and flips, <!--l. 288--><span class="math" 
 636 >2n</span>
 637 in total.<br 
 638 class="newline" /><span 
 639 class="cmtt-12">CyclicPermutationGroup(n)</span>:  Rotations  of  an
 640 <!--l. 289--><span class="math" 
 641 >n</span>-gon (no
 642 flips), <!--l. 289--><span class="math" 
 643 >n</span>
 644 in total.<br 
 645 class="newline" /><span 
 646 class="cmtt-12">AlternatingGroup(n)</span>: Alternating group on <!--l. 290--><span class="math" 
 647 >n</span>
 648 symbols having <!--l. 290--><span class="math" 
 649 >n!&#8725;2</span>
 650 elements.<br 
 651 class="newline" /><span 
 652 class="cmtt-12">KleinFourGroup()</span>: The non-cyclic group of order 4.
 653 
 654 </p>
 655    <h3 class="likesectionHead"><a 
 656  id="x1-17000"></a>Group Functions</h3>
 657 <!--l. 296--><p class="noindent" >Individual elements of permutation groups are important, but we primarily wish to study groups as objects on
 658 their own. So a wide-variety of computations are available for groups. Define a group, for example </p>
 659 
 660 {{{id=18|
 661 H = DihedralGroup(6)
 662 ///
 663 }}}
 664 
 665 <!--l. 303--><p class="indent" >   and then a variety of functions become available.
 666 </p><!--l. 305--><p class="indent" >   After trying the examples below, experiment with tab-completion. Having defined <span 
 667 class="cmtt-12">H</span>, type <span 
 668 class="cmtt-12">H.</span> (note the
 669 “<span 
 670 class="cmtt-12">.</span>”) and then press the tab key. You’ll get a list of available functions (you may need to scroll
 671 down to see the whole list). As before, <span 
 672 class="cmti-12">experiment and explore </span>— its really hard to break
 673 anything.
 674 </p><!--l. 307--><p class="indent" >   Here’s another couple of ways to experiment and explore. Find a function that looks interesting, say
 675 <span 
 676 class="cmtt-12">is</span><span 
 677 class="cmtt-12">_abelian()</span>. Type <span 
 678 class="cmtt-12">H.is</span><span 
 679 class="cmtt-12">_abelian(</span>  (note there is just an opening parenthesis), followed by the tab key.
 680 This will display a portion of the source code for the <span 
 681 class="cmtt-12">is</span><span 
 682 class="cmtt-12">_abelian()</span> function, describing the inputs and
 683 output, possibly illustrated with example uses.
 684 </p><!--l. 309--><p class="indent" >   If you want to learn more about how SAGE works, or possibly extend its functionality, then you
 685 can start by examining the complete Python source code. For example, try <span 
 686 class="cmtt-12">H.is</span><span 
 687 class="cmtt-12">_abelian??</span>,
 688 which will allow you to determine that the <span 
 689 class="cmtt-12">is</span><span 
 690 class="cmtt-12">_abelian()</span> function is basically riding on GAP’s
 691 <span 
 692 class="cmtt-12">IsAbelian()</span> command and asking GAP do the heavy-lifting for us. (To get the maximum
 693 advantage of using SAGE it helps to know some basic Python programming, but it is not
 694 required.)
 695 </p><!--l. 311--><p class="indent" >   OK, on to some popular command for groups. If you are using the worksheet, be sure you have defined the
 696 group <!--l. 311--><span class="math" 
 697 >H</span> as the
 698 dihedral group <!--l. 311--><span class="math" 
 699 >{D}_{6}</span>,
 700 since we won’t keep repeating its definition below.
 701 </p>
 702    <h5 class="likesubsubsectionHead"><a 
 703  id="x1-18000"></a>Abelian?</h5>
 704 <!--l. 314--><p class="noindent" >The  command  </p>
 705 
 706 {{{id=19|
 707 H.is_abelian()
 708 ///
 709 }}}
 710 
 711 <!--l. 320--><p class="indent" >   will return <span 
 712 class="cmtt-12">False</span> since <!--l. 320--><span class="math" 
 713 >{D}_{6}</span>
 714 is a non-abelian group.
 715 </p>
 716    <h5 class="likesubsubsectionHead"><a 
 717  id="x1-19000"></a>Order</h5>
 718 <!--l. 323--><p class="noindent" >The  command  </p>
 719 
 720 {{{id=20|
 721 H.order()
 722 ///
 723 }}}
 724 
 725 <!--l. 329--><p class="indent" >   will return <span 
 726 class="cmtt-12">12</span> since <!--l. 329--><span class="math" 
 727 >{D}_{6}</span>
 728 is a group of with <!--l. 329--><span class="math" 
 729 >12</span>
 730 elements.
 731 </p>
 732    <h5 class="likesubsubsectionHead"><a 
 733  id="x1-20000"></a>All Elements</h5>
 734 <!--l. 332--><p class="noindent" >The  command  </p>
 735 
 736 {{{id=21|
 737 H.list()
 738 ///
 739 }}}
 740 
 741 <!--l. 338--><p class="indent" >   will return all of the elements of <!--l. 338--><span class="math" 
 742 >H</span>
 743 in a fixed order as a Python list. Indexing (<span 
 744 class="cmtt-12">[</span><span 
 745 class="cmtt-12"> ]</span>) can be used to extract the individual
 746 elements of the list, remembering that counting the elements of the list begins at zero. </p>
 747 
 748 {{{id=22|
 749 elements = H.list()
 750 elements[3]
 751 ///
 752 }}}
 753 
 754 <!--l. 346--><p class="noindent" >
 755 </p>
 756    <h5 class="likesubsubsectionHead"><a 
 757  id="x1-21000"></a>Cayley Table</h5>
 758 <!--l. 346--><p class="noindent" >The  command  </p>
 759 
 760 {{{id=23|
 761 H.cayley_table()
 762 ///
 763 }}}
 764 
 765 <!--l. 352--><p class="indent" >   will construct the Cayley table (or “multiplication table”) of
 766 <!--l. 352--><span class="math" 
 767 >H</span>. The
 768 display uses the elements of the group in the same order as the <span 
 769 class="cmtt-12">list()</span> command, and denoting them as <span 
 770 class="cmtt-12">xN</span>
 771 where <!--l. 352--><span class="math" 
 772 >N</span>
 773 is an integer. For example to determine the element in the table named <span 
 774 class="cmtt-12">x4</span>, </p>
 775 
 776 {{{id=24|
 777 H.list()[4]
 778 ///
 779 }}}
 780 
 781 <!--l. 359--><p class="noindent" >
 782 </p>
 783    <h5 class="likesubsubsectionHead"><a 
 784  id="x1-22000"></a>Center</h5>
 785 <!--l. 359--><p class="noindent" >The command <span 
 786 class="cmtt-12">H.center()</span> will return a subgroup that is the center of the group
 787 <!--l. 359--><span class="math" 
 788 >H</span> (see Exercise 2.46 in Judson). Try </p>
 789 
 790 {{{id=25|
 791 H.center().list()
 792 ///
 793 }}}
 794 
 795 <!--l. 365--><p class="indent" >   to see which elements of <!--l. 365--><span class="math" 
 796 >H</span>
 797 commute with <span 
 798 class="cmti-12">every </span>element of <!--l. 365--><span class="math" 
 799 >H</span>.
 800 </p><!--l. 367--><p class="noindent" >
 801 </p>
 802    <h5 class="likesubsubsectionHead"><a 
 803  id="x1-23000"></a>Cayley Graph</h5>
 804 <!--l. 367--><p class="noindent" >For fun, try <span 
 805 class="cmtt-12">show(H.cayley</span><span 
 806 class="cmtt-12">_graph())</span>.
 807 </p>
 808    <h3 class="likesectionHead"><a 
 809  id="x1-24000"></a>Subgroups</h3>
 810 <!--l. 371--><p class="noindent" >
 811 </p>
 812    <h5 class="likesubsubsectionHead"><a 
 813  id="x1-25000"></a>Cyclic Subgroups</h5>
 814 <!--l. 371--><p class="noindent" >If <span 
 815 class="cmtt-12">G</span> is a group, and <span 
 816 class="cmtt-12">a</span> is an element of the group (try <span 
 817 class="cmtt-12">a=G.random</span><span 
 818 class="cmtt-12">_element()</span>), then </p>
 819 
 820 {{{id=26|
 821 a=G.random_element()
 822 H=G.subgroup([a])
 823 ///
 824 }}}
 825 
 826 <!--l. 378--><p class="indent" >   will create <span 
 827 class="cmtt-12">H</span> as the cyclic subgroup of <span 
 828 class="cmtt-12">G</span> with generator <span 
 829 class="cmtt-12">a</span>.
 830 </p><!--l. 380--><p class="indent" >   For example the code below will (1) create <span 
 831 class="cmtt-12">G</span> as the symmetric group on five symbols,
 832 (2) specify <span 
 833 class="cmtt-12">sigma</span> as an element of <span 
 834 class="cmtt-12">G</span>, (3) use <span 
 835 class="cmtt-12">sigma</span> as the generator of a cyclic subgroup
 836 <span 
 837 class="cmtt-12">H</span>, (4) list all the elements of <span 
 838 class="cmtt-12">H</span>. In more mathematical notation, we might write
 839 <!--l. 380--><span class="math" 
 840 >\langle (1\kern 1.95872pt 2\kern 1.95872pt 3)(4\kern 1.95872pt 5)\rangle  = H &#8838; G = {S}_{5}</span>. </p>
 841 
 842 {{{id=27|
 843 G=SymmetricGroup(5)
 844 sigma=G("(1,2,3)(4,5)")
 845 H=G.subgroup([sigma])
 846 H.list()
 847 ///
 848 }}}
 849 
 850 <!--l. 389--><p class="indent" >   Experiment by trying different permutations for <span 
 851 class="cmtt-12">sigma</span> and observing the effect on <span 
 852 class="cmtt-12">H</span>.
 853 </p>
 854    <h5 class="likesubsubsectionHead"><a 
 855  id="x1-26000"></a>Cyclic Groups</h5>
 856 <!--l. 393--><p class="noindent" >Groups that are cyclic themselves are both important, and rich in structure. The command
 857 <span 
 858 class="cmtt-12">CyclicPermutationGroup(n)</span> will create a permutation group that is cyclic with <span 
 859 class="cmtt-12">n</span> elements.
 860 Consider the following example (note that the indentation of the third line is critical) which
 861 will list the elements of a cyclic group of order 20, preceded by the order of each element. </p>
 862 
 863 {{{id=28|
 864 n=20
 865 CN = CyclicPermutationGroup(n)
 866 for g in CN:
 867   print g.order(), "  ", g
 868 ///
 869 }}}
 870 
 871 <!--l. 402--><p class="indent" >   By varying the size of the group (change the value of <span 
 872 class="cmtt-12">n</span>) you can begin to illustrate some of the
 873 structure of a cyclic group (for example, try a prime).
 874 </p><!--l. 404--><p class="indent" >   We can cut/paste an element of order 5 from the output above (in the
 875 case when the cyclic group has 20 elements) and quickly build a subgroup, </p>
 876 
 877 {{{id=29|
 878 rho = C20("(1,17,13,9,5)(2,18,14,10,6)(3,19,15,11,7)(4,20,16,12,8)")
 879 H = C20.subgroup([rho])
 880 H.list()
 881 ///
 882 }}}
 883 
 884 <!--l. 412--><p class="indent" >   For a cyclic group, the following command will list <span 
 885 class="cmti-12">all </span>of the subgroups. </p>
 886 
 887 {{{id=30|
 888 C20.conjugacy_classes_subgroups()
 889 ///
 890 }}}
 891 
 892 <!--l. 418--><p class="indent" >   Be careful, this command uses some more advanced ideas, and will not usually list <span 
 893 class="cmti-12">all </span>of the
 894 subgroups of a group — here we are relying on special properties of cyclic groups (but see the next
 895 section).
 896 </p>
 897    <h5 class="likesubsubsectionHead"><a 
 898  id="x1-27000"></a>All Subgroups</h5>
 899 <!--l. 420--><p class="noindent" >If <!--l. 420--><span class="math" 
 900 >H</span> is a
 901 subgroup of <!--l. 420--><span class="math" 
 902 >G</span>
 903 and <!--l. 420--><span class="math" 
 904 >g &#8712; G</span>, then
 905 <!--l. 420--><span class="math" 
 906 >gH{g}^{&#8722;1} = \{gh{g}^{&#8722;1}\mathrel{&#8739;}h &#8712; G\}</span> will also be a
 907 subgroup of <!--l. 420--><span class="math" 
 908 >G</span>.
 909 If <span 
 910 class="cmtt-12">G</span> is a group, then the command <span 
 911 class="cmtt-12">G.conjugacy</span><span 
 912 class="cmtt-12">_classes</span><span 
 913 class="cmtt-12">_subgroups()</span> will return a list of subgroups of
 914 <span 
 915 class="cmtt-12">G</span>, but not all of the subgroups. However, every subgroup can be constructed from one on the list by the
 916 <!--l. 420--><span class="math" 
 917 >gH{g}^{&#8722;1}</span> construction
 918 with a suitable <!--l. 420--><span class="math" 
 919 >g</span>.
 920 As an illustration, the code below (1) creates <span 
 921 class="cmtt-12">K</span> as the dihedral group of order 24,
 922 <!--l. 420--><span class="math" 
 923 >{D}_{12}</span>, (2)
 924 stores the list of subgroups output by <span 
 925 class="cmtt-12">K.conjugacy</span><span 
 926 class="cmtt-12">_classes</span><span 
 927 class="cmtt-12">_subgroups()</span> in the variable <span 
 928 class="cmtt-12">sg</span>, (3) prints
 929 the elements of the list, (4) selects the second subgroup in the list, and lists its elements. </p>
 930 
 931 {{{id=31|
 932 K=DihedralGroup(12)
 933 sg = K.conjugacy_classes_subgroups()
 934 print "sg:\n", sg
 935 print "\nAn order two subgroup:\n", sg[1].list()
 936 ///
 937 }}}
 938 
 939 <!--l. 429--><p class="indent" >   It is important to note that this is a nice long list of subgroups, but will rarely create
 940 <span 
 941 class="cmti-12">every </span>such subgroup. For example, the code below (1) creates <span 
 942 class="cmtt-12">rho</span> as an element of the group
 943 <span 
 944 class="cmtt-12">K</span>, (2) creates <span 
 945 class="cmtt-12">L</span> as a cyclic subgroup of <span 
 946 class="cmtt-12">K</span>, (3) prints the two elements of <span 
 947 class="cmtt-12">L</span>, and finally (4)
 948 tests to see if this subgroup is part of the output of the list <span 
 949 class="cmtt-12">sg</span> created just above (it is not). </p>
 950 
 951 {{{id=32|
 952 rho = K("(1,4)(2,3)(5,12)(6,11)(7,10)(8,9)")
 953 L=PermutationGroup([rho])
 954 print L.list()
 955 print L in sg
 956 ///
 957 }}}
 958 
 959 <!--l. 439--><p class="noindent" >
 960 </p>
 961    <h3 class="likesectionHead"><a 
 962  id="x1-28000"></a>Symmetry Groups</h3>
 963 <!--l. 441--><p class="noindent" >You can give SAGE a short list of elements of a permutation group and SAGE will find the smallest
 964 subgroup that contains those elements. We say the list “generates” the subgroup. We list a few interesting
 965 subgroups you can create this way.
 966 </p>
 967    <h5 class="likesubsubsectionHead"><a 
 968  id="x1-29000"></a>Symmetries of an Equilateral Triangle</h5>
 969 <!--l. 445--><p class="noindent" >Label the vertices of an equilateral triangle as 1, 2 and 3. Then <span 
 970 class="cmti-12">any </span>permutation of the vertices will be a
 971 symmetry of the triangle. So either <span 
 972 class="cmtt-12">SymmetricGroup(3)</span> or <span 
 973 class="cmtt-12">DihedralGroup(3)</span> will create the full
 974 symmetry group.
 975 </p>
 976    <h5 class="likesubsubsectionHead"><a 
 977  id="x1-30000"></a>Symmetries of an <!--l. 447--><span class="math" 
 978 >n</span>-gon</h5>
 979 <!--l. 449--><p class="noindent" >A regular, <!--l. 449--><span class="math" 
 980 >n</span>-sided figure in
 981 the plane (an <!--l. 449--><span class="math" 
 982 >n</span>-gon) will have
 983 <!--l. 449--><span class="math" 
 984 >2n</span> symmetries, comprised
 985 of <!--l. 449--><span class="math" 
 986 >n</span> rotations (including
 987 the trivial one) and <!--l. 449--><span class="math" 
 988 >n</span>
 989 “flips” about various axes. The dihedral group <span 
 990 class="cmtt-12">DihedralGroup(n)</span> is frequently defined as exactly the symmetry
 991 group of an <!--l. 449--><span class="math" 
 992 >n</span>-gon.
 993 </p>
 994    <h5 class="likesubsubsectionHead"><a 
 995  id="x1-31000"></a>Symmetries of a Tetrahedron</h5>
 996 <!--l. 453--><p class="noindent" >Label the 4 vertices of a regular tetahedron as 1, 2, 3 and 4. Fix the vertex labeled 4 and
 997 roate the opposite face through 120 degrees. This will create the permutation/symmetry
 998 <!--l. 453--><span class="math" 
 999 >(1\kern 1.95872pt 2\kern 1.95872pt 3)</span>.
1000 Similarly, fixing vertex 1, and rotating the opposite face will create the permutation
1001 <!--l. 453--><span class="math" 
1002 >(2\kern 1.95872pt 3\kern 1.95872pt 4)</span>. These two
1003 permutations are enough to generate the full group of the twelve symmetries of the tetrahedron. Another
1004 symmetry can be visualized by running an axis through the midpoint of an edge of the tetrahedron
1005 through to the midpoint of the opposite edge, and then rotating by 180 degrees about this axis. For
1006 example, the 1–2 edge is opposite the 3–4 edge, and the symmetry is described by the permutation
1007 <!--l. 453--><span class="math" 
1008 >(1\kern 1.95872pt 2)(3\kern 1.95872pt 4)</span>. This permutation,
1009 along with either of the above permutations will also generate the group. So here are two ways to create this group, </p>
1010 
1011 {{{id=33|
1012 tetra_one = PermutationGroup(["(1,2,3)", "(2,3,4)"])
1013 tetra_two = PermutationGroup(["(1,2,3)", "(1,2)(3,4)"])
1014 ///
1015 }}}
1016 
1017 <!--l. 460--><p class="indent" >   This group has a variety of interesting properties, so it is worth experimenting with. You may also
1018 know it as the “alternating group on 4 symbols,” which SAGE will create with the command
1019 <span 
1020 class="cmtt-12">AlternatingGroup(4)</span>.
1021 </p>
1022    <h5 class="likesubsubsectionHead"><a 
1023  id="x1-32000"></a>Symmetries of a Cube</h5>
1024 <!--l. 464--><p class="noindent" >Label vertices of one face of a cube with 1, 2, 3 and 4, and on the opposite face label the
1025 vertices 5, 6, 7 and 8 (5 opposite 1, 6 opposite 2, etc.). Consider three axes that run from
1026 the center of a face to the center of the opposite face, and consider a quarter-turn rotation
1027 about each axis. These three rotations will construct the entire symmetry group. Use </p>
1028 
1029 {{{id=34|
1030 cube = PermutationGroup(["(3,2,6,7)(4,1,5,8)",
1031                              "(1,2,6,5)(4,3,7,8)", "(1,2,3,4)(5,6,7,8)"])
1032 cube.list()
1033 ///
1034 }}}
1035 
1036 <!--l. 473--><p class="indent" >   A cube has four distinct diagonals (joining opposite vertices through the center of
1037 the cube). Each symmetry of the cube will cause the diagonals to arrange differently.
1038 In this way, we can view an element of the symmetry group as a permutation of four
1039 “symbols” — the diagonals. It happens that <span 
1040 class="cmti-12">each </span>of the 24 permutations of the diagonals
1041 is created by exactly one symmetry of the 8 vertices of the cube. So this subgroup of
1042 <!--l. 473--><span class="math" 
1043 >{S}_{8}</span> is “the same
1044 as” <!--l. 473--><span class="math" 
1045 >{S}_{4}</span>. In SAGE, </p>
1046 
1047 {{{id=35|
1048 cube.is_isomorphic(SymmetricGroup(4))
1049 ///
1050 }}}
1051 
1052 <!--l. 479--><p class="indent" >   will test to see if the group of symmetries of the cube are “the same as”
1053 <!--l. 479--><span class="math" 
1054 >{S}_{4}</span> and so
1055 will return <span 
1056 class="cmtt-12">True</span>.
1057 </p><!--l. 481--><p class="indent" >   Here is an another way to create the symmetries of a cube. Number the six <span 
1058 class="cmti-12">faces </span>of
1059 the cube as follows: 1 on top, 2 on the bottom, 3 in front, 4 on the right, 5 in back, 6
1060 on the left. Now the same rotations as before (quarter-turns about axes through the
1061 centers of two opposite faces) can be used as generators of the symmetry group, </p>
1062 
1063 {{{id=36|
1064 cubeface = PermutationGroup(["(1,3,2,5)","(1,4,2,6)","(3,4,5,6)"])
1065 cubeface.list()
1066 ///
1067 }}}
1068 
1069 <!--l. 488--><p class="indent" >   Again, this subgroup of <!--l. 488--><span class="math" 
1070 >{S}_{6}</span> is “same
1071 as” the full symmetric group, <!--l. 488--><span class="math" 
1072 >{S}_{4}</span>, </p>
1073 
1074 {{{id=37|
1075 cubeface.is_isomorphic(SymmetricGroup(4))
1076 ///
1077 }}}
1078 
1079 <!--l. 494--><p class="indent" >   It turns out that in each of the above constructions, it is sufficient to use just two of the three
1080 generators (any two). But one generator is not enough. Give it a try, and use SAGE to convince yourself
1081 that a generator can be sacrificed in each case.
1082 </p>
1083    <h3 class="likesectionHead"><a 
1084  id="x1-33000"></a>Normal Subgroups</h3>
1085 <!--l. 498--><p class="noindent" >
1086 </p>
1087    <h5 class="likesubsubsectionHead"><a 
1088  id="x1-34000"></a>Checking Normality</h5>
1089 <!--l. 499--><p class="noindent" >The code below (1) begins with the alternating group,
1090 <!--l. 499--><span class="math" 
1091 >{A}_{4}</span>, (2)
1092 specifies three elements of the group (the three symmetries of the tetrahedron that are 180 degree rotations
1093 about axes through midpoints of opposite edges), (3) uses these three elements to generate a subgroup,
1094 and finally (4) illustrates the command for testing if the subgroup <span 
1095 class="cmtt-12">H</span> is a normal subgroup of the group <span 
1096 class="cmtt-12">A4</span>. </p>
1097 
1098 {{{id=38|
1099 A4=AlternatingGroup(4)
1100 r1=A4("(1,2)(3,4)")
1101 r2=A4("(1,3)(2,4)")
1102 r3=A4("(1,4)(2,3)")
1103 H=A4.subgroup([r1,r2,r3])
1104 H.is_normal(A4)
1105 ///
1106 }}}
1107 
1108 <!--l. 511--><p class="noindent" >
1109 </p>
1110    <h5 class="likesubsubsectionHead"><a 
1111  id="x1-35000"></a>Quotient Group</h5>
1112 <!--l. 512--><p class="noindent" >Extending the previous example, we can create the quotient (factor) group of
1113 <!--l. 512--><span class="math" 
1114 >{A}_{4}</span> by
1115 <!--l. 512--><span class="math" 
1116 >H</span>. </p>
1117 
1118 {{{id=39|
1119 A4.quotient_group(H)
1120 ///
1121 }}}
1122 
1123 <!--l. 518--><p class="indent" >   will return a permutation group generated by <span 
1124 class="cmtt-12">(1,2,3)</span>. As expected this is a group of order 3. Notice
1125 that we do not get back a group of the actual cosets, but instead we get a group <span 
1126 class="cmti-12">isomorphic </span>to the factor
1127 group.
1128 </p>
1129    <h5 class="likesubsubsectionHead"><a 
1130  id="x1-36000"></a>Simple Groups</h5>
1131 <!--l. 522--><p class="noindent" >It is easy to check to see if a group is void of any normal subgroups. </p>
1132 
1133 {{{id=40|
1134 print AlternatingGroup(5).is_simple()
1135 print AlternatingGroup(4).is_simple()
1136 ///
1137 }}}
1138 
1139 <!--l. 529--><p class="indent" >   will print <span 
1140 class="cmtt-12">True</span> and then <span 
1141 class="cmtt-12">False</span>.
1142 </p>
1143    <h5 class="likesubsubsectionHead"><a 
1144  id="x1-37000"></a>Composition Series</h5>
1145 <!--l. 534--><p class="noindent" >For any group, it is easy to obtain a composition series. There is an element of randomness in the algorithm, so
1146 you may not always get the same results. (But the list of factor groups is unique, according to the
1147 Jordan-Hölder theorem.) Also, the subgroups generated sometimes have more generators than necessary, so you
1148 might want to “study” each subgroup carefully by checking properties like its order. An interesting example is: </p>
1149 
1150 {{{id=41|
1151 DihedralGroup(105).composition_series()
1152 ///
1153 }}}
1154 
1155 <!--l. 542--><p class="indent" >   The output will be a list of 5 subgroups of <!--l. 542--><span class="math" 
1156 >{D}_{105}</span>,
1157 each a normal subgroup of its predecessor.
1158 </p><!--l. 544--><p class="indent" >   Several other series are possible, such as the derived series. Use tab-completion to see the
1159 possibilities.
1160 </p>
1161    <h3 class="likesectionHead"><a 
1162  id="x1-38000"></a>Conjugacy</h3>
1163 <!--l. 549--><p class="noindent" >Given a group <!--l. 549--><span class="math" 
1164 >G</span>, we
1165 can define a relation <!--l. 549--><span class="math" 
1166 > &#8764;</span>
1167 on <!--l. 549--><span class="math" 
1168 >G</span> by:
1169 for <!--l. 549--><span class="math" 
1170 >a,\kern 1.95872pt b &#8712; G</span>,
1171 <!--l. 549--><span class="math" 
1172 >a &#8764; b</span> if and only if there
1173 exists an element <!--l. 549--><span class="math" 
1174 >g &#8712; G</span>
1175 such that <!--l. 549--><span class="math" 
1176 >ga{g}^{&#8722;1} = b</span>.
1177 </p><!--l. 551--><p class="indent" >   Since this is an equivalence relation, there is an associated partition of the elements of
1178 <!--l. 551--><span class="math" 
1179 >G</span> into
1180 equivalence classes. For this very important relation, the classes are known as “conjugacy classes.” A
1181 representative of each of these equivalence classes can be found as follows. Suppose <span 
1182 class="cmtt-12">G</span> is a
1183 permutation group, then <span 
1184 class="cmtt-12">G.conjugacy</span><span 
1185 class="cmtt-12">_classes</span><span 
1186 class="cmtt-12">_representatives()</span> will return a list of elements of
1187 <!--l. 551--><span class="math" 
1188 >G</span>, one
1189 per conjugacy class.
1190 </p><!--l. 553--><p class="indent" >   Given an element <!--l. 553--><span class="math" 
1191 >g &#8712; G</span>,
1192 the “centralizer” of <!--l. 553--><span class="math" 
1193 >g</span>
1194 is the set <!--l. 553--><span class="math" 
1195 >C(g) = \{h &#8712; G\mathrel{&#8739;}hg{h}^{&#8722;1} = g\}</span>, which
1196 is a subgroup of <!--l. 553--><span class="math" 
1197 >G</span>.
1198 A theorem tells us that the size of each conjugagcy class is the order of the group divided
1199 by the order of the centralizer of an element of the class. With the following code we can
1200 determine the size of the conjugacy classes of the full symmetric group on 5 symbols, </p>
1201 
1202 {{{id=42|
1203 G = SymmetricGroup(5)
1204 group_order = G.order()
1205 reps = G.conjugacy_classes_representatives()
1206 class_sizes = []
1207 for g in reps:
1208   class_sizes.append( group_order/G.centralizer(g).order() )
1209 print class_sizes
1210 ///
1211 }}}
1212 
1213 <!--l. 565--><p class="indent" >   This should produce the list <span 
1214 class="cmtt-12">[1, 10, 15, 20, 20, 30, 24]</span> which you can check sums to 120, the
1215 order of the group. You might be able to produce this list by counting elements of the group
1216 <!--l. 565--><span class="math" 
1217 >{S}_{5}</span> with
1218 identical cycle structure (which will require a few simple combinatorial arguments).
1219 
1220 </p>
1221    <h3 class="likesectionHead"><a 
1222  id="x1-39000"></a>Sylow Subgroups</h3>
1223 <!--l. 570--><p class="noindent" >Sylow’s Theorems assert the existence of certain subgroups. For example, if
1224 <!--l. 570--><span class="math" 
1225 >p</span> is a prime, and
1226 <!--l. 570--><span class="math" 
1227 >{p}^{r}</span> divides the order
1228 of a group <!--l. 570--><span class="math" 
1229 >G</span>, then
1230 <!--l. 570--><span class="math" 
1231 >G</span> must have a
1232 subgroup of order <!--l. 570--><span class="math" 
1233 >{p}^{r}</span>.
1234 Such a subgroup could be found among the output of the <span 
1235 class="cmtt-12">conjugacy</span><span 
1236 class="cmtt-12">_classes</span><span 
1237 class="cmtt-12">_subgroups()</span> command by checking
1238 the orders of the subgroups produced. The <span 
1239 class="cmtt-12">map()</span> command is a quick way to do this. The symmetric group on 8
1240 symbols, <!--l. 570--><span class="math" 
1241 >{S}_{8}</span>, has order
1242 <!--l. 570--><span class="math" 
1243 >8! = 40, 320</span> and is divisible by
1244 <!--l. 570--><span class="math" 
1245 >{2}^{7} = 128</span>. Let’s find one example of a
1246 subgroup of permutations on <!--l. 570--><span class="math" 
1247 >8</span>
1248 symbols with order <!--l. 570--><span class="math" 
1249 >128</span>.
1250 The next command takes a few minutes to run, so go get a cup of coffee after you set it in motion. </p>
1251 
1252 {{{id=43|
1253 G = SymmetricGroup(8)
1254 subgroups = G.conjugacy_classes_subgroups()
1255 map( order, subgroups )
1256 ///
1257 }}}
1258 
1259 <!--l. 578--><p class="indent" >   The <span 
1260 class="cmtt-12">map(order, subgroups)</span> command will apply the <span 
1261 class="cmtt-12">order()</span> method to each
1262 of the subgroups in the list <span 
1263 class="cmtt-12">subgroups</span>. The output is thus a large list of the orders
1264 of many subgroups (296 to be precise). if you count carefully, you will see that
1265 259<!--l. 578--><span class="math" 
1266 >{}^{th}</span>
1267 subgroup has order 128. You can retrieve this group for further study by referencing it as <span 
1268 class="cmtt-12">subgroups[258]</span>
1269 (remember that counting starts at zero).
1270 </p><!--l. 580--><p class="indent" >   If <!--l. 580--><span class="math" 
1271 >{p}^{r}</span> is the highest power
1272 of <!--l. 580--><span class="math" 
1273 >p</span> to divide the order of
1274 <!--l. 580--><span class="math" 
1275 >G</span>, then a subgroup of order
1276 <!--l. 580--><span class="math" 
1277 >{p}^{r}</span> is known as a “Sylow
1278 <!--l. 580--><span class="math" 
1279 >p</span>-subgroup.” Sylow’s Theorems
1280 also say any two Sylow <!--l. 580--><span class="math" 
1281 >p</span>-subgroups
1282 are conjugate, so the output of <span 
1283 class="cmtt-12">conjugacy</span><span 
1284 class="cmtt-12">_classes</span><span 
1285 class="cmtt-12">_subgroups()</span> should only contain each Sylow
1286 <!--l. 580--><span class="math" 
1287 >p</span>-subgroup once.
1288 But there is an easier way, <span 
1289 class="cmtt-12">sylow</span><span 
1290 class="cmtt-12">_subgroup(p)</span> will return one. Notice that the argument of the command is just
1291 the prime <!--l. 580--><span class="math" 
1292 >p</span>, not
1293 the full power <!--l. 580--><span class="math" 
1294 >{p}^{r}</span>.
1295 Failure to use a prime will generate an informative error message.
1296 
1297 </p>
1298    <h3 class="likesectionHead"><a 
1299  id="x1-40000"></a>Groups of Small Order as Permutation Groups</h3>
1300 <!--l. 586--><p class="noindent" >We list here constructions, as permutation groups, for all of the groups of order less than
1301 <!--l. 586--><span class="math" 
1302 >16</span>.<br 
1303 class="newline" /><!--tex4ht:inline--></p><div class="tabular"> <table id="TBL-1" class="tabular" 
1304 cellspacing="0" cellpadding="0" rules="groups" 
1305 ><colgroup id="TBL-1-1g"><col 
1306 id="TBL-1-1" /></colgroup><colgroup id="TBL-1-2g"><col 
1307 id="TBL-1-2" /></colgroup><colgroup id="TBL-1-3g"><col 
1308 id="TBL-1-3" /></colgroup><tr  
1309  style="vertical-align:baseline;" id="TBL-1-1-"><td  style="text-align:left; white-space:nowrap;" id="TBL-1-1-1"  
1310 class="td11">Size</td><td  style="text-align:left;" id="TBL-1-1-2"  
1311 class="td11"><!--l. 589--><p class="noindent" >Construction                                              </p></td><td  style="text-align:left;" id="TBL-1-1-3"  
1312 class="td11"><!--l. 589--><p class="noindent" >Notes                                             </p></td></tr><tr 
1313 class="hline"><td><hr /></td><td><hr /></td><td><hr /></td></tr><tr 
1314 class="hline"><td><hr /></td><td><hr /></td><td><hr /></td></tr><tr  
1315  style="vertical-align:baseline;" id="TBL-1-2-"><td  style="text-align:left; white-space:nowrap;" id="TBL-1-2-1"  
1316 class="td11">1 </td><td  style="text-align:left;" id="TBL-1-2-2"  
1317 class="td11"><!--l. 590--><p class="noindent" ><span 
1318 class="cmtt-12">SymmetricGroup(1)</span> </p> </td><td  style="text-align:left;" id="TBL-1-2-3"  
1319 class="td11"><!--l. 590--><p class="noindent" >Trivial</p></td>
1320 </tr><tr 
1321 class="hline"><td><hr /></td><td><hr /></td><td><hr /></td></tr><tr 
1322 class="hline"><td><hr /></td><td><hr /></td><td><hr /></td></tr><tr  
1323  style="vertical-align:baseline;" id="TBL-1-3-"><td  style="text-align:left; white-space:nowrap;" id="TBL-1-3-1"  
1324 class="td11">2     </td><td  style="text-align:left;" id="TBL-1-3-2"  
1325 class="td11"><!--l. 591--><p class="noindent" ><span 
1326 class="cmtt-12">SymmetricGroup(2)</span>                       </p></td><td  style="text-align:left;" id="TBL-1-3-3"  
1327 class="td11"><!--l. 591--><p class="noindent" >Also <span 
1328 class="cmtt-12">CyclicPermutationGroup(2)</span>    </p></td>
1329 </tr><tr 
1330 class="hline"><td><hr /></td><td><hr /></td><td><hr /></td></tr><tr 
1331 class="hline"><td><hr /></td><td><hr /></td><td><hr /></td></tr><tr  
1332  style="vertical-align:baseline;" id="TBL-1-4-"><td  style="text-align:left; white-space:nowrap;" id="TBL-1-4-1"  
1333 class="td11">3     </td><td  style="text-align:left;" id="TBL-1-4-2"  
1334 class="td11"><!--l. 592--><p class="noindent" ><span 
1335 class="cmtt-12">CyclicPermutationGroup(3)</span>               </p></td><td  style="text-align:left;" id="TBL-1-4-3"  
1336 class="td11"><!--l. 592--><p class="noindent" >Prime order                                     </p></td>
1337 </tr><tr 
1338 class="hline"><td><hr /></td><td><hr /></td><td><hr /></td></tr><tr 
1339 class="hline"><td><hr /></td><td><hr /></td><td><hr /></td></tr><tr  
1340  style="vertical-align:baseline;" id="TBL-1-5-"><td  style="text-align:left; white-space:nowrap;" id="TBL-1-5-1"  
1341 class="td11">4     </td><td  style="text-align:left;" id="TBL-1-5-2"  
1342 class="td11"><!--l. 593--><p class="noindent" ><span 
1343 class="cmtt-12">CyclicPermutationGroup(4)</span>               </p></td><td  style="text-align:left;" id="TBL-1-5-3"  
1344 class="td11"><!--l. 593--><p class="noindent" >Cyclic                                             </p></td>
1345 </tr><tr 
1346 class="hline"><td><hr /></td><td><hr /></td><td><hr /></td></tr><tr  
1347  style="vertical-align:baseline;" id="TBL-1-6-"><td  style="text-align:left; white-space:nowrap;" id="TBL-1-6-1"  
1348 class="td11">4     </td><td  style="text-align:left;" id="TBL-1-6-2"  
1349 class="td11"><!--l. 594--><p class="noindent" ><span 
1350 class="cmtt-12">KleinFourGroup()</span>                        </p></td><td  style="text-align:left;" id="TBL-1-6-3"  
1351 class="td11"><!--l. 594--><p class="noindent" >Abelian, non-cyclic                            </p></td>
1352 </tr><tr 
1353 class="hline"><td><hr /></td><td><hr /></td><td><hr /></td></tr><tr 
1354 class="hline"><td><hr /></td><td><hr /></td><td><hr /></td></tr><tr  
1355  style="vertical-align:baseline;" id="TBL-1-7-"><td  style="text-align:left; white-space:nowrap;" id="TBL-1-7-1"  
1356 class="td11">5     </td><td  style="text-align:left;" id="TBL-1-7-2"  
1357 class="td11"><!--l. 595--><p class="noindent" ><span 
1358 class="cmtt-12">CyclicPermutationGroup(5)</span>               </p></td><td  style="text-align:left;" id="TBL-1-7-3"  
1359 class="td11"><!--l. 595--><p class="noindent" >Prime order                                     </p></td>
1360 </tr><tr 
1361 class="hline"><td><hr /></td><td><hr /></td><td><hr /></td></tr><tr 
1362 class="hline"><td><hr /></td><td><hr /></td><td><hr /></td></tr><tr  
1363  style="vertical-align:baseline;" id="TBL-1-8-"><td  style="text-align:left; white-space:nowrap;" id="TBL-1-8-1"  
1364 class="td11">6     </td><td  style="text-align:left;" id="TBL-1-8-2"  
1365 class="td11"><!--l. 596--><p class="noindent" ><span 
1366 class="cmtt-12">CyclicPermutationGroup(6)</span>               </p></td><td  style="text-align:left;" id="TBL-1-8-3"  
1367 class="td11"><!--l. 596--><p class="noindent" >Cyclic                                             </p></td>
1368 </tr><tr 
1369 class="hline"><td><hr /></td><td><hr /></td><td><hr /></td></tr><tr  
1370  style="vertical-align:baseline;" id="TBL-1-9-"><td  style="text-align:left; white-space:nowrap;" id="TBL-1-9-1"  
1371 class="td11">6     </td><td  style="text-align:left;" id="TBL-1-9-2"  
1372 class="td11"><!--l. 597--><p class="noindent" ><span 
1373 class="cmtt-12">SymmetricGroup(3)</span>                       </p></td><td  style="text-align:left;" id="TBL-1-9-3"  
1374 class="td11"><!--l. 597--><p class="noindent" >Non-abelian, also <span 
1375 class="cmtt-12">DihedralGroup(3)</span>  </p></td>
1376 </tr><tr 
1377 class="hline"><td><hr /></td><td><hr /></td><td><hr /></td></tr><tr 
1378 class="hline"><td><hr /></td><td><hr /></td><td><hr /></td></tr><tr  
1379  style="vertical-align:baseline;" id="TBL-1-10-"><td  style="text-align:left; white-space:nowrap;" id="TBL-1-10-1"  
1380 class="td11">7     </td><td  style="text-align:left;" id="TBL-1-10-2"  
1381 class="td11"><!--l. 598--><p class="noindent" ><span 
1382 class="cmtt-12">CyclicPermutationGroup(7)</span>               </p></td><td  style="text-align:left;" id="TBL-1-10-3"  
1383 class="td11"><!--l. 598--><p class="noindent" >Prime order                                     </p></td>
1384 </tr><tr 
1385 class="hline"><td><hr /></td><td><hr /></td><td><hr /></td></tr><tr 
1386 class="hline"><td><hr /></td><td><hr /></td><td><hr /></td></tr><tr  
1387  style="vertical-align:baseline;" id="TBL-1-11-"><td  style="text-align:left; white-space:nowrap;" id="TBL-1-11-1"  
1388 class="td11">8     </td><td  style="text-align:left;" id="TBL-1-11-2"  
1389 class="td11"><!--l. 599--><p class="noindent" ><span 
1390 class="cmtt-12">CyclicPermutationGroup(8)</span>               </p></td><td  style="text-align:left;" id="TBL-1-11-3"  
1391 class="td11"><!--l. 599--><p class="noindent" >Cyclic                                             </p></td>
1392 </tr><tr 
1393 class="hline"><td><hr /></td><td><hr /></td><td><hr /></td></tr><tr  
1394  style="vertical-align:baseline;" id="TBL-1-12-"><td  style="text-align:left; white-space:nowrap;" id="TBL-1-12-1"  
1395 class="td11">8     </td><td  style="text-align:left;" id="TBL-1-12-2"  
1396 class="td11"><!--l. 600--><p class="noindent" ><span 
1397 class="cmtt-12">D1=CyclicPermutationGroup(4)</span><br 
1398 class="newline" /><span 
1399 class="cmtt-12">D2=CyclicPermutationGroup(2)</span><br 
1400 class="newline" /><span 
1401 class="cmtt-12">G=direct</span><span 
1402 class="cmtt-12">_product</span><span 
1403 class="cmtt-12">_permgroups([D1,D2])</span>    </p></td><td  style="text-align:left;" id="TBL-1-12-3"  
1404 class="td11"><!--l. 602--><p class="noindent" >Abelian, non-cyclic                            </p></td>
1405 </tr><tr 
1406 class="hline"><td><hr /></td><td><hr /></td><td><hr /></td></tr><tr  
1407  style="vertical-align:baseline;" id="TBL-1-13-"><td  style="text-align:left; white-space:nowrap;" id="TBL-1-13-1"  
1408 class="td11">8     </td><td  style="text-align:left;" id="TBL-1-13-2"  
1409 class="td11"><!--l. 603--><p class="noindent" ><span 
1410 class="cmtt-12">D1=CyclicPermutationGroup(2)</span><br 
1411 class="newline" /><span 
1412 class="cmtt-12">D2=CyclicPermutationGroup(2)</span><br 
1413 class="newline" /><span 
1414 class="cmtt-12">D3=CyclicPermutationGroup(2)</span><br 
1415 class="newline" /><span 
1416 class="cmtt-12">G=direct</span><span 
1417 class="cmtt-12">_product</span><span 
1418 class="cmtt-12">_permgroups([D1,D2,D3])</span> </p></td><td  style="text-align:left;" id="TBL-1-13-3"  
1419 class="td11"><!--l. 606--><p class="noindent" >Abelian, non-cyclic                            </p></td>
1420 </tr><tr 
1421 class="hline"><td><hr /></td><td><hr /></td><td><hr /></td></tr><tr  
1422  style="vertical-align:baseline;" id="TBL-1-14-"><td  style="text-align:left; white-space:nowrap;" id="TBL-1-14-1"  
1423 class="td11">8     </td><td  style="text-align:left;" id="TBL-1-14-2"  
1424 class="td11"><!--l. 607--><p class="noindent" ><span 
1425 class="cmtt-12">DihedralGroup(4)</span>                        </p></td><td  style="text-align:left;" id="TBL-1-14-3"  
1426 class="td11"><!--l. 607--><p class="noindent" >Non-abelian                                     </p></td>
1427 </tr><tr 
1428 class="hline"><td><hr /></td><td><hr /></td><td><hr /></td></tr><tr  
1429  style="vertical-align:baseline;" id="TBL-1-15-"><td  style="text-align:left; white-space:nowrap;" id="TBL-1-15-1"  
1430 class="td11">8     </td><td  style="text-align:left;" id="TBL-1-15-2"  
1431 class="td11"><!--l. 608--><p class="noindent" ><span 
1432 class="cmtt-12">PermutationGroup(["(1,2,5,6)(3,4,7,8)",</span><br 
1433 class="newline" /><span 
1434 class="cmtt-12">   "(1,3,5,7)(2,8,6,4)"  ])</span>             </p></td><td  style="text-align:left;" id="TBL-1-15-3"  
1435 class="td11"><!--l. 609--><p class="noindent" >Quaternions<br 
1436 class="newline" />The        two        generators        are
1437 <!--l. 609--><span class="math" 
1438 >I</span>
1439 and
1440 <!--l. 609--><span class="math" 
1441 >J</span></p></td>
1442 </tr><tr 
1443 class="hline"><td><hr /></td><td><hr /></td><td><hr /></td></tr><tr 
1444 class="hline"><td><hr /></td><td><hr /></td><td><hr /></td></tr><tr  
1445  style="vertical-align:baseline;" id="TBL-1-16-"><td  style="text-align:left; white-space:nowrap;" id="TBL-1-16-1"  
1446 class="td11">9     </td><td  style="text-align:left;" id="TBL-1-16-2"  
1447 class="td11"><!--l. 610--><p class="noindent" ><span 
1448 class="cmtt-12">CyclicPermutationGroup(9)</span>               </p></td><td  style="text-align:left;" id="TBL-1-16-3"  
1449 class="td11"><!--l. 610--><p class="noindent" >Cyclic                                             </p></td>
1450 </tr><tr 
1451 class="hline"><td><hr /></td><td><hr /></td><td><hr /></td></tr><tr  
1452  style="vertical-align:baseline;" id="TBL-1-17-"><td  style="text-align:left; white-space:nowrap;" id="TBL-1-17-1"  
1453 class="td11">9     </td><td  style="text-align:left;" id="TBL-1-17-2"  
1454 class="td11"><!--l. 611--><p class="noindent" ><span 
1455 class="cmtt-12">D1=CyclicPermutationGroup(3)</span><br 
1456 class="newline" /><span 
1457 class="cmtt-12">D2=CyclicPermutationGroup(3)</span><br 
1458 class="newline" /><span 
1459 class="cmtt-12">G=direct</span><span 
1460 class="cmtt-12">_product</span><span 
1461 class="cmtt-12">_permgroups([D1,D2])</span>    </p></td><td  style="text-align:left;" id="TBL-1-17-3"  
1462 class="td11"><!--l. 613--><p class="noindent" >Abelian, non-cyclic                            </p></td>
1463 </tr><tr 
1464 class="hline"><td><hr /></td><td><hr /></td><td><hr /></td></tr><tr 
1465 class="hline"><td><hr /></td><td><hr /></td><td><hr /></td></tr><tr  
1466  style="vertical-align:baseline;" id="TBL-1-18-"><td  style="text-align:left; white-space:nowrap;" id="TBL-1-18-1"  
1467 class="td11">10   </td><td  style="text-align:left;" id="TBL-1-18-2"  
1468 class="td11"><!--l. 614--><p class="noindent" ><span 
1469 class="cmtt-12">CyclicPermutationGroup(10)</span>              </p></td><td  style="text-align:left;" id="TBL-1-18-3"  
1470 class="td11"><!--l. 614--><p class="noindent" >Cyclic                                             </p></td>
1471 </tr><tr 
1472 class="hline"><td><hr /></td><td><hr /></td><td><hr /></td></tr><tr  
1473  style="vertical-align:baseline;" id="TBL-1-19-"><td  style="text-align:left; white-space:nowrap;" id="TBL-1-19-1"  
1474 class="td11">10   </td><td  style="text-align:left;" id="TBL-1-19-2"  
1475 class="td11"><!--l. 615--><p class="noindent" ><span 
1476 class="cmtt-12">DihedralGroup(5)</span>                        </p></td><td  style="text-align:left;" id="TBL-1-19-3"  
1477 class="td11"><!--l. 615--><p class="noindent" >Non-abelian                                     </p></td>
1478 </tr><tr 
1479 class="hline"><td><hr /></td><td><hr /></td><td><hr /></td></tr><tr 
1480 class="hline"><td><hr /></td><td><hr /></td><td><hr /></td></tr><tr  
1481  style="vertical-align:baseline;" id="TBL-1-20-"><td  style="text-align:left; white-space:nowrap;" id="TBL-1-20-1"  
1482 class="td11">11   </td><td  style="text-align:left;" id="TBL-1-20-2"  
1483 class="td11"><!--l. 616--><p class="noindent" ><span 
1484 class="cmtt-12">CyclicPermutationGroup(11)</span>              </p></td><td  style="text-align:left;" id="TBL-1-20-3"  
1485 class="td11"><!--l. 616--><p class="noindent" >Prime order                                     </p></td>
1486 </tr><tr 
1487 class="hline"><td><hr /></td><td><hr /></td><td><hr /></td></tr><tr 
1488 class="hline"><td><hr /></td><td><hr /></td><td><hr /></td></tr><tr  
1489  style="vertical-align:baseline;" id="TBL-1-21-"><td  style="text-align:left; white-space:nowrap;" id="TBL-1-21-1"  
1490 class="td11">12   </td><td  style="text-align:left;" id="TBL-1-21-2"  
1491 class="td11"><!--l. 617--><p class="noindent" ><span 
1492 class="cmtt-12">CyclicPermutationGroup(12)</span>              </p></td><td  style="text-align:left;" id="TBL-1-21-3"  
1493 class="td11"><!--l. 617--><p class="noindent" >Cyclic                                             </p></td>
1494 </tr><tr 
1495 class="hline"><td><hr /></td><td><hr /></td><td><hr /></td></tr><tr  
1496  style="vertical-align:baseline;" id="TBL-1-22-"><td  style="text-align:left; white-space:nowrap;" id="TBL-1-22-1"  
1497 class="td11">12   </td><td  style="text-align:left;" id="TBL-1-22-2"  
1498 class="td11"><!--l. 618--><p class="noindent" ><span 
1499 class="cmtt-12">D1=CyclicPermutationGroup(6)</span><br 
1500 class="newline" /><span 
1501 class="cmtt-12">D2=CyclicPermutationGroup(2)</span><br 
1502 class="newline" /><span 
1503 class="cmtt-12">G=direct</span><span 
1504 class="cmtt-12">_product</span><span 
1505 class="cmtt-12">_permgroups([D1,D2])</span>    </p></td><td  style="text-align:left;" id="TBL-1-22-3"  
1506 class="td11"><!--l. 620--><p class="noindent" >Abelian, non-cyclic                            </p></td>
1507 </tr><tr 
1508 class="hline"><td><hr /></td><td><hr /></td><td><hr /></td></tr><tr  
1509  style="vertical-align:baseline;" id="TBL-1-23-"><td  style="text-align:left; white-space:nowrap;" id="TBL-1-23-1"  
1510 class="td11">12   </td><td  style="text-align:left;" id="TBL-1-23-2"  
1511 class="td11"><!--l. 621--><p class="noindent" ><span 
1512 class="cmtt-12">DihedralGroup(6)</span>                        </p></td><td  style="text-align:left;" id="TBL-1-23-3"  
1513 class="td11"><!--l. 621--><p class="noindent" >Non-abelian                                     </p></td>
1514 </tr><tr 
1515 class="hline"><td><hr /></td><td><hr /></td><td><hr /></td></tr><tr  
1516  style="vertical-align:baseline;" id="TBL-1-24-"><td  style="text-align:left; white-space:nowrap;" id="TBL-1-24-1"  
1517 class="td11">12   </td><td  style="text-align:left;" id="TBL-1-24-2"  
1518 class="td11"><!--l. 622--><p class="noindent" ><span 
1519 class="cmtt-12">AlternatingGroup(4)</span>                     </p></td><td  style="text-align:left;" id="TBL-1-24-3"  
1520 class="td11"><!--l. 622--><p class="noindent" >Non-abelian, symmetries of tetrahedron</p></td>
1521 </tr><tr 
1522 class="hline"><td><hr /></td><td><hr /></td><td><hr /></td></tr><tr  
1523  style="vertical-align:baseline;" id="TBL-1-25-"><td  style="text-align:left; white-space:nowrap;" id="TBL-1-25-1"  
1524 class="td11">12   </td><td  style="text-align:left;" id="TBL-1-25-2"  
1525 class="td11"><!--l. 623--><p class="noindent" ><span 
1526 class="cmtt-12">PermutationGroup(["(1,2,3)(4,6)(5,7)",</span><br 
1527 class="newline" /><span 
1528 class="cmtt-12">   "(1,2)(4,5,6,7)"])</span>                   </p></td><td  style="text-align:left;" id="TBL-1-25-3"  
1529 class="td11"><!--l. 624--><p class="noindent" >Non-abelian<br 
1530 class="newline" />Semi-direct                            product
1531 <!--l. 624--><span class="math" 
1532 >{Z}_{3} &#8906; {Z}_{4}</span></p></td>
1533 </tr><tr 
1534 class="hline"><td><hr /></td><td><hr /></td><td><hr /></td></tr><tr 
1535 class="hline"><td><hr /></td><td><hr /></td><td><hr /></td></tr><tr  
1536  style="vertical-align:baseline;" id="TBL-1-26-"><td  style="text-align:left; white-space:nowrap;" id="TBL-1-26-1"  
1537 class="td11">13   </td><td  style="text-align:left;" id="TBL-1-26-2"  
1538 class="td11"><!--l. 625--><p class="noindent" ><span 
1539 class="cmtt-12">CyclicPermutationGroup(13)</span>              </p></td><td  style="text-align:left;" id="TBL-1-26-3"  
1540 class="td11"><!--l. 625--><p class="noindent" >Prime order                                     </p></td>
1541 </tr><tr 
1542 class="hline"><td><hr /></td><td><hr /></td><td><hr /></td></tr><tr 
1543 class="hline"><td><hr /></td><td><hr /></td><td><hr /></td></tr><tr  
1544  style="vertical-align:baseline;" id="TBL-1-27-"><td  style="text-align:left; white-space:nowrap;" id="TBL-1-27-1"  
1545 class="td11">14   </td><td  style="text-align:left;" id="TBL-1-27-2"  
1546 class="td11"><!--l. 626--><p class="noindent" ><span 
1547 class="cmtt-12">CyclicPermutationGroup(14)</span>              </p></td><td  style="text-align:left;" id="TBL-1-27-3"  
1548 class="td11"><!--l. 626--><p class="noindent" >Cyclic                                             </p></td>
1549 </tr><tr 
1550 class="hline"><td><hr /></td><td><hr /></td><td><hr /></td></tr><tr  
1551  style="vertical-align:baseline;" id="TBL-1-28-"><td  style="text-align:left; white-space:nowrap;" id="TBL-1-28-1"  
1552 class="td11">14   </td><td  style="text-align:left;" id="TBL-1-28-2"  
1553 class="td11"><!--l. 627--><p class="noindent" ><span 
1554 class="cmtt-12">DihedralGroup(7)</span>                        </p></td><td  style="text-align:left;" id="TBL-1-28-3"  
1555 class="td11"><!--l. 627--><p class="noindent" >Non-abelian                                     </p></td>
1556 </tr><tr 
1557 class="hline"><td><hr /></td><td><hr /></td><td><hr /></td></tr><tr 
1558 class="hline"><td><hr /></td><td><hr /></td><td><hr /></td></tr><tr  
1559  style="vertical-align:baseline;" id="TBL-1-29-"><td  style="text-align:left; white-space:nowrap;" id="TBL-1-29-1"  
1560 class="td11">15   </td><td  style="text-align:left;" id="TBL-1-29-2"  
1561 class="td11"><!--l. 628--><p class="noindent" ><span 
1562 class="cmtt-12">CyclicPermutationGroup(15)</span>              </p></td><td  style="text-align:left;" id="TBL-1-29-3"  
1563 class="td11"><!--l. 628--><p class="noindent" >Cyclic                                             </p></td>
1564 </tr><tr 
1565 class="hline"><td><hr /></td><td><hr /></td><td><hr /></td></tr><tr 
1566 class="hline"><td><hr /></td><td><hr /></td><td><hr /></td></tr><tr  
1567  style="vertical-align:baseline;" id="TBL-1-30-"><td  style="text-align:left; white-space:nowrap;" id="TBL-1-30-1"  
1568 class="td11">    </td></tr></table></div>
1569    <h3 class="likesectionHead"><a 
1570  id="x1-41000"></a>Acknowledgements</h3>
1571 <!--l. 634--><p class="noindent" >The construction of SAGE is the work of many people, and the group theory portion is made possible by
1572 the extensive work of the creators of GAP. However, we will single out three people from the SAGE team
1573 to thank for major contributions toward bringing you the group theory portion of SAGE: David Joyner,
1574 William Stein, and Robert Bradshaw. Thanks!
1575 </p>
1576 
1577 {{{id=89|
1578 
1579 ///
1580 }}}

Attached Files

To refer to attachments on a page, use attachment:filename, as shown below in the list of files. Do NOT use the URL of the [get] link, since this is subject to change and can break easily.
  • [get | view] (2009-05-25 07:12:54, 288.3 KB) [[attachment:Analysis_tutorial_Limits_v1.0.2.sws]]
  • [get | view] (2009-12-10 11:07:29, 0.0 KB) [[attachment:Ball_motion.sws]]
  • [get | view] (2009-05-25 07:41:29, 150.8 KB) [[attachment:Ploting_with_Sage_v1.0.1]]
  • [get | view] (2011-06-16 20:04:58, 0.0 KB) [[attachment:Ploting_with_Sage_v1.0.1.sws]]
  • [get | view] (2009-04-18 18:17:42, 198.7 KB) [[attachment:Plotting_with_Sage]]
  • [get | view] (2009-04-18 18:19:59, 146.7 KB) [[attachment:Plotting_with_Sage.sws]]
  • [get | view] (2009-03-02 21:13:57, 61.7 KB) [[attachment:Sage Primer Design Principles.pdf]]
  • [get | view] (2009-03-09 05:21:16, 603.6 KB) [[attachment:Sage_as_a_Smart_Calculator_0_5.sws]]
  • [get | view] (2009-03-02 20:54:29, 476.9 KB) [[attachment:basics.smart_calculator_0.4.sws]]
  • [get | view] (2009-03-15 13:44:37, 872.8 KB) [[attachment:basics.smart_calculator_0.5.sws]]
  • [get | view] (2009-03-02 20:54:44, 196.9 KB) [[attachment:calculus.differential_calculus_1.0.sws]]
  • [get | view] (2009-03-11 14:05:47, 5.6 KB) [[attachment:dev_for_newbies.html]]
  • [get | view] (2009-03-11 14:09:12, 89.6 KB) [[attachment:development_for_newbies.sws]]
  • [get | view] (2009-03-02 05:24:11, 108.3 KB) [[attachment:group_theory.sws]]
  • [get | view] (2009-03-02 07:46:48, 69.0 KB) [[attachment:group_theory.txt]]
  • [get | view] (2009-03-02 05:20:59, 511.0 KB) [[attachment:number_theory.primes_0.1.sws]]
  • [get | view] (2009-03-02 20:55:05, 647.5 KB) [[attachment:number_theory.primes_0.5.sws]]
  • [get | view] (2009-06-21 20:53:21, 1455.4 KB) [[attachment:number_theory.primes_diophantine_equations.1.0.sws]]
  • [get | view] (2009-03-02 20:55:40, 2.6 KB) [[attachment:primer_design_principles.rtf]]
  • [get | view] (2009-03-01 21:53:18, 5.2 KB) [[attachment:primer_template_example.sws]]
  • [get | view] (2009-03-02 05:04:46, 250.5 KB) [[attachment:quadratic_forms.sws]]
 All files | Selected Files: delete move to page copy to page

You are not allowed to attach a file to this page.