Sophie

Sophie

distrib > Mandriva > 2010.0 > i586 > media > contrib-release > by-pkgid > 91213ddcfbe7f54821d42c2d9e091326 > files > 2904

gap-system-packages-4.4.12-5mdv2010.0.i586.rpm

<?xml version="1.0" encoding="ISO-8859-1"?>

<!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 (UnitLib) - Chapter 3: Details of implementation</title>
<meta http-equiv="content-type" content="text/html; charset=iso-8859-1" />
<meta name="generator" content="GAPDoc2HTML" />
<link rel="stylesheet" type="text/css" href="manual.css" />
</head>
<body>


<div class="pcenter"><table class="chlink"><tr><td class="chlink1">Goto Chapter: </td><td><a href="chap0.html">Top</a></td><td><a href="chap1.html">1</a></td><td><a href="chap2.html">2</a></td><td><a href="chap3.html">3</a></td><td><a href="chap4.html">4</a></td><td><a href="chapBib.html">Bib</a></td><td><a href="chapInd.html">Ind</a></td></tr></table><br /></div>
<p><a id="s0ss0" name="s0ss0"></a></p>

<h3>3. Details of implementation</h3>

<p>In this chapter we describe the approach used to store the normalized unit group of the group algebra in the library, and to reconstruct the group V(KG) from the stored information.</p>

<p><a id="s1ss0" name="s1ss0"></a></p>

<h4>3.1 Saving the data</h4>

<p>To compute the pc-presentation of the normalized unit group of the modular group algebra of a finite p-group we used the function <code class="code">PcNormalizedUnitGroup</code> from the <strong class="pkg">LAGUNA</strong> package. It uses the algorithm descibed in <a href="chapBib.html#biBBovdi">[B98]</a>. See the <strong class="pkg">LAGUNA</strong> manual <a href="chapBib.html#biBLaguna">[BK+]</a> for more details.</p>

<p>When this group is computed, the main idea is to use <strong class="pkg">GAP</strong> function <code class="code">CodePcGroup</code> that returns the code for the polycyclic generating sequence of the group, and then to create the group from this code using the <strong class="pkg">GAP</strong> function <code class="code">PcGroupCode</code>.</p>

<p>The resulting code could be very long, and to compress it we used the <strong class="pkg">GAP</strong> function <code class="code">HexStringInt</code> than returns a string that represents the code with hexa-decimal digits (using A-F as digits 10-15). The inverse translation then can be performed with the <strong class="pkg">GAP</strong> function <code class="code">IntHexString</code>. This allowed to save almost 20 MB of space on groups of order 128 and reduce the total size of their database to 90 MB.</p>

<p>For groups of order 128 we decided to compress the library with the <code class="file">gzip</code> program, and then uncompress each file "on fly" when it is requested. This allowed us to reduce the size of their part in the library from 90 to 12 MB, which is already quite reasonable. Of course, there is some little overhead arising from the uncompression and subsequent translation from hexa-decimal notation, but it is neglectible comparatively with the total time of the computation of V(KG) from scratch.</p>

<p>There is one more thing that needs to be stored together with this code to make it sure that we will correctly indentify the underlying group G of the group algebra KG with its image in the pc-presentation of the normalized unit group V(KG).</p>

<p>The group G is extracted from the <strong class="pkg">GAP</strong> Small Groups Library, so it is always the same, unless its description in the library will be changed (and it will be an important task of <strong class="pkg">UnitLib</strong> maintaner to update the package in this case!), and here we are safe from inconsistencies.</p>

<p>But the next stage is the computation of generators of the normalized unit group V(KG), and the first step is the dimension basis of the group G, that can be computed using the <strong class="pkg">LAGUNA</strong> function <code class="code">DimensionBasis</code>. To avoid the influence of possible changes in <strong class="pkg">GAP</strong> or usage of random methods, we store (in compacted form) the information about the dimension basis of G in the <strong class="pkg">UnitLib</strong>.</p>

<p>All further procedures are implemented inside the <strong class="pkg">LAGUNA</strong> package, and their result is uniquely determined and predictable.</p>

<p>For most groups all information is stored in a single file. However, this is not the case for groups of order 243, where we have about 30 MB of data for 67 groups. For these groups we provide a solution on the base of Web-services. The information about the dimension basis is stored locally, while the codes for polycyclic generating sequences are available from the <strong class="pkg">UnitLib</strong> homepage, and the package will access them using the <code class="code">Curl</code> function from the <strong class="pkg">Qaos</strong> package <a href="chapBib.html#biBQaoS">[FP]</a>.</p>

<p>For the reader interested in more details, the package contains the file <code class="file">unitlib/lib/genlib.g</code> with the function <code class="code">CreatePcNormalizedUnitGroupsLibrary</code>, that creates library files for groups of a given prime power order, and the file <code class="file">unitlib/lib/genpar.g</code> with the function <code class="code">ParCreatePcNormalizedUnitGroupsLibrary</code>, which is the parallel version of the previous function and must be used with the <strong class="pkg">ParGAP</strong> package <a href="chapBib.html#biBParGAP">[C]</a>.</p>

<p><a id="s2ss0" name="s2ss0"></a></p>

<h4>3.2 Reading the data</h4>

<p>To reconstruct the normalized unit group V(KG) from the library, we need only to know the catalogue number of the underlying group G in the <strong class="pkg">GAP</strong> Small Groups Library.</p>

<p>We use the same numbering as in the <strong class="pkg">GAP</strong> Small Group Library, so <strong class="pkg">UnitLib</strong> finds the appropriate library file(s) and reads from it the code for the polycyclic generating sequence of V(KG) and the information about the dimension basis of G used for the computation of this code.</p>

<p>Then V(KG) is created from the code using the <strong class="pkg">GAP</strong> function <code class="code">PcGroupCode</code>. We also create G using the <strong class="pkg">GAP</strong> Small Groups Library.</p>

<p>Now to "glue" V(KG) with the underlying group G properly, the value of the attribute <code class="code">DimensionBasis</code> of G is setted in accordance with the data retrieved from the library. This will guarantee the correct construction of <code class="code">NaturalBijectionToPcNormalizedUnitGroup</code> and <code class="code">NaturalBijectionToNormalizedUnitGroup</code> by the <strong class="pkg">LAGUNA</strong> package.</p>

<p>It remains now to make only several technical steps, such as constructing the group algebra KG over the appropriate field K, and storing KG in the attribute <code class="code">UnderlyingGroupRing</code> of V(KG) and V(KG) in the attribute <code class="code">PcNormalizedUnitGroup</code> of KG.</p>


<div class="pcenter">
<table class="chlink"><tr><td><a href="chap0.html">Top of Book</a></td><td><a href="chap2.html">Previous Chapter</a></td><td><a href="chap4.html">Next Chapter</a></td></tr></table>
<br />


<div class="pcenter"><table class="chlink"><tr><td class="chlink1">Goto Chapter: </td><td><a href="chap0.html">Top</a></td><td><a href="chap1.html">1</a></td><td><a href="chap2.html">2</a></td><td><a href="chap3.html">3</a></td><td><a href="chap4.html">4</a></td><td><a href="chapBib.html">Bib</a></td><td><a href="chapInd.html">Ind</a></td></tr></table><br /></div>

</div>

<hr />
<p class="foot">generated by <a href="http://www.math.rwth-aachen.de/~Frank.Luebeck/GAPDoc">GAPDoc2HTML</a></p>
</body>
</html>