<Chapter><Heading> <M>FpG</M>-modules</Heading> <Section><Heading> &nbsp;</Heading> 
<ManSection> <Var Name="CompositionSeriesOfFpGModules"/> <Description> <P/> Inputs an <M>FpG</M>-module <M>M</M> and returns a list of <M>FpG</M>-modules that constitute a composition series for <M>M</M>. <P/><B>Examples:</B> 
</Description> </ManSection> 
<ManSection> <Func Name="DirectSumOfFpGModules" Arg="M,N"/> <Func Name="DirectSumOfFpGModules" Arg="[ M[1], M[2], ..., M[k] ]"/> <Description> <P/> Inputs two <M>FpG</M>-modules <M>M</M> and <M>N</M> with common group and characteristic. It returns the direct sum of <M>M</M> and <M>N</M> as an <M>FpG</M>-Module. <P/> Alternatively, the function can input a list of <M>FpG</M>-modules with common group <M>G</M>. It returns the direct sum of the list. <P/><B>Examples:</B> 
</Description> </ManSection> 
<ManSection> <Func Name="FpGModule" Arg="A,P"/> <Func Name="FpGModule" Arg="A,G,p"/> <Description> <P/> Inputs a <M>p</M>-group <M>P</M> and a matrix <M>A</M> whose rows have length a multiple of the order of <M>G</M>. It returns the <Quoted>canonical</Quoted> <M>FpG</M>-module generated by the rows of <M>A</M>. <P/> A small non-prime-power group <M>G</M> can also be input, provided the characteristic <M>p</M> is entered as a third input variable. <P/><B>Examples:</B> <URL><Link>../tutorial/chap11.html</Link><LinkText>1</LinkText></URL>&nbsp;, <URL><Link>../www/SideLinks/About/aboutAbelianCategories.html</Link><LinkText>2</LinkText></URL>&nbsp;, <URL><Link>../www/SideLinks/About/aboutIntro.html</Link><LinkText>3</LinkText></URL>&nbsp;, <URL><Link>../www/SideLinks/About/aboutTorAndExt.html</Link><LinkText>4</LinkText></URL>&nbsp;
</Description> </ManSection> 
<ManSection> <Func Name="FpGModuleDualBasis" Arg="M"/> <Description> <P/> Inputs an <M>FpG</M>-module <M>M</M>. It returns a record <M>R</M> with two components: <List> <Item><M>R.freeModule</M> is the free module <M>FG</M> of rank one.</Item> <Item><M>R.basis</M> is a list representing an <M>F</M>-basis for the module <M>Hom_{FG}(M,FG)</M>. Each term in the list is a matrix <M>A</M> whose rows are vectors in <M>FG</M> such that <M>M!.generators[i] \longrightarrow A[i]</M> extends to a module homomorphism <M>M \longrightarrow FG</M>. </Item> </List> <P/><B>Examples:</B> 
</Description> </ManSection> 
<ManSection> <Func Name="FpGModuleHomomorphism" Arg="M,N,A"/> <Func Name="FpGModuleHomomorphismNC" Arg="M,N,A"/> <Description> <P/> Inputs <M>FpG</M>-modules <M>M</M> and <M>N</M> over a common <M>p</M>-group <M>G</M>. Also inputs a list <M>A</M> of vectors in the vector space spanned by <M>N!.matrix</M>. It tests that the function <P/> <M> M!.generators[i] \longrightarrow A[i]</M> <P/> extends to a homomorphism of <M>FpG</M>-modules and, if the test is passed, returns the corresponding <M>FpG</M>-module homomorphism. If the test is failed it returns fail. <P/> The "NC" version of the function assumes that the input defines a homomorphism and simply returns the <M>FpG</M>-module homomorphism. <P/><B>Examples:</B> 
</Description> </ManSection> 
<ManSection> <Func Name="DesuspensionFpGModule" Arg="M,n"/> <Func Name="DesuspensionFpGModule" Arg="R,n"/> <Description> <P/> Inputs a positive integer <M>n</M> and and FpG-module <M>M</M>. It returns an FpG-module <M>D^nM</M> which is mathematically related to <M>M</M> via an exact sequence <M> 0 \longrightarrow D^nM \longrightarrow R_n \longrightarrow \ldots \longrightarrow R_0 \longrightarrow M \longrightarrow 0</M> where <M>R_\ast</M> is a free resolution. (If <M>G=Group(M)</M> is of prime-power order then the resolution is minimal.) <P/> Alternatively, the function can input a positive integer <M>n</M> and at least <M>n</M> terms of a free resolution <M>R</M> of <M>M</M>. <P/><B>Examples:</B> 
</Description> </ManSection> 
<ManSection> <Func Name="RadicalOfFpGModule" Arg="M"/> <Description> <P/> Inputs an <M>FpG</M>-module <M>M</M> with <M>G</M> a <M>p</M>-group, and returns the Radical of <M>M</M> as an <M>FpG</M>-module. (Ig <M>G</M> is not a <M>p</M>-group then a submodule of the radical is returned. <P/><B>Examples:</B> 
</Description> </ManSection> 
<ManSection> <Func Name="RadicalSeriesOfFpGModule" Arg="M"/> <Description> <P/> Inputs an <M>FpG</M>-module <M>M</M> and returns a list of <M>FpG</M>-modules that constitute the radical series for <M>M</M>. <P/><B>Examples:</B> 
</Description> </ManSection> 
<ManSection> <Func Name="GeneratorsOfFpGModule" Arg="M"/> <Description> <P/> Inputs an <M>FpG</M>-module <M>M</M> and returns a matrix whose rows correspond to a minimal generating set for <M>M</M>. <P/><B>Examples:</B> 
</Description> </ManSection> 
<ManSection> <Func Name="ImageOfFpGModuleHomomorphism" Arg="f"/> <Description> <P/> Inputs an <M>FpG</M>-module homomorphism <M>f:M \longrightarrow N</M> and returns its image <M>f(M)</M> as an <M>FpG</M>-module. <P/><B>Examples:</B> 
</Description> </ManSection> 
<ManSection> <Func Name="GroupAlgebraAsFpGModule" Arg="G"/> <Description> <P/> Inputs a <M>p</M>-group <M>G</M> and returns its mod <M>p</M> group algebra as an <M>FpG</M>-module. <P/><B>Examples:</B> 
</Description> </ManSection> 
<ManSection> <Func Name="IntersectionOfFpGModules" Arg="M,N"/> <Description> <P/> Inputs two <M>FpG</M>-modules <M>M, N</M> arising as submodules in a common free module <M>(FG)^n</M> where <M>G</M> is a finite group and <M>F</M> the field of <M>p</M>-elements. It returns the <M>FpG</M>-module arising as the intersection of <M>M</M> and <M>N</M>. <P/><B>Examples:</B> 
</Description> </ManSection> 
<ManSection> <Func Name="IsFpGModuleHomomorphismData" Arg="M,N,A"/> <Description> <P/> Inputs <M>FpG</M>-modules <M>M</M> and <M>N</M> over a common <M>p</M>-group <M>G</M>. Also inputs a list <M>A</M> of vectors in the vector space spanned by <M>N!.matrix</M>. It returns true if the function <P/> <M> M!.generators[i] \longrightarrow A[i]</M> <P/> extends to a homomorphism of <M>FpG</M>-modules. Otherwise it returns false. <P/><B>Examples:</B> 
</Description> </ManSection> 
<ManSection> <Func Name="MaximalSubmoduleOfFpGModule" Arg="M"/> <Description> <P/> Inputs an <M>FpG</M>-module <M>M</M> and returns one maximal <M>FpG</M>-submodule of <M>M</M>. <P/><B>Examples:</B> 
</Description> </ManSection> 
<ManSection> <Func Name="MaximalSubmodulesOfFpGModule" Arg="M"/> <Description> <P/> Inputs an <M>FpG</M>-module <M>M</M> and returns the list of maximal <M>FpG</M>-submodules of <M>M</M>. <P/><B>Examples:</B> 
</Description> </ManSection> 
<ManSection> <Func Name="MultipleOfFpGModule" Arg="w,M"/> <Description> <P/> Inputs an <M>FpG</M>-module <M>M</M> and a list <M>w:=[g_1 , ..., g_t]</M> of elements in the group <M>G=M!.group</M>. The list <M>w</M> can be thought of as representing the element <M>w=g_1 + \ldots + g_t</M> in the group algebra <M>FG</M>, and the function returns a semi-echelon matrix <M>B</M> which is a basis for the vector subspace <M>wM</M> . <P/><B>Examples:</B> 
</Description> </ManSection> 
<ManSection> <Func Name="ProjectedFpGModule" Arg="M,k"/> <Description> <P/> Inputs an <M>FpG</M>-module <M>M</M> of ambient dimension <M>n|G|</M>, and an integer <M>k</M> between <M>1</M> and <M>n</M>. The module <M>M</M> is a submodule of the free module <M>(FG)^n</M> . Let <M>M_k</M> denote the intersection of <M>M</M> with the last <M>k</M> summands of <M>(FG)^n</M> . The function returns the image of the projection of <M>M_k</M> onto the <M>k</M>-th summand of <M>(FG)^n</M> . This image is returned an <M>FpG</M>-module with ambient dimension <M>|G|</M>. <P/><B>Examples:</B> 
</Description> </ManSection> 
<ManSection> <Func Name="RandomHomomorphismOfFpGModules" Arg="M,N"/> <Description> <P/> Inputs two <M>FpG</M>-modules <M>M</M> and <M>N</M> over a common group <M>G</M>. It returns a random matrix <M>A</M> whose rows are vectors in <M>N</M> such that the function <P/> <M> M!.generators[i] \longrightarrow A[i]</M> <P/> extends to a homomorphism <M>M \longrightarrow N</M> of <M>FpG</M>-modules. (There is a problem with this function at present.) <P/><B>Examples:</B> 
</Description> </ManSection> 
<ManSection> <Func Name="Rank" Arg="f"/> <Description> <P/> Inputs an <M>FpG</M>-module homomorphism <M>f:M \longrightarrow N</M> and returns the dimension of the image of <M>f</M> as a vector space over the field <M>F</M> of <M>p</M> elements. <P/><B>Examples:</B> <URL><Link>../tutorial/chap1.html</Link><LinkText>1</LinkText></URL>&nbsp;, <URL><Link>../tutorial/chap7.html</Link><LinkText>2</LinkText></URL>&nbsp;, <URL><Link>../www/SideLinks/About/aboutPeriodic.html</Link><LinkText>3</LinkText></URL>&nbsp;
</Description> </ManSection> 
<ManSection> <Func Name="SumOfFpGModules" Arg="M,N"/> <Description> <P/> Inputs two <M>FpG</M>-modules <M>M, N</M> arising as submodules in a common free module <M>(FG)^n</M> where <M>G</M> is a finite group and <M>F</M> the field of <M>p</M>-elements. It returns the <M>FpG</M>-Module arising as the sum of <M>M</M> and <M>N</M>. <P/><B>Examples:</B> 
</Description> </ManSection> 
<ManSection> <Func Name="SumOp" Arg="f,g"/> <Description> <P/> Inputs two <M>FpG</M>-module homomorphisms <M>f,g:M \longrightarrow N</M> with common sorce and common target. It returns the sum <M>f+g:M \longrightarrow N</M> . (This operation is also available using "+". <P/><B>Examples:</B> 
</Description> </ManSection> 
<ManSection> <Func Name="VectorsToFpGModuleWords" Arg="M,L"/> <Description> <P/> Inputs an <M>FpG</M>-module <M>M</M> and a list <M>L=[v_1,\ldots ,v_k]</M> of vectors in <M>M</M>. It returns a list <M>L'= [x_1,...,x_k]</M> . Each <M>x_j=[[W_1,G_1],...,[W_t,G_t]]</M> is a list of integer pairs corresponding to an expression of <M>v_j</M> as a word <P/> <M> v_j = g_1*w_1 + g_2*w_1 + ... + g_t*w_t </M> <P/> where <P/> <M>g_i=Elements(M!.group)[G_i]</M> <P/> <M>w_i=GeneratorsOfFpGModule(M)[W_i]</M> . <P/><B>Examples:</B> 
</Description> </ManSection> </Section> </Chapter>