This document is only concerned with the representation of resolutions in Hap. Note that it is not a part of Hap. The framework provided here is just an extension of Hap data types used in HAPcryst and HAPprime.

From now on, let G be a group and dots -> M_n-> M_n-1->dots-> M_1-> M_0-> Z be a resolution with free ZG modules M_i.

The elements of the modules M_i can be represented in different ways. This is what makes different representations for resolutions desirable. First, we will look at the standard representation (`HapResolutionRep`

) as it is defined in Hap. After that, we will present another representation for infinite groups. Note that all non-standard representations must be sub-representations of the standard representation to ensure compatibility with Hap.

`HapResolutionRep`

For every M_i we fix a basis and number its elements. Furthermore, it is assumed that we have a (partial) enumeration of the group of a resolution. In practice this is done by generating a lookup table on the fly.

In standard representation, the elements of the modules M_k are represented by lists -"words"- of pairs of integers. A letter `[i,g]`

of such a word consists of the number of a basis element `i`

or `-i`

for its additive inverse and a number g representing a group element.

A `HapResolution`

in `HapResolutionRep`

representation is a component object with the components

`group`

, a group of arbitrary type.`elts`

, a (partial) list of (possibly duplicate) elements in G. This list provides the "enumeration" of the group. Note that there are functions in Hap which assume that`elts[1]`

is the identity element of G.`appendToElts(g)`

a function that appends the group element`g`

to`.elts`

. This is not documented in Hap 1.8.6 but seems to be required for infinite groups. This requirement might vanish in some later version of Hap [G. Ellis, private communication].`dimension(k)`

, a function which returns the ZG-rank of the Module M_k`boundary(k,j)`

, a function which returns the image in M_k-1 of the jth free generator of M_k. Note that negative j are valid as input as well. In this case the additive inverse of the boundary of the jth generator is returned`homotopy(k,[i,g])`

a function which returns the image in M_k+1, under a contracting homotopy M_k -> M_k+1, of the element`[[i,g]]`

in M_k. The value of this might be`fail`

. However, currently (version 1.8.4) some Hap functions assume that`homotopy`

is a function without testing.`properties`

, a list of pairs`["name","value"]`

"name" is a string and value is anything (boolean, number, string...). Every`HapResolution`

(regardless of representation) has to have`["type","resolution"]`

,`["length",length]`

where`length`

is the length of the resolution and`["characteristic",char]`

. Currently (Hap 1.8.6),`length`

must not be`infinity`

. The values of these properties can be tested using the Hap function`EvaluateProperty(resolution,propertyname)`

.

Note that making `HapResolution`

s immutable will make the `.elts`

component immutable. As this lookup table might change during calculations, we do not recommend using immutable resolutions (in any representation).

`HapLargeGroupResolutionRep`

RepresentationIn this sub-representation of the standard representation, the module elements in this resolution are lists of groupring elements. So the lookup table `.elts`

is not used as long as no conversion to standard representation takes place. In addition to the components of a `HapResolution`

, a resolution in large group representation has the following components:

`boundary2(resolution,term,gen)`

, a function that returns the boundary of the`gen`th generator of the`term`th module.`groupring`

the group ring of the resolution`resolution`.`dimension2(resolution,term)`

a function that returns the dimension of the`term`th module of the resolution`resolution`.

The effort of having two versions of `boundary`

and `dimension`

is necessary to keep the structure compatible with the usual Hap resolution.

generated by GAPDoc2HTML