<!-- ------------------------------------------------------------------- -->
<!--                                                                     -->
<!--  gp4objmap.xml         XMod documentation            Chris Wensley  -->
<!--                                                                     -->
<!--  Copyright (C) 1996-2020, Chris Wensley et al,                      --> 
<!--  School of Computer Science, Bangor University, U.K.                --> 
<!--                                                                     -->
<!-- ------------------------------------------------------------------- -->

<?xml version="1.0" encoding="UTF-8"?>

<Chapter Label="chap-obj4">

<Heading>Crossed cubes and Cat<M>^3</M>-groups</Heading>

<Index>4d-group</Index>
<Index>4d-domain</Index>
<Index>cat<M>^3</M>-group</Index>
The term <E>4d-group</E> refers to a set of equivalent categories 
of which the most common are the categories of 
<E>crossed cubes</E> and <E>cat<M>^3</M>-groups</E>. 
A <E>4d-mapping</E> is a function between two 4d-groups which preserves 
all the structure.
<P/>
The material in this chapter should be considered very experimental. 
As yet there are no functions for crossed cubes. 

<Section Label="sect-cat3-functions">
<Heading>Functions for (pre-)cat<M>^3</M>-groups</Heading>

We shall use the following standard orientation of a cat<M>^3</M>-group
<M>\calE</M> on a group <M>G</M>. 
<M>\calE</M> contains <M>8</M> groups; <M>12</M> cat<M>^1</M>-groups 
and <M>6</M> cat<M>^2</M>-groups forming the vertices; edges and faces 
of a cube, as shown in the following diagram. 
<Display>
<![CDATA[
\vcenter{\xymatrix{
 & H \ar[dddd] <+0.5ex> \ar[dddd] <+0.0ex>
     \ar[rrrr] <+0.5ex> \ar[rrrr] <+0.0ex>
     \ar[dr] <+0.6ex> 
   & & & & N \ar[llll] <+0.6ex> 
             \ar[dddd] <+0.6ex> \ar[dddd] <+0.0ex>
             \ar[dr] <+0.6ex> 
           & \\
 & & G \ar[dddd] <+0.5ex> \ar[dddd] <+0.0ex>
       \ar[rrrr] <+0.5ex> \ar[rrrr] <+0.0ex> 
       \ar[ul] <+0.5ex> \ar[ul] <+0.0ex> 
     & & & &  R \ar[llll] <+0.6ex> 
                \ar[dddd] <+0.5ex> \ar[dddd] <+0.0ex> 
                \ar[ul] <+0.5ex> \ar[ul] <+0.0ex>    \\
 & & & & & & \\
 & & & & & & \\
 & M \ar[uuuu] <+0.6ex> 
     \ar[rrrr] <+0.5ex> \ar[rrrr] <+0.0ex> 
     \ar[dr] <+0.6ex>  
   & & & & L \ar[uuuu] <+0.6ex> 
             \ar[llll] <+0.6ex>
             \ar[dr] <+0.6ex>  
           & \\ 
 & & Q \ar[uuuu] <+0.6ex> 
       \ar[rrrr] <+0.5ex> \ar[rrrr] <+0.0ex> 
       \ar[ul] <+0.5ex> \ar[ul] <+0.0ex>  
     & & & & P \ar[uuuu] <+0.6ex>
               \ar[llll] <+0.6ex>  
               \ar[ul] <+0.5ex> \ar[ul] <+0.0ex>  \\ 
}}
]]>
</Display>
<P/>
By definition, <M>\calE</M> is generated by three commuting cat<M>^1</M>-groups 
<M>(G \Rightarrow R), (G \Rightarrow Q)</M> and <M>(G \Rightarrow H)</M>, 
but it is more convenient to think of <M>\calE</M> as generated by 
two cat<M>^2</M>-groups 
<List>
<Item>
<E>front</E><M>(\calE)</M>, generated by <M>(G \Rightarrow R)</M>
and <M>(G \Rightarrow Q)</M>; 
</Item>
<Item>
<E>left</E><M>(\calE)</M>, generated by <M>(G \Rightarrow Q)</M>
and <M>(G \Rightarrow H)</M>. 
</Item>
</List> 
Because the tail, head and embedding maps all commute, 
it follows that <E>up</E><M>(\calE)</M>, 
generated by <M>(G \Rightarrow H)</M> and <M>(G \Rightarrow R)</M>, 
is a third cat<M>^2</M>-group. 
The three remaining faces (cat<M>^2</M>-groups) <E>right</E><M>(\calE)</M>, 
<E>down</E><M>(\calE)</M> and <E>back</E><M>(\calE)</M> 
are then easily constructed. 
We shall always use the order [<E>front,up,left,right,down,back</E>] 
for the six faces. 
<P/>

<ManSection Label="cat3-group">
   <Func Name="Cat3Group"
         Arg="args" />
   <Func Name="PreCat3Group"
         Arg="args" />
   <Prop Name="IsCat3Group"
         Arg="C" />
   <Oper Name="PreCat3GroupByPreCat2Groups"
         Arg="L" />
<Description>
The global functions <C>Cat3Group</C> and <C>PreCat3Group</C> 
are normally take as arguments a pair of cat<M>^2</M>-groups 
or a trio of cat<M>^1</M>-groups. 
In subsection <Ref Oper="AllCat2GroupsIterator"/> the list of pairs 
<C>CatnGroupLists(d12).pairs</C> contains the three entries 
<C>[6,8],[8,11]</C> and <C>[6,11]</C>. 
It follows that the sixth, eighth and eleventh cat<M>^1</M>-groups 
for <C>d12</C> generate a cat<M>^3</M>-group. 
</Description>
</ManSection>
<P/>
<Example>
<![CDATA[
gap> all1 := AllCat1Groups( d12 );; 
gap> C68 := Cat2Group( all1[6], all1[8] );; 
gap> C811 := Cat2Group( all1[8], all1[11] );;
gap> C3Ga := Cat3Group( C68, C811 );
cat3-group with generating (pre-)cat1-groups:
1 : [d12 => Group( [ (), (1,6)(2,5)(3,4) ] )]
2 : [d12 => Group( [ (1,4)(2,5)(3,6), (1,3)(4,6) ] )]
3 : [d12 => Group( [ (1,5,3)(2,6,4), (1,4)(2,3)(5,6) ] )]
gap> C3Gb := Cat3Group( all1[6], all1[8], all1[11] );
cat3-group with generating (pre-)cat1-groups:
1 : [d12 => Group( [ (), (1,6)(2,5)(3,4) ] )]
2 : [d12 => Group( [ (1,4)(2,5)(3,6), (1,3)(4,6) ] )]
3 : [d12 => Group( [ (1,5,3)(2,6,4), (1,4)(2,3)(5,6) ] )]
gap> C3Ga = C3Gb;
true
]]>
</Example>

<ManSection>
   <Attr Name="Front3DimensionalGroup"
         Arg="C3" />
   <Attr Name="Up3DimensionalGroup"
         Arg="C3" />
   <Attr Name="Left3DimensionalGroup"
         Arg="C3" />
   <Attr Name="Right3DimensionalGroup"
         Arg="C3" />
   <Attr Name="Down3DimensionalGroup"
         Arg="C3" />
   <Attr Name="Back3DimensionalGroup"
         Arg="C3" />
<Description> 
The six faces of a cat<M>^3</M>-group are stored as these attributes. 
</Description>
</ManSection>
<P/>
<Example>
<![CDATA[
gap> C116 := Cat2Group( all1[11], all1[6] );;
gap> Up3DimensionalGroup( C3Ga ) = C116;
true
]]>
</Example>

</Section>


<Section Label="sect-allcat3">
<Heading>Enumerating cat<M>^3</M>-groups with a given source</Heading>

Once the list <C>CatnGroupLists(G).pairs</C> has been obtained 
we may seek all triples <M>[i,j],[j,k]</M> and <M>[k,i]</M> 
or <M>[i,k]</M> of pairs in this list and then, for each such triple, 
construct a cat<M>^3</M>-group generated by the <M>i</M>-th, <M>j</M>-th 
and <M>k</M>-th cat<M>^1</M>-group on <M>G</M>. 
<P/> 

<ManSection>
   <Oper Name="AllCat3GroupTriples"
         Arg="G" />
   <Attr Name="AllCat3GroupsNumber"
         Arg="G" />
   <Oper Name="AllCat3Groups"
         Arg="G" />
<Description>
The list of triples returned by the operation <C>AllCat3GroupTriples</C> 
is saved as <C>CatnGroupLists(G).cat3triples</C>. 
The length of this list is the number of cat<M>^3</M>-groups on <M>G</M>, 
and is saved as <C>CatnGroupNumbers(G).cat3</C>. 
<P/> 
As yet there is no operation <C>AllCat3GroupsUpToIsomorphism(G)</C>. 
</Description> 
</ManSection>
<P/>
<Example>
<![CDATA[
gap> triples := AllCat3GroupTriples( d12 );;
gap> CatnGroupNumbers( d12 ).cat3; 
94
gap> triples[46];
[ 5, 7, 11 ]
gap> all1 := AllCat1Groups( d12 );; 
gap> Cat3Group( all1[5], all1[7], all1[11] );
cat3-group with generating (pre-)cat1-groups:
1 : [d12 => Group( [ (), (1,4)(2,3)(5,6) ] )]
2 : [d12 => Group( [ (1,4)(2,5)(3,6), (2,6)(3,5) ] )]
3 : [d12 => Group( [ (1,5,3)(2,6,4), (1,4)(2,3)(5,6) ] )]
]]>
</Example>

</Section> 



<Section Label="sect-catn-definitions">
<Heading>
Definition and constructions for cat<M>^n</M>-groups and their morphisms 
</Heading>

<Index>cat<M>^n</M>-group</Index>
In this chapter and the previous one we are interested in cat<M>^2</M>-groups 
and cat<M>^3</M>-groups, and it is convenient in this section to give 
the more general definition. 
There are three equivalent descriptions of a cat<M>^n</M>-group. 
<P/>
A <E>cat<M>^n</M>-group</E> consists of the following. 
<List>
<Item>
<M>2^n</M> groups  <M>G_A</M>, one for each subset <M>A</M> of <M>[n]</M>, 
the <E>vertices</E> of an <M>n</M>-cube. 
</Item>
<Item>
Group homomorphisms forming <M>n2^{n-1}</M> commuting cat<M>^1</M>-groups, 
<Display>
\calC_{A,i} ~=~ (e_{A,i};\; t_{A,i},\; h_{A,i} \ :\  
G_A \to G_{A \setminus \{i\}}), 
\quad\mbox{for all} \quad A \subseteq [n],~ i \in A,  
</Display>
the <E>edges</E> of the cube. 
</Item>
<Item> 
These cat<M>^1</M>-groups combine (in sets of <M>4</M>) 
to form <M>n(n-1)2^{n-3}</M> cat<M>^2</M>-groups <M>\calC_{A,\{i,j\}}</M> 
for all <M>\{i,j\} \subseteq A \subseteq [n],~ i \neq j</M>, 
the <E>faces</E> of the cube. 
</Item>
</List>
Note that, since the <M>t_{A,i}, h_{A,i}</M> and <M>e_{A,i}</M> commute, 
composite homomorphisms
<M>t_{A,B}, h_{A,B} : G_A \to G_{A \setminus B}</M> and 
<M>e_{A,B} : G_{A \setminus B} \to G_A</M> 
are well defined for all <M>B \subseteq A \subseteq [n]</M>.  
<P/>
Secondly, we give the simplest of the three descriptions, 
again adapted from Ellis-Steiner <Cite Key="ell:st"/>. 
<P/>
A cat<M>^n</M>-group  <M>\calC</M> consists of <M>2^n</M> groups 
<M>G_A</M>, one for each subset  <M>A</M>  of  <M>[n]</M>, 
and <M>3n</M> homomorphisms 
<Display>
t_{[n],i}, h_{[n],i} : G_{[n]} \to G_{[n] \setminus \{i\}},~ 
 e_{[n],i} : G_{[n] \setminus \{i\}} \to G_{[n]}, 
</Display>
satisfying the following axioms for all <M>1 \leqslant i \leqslant n</M>,}  
<List>
<Item>
the 
<M>\calC_{[n],i} ~=~ (e_{[n],i};\; t_{[n],i},\; h_{[n],i} \ :\  
G_{[n]} \to G_{[n] \setminus \{i\}})~</M>
are <E>commuting</E> cat<M>^1</M>-groups, so that: 
</Item>
<Item> 
<M>
(e_1 \circ t_1) \circ (e_2 \circ t_2) = (e_2 \circ t_2) \circ (e_1 \circ t_1), \quad
(e_1 \circ h_1) \circ (e_2 \circ h_2) = (e_2 \circ h_2) \circ (e_1 \circ h_1), 
</M>
</Item>
<Item> 
<M>
(e_1 \circ t_1) \circ (e_2 \circ h_2) = (e_2 \circ h_2) \circ (e_1 \circ t_1), \quad 
(e_2 \circ t_2) \circ (e_1 \circ h_1) = (e_1 \circ h_1) \circ (e_2 \circ t_2). 
</M>
</Item>
</List>
Our third description defines a cat<M>^n</M>-group as a 
"cat<M>^1</M>-group of cat<M>^{(n-1)}</M>-groups". 
<P/>
A <E>cat<M>^n</M>-group</E> <M>\calC</M> 
consists of two cat<M>^{(n-1)}</M>-groups: 
<List>
<Item>
<M>\calA</M> with groups <M>G_A,\; A \subseteq [n-1]</M>, 
and homomorphisms <M>\ddot{t}_{A,i}, \ddot{h}_{A,i}, \ddot{e}_{A,i}</M>,  
</Item>
<Item> 
<M>\calB</M> with groups <M>H_B,\; B \subseteq [n-1]</M>,
and homomorphisms <M>\dot{t}_{B,i}, \dot{h}_{B,i}, \dot{e}_{B,i}</M>, and 
</Item>
<Item> 
cat<M>^{(n-1)}</M>-morphisms <M>t,h : \calA \to \calB</M> 
and <M>e : \calB \to \calA</M>
subject to the following conditions: 
<Display>
(t \circ e) ~\mbox{and}~ (h \circ e)  
~\mbox{are the identity mapping on}~ \calB, \qquad
[\ker t, \ker h] = \{ 1_{\calA} \}.
</Display>
</Item>
</List> 


<ManSection>
   <Oper Name="PreCatnGroup"
         Arg="L" />
   <Oper Name="CatnGroup"
         Arg="L" />
<Description>
The operation <C>(Pre)CatnGroup</C> expects as input a list of 
cat<M>^1</M>-groups. 
<P/> 
</Description> 
</ManSection>
<P/>
<Example>
<![CDATA[
gap> PC4 := PreCatnGroup( [ all1[5], all1[7], all1[11], all1[12] ] );
(pre-)cat4-group with generating (pre-)cat1-groups:
1 : [d12 => Group( [ (), (1,4)(2,3)(5,6) ] )]
2 : [d12 => Group( [ (1,4)(2,5)(3,6), (2,6)(3,5) ] )]
3 : [d12 => Group( [ (1,5,3)(2,6,4), (1,4)(2,3)(5,6) ] )]
4 : [d12 => Group( [ (1,2,3,4,5,6), (2,6)(3,5) ] )]
gap> IsCatnGroup( PC4 );                                             
true
gap> HigherDimension( PC4 );
5
]]>
</Example>

</Section> 


</Chapter>
