# 8.20 Blocks

Blocks( G, D, seed )
Blocks( G, D, seed, operation )

In this form Blocks returns a block system of the domain D, which may be a list of points of arbitrary type, under the group G, such that the points in the list seed all lie in the same block. If no such nontrivial block system exists, Blocks returns [ D ]. G must operate transitively on D, otherwise an error is signalled.

Blocks( G, D )
Blocks( G, D, operation )

In this form Blocks returns a minimal block system of the domain D, which may be a list of points of arbitrary type, under the group G. If no nontrivial block system exists, Blocks returns [ D ]. G must operate transitively on D, otherwise an error is signalled.

A block system B is a list of blocks with the following properties. Each block b of B is a subset of D. The blocks are pairwise disjoint. The union of blocks is D. The image of each block under each element g of G is as a set equal to some block of the block system. Note that this implies that all blocks contain the same number of elements as G operates transitive on D. Put differently a block system B of D is a partition of D such that G operates with OnSets (see Other Operations) on B. The block system that consists of only singleton sets and the block system consisting only of D are called trivial. A block system B is called minimal if there is no nontrivial block system whose blocks are all subsets of the blocks of B and whose number of blocks is larger than the number of blocks of B.

Blocks accepts a function operation of two arguments d and g as optional third, resp. fourth, argument, which specifies how the elements of G operate (see Other Operations).

gap> g := Group( (1,2,3)(6,7), (3,4,5)(7,8) );;
gap> Blocks( g, [1..5] );
[ [ 1 .. 5 ] ]
gap> Blocks( g, Orbit( g, [1,2], OnPairs ), OnPairs );
[ [ [ 1, 2 ], [ 3, 2 ], [ 4, 2 ], [ 5, 2 ] ],
[ [ 1, 3 ], [ 2, 3 ], [ 4, 3 ], [ 5, 3 ] ],
[ [ 1, 4 ], [ 2, 4 ], [ 3, 4 ], [ 5, 4 ] ],
[ [ 1, 5 ], [ 2, 5 ], [ 3, 5 ], [ 4, 5 ] ],
[ [ 2, 1 ], [ 3, 1 ], [ 4, 1 ], [ 5, 1 ] ] ]

Blocks calls
G.operations.Blocks( G, D, seed, operation )
and returns the value. If no seed was given as argument to Blocks it passes the empty list. Note that the fourth argument is not optional for functions called this way.

The default function called this way is GroupOps.Blocks, which computes a permutation group P that operates on [1..Length(D)] in the same way that G operates on D (see Operation) and leaves it to this permutation group to find the blocks. This of course works only because Operations of Permutation Groups).

GAP 3.4.4
April 1997