<html><head><title>[SONATA] 11 Designs</title></head> <body text="#000000" bgcolor="#ffffff"> [<a href = "chapters.htm">Up</a>] [<a href ="CHAP010.htm">Previous</a>] [<a href = "theindex.htm">Index</a>] <h1>11 Designs</h1><p> <P> <H3>Sections</H3> <oL> <li> <A HREF="CHAP011.htm#SECT001">Constructing a design</a> <li> <A HREF="CHAP011.htm#SECT002">Properties of a design</a> <li> <A HREF="CHAP011.htm#SECT003">Working with the points and blocks of a design</a> </ol><p> <p> 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. <p> <p> <h2><a name="SECT001">11.1 Constructing a design</a></h2> <p><p> <a name = "SECT001"></a> <li><code>DesignFromPointsAndBlocks( </code><var>points</var><code>, </code><var>blocks</var><code> )</code> <p> <code>DesignFromPointsAndBlocks</code> returns the design with the set of points <var>points</var> and the set of blocks <var>blocks</var>, a subset of the powerset of <var>points</var>. <p> <pre> 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> </pre> <p> <a name = "SECT001"></a> <li><code>DesignFromIncidenceMat( M ) ;</code> <p> <code>DesignFromIncidenceMat</code> returns the design with incidence matrix <var>M</var>, The rows of <var>M</var> are labelled by the set of points <var>1</var> to <var>v</var>, the columns represent the blocks. If the <var>( i, j )</var> entry of the matrix <var>M</var> is <var>1</var>, then the point <var>i</var> is incident with the <var>j</var>-th block, i.e. the <var>j</var>-th block consists of those points <var>i</var> for which the entry <var>( i, j )</var> of <var>M</var> is <var>1</var>. All other entries have to be <var>0</var>. <p> <pre> 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> </pre> <p> <a name = "SECT001"></a> <li><code>DesignFromPlanarNearRing( </code><var>N</var><code>, </code><var>type</var><code> )</code> <p> <code>DesignFromPlanarNearRing</code> returns a design obtained from the planar nearring <var>N</var> following the constructions of James R. Clay citeClay:Nearrings. <p> If <var>type</var> = <code>"*"</code>, <code>DesignFromPlanarNearRing</code> returns the design <var>(<var>N</var>,B<sup>*</sup>,in)</var> in the notation of J. R. Clay with the elements of <var>N</var> as set of points and <var>{N<sup>*</sup>cdota+b | a,binN, a not= 0 }</var> as set of blocks. Here <var>N<sup>*</sup></var> is the set of elements <var>xinN</var> satisfying <var>xcdotN = N</var>. <p> If <var>type</var> = <code>" "</code> (blank), <code>DesignFromPlanarNearRing</code> returns the design <var>(<var>N</var>,B,in)</var> in the notation of J. R. Clay with the elements of <var>N</var> as set of points and <var>{Ncdota+b | a,binN, a not= 0 }</var> as set of blocks. <p> <pre> 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> </pre> <p> <a name = "SECT001"></a> <li><code>DesignFromFerreroPair( </code><var>G</var><code>, </code><var>phi</var><code>, </code><var>type</var><code> )</code> <p> <code>DesignFromFerreroPair</code> returns a design obtained from the group <var>G</var>, and a group of fixed-point-free automorphisms <var>phi</var> acting on <var>G</var> following the constructions of James R. Clay citeClay:Nearrings. <p> If <var>type</var> = <code>"*"</code>, <code>DesignFromFerreroPair</code> returns the design <var>(<var>G</var>,B<sup>*</sup>,in)</var> in the notation of J. R. Clay with the elements of <var>G</var> as set of points and the nonzero orbits of <var>G</var> under <var>phi</var> and their translates by group-elements as set of blocks. <p> If <var>type</var> = <code>" "</code> (blank), <code>DesignFromFerreroPair</code> returns the design <var>(<var>G</var>,B,in)</var> in the notation of J. R. Clay with the elements of <var>G</var> as set of points and the nonzero orbits of <var>G</var> under <var>phi</var> joined with the zero of <var>G</var> and their translates by group-elements as set of blocks. <p> <pre> 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 generators> 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 </pre> <p> <a name = "SECT001"></a> <li><code>DesignFromWdNearRing( </code><var>N</var><code> )</code> <p> <code>DesignFromWdNearring</code> returns a design obtained from the weakly divisible nearring <var>N</var> with cyclic additive group of prime power order. Following the constructions of A. Benini, F. Morini and S. Pellegrini, we take the elements of <var>N</var> as set of points and <var>{Ncdota+b | ainC, bin<var>N</var>}</var> as set of blocks. Here <var>C</var> is the set of elements <var>ainN</var> such that <var>acdotN = N</var>. <p> <pre> 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> </pre> <p> <p> <h2><a name="SECT002">11.2 Properties of a design</a></h2> <p><p> <a name = "SECT002"></a> <li><code>PointsOfDesign( </code><var>D</var><code> )</code> <p> <code>PointsOfDesign</code> returns the actual list of points of the design <var>D</var>, not their positions, no matter how the points of the design <var>D</var> may be represented. To get the representation of those points, whose positions in the list of all points are given by the list <var>pointnrs</var>, one can use <code>PointsOfDesign( </code><var>D</var><code> ){</code><var>pointnrs</var><code>}</code>. <p> <pre> 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 </pre> <p> <a name = "SECT002"></a> <li><code>BlocksOfDesign( </code><var>D</var><code> )</code> <p> <code>BlocksOfDesign</code> returns the actual list of blocks of the design <var>D</var>, 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 <var>blocknrs</var>, one can use <code>BlocksOfDesign( </code><var>D</var><code> ){</code><var>blocknrs</var><code>}</code>. <p> <pre> 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 </pre> <p> <a name = "SECT002"></a> <li><code>DesignParameter( </code><var>D</var><code> )</code> <p> <code>DesignParameter</code> returns the set of paramaters <var>t, v, b, r, k, lambda</var> of the design <var>D</var>. Here <var>v</var> is the size of the set of points <code>PointsOfDesign</code>, <var>b</var> is the size of the set of blocks <code>PointsOfDesign</code>, every point is incident with precisely <var>r</var> blocks, every block is incident with precisely <var>k</var> points, every <var>t</var> distinct points are together incident with precisely <var>lambda</var> blocks. <p> <pre> gap> DesignParameter( D1 ); [ 2, 9, 18, 8, 4, 3 ] gap> # t = 2, v = 9, b = 18, r = 8, k = 4, lambda = 3 </pre> <p> <a name = "SECT002"></a> <li><code>IncidenceMat( </code><var>D</var><code> )</code> <p> <code>IncidenceMat</code> returns the incidence matrix of the design <var>D</var>, where the rows are labelled by the positions of the points in <code>PointsOfDesign</code>, the columns are labelled by the positions of the blocks in <code>BlocksOfDesign</code>. If the point in position <var>i</var> is incident with the block in position <var>j</var>, then the <var>( i, j )</var> entry of the matrix <code>IncidenceMat</code> is <var>1</var>, else it is <var>0</var>. <p> <pre> 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 ] ] </pre> <p> <a name = "SECT002"></a> <li><code>PrintIncidenceMat( </code><var>D</var><code> )</code> <p> <code>PrintIncidenceMat</code> prints only the entries of the incidence matrix <code>IncidenceMat</code> of the design without commas. If the point in position <var>i</var> is incident with the block in position <var>j</var>, then there is <var>1</var> in the <var>i</var>-th row, <var>j</var>-th column, else there is '.', a dot. <p> <pre> 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... </pre> <p> <a name = "SECT002"></a> <li><code>BlockIntersectionNumbers( </code><var>D</var><code> )</code> <a name = "SECT002"></a> <li><code>BlockIntersectionNumbersK( </code><var>D</var><code>, </code><var>blocknr</var><code> )</code> <p> In the first form <code>BlockIntersectionNumbers</code> returns the list of cardinalities of the intersection of each block with all other blocks of the design <var>D</var>. In the second form <code>BlockIntersectionNumbers</code> returns the list of cardinalities of the intersection of the block in position <var>blocknr</var> with all other blocks of the design <var>D</var>. <p> <pre> 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 </pre> <p> <a name = "SECT002"></a> <li><code>IsCircularDesign( </code><var>D</var><code> )</code> <p> <code>IsCircularDesign</code> returns <code>true</code> if the design <var>D</var> is circular and <code>false</code> otherwise. The design <var>D</var> has to be the result of <code>DesignFromPlanarNearRing</code> or <code>DesignFromFerreroPair</code>, since <code>IsCircularDesign</code> assumes the particular structure of such a nearring-generated design. <p> A design <var>D</var> is <strong>circular</strong> if every two distinct blocks intersect in at most two points. <p> <code>IsCircularDesign</code> calls the function <code>BlockIntersectionNumbers</code>. <p> <pre> gap> IsCircularDesign( D1 ); true </pre> <p> <p> <h2><a name="SECT003">11.3 Working with the points and blocks of a design</a></h2> <p><p> <a name = "SECT003"></a> <li><code>IsPointIncidentBlock( </code><var>D</var><code>, </code><var>pointnr</var><code>, </code><var>blocknr</var><code> )</code> <p> <code>IsPointIncidentBlock</code> returns <code>true</code> if the point whose position in the list <code>PointsOfDesign( </code><var>D</var><code> )</code> is given by <var>pointnr</var> is incident with the block whose position in the list <code>BlocksOfDesign( </code><var>D</var><code> )</code> is given by <var>blocknr</var>, that is, the point is contained in the block as an element in a set. <p> <pre> gap> IsPointIncidentBlock( D1, 3, 1 ); true gap> # point 3 is incident with block 1 gap> IsPointIncidentBlock( D1, 3, 2 ); false </pre> <p> <a name = "SECT003"></a> <li><code>PointsIncidentBlocks( </code><var>D</var><code>, </code><var>blocknrs</var><code> )</code> <p> <code>PointsIncidentBlocks</code> returns a list of positions of those points of the design <var>D</var> which are incident with the blocks, whose positions are given in the list <var>blocknrs</var>. <p> <pre> gap> PointsIncidentBlocks( D1, [1, 4] ); [ 4, 7 ] gap> # block 1 and block 4 are together incident with gap> # points 4 and 7 </pre> <p> <a name = "SECT003"></a> <li><code>BlocksIncidentPoints( </code><var>D</var><code>, </code><var>pointnrs</var><code> )</code> <p> <code>BlocksIncidentPoints</code> returns a list of positions of the blocks of the design <var>D</var> which are incident with those points, whose positions are given in the list <var>pointnrs</var>. <p> <pre> 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 </pre> <p> <p> [<a href = "chapters.htm">Up</a>] [<a href ="CHAP010.htm">Previous</a>] [<a href = "theindex.htm">Index</a>] <P> <address>SONATA manual<br>November 2008 </address></body></html>