Although the functions described in this section were initially meant to investigate designs generated from nearrings, they can also be applied to other incidence structures. In principal a design is represented as a set of points and a set of blocks, a subset of the powerset of the points, with containment as incidence relation.
DesignFromPointsAndBlocks(
points,
blocks )
DesignFromPointsAndBlocks
returns the design with the set of points
points and the set of blocks blocks, a subset of the powerset of
points.
gap> points := [1..7];; gap> blocks := [[1,2,3],[1,4,5],[1,6,7],[2,4,7],[2,5,6],[3,5,7], > [3,4,6]];; gap> D := DesignFromPointsAndBlocks( points, blocks ); <an incidence structure with 7 points and 7 blocks>
DesignFromIncidenceMat( M ) ;
DesignFromIncidenceMat
returns the design with incidence matrix M,
The rows of M are labelled by the set of points 1 to v, the
columns represent the blocks.
If the ( i, j ) entry of the matrix M is 1, then the point i is
incident with the j-th block, i.e. the j-th block consists of those
points i for which the entry ( i, j ) of M is 1. All other entries
have to be 0.
gap> M := [[1,0,1,1], > [1,1,0,0], > [1,1,1,0]];; gap> DesignFromIncidenceMat( M ); <an incidence structure with 3 points and 4 blocks>
DesignFromPlanarNearRing(
N,
type )
DesignFromPlanarNearRing
returns a design obtained from the planar
nearring N following the constructions of James R. Clay
Clay:Nearrings.
If type = "*"
, DesignFromPlanarNearRing
returns the design
(N ,B*, ∈ ) in the notation of J. R. Clay with the elements of N as
set of points and {N*·a+b | a,b ∈ N, a ≠ 0 } as set of blocks.
Here N* is the set of elements x ∈ N satisfying x·N = N.
If type = " "
(blank), DesignFromPlanarNearRing
returns the design
(N ,B, ∈ ) in the notation of J. R. Clay with the elements of N as
set of points and {N·a+b | a,b ∈ N, a ≠ 0 } as set of
blocks.
gap> n := LibraryNearRing( GTW9_2, 90 ); LibraryNearRing(9/2, 90) gap> IsPlanarNearRing( n ); true gap> D1 := DesignFromPlanarNearRing( n, "*" ); <a 2 - ( 9, 4, 3 ) nearring generated design> gap> D2 := DesignFromPlanarNearRing( n, " " ); <a 2 - ( 9, 5, 5 ) nearring generated design>
DesignFromFerreroPair(
G,
phi,
type )
DesignFromFerreroPair
returns a design obtained from the group G, and
a group of fixed-point-free automorphisms phi acting on G following the
constructions of James R. Clay Clay:Nearrings.
If type = "*"
, DesignFromFerreroPair
returns the design
(G ,B*, ∈ ) in the notation of J. R. Clay with the elements of G as
set of points and the nonzero orbits of G under phi and their
translates by group-elements as set of blocks.
If type = " "
(blank), DesignFromFerreroPair
returns the design
(G ,B, ∈ ) in the notation of J. R. Clay with the elements of G as
set of points and the nonzero orbits of G under phi joined with the zero
of G and their translates by group-elements as set of blocks.
gap> aux := FpfAutomorphismGroupsCyclic( [3,3], 4 ); [ [ [ f1, f2 ] -> [ f1*f2, f1*f2^2 ] ], <pc group of size 9 with 2 generators> ] gap> f := aux[1][1]; [ f1, f2 ] -> [ f1*f2, f1*f2^2 ] gap> phi := Group( f ); <group with 1 generator> gap> G := aux[2]; <pc group of size 9 with 2 generators> gap> D3 := DesignFromFerreroPair( G, phi, "*" ); <a 2 - ( 9, 4, 3 ) nearring generated design> gap> # D3 is actually isomorphic to D1
DesignFromWdNearRing(
N )
DesignFromWdNearring
returns a design obtained from the weakly divisible
nearring N with cyclic additive group of prime power order. Following the
constructions of A. Benini, F. Morini and S. Pellegrini, we take the elements
of N as set of points and {N·a+b | a ∈ C, b ∈ N } as set of
blocks. Here C is the set of elements a ∈ N such that a·N = N.
gap> n := LibraryNearRing( GTW9_1, 202 ); LibraryNearRing(9/1, 202) gap> IsWdNearRing( n ); true gap> DesignFromWdNearRing( n ); <a 1 - ( 9, 5, 10 ) nearring generated design>
PointsOfDesign(
D )
PointsOfDesign
returns the actual list of points of the design D, not
their positions, no matter how the points of the design D may be
represented. To get the representation of those points, whose positions in
the list of all points are given by the list pointnrs, one can use
PointsOfDesign(
D ){
pointnrs}
.
gap> D1; <a 2 - ( 9, 4, 3 ) nearring generated design> gap> PointsOfDesign( D1 ); [ (()), ((4,5,6)), ((4,6,5)), ((1,2,3)), ((1,2,3)(4,5,6)), ((1,2,3)(4,6,5)), ((1,3,2)), ((1,3,2)(4,5,6)), ((1,3,2)(4,6,5)) ] gap> PointsOfDesign( D1 ){[2,4]}; [ ((4,5,6)), ((1,2,3)) ] gap> # returns the points in position 2 and 4
BlocksOfDesign(
D )
BlocksOfDesign
returns the actual list of blocks of the design D, not
their positions. Blocks are represented as lists of points. A point is
incident with a block if the point is an element of the
block. To get the representation of those blocks, whose positions in
the list of all blocks are given by the list blocknrs, one can use
BlocksOfDesign(
D ){
blocknrs}
.
gap> Length( BlocksOfDesign( D1 ) ); 18 gap> BlocksOfDesign( D1 ){[3]}; [ [ ((4,6,5)), (()), ((1,2,3)(4,5,6)), ((1,3,2)(4,5,6)) ] ] gap> # returns the block in position 3 as a list of points
DesignParameter(
D )
DesignParameter
returns the set of paramaters t, v, b, r, k, λ
of the design D. Here v is the size of the set of points
PointsOfDesign
, b is the size of the set of blocks PointsOfDesign
,
every point is incident with precisely r blocks, every block is incident
with precisely k points, every t distinct points are together incident
with precisely λ blocks.
gap> DesignParameter( D1 ); [ 2, 9, 18, 8, 4, 3 ] gap> # t = 2, v = 9, b = 18, r = 8, k = 4, lambda = 3
IncidenceMat(
D )
IncidenceMat
returns the incidence matrix of the design D, where the
rows are labelled by the positions of the points in PointsOfDesign
, the
columns are labelled by the positions of the blocks in BlocksOfDesign
.
If the point in position i is incident with the block in position j, then
the ( i, j ) entry of the matrix IncidenceMat
is 1, else it is 0.
gap> M1 := IncidenceMat( D1 ); [ [ 0, 0, 1, 0, 1, 0, 1, 0, 0, 1, 0, 1, 1, 0, 0, 1, 0, 1 ], [ 1, 0, 0, 0, 1, 0, 0, 1, 1, 0, 0, 1, 0, 1, 1, 0, 0, 1 ], [ 1, 0, 1, 0, 0, 0, 0, 1, 0, 1, 1, 0, 0, 1, 0, 1, 1, 0 ], [ 1, 0, 0, 1, 0, 1, 0, 0, 1, 0, 1, 0, 1, 0, 0, 1, 0, 1 ], [ 0, 1, 1, 0, 0, 1, 1, 0, 0, 0, 1, 0, 0, 1, 1, 0, 0, 1 ], [ 0, 1, 0, 1, 1, 0, 1, 0, 1, 0, 0, 0, 0, 1, 0, 1, 1, 0 ], [ 1, 0, 0, 1, 0, 1, 1, 0, 0, 1, 0, 1, 0, 0, 1, 0, 1, 0 ], [ 0, 1, 1, 0, 0, 1, 0, 1, 1, 0, 0, 1, 1, 0, 0, 0, 1, 0 ], [ 0, 1, 0, 1, 1, 0, 0, 1, 0, 1, 1, 0, 1, 0, 1, 0, 0, 0 ] ]
PrintIncidenceMat(
D )
PrintIncidenceMat
prints only the entries of the incidence matrix
IncidenceMat
of the design without commas. If the point in position i is
incident with the block in position j, then there is 1 in the i-th
row, j-th column, else there is '.', a dot.
gap> PrintIncidenceMat( D1 ); ..1.1.1..1.11..1.1 1...1..11..1.11..1 1.1....1.11..1.11. 1..1.1..1.1.1..1.1 .11..11...1..11..1 .1.11.1.1....1.11. 1..1.11..1.1..1.1. .11..1.11..11...1. .1.11..1.11.1.1...
BlockIntersectionNumbers(
D )
BlockIntersectionNumbersK(
D,
blocknr )
In the first form BlockIntersectionNumbers
returns the list of
cardinalities of the intersection of each block with all other blocks of the
design D.
In the second form BlockIntersectionNumbers
returns the list of
cardinalities of the intersection of the block in position blocknr with
all other blocks of the design D.
gap> BlockIntersectionNumbers( D1, 2 ); [ 0, 4, 2, 2, 2, 2, 2, 2, 2, 1, 2, 1, 2, 2, 2, 1, 2, 1 ] gap> # the second has empty intersection with the first block gap> # and intersects all others in at most 2 points
IsCircularDesign(
D )
IsCircularDesign
returns true
if the design D is circular and false
otherwise. The design D has to be the result of DesignFromPlanarNearRing
or DesignFromFerreroPair
, since IsCircularDesign
assumes the particular
structure of such a nearring-generated design.
A design D is circular if every two distinct blocks intersect in at most two points.
IsCircularDesign
calls the function BlockIntersectionNumbers
.
gap> IsCircularDesign( D1 ); true
IsPointIncidentBlock(
D,
pointnr,
blocknr )
IsPointIncidentBlock
returns true
if the point whose position in the list
PointsOfDesign(
D )
is given by pointnr is incident with the block
whose position in the list BlocksOfDesign(
D )
is given by blocknr,
that is, the point is contained in the block as an element in a set.
gap> IsPointIncidentBlock( D1, 3, 1 ); true gap> # point 3 is incident with block 1 gap> IsPointIncidentBlock( D1, 3, 2 ); false
PointsIncidentBlocks(
D,
blocknrs )
PointsIncidentBlocks
returns a list of positions of those points of the
design D which are incident with the blocks, whose positions are given in
the list blocknrs.
gap> PointsIncidentBlocks( D1, [1, 4] ); [ 4, 7 ] gap> # block 1 and block 4 are together incident with gap> # points 4 and 7
BlocksIncidentPoints(
D,
pointnrs )
BlocksIncidentPoints
returns a list of positions of the blocks of the
design D which are incident with those points, whose positions are given
in the list pointnrs.
gap> BlocksIncidentPoints( D1, [2, 7] ); [ 1, 12, 15 ] gap> # point 2 and point 7 are together incident with gap> # blocks 1, 12, 15 gap> BlocksOfDesign( D1 ){last}; [ [ ((4,5,6)), ((4,6,5)), ((1,2,3)), ((1,3,2)) ], [ ((1,3,2)), ((1,3,2)(4,5,6)), (()), ((4,5,6)) ], [ ((1,3,2)(4,6,5)), ((1,3,2)), ((4,5,6)), ((1,2,3)(4,5,6)) ] ] gap> # the actual point sets of blocks 1, 12, and 15 gap> BlocksIncidentPoints( D1, [2, 3, 7] ); [ 1 ] gap> # points 2, 3, 7 are together incident with block 1 gap> PointsIncidentBlocks( D1, [1] ); [ 2, 3, 4, 7 ] gap> # block 1 is incident with points 2, 3, 4, 7
SONATA manual