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 genth generator of the termth module.
groupring
the group ring of the resolution resolution.
dimension2(resolution,term)
a function that returns the dimension of the termth 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