Sophie

Sophie

distrib > Mandriva > 2010.0 > i586 > media > contrib-release > by-pkgid > 91213ddcfbe7f54821d42c2d9e091326 > files > 943

gap-system-packages-4.4.12-5mdv2010.0.i586.rpm

<html><head><title>[design] 7 Partitioning block designs</title></head>
<body text="#000000" bgcolor="#ffffff">
[<a href = "chapters.htm">Up</a>] [<a href ="CHAP006.htm">Previous</a>] [<a href ="CHAP008.htm">Next</a>] [<a href = "theindex.htm">Index</a>]
<h1>7 Partitioning block designs</h1><p>
<P>
<H3>Sections</H3>
<oL>
<li> <A HREF="CHAP007.htm#SECT001">Partitioning a block design into block designs</a>
<li> <A HREF="CHAP007.htm#SECT002">Computing resolutions</a>
</ol><p>
<p>
This chapter describes the function <code>PartitionsIntoBlockDesigns</code> which can
classify partitions of (the block multiset of) a given block design into
(the block multisets of) block designs having user-specified properties.
We also describe <code>MakeResolutionsComponent</code> which is useful for the
special case when the desired partitions are resolutions.
<p>
<p>
<h2><a name="SECT001">7.1 Partitioning a block design into block designs</a></h2>
<p><p>
<a name = "SSEC001.1"></a>
<li><code>PartitionsIntoBlockDesigns( </code><var>param</var><code> )</code>
<p>
Let <var>D</var> equal <code></code><var>param</var><code>.blockDesign</code>.  This function returns a list <var>PL</var>
of partitions of (the block multiset of) <var>D</var>.  Each element of <var>PL</var> is a
record with one component <code>partition</code>, and, in most cases, a component
<code>autGroup</code>.  The <code>partition</code> component gives a list <var>P</var> of block designs,
all with the same point set as <var>D</var>, such that the list of (the block
multisets of) the designs in <code></code><var>P</var><code>.partition</code> forms a partition of (the
block multiset of) <var>D</var>. The component <code></code><var>P</var><code>.autGroup</code>, if bound, gives
the automorphism group of the partition, which is the stabilizer of the
partition in the automorphism group of <var>D</var>.  The precise interpretation
of the output depends on <var>param</var>, described below.
<p>
The required components of <var>param</var> are <code>blockDesign</code>, <code>v</code>, <code>blockSizes</code>,
and <code>tSubsetStructure</code>.
<p>
<code></code><var>param</var><code>.blockDesign</code> is the block design to be partitioned.
<p>
<code></code><var>param</var><code>.v</code> must be a positive integer, and specifies that for each block
design in each partition in <var>PL</var>, the points are 1,...,<code></code><var>param</var><code>.v</code>.
It is required that <code></code><var>param</var><code>.v</code> be equal to <code></code><var>param</var><code>.blockDesign.v</code>.
<p>
<code></code><var>param</var><code>.blockSizes</code> must be a set of positive integers, and specifies
that the block sizes of each block design in each partition in <var>PL</var>
will be contained in <code></code><var>param</var><code>.blockSizes</code>.
<p>
<code></code><var>param</var><code>.tSubsetStructure</code> must be a record, having
components <code>t</code>, <code>partition</code>, and <code>lambdas</code>. Let <var>t</var> be
equal to <code></code><var>param</var><code>.tSubsetStructure.t</code>, <var>partition</var> be
<code></code><var>param</var><code>.tSubsetStructure.partition</code>, and <var>lambdas</var> be
<code></code><var>param</var><code>.tSubsetStructure.lambdas</code>.  Then <var>t</var> must be a non-negative
integer, <var>partition</var> must be a list of non-empty sets of <var>t</var>-subsets of
<code>[1..</code><var>param</var><code>.v]</code>, forming an ordered partition of all the <var>t</var>-subsets of
<code>[1..</code><var>param</var><code>.v]</code>, and <var>lambdas</var> must be a list of distinct non-negative
integers (not all zero) of the same length as <var>partition</var>. This specifies
that for each design in each partition in <var>PL</var>, each <var>t</var>-subset in
<code></code><var>partition</var><code>[</code><var>i</var><code>]</code> will occur exactly <code></code><var>lambdas</var><code>[</code><var>i</var><code>]</code> times, counted
over all blocks of the design.  For binary designs, this means that each
<var>t</var>-subset in <code></code><var>partition</var><code>[</code><var>i</var><code>]</code> is contained in exactly <code></code><var>lambdas</var><code>[</code><var>i</var><code>]</code>
blocks.  The <code>partition</code> component is optional if <var>lambdas</var> has length 1.
We require that <var>t</var> is less than or equal to each element of
<code></code><var>param</var><code>.blockSizes</code>, and that each block of <code></code><var>param</var><code>.blockDesign</code>
contains at least <var>t</var> distinct elements.
<p>
The optional components of <var>param</var> are used to specify additional
constraints on the partitions in <var>PL</var>, or to change default parameter
values. These optional components are <code>r</code>, <code>b</code>, <code>blockNumbers</code>,
<code>blockIntersectionNumbers</code>, <code>blockMaxMultiplicities</code>, <code>isoGroup</code>,
<code>requiredAutSubgroup</code>, and <code>isoLevel</code>. Note that the last three of these
optional components refer to the partitions and not to the block designs
in a partition.
<p>
<code></code><var>param</var><code>.r</code> must be a positive integer, and specifies that in each design
in each partition in <var>PL</var>, each point must occur exactly <code></code><var>param</var><code>.r</code>
times in the list of blocks.
<p>
<code></code><var>param</var><code>.b</code> must be a positive integer, and specifies that each design
in each partition in <var>PL</var> has exactly <code></code><var>param</var><code>.b</code> blocks.
<p>
<code></code><var>param</var><code>.blockNumbers</code> must be a list of non-negative integers, the <var>i</var>-th
element of which specifies the number of blocks whose size is equal to
<code></code><var>param</var><code>.blockSizes[</code><var>i</var><code>]</code> (in each design in each partition in <var>PL</var>). The
length of <code></code><var>param</var><code>.blockNumbers</code> must equal that of <code></code><var>param</var><code>.blockSizes</code>,
and at least one entry of <code></code><var>param</var><code>.blockNumbers</code> must be positive.
<p>
<code></code><var>param</var><code>.blockIntersectionNumbers</code> must be a symmetric matrix of sets
of non-negative integers, the <code>[</code><var>i</var><code>][</code><var>j</var><code>]</code>-element of which specifies
the set of possible sizes for the intersection of a block <var>B</var> of size
<code></code><var>param</var><code>.blockSizes[</code><var>i</var><code>]</code> with a different block (but possibly a repeat of
<var>B</var>) of size <code></code><var>param</var><code>.blockSizes[</code><var>j</var><code>]</code> (in each design in each partition
in <var>PL</var>). In the case of multisets, we take the multiplicity of an
element in the intersection to be the minimum of its multiplicities in
the multisets being intersected; for example, the intersection of
<code>[1,1,1,2,2,3]</code> with <code>[1,1,2,2,2,4]</code> is <code>[1,1,2,2]</code>, having size 4.
The dimension of <code></code><var>param</var><code>.blockIntersectionNumbers</code> must equal the length
of <code></code><var>param</var><code>.blockSizes</code>.
<p>
<code></code><var>param</var><code>.blockMaxMultiplicities</code> must be a list of non-negative
integers, the <var>i</var>-th element of which specifies an upper bound on the
multiplicity of a block whose size is equal to <code></code><var>param</var><code>.blockSizes[</code><var>i</var><code>]</code>
(for each design in each partition in <var>PL</var>). The length of
<code></code><var>param</var><code>.blockMaxMultiplicities</code> must equal that of <code></code><var>param</var><code>.blockSizes</code>.
<p>
<code></code><var>param</var><code>.isoGroup</code> must be a subgroup of the automorphism group of
<code></code><var>param</var><code>.blockDesign</code>. We consider two elements of <var>PL</var> to be
<strong>equivalent</strong> if they are in the same orbit of <code></code><var>param</var><code>.isoGroup</code>
(in its action on multisets of block multisets).  The default for
<code></code><var>param</var><code>.isoGroup</code> is the automorphism group of <code></code><var>param</var><code>.blockDesign</code>.
<p>
<code></code><var>param</var><code>.requiredAutSubgroup</code> must be a subgroup of <code></code><var>param</var><code>.isoGroup</code>,
and specifies that each partition in <var>PL</var> must be invariant under
<code></code><var>param</var><code>.requiredAutSubgroup</code> (in its action on multisets of block
multisets). The default for <code></code><var>param</var><code>.requiredAutSubgroup</code> is the trivial
permutation group.
<p>
<code></code><var>param</var><code>.isoLevel</code> must be 0, 1, or 2 (the default is 2).  The value 0
specifies that <var>PL</var> will contain at most one partition, and will contain
one partition with the required properties if and only if such a partition
exists; the value 1 specifies that <var>PL</var> will contain (perhaps properly)
a list of <code></code><var>param</var><code>.isoGroup</code> orbit-representatives of the required
partitions; the value 2 specifies that <var>PL</var> will consist precisely of
<code></code><var>param</var><code>.isoGroup</code>-orbit representatives of the required partitions.
<p>
For an example, we first classify up to isomorphism the 2-(15,3,1)
designs invariant under a semi-regular group of automorphisms of order 5,
and then use <code>PartitionsIntoBlockDesigns</code> to classify all the resolutions
of these designs, up to the actions of the respective automorphism groups
of the designs.
<p>
<pre>
gap&gt; DL:=BlockDesigns(rec(
&gt;    v:=15,blockSizes:=[3],
&gt;    tSubsetStructure:=rec(t:=2,lambdas:=[1]),
&gt;    requiredAutSubgroup:=
&gt;       Group((1,2,3,4,5)(6,7,8,9,10)(11,12,13,14,15))));;
gap&gt; List(DL,D-&gt;Size(AutGroupBlockDesign(D)));
[ 20160, 5, 60 ]
gap&gt; PL:=PartitionsIntoBlockDesigns(rec(
&gt;       blockDesign:=DL[1],
&gt;       v:=15,blockSizes:=[3],
&gt;       tSubsetStructure:=rec(t:=1,lambdas:=[1])));
[ rec( 
      partition := [ rec( isBlockDesign := true, v := 15, blocks := [ [ 1, 2, 
                      6 ], [ 3, 4, 8 ], [ 5, 7, 14 ], [ 9, 12, 15 ], 
                  [ 10, 11, 13 ] ] ), 
          rec( isBlockDesign := true, v := 15, blocks := 
                [ [ 1, 3, 11 ], [ 2, 4, 12 ], [ 5, 6, 8 ], [ 7, 13, 15 ], 
                  [ 9, 10, 14 ] ] ), 
          rec( isBlockDesign := true, v := 15, blocks := 
                [ [ 1, 4, 14 ], [ 2, 5, 15 ], [ 3, 10, 12 ], [ 6, 7, 11 ], 
                  [ 8, 9, 13 ] ] ), 
          rec( isBlockDesign := true, v := 15, blocks := 
                [ [ 1, 5, 10 ], [ 2, 9, 11 ], [ 3, 14, 15 ], [ 4, 6, 13 ], 
                  [ 7, 8, 12 ] ] ), 
          rec( isBlockDesign := true, v := 15, blocks := 
                [ [ 1, 7, 9 ], [ 2, 8, 10 ], [ 3, 5, 13 ], [ 4, 11, 15 ], 
                  [ 6, 12, 14 ] ] ), 
          rec( isBlockDesign := true, v := 15, blocks := 
                [ [ 1, 8, 15 ], [ 2, 13, 14 ], [ 3, 6, 9 ], [ 4, 7, 10 ], 
                  [ 5, 11, 12 ] ] ), 
          rec( isBlockDesign := true, v := 15, blocks := 
                [ [ 1, 12, 13 ], [ 2, 3, 7 ], [ 4, 5, 9 ], [ 6, 10, 15 ], 
                  [ 8, 11, 14 ] ] ) ], 
      autGroup := Group([ (1,10)(2,11)(3,8)(6,13)(7,14)(12,15), 
          (1,13)(2,11)(3,14)(4,5)(6,10)(7,8), 
          (1,13,7)(2,11,5)(6,10,14)(9,12,15), 
          (2,11,5,15,4,9,12)(3,10,8,14,7,13,6) ]) ), 
  rec( partition := [ rec( isBlockDesign := true, v := 15, 
              blocks := [ [ 1, 2, 6 ], [ 3, 4, 8 ], [ 5, 7, 14 ], 
                  [ 9, 12, 15 ], [ 10, 11, 13 ] ] ), 
          rec( isBlockDesign := true, v := 15, 
              blocks := [ [ 1, 3, 11 ], [ 2, 4, 12 ], [ 5, 6, 8 ], 
                  [ 7, 13, 15 ], [ 9, 10, 14 ] ] ), 
          rec( isBlockDesign := true, v := 15, 
              blocks := [ [ 1, 4, 14 ], [ 2, 5, 15 ], [ 3, 10, 12 ], 
                  [ 6, 7, 11 ], [ 8, 9, 13 ] ] ), 
          rec( isBlockDesign := true, v := 15, 
              blocks := [ [ 1, 5, 10 ], [ 2, 13, 14 ], [ 3, 6, 9 ], 
                  [ 4, 11, 15 ], [ 7, 8, 12 ] ] ), 
          rec( isBlockDesign := true, v := 15, 
              blocks := [ [ 1, 7, 9 ], [ 2, 8, 10 ], [ 3, 14, 15 ], 
                  [ 4, 6, 13 ], [ 5, 11, 12 ] ] ), 
          rec( isBlockDesign := true, v := 15, 
              blocks := [ [ 1, 8, 15 ], [ 2, 9, 11 ], [ 3, 5, 13 ], 
                  [ 4, 7, 10 ], [ 6, 12, 14 ] ] ), 
          rec( isBlockDesign := true, v := 15, 
              blocks := [ [ 1, 12, 13 ], [ 2, 3, 7 ], [ 4, 5, 9 ], 
                  [ 6, 10, 15 ], [ 8, 11, 14 ] ] ) ], 
      autGroup := Group([ (1,15)(2,9)(3,4)(5,7)(6,12)(10,13), 
          (1,12)(2,9)(3,5)(4,7)(6,15)(8,14), 
          (1,14)(2,5)(3,8)(6,7)(9,12)(10,13), 
          (1,8,10)(2,5,15)(3,14,13)(4,9,12) ]) ) ]
gap&gt; List(PL,resolution-&gt;Size(resolution.autGroup));
[ 168, 168 ]
gap&gt; PL:=PartitionsIntoBlockDesigns(rec(
&gt;       blockDesign:=DL[2],
&gt;       v:=15,blockSizes:=[3],
&gt;       tSubsetStructure:=rec(t:=1,lambdas:=[1])));
[  ]
gap&gt; PL:=PartitionsIntoBlockDesigns(rec(
&gt;       blockDesign:=DL[3],
&gt;       v:=15,blockSizes:=[3],
&gt;       tSubsetStructure:=rec(t:=1,lambdas:=[1])));
[  ]
</pre>
<p>
<p>
<h2><a name="SECT002">7.2 Computing resolutions</a></h2>
<p><p>
<a name = "SSEC002.1"></a>
<li><code>MakeResolutionsComponent( </code><var>D</var><code> )</code>
<li><code>MakeResolutionsComponent( </code><var>D</var><code>, </code><var>isolevel</var><code> )</code>
<p>
This function computes resolutions of the block design <var>D</var>, and stores
the result in <code></code><var>D</var><code>.resolutions</code>. If <code></code><var>D</var><code>.resolutions</code> already exists
then it is ignored and overwritten. This function returns no value.
<p>
A <strong>resolution</strong> of a block design <var>D</var> is a partition of the blocks into
subsets, each of which forms a partition of the point set.  We say that
two resolutions <var>R</var> and <var>S</var> of <var>D</var> are <strong>isomorphic</strong> if there is an element
<var>g</var> in the automorphism group of <var>D</var>, such that the <var>g</var>-image of <var>R</var>
is <var>S</var>. (Isomorphism defines an equivalence relation on the set of
resolutions of <var>D</var>.)
<p>
The parameter <var>isolevel</var> (default 2) determines how many resolutions are
computed: <var>isolevel</var>=2 means to classify up to isomorphism, <var>isolevel</var>=1
means to determine at least one representative from each isomorphism
class, and <var>isolevel</var>=0 means to determine whether or not <var>D</var> has
a resolution.
<p>
When this function is finished, <code></code><var>D</var><code>.resolutions</code> will have the following
three components:
<p>
<code>list</code>: a list of distinct partitions into block designs forming resolutions
of <var>D</var>;
<p>
<code>pairwiseNonisomorphic</code>: <code>true</code>, <code>false</code> or <code>"unknown"</code>, depending on the
resolutions in <code>list</code> and what is known. If <var>isolevel</var>=0 or <var>isolevel</var>=2
then this component will be <code>true</code>;
<p>
<code>allClassesRepresented</code>: <code>true</code>, <code>false</code> or <code>"unknown"</code>, depending on the
resolutions in <code>list</code> and what is known. If <var>isolevel</var>=1 or <var>isolevel</var>=2
then this component will be <code>true</code>.
<p>
Note that <code></code><var>D</var><code>.resolutions</code> may be changed to contain more information
as a side-effect of other functions in the DESIGN package.
<p>
<pre>
gap&gt; L:=BlockDesigns(rec(v:=9,blockSizes:=[3],
&gt;          tSubsetStructure:=rec(t:=2,lambdas:=[1])));;
gap&gt; D:=L[1];;
gap&gt; MakeResolutionsComponent(D);
gap&gt; D;
rec( isBlockDesign := true, v := 9, 
  blocks := [ [ 1, 2, 3 ], [ 1, 4, 5 ], [ 1, 6, 7 ], [ 1, 8, 9 ], 
      [ 2, 4, 6 ], [ 2, 5, 8 ], [ 2, 7, 9 ], [ 3, 4, 9 ], [ 3, 5, 7 ], 
      [ 3, 6, 8 ], [ 4, 7, 8 ], [ 5, 6, 9 ] ], 
  tSubsetStructure := rec( t := 2, lambdas := [ 1 ] ), isBinary := true, 
  isSimple := true, blockSizes := [ 3 ], blockNumbers := [ 12 ], r := 4, 
  autGroup := Group([ (1,2)(5,6)(7,8), (1,3,2)(4,8,7)(5,6,9), (1,2)(4,7)(5,9),
      (1,2)(4,9)(5,7)(6,8), (1,4,8,6,9,2)(3,5,7) ]), 
  resolutions := rec( list := [ rec( partition := 
                [ rec( isBlockDesign := true, v := 9, 
                      blocks := [ [ 1, 2, 3 ], [ 4, 7, 8 ], [ 5, 6, 9 ] ] ), 
                  rec( isBlockDesign := true, v := 9, 
                      blocks := [ [ 1, 4, 5 ], [ 2, 7, 9 ], [ 3, 6, 8 ] ] ), 
                  rec( isBlockDesign := true, v := 9, 
                      blocks := [ [ 1, 6, 7 ], [ 2, 5, 8 ], [ 3, 4, 9 ] ] ), 
                  rec( isBlockDesign := true, v := 9, 
                      blocks := [ [ 1, 8, 9 ], [ 2, 4, 6 ], [ 3, 5, 7 ] ] ) ],
              autGroup := Group(
                [ (2,3)(4,5)(6,7)(8,9), (1,3,2)(4,8,7)(5,6,9), 
                  (1,8,9)(2,4,6)(3,7,5), (1,2)(5,6)(7,8), (1,2)(4,7)(5,9), 
                  (1,2,9,6,8,4)(3,7,5) ]) ) ], pairwiseNonisomorphic := true, 
      allClassesRepresented := true ) )
</pre>
<p>
<p>
[<a href = "chapters.htm">Up</a>] [<a href ="CHAP006.htm">Previous</a>] [<a href ="CHAP008.htm">Next</a>] [<a href = "theindex.htm">Index</a>]
<P>
<address>design manual<br>November 2006
</address></body></html>