Quelle chap72.html
Sprache: HTML
|
|
| products/sources/formale Sprachen/GAP/doc/ref/chap72.html |
 |
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
<head>
<title>GAP (ref) - Chapter 72: Class Functions</title>
<meta http-equiv="content-type" content="text/html; charset=UTF-8" />
<meta name="generator" content="GAPDoc2HTML" />
<link rel="stylesheet" type="text/css" href="manual.css" />
<script src="manual.js" type="text/javascript"></script>
<script type="text/javascript">overwriteStyle();</script>
</head>
<body class="chap72" onload="jscontent()">
<div class="chlinktop"><span class="chlink1">Goto Chapter: </span><a href="chap0.html">Top</a> <a href="chap1.html">1</a> <a href="chap2.html">2</a> <a href="chap3.html">3</a> <a href="chap4.html">4</a> <a href="chap5.html">5</a> <a href="chap6.html">6</a> <a href="chap7.html">7</a> <a href="chap8.html">8</a> <a href="chap9.html">9</a> <a href="chap10.html">10</a> <a href="chap11.html">11</a> <a href="chap12.html">12</a> <a href="chap13.html">13</a> <a href="chap14.html">14</a> <a href="chap15.html">15</a> <a href="chap16.html">16</a> <a href="chap17.html">17</a> <a href="chap18.html">18</a> <a href="chap19.html">19</a> <a href="chap20.html">20</a> <a href="chap21.html">21</a> <a href="chap22.html">22</a> <a href="chap23.html">23</a> <a href="chap24.html">24</a> <a href="chap25.html">25</a> <a href="chap26.html">26</a> <a href="chap27.html">27</a> <a href="chap28.html">28</a> <a href="chap29.html">29</a> <a href="chap30.html">30</a> <a href="chap31.html">31</a> <a href="chap32.html">32</a> <a href="chap33.html">33</a> <a href="chap34.html">34</a> <a href="chap35.html">35</a> <a href="chap36.html">36</a> <a href="chap37.html">37</a> <a href="chap38.html">38</a> <a href="chap39.html">39</a> <a href="chap40.html">40</a> <a href="chap41.html">41</a> <a href="chap42.html">42</a> <a href="chap43.html">43</a> <a href="chap44.html">44</a> <a href="chap45.html">45</a> <a href="chap46.html">46</a> <a href="chap47.html">47</a> <a href="chap48.html">48</a> <a href="chap49.html">49</a> <a href="chap50.html">50</a> <a href="chap51.html">51</a> <a href="chap52.html">52</a> <a href="chap53.html">53</a> <a href="chap54.html">54</a> <a href="chap55.html">55</a> <a href="chap56.html">56</a> <a href="chap57.html">57</a> <a href="chap58.html">58</a> <a href="chap59.html">59</a> <a href="chap60.html">60</a> <a href="chap61.html">61</a> <a href="chap62.html">62</a> <a href="chap63.html">63</a> <a href="chap64.html">64</a> <a href="chap65.html">65</a> <a href="chap66.html">66</a> <a href="chap67.html">67</a> <a href="chap68.html">68</a> <a href="chap69.html">69</a> <a href="chap70.html">70</a> <a href="chap71.html">71</a> <a href="chap72.html">72</a> <a href="chap73.html">73</a> <a href="chap74.html">74</a> <a href="chap75.html">75</a> <a href="chap76.html">76</a> <a href="chap77.html">77</a> <a href="chap78.html">78</a> <a href="chap79.html">79</a> <a href="chap80.html">80</a> <a href="chap81.html">81</a> <a href="chap82.html">82</a> <a href="chap83.html">83</a> <a href="chap84.html">84</a> <a href="chap85.html">85</a> <a href="chap86.html">86</a> <a href="chap87.html">87</a> <a href="chapBib.html">Bib</a> <a href="chapInd.html">Ind</a> </div>
<div class="chlinkprevnexttop"> <a href="chap0.html">[Top of Book]</a> <a href="chap0.html#contents">[Contents]</a> <a href="chap71.html">[Previous Chapter]</a> <a href="chap73.html">[Next Chapter]</a> </div>
<p id="mathjaxlink" class="pcenter"><a href="chap72_mj.html">[MathJax on]</a></p>
<p><a id="X7C91D0D17850E564" name="X7C91D0D17850E564"></a></p>
<div class="ChapSects"><a href="chap72.html#X7C91D0D17850E564">72 <span class="Heading">Class Functions</span></a>
<div class="ContSect"><span class="tocline"><span class="nocss"> </span><a href="chap72.html#X823319217E4B6852">72.1 <span class="Heading">Why Class Functions?</span></a>
</span>
<div class="ContSSBlock">
<span class="ContSS"><br /><span class="nocss"> </span><a href="chap72.html#X7E75A70F7BF00A0D">72.1-1 IsClassFunction</a></span>
</div></div>
<div class="ContSect"><span class="tocline"><span class="nocss"> </span><a href="chap72.html#X8192EDDB84ADD46E">72.2 <span class="Heading">Basic Operations for Class Functions</span></a>
</span>
<div class="ContSSBlock">
<span class="ContSS"><br /><span class="nocss"> </span><a href="chap72.html#X81B55C067D123B76">72.2-1 UnderlyingCharacterTable</a></span>
<span class="ContSS"><br /><span class="nocss"> </span><a href="chap72.html#X7FE14712843C6486">72.2-2 ValuesOfClassFunction</a></span>
</div></div>
<div class="ContSect"><span class="tocline"><span class="nocss"> </span><a href="chap72.html#X829EFBF57FCB1A94">72.3 <span class="Heading">Comparison of Class Functions</span></a>
</span>
</div>
<div class="ContSect"><span class="tocline"><span class="nocss"> </span><a href="chap72.html#X83B9F0C5871A5F7F">72.4 <span class="Heading">Arithmetic Operations for Class Functions</span></a>
</span>
<div class="ContSSBlock">
<span class="ContSS"><br /><span class="nocss"> </span><a href="chap72.html#X83AAD5527BBAFA03">72.4-1 Characteristic</a></span>
<span class="ContSS"><br /><span class="nocss"> </span><a href="chap72.html#X856AB97E785E0B04">72.4-2 ComplexConjugate</a></span>
<span class="ContSS"><br /><span class="nocss"> </span><a href="chap72.html#X7BCE99B88285EB39">72.4-3 Order</a></span>
</div></div>
<div class="ContSect"><span class="tocline"><span class="nocss"> </span><a href="chap72.html#X828AD0C57EA57C21">72.5 <span class="Heading">Printing Class Functions</span></a>
</span>
<div class="ContSSBlock">
<span class="ContSS"><br /><span class="nocss"> </span><a href="chap72.html#X7BDD2D4A7F7FB3B1">72.5-1 ViewObj</a></span>
<span class="ContSS"><br /><span class="nocss"> </span><a href="chap72.html#X871160B98595D4BA">72.5-2 PrintObj</a></span>
<span class="ContSS"><br /><span class="nocss"> </span><a href="chap72.html#X8430D31B8163C230">72.5-3 Display</a></span>
</div></div>
<div class="ContSect"><span class="tocline"><span class="nocss"> </span><a href="chap72.html#X7BB90A8F86FFA456">72.6 <span class="Heading">Creating Class Functions from Values Lists</span></a>
</span>
<div class="ContSSBlock">
<span class="ContSS"><br /><span class="nocss"> </span><a href="chap72.html#X78F4E23985FCA259">72.6-1 ClassFunction</a></span>
<span class="ContSS"><br /><span class="nocss"> </span><a href="chap72.html#X7805AFF77EFC3306">72.6-2 VirtualCharacter</a></span>
<span class="ContSS"><br /><span class="nocss"> </span><a href="chap72.html#X849DD34C7968206C">72.6-3 Character</a></span>
<span class="ContSS"><br /><span class="nocss"> </span><a href="chap72.html#X7B38035981D71B1B">72.6-4 ClassFunctionSameType</a></span>
</div></div>
<div class="ContSect"><span class="tocline"><span class="nocss"> </span><a href="chap72.html#X8727C2CB7ABEBC84">72.7 <span class="Heading">Creating Class Functions using Groups</span></a>
</span>
<div class="ContSSBlock">
<span class="ContSS"><br /><span class="nocss"> </span><a href="chap72.html#X86129DC37C55E4D6">72.7-1 <span class="Heading">TrivialCharacter</span></a>
</span>
<span class="ContSS"><br /><span class="nocss"> </span><a href="chap72.html#X82C01DDB82D751A9">72.7-2 NaturalCharacter</a></span>
<span class="ContSS"><br /><span class="nocss"> </span><a href="chap72.html#X7938621F81B65E03">72.7-3 <span class="Heading">PermutationCharacter</span></a>
</span>
</div></div>
<div class="ContSect"><span class="tocline"><span class="nocss"> </span><a href="chap72.html#X86DDB47A7C6B45D0">72.8 <span class="Heading">Operations for Class Functions</span></a>
</span>
<div class="ContSSBlock">
<span class="ContSS"><br /><span class="nocss"> </span><a href="chap72.html#X7FE3CD08794051F8">72.8-1 IsCharacter</a></span>
<span class="ContSS"><br /><span class="nocss"> </span><a href="chap72.html#X788DD05C86CB7030">72.8-2 IsVirtualCharacter</a></span>
<span class="ContSS"><br /><span class="nocss"> </span><a href="chap72.html#X79A4B1D3870C8807">72.8-3 IsIrreducibleCharacter</a></span>
<span class="ContSS"><br /><span class="nocss"> </span><a href="chap72.html#X7802BC157C69DD75">72.8-4 DegreeOfCharacter</a></span>
<span class="ContSS"><br /><span class="nocss"> </span><a href="chap72.html#X855FD9F983D275CD">72.8-5 ScalarProduct</a></span>
<span class="ContSS"><br /><span class="nocss"> </span><a href="chap72.html#X858DF4E67EBB99DA">72.8-6 MatScalarProducts</a></span>
<span class="ContSS"><br /><span class="nocss"> </span><a href="chap72.html#X8572B18A7BAED73E">72.8-7 Norm</a></span>
<span class="ContSS"><br /><span class="nocss"> </span><a href="chap72.html#X78550D7087DB1181">72.8-8 ConstituentsOfCharacter</a></span>
<span class="ContSS"><br /><span class="nocss"> </span><a href="chap72.html#X7E0A24498710F12B">72.8-9 KernelOfCharacter</a></span>
<span class="ContSS"><br /><span class="nocss"> </span><a href="chap72.html#X7B4708B47D9C05B3">72.8-10 ClassPositionsOfKernel</a></span>
<span class="ContSS"><br /><span class="nocss"> </span><a href="chap72.html#X7E77D4147A0836D3">72.8-11 CentreOfCharacter</a></span>
<span class="ContSS"><br /><span class="nocss"> </span><a href="chap72.html#X7CE5B4137B399274">72.8-12 ClassPositionsOfCentre</a></span>
<span class="ContSS"><br /><span class="nocss"> </span><a href="chap72.html#X7C3187387C2D9938">72.8-13 InertiaSubgroup</a></span>
<span class="ContSS"><br /><span class="nocss"> </span><a href="chap72.html#X8269BE0079A64D43">72.8-14 CycleStructureClass</a></span>
<span class="ContSS"><br /><span class="nocss"> </span><a href="chap72.html#X86EDB4047C5AD6E7">72.8-15 IsTransitive</a></span>
<span class="ContSS"><br /><span class="nocss"> </span><a href="chap72.html#X801DC07B8029841B">72.8-16 Transitivity</a></span>
<span class="ContSS"><br /><span class="nocss"> </span><a href="chap72.html#X7DD8FDCF7FB7834A">72.8-17 CentralCharacter</a></span>
<span class="ContSS"><br /><span class="nocss"> </span><a href="chap72.html#X7A292A58827B95B8">72.8-18 DeterminantOfCharacter</a></span>
<span class="ContSS"><br /><span class="nocss"> </span><a href="chap72.html#X861B435C7F68AE7D">72.8-19 EigenvaluesChar</a></span>
<span class="ContSS"><br /><span class="nocss"> </span><a href="chap72.html#X7A106BE281EFD953">72.8-20 Tensored</a></span>
<span class="ContSS"><br /><span class="nocss"> </span><a href="chap72.html#X7B83B4108490FD06">72.8-21 TensorProduct</a></span>
</div></div>
<div class="ContSect"><span class="tocline"><span class="nocss"> </span><a href="chap72.html#X854A4E3A85C5F89B">72.9 <span class="Heading">Restricted and Induced Class Functions</span></a>
</span>
<div class="ContSSBlock">
<span class="ContSS"><br /><span class="nocss"> </span><a href="chap72.html#X86BABEA6841A40CF">72.9-1 RestrictedClassFunction</a></span>
<span class="ContSS"><br /><span class="nocss"> </span><a href="chap72.html#X86DB64F08035D219">72.9-2 RestrictedClassFunctions</a></span>
<span class="ContSS"><br /><span class="nocss"> </span><a href="chap72.html#X7FE39D3D78855D3B">72.9-3 <span class="Heading">InducedClassFunction</span></a>
</span>
<span class="ContSS"><br /><span class="nocss"> </span><a href="chap72.html#X8484C0F985AD2D28">72.9-4 InducedClassFunctions</a></span>
<span class="ContSS"><br /><span class="nocss"> </span><a href="chap72.html#X7C72003880743D28">72.9-5 InducedClassFunctionsByFusionMap</a></span>
<span class="ContSS"><br /><span class="nocss"> </span><a href="chap72.html#X7C055F327C99CE71">72.9-6 InducedCyclic</a></span>
</div></div>
<div class="ContSect"><span class="tocline"><span class="nocss"> </span><a href="chap72.html#X7C95F7937B752F48">72.10 <span class="Heading">Reducing Virtual Characters</span></a>
</span>
<div class="ContSSBlock">
<span class="ContSS"><br /><span class="nocss"> </span><a href="chap72.html#X86F360D983343C2A">72.10-1 ReducedClassFunctions</a></span>
<span class="ContSS"><br /><span class="nocss"> </span><a href="chap72.html#X7B7138ED8586F09E">72.10-2 ReducedCharacters</a></span>
<span class="ContSS"><br /><span class="nocss"> </span><a href="chap72.html#X7D3289BB865BCF98">72.10-3 IrreducibleDifferences</a></span>
<span class="ContSS"><br /><span class="nocss"> </span><a href="chap72.html#X85B360C085B360C0">72.10-4 LLL</a></span>
<span class="ContSS"><br /><span class="nocss"> </span><a href="chap72.html#X808D71A57D104ED7">72.10-5 Extract</a></span>
<span class="ContSS"><br /><span class="nocss"> </span><a href="chap72.html#X7F97B34A879D11BA">72.10-6 OrthogonalEmbeddingsSpecialDimension</a></span>
<span class="ContSS"><br /><span class="nocss"> </span><a href="chap72.html#X8799AB967C58C0E9">72.10-7 Decreased</a></span>
<span class="ContSS"><br /><span class="nocss"> </span><a href="chap72.html#X85D510DC873A99B4">72.10-8 DnLattice</a></span>
<span class="ContSS"><br /><span class="nocss"> </span><a href="chap72.html#X78754D007F3572A7">72.10-9 DnLatticeIterative</a></span>
</div></div>
<div class="ContSect"><span class="tocline"><span class="nocss"> </span><a href="chap72.html#X87ED98F385B00D34">72.11 <span class="Heading">Symmetrizations of Class Functions</span></a>
</span>
<div class="ContSSBlock">
<span class="ContSS"><br /><span class="nocss"> </span><a href="chap72.html#X7E220413823330EC">72.11-1 Symmetrizations</a></span>
<span class="ContSS"><br /><span class="nocss"> </span><a href="chap72.html#X85CE68CA87CA383A">72.11-2 SymmetricParts</a></span>
<span class="ContSS"><br /><span class="nocss"> </span><a href="chap72.html#X8329E934829FE965">72.11-3 AntiSymmetricParts</a></span>
<span class="ContSS"><br /><span class="nocss"> </span><a href="chap72.html#X87BA59597CA21B3E">72.11-4 ExteriorPower</a></span>
<span class="ContSS"><br /><span class="nocss"> </span><a href="chap72.html#X855A7ECF80FCF0BA">72.11-5 SymmetricPower</a></span>
<span class="ContSS"><br /><span class="nocss"> </span><a href="chap72.html#X78648E367C65B1F1">72.11-6 OrthogonalComponents</a></span>
<span class="ContSS"><br /><span class="nocss"> </span><a href="chap72.html#X788B9AA17DD9418C">72.11-7 SymplecticComponents</a></span>
</div></div>
<div class="ContSect"><span class="tocline"><span class="nocss"> </span><a href="chap72.html#X87B86B427A88CD25">72.12 <span class="Heading">Molien Series</span></a>
</span>
<div class="ContSSBlock">
<span class="ContSS"><br /><span class="nocss"> </span><a href="chap72.html#X7D7F94D2820B1177">72.12-1 MolienSeries</a></span>
<span class="ContSS"><br /><span class="nocss"> </span><a href="chap72.html#X82AC06A880EAA0AB">72.12-2 MolienSeriesInfo</a></span>
<span class="ContSS"><br /><span class="nocss"> </span><a href="chap72.html#X87083C4E7D11A02E">72.12-3 ValueMolienSeries</a></span>
<span class="ContSS"><br /><span class="nocss"> </span><a href="chap72.html#X86BAA3C487CE86D2">72.12-4 MolienSeriesWithGivenDenominator</a></span>
</div></div>
<div class="ContSect"><span class="tocline"><span class="nocss"> </span><a href="chap72.html#X7D6336857E6BDF46">72.13 <span class="Heading">Possible Permutation Characters</span></a>
</span>
<div class="ContSSBlock">
<span class="ContSS"><br /><span class="nocss"> </span><a href="chap72.html#X8477004C7A31D28C">72.13-1 PermCharInfo</a></span>
<span class="ContSS"><br /><span class="nocss"> </span><a href="chap72.html#X7A8CB0298730D808">72.13-2 PermCharInfoRelative</a></span>
</div></div>
<div class="ContSect"><span class="tocline"><span class="nocss"> </span><a href="chap72.html#X8330FDCE83D3DED3">72.14 <span class="Heading">Computing Possible Permutation Characters</span></a>
</span>
<div class="ContSSBlock">
<span class="ContSS"><br /><span class="nocss"> </span><a href="chap72.html#X7D02541482C196A6">72.14-1 PermChars</a></span>
<span class="ContSS"><br /><span class="nocss"> </span><a href="chap72.html#X8127771D7EAB6EA7">72.14-2 <span class="Heading">TestPerm1, ..., TestPerm5</span></a>
</span>
<span class="ContSS"><br /><span class="nocss"> </span><a href="chap72.html#X879D2A127BE366A5">72.14-3 PermBounds</a></span>
<span class="ContSS"><br /><span class="nocss"> </span><a href="chap72.html#X7F11AFB783352903">72.14-4 PermComb</a></span>
<span class="ContSS"><br /><span class="nocss"> </span><a href="chap72.html#X866942167802E036">72.14-5 Inequalities</a></span>
</div></div>
<div class="ContSect"><span class="tocline"><span class="nocss"> </span><a href="chap72.html#X8204FB9F847340C8">72.15 <span class="Heading">Operations for Brauer Characters</span></a>
</span>
<div class="ContSSBlock">
<span class="ContSS"><br /><span class="nocss"> </span><a href="chap72.html#X79BACBC47B4C413E">72.15-1 FrobeniusCharacterValue</a></span>
<span class="ContSS"><br /><span class="nocss"> </span><a href="chap72.html#X8304B68E84511685">72.15-2 BrauerCharacterValue</a></span>
<span class="ContSS"><br /><span class="nocss"> </span><a href="chap72.html#X8038FA0480B78243">72.15-3 SizeOfFieldOfDefinition</a></span>
<span class="ContSS"><br /><span class="nocss"> </span><a href="chap72.html#X782400277F6316A4">72.15-4 RealizableBrauerCharacters</a></span>
</div></div>
<div class="ContSect"><span class="tocline"><span class="nocss"> </span><a href="chap72.html#X7FEEDC0981A22850">72.16 <span class="Heading">Domains Generated by Class Functions</span></a>
</span>
</div>
</div>
<h3>72 <span class="Heading">Class Functions</span></h3>
<p>This chapter describes operations for <em>class functions of finite groups</em>. For operations concerning <em>character tables</em>, see Chapter <a href="chap71.html#X7B7A9EE881E01C10"><span class="RefLink">71</span></a>.</p>
<p>Several examples in this chapter require the <strong class="pkg">GAP</strong> Character Table Library to be available. If it is not yet loaded then we load it now.</p>
<div class="example"><pre>
<span class="GAPprompt">gap></span> <span class="GAPinput">LoadPackage( "ctbllib" );</span>
true
</pre></div>
<p><a id="X823319217E4B6852" name="X823319217E4B6852"></a></p>
<h4>72.1 <span class="Heading">Why Class Functions?</span></h4>
<p>In principle it is possible to represent group characters or more general class functions by the plain lists of their values, and in fact many operations for class functions work with plain lists of class function values. But this has two disadvantages.</p>
<p>First, it is then necessary to regard a values list explicitly as a class function of a particular character table, by supplying this character table as an argument. In practice this means that with this setup, the user has the task to put the objects into the right context. For example, forming the scalar product or the tensor product of two class functions or forming an induced class function or a conjugate class function then needs three arguments in this case; this is particularly inconvenient in cases where infix operations cannot be used because of the additional argument, as for tensor products and induced class functions.</p>
<p>Second, when one says that <q><span class="SimpleMath">χ</span> is a character of a group <span class="SimpleMath">G</span></q> then this object <span class="SimpleMath">χ</span> carries a lot of information. <span class="SimpleMath">χ</span> has certain properties such as being irreducible or not. Several subgroups of <span class="SimpleMath">G</span> are related to <span class="SimpleMath">χ</span>, such as the kernel and the centre of <span class="SimpleMath">χ</span>. Other attributes of characters are the determinant and the central character. This knowledge cannot be stored in a plain list.</p>
<p>For dealing with a group together with its characters, and maybe also subgroups and their characters, it is desirable that <strong class="pkg">GAP</strong> keeps track of the interpretation of characters. On the other hand, for using characters without accessing their groups, such as characters of tables from the <strong class="pkg">GAP</strong> table library, dealing just with values lists is often sufficient. In particular, if one deals with incomplete character tables then it is often necessary to specify the arguments explicitly, for example one has to choose a fusion map or power map from a set of possibilities.</p>
<p>The main idea behind class function objects is that a class function object is equal to its values list in the sense of <code class="func">\=</code> (<a href="chap31.html#X7EF67D047F03CA6F"><span class="RefLink">31.11-1</span></a>), so class function objects can be used wherever their values lists can be used, but there are operations for class function objects that do not work just with values lists. <strong class="pkg">GAP</strong> library functions prefer to return class function objects rather than returning just values lists, for example <code class="func">Irr</code> (<a href="chap71.html#X873B3CC57E9A5492"><span class="RefLink">71.8-2</span></a>) lists consist of class function objects, and <code class="func">TrivialCharacter</code> (<a href="chap72.html#X86129DC37C55E4D6"><span class="RefLink">72.7-1</span></a>) returns a class function object.</p>
<p>Here is an <em>example</em> that shows both approaches. First we define some groups.</p>
<div class="example"><pre>
<span class="GAPprompt">gap></span> <span class="GAPinput">S4:= SymmetricGroup( 4 );; SetName( S4, "S4" );</span>
<span class="GAPprompt">gap></span> <span class="GAPinput">D8:= SylowSubgroup( S4, 2 );; SetName( D8, "D8" );</span>
</pre></div>
<p>We do some computations using the functions described later in this Chapter, first with class function objects.</p>
<div class="example"><pre>
<span class="GAPprompt">gap></span> <span class="GAPinput">irrS4:= Irr( S4 );;</span>
<span class="GAPprompt">gap></span> <span class="GAPinput">irrD8:= Irr( D8 );;</span>
<span class="GAPprompt">gap></span> <span class="GAPinput">chi:= irrD8[4];</span>
Character( CharacterTable( D8 ), [ 1, -1, 1, -1, 1 ] )
<span class="GAPprompt">gap></span> <span class="GAPinput">chi * chi;</span>
Character( CharacterTable( D8 ), [ 1, 1, 1, 1, 1 ] )
<span class="GAPprompt">gap></span> <span class="GAPinput">ind:= chi ^ S4;</span>
Character( CharacterTable( S4 ), [ 3, -1, -1, 0, 1 ] )
<span class="GAPprompt">gap></span> <span class="GAPinput">List( irrS4, x -> ScalarProduct( x, ind ) );</span>
[ 0, 1, 0, 0, 0 ]
<span class="GAPprompt">gap></span> <span class="GAPinput">det:= Determinant( ind );</span>
Character( CharacterTable( S4 ), [ 1, 1, 1, 1, 1 ] )
<span class="GAPprompt">gap></span> <span class="GAPinput">cent:= CentralCharacter( ind );</span>
ClassFunction( CharacterTable( S4 ), [ 1, -2, -1, 0, 2 ] )
<span class="GAPprompt">gap></span> <span class="GAPinput">rest:= Restricted( cent, D8 );</span>
ClassFunction( CharacterTable( D8 ), [ 1, -2, -1, -1, 2 ] )
</pre></div>
<p>Now we repeat these calculations with plain lists of character values. Here we need the character tables in some places.</p>
<div class="example"><pre>
<span class="GAPprompt">gap></span> <span class="GAPinput">tS4:= CharacterTable( S4 );;</span>
<span class="GAPprompt">gap></span> <span class="GAPinput">tD8:= CharacterTable( D8 );;</span>
<span class="GAPprompt">gap></span> <span class="GAPinput">chi:= ValuesOfClassFunction( irrD8[4] );</span>
[ 1, -1, 1, -1, 1 ]
<span class="GAPprompt">gap></span> <span class="GAPinput">Tensored( [ chi ], [ chi ] )[1];</span>
[ 1, 1, 1, 1, 1 ]
<span class="GAPprompt">gap></span> <span class="GAPinput">ind:= InducedClassFunction( tD8, chi, tS4 );</span>
ClassFunction( CharacterTable( S4 ), [ 3, -1, -1, 0, 1 ] )
<span class="GAPprompt">gap></span> <span class="GAPinput">List( Irr( tS4 ), x -> ScalarProduct( tS4, x, ind ) );</span>
[ 0, 1, 0, 0, 0 ]
<span class="GAPprompt">gap></span> <span class="GAPinput">det:= DeterminantOfCharacter( tS4, ind );</span>
ClassFunction( CharacterTable( S4 ), [ 1, 1, 1, 1, 1 ] )
<span class="GAPprompt">gap></span> <span class="GAPinput">cent:= CentralCharacter( tS4, ind );</span>
ClassFunction( CharacterTable( S4 ), [ 1, -2, -1, 0, 2 ] )
<span class="GAPprompt">gap></span> <span class="GAPinput">rest:= Restricted( tS4, cent, tD8 );</span>
ClassFunction( CharacterTable( D8 ), [ 1, -2, -1, -1, 2 ] )
</pre></div>
<p>If one deals with character tables from the <strong class="pkg">GAP</strong> table library then one has no access to their groups, but often the tables provide enough information for computing induced or restricted class functions, symmetrizations etc., because the relevant class fusions and power maps are often stored on library tables. In these cases it is possible to use the tables instead of the groups as arguments. (If necessary information is not uniquely determined by the tables then an error is signalled.)</p>
<div class="example"><pre>
<span class="GAPprompt">gap></span> <span class="GAPinput">s5 := CharacterTable( "A5.2" );; irrs5 := Irr( s5 );;</span>
<span class="GAPprompt">gap></span> <span class="GAPinput">m11:= CharacterTable( "M11" );; irrm11:= Irr( m11 );;</span>
<span class="GAPprompt">gap></span> <span class="GAPinput">chi:= TrivialCharacter( s5 );</span>
Character( CharacterTable( "A5.2" ), [ 1, 1, 1, 1, 1, 1, 1 ] )
<span class="GAPprompt">gap></span> <span class="GAPinput">chi ^ m11;</span>
Character( CharacterTable( "M11" ), [ 66, 10, 3, 2, 1, 1, 0, 0, 0, 0
] )
<span class="GAPprompt">gap></span> <span class="GAPinput">Determinant( irrs5[4] );</span>
Character( CharacterTable( "A5.2" ), [ 1, 1, 1, 1, -1, -1, -1 ] )
</pre></div>
<p>Functions that compute <em>normal</em> subgroups related to characters have counterparts that return the list of class positions corresponding to these groups.</p>
<div class="example"><pre>
<span class="GAPprompt">gap></span> <span class="GAPinput">ClassPositionsOfKernel( irrs5[2] );</span>
[ 1, 2, 3, 4 ]
<span class="GAPprompt">gap></span> <span class="GAPinput">ClassPositionsOfCentre( irrs5[2] );</span>
[ 1, 2, 3, 4, 5, 6, 7 ]
</pre></div>
<p>Non-normal subgroups cannot be described this way, so for example inertia subgroups (see <code class="func">InertiaSubgroup</code> (<a href="chap72.html#X7C3187387C2D9938"><span class="RefLink">72.8-13</span></a>)) can in general not be computed from character tables without access to their groups.</p>
<p><a id="X7E75A70F7BF00A0D" name="X7E75A70F7BF00A0D"></a></p>
<h5>72.1-1 IsClassFunction</h5>
<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">‣ IsClassFunction</code>( <var class="Arg">obj</var> )</td><td class="tdright">( category )</td></tr></table></div>
<p>A <em>class function</em> (in characteristic <span class="SimpleMath">p</span>) of a finite group <span class="SimpleMath">G</span> is a map from the set of (<span class="SimpleMath">p</span>-regular) elements in <span class="SimpleMath">G</span> to the field of cyclotomics that is constant on conjugacy classes of <span class="SimpleMath">G</span>.</p>
<p>Each class function in <strong class="pkg">GAP</strong> is represented by an <em>immutable list</em>, where at the <span class="SimpleMath">i</span>-th position the value on the <span class="SimpleMath">i</span>-th conjugacy class of the character table of <span class="SimpleMath">G</span> is stored. The ordering of the conjugacy classes is the one used in the underlying character table. Note that if the character table has access to its underlying group then the ordering of conjugacy classes in the group and in the character table may differ (see <a href="chap71.html#X793E0EBF84B07313"><span class="RefLink">71.6</span></a>); class functions always refer to the ordering of classes in the character table.</p>
<p><em>Class function objects</em> in <strong class="pkg">GAP</strong> are not just plain lists, they store the character table of the group <span class="SimpleMath">G</span> as value of the attribute <code class="func">UnderlyingCharacterTable</code> (<a href="chap72.html#X81B55C067D123B76"><span class="RefLink">72.2-1</span></a>). The group <span class="SimpleMath">G</span> itself is accessible only via the character table and thus only if the character table stores its group, as value of the attribute <code class="func">UnderlyingGroup</code> (<a href="chap71.html#X7FF4826A82B667AF"><span class="RefLink">71.6-1</span></a>). The reason for this is that many computations with class functions are possible without using their groups, for example class functions of character tables in the <strong class="pkg">GAP</strong> character table library do in general not have access to their underlying groups.</p>
<p>There are (at least) two reasons why class functions in <strong class="pkg">GAP</strong> are <em>not</em> implemented as mappings. First, we want to distinguish class functions in different characteristics, for example to be able to define the Frobenius character of a given Brauer character; viewed as mappings, the trivial characters in all characteristics coprime to the order of <span class="SimpleMath">G</span> are equal. Second, the product of two class functions shall be again a class function, whereas the product of general mappings is defined as composition.</p>
<p>A further argument is that the typical operations for mappings such as <code class="func">Image</code> (<a href="chap32.html#X87F4D35A826599C6"><span class="RefLink">32.4-6</span></a>) and <code class="func">PreImage</code> (<a href="chap32.html#X836FAEAC78B55BF4"><span class="RefLink">32.5-6</span></a>) play no important role for class functions.</p>
<p><a id="X8192EDDB84ADD46E" name="X8192EDDB84ADD46E"></a></p>
<h4>72.2 <span class="Heading">Basic Operations for Class Functions</span></h4>
<p>Basic operations for class functions are <code class="func">UnderlyingCharacterTable</code> (<a href="chap72.html#X81B55C067D123B76"><span class="RefLink">72.2-1</span></a>), <code class="func">ValuesOfClassFunction</code> (<a href="chap72.html#X7FE14712843C6486"><span class="RefLink">72.2-2</span></a>), and the basic operations for lists (see <a href="chap21.html#X7B202D147A5C2884"><span class="RefLink">21.2</span></a>).</p>
<p><a id="X81B55C067D123B76" name="X81B55C067D123B76"></a></p>
<h5>72.2-1 UnderlyingCharacterTable</h5>
<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">‣ UnderlyingCharacterTable</code>( <var class="Arg">psi</var> )</td><td class="tdright">( attribute )</td></tr></table></div>
<p>For a class function <var class="Arg">psi</var> of a group <span class="SimpleMath">G</span> the character table of <span class="SimpleMath">G</span> is stored as value of <code class="func">UnderlyingCharacterTable</code>. The ordering of entries in the list <var class="Arg">psi</var> (see <code class="func">ValuesOfClassFunction</code> (<a href="chap72.html#X7FE14712843C6486"><span class="RefLink">72.2-2</span></a>)) refers to the ordering of conjugacy classes in this character table.</p>
<p>If <var class="Arg">psi</var> is an ordinary class function then the underlying character table is the ordinary character table of <span class="SimpleMath">G</span> (see <code class="func">OrdinaryCharacterTable</code> (<a href="chap71.html#X8011EEB684848039"><span class="RefLink">71.8-4</span></a>)), if <var class="Arg">psi</var> is a class function in characteristic <span class="SimpleMath">p ≠ 0</span> then the underlying character table is the <span class="SimpleMath">p</span>-modular Brauer table of <span class="SimpleMath">G</span> (see <code class="func">BrauerTable</code> (<a href="chap71.html#X8476B25A79D7A7FC"><span class="RefLink">71.3-2</span></a>)). So the underlying characteristic of <var class="Arg">psi</var> can be read off from the underlying character table.</p>
<p><a id="X7FE14712843C6486" name="X7FE14712843C6486"></a></p>
<h5>72.2-2 ValuesOfClassFunction</h5>
<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">‣ ValuesOfClassFunction</code>( <var class="Arg">psi</var> )</td><td class="tdright">( attribute )</td></tr></table></div>
<p>is the list of values of the class function <var class="Arg">psi</var>, the <span class="SimpleMath">i</span>-th entry being the value on the <span class="SimpleMath">i</span>-th conjugacy class of the underlying character table (see <code class="func">UnderlyingCharacterTable</code> (<a href="chap72.html#X81B55C067D123B76"><span class="RefLink">72.2-1</span></a>)).</p>
<div class="example"><pre>
<span class="GAPprompt">gap></span> <span class="GAPinput">g:= SymmetricGroup( 4 );</span>
Sym( [ 1 .. 4 ] )
<span class="GAPprompt">gap></span> <span class="GAPinput">psi:= TrivialCharacter( g );</span>
Character( CharacterTable( Sym( [ 1 .. 4 ] ) ), [ 1, 1, 1, 1, 1 ] )
<span class="GAPprompt">gap></span> <span class="GAPinput">UnderlyingCharacterTable( psi );</span>
CharacterTable( Sym( [ 1 .. 4 ] ) )
<span class="GAPprompt">gap></span> <span class="GAPinput">ValuesOfClassFunction( psi );</span>
[ 1, 1, 1, 1, 1 ]
<span class="GAPprompt">gap></span> <span class="GAPinput">IsList( psi );</span>
true
<span class="GAPprompt">gap></span> <span class="GAPinput">psi[1];</span>
1
<span class="GAPprompt">gap></span> <span class="GAPinput">Length( psi );</span>
5
<span class="GAPprompt">gap></span> <span class="GAPinput">IsBound( psi[6] );</span>
false
<span class="GAPprompt">gap></span> <span class="GAPinput">Concatenation( psi, [ 2, 3 ] );</span>
[ 1, 1, 1, 1, 1, 2, 3 ]
</pre></div>
<p><a id="X829EFBF57FCB1A94" name="X829EFBF57FCB1A94"></a></p>
<h4>72.3 <span class="Heading">Comparison of Class Functions</span></h4>
<p>With respect to <code class="func">\=</code> (<a href="chap31.html#X7EF67D047F03CA6F"><span class="RefLink">31.11-1</span></a>) and <code class="func">\<</code> (<a href="chap31.html#X7EF67D047F03CA6F"><span class="RefLink">31.11-1</span></a>), class functions behave equally to their lists of values (see <code class="func">ValuesOfClassFunction</code> (<a href="chap72.html#X7FE14712843C6486"><span class="RefLink">72.2-2</span></a>)). So two class functions are equal if and only if their lists of values are equal, no matter whether they are class functions of the same character table, of the same group but w.r.t. different class ordering, or of different groups.</p>
<div class="example"><pre>
<span class="GAPprompt">gap></span> <span class="GAPinput">grps:= Filtered( AllSmallGroups( 8 ), g -> not IsAbelian( g ) );</span>
[ <pc group of size 8 with 3 generators>,
<pc group of size 8 with 3 generators> ]
<span class="GAPprompt">gap></span> <span class="GAPinput">t1:= CharacterTable( grps[1] ); SetName( t1, "t1" );</span>
CharacterTable( <pc group of size 8 with 3 generators> )
<span class="GAPprompt">gap></span> <span class="GAPinput">t2:= CharacterTable( grps[2] ); SetName( t2, "t2" );</span>
CharacterTable( <pc group of size 8 with 3 generators> )
<span class="GAPprompt">gap></span> <span class="GAPinput">CharacterDegrees( t1 );</span>
[ [ 1, 4 ], [ 2, 1 ] ]
<span class="GAPprompt">gap></span> <span class="GAPinput">irr1:= Irr( grps[1] );;</span>
<span class="GAPprompt">gap></span> <span class="GAPinput">irr2:= Irr( grps[2] );;</span>
<span class="GAPprompt">gap></span> <span class="GAPinput">irr1 = irr2;</span>
true
<span class="GAPprompt">gap></span> <span class="GAPinput">irr1[1];</span>
Character( t1, [ 1, 1, 1, 1, 1 ] )
<span class="GAPprompt">gap></span> <span class="GAPinput">irr1[5];</span>
Character( t1, [ 2, 0, 0, -2, 0 ] )
<span class="GAPprompt">gap></span> <span class="GAPinput">irr2[1];</span>
Character( t2, [ 1, 1, 1, 1, 1 ] )
<span class="GAPprompt">gap></span> <span class="GAPinput">IsSSortedList( irr1 );</span>
false
<span class="GAPprompt">gap></span> <span class="GAPinput">irr1[1] < irr1[2]; # the triv. character has no '-1'</span>
false
<span class="GAPprompt">gap></span> <span class="GAPinput">irr1[2] < irr1[5];</span>
true
</pre></div>
<p><a id="X83B9F0C5871A5F7F" name="X83B9F0C5871A5F7F"></a></p>
<h4>72.4 <span class="Heading">Arithmetic Operations for Class Functions</span></h4>
<p>Class functions are <em>row vectors</em> of cyclotomics. The <em>additive</em> behaviour of class functions is defined such that they are equal to the plain lists of class function values except that the results are represented again as class functions whenever this makes sense. The <em>multiplicative</em> behaviour, however, is different. This is motivated by the fact that the tensor product of class functions is a more interesting operation than the vector product of plain lists. (Another candidate for a multiplication of compatible class functions would have been the inner product, which is implemented via the function <code class="func">ScalarProduct</code> (<a href="chap72.html#X855FD9F983D275CD"><span class="RefLink">72.8-5</span></a>). In terms of filters, the arithmetic of class functions is based on the decision that they lie in <code class="func">IsGeneralizedRowVector</code> (<a href="chap21.html#X87ABCEE9809585A0"><span class="RefLink">21.12-1</span></a>), with additive nesting depth <span class="SimpleMath">1</span>, but they do <em>not</em> lie in <code class="func">IsMultiplicativeGeneralizedRowVector</code> (<a href="chap21.html#X7FBCA5B58308C158"><span class="RefLink">21.12-2</span></a>).</p>
<p>More specifically, the scalar multiple of a class function with a cyclotomic is a class function, and the sum and the difference of two class functions of the same underlying character table (see <code class="func">UnderlyingCharacterTable</code> (<a href="chap72.html#X81B55C067D123B76"><span class="RefLink">72.2-1</span></a>)) are again class functions of this table. The sum and the difference of a class function and a list that is <em>not</em> a class function are plain lists, as well as the sum and the difference of two class functions of different character tables.</p>
<div class="example"><pre>
<span class="GAPprompt">gap></span> <span class="GAPinput">g:= SymmetricGroup( 4 );; tbl:= CharacterTable( g );;</span>
<span class="GAPprompt">gap></span> <span class="GAPinput">SetName( tbl, "S4" ); irr:= Irr( g );</span>
[ Character( S4, [ 1, -1, 1, 1, -1 ] ),
Character( S4, [ 3, -1, -1, 0, 1 ] ),
Character( S4, [ 2, 0, 2, -1, 0 ] ),
Character( S4, [ 3, 1, -1, 0, -1 ] ),
Character( S4, [ 1, 1, 1, 1, 1 ] ) ]
<span class="GAPprompt">gap></span> <span class="GAPinput">2 * irr[5];</span>
Character( S4, [ 2, 2, 2, 2, 2 ] )
<span class="GAPprompt">gap></span> <span class="GAPinput">irr[1] / 7;</span>
ClassFunction( S4, [ 1/7, -1/7, 1/7, 1/7, -1/7 ] )
<span class="GAPprompt">gap></span> <span class="GAPinput">lincomb:= irr[3] + irr[1] - irr[5];</span>
VirtualCharacter( S4, [ 2, -2, 2, -1, -2 ] )
<span class="GAPprompt">gap></span> <span class="GAPinput">lincomb:= lincomb + 2 * irr[5];</span>
VirtualCharacter( S4, [ 4, 0, 4, 1, 0 ] )
<span class="GAPprompt">gap></span> <span class="GAPinput">IsCharacter( lincomb );</span>
true
<span class="GAPprompt">gap></span> <span class="GAPinput">lincomb;</span>
Character( S4, [ 4, 0, 4, 1, 0 ] )
<span class="GAPprompt">gap></span> <span class="GAPinput">irr[5] + 2;</span>
[ 3, 3, 3, 3, 3 ]
<span class="GAPprompt">gap></span> <span class="GAPinput">irr[5] + [ 1, 2, 3, 4, 5 ];</span>
[ 2, 3, 4, 5, 6 ]
<span class="GAPprompt">gap></span> <span class="GAPinput">zero:= 0 * irr[1];</span>
VirtualCharacter( S4, [ 0, 0, 0, 0, 0 ] )
<span class="GAPprompt">gap></span> <span class="GAPinput">zero + Z(3);</span>
[ Z(3), Z(3), Z(3), Z(3), Z(3) ]
<span class="GAPprompt">gap></span> <span class="GAPinput">irr[5] + TrivialCharacter( DihedralGroup( 8 ) );</span>
[ 2, 2, 2, 2, 2 ]
</pre></div>
<p>The product of two class functions of the same character table is the tensor product (pointwise product) of these class functions. Thus the set of all class functions of a fixed group forms a ring, and for any field <span class="SimpleMath">F</span> of cyclotomics, the <span class="SimpleMath">F</span>-span of a given set of class functions forms an algebra.</p>
<p>The product of two class functions of <em>different</em> tables and the product of a class function and a list that is <em>not</em> a class function are not defined, an error is signalled in these cases. Note that in this respect, class functions behave differently from their values lists, for which the product is defined as the standard scalar product.</p>
<div class="example"><pre>
<span class="GAPprompt">gap></span> <span class="GAPinput">tens:= irr[3] * irr[4];</span>
Character( S4, [ 6, 0, -2, 0, 0 ] )
<span class="GAPprompt">gap></span> <span class="GAPinput">ValuesOfClassFunction( irr[3] ) * ValuesOfClassFunction( irr[4] );</span>
4
</pre></div>
<p>Class functions without zero values are invertible, the <em>inverse</em> is defined pointwise. As a consequence, for example groups of linear characters can be formed.</p>
<div class="example"><pre>
<span class="GAPprompt">gap></span> <span class="GAPinput">tens / irr[1];</span>
Character( S4, [ 6, 0, -2, 0, 0 ] )
</pre></div>
<p>Other (somewhat strange) implications of the definition of arithmetic operations for class functions, together with the general rules of list arithmetic (see <a href="chap21.html#X845EEAF083D43CCE"><span class="RefLink">21.11</span></a>), apply to the case of products involving <em>lists</em> of class functions. No inverse of the list of irreducible characters as a matrix is defined; if one is interested in the inverse matrix then one can compute it from the matrix of class function values.</p>
<div class="example"><pre>
<span class="GAPprompt">gap></span> <span class="GAPinput">Inverse( List( irr, ValuesOfClassFunction ) );</span>
[ [ 1/24, 1/8, 1/12, 1/8, 1/24 ], [ -1/4, -1/4, 0, 1/4, 1/4 ],
[ 1/8, -1/8, 1/4, -1/8, 1/8 ], [ 1/3, 0, -1/3, 0, 1/3 ],
[ -1/4, 1/4, 0, -1/4, 1/4 ] ]
</pre></div>
<p>Also the product of a class function with a list of class functions is <em>not</em> a vector-matrix product but the list of pointwise products.</p>
<div class="example"><pre>
<span class="GAPprompt">gap></span> <span class="GAPinput">irr[1] * irr{ [ 1 .. 3 ] };</span>
[ Character( S4, [ 1, 1, 1, 1, 1 ] ),
Character( S4, [ 3, 1, -1, 0, -1 ] ),
Character( S4, [ 2, 0, 2, -1, 0 ] ) ]
</pre></div>
<p>And the product of two lists of class functions is <em>not</em> the matrix product but the sum of the pointwise products.</p>
<div class="example"><pre>
<span class="GAPprompt">gap></span> <span class="GAPinput">irr * irr;</span>
Character( S4, [ 24, 4, 8, 3, 4 ] )
</pre></div>
<p>The <em>powering</em> operator <code class="func">\^</code> (<a href="chap31.html#X8481C9B97B214C23"><span class="RefLink">31.12-1</span></a>) has several meanings for class functions. The power of a class function by a nonnegative integer is clearly the tensor power. The power of a class function by an element that normalizes the underlying group or by a Galois automorphism is the conjugate class function. (As a consequence, the application of the permutation induced by such an action cannot be denoted by <code class="func">\^</code> (<a href="chap31.html#X8481C9B97B214C23"><span class="RefLink">31.12-1</span></a>); instead one can use <code class="func">Permuted</code> (<a href="chap21.html#X7B5A19098406347A"><span class="RefLink">21.20-17</span></a>).) The power of a class function by a group or a character table is the induced class function (see <code class="func">InducedClassFunction</code> (<a href="chap72.html#X7FE39D3D78855D3B"><span class="RefLink">72.9-3</span></a>)). The power of a group element by a class function is the class function value at (the conjugacy class containing) this element.</p>
<div class="example"><pre>
<span class="GAPprompt">gap></span> <span class="GAPinput">irr[3] ^ 3;</span>
Character( S4, [ 8, 0, 8, -1, 0 ] )
<span class="GAPprompt">gap></span> <span class="GAPinput">lin:= LinearCharacters( DerivedSubgroup( g ) );</span>
[ Character( CharacterTable( Alt( [ 1 .. 4 ] ) ), [ 1, 1, 1, 1 ] ),
Character( CharacterTable( Alt( [ 1 .. 4 ] ) ),
[ 1, 1, E(3), E(3)^2 ] ),
Character( CharacterTable( Alt( [ 1 .. 4 ] ) ),
[ 1, 1, E(3)^2, E(3) ] ) ]
<span class="GAPprompt">gap></span> <span class="GAPinput">List( lin, chi -> chi ^ (1,2) );</span>
[ Character( CharacterTable( Alt( [ 1 .. 4 ] ) ), [ 1, 1, 1, 1 ] ),
Character( CharacterTable( Alt( [ 1 .. 4 ] ) ),
[ 1, 1, E(3)^2, E(3) ] ),
Character( CharacterTable( Alt( [ 1 .. 4 ] ) ),
[ 1, 1, E(3), E(3)^2 ] ) ]
<span class="GAPprompt">gap></span> <span class="GAPinput">Orbit( GaloisGroup( CF(3) ), lin[2] );</span>
[ Character( CharacterTable( Alt( [ 1 .. 4 ] ) ),
[ 1, 1, E(3), E(3)^2 ] ),
Character( CharacterTable( Alt( [ 1 .. 4 ] ) ),
[ 1, 1, E(3)^2, E(3) ] ) ]
<span class="GAPprompt">gap></span> <span class="GAPinput">lin[1]^g;</span>
Character( S4, [ 2, 0, 2, 2, 0 ] )
<span class="GAPprompt">gap></span> <span class="GAPinput">(1,2,3)^lin[2];</span>
E(3)
</pre></div>
<p><a id="X83AAD5527BBAFA03" name="X83AAD5527BBAFA03"></a></p>
<h5>72.4-1 Characteristic</h5>
<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">‣ Characteristic</code>( <var class="Arg">chi</var> )</td><td class="tdright">( attribute )</td></tr></table></div>
<p>The <em>characteristic</em> of class functions is zero, as for all list of cyclotomics. For class functions of a <span class="SimpleMath">p</span>-modular character table, such as Brauer characters, the prime <span class="SimpleMath">p</span> is given by the <code class="func">UnderlyingCharacteristic</code> (<a href="chap71.html#X7F58A82F7D88000A"><span class="RefLink">71.9-5</span></a>) value of the character table.</p>
<div class="example"><pre>
<span class="GAPprompt">gap></span> <span class="GAPinput">Characteristic( irr[1] );</span>
0
<span class="GAPprompt">gap></span> <span class="GAPinput">irrmod2:= Irr( g, 2 );</span>
[ Character( BrauerTable( Sym( [ 1 .. 4 ] ), 2 ), [ 1, 1 ] ),
Character( BrauerTable( Sym( [ 1 .. 4 ] ), 2 ), [ 2, -1 ] ) ]
<span class="GAPprompt">gap></span> <span class="GAPinput">Characteristic( irrmod2[1] );</span>
0
<span class="GAPprompt">gap></span> <span class="GAPinput">UnderlyingCharacteristic( UnderlyingCharacterTable( irrmod2[1] ) );</span>
2
</pre></div>
<p><a id="X856AB97E785E0B04" name="X856AB97E785E0B04"></a></p>
<h5>72.4-2 ComplexConjugate</h5>
<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">‣ ComplexConjugate</code>( <var class="Arg">chi</var> )</td><td class="tdright">( attribute )</td></tr></table></div>
<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">‣ GaloisCyc</code>( <var class="Arg">chi</var>, <var class="Arg">k</var> )</td><td class="tdright">( operation )</td></tr></table></div>
<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">‣ Permuted</code>( <var class="Arg">chi</var>, <var class="Arg">pi</var> )</td><td class="tdright">( method )</td></tr></table></div>
<p>The operations <code class="func">ComplexConjugate</code>, <code class="func">GaloisCyc</code>, and <code class="func">Permuted</code> return a class function when they are called with a class function; The complex conjugate of a class function that is known to be a (virtual) character is again known to be a (virtual) character, and applying an arbitrary Galois automorphism to an ordinary (virtual) character yields a (virtual) character.</p>
<div class="example"><pre>
<span class="GAPprompt">gap></span> <span class="GAPinput">ComplexConjugate( lin[2] );</span>
Character( CharacterTable( Alt( [ 1 .. 4 ] ) ),
[ 1, 1, E(3)^2, E(3) ] )
<span class="GAPprompt">gap></span> <span class="GAPinput">GaloisCyc( lin[2], 5 );</span>
Character( CharacterTable( Alt( [ 1 .. 4 ] ) ),
[ 1, 1, E(3)^2, E(3) ] )
<span class="GAPprompt">gap></span> <span class="GAPinput">Permuted( lin[2], (2,3,4) );</span>
ClassFunction( CharacterTable( Alt( [ 1 .. 4 ] ) ),
[ 1, E(3)^2, 1, E(3) ] )
</pre></div>
<p><a id="X7BCE99B88285EB39" name="X7BCE99B88285EB39"></a></p>
<h5>72.4-3 Order</h5>
<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">‣ Order</code>( <var class="Arg">chi</var> )</td><td class="tdright">( attribute )</td></tr></table></div>
<p>By definition of <code class="func">Order</code> (<a href="chap31.html#X84F59A2687C62763"><span class="RefLink">31.10-10</span></a>) for arbitrary monoid elements, the return value of <code class="func">Order</code> (<a href="chap31.html#X84F59A2687C62763"><span class="RefLink">31.10-10</span></a>) for a character must be its multiplicative order. The <em>determinantal order</em> (see <code class="func">DeterminantOfCharacter</code> (<a href="chap72.html#X7A292A58827B95B8"><span class="RefLink">72.8-18</span></a>)) of a character <var class="Arg">chi</var> can be computed as <code class="code">Order( Determinant( <var class="Arg">chi</var> ) )</code>.</p>
<div class="example"><pre>
<span class="GAPprompt">gap></span> <span class="GAPinput">det:= Determinant( irr[3] );</span>
Character( S4, [ 1, -1, 1, 1, -1 ] )
<span class="GAPprompt">gap></span> <span class="GAPinput">Order( det );</span>
2
</pre></div>
<p><a id="X828AD0C57EA57C21" name="X828AD0C57EA57C21"></a></p>
<h4>72.5 <span class="Heading">Printing Class Functions</span></h4>
<p><a id="X7BDD2D4A7F7FB3B1" name="X7BDD2D4A7F7FB3B1"></a></p>
<h5>72.5-1 ViewObj</h5>
<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">‣ ViewObj</code>( <var class="Arg">chi</var> )</td><td class="tdright">( method )</td></tr></table></div>
<p>The default <code class="func">ViewObj</code> (<a href="chap6.html#X815BF22186FD43C9"><span class="RefLink">6.3-5</span></a>) methods for class functions print one of the strings <code class="code">"ClassFunction"</code>, <code class="code">"VirtualCharacter"</code>, <code class="code">"Character"</code> (depending on whether the class function is known to be a character or virtual character, see <code class="func">IsCharacter</code> (<a href="chap72.html#X7FE3CD08794051F8"><span class="RefLink">72.8-1</span></a>), <code class="func">IsVirtualCharacter</code> (<a href="chap72.html#X788DD05C86CB7030"><span class="RefLink">72.8-2</span></a>)), followed by the <code class="func">ViewObj</code> (<a href="chap6.html#X815BF22186FD43C9"><span class="RefLink">6.3-5</span></a>) output for the underlying character table (see <a href="chap71.html#X7C1941F17BE9FC21"><span class="RefLink">71.13</span></a>), and the list of values. The table is chosen (and not the group) in order to distinguish class functions of different underlying characteristic (see <code class="func">UnderlyingCharacteristic</code> (<a href="chap71.html#X7F58A8 | |