Quelle chap70.html
Sprache: HTML
|
|
| products/sources/formale Sprachen/GAP/doc/ref/chap70.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 70: Tables of Marks</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="chap70" 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="chap69.html">[Previous Chapter]</a> <a href="chap71.html">[Next Chapter]</a> </div>
<p id="mathjaxlink" class="pcenter"><a href="chap70_mj.html">[MathJax on]</a></p>
<p><a id="X84DBFB8287C3F1B4" name="X84DBFB8287C3F1B4"></a></p>
<div class="ChapSects"><a href="chap70.html#X84DBFB8287C3F1B4">70 <span class="Heading">Tables of Marks</span></a>
<div class="ContSect"><span class="tocline"><span class="nocss"> </span><a href="chap70.html#X80883EC17968F442">70.1 <span class="Heading">More about Tables of Marks</span></a>
</span>
</div>
<div class="ContSect"><span class="tocline"><span class="nocss"> </span><a href="chap70.html#X7D29539F7C14956D">70.2 <span class="Heading">Table of Marks Objects in GAP</span></a>
</span>
</div>
<div class="ContSect"><span class="tocline"><span class="nocss"> </span><a href="chap70.html#X7B5E4B5F81AF6B00">70.3 <span class="Heading">Constructing Tables of Marks</span></a>
</span>
<div class="ContSSBlock">
<span class="ContSS"><br /><span class="nocss"> </span><a href="chap70.html#X85B262AB7E219C34">70.3-1 TableOfMarks</a></span>
<span class="ContSS"><br /><span class="nocss"> </span><a href="chap70.html#X7B30FF3A79CCB0DF">70.3-2 TableOfMarksByLattice</a></span>
<span class="ContSS"><br /><span class="nocss"> </span><a href="chap70.html#X79ABFA0A833DDCFE">70.3-3 LatticeSubgroupsByTom</a></span>
</div></div>
<div class="ContSect"><span class="tocline"><span class="nocss"> </span><a href="chap70.html#X7AC0FB9685DCBCFD">70.4 <span class="Heading">Printing Tables of Marks</span></a>
</span>
<div class="ContSSBlock">
<span class="ContSS"><br /><span class="nocss"> </span><a href="chap70.html#X7DC656517D8335DC">70.4-1 ViewObj</a></span>
<span class="ContSS"><br /><span class="nocss"> </span><a href="chap70.html#X86379C0D7D17AD92">70.4-2 PrintObj</a></span>
<span class="ContSS"><br /><span class="nocss"> </span><a href="chap70.html#X821F9438839F445D">70.4-3 Display</a></span>
</div></div>
<div class="ContSect"><span class="tocline"><span class="nocss"> </span><a href="chap70.html#X82385925797B5108">70.5 <span class="Heading">Sorting Tables of Marks</span></a>
</span>
<div class="ContSSBlock">
<span class="ContSS"><br /><span class="nocss"> </span><a href="chap70.html#X786A948E82C36F0E">70.5-1 SortedTom</a></span>
<span class="ContSS"><br /><span class="nocss"> </span><a href="chap70.html#X7EFD937D804662F6">70.5-2 PermutationTom</a></span>
</div></div>
<div class="ContSect"><span class="tocline"><span class="nocss"> </span><a href="chap70.html#X82271C4F7FD21FAA">70.6 <span class="Heading">Technical Details about Tables of Marks</span></a>
</span>
<div class="ContSSBlock">
<span class="ContSS"><br /><span class="nocss"> </span><a href="chap70.html#X870985C58547FED4">70.6-1 InfoTom</a></span>
<span class="ContSS"><br /><span class="nocss"> </span><a href="chap70.html#X7AC1A73D8100C7EC">70.6-2 IsTableOfMarks</a></span>
<span class="ContSS"><br /><span class="nocss"> </span><a href="chap70.html#X7ACF943D84BDF89E">70.6-3 TableOfMarksFamily</a></span>
<span class="ContSS"><br /><span class="nocss"> </span><a href="chap70.html#X87789FD27831B2A2">70.6-4 TableOfMarksComponents</a></span>
<span class="ContSS"><br /><span class="nocss"> </span><a href="chap70.html#X8491CDBF8543A7D5">70.6-5 ConvertToTableOfMarks</a></span>
</div></div>
<div class="ContSect"><span class="tocline"><span class="nocss"> </span><a href="chap70.html#X838D3B87827D6923">70.7 <span class="Heading">Attributes of Tables of Marks</span></a>
</span>
<div class="ContSSBlock">
<span class="ContSS"><br /><span class="nocss"> </span><a href="chap70.html#X78F486A28561D006">70.7-1 MarksTom</a></span>
<span class="ContSS"><br /><span class="nocss"> </span><a href="chap70.html#X82E5DA217A5D1134">70.7-2 NrSubsTom</a></span>
<span class="ContSS"><br /><span class="nocss"> </span><a href="chap70.html#X781AA1B28178AE9A">70.7-3 LengthsTom</a></span>
<span class="ContSS"><br /><span class="nocss"> </span><a href="chap70.html#X7A33C7C38083CC09">70.7-4 ClassTypesTom</a></span>
<span class="ContSS"><br /><span class="nocss"> </span><a href="chap70.html#X7A53E923819FE173">70.7-5 ClassNamesTom</a></span>
<span class="ContSS"><br /><span class="nocss"> </span><a href="chap70.html#X86B9891C788D5107">70.7-6 FusionsTom</a></span>
<span class="ContSS"><br /><span class="nocss"> </span><a href="chap70.html#X81E41D3880FA6C4C">70.7-7 UnderlyingGroup</a></span>
<span class="ContSS"><br /><span class="nocss"> </span><a href="chap70.html#X817238FB79A3462F">70.7-8 IdempotentsTom</a></span>
<span class="ContSS"><br /><span class="nocss"> </span><a href="chap70.html#X810E53597B5BB4F8">70.7-9 Identifier</a></span>
<span class="ContSS"><br /><span class="nocss"> </span><a href="chap70.html#X8463272986781E17">70.7-10 MatTom</a></span>
<span class="ContSS"><br /><span class="nocss"> </span><a href="chap70.html#X7D32C8B0786D16C1">70.7-11 MoebiusTom</a></span>
<span class="ContSS"><br /><span class="nocss"> </span><a href="chap70.html#X78525D04849A48EA">70.7-12 WeightsTom</a></span>
</div></div>
<div class="ContSect"><span class="tocline"><span class="nocss"> </span><a href="chap70.html#X78A1B2E4826A9518">70.8 <span class="Heading">Properties of Tables of Marks</span></a>
</span>
<div class="ContSSBlock">
<span class="ContSS"><br /><span class="nocss"> </span><a href="chap70.html#X7C93BAEC78B7C2B4">70.8-1 IsAbelianTom</a></span>
</div></div>
<div class="ContSect"><span class="tocline"><span class="nocss"> </span><a href="chap70.html#X7A40D99D7816F126">70.9 <span class="Heading">Other Operations for Tables of Marks</span></a>
</span>
<div class="ContSSBlock">
<span class="ContSS"><br /><span class="nocss"> </span><a href="chap70.html#X7D8B4BE08094B137">70.9-1 IsInternallyConsistent</a></span>
<span class="ContSS"><br /><span class="nocss"> </span><a href="chap70.html#X8528D9397FFAF477">70.9-2 DerivedSubgroupTom</a></span>
<span class="ContSS"><br /><span class="nocss"> </span><a href="chap70.html#X7C29BD438127DFBE">70.9-3 DerivedSubgroupsTomPossible</a></span>
<span class="ContSS"><br /><span class="nocss"> </span><a href="chap70.html#X7CE6C45881F7F7D4">70.9-4 NormalizerTom</a></span>
<span class="ContSS"><br /><span class="nocss"> </span><a href="chap70.html#X7F87B2797827E5DE">70.9-5 ContainedTom</a></span>
<span class="ContSS"><br /><span class="nocss"> </span><a href="chap70.html#X7EE050FB87D6F0E7">70.9-6 ContainingTom</a></span>
<span class="ContSS"><br /><span class="nocss"> </span><a href="chap70.html#X838DE06B823C19CA">70.9-7 CyclicExtensionsTom</a></span>
<span class="ContSS"><br /><span class="nocss"> </span><a href="chap70.html#X80890C247EB1E35C">70.9-8 DecomposedFixedPointVector</a></span>
<span class="ContSS"><br /><span class="nocss"> </span><a href="chap70.html#X7B1C1A7C867A4082">70.9-9 EulerianFunctionByTom</a></span>
<span class="ContSS"><br /><span class="nocss"> </span><a href="chap70.html#X8224E51382FDB912">70.9-10 IntersectionsTom</a></span>
<span class="ContSS"><br /><span class="nocss"> </span><a href="chap70.html#X859F069C8428B598">70.9-11 FactorGroupTom</a></span>
<span class="ContSS"><br /><span class="nocss"> </span><a href="chap70.html#X8325811586C00ECF">70.9-12 MaximalSubgroupsTom</a></span>
<span class="ContSS"><br /><span class="nocss"> </span><a href="chap70.html#X7923B19D7C47BF63">70.9-13 MinimalSupergroupsTom</a></span>
</div></div>
<div class="ContSect"><span class="tocline"><span class="nocss"> </span><a href="chap70.html#X7FE9BE477A90199F">70.10 <span class="Heading">Accessing Subgroups via Tables of Marks</span></a>
</span>
<div class="ContSSBlock">
<span class="ContSS"><br /><span class="nocss"> </span><a href="chap70.html#X7B0B6FDD806E9734">70.10-1 GeneratorsSubgroupsTom</a></span>
<span class="ContSS"><br /><span class="nocss"> </span><a href="chap70.html#X7898BE7284E47FF3">70.10-2 StraightLineProgramsTom</a></span>
<span class="ContSS"><br /><span class="nocss"> </span><a href="chap70.html#X7889DB6D790593B9">70.10-3 IsTableOfMarksWithGens</a></span>
<span class="ContSS"><br /><span class="nocss"> </span><a href="chap70.html#X7F625AB880B73AC3">70.10-4 RepresentativeTom</a></span>
</div></div>
<div class="ContSect"><span class="tocline"><span class="nocss"> </span><a href="chap70.html#X79ADA60880BE9C49">70.11 <span class="Heading">The Interface between Tables of Marks and Character Tables</span></a>
</span>
<div class="ContSSBlock">
<span class="ContSS"><br /><span class="nocss"> </span><a href="chap70.html#X7A82CB487DBDDC53">70.11-1 FusionCharTableTom</a></span>
<span class="ContSS"><br /><span class="nocss"> </span><a href="chap70.html#X8016499282F0BA37">70.11-2 PermCharsTom</a></span>
</div></div>
<div class="ContSect"><span class="tocline"><span class="nocss"> </span><a href="chap70.html#X7CF66FAE7A8858E4">70.12 <span class="Heading">Generic Construction of Tables of Marks</span></a>
</span>
<div class="ContSSBlock">
<span class="ContSS"><br /><span class="nocss"> </span><a href="chap70.html#X7CAA5B6C85CB9A8D">70.12-1 TableOfMarksCyclic</a></span>
<span class="ContSS"><br /><span class="nocss"> </span><a href="chap70.html#X7AADB47B8079C99E">70.12-2 TableOfMarksDihedral</a></span>
<span class="ContSS"><br /><span class="nocss"> </span><a href="chap70.html#X78E9DDF885E12687">70.12-3 TableOfMarksFrobenius</a></span>
</div></div>
<div class="ContSect"><span class="tocline"><span class="nocss"> </span><a href="chap70.html#X794ABC7187A9285B">70.13 <span class="Heading">The Library of Tables of Marks</span></a>
</span>
</div>
</div>
<h3>70 <span class="Heading">Tables of Marks</span></h3>
<p>The concept of a <em>table of marks</em> was introduced by W. Burnside in his book <q>Theory of Groups of Finite Order</q>, see <a href="chapBib.html#biBBur55">[Bur55]</a>. Therefore a table of marks is sometimes called a <em>Burnside matrix</em>.</p>
<p>The table of marks of a finite group <span class="SimpleMath">G</span> is a matrix whose rows and columns are labelled by the conjugacy classes of subgroups of <span class="SimpleMath">G</span> and where for two subgroups <span class="SimpleMath">A</span> and <span class="SimpleMath">B</span> the <span class="SimpleMath">(A, B)</span>-entry is the number of fixed points of <span class="SimpleMath">B</span> in the transitive action of <span class="SimpleMath">G</span> on the cosets of <span class="SimpleMath">A</span> in <span class="SimpleMath">G</span>. So the table of marks characterizes the set of all permutation representations of <span class="SimpleMath">G</span>.</p>
<p>Moreover, the table of marks gives a compact description of the subgroup lattice of <span class="SimpleMath">G</span>, since from the numbers of fixed points the numbers of conjugates of a subgroup <span class="SimpleMath">B</span> contained in a subgroup <span class="SimpleMath">A</span> can be derived.</p>
<p>A table of marks of a given group <span class="SimpleMath">G</span> can be constructed from the subgroup lattice of <span class="SimpleMath">G</span> (see <a href="chap70.html#X7B5E4B5F81AF6B00"><span class="RefLink">70.3</span></a>). For several groups, the table of marks can be restored from the <strong class="pkg">GAP</strong> library of tables of marks (see <a href="chap70.html#X794ABC7187A9285B"><span class="RefLink">70.13</span></a>).</p>
<p>Given the table of marks of <span class="SimpleMath">G</span>, one can display it (see <a href="chap70.html#X7AC0FB9685DCBCFD"><span class="RefLink">70.4</span></a>) and derive information about <span class="SimpleMath">G</span> and its Burnside ring from it (see <a href="chap70.html#X838D3B87827D6923"><span class="RefLink">70.7</span></a>, <a href="chap70.html#X78A1B2E4826A9518"><span class="RefLink">70.8</span></a>, <a href="chap70.html#X7A40D99D7816F126"><span class="RefLink">70.9</span></a>). Moreover, tables of marks in <strong class="pkg">GAP</strong> provide an easy access to the classes of subgroups of their underlying groups (see <a href="chap70.html#X7FE9BE477A90199F"><span class="RefLink">70.10</span></a>).</p>
<p><a id="X80883EC17968F442" name="X80883EC17968F442"></a></p>
<h4>70.1 <span class="Heading">More about Tables of Marks</span></h4>
<p>Let <span class="SimpleMath">G</span> be a finite group with <span class="SimpleMath">n</span> conjugacy classes of subgroups <span class="SimpleMath">C_1, C_2, ..., C_n</span> and representatives <span class="SimpleMath">H_i ∈ C_i</span>, <span class="SimpleMath">1 ≤ i ≤ n</span>. The <em>table of marks</em> of <span class="SimpleMath">G</span> is defined to be the <span class="SimpleMath">n × n</span> matrix <span class="SimpleMath">M = (m_ij)</span> where the <em>mark</em> <span class="SimpleMath">m_ij</span> is the number of fixed points of the subgroup <span class="SimpleMath">H_j</span> in the action of <span class="SimpleMath">G</span> on the right cosets of <span class="SimpleMath">H_i</span> in <span class="SimpleMath">G</span>.</p>
<p>Since <span class="SimpleMath">H_j</span> can only have fixed points if it is contained in a point stabilizer the matrix <span class="SimpleMath">M</span> is lower triangular if the classes <span class="SimpleMath">C_i</span> are sorted according to the condition that if <span class="SimpleMath">H_i</span> is contained in a conjugate of <span class="SimpleMath">H_j</span> then <span class="SimpleMath">i ≤ j</span>.</p>
<p>Moreover, the diagonal entries <span class="SimpleMath">m_ii</span> are nonzero since <span class="SimpleMath">m_ii</span> equals the index of <span class="SimpleMath">H_i</span> in its normalizer in <span class="SimpleMath">G</span>. Hence <span class="SimpleMath">M</span> is invertible. Since any transitive action of <span class="SimpleMath">G</span> is equivalent to an action on the cosets of a subgroup of <span class="SimpleMath">G</span>, one sees that the table of marks completely characterizes the set of all permutation representations of <span class="SimpleMath">G</span>.</p>
<p>The marks <span class="SimpleMath">m_ij</span> have further meanings. If <span class="SimpleMath">H_1</span> is the trivial subgroup of <span class="SimpleMath">G</span> then each mark <span class="SimpleMath">m_i1</span> in the first column of <span class="SimpleMath">M</span> is equal to the index of <span class="SimpleMath">H_i</span> in <span class="SimpleMath">G</span> since the trivial subgroup fixes all cosets of <span class="SimpleMath">H_i</span>. If <span class="SimpleMath">H_n = G</span> then each <span class="SimpleMath">m_nj</span> in the last row of <span class="SimpleMath">M</span> is equal to <span class="SimpleMath">1</span> since there is only one coset of <span class="SimpleMath">G</span> in <span class="SimpleMath">G</span>. In general, <span class="SimpleMath">m_ij</span> equals the number of conjugates of <span class="SimpleMath">H_i</span> containing <span class="SimpleMath">H_j</span>, multiplied by the index of <span class="SimpleMath">H_i</span> in its normalizer in <span class="SimpleMath">G</span>. Moreover, the number <span class="SimpleMath">c_ij</span> of conjugates of <span class="SimpleMath">H_j</span> which are contained in <span class="SimpleMath">H_i</span> can be derived from the marks <span class="SimpleMath">m_ij</span> via the formula</p>
<p class="pcenter">c_ij = ( m_ij m_j1 ) / ( m_i1 m_jj )</p>
<p>.</p>
<p>Both the marks <span class="SimpleMath">m_ij</span> and the numbers of subgroups <span class="SimpleMath">c_ij</span> are needed for the functions described in this chapter.</p>
<p>A brief survey of properties of tables of marks and a description of algorithms for the interactive construction of tables of marks using <strong class="pkg">GAP</strong> can be found in <a href="chapBib.html#biBPfe97">[Pfe97]</a>.</p>
<p><a id="X7D29539F7C14956D" name="X7D29539F7C14956D"></a></p>
<h4>70.2 <span class="Heading">Table of Marks Objects in GAP</span></h4>
<p>A table of marks of a group <span class="SimpleMath">G</span> in <strong class="pkg">GAP</strong> is represented by an immutable (see <a href="chap12.html#X7F0C119682196D65"><span class="RefLink">12.6</span></a>) object <var class="Arg">tom</var> in the category <code class="func">IsTableOfMarks</code> (<a href="chap70.html#X7AC1A73D8100C7EC"><span class="RefLink">70.6-2</span></a>), with defining attributes <code class="func">SubsTom</code> (<a href="chap70.html#X78F486A28561D006"><span class="RefLink">70.7-1</span></a>) and <code class="func">MarksTom</code> (<a href="chap70.html#X78F486A28561D006"><span class="RefLink">70.7-1</span></a>). These two attributes encode the matrix of marks in a compressed form. The <code class="func">SubsTom</code> (<a href="chap70.html#X78F486A28561D006"><span class="RefLink">70.7-1</span></a>) value of <var class="Arg">tom</var> is a list where for each conjugacy class of subgroups the class numbers of its subgroups are stored. These are exactly the positions in the corresponding row of the matrix of marks which have nonzero entries. The marks themselves are stored via the <code class="func">MarksTom</code> (<a href="chap70.html#X78F486A28561D006"><span class="RefLink">70.7-1</span></a>) value of <var class="Arg">tom</var>, which is a list that contains for each entry in <code class="code">SubsTom( <var class="Arg">tom</var> )</code> the corresponding nonzero value of the table of marks.</p>
<p>It is possible to create table of marks objects that do not store a group, moreover one can create a table of marks object from a matrix of marks (see <code class="func">TableOfMarks</code> (<a href="chap70.html#X85B262AB7E219C34"><span class="RefLink">70.3-1</span></a>)). So it may happen that a table of marks object in <strong class="pkg">GAP</strong> is in fact <em>not</em> the table of marks of a group. To some extent, the consistency of a table of marks object can be checked (see <a href="chap70.html#X7A40D99D7816F126"><span class="RefLink">70.9</span></a>), but <strong class="pkg">GAP</strong> knows no general way to prove or disprove that a given matrix of nonnegative integers is the matrix of marks for a group. Many functions for tables of marks work well without access to the group –this is one of the arguments why tables of marks are so useful–, but for example normalizers (see <code class="func">NormalizerTom</code> (<a href="chap70.html#X7CE6C45881F7F7D4"><span class="RefLink">70.9-4</span></a>)) and derived subgroups (see <code class="func">DerivedSubgroupTom</code> (<a href="chap70.html#X8528D9397FFAF477"><span class="RefLink">70.9-2</span></a>)) of subgroups are in general not uniquely determined by the matrix of marks.</p>
<p><strong class="pkg">GAP</strong> tables of marks are assumed to be in lower triangular form, that is, if a subgroup from the conjugacy class corresponding to the <span class="SimpleMath">i</span>-th row is contained in a subgroup from the class corresponding to the <span class="SimpleMath">j</span>-th row j then <span class="SimpleMath">i ≤ j</span>.</p>
<p>The <code class="func">MarksTom</code> (<a href="chap70.html#X78F486A28561D006"><span class="RefLink">70.7-1</span></a>) information can be computed from the values of the attributes <code class="func">NrSubsTom</code> (<a href="chap70.html#X82E5DA217A5D1134"><span class="RefLink">70.7-2</span></a>), <code class="func">LengthsTom</code> (<a href="chap70.html#X781AA1B28178AE9A"><span class="RefLink">70.7-3</span></a>), <code class="func">OrdersTom</code> (<a href="chap70.html#X82E5DA217A5D1134"><span class="RefLink">70.7-2</span></a>), and <code class="func">SubsTom</code> (<a href="chap70.html#X78F486A28561D006"><span class="RefLink">70.7-1</span></a>). <code class="func">NrSubsTom</code> (<a href="chap70.html#X82E5DA217A5D1134"><span class="RefLink">70.7-2</span></a>) stores a list containing for each entry in the <code class="func">SubsTom</code> (<a href="chap70.html#X78F486A28561D006"><span class="RefLink">70.7-1</span></a>) value the corresponding number of conjugates that are contained in a subgroup, <code class="func">LengthsTom</code> (<a href="chap70.html#X781AA1B28178AE9A"><span class="RefLink">70.7-3</span></a>) a list containing for each conjugacy class of subgroups its length, and <code class="func">OrdersTom</code> (<a href="chap70.html#X82E5DA217A5D1134"><span class="RefLink">70.7-2</span></a>) a list containing for each class of subgroups their order. So the <code class="func">MarksTom</code> (<a href="chap70.html#X78F486A28561D006"><span class="RefLink">70.7-1</span></a>) value of <var class="Arg">tom</var> may be missing provided that the values of <code class="func">NrSubsTom</code> (<a href="chap70.html#X82E5DA217A5D1134"><span class="RefLink">70.7-2</span></a>), <code class="func">LengthsTom</code> (<a href="chap70.html#X781AA1B28178AE9A"><span class="RefLink">70.7-3</span></a>), and <code class="func">OrdersTom</code> (<a href="chap70.html#X82E5DA217A5D1134"><span class="RefLink">70.7-2</span></a>) are stored in <var class="Arg">tom</var>.</p>
<p>Additional information about a table of marks is needed by some functions. The class numbers of normalizers in <span class="SimpleMath">G</span> and the number of the derived subgroup of <span class="SimpleMath">G</span> can be stored via appropriate attributes (see <code class="func">NormalizersTom</code> (<a href="chap70.html#X7CE6C45881F7F7D4"><span class="RefLink">70.9-4</span></a>), <code class="func">DerivedSubgroupTom</code> (<a href="chap70.html#X8528D9397FFAF477"><span class="RefLink">70.9-2</span></a>)).</p>
<p>If <var class="Arg">tom</var> stores its group <span class="SimpleMath">G</span> and a bijection from the rows and columns of the matrix of marks of <var class="Arg">tom</var> to the classes of subgroups of <span class="SimpleMath">G</span> then clearly normalizers, derived subgroup etc. can be computed from this information. But in general a table of marks need not have access to <span class="SimpleMath">G</span>, for example <var class="Arg">tom</var> might have been constructed from a generic table of marks (see <a href="chap70.html#X7CF66FAE7A8858E4"><span class="RefLink">70.12</span></a>), or as table of marks of a factor group from a given table of marks (see <code class="func">FactorGroupTom</code> (<a href="chap70.html#X859F069C8428B598"><span class="RefLink">70.9-11</span></a>)). Access to the group <span class="SimpleMath">G</span> is provided by the attribute <code class="func">UnderlyingGroup</code> (<a href="chap70.html#X81E41D3880FA6C4C"><span class="RefLink">70.7-7</span></a>) if this value is set. Access to the relevant information about conjugacy classes of subgroups of <span class="SimpleMath">G</span> –compatible with the ordering of rows and columns of the marks in <var class="Arg">tom</var>– is signalled by the filter <code class="func">IsTableOfMarksWithGens</code> (<a href="chap70.html#X7889DB6D790593B9"><span class="RefLink">70.10-3</span></a>).</p>
<p>Several examples in this chapter require the <strong class="pkg">GAP</strong> package <strong class="pkg">TomLib</strong> (the <strong class="pkg">GAP</strong> Library of Tables of Marks) 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( "tomlib" );</span>
true
</pre></div>
<p><a id="X7B5E4B5F81AF6B00" name="X7B5E4B5F81AF6B00"></a></p>
<h4>70.3 <span class="Heading">Constructing Tables of Marks</span></h4>
<p><a id="X85B262AB7E219C34" name="X85B262AB7E219C34"></a></p>
<h5>70.3-1 TableOfMarks</h5>
<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">‣ TableOfMarks</code>( <var class="Arg">G</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">‣ TableOfMarks</code>( <var class="Arg">string</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">‣ TableOfMarks</code>( <var class="Arg">matrix</var> )</td><td class="tdright">( attribute )</td></tr></table></div>
<p>In the first form, <var class="Arg">G</var> must be a finite group, and <code class="func">TableOfMarks</code> constructs the table of marks of <var class="Arg">G</var>. This computation requires the knowledge of the complete subgroup lattice of <var class="Arg">G</var> (see <code class="func">LatticeSubgroups</code> (<a href="chap39.html#X7B104E2C86166188"><span class="RefLink">39.20-1</span></a>)). If the lattice is not yet stored then it will be constructed. This may take a while if <var class="Arg">G</var> is large. The result has the <code class="func">IsTableOfMarksWithGens</code> (<a href="chap70.html#X7889DB6D790593B9"><span class="RefLink">70.10-3</span></a>) value <code class="keyw">true</code>.</p>
<p>In the second form, <var class="Arg">string</var> must be a string, and <code class="func">TableOfMarks</code> gets the table of marks with name <var class="Arg">string</var> from the <strong class="pkg">GAP</strong> library (see <a href="chap70.html#X794ABC7187A9285B"><span class="RefLink">70.13</span></a>). If no table of marks with this name is contained in the library then <code class="keyw">fail</code> is returned.</p>
<p>In the third form, <var class="Arg">matrix</var> must be a matrix or a list of rows describing a lower triangular matrix where the part above the diagonal is omitted. For such an argument <var class="Arg">matrix</var>, <code class="func">TableOfMarks</code> returns a table of marks object (see <a href="chap70.html#X7D29539F7C14956D"><span class="RefLink">70.2</span></a>) for which <var class="Arg">matrix</var> is the matrix of marks. Note that not every matrix (containing only nonnegative integers and having lower triangular shape) describes a table of marks of a group. Necessary conditions are checked with <code class="func">IsInternallyConsistent</code> (<a href="chap70.html#X7D8B4BE08094B137"><span class="RefLink">70.9-1</span></a>) (see <a href="chap70.html#X7A40D99D7816F126"><span class="RefLink">70.9</span></a>), and <code class="keyw">fail</code> is returned if <var class="Arg">matrix</var> is proved not to describe a matrix of marks; but if <code class="func">TableOfMarks</code> returns a table of marks object created from a matrix then it may still happen that this object does not describe the table of marks of a group.</p>
<p>For an overview of operations for table of marks objects, see the introduction to Chapter <a href="chap70.html#X84DBFB8287C3F1B4"><span class="RefLink">70</span></a>.</p>
<div class="example"><pre>
<span class="GAPprompt">gap></span> <span class="GAPinput">tom:= TableOfMarks( AlternatingGroup( 5 ) );</span>
TableOfMarks( Alt( [ 1 .. 5 ] ) )
<span class="GAPprompt">gap></span> <span class="GAPinput">TableOfMarks( "J5" );</span>
fail
<span class="GAPprompt">gap></span> <span class="GAPinput">a5:= TableOfMarks( "A5" );</span>
TableOfMarks( "A5" )
<span class="GAPprompt">gap></span> <span class="GAPinput">mat:=</span>
<span class="GAPprompt">></span> <span class="GAPinput">[ [ 60, 0, 0, 0, 0, 0, 0, 0, 0 ], [ 30, 2, 0, 0, 0, 0, 0, 0, 0 ],</span>
<span class="GAPprompt">></span> <span class="GAPinput"> [ 20, 0, 2, 0, 0, 0, 0, 0, 0 ], [ 15, 3, 0, 3, 0, 0, 0, 0, 0 ],</span>
<span class="GAPprompt">></span> <span class="GAPinput"> [ 12, 0, 0, 0, 2, 0, 0, 0, 0 ], [ 10, 2, 1, 0, 0, 1, 0, 0, 0 ],</span>
<span class="GAPprompt">></span> <span class="GAPinput"> [ 6, 2, 0, 0, 1, 0, 1, 0, 0 ], [ 5, 1, 2, 1, 0, 0, 0, 1, 0 ],</span>
<span class="GAPprompt">></span> <span class="GAPinput"> [ 1, 1, 1, 1, 1, 1, 1, 1, 1 ] ];;</span>
<span class="GAPprompt">gap></span> <span class="GAPinput">TableOfMarks( mat );</span>
TableOfMarks( <9 classes> )
</pre></div>
<p>The following <code class="func">TableOfMarks</code> methods for a group are installed.</p>
<ul>
<li><p>If the group is known to be cyclic then <code class="func">TableOfMarks</code> constructs the table of marks essentially without the group, instead the knowledge about the structure of cyclic groups is used.</p>
</li>
<li><p>If the lattice of subgroups is already stored in the group then <code class="func">TableOfMarks</code> computes the table of marks from the lattice (see <code class="func">TableOfMarksByLattice</code> (<a href="chap70.html#X7B30FF3A79CCB0DF"><span class="RefLink">70.3-2</span></a>)).</p>
</li>
<li><p>If the group is known to be solvable then <code class="func">TableOfMarks</code> takes the lattice of subgroups (see <code class="func">LatticeSubgroups</code> (<a href="chap39.html#X7B104E2C86166188"><span class="RefLink">39.20-1</span></a>)) of the group –which means that the lattice is computed if it is not yet stored– and then computes the table of marks from it. This method is also accessible via the global function <code class="func">TableOfMarksByLattice</code> (<a href="chap70.html#X7B30FF3A79CCB0DF"><span class="RefLink">70.3-2</span></a>).</p>
</li>
<li><p>If the group doesn't know its lattice of subgroups or its conjugacy classes of subgroups then the table of marks and the conjugacy classes of subgroups are computed at the same time by the cyclic extension method. Only the table of marks is stored because the conjugacy classes of subgroups or the lattice of subgroups can be easily read off (see LatticeSubgroupsByTom (70.3-3)).
</li>
</ul>
<p>Conversely, the lattice of subgroups of a group with known table of marks can be computed using the table of marks, via the function <code class="func">LatticeSubgroupsByTom</code> (<a href="chap70.html#X79ABFA0A833DDCFE"><span class="RefLink">70.3-3</span></a>). This is also installed as a method for <code class="func">LatticeSubgroups</code> (<a href="chap39.html#X7B104E2C86166188"><span class="RefLink">39.20-1</span></a>).</p>
<p><a id="X7B30FF3A79CCB0DF" name="X7B30FF3A79CCB0DF"></a></p>
<h5>70.3-2 TableOfMarksByLattice</h5>
<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">‣ TableOfMarksByLattice</code>( <var class="Arg">G</var> )</td><td class="tdright">( function )</td></tr></table></div>
<p><code class="func">TableOfMarksByLattice</code> computes the table of marks of the group <var class="Arg">G</var> from the lattice of subgroups of <var class="Arg">G</var>. This lattice is computed via <code class="func">LatticeSubgroups</code> (<a href="chap39.html#X7B104E2C86166188"><span class="RefLink">39.20-1</span></a>) if it is not yet stored in <var class="Arg">G</var>. The function <code class="func">TableOfMarksByLattice</code> is installed as a method for <code class="func">TableOfMarks</code> (<a href="chap70.html#X85B262AB7E219C34"><span class="RefLink">70.3-1</span></a>) for solvable groups and groups with stored subgroup lattice, and is available as a global variable only in order to provide explicit access to this method.</p>
<p><a id="X79ABFA0A833DDCFE" name="X79ABFA0A833DDCFE"></a></p>
<h5>70.3-3 LatticeSubgroupsByTom</h5>
<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">‣ LatticeSubgroupsByTom</code>( <var class="Arg">G</var> )</td><td class="tdright">( function )</td></tr></table></div>
<p><code class="func">LatticeSubgroupsByTom</code> computes the lattice of subgroups of <var class="Arg">G</var> from the table of marks of <var class="Arg">G</var>, using <code class="func">RepresentativeTom</code> (<a href="chap70.html#X7F625AB880B73AC3"><span class="RefLink">70.10-4</span></a>).</p>
<p><a id="X7AC0FB9685DCBCFD" name="X7AC0FB9685DCBCFD"></a></p>
<h4>70.4 <span class="Heading">Printing Tables of Marks</span></h4>
<p><a id="X7DC656517D8335DC" name="X7DC656517D8335DC"></a></p>
<h5>70.4-1 ViewObj</h5>
<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">‣ ViewObj</code>( <var class="Arg">tom</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>) method for tables of marks prints the string <code class="code">"TableOfMarks"</code>, followed by –if known– the identifier (see <code class="func">Identifier</code> (<a href="chap70.html#X810E53597B5BB4F8"><span class="RefLink">70.7-9</span></a>)) or the group of the table of marks enclosed in brackets; if neither group nor identifier are known then just the number of conjugacy classes of subgroups is printed instead.</p>
<p><a id="X86379C0D7D17AD92" name="X86379C0D7D17AD92"></a></p>
<h5>70.4-2 PrintObj</h5>
<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">‣ PrintObj</code>( <var class="Arg">tom</var> )</td><td class="tdright">( method )</td></tr></table></div>
<p>The default <code class="func">PrintObj</code> (<a href="chap6.html#X815BF22186FD43C9"><span class="RefLink">6.3-5</span></a>) method for tables of marks does the same as <code class="func">ViewObj</code> (<a href="chap6.html#X815BF22186FD43C9"><span class="RefLink">6.3-5</span></a>), except that <code class="func">PrintObj</code> (<a href="chap6.html#X815BF22186FD43C9"><span class="RefLink">6.3-5</span></a>) is used for the group instead of <code class="func">ViewObj</code> (<a href="chap6.html#X815BF22186FD43C9"><span class="RefLink">6.3-5</span></a>).</p>
<p><a id="X821F9438839F445D" name="X821F9438839F445D"></a></p>
<h5>70.4-3 Display</h5>
<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">‣ Display</code>( <var class="Arg">tom</var>[, <var class="Arg">arec</var>] )</td><td class="tdright">( method )</td></tr></table></div>
<p>The default <code class="func">Display</code> (<a href="chap6.html#X83A5C59278E13248"><span class="RefLink">6.3-6</span></a>) method for a table of marks <var class="Arg">tom</var> produces a formatted output of the marks in <var class="Arg">tom</var>. Each line of output begins with the number of the corresponding class of subgroups. This number is repeated if the output spreads over several pages. The number of columns printed at one time depends on the actual line length, which can be accessed and changed by the function <code class="func">SizeScreen</code> (<a href="chap6.html#X8723E0A1837894F3"><span class="RefLink">6.12-1</span></a>).</p>
<p>An interactive variant of <code class="func">Display</code> (<a href="chap6.html#X83A5C59278E13248"><span class="RefLink">6.3-6</span></a>) is the <code class="func">Browse</code> (<a href="../../pkg/browse/doc/chap6.html#X7FDD696B7DD54A6E"><span class="RefLink">Browse: Browse</span></a>) method for tables of marks that is provided by the <strong class="pkg">GAP</strong> package <strong class="pkg">Browse</strong>, see <code class="func">Browse</code> (<a href="../../pkg/browse/doc/chap6.html#X7F4BD9C580BBBAA4"><span class="RefLink">Browse: Browse for tables of marks</span></a>).</p>
<p>The optional second argument <var class="Arg">arec</var> of <code class="func">Display</code> (<a href="chap6.html#X83A5C59278E13248"><span class="RefLink">6.3-6</span></a>) can be used to change the default style for displaying a table of marks. <var class="Arg">arec</var> must be a record, its relevant components are the following.</p>
<dl>
<dt><strong class="Mark"><code class="code">classes</code></strong></dt>
<dd><p>a list of class numbers to select only the rows and columns of the matrix that correspond to this list for printing,</p>
</dd>
<dt><strong class="Mark"><code class="code">form</code></strong></dt>
<dd><p>one of the strings <code class="code">"subgroups"</code>, <code class="code">"supergroups"</code>; in the former case, at position <span class="SimpleMath">(i,j)</span> of the matrix the number of conjugates of <span class="SimpleMath">H_j</span> contained in <span class="SimpleMath">H_i</span> is printed, and in the latter case, at position <span class="SimpleMath">(i,j)</span> the number of conjugates of <span class="SimpleMath">H_i</span> which contain <span class="SimpleMath">H_j</span> is printed.</p>
</dd>
</dl>
<div class="example"><pre>
<span class="GAPprompt">gap></span> <span class="GAPinput">tom:= TableOfMarks( "A5" );;</span>
<span class="GAPprompt">gap></span> <span class="GAPinput">Display( tom );</span>
1: 60
2: 30 2
3: 20 . 2
4: 15 3 . 3
5: 12 . . . 2
6: 10 2 1 . . 1
7: 6 2 . . 1 . 1
8: 5 1 2 1 . . . 1
9: 1 1 1 1 1 1 1 1 1
<span class="GAPprompt">gap></span> <span class="GAPinput">Display( tom, rec( classes:= [ 1, 2, 3, 4, 8 ] ) );</span>
1: 60
2: 30 2
3: 20 . 2
4: 15 3 . 3
8: 5 1 2 1 1
<span class="GAPprompt">gap></span> <span class="GAPinput">Display( tom, rec( form:= "subgroups" ) );</span>
1: 1
2: 1 1
3: 1 . 1
4: 1 3 . 1
5: 1 . . . 1
6: 1 3 1 . . 1
7: 1 5 . . 1 . 1
8: 1 3 4 1 . . . 1
9: 1 15 10 5 6 10 6 5 1
<span class="GAPprompt">gap></span> <span class="GAPinput">Display( tom, rec( form:= "supergroups" ) );</span>
1: 1
2: 15 1
3: 10 . 1
4: 5 1 . 1
5: 6 . . . 1
6: 10 2 1 . . 1
7: 6 2 . . 1 . 1
8: 5 1 2 1 . . . 1
9: 1 1 1 1 1 1 1 1 1
</pre></div>
<p><a id="X82385925797B5108" name="X82385925797B5108"></a></p>
<h4>70.5 <span class="Heading">Sorting Tables of Marks</span></h4>
<p><a id="X786A948E82C36F0E" name="X786A948E82C36F0E"></a></p>
<h5>70.5-1 SortedTom</h5>
<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">‣ SortedTom</code>( <var class="Arg">tom</var>, <var class="Arg">perm</var> )</td><td class="tdright">( operation )</td></tr></table></div>
<p><code class="func">SortedTom</code> returns a table of marks where the rows and columns of the table of marks <var class="Arg">tom</var> are reordered according to the permutation <var class="Arg">perm</var>.</p>
<p><em>Note</em> that in each table of marks in <strong class="pkg">GAP</strong>, the matrix of marks is assumed to have lower triangular shape (see <a href="chap70.html#X7D29539F7C14956D"><span class="RefLink">70.2</span></a>). If the permutation <var class="Arg">perm</var> does <em>not</em> have this property then the functions for tables of marks might return wrong results when applied to the output of <code class="func">SortedTom</code>.</p>
<p>The returned table of marks has only those attribute values stored that are known for <var class="Arg">tom</var> and listed in <code class="func">TableOfMarksComponents</code> (<a href="chap70.html#X87789FD27831B2A2"><span class="RefLink">70.6-4</span></a>).</p>
<div class="example"><pre>
<span class="GAPprompt">gap></span> <span class="GAPinput">tom:= TableOfMarksCyclic( 6 );; Display( tom );</span>
1: 6
2: 3 3
3: 2 . 2
4: 1 1 1 1
<span class="GAPprompt">gap></span> <span class="GAPinput">sorted:= SortedTom( tom, (2,3) );; Display( sorted );</span>
1: 6
2: 2 2
3: 3 . 3
4: 1 1 1 1
<span class="GAPprompt">gap></span> <span class="GAPinput">wrong:= SortedTom( tom, (1,2) );; Display( wrong );</span>
1: 3
2: . 6
3: . 2 2
4: 1 1 1 1
</pre></div>
<p><a id="X7EFD937D804662F6" name="X7EFD937D804662F6"></a></p>
<h5>70.5-2 PermutationTom</h5>
<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">‣ PermutationTom</code>( <var class="Arg">tom</var> )</td><td class="tdright">( attribute )</td></tr></table></div>
<p>For the table of marks <var class="Arg">tom</var> of the group <span class="SimpleMath">G</span> stored as <code class="func">UnderlyingGroup</code> (<a href="chap70.html#X81E41D3880FA6C4C"><span class="RefLink">70.7-7</span></a>) value of <var class="Arg">tom</var>, <code class="func">PermutationTom</code> is a permutation <span class="SimpleMath">π</span> such that the <span class="SimpleMath">i</span>-th conjugacy class of subgroups of <span class="SimpleMath">G</span> belongs to the <span class="SimpleMath">i^π</span>-th column and row of marks in <var class="Arg">tom</var>.</p>
<p>This attribute value is bound only if <var class="Arg">tom</var> was obtained from another table of marks by permuting with <code class="func">SortedTom</code> (<a href="chap70.html#X786A948E82C36F0E"><span class="RefLink">70.5-1</span></a>), and there is no default method to compute its value.</p>
<p>The attribute is necessary because the original and the sorted table of marks have the same identifier and the same group, and information computed from the group may depend on the ordering of marks, for example the fusion from the ordinary character table of <span class="SimpleMath">G</span> into <var class="Arg">tom</var>.</p>
<div class="example"><pre>
<span class="GAPprompt">gap></span> <span class="GAPinput">MarksTom( tom )[2];</span>
[ 3, 3 ]
<span class="GAPprompt">gap></span> <span class="GAPinput">MarksTom( sorted )[2];</span>
[ 2, 2 ]
<span class="GAPprompt">gap></span> <span class="GAPinput">HasPermutationTom( sorted );</span>
true
<span class="GAPprompt">gap></span> <span class="GAPinput">PermutationTom( sorted );</span>
(2,3)
</pre></div>
<p><a id="X82271C4F7FD21FAA" name="X82271C4F7FD21FAA"></a></p>
<h4>70.6 <span class="Heading">Technical Details about Tables of Marks</span></h4>
<p><a id="X870985C58547FED4" name="X870985C58547FED4"></a></p>
<h5>70.6-1 InfoTom</h5>
<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">‣ InfoTom</code></td><td class="tdright">( info class )</td></tr></table></div>
<p>is the info class for computations concerning tables of marks.</p>
<p><a id="X7AC1A73D8100C7EC" name="X7AC1A73D8100C7EC"></a></p>
<h5>70.6-2 IsTableOfMarks</h5>
<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">‣ IsTableOfMarks</code>( <var class="Arg">obj</var> )</td><td class="tdright">( category )</td></tr></table></div>
<p>Each table of marks belongs to this category.</p>
<p><a id="X7ACF943D84BDF89E" name="X7ACF943D84BDF89E"></a></p>
<h5>70.6-3 TableOfMarksFamily</h5>
<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">‣ TableOfMarksFamily</code></td><td class="tdright">( family )</td></tr></table></div>
<p>Each table of marks belongs to this family.</p>
<p><a id="X87789FD27831B2A2" name="X87789FD27831B2A2"></a></p>
<h5>70.6-4 TableOfMarksComponents</h5>
<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">‣ TableOfMarksComponents</code></td><td class="tdright">( global variable )</td></tr></table></div>
<p>The list <code class="func">TableOfMarksComponents</code> is used when a table of marks object is created from a record via <code class="func">ConvertToTableOfMarks</code> (<a href="chap70.html#X8491CDBF8543A7D5"><span class="RefLink">70.6-5</span></a>). <code class="func">TableOfMarksComponents</code> contains at position <span class="SimpleMath">2i-1</span> a name of an attribute and at position <span class="SimpleMath">2i</span> the corresponding attribute getter function.</p>
<p><a id="X8491CDBF8543A7D5" name="X8491CDBF8543A7D5"></a></p>
<h5>70.6-5 ConvertToTableOfMarks</h5>
<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">‣ ConvertToTableOfMarks</code>( <var class="Arg">record</var> )</td><td class="tdright">( function )</td></tr></table></div>
<p><code class="func">ConvertToTableOfMarks</code> converts a record with components from <code class="func">TableOfMarksComponents</code> (<a href="chap70.html#X87789FD27831B2A2"><span class="RefLink">70.6-4</span></a>) into a table of marks object with the corresponding attributes.</p>
<div class="example"><pre>
<span class="GAPprompt">gap></span> <span class="GAPinput">record:= rec( MarksTom:= [ [ 4 ], [ 2, 2 ], [ 1, 1, 1 ] ],</span>
<span class="GAPprompt">></span> <span class="GAPinput"> SubsTom:= [ [ 1 ], [ 1, 2 ], [ 1, 2, 3 ] ] );;</span>
<span class="GAPprompt">gap></span> <span class="GAPinput">ConvertToTableOfMarks( record );;</span>
<span class="GAPprompt">gap></span> <span class="GAPinput">record;</span>
TableOfMarks( <3 classes> )
</pre></div>
<p><a id="X838D3B87827D6923" name="X838D3B87827D6923"></a></p>
<h4>70.7 <span class="Heading">Attributes of Tables of Marks</span></h4>
<p><a id="X78F486A28561D006" name="X78F486A28561D006"></a></p>
<h5>70.7-1 MarksTom</h5>
<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">‣ MarksTom</code>( <var class="Arg">tom</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">‣ SubsTom</ | |