Using the functions available for pcp groups in the share package polycyclic it is now easy to redo some of the calculations of KD. As a first example we check whether the groups indicated as torsion free in KD are also determined as torsion free ones by GAP. In KD these almost Bieberbach groups are listed as ``ABgroups''. So for type ``013'' these are the groups with parameters (k,0,1,0,1,0) where k is an even integer. Let's look at some examples in GAP:
gap> G:=AlmostCrystallographicPcpDim4("013",[8,0,1,0,1,0]); Pcpgroup with orders [ 2, 2, 0, 0, 0, 0 ] gap> IsTorsionFree(G); true gap> G:=AlmostCrystallographicPcpDim4("013",[9,0,1,0,1,0]); Pcpgroup with orders [ 2, 2, 0, 0, 0, 0 ] gap> IsTorsionFree(G); false
Further, there is also some cohomology information in the tables of KD. In fact, the groups in this library were obtained as extensions E of the form

where, in the 4dimensional case Q = E/〈d 〉. The cohomology information for the particular example above shows that the groups determined by a parameter set (k_{1},k_{2},k_{3},k_{4},k_{4},k_{6}) are equivalent as extensions to the groups determined by the parameters (k_{1}, k_{2} mod 2, k_{3} mod 2, k_{4} mod 2, k_{5} mod 2, 0). This is also visible in finding torsion:
gap> G:=AlmostCrystallographicPcpDim4("013",[10,0,2,0,1,0]); Pcpgroup with orders [ 2, 2, 0, 0, 0, 0 ] gap> IsTorsionFree(G); false gap> G:=AlmostCrystallographicPcpDim4("013",[10,0,3,0,1,9]); Pcpgroup with orders [ 2, 2, 0, 0, 0, 0 ] gap> IsTorsionFree(G); true
The computation of cohomology groups played an important role in the classification of the almost Bieberbach groups in KD. Using GAP, it is now possible to check these computations. As an example we consider the 4dimensional almost crystallographic groups of type 85 on page 202 of KD. This group E has 6 generators. In the table, one also finds the information

for Q=E/〈d 〉 as above. Moreover, the Qmodule Z is in fact the group 〈d 〉, where the Qaction comes from conjugation inside E. In the case of groups of type 85, Z is a trivial Qmodule. The following example demonstrates how to (re)compute this twocohomology group H^{2}(Q,Z).
gap> G:=AlmostCrystallographicPcpGroup(4, "085", false); Pcp group with orders [ 2, 4, 0, 0, 0, 0 ] gap> GroupGeneratedByd:=Subgroup(G, [G.6] ); Pcp group with orders [ 0 ] gap> Q:=G/GroupGeneratedByd; Pcp group with orders [ 2, 4, 0, 0, 0 ] gap> action:=List( Pcp(Q), x > [[1]] ); [ [ [ 1 ] ], [ [ 1 ] ], [ [ 1 ] ], [ [ 1 ] ], [ [ 1 ] ] ] gap> C:=CRRecordByMats( Q, action);; gap> TwoCohomologyCR( C ).factor.rels; [ 2, 2, 4, 0 ]
This last line gives us the abelian invariants of the second cohomology group H^{2}(Q,Z). So we should read this line as

which indeed coincides with the information in KD.
As another application of the capabilities of the combination of
aclib
and polycyclic we check some computations of DM.
Section 5 of the paper DM is completely devoted to an example of the computation of the Plocalization of a virtually nilpotent group, where P is a set of primes. Although it is not our intention to develop the theory of Plocalization of groups at this place, let us summarize some of the main results concerning this topic here.
For a set of primes P, we say that n ∈ P if and only if n is a product of primes in P. A group G is said to be Plocal if and only if the map μ_{n}:G→ G: g → g^{n} is bijective for all n ∈ P′, where P′ is the set of all primes not in P. The Plocalization of a group G, is a Plocal group G_{P} together with a morphism α:G → G_{P} which satisfy the following universal property: For each Plocal group L and any morphism φ: G → L, there exists a unique morphism ψ:G_{P} → L, such that ψ°α = φ.
This concept of localization is well developed for finite groups and for nilpotent groups. For a finite group G, the Plocalization is the largest quotient of G, having no elements with an order belonging to P′ (the morphism α, mentioned above is the natural projection).
In DM a contribution is made towards the localization of virtually nilpotent groups. The theory developed in the paper is then illustrated in the last section of the paper by means of the computation of the Plocalization of an almost crystallographic group. For their example the authors have chosen an almost crystallographic group G of dimension 3 and type 17. For the set of parameters (k_{1},k_{2},k_{3},k_{4}) they have considered all cases of the form (k_{1},k_{2},k_{3},k_{4})=(2,0,0,k_{4}).
Here we will check their computations in two cases k_{4}=0 and k_{4}=1
using the set of primes P={2}. The holonomy group of these almost
crystallographic groups G is the dihedral group D_{6} of order
12. Thus there is a short exact sequence of the form

As a first step in their computation, Descheemaeker and Malfait determine the group I_{P′}D_{6}, which is the unique subgroup of order 3 in D_{6}. One of the main objects in DM is the group K=p^{−1} (I_{P′}D_{6}), where p is the natural projection of G onto its holonomy group. It is known that the Plocalization of G coincides with the Plocalization of G/γ_{3}(K), where γ_{3}(K) is the third term in the lower central series of K. As G/γ_{3}(K) is finite in this example, we exactly know what this Plocalization is. Let us now show, how GAP can be used to compute this Plocalization in two cases:
First case: The parameters are (k_{1},k_{2},k_{3},k_{4})=(2,0,0,0)
gap> G := AlmostCrystallographicPcpGroup(3, 17, [2,0,0,0] ); Pcp group with orders [ 2, 6, 0, 0, 0 ] gap> projection := NaturalHomomorphismOnHolonomyGroup( G ); [ g1, g2, g3, g4, g5 ] > [ g1, g2, identity, identity, identity ] gap> F := HolonomyGroup( G ); Pcp group with orders [ 2, 6 ] gap> IPprimeD6 := Subgroup( F , [F.2^2] ); Pcp group with orders [ 3 ] gap> K := PreImage( projection, IPprimeD6 ); Pcp group with orders [ 3, 0, 0, 0 ] gap> PrintPcpPresentation( K ); pcp presentation on generators [ g2^2, g3, g4, g5 ] g2^2 ^ 3 = identity g3 ^ g2^2 = g3^1*g4^1 g3 ^ g2^2^1 = g4*g5^2 g4 ^ g2^2 = g3*g5^2 g4 ^ g2^2^1 = g3^1*g4^1*g5^2 g4 ^ g3 = g4*g5^2 g4 ^ g3^1 = g4*g5^2 gap> Gamma3K := CommutatorSubgroup( K, CommutatorSubgroup( K, K )); Pcp group with orders [ 0, 0, 0 ] gap> quotient := G/Gamma3K; Pcp group with orders [ 2, 6, 3, 3, 2 ] gap> S := SylowSubgroup( quotient, 3); Pcp group with orders [ 3, 3, 3 ] gap> N := NormalClosure( quotient, S); Pcp group with orders [ 3, 3, 3 ] gap> localization := quotient/N; Pcp group with orders [ 2, 2, 2 ] gap> PrintPcpPresentation( localization ); pcp presentation on generators [ g1, g2, g3 ] g1 ^ 2 = identity g2 ^ 2 = identity g3 ^ 2 = identityThis shows that G_{P} ≅ Z_{2}^{3}.
Second case: The parameters are (k_{1},k_{2},k_{3},k_{4})=(2,0,0,1)
gap> G := AlmostCrystallographicPcpGroup(3, 17, [2,0,0,1]);; gap> projection := NaturalHomomorphismOnHolonomyGroup( G );; gap> F := HolonomyGroup( G );; gap> IPprimeD6 := Subgroup( F , [F.2^2] );; gap> K := PreImage( projection, IPprimeD6 );; gap> Gamma3K := CommutatorSubgroup( K, CommutatorSubgroup( K, K ));; gap> quotient := G/Gamma3K;; gap> S := SylowSubgroup( quotient, 3);; gap> N := NormalClosure( quotient, S);; gap> localization := quotient/N; Pcp group with orders [ 2, 2, 2 ] gap> PrintPcpPresentation( localization ); pcp presentation on generators [ g1, g2, g3 ] g1 ^ 2 = identity g2 ^ 2 = g3 g3 ^ 2 = identity g2 ^ g1 = g2*g3 g2 ^ g1^1 = g2*g3
In this case, we see that G_{P}=D_{4}.
The reader can check that these results coincide with those obtained in DM. Note also that we used a somewhat different scheme to compute this localization than the one used in DM. We invite the reader to check the same computations, tracing exactly the steps made in DM.
aclib manual