Face Lattice and Resolution

For Bieberbach groups (torsion free crystallographic groups), the following functions calcualte free resolutions. This calculation is done by finding a fundamental domain for the group.

For a description of the HapResolution datatype, see the `Hap` data types documentation or the experimental datatypes documentation

a HAPresolution
Let G be a Bieberbach group given as an AffineCrystGroupOnRight and v a vector. Then a Dirichlet domain with respect to v is calculated using . From this domain, a resolution is calculated using and . If v is not given, the origin is used.
gap> R:=ResolutionBieberbachGroup(SpaceGroup(3,9)); Resolution of length 3 in characteristic 0 for SpaceGroupOnRightBBNWZ( 3, 2, 2, 2, 2 ) . No contracting homotopy available.

gap> List([0..3],Dimension(R)); [ 1, 3, 3, 1 ] gap> R:=ResolutionBieberbachGroup(SpaceGroup(3,9),[1/2,0,0]); Resolution of length 3 in characteristic 0 for SpaceGroupOnRightBBNWZ( 3, 2, 2, 2, 2 ) . No contracting homotopy available.

gap> List([0..3],Dimension(R)); [ 6, 12, 7, 1 ]
Record with entries .hasse and .elts representing a part of the hasse diagram and a lookup table of group elements
Let group be a torsion free AffineCrystGroupOnRight (that is, a Bieberbach group). Given a PolymakeObject poly representing a fundamental domain for group, this method uses `polymaking` to calculate the face lattice of poly. From the set of faces, a system of representatives for group- orbits is chosen. For each representative, the boundary is then calculated. The list .elts contains elements of group (in fact, it is even a set). The structure of the returned list .hasse is as follows: The i-th entry contains a system of representatives for the i-1 dimensional faces of poly. Each face is represented by a pair of lists [vertices,boundary]. The list of integers vertices represents the vertices of poly which are contained in this face. The enumeration is chosen such that an i in the list represents the i-th entry of the list Polymake(poly,"VERTICES"); The list boundary represents the boundary of the respective face. It is a list of pairs of integers [j,g]. The first entry lies between -n and n, where n is the number of faces of dimension i-1. This entry represents a face of dimension i-1 (or its additive inverse as a module generator). The second entry g is the position of the matrix in .elts. This representation is compatible with the representation of free \Z G modules in `Hap` and this method essentially calculates a free resolution of group. If the value of is 2 or more, additional information about the number of faces in every codimension, the number of orbits of the group on the free module generated by those faces, and the time it took to calculate the orbit decomposition is output.
gap> SetInfoLevel(InfoHAPcryst,2); gap> G:=SpaceGroup(3,165); SpaceGroupOnRightBBNWZ( 3, 6, 1, 1, 4 ) gap> fd:=FundamentalDomainBieberbachGroup(G); <polymake object> gap> fl:=FaceLatticeAndBoundaryBieberbachGroup(fd,G);; #I 1(4/8): 0:00:00.004 #I 2(5/18): 0:00:00.000 #I 3(2/12): 0:00:00.000 #I Face lattice done ( 0:00:00.004). Calculating boundary #I done ( 0:00:00.004) Reformating... gap> RecNames(fl); [ "hasse", "elts", "groupring" ] gap> fl.groupring; <free left module over Integers, and ring-with-one, with 10 generators>
Free resolution
If fl is the record output by and group is the corresponding group, this function returns a HapResolution.

Of course, fl has to be generated from a fundamental domain for group
gap> G:=SpaceGroup(3,165); SpaceGroupOnRightBBNWZ( 3, 6, 1, 1, 4 ) gap> fd:=FundamentalDomainBieberbachGroup(G); <polymake object> gap> fl:=FaceLatticeAndBoundaryBieberbachGroup(fd,G);; gap> ResolutionFromFLandBoundary(fl,G); Resolution of length 3 in characteristic 0 for SpaceGroupOnRightBBNWZ( 3, 6, 1, 1, 4 ) . No contracting homotopy available.

gap> ResolutionFromFLandBoundary(fl,G); Resolution of length 3 in characteristic 0 for SpaceGroupOnRightBBNWZ( 3, 6, 1, 1, 4 ) . No contracting homotopy available.

gap> List([0..4],Dimension(last)); [ 2, 5, 4, 1, 0 ]