Codebase list gap-design / 0d6d39e
Merge tag 'upstream/1.7' Upstream version 1.7 Jerome Benoit 5 years ago
53 changed file(s) with 4191 addition(s) and 696 deletion(s). Raw diff Collapse all Expand all
0 Main changes from DESIGN 1.6 to DESIGN 1.7 (March 2019)
1 -------------------------------------------------------
2
3 1. Lists of changes moved from README to new file CHANGES.md.
4
5 2. README now README.md.
6
7 3. gpl.txt now LICENSE.
8
9 4. Added test directory tst, file tst/testall.g, and a test file
10 tst/testall.tst.
11
12 5. DESIGN package is now hosted on github.
13
14 6. The utility function DESIGN_IntervalForLeastRealZero was documented.
15
16 7. Documentation updated to reflect move to github and version change.
17
18 Main change from DESIGN 1.5 to DESIGN 1.6 (November 2011)
19 ---------------------------------------------------------
20
21 1. Revised installation instructions.
22
23 Main changes from DESIGN 1.4 to DESIGN 1.5
24 ------------------------------------------
25
26 1. Added internal function:
27 - DESIGN_IntervalForLeastRealZero
28
29 2. Added user functions:
30 - PointBlockIncidenceMatrix
31 - ConcurrenceMatrix
32 - InformationMatrix
33 - BlockDesignEfficiency
34
35 3. Updated documentation, including documentation for
36 the new user functions.
37
38 Main changes from DESIGN 1.3 to DESIGN 1.4
39 ------------------------------------------
40
41 1. Added function: AGPointFlatBlockDesign.
42
43 2. Improved and documented the main features of function
44 SemiLatinSquareDuals, which can be used to classify (n x n)/k semi-Latin
45 squares and SOMA(k,n)s with given properties.
46
47 3. Improved efficiency of function PGPointFlatBlockDesign.
48
49 4. Made function TDesignLambdas faster, in particular in the case of
50 a point-transitive design, when that design's record includes a known
51 point-transitive subgroup of the design's automorphism group.
52
53 5. Improved the (undocumented) function IsPossiblySBIBD so that
54 TDesignBlockMultiplicityBound now makes full use of the Bruck-Ryser-Chowla
55 Theorem when t=2 and `k<v=b`.
56
57 6. Improved the speed of functions TDesignBlockMultiplicityBound and
58 ResolvableTDesignBlockMultiplicityBound by employing binary search to
59 find the bounds.
60
61 Main changes from DESIGN 1.2 to DESIGN 1.3
62 ------------------------------------------
63
64 1. Added function: WittDesign.
65
66 2. Fixed a bug which caused a break loop to be entered in certain cases
67 in function BlockDesigns when the least element of blockSizes was equal
68 to tSubsetStructure.t.
69
70 3. Fixed a rarely occurring bug which caused no designs to be returned
71 in function BlockDesigns in certain cases when the designs had just one
72 block each.
73
74 4. Small improvements made to the documentation and the code.
75
76 Main changes from DESIGN 1.1 to DESIGN 1.2
77 ------------------------------------------
78
79 1. Added functions:
80 - BlockIntersectionPolynomial
81 - BlockIntersectionPolynomialCheck
82 - TDesignLambdas
83 - TDesignLambdaMin
84 - TDesignIntersectionTriangle
85 - SteinerSystemIntersectionTriangle
86 - TDesignBlockMultiplicityBound
87 - ResolvableTDesignBlockMultiplicityBound
88 - BlockDesignPoints
89 - NrBlockDesignPoints
90 - BlockDesignBlocks
91 - NrBlockDesignBlocks
92 - PairwiseBalancedLambda
93 - AffineResolvableMu
94 - DeletedPointsBlockDesign
95 - DeletedBlocksBlockDesign
96 - AddedPointBlockDesign
97 - AddedBlocksBlockDesign
98 - DerivedBlockDesign
99 - ResidualBlockDesign
100
101 2. The function BlockDesign can now (optionally) construct a block
102 design from base blocks and a group of automorphisms, and the list
103 of blocks given to BlockDesign need no longer be sorted.
104
105 3. Improved documentation of the function TDesignFromTBD, and changed
106 the parameters (in a backward compatible way) to match the description
107 of the "*-construction" in the McSorley-Soicher paper.
108
109 4. The (undocumented) resolveSimple option removed from functions
110 BlockDesigns and PartitionsIntoBlockDesigns, and the option b added
111 to these functions (to specify the number of blocks in a required block
112 design or partition part).
113
114 5. Improvements made to the use of store (and time?) by the function
115 BlockDesigns.
116
117 Main changes from DESIGN 1.0 to DESIGN 1.1
118 ------------------------------------------
119
120 1. Made compatible with GAP 4.4 and its package loading mechanism.
121 DESIGN 1.1 works only with GAP 4.4/GRAPE 4.2/GAPDoc.
122
123 2. Upgraded XML I/O to DTRS protocol 2.0.
124
125 3. BlockDesignsToXMLFile has additional parameters to allow more user
126 control over expansion, output, and design id's. The default now is for
127 minimal expansion and writing out, which is a *change* from DESIGN 1.0.
128
129 4. Added functions:
130 - BlockDesignIsomorphismClassRepresentatives,
131 - DualBlockDesign,
132 - ComplementBlocksBlockDesign.
133
134 5. Function names made read-only.
135
136 6. Some utility functionality moved to GRAPE 4.2.
137
138 7. Added files README and gpl.txt.
139
0 GNU GENERAL PUBLIC LICENSE
1 Version 2, June 1991
2
3 Copyright (C) 1989, 1991 Free Software Foundation, Inc.
4 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
5 Everyone is permitted to copy and distribute verbatim copies
6 of this license document, but changing it is not allowed.
7
8 Preamble
9
10 The licenses for most software are designed to take away your
11 freedom to share and change it. By contrast, the GNU General Public
12 License is intended to guarantee your freedom to share and change free
13 software--to make sure the software is free for all its users. This
14 General Public License applies to most of the Free Software
15 Foundation's software and to any other program whose authors commit to
16 using it. (Some other Free Software Foundation software is covered by
17 the GNU Library General Public License instead.) You can apply it to
18 your programs, too.
19
20 When we speak of free software, we are referring to freedom, not
21 price. Our General Public Licenses are designed to make sure that you
22 have the freedom to distribute copies of free software (and charge for
23 this service if you wish), that you receive source code or can get it
24 if you want it, that you can change the software or use pieces of it
25 in new free programs; and that you know you can do these things.
26
27 To protect your rights, we need to make restrictions that forbid
28 anyone to deny you these rights or to ask you to surrender the rights.
29 These restrictions translate to certain responsibilities for you if you
30 distribute copies of the software, or if you modify it.
31
32 For example, if you distribute copies of such a program, whether
33 gratis or for a fee, you must give the recipients all the rights that
34 you have. You must make sure that they, too, receive or can get the
35 source code. And you must show them these terms so they know their
36 rights.
37
38 We protect your rights with two steps: (1) copyright the software, and
39 (2) offer you this license which gives you legal permission to copy,
40 distribute and/or modify the software.
41
42 Also, for each author's protection and ours, we want to make certain
43 that everyone understands that there is no warranty for this free
44 software. If the software is modified by someone else and passed on, we
45 want its recipients to know that what they have is not the original, so
46 that any problems introduced by others will not reflect on the original
47 authors' reputations.
48
49 Finally, any free program is threatened constantly by software
50 patents. We wish to avoid the danger that redistributors of a free
51 program will individually obtain patent licenses, in effect making the
52 program proprietary. To prevent this, we have made it clear that any
53 patent must be licensed for everyone's free use or not licensed at all.
54
55 The precise terms and conditions for copying, distribution and
56 modification follow.
57
58 GNU GENERAL PUBLIC LICENSE
59 TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
60
61 0. This License applies to any program or other work which contains
62 a notice placed by the copyright holder saying it may be distributed
63 under the terms of this General Public License. The "Program", below,
64 refers to any such program or work, and a "work based on the Program"
65 means either the Program or any derivative work under copyright law:
66 that is to say, a work containing the Program or a portion of it,
67 either verbatim or with modifications and/or translated into another
68 language. (Hereinafter, translation is included without limitation in
69 the term "modification".) Each licensee is addressed as "you".
70
71 Activities other than copying, distribution and modification are not
72 covered by this License; they are outside its scope. The act of
73 running the Program is not restricted, and the output from the Program
74 is covered only if its contents constitute a work based on the
75 Program (independent of having been made by running the Program).
76 Whether that is true depends on what the Program does.
77
78 1. You may copy and distribute verbatim copies of the Program's
79 source code as you receive it, in any medium, provided that you
80 conspicuously and appropriately publish on each copy an appropriate
81 copyright notice and disclaimer of warranty; keep intact all the
82 notices that refer to this License and to the absence of any warranty;
83 and give any other recipients of the Program a copy of this License
84 along with the Program.
85
86 You may charge a fee for the physical act of transferring a copy, and
87 you may at your option offer warranty protection in exchange for a fee.
88
89 2. You may modify your copy or copies of the Program or any portion
90 of it, thus forming a work based on the Program, and copy and
91 distribute such modifications or work under the terms of Section 1
92 above, provided that you also meet all of these conditions:
93
94 a) You must cause the modified files to carry prominent notices
95 stating that you changed the files and the date of any change.
96
97 b) You must cause any work that you distribute or publish, that in
98 whole or in part contains or is derived from the Program or any
99 part thereof, to be licensed as a whole at no charge to all third
100 parties under the terms of this License.
101
102 c) If the modified program normally reads commands interactively
103 when run, you must cause it, when started running for such
104 interactive use in the most ordinary way, to print or display an
105 announcement including an appropriate copyright notice and a
106 notice that there is no warranty (or else, saying that you provide
107 a warranty) and that users may redistribute the program under
108 these conditions, and telling the user how to view a copy of this
109 License. (Exception: if the Program itself is interactive but
110 does not normally print such an announcement, your work based on
111 the Program is not required to print an announcement.)
112
113 These requirements apply to the modified work as a whole. If
114 identifiable sections of that work are not derived from the Program,
115 and can be reasonably considered independent and separate works in
116 themselves, then this License, and its terms, do not apply to those
117 sections when you distribute them as separate works. But when you
118 distribute the same sections as part of a whole which is a work based
119 on the Program, the distribution of the whole must be on the terms of
120 this License, whose permissions for other licensees extend to the
121 entire whole, and thus to each and every part regardless of who wrote it.
122
123 Thus, it is not the intent of this section to claim rights or contest
124 your rights to work written entirely by you; rather, the intent is to
125 exercise the right to control the distribution of derivative or
126 collective works based on the Program.
127
128 In addition, mere aggregation of another work not based on the Program
129 with the Program (or with a work based on the Program) on a volume of
130 a storage or distribution medium does not bring the other work under
131 the scope of this License.
132
133 3. You may copy and distribute the Program (or a work based on it,
134 under Section 2) in object code or executable form under the terms of
135 Sections 1 and 2 above provided that you also do one of the following:
136
137 a) Accompany it with the complete corresponding machine-readable
138 source code, which must be distributed under the terms of Sections
139 1 and 2 above on a medium customarily used for software interchange; or,
140
141 b) Accompany it with a written offer, valid for at least three
142 years, to give any third party, for a charge no more than your
143 cost of physically performing source distribution, a complete
144 machine-readable copy of the corresponding source code, to be
145 distributed under the terms of Sections 1 and 2 above on a medium
146 customarily used for software interchange; or,
147
148 c) Accompany it with the information you received as to the offer
149 to distribute corresponding source code. (This alternative is
150 allowed only for noncommercial distribution and only if you
151 received the program in object code or executable form with such
152 an offer, in accord with Subsection b above.)
153
154 The source code for a work means the preferred form of the work for
155 making modifications to it. For an executable work, complete source
156 code means all the source code for all modules it contains, plus any
157 associated interface definition files, plus the scripts used to
158 control compilation and installation of the executable. However, as a
159 special exception, the source code distributed need not include
160 anything that is normally distributed (in either source or binary
161 form) with the major components (compiler, kernel, and so on) of the
162 operating system on which the executable runs, unless that component
163 itself accompanies the executable.
164
165 If distribution of executable or object code is made by offering
166 access to copy from a designated place, then offering equivalent
167 access to copy the source code from the same place counts as
168 distribution of the source code, even though third parties are not
169 compelled to copy the source along with the object code.
170
171 4. You may not copy, modify, sublicense, or distribute the Program
172 except as expressly provided under this License. Any attempt
173 otherwise to copy, modify, sublicense or distribute the Program is
174 void, and will automatically terminate your rights under this License.
175 However, parties who have received copies, or rights, from you under
176 this License will not have their licenses terminated so long as such
177 parties remain in full compliance.
178
179 5. You are not required to accept this License, since you have not
180 signed it. However, nothing else grants you permission to modify or
181 distribute the Program or its derivative works. These actions are
182 prohibited by law if you do not accept this License. Therefore, by
183 modifying or distributing the Program (or any work based on the
184 Program), you indicate your acceptance of this License to do so, and
185 all its terms and conditions for copying, distributing or modifying
186 the Program or works based on it.
187
188 6. Each time you redistribute the Program (or any work based on the
189 Program), the recipient automatically receives a license from the
190 original licensor to copy, distribute or modify the Program subject to
191 these terms and conditions. You may not impose any further
192 restrictions on the recipients' exercise of the rights granted herein.
193 You are not responsible for enforcing compliance by third parties to
194 this License.
195
196 7. If, as a consequence of a court judgment or allegation of patent
197 infringement or for any other reason (not limited to patent issues),
198 conditions are imposed on you (whether by court order, agreement or
199 otherwise) that contradict the conditions of this License, they do not
200 excuse you from the conditions of this License. If you cannot
201 distribute so as to satisfy simultaneously your obligations under this
202 License and any other pertinent obligations, then as a consequence you
203 may not distribute the Program at all. For example, if a patent
204 license would not permit royalty-free redistribution of the Program by
205 all those who receive copies directly or indirectly through you, then
206 the only way you could satisfy both it and this License would be to
207 refrain entirely from distribution of the Program.
208
209 If any portion of this section is held invalid or unenforceable under
210 any particular circumstance, the balance of the section is intended to
211 apply and the section as a whole is intended to apply in other
212 circumstances.
213
214 It is not the purpose of this section to induce you to infringe any
215 patents or other property right claims or to contest validity of any
216 such claims; this section has the sole purpose of protecting the
217 integrity of the free software distribution system, which is
218 implemented by public license practices. Many people have made
219 generous contributions to the wide range of software distributed
220 through that system in reliance on consistent application of that
221 system; it is up to the author/donor to decide if he or she is willing
222 to distribute software through any other system and a licensee cannot
223 impose that choice.
224
225 This section is intended to make thoroughly clear what is believed to
226 be a consequence of the rest of this License.
227
228 8. If the distribution and/or use of the Program is restricted in
229 certain countries either by patents or by copyrighted interfaces, the
230 original copyright holder who places the Program under this License
231 may add an explicit geographical distribution limitation excluding
232 those countries, so that distribution is permitted only in or among
233 countries not thus excluded. In such case, this License incorporates
234 the limitation as if written in the body of this License.
235
236 9. The Free Software Foundation may publish revised and/or new versions
237 of the General Public License from time to time. Such new versions will
238 be similar in spirit to the present version, but may differ in detail to
239 address new problems or concerns.
240
241 Each version is given a distinguishing version number. If the Program
242 specifies a version number of this License which applies to it and "any
243 later version", you have the option of following the terms and conditions
244 either of that version or of any later version published by the Free
245 Software Foundation. If the Program does not specify a version number of
246 this License, you may choose any version ever published by the Free Software
247 Foundation.
248
249 10. If you wish to incorporate parts of the Program into other free
250 programs whose distribution conditions are different, write to the author
251 to ask for permission. For software which is copyrighted by the Free
252 Software Foundation, write to the Free Software Foundation; we sometimes
253 make exceptions for this. Our decision will be guided by the two goals
254 of preserving the free status of all derivatives of our free software and
255 of promoting the sharing and reuse of software generally.
256
257 NO WARRANTY
258
259 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
260 FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN
261 OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
262 PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED
263 OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
264 MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS
265 TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE
266 PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,
267 REPAIR OR CORRECTION.
268
269 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
270 WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
271 REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
272 INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING
273 OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED
274 TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY
275 YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
276 PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
277 POSSIBILITY OF SUCH DAMAGES.
278
279 END OF TERMS AND CONDITIONS
280
281 How to Apply These Terms to Your New Programs
282
283 If you develop a new program, and you want it to be of the greatest
284 possible use to the public, the best way to achieve this is to make it
285 free software which everyone can redistribute and change under these terms.
286
287 To do so, attach the following notices to the program. It is safest
288 to attach them to the start of each source file to most effectively
289 convey the exclusion of warranty; and each file should have at least
290 the "copyright" line and a pointer to where the full notice is found.
291
292 <one line to give the program's name and a brief idea of what it does.>
293 Copyright (C) <year> <name of author>
294
295 This program is free software; you can redistribute it and/or modify
296 it under the terms of the GNU General Public License as published by
297 the Free Software Foundation; either version 2 of the License, or
298 (at your option) any later version.
299
300 This program is distributed in the hope that it will be useful,
301 but WITHOUT ANY WARRANTY; without even the implied warranty of
302 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
303 GNU General Public License for more details.
304
305 You should have received a copy of the GNU General Public License
306 along with this program; if not, write to the Free Software
307 Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
308
309
310 Also add information on how to contact you by electronic and paper mail.
311
312 If the program is interactive, make it output a short notice like this
313 when it starts in an interactive mode:
314
315 Gnomovision version 69, Copyright (C) year name of author
316 Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
317 This is free software, and you are welcome to redistribute it
318 under certain conditions; type `show c' for details.
319
320 The hypothetical commands `show w' and `show c' should show the appropriate
321 parts of the General Public License. Of course, the commands you use may
322 be called something other than `show w' and `show c'; they could even be
323 mouse-clicks or menu items--whatever suits your program.
324
325 You should also get your employer (if you work as a programmer) or your
326 school, if any, to sign a "copyright disclaimer" for the program, if
327 necessary. Here is a sample; alter the names:
328
329 Yoyodyne, Inc., hereby disclaims all copyright interest in the program
330 `Gnomovision' (which makes passes at compilers) written by James Hacker.
331
332 <signature of Ty Coon>, 1 April 1989
333 Ty Coon, President of Vice
334
335 This General Public License does not permit incorporating your program into
336 proprietary programs. If your program is a subroutine library, you may
337 consider it more useful to permit linking proprietary applications with the
338 library. If this is what you want to do, use the GNU Library General
339 Public License instead of this License.
44
55 SetPackageInfo( rec(
66
7 ## This is case sensitive, use your preferred spelling.
87 PackageName := "DESIGN",
8 Subtitle := "The Design Package for GAP",
9 Version := "1.7",
10 Date := "18/03/2019", # dd/mm/yyyy format
11 License := "GPL-2.0-or-later",
912
10 ## See '?Extending: Version Numbers' in GAP help for an explanation
11 ## of valid version numbers.
12 Version := "1.6",
13 SourceRepository := rec(
14 Type := "git",
15 URL := "https://github.com/gap-packages/design",
16 ),
17 IssueTrackerURL := Concatenation( ~.SourceRepository.URL, "/issues" ),
18 PackageWWWHome := "https://gap-packages.github.io/design",
19 README_URL := Concatenation( ~.PackageWWWHome, "/README.md" ),
20 PackageInfoURL := Concatenation( ~.PackageWWWHome, "/PackageInfo.g" ),
21 ArchiveURL := Concatenation( ~.SourceRepository.URL,
22 "/releases/download/v", ~.Version,
23 "/design-", ~.Version ),
1324
14 ## Release date of the current version in dd/mm/yyyy format.
15 Date := "23/11/2011",
25 ArchiveFormats := ".tar.gz",
1626
17 ## URL of the archive(s) of the current package release, but *without*
18 ## the format extension(s), like '.zoo', which are given next.
19 ## The archive file name *must be changed* with each version of the archive
20 ## (and probably somehow contain the package name and version).
21 ArchiveURL := "http://www.maths.qmul.ac.uk/~leonard/design/design1r6/design1r6",
22
23 ## All provided formats as list of file extensions, separated by white
24 ## space or commas.
25 ## Currently recognized formats are:
26 ## .zoo the (GAP-traditional) zoo-format with "!TEXT!" comments
27 ## for text files
28 ## .tar.gz the UNIX standard
29 ## .tar.bz2 compressed with 'bzip2', often smaller than with gzip
30 ## -win.zip zip-format for DOS/Windows, text files must have DOS
31 ## style line breaks (CRLF)
32 ##
33 ## In the future we may also provide .deb or .rpm formats which allow
34 ## a convenient installation and upgrading on Linux systems.
35 ##
36 ArchiveFormats := ".tar.gz", # the others are generated automatically
37
38 ## If not all of the archive formats mentioned above are provided, these
39 ## can be produced at the GAP side. Therefore it is necessary to know which
40 ## files of the package distribution are text files which should be unpacked
41 ## with operating system specific line breaks. There are the following
42 ## possibilities to specify the text files:
43 ##
44 ## - specify below a component 'TextFiles' which is a list of names of the
45 ## text files, relative to the package root directory (e.g., "lib/bla.g")
46 ## - specify below a component 'BinaryFiles' as list of names, then all other
47 ## files are taken as text files.
48 ## - if no 'TextFiles' or 'BinaryFiles' are given and a .zoo archive is
49 ## provided, then the files in that archive with a "!TEXT!" comment are
50 ## taken as text files
51 ## - otherwise: exactly the files with names matching the regular expression
52 ## ".*\(\.txt\|\.gi\|\.gd\|\.g\|\.c\|\.h\|\.htm\|\.html\|\.xml\|\.tex\|\.six\|\.bib\|\.tst\|README.*\|INSTALL.*\|Makefile\)"
53 ## are taken as text files
54 ##
55 ## (Remark: Just providing a .tar.gz file will often result in useful
56 ## archives)
57 ##
58 ## These entries are *optional*.
59 #TextFiles := ["init.g", ......],
6027 BinaryFiles := ["doc/manual.dvi", "doc/manual.pdf"],
6128
62
63 ## Information about authors and maintainers. Specify for each person a
64 ## record with the following information:
65 ##
66 ## rec(
67 ## # these are compulsory, characters are interpreted as latin-1, so
68 ## # German umlauts and other western European special characters are ok:
69 ## LastName := "Müller",
70 ## FirstNames := "Fritz Eduard",
71 ##
72 ## # At least one of the following two entries must be given and set
73 ## # to 'true' (an entry can be left out if value is not 'true'):
74 ## IsAuthor := true;
75 ## IsMaintainer := true;
76 ##
77 ## # At least one of the following three entries must be given.
78 ## # - preferably email address and WWW homepage
79 ## # - postal address not needed if email or WWW address available
80 ## # - if no contact known, specify postal address as "no address known"
81 ## Email := "Mueller@no.org",
82 ## # complete URL, starting with protocol
83 ## WWWHome := "http://www.no.org/~Mueller",
84 ## # separate lines by '\n' (*optional*)
85 ## PostalAddress := "Dr. F. Müller\nNo Org Institute\nNo Place 13\n\
86 ## 12345 Notown\nNocountry"
87 ##
88 ## # If you want, add one or both of the following entries (*optional*)
89 ## Place := "Notown",
90 ## Institution := "Institute for Nothing"
91 ## )
92 ##
9329 Persons := [
9430 rec(
9531 LastName := "Soicher",
9733 IsAuthor := true,
9834 IsMaintainer := true,
9935 Email := "L.H.Soicher@qmul.ac.uk",
100 WWWHome := "http://www.maths.qmul.ac.uk/~leonard/",
36 WWWHome := "http://www.maths.qmul.ac.uk/~lsoicher/",
10137 Place := "London",
10238 Institution := Concatenation( [
10339 "School of Mathematical Sciences, ",
104 "Queen Mary, University of London",
40 "Queen Mary University of London",
10541 ] )
10642 )
107 # provide such a record for each author and/or maintainer ...
108
10943 ],
11044
11145 ## Status information. Currently the following cases are recognized:
12458 # format: mm/yyyy
12559 AcceptDate := "08/2006",
12660
127 ## For a central overview of all packages and a collection of all package
128 ## archives it is necessary to have two files accessible which should be
129 ## contained in each package:
130 ## - A README file, containing a short abstract about the package
131 ## content and installation instructions.
132 ## - The file you are currently reading or editing!
133 ## You must specify URLs for these two files, these allow to automate
134 ## the updating of package information on the GAP Website, and inclusion
135 ## and updating of the package in the GAP distribution.
136 ##
137 README_URL := "http://www.maths.qmul.ac.uk/~leonard/design/design1r6/README",
138 PackageInfoURL := "http://www.maths.qmul.ac.uk/~leonard/design/design1r6/PackageInfo.g",
139
14061 ## Here you must provide a short abstract explaining the package content
14162 ## in HTML format (used on the package overview Web page) and an URL
14263 ## for a Webpage with more detailed information about the package
14566 ## '<span class="pkgname">MyPKG</span>' for specifing package names.
14667 ##
14768 AbstractHTML := "<span class=\"pkgname\">DESIGN</span> is a package for \
148 constructing, classifying, partitioning and studying block designs.",
149
150 PackageWWWHome := "http://www.designtheory.org/software/gap_design/",
69 constructing, classifying, partitioning, and studying block designs.",
15170
15271 ## On the GAP Website there is an online version of all manuals in the
15372 ## GAP distribution. To handle the documentation of a package it is
189108 Dependencies := rec(
190109 # GAP version, use version strings for specifying exact versions,
191110 # prepend a '>=' for specifying a least version.
192 GAP := ">=4.5",
111 GAP := ">=4.10",
193112 # list of pairs [package name, (least) version], package name is case
194113 # insensitive, least version denoted with '>=' prepended to version string.
195114 # without these, the package will not load
196115 # NeededOtherPackages := [["GAPDoc", ">= 0.99"]],
197 NeededOtherPackages := [["GRAPE", ">= 4.4"]],
116 NeededOtherPackages := [["GRAPE", ">= 4.8"], ["GAPDoc", ">=1.6"]],
198117 # without these the package will issue a warning while loading
199118 # SuggestedOtherPackages := [],
200 SuggestedOtherPackages := [["GAPDoc", ">= 1.4"]],
119 SuggestedOtherPackages := [],
201120 # needed external conditions (programs, operating system, ...) provide
202121 # just strings as text or
203122 # pairs [text, URL] where URL provides further information
220139 # AvailabilityTest := ReturnTrue,
221140 AvailabilityTest := ReturnTrue,
222141
223 ## Suggest here if the package should be *automatically loaded* when GAP is
224 ## started. This should usually be 'false'. Say 'true' only if your package
225 ## provides some improvements of the GAP library which are likely to enhance
226 ## the overall system performance for many users.
227 Autoload := false,
228
229 ## If the default banner does not suffice then provide a string that is
230 ## printed when the package is loaded (not when it is autoloaded or if
231 ## command line options `-b' or `-q' are given).
232 # BannerString :=
233 # "\nLoading GRAPE 4.2 (GRaph Algorithms using PErmutation groups),\n\
234 # by L.H.Soicher@qmul.ac.uk.\n\n",
235
236 Subtitle := "The Design Package for GAP",
237
238142 ## *Optional*, but recommended: path relative to package root to a file which
239143 ## contains as many tests of the package functionality as sensible.
240 #TestFile := "tst/testall.g",
144 TestFile := "tst/testall.g",
241145
242146 ## *Optional*: Here you can list some keyword related to the topic
243147 ## of the package.
+0
-179
README less more
0 The DESIGN Package for GAP
1
2 This README describes the {\DESIGN}~1.6 package for {\GAP} (version at
3 least 4.5). The {\DESIGN} package is for constructing, classifying,
4 partitioning and studying block designs.
5
6 All {\DESIGN} functions are written entirely in the {\GAP} language.
7 However, {\DESIGN} requires the {\GRAPE} package (version
8 at least 4.4) to be installed, and makes use of certain {\GRAPE}
9 functions, some of which make use of B.D.~McKay's {\nauty} package.
10 These {\GRAPE} functions can only be used on a fully installed version
11 of {\GRAPE}.
12
13 The {\DESIGN} package is Copyright {\copyright} Leonard H. Soicher
14 2003--2011. {\DESIGN} is part of a wider project, which received EPSRC
15 funding under grant GR/R29659/01, to provide a web-based resource for
16 design theory; see \URL{http://designtheory.org}.
17
18 {\DESIGN} is free software; you can redistribute it and/or modify
19 it under the terms of the GNU General Public License as published by
20 the Free Software Foundation; either version 2 of the License, or
21 (at your option) any later version. For details, see
22 \URL{http://www.gnu.org/licenses/gpl.html}
23
24 If you use {\DESIGN} to solve a problem then please send a short email
25 about it to \Mailto{L.H.Soicher@qmul.ac.uk}, and reference the {\DESIGN}
26 package as follows:
27
28 L.H. Soicher, The DESIGN package for GAP, Version 1.6, 2011,
29 http://designtheory.org/software/gap_design/.
30
31 Any comments or bug reports should also go to
32 \Mailto{L.H.Soicher@qmul.ac.uk}.
33
34 Installing the DESIGN Package
35 -----------------------------
36
37 The {\DESIGN} package is included in the standard {\GAP}~4.5
38 distribution. You only need to download and install {\DESIGN} if you need
39 to install the package locally or are installing an upgrade of {\DESIGN}
40 to an existing installation of {\GAP} (see the main {\GAP} reference
41 section "Reference: Installing a GAP Package"). If you do need to download
42 {\DESIGN}, you can find archive files for the package in various formats
43 at \URL{http://www.gap-system.org/Packages/design.html}, and then your
44 archive file of choice should be downloaded and unpacked in the `pkg'
45 subdirectory of an appropriate GAP root directory (see the main {\GAP}
46 reference section "Reference: GAP Root Directory").
47
48 The {\DESIGN} package is written entirely in {\GAP} code, and requires
49 no further installation. However, the {\DESIGN} package has complete
50 functionality only in an environment in which the {\GRAPE} package is
51 fully installed. Usually this will be on a Unix system.
52
53 Main change from DESIGN 1.5 to DESIGN 1.6
54 -----------------------------------------
55
56 (1) Revised installation instructions.
57
58 Main changes from DESIGN 1.4 to DESIGN 1.5
59 ------------------------------------------
60
61 (1) Added internal function:
62 DESIGN_IntervalForLeastRealZero
63
64 (2) Added user functions:
65 PointBlockIncidenceMatrix
66 ConcurrenceMatrix
67 InformationMatrix
68 BlockDesignEfficiency
69
70 (3) Updated documentation, including documentation for
71 the new user functions.
72
73 Main changes from DESIGN 1.3 to DESIGN 1.4
74 ------------------------------------------
75
76 (1) Added function: AGPointFlatBlockDesign.
77
78 (2) Improved and documented the main features of function
79 SemiLatinSquareDuals, which can be used to classify (n x n)/k semi-Latin
80 squares and SOMA(k,n)s with given properties.
81
82 (3) Improved efficiency of function PGPointFlatBlockDesign.
83
84 (4) Made function TDesignLambdas faster, in particular in the case of
85 a point-transitive design, when that design's record includes a known
86 point-transitive subgroup of the design's automorphism group.
87
88 (5) Improved the (undocumented) function IsPossiblySBIBD so that
89 TDesignBlockMultiplicityBound now makes full use of the Bruck-Ryser-Chowla
90 Theorem when t=2 and k<v=b.
91
92 (6) Improved the speed of functions TDesignBlockMultiplicityBound and
93 ResolvableTDesignBlockMultiplicityBound by employing binary search to
94 find the bounds.
95
96 Main changes from DESIGN 1.2 to DESIGN 1.3
97 ------------------------------------------
98
99 (1) Added function: WittDesign.
100
101 (2) Fixed a bug which caused a break loop to be entered in certain cases
102 in function BlockDesigns when the least element of blockSizes was equal
103 to tSubsetStructure.t.
104
105 (3) Fixed a rarely occurring bug which caused no designs to be returned
106 in function BlockDesigns in certain cases when the designs had just one
107 block each.
108
109 (4) Small improvements made to the documentation and the code.
110
111 Main changes from DESIGN 1.1 to DESIGN 1.2
112 ------------------------------------------
113
114 (1) Added functions:
115 BlockIntersectionPolynomial
116 BlockIntersectionPolynomialCheck
117 TDesignLambdas
118 TDesignLambdaMin
119 TDesignIntersectionTriangle
120 SteinerSystemIntersectionTriangle
121 TDesignBlockMultiplicityBound
122 ResolvableTDesignBlockMultiplicityBound
123 BlockDesignPoints
124 NrBlockDesignPoints
125 BlockDesignBlocks
126 NrBlockDesignBlocks
127 PairwiseBalancedLambda
128 AffineResolvableMu
129 DeletedPointsBlockDesign
130 DeletedBlocksBlockDesign
131 AddedPointBlockDesign
132 AddedBlocksBlockDesign
133 DerivedBlockDesign
134 ResidualBlockDesign
135
136 (2) The function BlockDesign can now (optionally) construct a block
137 design from base blocks and a group of automorphisms, and the list
138 of blocks given to BlockDesign need no longer be sorted.
139
140 (3) Improved documentation of the function TDesignFromTBD, and changed
141 the parameters (in a backward compatible way) to match the description
142 of the "*-construction" in the McSorley-Soicher paper.
143
144 (4) The (undocumented) resolveSimple option removed from functions
145 BlockDesigns and PartitionsIntoBlockDesigns, and the option b added
146 to these functions (to specify the number of blocks in a required block
147 design or partition part).
148
149 (5) Improvements made to the use of store (and time?) by the function
150 BlockDesigns.
151
152 Main changes from DESIGN 1.0 to DESIGN 1.1
153 ------------------------------------------
154
155 (1) Made compatible with GAP 4.4 and its package loading mechanism.
156 DESIGN 1.1 works only with GAP 4.4/GRAPE 4.2/GAPDoc.
157
158 (2) Upgraded XML I/O to DTRS protocol 2.0.
159
160 (3) BlockDesignsToXMLFile has additional parameters to allow more user
161 control over expansion, output, and design id's. The default now is for
162 minimal expansion and writing out, which is a *change* from DESIGN 1.0.
163
164 (4) Added functions:
165 BlockDesignIsomorphismClassRepresentatives,
166 DualBlockDesign,
167 ComplementBlocksBlockDesign.
168
169 (5) Function names made read-only.
170
171 (6) Some utility functionality moved to GRAPE 4.2.
172
173 (7) Added files README and gpl.txt.
174
175 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
176 Leonard Soicher
177 Queen Mary, University of London
178 November 2011
0 The DESIGN Package for GAP
1 ==========================
2
3 The DESIGN package is for constructing, classifying, partitioning,
4 and studying block designs.
5
6 The DESIGN package is Copyright (C) Leonard H. Soicher 2003--2019.
7
8 DESIGN is free software; you can redistribute it and/or modify
9 it under the terms of the GNU General Public License as published by
10 the Free Software Foundation; either version 2 of the License, or
11 (at your option) any later version. For details, see
12 <http://www.gnu.org/licenses/gpl.html>.
13
14 Please reference your use of the DESIGN package in a published work
15 as follows:
16
17 L.H. Soicher, The DESIGN package for GAP, Version 1.7, 2019,
18 <https://gap-packages.github.io/design>.
19
20 Any comments or bug reports should go to <L.H.Soicher@qmul.ac.uk>.
21
22 Installing the DESIGN Package
23 -----------------------------
24
25 The DESIGN package is included in the standard GAP distribution. You
26 only need to download and install DESIGN if you need to install
27 the package locally or are installing an upgrade of DESIGN to an
28 existing installation of GAP (see the main GAP reference section
29 "ref:Installing a GAP Package"). If you do need to download DESIGN,
30 you can find archive files for the package in various formats at
31 <https://www.gap-system.org/Packages/design.html>, and then your archive
32 file of choice should be downloaded and unpacked in the `pkg' subdirectory
33 of an appropriate GAP root directory (see the main GAP reference section
34 "ref:GAP Root Directories").
35
36 The DESIGN package is written entirely in GAP code, and requires
37 no further installation. However, the DESIGN package has complete
38 functionality only in an environment in which the GRAPE package is
39 fully installed.
40
41 -------------------------------------------------------------------------
42 Leonard Soicher,
43 Queen Mary University of London,
44 March 2019
66 \def\DESIGN{\sf DESIGN}
77 \def\GRAPE{\sf GRAPE}
88 \def\nauty{\it nauty}
9 \def\bliss{\it bliss}
910 \def\Aut{{\rm Aut}\,}
1011
1112 \Chapter{Automorphism groups and isomorphism testing for block designs}
1213
13 The functions in this chapter depend on {\nauty} via the {\GRAPE} package,
14 which must be fully installed in order for these functions to work.
14 The functions in this chapter depend on {\nauty} \cite{Nau90}, \cite{MP14}
15 or {\bliss} \cite{JK07} via the {\GRAPE} package, which must be fully
16 installed in order for these functions to work.
1517
1618 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
1719 \Section{Computing automorphism groups}
347347 \>DerivedBlockDesign( <D>, <x> )
348348
349349 Suppose <D> is a block design, and <x> is a point or block of <D>.
350 Then this function returns the *derived design*\index{derived design}
350 Then this function returns the *derived design*
351 \index{derived design}
351352 $DD$ of <D>, with respect to <x>.
352353
353354 If <x> is a point then $DD$ is the block design whose blocks are those
402403 \>ResidualBlockDesign( <D>, <x> )
403404
404405 Suppose <D> is a block design, and <x> is a point or block of <D>.
405 Then this function returns the *residual design*\index{residual design}
406 Then this function returns the *residual design*
407 \index{residual design}
406408 $RD$ of <D>, with respect to <x>.
407409
408410 If <x> is a point then $RD$ is the block design whose blocks are those
1111
1212 \Chapter{Design}
1313
14 This manual describes the {\DESIGN}~1.6 package for {\GAP} (version at
15 least 4.5). The {\DESIGN} package is for constructing, classifying,
16 partitioning and studying block designs.
17
18 All {\DESIGN} functions are written entirely in the {\GAP} language.
19 However, {\DESIGN} requires the {\GRAPE} package \cite{Grape} (version
20 at least 4.4) to be installed, and makes use of certain {\GRAPE}
21 functions, some of which make use of B.D.~McKay{\pif}s {\nauty} package
22 \cite{Nauty}. These {\GRAPE} functions can only be used on a fully
23 installed version of {\GRAPE}.
14 This manual describes the {\DESIGN}~1.7 package for {\GAP}. The {\DESIGN}
15 package is for constructing, classifying, partitioning, and studying
16 block designs.
2417
2518 The {\DESIGN} package is Copyright {\copyright} Leonard H. Soicher
26 2003--2011. {\DESIGN} is part of a wider project, which received EPSRC
19 2003--2019. {\DESIGN} is part of a wider project, which received EPSRC
2720 funding under grant GR/R29659/01, to provide a web-based resource for
2821 design theory; see \URL{http://designtheory.org} and \cite{Dotw}.
2922
3326 (at your option) any later version. For details, see
3427 \URL{http://www.gnu.org/licenses/gpl.html}
3528
36 If you use {\DESIGN} to solve a problem then please send a short email
37 about it to \Mailto{L.H.Soicher@qmul.ac.uk}, and reference the {\DESIGN}
38 package as follows:
29 Please reference your use of the {\DESIGN} package in a published work
30 as follows:
3931
40 L.H. Soicher, The {DESIGN} package for {GAP}, Version~1.6, 2011,
41 \URL{http://designtheory.org/software/gap_design/}.
32 L.H.~Soicher, The DESIGN package for GAP, Version 1.7, 2019,
33 \URL{https://gap-packages.github.io/design}.
4234
43 Any comments or bug reports should also go to
35 Any comments or bug reports should go to
4436 \Mailto{L.H.Soicher@qmul.ac.uk}.
4537
4638 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
4739 \Section{Installing the DESIGN Package}
4840
49 The {\DESIGN} package is included in the standard {\GAP}~4.5
41 The {\DESIGN} package is included in the standard {\GAP}
5042 distribution. You only need to download and install {\DESIGN} if you need
5143 to install the package locally or are installing an upgrade of {\DESIGN}
5244 to an existing installation of {\GAP} (see the main {\GAP} reference
53 section "Reference: Installing a GAP Package"). If you do need to download
45 section "ref:Installing a GAP Package"). If you do need to download
5446 {\DESIGN}, you can find archive files for the package in various formats
5547 at \URL{http://www.gap-system.org/Packages/design.html}, and then your
5648 archive file of choice should be downloaded and unpacked in the `pkg'
5749 subdirectory of an appropriate GAP root directory (see the main {\GAP}
58 reference section "Reference: GAP Root Directory").
50 reference section "ref:GAP Root Directories").
5951
6052 The {\DESIGN} package is written entirely in {\GAP} code, and requires
61 no further installation. However, the {\DESIGN} package has complete
62 functionality only in an environment in which the {\GRAPE} package is
63 fully installed. Usually this will be on a Unix system.
53 no further installation. However, {\DESIGN} makes use of the {\GRAPE}
54 package \cite{Grape}, which must be fully installed.
6455
6556 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
6657 \Section{Loading DESIGN}
6960 the statement
7061
7162 \begintt
72 gap> LoadPackage("design");
73 true
63 LoadPackage("design");
7464 \endtt
7565
7666 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
7767 \Section{The structure of a block design in DESIGN}
7868
79 A *block design*\index{block design} is an ordered pair $(X,B)$, where
69 A *block design*
70 \index{block design}
71 is an ordered pair $(X,B)$, where
8072 $X$ is a non-empty finite set whose elements are called *points*, and
8173 $B$ is a non-empty finite multiset whose elements are called *blocks*,
8274 such that each block is a non-empty finite multiset of points.
8375
8476 {\DESIGN} deals with arbitrary block designs. However, at present, some
85 {\DESIGN} functions only work for *binary* block designs\index{binary
86 block design} (i.e. those with no repeated element in any block of
77 {\DESIGN} functions only work for *binary* block designs
78 \index{binary block design}
79 (i.e. those with no repeated element in any block of
8780 the design), but these functions will check if an input block design
8881 is binary.
8982
1313 In this chapter we describe functions to calculate certain matrices
1414 associated with a block design, and the function `BlockDesignEfficiency'
1515 which determines certain statistical efficiency measures of a 1-design.
16
17 We also document the utility function `DESIGN_IntervalForLeastRealZero',
18 which is used in the calculation of E-efficiency measures, but has much
19 wider application.
1620
1721 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
1822 \Section{Matrices associated with a block design}
186190 Einterval := [ 3/4, 3/4 ], MV := 3/4 )
187191 \endexample
188192
189
193 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
194 \Section{Computing an interval for a certain real zero of a rational polynomial}
195
196 We document a {\DESIGN} package utility function used in the calculation
197 of the `Einterval' component above, but is more widely applicable.
198
199 \>DESIGN_IntervalForLeastRealZero( <f>, <a>, <b>, <eps> )
200
201 Suppose that <f> is a univariate polynomial over the rationals, <a>,
202 <b> are rational numbers with $<a>\le <b>$, and <eps> is a positive
203 rational number.
204
205 If <f> has no real zero in the closed interval $[<a>,<b>]$, then this
206 function returns the empty list. Otherwise, let $\alpha$ be the least
207 real zero of <f> such that $<a>\le \alpha\le <b>$. Then this function
208 returns a list $[c,d]$ of rational numbers, with $c\le \alpha\le d$
209 and $d-c\le <eps>$. Moreover, $c=d$ if and only if $\alpha$ is rational
210 (in which case $\alpha=c=d$).
211
212 \beginexample
213 gap> x:=Indeterminate(Rationals,1);
214 x_1
215 gap> f:=(x+3)*(x^2-3);
216 x_1^3+3*x_1^2-3*x_1-9
217 gap> L:=DESIGN_IntervalForLeastRealZero(f,-5,5,10^(-3));
218 [ -3, -3 ]
219 gap> L:=DESIGN_IntervalForLeastRealZero(f,-2,5,10^(-3));
220 [ -14193/8192, -7093/4096 ]
221 gap> List(L,Float);
222 [ -1.73254, -1.73169 ]
223 gap> L:=DESIGN_IntervalForLeastRealZero(f,0,5,10^(-3));
224 [ 14185/8192, 7095/4096 ]
225 gap> List(L,Float);
226 [ 1.73157, 1.73218 ]
227 gap> L:=DESIGN_IntervalForLeastRealZero(f,0,5,10^(-5));
228 [ 454045/262144, 908095/524288 ]
229 gap> List(L,Float);
230 [ 1.73204, 1.73205 ]
231 gap> L:=DESIGN_IntervalForLeastRealZero(f,2,5,10^(-5));
232 [ ]
233 \endexample
234
2828 # The HTML version of the manual
2929 mkdir -p ../htm
3030 echo "Creating HTML documentation"
31 ../../../etc/convert.pl -c -n design . ../htm
31 ../../../etc/convert.pl -t -c -n design . ../htm
3232
3333 #############################################################################
3434 ##
7979
8080 @manual{GAPDoc,
8181 author = {F. L\"ubeck and M. Neunh\"offer},
82 title = "The GAPDoc package for GAP, Version 1.2",
83 year = "2008",
82 title = "The GAPDoc package for GAP, Version 1.6.2",
83 year = "2018",
8484 note = "\URL{http://www.math.rwth-aachen.de/~Frank.Luebeck/GAPDoc/}",
85 }
86
87 @manual{Nauty,
88 author = "B.~D. McKay",
89 title = "{nauty}, Version 2.2",
90 year = "2005",
91 note = "\URL{http://cs.anu.edu.au/people/bdm/nauty/}",
9285 }
9386
9487 @article{CaSo,
124117
125118 @manual{Grape,
126119 author = "L.~H. Soicher",
127 title = "The GRAPE package for GAP, Version 4.5",
128 year = "2011",
129 note = "\URL{http://www.maths.qmul.ac.uk/~leonard/grape/}",
120 title = "The GRAPE package for GAP, Version 4.8.2",
121 year = "2019",
122 note = "\URL{https://gap-packages.github.io/grape}",
130123 }
131124
125 @manual{Nau90,
126 author = "Brendan D. McKay",
127 title = "{nauty} user's guide (version 1.5),
128 Technical report TR-CS-90-02",
129 year = "1990",
130 organization = "Australian National University",
131 address = "Computer Science Department",
132 note = "nauty homepage:
133 \URL{http://cs.anu.edu.au/people/bdm/nauty/}",
134 }
135
136 @inproceedings{JK07,
137 author = "Tommi Juntilla and Petteri Kaski",
138 title = "Engineering an efficient canonical labeling tool for large and sparse graphs",
139 crossref = "ALENEX07",
140 pages = "135--149",
141 note = "bliss homepage: \URL{http://www.tcs.hut.fi/Software/bliss/}",
142 }
143
144 @proceedings{ALENEX07,
145 title = "2007 Proceedings of the Ninth Workshop on Algorithm Engineering and Experiments (ALENEX)",
146 booktitle = "Proceedings of the Ninth Workshop on Algorithm Engineering and Experiments and the
147 Fourth Workshop on Analytic Algorithmics and Combinatorics",
148 editor = "David Applegate et al.",
149 publisher = "SIAM",
150 year = "2007",
151 }
152
153 @article{MP14,
154 title = "Practical graph isomorphism, II",
155 author = "Brendan D. McKay and Adolfo Piperno",
156 journal = "J. Symbolic Comput.",
157 volume = "60",
158 pages = "94--112",
159 year = "2014",
160 doi = "http://dx.doi.org/10.1016/j.jsc.2013.09.003",
161 }
162
Binary diff not shown
0 \makelabel{design:Design}{1}
1 \makelabel{design:Installing the DESIGN Package}{1.1}
2 \makelabel{design:Loading DESIGN}{1.2}
3 \makelabel{design:The structure of a block design in DESIGN}{1.3}
4 \makelabel{design:Example of the use of DESIGN}{1.4}
5 \makelabel{design:Information from block design parameters}{2}
6 \makelabel{design:Information from $t$-design parameters}{2.1}
7 \makelabel{design:TDesignLambdas}{2.1.1}
8 \makelabel{design:TDesignLambdaMin}{2.1.2}
9 \makelabel{design:TDesignIntersectionTriangle}{2.1.3}
10 \makelabel{design:SteinerSystemIntersectionTriangle}{2.1.4}
11 \makelabel{design:TDesignBlockMultiplicityBound}{2.1.5}
12 \makelabel{design:ResolvableTDesignBlockMultiplicityBound}{2.1.6}
13 \makelabel{design:Block intersection polynomials}{2.2}
14 \makelabel{design:BlockIntersectionPolynomial}{2.2.1}
15 \makelabel{design:BlockIntersectionPolynomialCheck}{2.2.2}
16 \makelabel{design:Constructing block designs}{3}
17 \makelabel{design:Functions to construct block designs}{3.1}
18 \makelabel{design:BlockDesign}{3.1.1}
19 \makelabel{design:BlockDesign}{3.1.1}
20 \makelabel{design:AGPointFlatBlockDesign}{3.1.2}
21 \makelabel{design:PGPointFlatBlockDesign}{3.1.3}
22 \makelabel{design:WittDesign}{3.1.4}
23 \makelabel{design:DualBlockDesign}{3.1.5}
24 \makelabel{design:ComplementBlocksBlockDesign}{3.1.6}
25 \makelabel{design:DeletedPointsBlockDesign}{3.1.7}
26 \makelabel{design:DeletedBlocksBlockDesign}{3.1.8}
27 \makelabel{design:AddedPointBlockDesign}{3.1.9}
28 \makelabel{design:AddedPointBlockDesign}{3.1.9}
29 \makelabel{design:AddedBlocksBlockDesign}{3.1.10}
30 \makelabel{design:DerivedBlockDesign}{3.1.11}
31 \makelabel{design:ResidualBlockDesign}{3.1.12}
32 \makelabel{design:TDesignFromTBD}{3.1.13}
33 \makelabel{design:Determining basic properties of block designs}{4}
34 \makelabel{design:The functions for basic properties}{4.1}
35 \makelabel{design:IsBlockDesign}{4.1.1}
36 \makelabel{design:IsBinaryBlockDesign}{4.1.2}
37 \makelabel{design:IsSimpleBlockDesign}{4.1.3}
38 \makelabel{design:IsConnectedBlockDesign}{4.1.4}
39 \makelabel{design:BlockDesignPoints}{4.1.5}
40 \makelabel{design:NrBlockDesignPoints}{4.1.6}
41 \makelabel{design:BlockDesignBlocks}{4.1.7}
42 \makelabel{design:NrBlockDesignBlocks}{4.1.8}
43 \makelabel{design:BlockSizes}{4.1.9}
44 \makelabel{design:BlockNumbers}{4.1.10}
45 \makelabel{design:ReplicationNumber}{4.1.11}
46 \makelabel{design:PairwiseBalancedLambda}{4.1.12}
47 \makelabel{design:TSubsetLambdasVector}{4.1.13}
48 \makelabel{design:AllTDesignLambdas}{4.1.14}
49 \makelabel{design:AffineResolvableMu}{4.1.15}
50 \makelabel{design:Matrices and efficiency measures for block designs}{5}
51 \makelabel{design:Matrices associated with a block design}{5.1}
52 \makelabel{design:PointBlockIncidenceMatrix}{5.1.1}
53 \makelabel{design:ConcurrenceMatrix}{5.1.2}
54 \makelabel{design:InformationMatrix}{5.1.3}
55 \makelabel{design:The function BlockDesignEfficiency}{5.2}
56 \makelabel{design:BlockDesignEfficiency}{5.2.1}
57 \makelabel{design:BlockDesignEfficiency}{5.2.1}
58 \makelabel{design:BlockDesignEfficiency}{5.2.1}
59 \makelabel{design:Computing an interval for a certain real zero of a rational polynomial}{5.3}
60 \makelabel{design:DESIGN_IntervalForLeastRealZero}{5.3.1}
61 \makelabel{design:Automorphism groups and isomorphism testing for block designs}{6}
62 \makelabel{design:Computing automorphism groups}{6.1}
63 \makelabel{design:AutGroupBlockDesign}{6.1.1}
64 \makelabel{design:Testing isomorphism}{6.2}
65 \makelabel{design:IsIsomorphicBlockDesign}{6.2.1}
66 \makelabel{design:BlockDesignIsomorphismClassRepresentatives}{6.2.2}
67 \makelabel{design:Classifying block designs}{7}
68 \makelabel{design:The function BlockDesigns}{7.1}
69 \makelabel{design:BlockDesigns}{7.1.1}
70 \makelabel{design:Classifying semi-Latin squares}{8}
71 \makelabel{design:Semi-Latin squares and SOMAs}{8.1}
72 \makelabel{design:The function SemiLatinSquareDuals}{8.2}
73 \makelabel{design:SemiLatinSquareDuals}{8.2.1}
74 \makelabel{design:SemiLatinSquareDuals}{8.2.1}
75 \makelabel{design:SemiLatinSquareDuals}{8.2.1}
76 \makelabel{design:SemiLatinSquareDuals}{8.2.1}
77 \makelabel{design:Partitioning block designs}{9}
78 \makelabel{design:Partitioning a block design into block designs}{9.1}
79 \makelabel{design:PartitionsIntoBlockDesigns}{9.1.1}
80 \makelabel{design:Computing resolutions}{9.2}
81 \makelabel{design:MakeResolutionsComponent}{9.2.1}
82 \makelabel{design:MakeResolutionsComponent}{9.2.1}
83 \makelabel{design:XML I/O of block designs}{10}
84 \makelabel{design:Writing lists of block designs and their properties in XML-format}{10.1}
85 \makelabel{design:BlockDesignsToXMLFile}{10.1.1}
86 \makelabel{design:BlockDesignsToXMLFile}{10.1.1}
87 \makelabel{design:BlockDesignsToXMLFile}{10.1.1}
88 \makelabel{design:Reading lists of block designs in XML-format}{10.2}
89 \makelabel{design:BlockDesignsFromXMLFile}{10.2.1}
90 \makelabel{design:Bibliography}{}
91 \setcitlab {BaCh}{BC97}
92 \setcitlab {BaCa}{BC09}
93 \setcitlab {Dotw}{BCD{+}06}
94 \setcitlab {BaRo}{BR97}
95 \setcitlab {Extrep}{CDMS04}
96 \setcitlab {CaSo}{CS07}
97 \setcitlab {JK07}{JK07}
98 \setcitlab {Nau90}{McK90}
99 \setcitlab {MP14}{MP14}
100 \setcitlab {McSo}{MS07}
101 \setcitlab {Soi1}{Soi10}
102 \setcitlab {Grape}{Soi19}
103 \makelabel{design:Index}{}
Binary diff not shown
0 C design.tex 1. Design
1 S 1.1. Installing the DESIGN Package
2 S 1.2. Loading DESIGN
3 S 1.3. The structure of a block design in DESIGN
4 I 1.3. block design
5 I 1.3. binary block design
6 S 1.4. Example of the use of DESIGN
7 C parameters.tex 2. Information from block design parameters
8 S 2.1. Information from $t$-design parameters
9 I 2.1. t-design
10 F 2.1. TDesignLambdas
11 F 2.1. TDesignLambdaMin
12 F 2.1. TDesignIntersectionTriangle
13 F 2.1. SteinerSystemIntersectionTriangle
14 F 2.1. TDesignBlockMultiplicityBound
15 F 2.1. ResolvableTDesignBlockMultiplicityBound
16 S 2.2. Block intersection polynomials
17 F 2.2. BlockIntersectionPolynomial
18 F 2.2. BlockIntersectionPolynomialCheck
19 C construct.tex 3. Constructing block designs
20 S 3.1. Functions to construct block designs
21 F 3.1. BlockDesign
22 F 3.1. BlockDesign
23 F 3.1. AGPointFlatBlockDesign
24 F 3.1. PGPointFlatBlockDesign
25 F 3.1. WittDesign
26 F 3.1. DualBlockDesign
27 F 3.1. ComplementBlocksBlockDesign
28 F 3.1. DeletedPointsBlockDesign
29 F 3.1. DeletedBlocksBlockDesign
30 F 3.1. AddedPointBlockDesign
31 F 3.1. AddedPointBlockDesign
32 F 3.1. AddedBlocksBlockDesign
33 F 3.1. DerivedBlockDesign
34 I 3.1. derived design
35 F 3.1. ResidualBlockDesign
36 I 3.1. residual design
37 F 3.1. TDesignFromTBD
38 C basic.tex 4. Determining basic properties of block designs
39 S 4.1. The functions for basic properties
40 F 4.1. IsBlockDesign
41 F 4.1. IsBinaryBlockDesign
42 F 4.1. IsSimpleBlockDesign
43 F 4.1. IsConnectedBlockDesign
44 F 4.1. BlockDesignPoints
45 F 4.1. NrBlockDesignPoints
46 F 4.1. BlockDesignBlocks
47 F 4.1. NrBlockDesignBlocks
48 F 4.1. BlockSizes
49 F 4.1. BlockNumbers
50 F 4.1. ReplicationNumber
51 F 4.1. PairwiseBalancedLambda
52 F 4.1. TSubsetLambdasVector
53 F 4.1. AllTDesignLambdas
54 F 4.1. AffineResolvableMu
55 C efficiency.tex 5. Matrices and efficiency measures for block designs
56 S 5.1. Matrices associated with a block design
57 F 5.1. PointBlockIncidenceMatrix
58 F 5.1. ConcurrenceMatrix
59 F 5.1. InformationMatrix
60 S 5.2. The function BlockDesignEfficiency
61 F 5.2. BlockDesignEfficiency
62 F 5.2. BlockDesignEfficiency
63 F 5.2. BlockDesignEfficiency
64 S 5.3. Computing an interval for a certain real zero of a rational polynomial
65 F 5.3. DESIGN_IntervalForLeastRealZero
66 C autiso.tex 6. Automorphism groups and isomorphism testing for block designs
67 S 6.1. Computing automorphism groups
68 F 6.1. AutGroupBlockDesign
69 S 6.2. Testing isomorphism
70 F 6.2. IsIsomorphicBlockDesign
71 F 6.2. BlockDesignIsomorphismClassRepresentatives
72 C classify.tex 7. Classifying block designs
73 S 7.1. The function BlockDesigns
74 F 7.1. BlockDesigns
75 C sls.tex 8. Classifying semi-Latin squares
76 S 8.1. Semi-Latin squares and SOMAs
77 I 8.1. semi-Latin square
78 I 8.1. SOMA
79 S 8.2. The function SemiLatinSquareDuals
80 F 8.2. SemiLatinSquareDuals
81 F 8.2. SemiLatinSquareDuals
82 F 8.2. SemiLatinSquareDuals
83 F 8.2. SemiLatinSquareDuals
84 C partition.tex 9. Partitioning block designs
85 S 9.1. Partitioning a block design into block designs
86 F 9.1. PartitionsIntoBlockDesigns
87 S 9.2. Computing resolutions
88 F 9.2. MakeResolutionsComponent
89 F 9.2. MakeResolutionsComponent
90 C xmlio.tex 10. XML I/O of block designs
91 S 10.1. Writing lists of block designs and their properties in XML-format
92 F 10.1. BlockDesignsToXMLFile
93 F 10.1. BlockDesignsToXMLFile
94 F 10.1. BlockDesignsToXMLFile
95 S 10.2. Reading lists of block designs in XML-format
96 F 10.2. BlockDesignsFromXMLFile
2222 %F UseReferences . . . . . . . . . . . . . . . . . . specify references
2323 %%
2424 % \UseReferences{../../../doc/ext}
25 % \UseReferences{../../../doc/ref}
25 \UseReferences{../../../doc/ref}
2626 %
2727 %
2828 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
1414 \Section{Information from $t$-design parameters}
1515
1616 For $t$ a non-negative integer and $v,k,\lambda$ positive integers
17 with $t\le k\le v$, a $t$-*design*\index{t-design} with *parameters*
17 with $t\le k\le v$, a $t$-*design*
18 \index{t-design}
19 with *parameters*
1820 $t,v,k,\lambda$, or a $t$-$(v,k,\lambda)$ *design*, is a binary block
1921 design with exactly $v$ points, such that each block has size $k$ and
2022 each $t$-subset of the points is contained in exactly $\lambda$ blocks.
1818 \Section{Semi-Latin squares and SOMAs}
1919
2020 Let $n$ and $k$ be positive integers. An $(n\times n)/k$ *semi-Latin
21 square*\index{semi-Latin square} is an $n$ by $n$ array $A$, whose
21 square*
22 \index{semi-Latin square}
23 is an $n$ by $n$ array $A$, whose
2224 entries are $k$-subsets of a $kn$-set $X$ (the *symbol-set*), such that
2325 each element of $X$ occurs exactly once in each row and exactly once in
2426 each column of $A$. (Thus an $(n\times n)/1$ semi-Latin square is the same
2527 thing as a Latin square of order $n$.) For extensive useful information on
2628 semi-Latin squares, see \URL{http://www.maths.qmul.ac.uk/~rab/sls.html}.
2729
28 A SOMA$(k,n)$\index{SOMA} is an $(n\times n)/k$ semi-Latin square $A$,
30 A SOMA$(k,n)$
31 \index{SOMA}
32 is an $(n\times n)/k$ semi-Latin square $A$,
2933 with $n\ge2$, in which no 2-subset of the symbol-set is contained in
3034 more than one entry of $A$. For extensive useful information on SOMAs,
31 see \URL{http://www.maths.qmul.ac.uk/~leonard/soma/}.
35 see \URL{http://www.maths.qmul.ac.uk/~lsoicher/soma/}.
3236
3337 Let $A$ and $B$ be $(n\times n)/k$ semi-Latin squares. We say that
3438 $B$ is *(weakly) isomorphic* to $A$ if $B$ can be obtained from $A$
6464
6565 \beginexample
6666 gap> D:=[ BlockDesign(3, [[1,2],[1,3]]),
67 > BlockDesign(3, [[1,2],[1,2],[2,3]]) ];;
67 > BlockDesign(3, [[1,2],[1,2],[2,3]]) ];;
6868 gap> designs:=rec(list:=D, pairwiseNonisomorphic:=true);;
6969 gap> BlockDesignsToXMLFile("example.xml",designs,[],"example");
7070 \endexample
100100 \beginexample
101101 gap> BlockDesignsFromXMLFile("example.xml");
102102 rec(
103 infoXML := "<info>\n<software>\n[ DESIGN-1.6, GRAPE-4.5, GAPDoc-1.4, GAP-4.5\
104 .2(beta) ]\n</software>\n</info>",
103 infoXML := "<info>\n<software>\n[ DESIGN-1.7, GRAPE-4.8.2, GAPDoc-1.6.2, GAP\
104 -4.10.1 ]\n</software>\n</info>",
105105 list :=
106106 [
107107 rec( blocks := [ [ 1, 2 ], [ 1, 3 ] ], id := "example-0",
+0
-340
gpl.txt less more
0 GNU GENERAL PUBLIC LICENSE
1 Version 2, June 1991
2
3 Copyright (C) 1989, 1991 Free Software Foundation, Inc.
4 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
5 Everyone is permitted to copy and distribute verbatim copies
6 of this license document, but changing it is not allowed.
7
8 Preamble
9
10 The licenses for most software are designed to take away your
11 freedom to share and change it. By contrast, the GNU General Public
12 License is intended to guarantee your freedom to share and change free
13 software--to make sure the software is free for all its users. This
14 General Public License applies to most of the Free Software
15 Foundation's software and to any other program whose authors commit to
16 using it. (Some other Free Software Foundation software is covered by
17 the GNU Library General Public License instead.) You can apply it to
18 your programs, too.
19
20 When we speak of free software, we are referring to freedom, not
21 price. Our General Public Licenses are designed to make sure that you
22 have the freedom to distribute copies of free software (and charge for
23 this service if you wish), that you receive source code or can get it
24 if you want it, that you can change the software or use pieces of it
25 in new free programs; and that you know you can do these things.
26
27 To protect your rights, we need to make restrictions that forbid
28 anyone to deny you these rights or to ask you to surrender the rights.
29 These restrictions translate to certain responsibilities for you if you
30 distribute copies of the software, or if you modify it.
31
32 For example, if you distribute copies of such a program, whether
33 gratis or for a fee, you must give the recipients all the rights that
34 you have. You must make sure that they, too, receive or can get the
35 source code. And you must show them these terms so they know their
36 rights.
37
38 We protect your rights with two steps: (1) copyright the software, and
39 (2) offer you this license which gives you legal permission to copy,
40 distribute and/or modify the software.
41
42 Also, for each author's protection and ours, we want to make certain
43 that everyone understands that there is no warranty for this free
44 software. If the software is modified by someone else and passed on, we
45 want its recipients to know that what they have is not the original, so
46 that any problems introduced by others will not reflect on the original
47 authors' reputations.
48
49 Finally, any free program is threatened constantly by software
50 patents. We wish to avoid the danger that redistributors of a free
51 program will individually obtain patent licenses, in effect making the
52 program proprietary. To prevent this, we have made it clear that any
53 patent must be licensed for everyone's free use or not licensed at all.
54
55 The precise terms and conditions for copying, distribution and
56 modification follow.
57
58 GNU GENERAL PUBLIC LICENSE
59 TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
60
61 0. This License applies to any program or other work which contains
62 a notice placed by the copyright holder saying it may be distributed
63 under the terms of this General Public License. The "Program", below,
64 refers to any such program or work, and a "work based on the Program"
65 means either the Program or any derivative work under copyright law:
66 that is to say, a work containing the Program or a portion of it,
67 either verbatim or with modifications and/or translated into another
68 language. (Hereinafter, translation is included without limitation in
69 the term "modification".) Each licensee is addressed as "you".
70
71 Activities other than copying, distribution and modification are not
72 covered by this License; they are outside its scope. The act of
73 running the Program is not restricted, and the output from the Program
74 is covered only if its contents constitute a work based on the
75 Program (independent of having been made by running the Program).
76 Whether that is true depends on what the Program does.
77
78 1. You may copy and distribute verbatim copies of the Program's
79 source code as you receive it, in any medium, provided that you
80 conspicuously and appropriately publish on each copy an appropriate
81 copyright notice and disclaimer of warranty; keep intact all the
82 notices that refer to this License and to the absence of any warranty;
83 and give any other recipients of the Program a copy of this License
84 along with the Program.
85
86 You may charge a fee for the physical act of transferring a copy, and
87 you may at your option offer warranty protection in exchange for a fee.
88
89 2. You may modify your copy or copies of the Program or any portion
90 of it, thus forming a work based on the Program, and copy and
91 distribute such modifications or work under the terms of Section 1
92 above, provided that you also meet all of these conditions:
93
94 a) You must cause the modified files to carry prominent notices
95 stating that you changed the files and the date of any change.
96
97 b) You must cause any work that you distribute or publish, that in
98 whole or in part contains or is derived from the Program or any
99 part thereof, to be licensed as a whole at no charge to all third
100 parties under the terms of this License.
101
102 c) If the modified program normally reads commands interactively
103 when run, you must cause it, when started running for such
104 interactive use in the most ordinary way, to print or display an
105 announcement including an appropriate copyright notice and a
106 notice that there is no warranty (or else, saying that you provide
107 a warranty) and that users may redistribute the program under
108 these conditions, and telling the user how to view a copy of this
109 License. (Exception: if the Program itself is interactive but
110 does not normally print such an announcement, your work based on
111 the Program is not required to print an announcement.)
112
113 These requirements apply to the modified work as a whole. If
114 identifiable sections of that work are not derived from the Program,
115 and can be reasonably considered independent and separate works in
116 themselves, then this License, and its terms, do not apply to those
117 sections when you distribute them as separate works. But when you
118 distribute the same sections as part of a whole which is a work based
119 on the Program, the distribution of the whole must be on the terms of
120 this License, whose permissions for other licensees extend to the
121 entire whole, and thus to each and every part regardless of who wrote it.
122
123 Thus, it is not the intent of this section to claim rights or contest
124 your rights to work written entirely by you; rather, the intent is to
125 exercise the right to control the distribution of derivative or
126 collective works based on the Program.
127
128 In addition, mere aggregation of another work not based on the Program
129 with the Program (or with a work based on the Program) on a volume of
130 a storage or distribution medium does not bring the other work under
131 the scope of this License.
132
133 3. You may copy and distribute the Program (or a work based on it,
134 under Section 2) in object code or executable form under the terms of
135 Sections 1 and 2 above provided that you also do one of the following:
136
137 a) Accompany it with the complete corresponding machine-readable
138 source code, which must be distributed under the terms of Sections
139 1 and 2 above on a medium customarily used for software interchange; or,
140
141 b) Accompany it with a written offer, valid for at least three
142 years, to give any third party, for a charge no more than your
143 cost of physically performing source distribution, a complete
144 machine-readable copy of the corresponding source code, to be
145 distributed under the terms of Sections 1 and 2 above on a medium
146 customarily used for software interchange; or,
147
148 c) Accompany it with the information you received as to the offer
149 to distribute corresponding source code. (This alternative is
150 allowed only for noncommercial distribution and only if you
151 received the program in object code or executable form with such
152 an offer, in accord with Subsection b above.)
153
154 The source code for a work means the preferred form of the work for
155 making modifications to it. For an executable work, complete source
156 code means all the source code for all modules it contains, plus any
157 associated interface definition files, plus the scripts used to
158 control compilation and installation of the executable. However, as a
159 special exception, the source code distributed need not include
160 anything that is normally distributed (in either source or binary
161 form) with the major components (compiler, kernel, and so on) of the
162 operating system on which the executable runs, unless that component
163 itself accompanies the executable.
164
165 If distribution of executable or object code is made by offering
166 access to copy from a designated place, then offering equivalent
167 access to copy the source code from the same place counts as
168 distribution of the source code, even though third parties are not
169 compelled to copy the source along with the object code.
170
171 4. You may not copy, modify, sublicense, or distribute the Program
172 except as expressly provided under this License. Any attempt
173 otherwise to copy, modify, sublicense or distribute the Program is
174 void, and will automatically terminate your rights under this License.
175 However, parties who have received copies, or rights, from you under
176 this License will not have their licenses terminated so long as such
177 parties remain in full compliance.
178
179 5. You are not required to accept this License, since you have not
180 signed it. However, nothing else grants you permission to modify or
181 distribute the Program or its derivative works. These actions are
182 prohibited by law if you do not accept this License. Therefore, by
183 modifying or distributing the Program (or any work based on the
184 Program), you indicate your acceptance of this License to do so, and
185 all its terms and conditions for copying, distributing or modifying
186 the Program or works based on it.
187
188 6. Each time you redistribute the Program (or any work based on the
189 Program), the recipient automatically receives a license from the
190 original licensor to copy, distribute or modify the Program subject to
191 these terms and conditions. You may not impose any further
192 restrictions on the recipients' exercise of the rights granted herein.
193 You are not responsible for enforcing compliance by third parties to
194 this License.
195
196 7. If, as a consequence of a court judgment or allegation of patent
197 infringement or for any other reason (not limited to patent issues),
198 conditions are imposed on you (whether by court order, agreement or
199 otherwise) that contradict the conditions of this License, they do not
200 excuse you from the conditions of this License. If you cannot
201 distribute so as to satisfy simultaneously your obligations under this
202 License and any other pertinent obligations, then as a consequence you
203 may not distribute the Program at all. For example, if a patent
204 license would not permit royalty-free redistribution of the Program by
205 all those who receive copies directly or indirectly through you, then
206 the only way you could satisfy both it and this License would be to
207 refrain entirely from distribution of the Program.
208
209 If any portion of this section is held invalid or unenforceable under
210 any particular circumstance, the balance of the section is intended to
211 apply and the section as a whole is intended to apply in other
212 circumstances.
213
214 It is not the purpose of this section to induce you to infringe any
215 patents or other property right claims or to contest validity of any
216 such claims; this section has the sole purpose of protecting the
217 integrity of the free software distribution system, which is
218 implemented by public license practices. Many people have made
219 generous contributions to the wide range of software distributed
220 through that system in reliance on consistent application of that
221 system; it is up to the author/donor to decide if he or she is willing
222 to distribute software through any other system and a licensee cannot
223 impose that choice.
224
225 This section is intended to make thoroughly clear what is believed to
226 be a consequence of the rest of this License.
227
228 8. If the distribution and/or use of the Program is restricted in
229 certain countries either by patents or by copyrighted interfaces, the
230 original copyright holder who places the Program under this License
231 may add an explicit geographical distribution limitation excluding
232 those countries, so that distribution is permitted only in or among
233 countries not thus excluded. In such case, this License incorporates
234 the limitation as if written in the body of this License.
235
236 9. The Free Software Foundation may publish revised and/or new versions
237 of the General Public License from time to time. Such new versions will
238 be similar in spirit to the present version, but may differ in detail to
239 address new problems or concerns.
240
241 Each version is given a distinguishing version number. If the Program
242 specifies a version number of this License which applies to it and "any
243 later version", you have the option of following the terms and conditions
244 either of that version or of any later version published by the Free
245 Software Foundation. If the Program does not specify a version number of
246 this License, you may choose any version ever published by the Free Software
247 Foundation.
248
249 10. If you wish to incorporate parts of the Program into other free
250 programs whose distribution conditions are different, write to the author
251 to ask for permission. For software which is copyrighted by the Free
252 Software Foundation, write to the Free Software Foundation; we sometimes
253 make exceptions for this. Our decision will be guided by the two goals
254 of preserving the free status of all derivatives of our free software and
255 of promoting the sharing and reuse of software generally.
256
257 NO WARRANTY
258
259 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
260 FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN
261 OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
262 PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED
263 OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
264 MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS
265 TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE
266 PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,
267 REPAIR OR CORRECTION.
268
269 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
270 WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
271 REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
272 INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING
273 OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED
274 TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY
275 YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
276 PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
277 POSSIBILITY OF SUCH DAMAGES.
278
279 END OF TERMS AND CONDITIONS
280
281 How to Apply These Terms to Your New Programs
282
283 If you develop a new program, and you want it to be of the greatest
284 possible use to the public, the best way to achieve this is to make it
285 free software which everyone can redistribute and change under these terms.
286
287 To do so, attach the following notices to the program. It is safest
288 to attach them to the start of each source file to most effectively
289 convey the exclusion of warranty; and each file should have at least
290 the "copyright" line and a pointer to where the full notice is found.
291
292 <one line to give the program's name and a brief idea of what it does.>
293 Copyright (C) <year> <name of author>
294
295 This program is free software; you can redistribute it and/or modify
296 it under the terms of the GNU General Public License as published by
297 the Free Software Foundation; either version 2 of the License, or
298 (at your option) any later version.
299
300 This program is distributed in the hope that it will be useful,
301 but WITHOUT ANY WARRANTY; without even the implied warranty of
302 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
303 GNU General Public License for more details.
304
305 You should have received a copy of the GNU General Public License
306 along with this program; if not, write to the Free Software
307 Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
308
309
310 Also add information on how to contact you by electronic and paper mail.
311
312 If the program is interactive, make it output a short notice like this
313 when it starts in an interactive mode:
314
315 Gnomovision version 69, Copyright (C) year name of author
316 Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
317 This is free software, and you are welcome to redistribute it
318 under certain conditions; type `show c' for details.
319
320 The hypothetical commands `show w' and `show c' should show the appropriate
321 parts of the General Public License. Of course, the commands you use may
322 be called something other than `show w' and `show c'; they could even be
323 mouse-clicks or menu items--whatever suits your program.
324
325 You should also get your employer (if you work as a programmer) or your
326 school, if any, to sign a "copyright disclaimer" for the program, if
327 necessary. Here is a sample; alter the names:
328
329 Yoyodyne, Inc., hereby disclaims all copyright interest in the program
330 `Gnomovision' (which makes passes at compilers) written by James Hacker.
331
332 <signature of Ty Coon>, 1 April 1989
333 Ty Coon, President of Vice
334
335 This General Public License does not permit incorporating your program into
336 proprietary programs. If your program is a subroutine library, you may
337 consider it more useful to permit linking proprietary applications with the
338 library. If this is what you want to do, use the GNU Library General
339 Public License instead of this License.
0 <html><head><title>[design] 1 Design</title></head>
1 <body text="#000000" bgcolor="#ffffff">
2 [<a href = "chapters.htm">Up</a>] [<a href ="CHAP002.htm">Next</a>] [<a href = "theindex.htm">Index</a>]
3 <h1>1 Design</h1><p>
4 <P>
5 <H3>Sections</H3>
6 <oL>
7 <li> <A HREF="CHAP001.htm#SECT001">Installing the DESIGN Package</a>
8 <li> <A HREF="CHAP001.htm#SECT002">Loading DESIGN</a>
9 <li> <A HREF="CHAP001.htm#SECT003">The structure of a block design in DESIGN</a>
10 <li> <A HREF="CHAP001.htm#SECT004">Example of the use of DESIGN</a>
11 </ol><p>
12 <p>
13 This manual describes the DESIGN&nbsp;1.7 package for <font face="Gill Sans,Helvetica,Arial">GAP</font>. The DESIGN
14 package is for constructing, classifying, partitioning, and studying
15 block designs.
16 <p>
17 The DESIGN package is Copyright &copy; Leonard H. Soicher
18 2003--2019. DESIGN is part of a wider project, which received EPSRC
19 funding under grant GR/R29659/01, to provide a web-based resource for
20 design theory; see <a href="http://designtheory.org">http://designtheory.org</a> and <a href="biblio.htm#Dotw"><cite>Dotw</cite></a>.
21 <p>
22 DESIGN is free software; you can redistribute it and/or modify
23 it under the terms of the GNU General Public License as published by
24 the Free Software Foundation; either version 2 of the License, or
25 (at your option) any later version. For details, see
26 <a href="http://www.gnu.org/licenses/gpl.html">http://www.gnu.org/licenses/gpl.html</a>
27 <p>
28 Please reference your use of the DESIGN package in a published work
29 as follows:
30 <p>
31 L.H.&nbsp;Soicher, The DESIGN package for GAP, Version 1.7, 2019,
32 <a href="https://gap-packages.github.io/design">https://gap-packages.github.io/design</a>.
33 <p>
34 Any comments or bug reports should go to
35 <a href="mailto:L.H.Soicher@qmul.ac.uk">L.H.Soicher@qmul.ac.uk</a>.
36 <p>
37 <p>
38 <h2><a name="SECT001">1.1 Installing the DESIGN Package</a></h2>
39 <p><p>
40 The DESIGN package is included in the standard <font face="Gill Sans,Helvetica,Arial">GAP</font>
41 distribution. You only need to download and install DESIGN if you need
42 to install the package locally or are installing an upgrade of DESIGN
43 to an existing installation of <font face="Gill Sans,Helvetica,Arial">GAP</font> (see the main <font face="Gill Sans,Helvetica,Arial">GAP</font> reference
44 section <a href="../../../doc/ref/chap76.html#X82473E4B8756C6CD">Installing a GAP Package</a>). If you do need to download
45 DESIGN, you can find archive files for the package in various formats
46 at <a href="http://www.gap-system.org/Packages/design.html">http://www.gap-system.org/Packages/design.html</a>, and then your
47 archive file of choice should be downloaded and unpacked in the <code>pkg</code>
48 subdirectory of an appropriate GAP root directory (see the main <font face="Gill Sans,Helvetica,Arial">GAP</font>
49 reference section <a href="../../../doc/ref/chap9.html#X7A4973627A5DB27D">GAP Root Directories</a>).
50 <p>
51 The DESIGN package is written entirely in <font face="Gill Sans,Helvetica,Arial">GAP</font> code, and requires
52 no further installation. However, DESIGN makes use of the GRAPE
53 package <a href="biblio.htm#Grape"><cite>Grape</cite></a>, which must be fully installed.
54 <p>
55 <p>
56 <h2><a name="SECT002">1.2 Loading DESIGN</a></h2>
57 <p><p>
58 Before using DESIGN you must load the package within <font face="Gill Sans,Helvetica,Arial">GAP</font> by calling
59 the statement
60 <p>
61 <pre>
62 LoadPackage("design");
63 </pre>
64 <p>
65 <p>
66 <h2><a name="SECT003">1.3 The structure of a block design in DESIGN</a></h2>
67 <p><p>
68 A <strong>block design</strong>
69 <a name = "I0"></a>
70
71 is an ordered pair (<i>X</i>,<i>B</i>), where
72 <i>X</i> is a non-empty finite set whose elements are called <strong>points</strong>, and
73 <i>B</i> is a non-empty finite multiset whose elements are called <strong>blocks</strong>,
74 such that each block is a non-empty finite multiset of points.
75 <p>
76 DESIGN deals with arbitrary block designs. However, at present, some
77 DESIGN functions only work for <strong>binary</strong> block designs
78 <a name = "I1"></a>
79
80 (i.e. those with no repeated element in any block of
81 the design), but these functions will check if an input block design
82 is binary.
83 <p>
84 In DESIGN, a block design <var>D</var> is stored as a record, with mandatory
85 components <code>isBlockDesign</code>, <code>v</code>, and <code>blocks</code>. The points of a block
86 design <var>D</var> are always 1,2,...,<code></code><var>D</var><code>.v</code>, but they may also be given <strong>names</strong>
87 in the optional component <code>pointNames</code>, with <code></code><var>D</var><code>.pointNames[</code><var>i</var><code>]</code>
88 the name of point <var>i</var>. The <code>blocks</code> component must be a sorted list
89 of the blocks of <var>D</var> (including any repeats), with each block being a
90 sorted list of points (including any repeats).
91 <p>
92 A block design record may also have some optional components which store
93 information about the design. At present these optional components include
94 <code>isSimple</code>, <code>isBinary</code>, <code>isConnected</code>, <code>r</code>, <code>blockSizes</code>, <code>blockNumbers</code>,
95 <code>resolutions</code>, <code>autGroup</code>, <code>autSubgroup</code>, <code>tSubsetStructure</code>,
96 <code>allTDesignLambdas</code>, <code>efficiency</code>, <code>id</code>, <code>statistical_propertiesXML</code>,
97 and <code>pointNames</code>.
98 <p>
99 A non-expert user should only use functions in the DESIGN package to
100 create block design records and their components.
101 <p>
102 <p>
103 <h2><a name="SECT004">1.4 Example of the use of DESIGN</a></h2>
104 <p><p>
105 To give you an idea of the capabilities of this package, we now give
106 an extended example of an application of the DESIGN package, in
107 which a nearly resolvable non-simple 2-(21,4,3) design is constructed
108 (for Donald Preece) via a pairwise-balanced design. All the DESIGN
109 functions used here are described in this manual.
110 <p>
111 The program first discovers the unique (up to isomorphism)
112 pairwise-balanced 2-(21,{4,5},1) design <i>D</i> invariant under <i>H</i>=&#9001;(1,2,&#8230;,20)&#9002;, and then applies the *-construction of
113 <a href="biblio.htm#McSo"><cite>McSo</cite></a> to this design <i>D</i> to obtain a non-simple 2-(21,4,3) design
114 <i>Dstar</i> with automorphism group of order 80. The program then classifies
115 the near-resolutions of <i>Dstar</i> invariant under the subgroup of order 5
116 of <i>H</i>, and finds exactly two such (up to the action of \Aut(<i>Dstar</i>)).
117 Finally, <i>Dstar</i> is printed.
118 <p>
119 <pre>
120 gap&gt; H:=CyclicGroup(IsPermGroup,20);
121 Group([ (1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20) ])
122 gap&gt; D:=BlockDesigns(rec(v:=21,blockSizes:=[4,5],
123 &gt; tSubsetStructure:=rec(t:=2,lambdas:=[1]),
124 &gt; requiredAutSubgroup:=H ));;
125 gap&gt; Length(D);
126 1
127 gap&gt; D:=D[1];;
128 gap&gt; BlockSizes(D);
129 [ 4, 5 ]
130 gap&gt; BlockNumbers(D);
131 [ 20, 9 ]
132 gap&gt; Size(AutGroupBlockDesign(D));
133 80
134 gap&gt; Dstar:=TDesignFromTBD(D,2,4);;
135 gap&gt; AllTDesignLambdas(Dstar);
136 [ 105, 20, 3 ]
137 gap&gt; IsSimpleBlockDesign(Dstar);
138 false
139 gap&gt; Size(AutGroupBlockDesign(Dstar));
140 80
141 gap&gt; near_resolutions:=PartitionsIntoBlockDesigns(rec(
142 &gt; blockDesign:=Dstar,
143 &gt; v:=21,blockSizes:=[4],
144 &gt; tSubsetStructure:=rec(t:=0,lambdas:=[5]),
145 &gt; blockIntersectionNumbers:=[[ [0] ]],
146 &gt; requiredAutSubgroup:=SylowSubgroup(H,5) ));;
147 gap&gt; Length(near_resolutions);
148 2
149 gap&gt; List(near_resolutions,x-&gt;Size(x.autGroup));
150 [ 5, 20 ]
151 gap&gt; Print(Dstar,"\n");
152 rec(
153 isBlockDesign := true,
154 v := 21,
155 blocks := [ [ 1, 2, 4, 15 ], [ 1, 2, 4, 15 ], [ 1, 2, 4, 15 ],
156 [ 1, 3, 14, 20 ], [ 1, 3, 14, 20 ], [ 1, 3, 14, 20 ], [ 1, 5, 9, 13 ],
157 [ 1, 5, 9, 17 ], [ 1, 5, 13, 17 ], [ 1, 6, 11, 16 ], [ 1, 6, 11, 21 ],
158 [ 1, 6, 16, 21 ], [ 1, 7, 8, 10 ], [ 1, 7, 8, 10 ], [ 1, 7, 8, 10 ],
159 [ 1, 9, 13, 17 ], [ 1, 11, 16, 21 ], [ 1, 12, 18, 19 ],
160 [ 1, 12, 18, 19 ], [ 1, 12, 18, 19 ], [ 2, 3, 5, 16 ], [ 2, 3, 5, 16 ],
161 [ 2, 3, 5, 16 ], [ 2, 6, 10, 14 ], [ 2, 6, 10, 18 ], [ 2, 6, 14, 18 ],
162 [ 2, 7, 12, 17 ], [ 2, 7, 12, 21 ], [ 2, 7, 17, 21 ], [ 2, 8, 9, 11 ],
163 [ 2, 8, 9, 11 ], [ 2, 8, 9, 11 ], [ 2, 10, 14, 18 ], [ 2, 12, 17, 21 ],
164 [ 2, 13, 19, 20 ], [ 2, 13, 19, 20 ], [ 2, 13, 19, 20 ],
165 [ 3, 4, 6, 17 ], [ 3, 4, 6, 17 ], [ 3, 4, 6, 17 ], [ 3, 7, 11, 15 ],
166 [ 3, 7, 11, 19 ], [ 3, 7, 15, 19 ], [ 3, 8, 13, 18 ], [ 3, 8, 13, 21 ],
167 [ 3, 8, 18, 21 ], [ 3, 9, 10, 12 ], [ 3, 9, 10, 12 ], [ 3, 9, 10, 12 ],
168 [ 3, 11, 15, 19 ], [ 3, 13, 18, 21 ], [ 4, 5, 7, 18 ], [ 4, 5, 7, 18 ],
169 [ 4, 5, 7, 18 ], [ 4, 8, 12, 16 ], [ 4, 8, 12, 20 ], [ 4, 8, 16, 20 ],
170 [ 4, 9, 14, 19 ], [ 4, 9, 14, 21 ], [ 4, 9, 19, 21 ], [ 4, 10, 11, 13 ],
171 [ 4, 10, 11, 13 ], [ 4, 10, 11, 13 ], [ 4, 12, 16, 20 ],
172 [ 4, 14, 19, 21 ], [ 5, 6, 8, 19 ], [ 5, 6, 8, 19 ], [ 5, 6, 8, 19 ],
173 [ 5, 9, 13, 17 ], [ 5, 10, 15, 20 ], [ 5, 10, 15, 21 ],
174 [ 5, 10, 20, 21 ], [ 5, 11, 12, 14 ], [ 5, 11, 12, 14 ],
175 [ 5, 11, 12, 14 ], [ 5, 15, 20, 21 ], [ 6, 7, 9, 20 ], [ 6, 7, 9, 20 ],
176 [ 6, 7, 9, 20 ], [ 6, 10, 14, 18 ], [ 6, 11, 16, 21 ],
177 [ 6, 12, 13, 15 ], [ 6, 12, 13, 15 ], [ 6, 12, 13, 15 ],
178 [ 7, 11, 15, 19 ], [ 7, 12, 17, 21 ], [ 7, 13, 14, 16 ],
179 [ 7, 13, 14, 16 ], [ 7, 13, 14, 16 ], [ 8, 12, 16, 20 ],
180 [ 8, 13, 18, 21 ], [ 8, 14, 15, 17 ], [ 8, 14, 15, 17 ],
181 [ 8, 14, 15, 17 ], [ 9, 14, 19, 21 ], [ 9, 15, 16, 18 ],
182 [ 9, 15, 16, 18 ], [ 9, 15, 16, 18 ], [ 10, 15, 20, 21 ],
183 [ 10, 16, 17, 19 ], [ 10, 16, 17, 19 ], [ 10, 16, 17, 19 ],
184 [ 11, 17, 18, 20 ], [ 11, 17, 18, 20 ], [ 11, 17, 18, 20 ] ],
185 autGroup := Group( [ ( 2,14,10,18)( 3, 7,19,15)( 4,20, 8,12)( 5,13,17, 9),
186 ( 1,17, 5, 9)( 2,10,14, 6)( 4,16,12,20)( 7,15,19,11),
187 ( 1,18,19,12)( 2,11, 8, 9)( 3, 4,17, 6)( 5,10,15,20)( 7,16,13,14) ] ),
188 blockSizes := [ 4 ],
189 isBinary := true,
190 allTDesignLambdas := [ 105, 20, 3 ],
191 isSimple := false )
192 </pre>
193 <p>
194 [<a href = "chapters.htm">Up</a>] [<a href ="CHAP002.htm">Next</a>] [<a href = "theindex.htm">Index</a>]
195 <P>
196 <address>design manual<br>March 2019
197 </address></body></html>
0 <html><head><title>[design] 2 Information from block design parameters</title></head>
1 <body text="#000000" bgcolor="#ffffff">
2 [<a href = "chapters.htm">Up</a>] [<a href ="CHAP001.htm">Previous</a>] [<a href ="CHAP003.htm">Next</a>] [<a href = "theindex.htm">Index</a>]
3 <h1>2 Information from block design parameters</h1><p>
4 <P>
5 <H3>Sections</H3>
6 <oL>
7 <li> <A HREF="CHAP002.htm#SECT001">Information from $t$-design parameters</a>
8 <li> <A HREF="CHAP002.htm#SECT002">Block intersection polynomials</a>
9 </ol><p>
10 <p>
11 <p>
12 <h2><a name="SECT001">2.1 Information from $t$-design parameters</a></h2>
13 <p><p>
14 For <i>t</i> a non-negative integer and <i>v</i>,<i>k</i>,&#955; positive integers
15 with <i>t</i> &#8804; <i>k</i> &#8804; <i>v</i>, a <i>t</i>-<strong>design</strong>
16 <a name = "I0"></a>
17
18 with <strong>parameters</strong>
19 <i>t</i>,<i>v</i>,<i>k</i>,&#955;, or a <i>t</i>-(<i>v</i>,<i>k</i>,&#955;) <strong>design</strong>, is a binary block
20 design with exactly <i>v</i> points, such that each block has size <i>k</i> and
21 each <i>t</i>-subset of the points is contained in exactly &#955; blocks.
22 <p>
23 <a name = "SSEC001.1"></a>
24 <li><code>TDesignLambdas( </code><var>t</var><code>, </code><var>v</var><code>, </code><var>k</var><code>, </code><var>lambda</var><code> )</code>
25 <p>
26 A <i>t</i>-(<i>v</i>,<i>k</i>,&#955;) design is also an <i>s</i>-(<i>v</i>,<i>k</i>,&#955;<sub><i>s</i></sub>) design
27 for 0 &#8804; <i>s</i> &#8804; <i>t</i>, where <br clear="all" /><table border="0" width="100%"><tr><td><table align="center" cellspacing="0" cellpadding="2"><tr><td nowrap="nowrap" align="center">&#955;<sub><i>s</i></sub>=&#955;</td><td align="left" class="cl">&#x239B;<br />&#x239D;</td><td nowrap="nowrap" align="center"><i>v</i>&#8722;<i>s</i><br /><i>t</i>&#8722;<i>s</i><br /></td><td align="left" class="cl">&#x239E;<br />&#x23A0;</td><td nowrap="nowrap" align="center">/</td><td align="left" class="cl">&#x239B;<br />&#x239D;</td><td nowrap="nowrap" align="center"><i>k</i>&#8722;<i>s</i><br /><i>t</i>&#8722;<i>s</i><br /></td><td align="left" class="cl">&#x239E;<br />&#x23A0;</td><td nowrap="nowrap" align="center"></td></tr></table></td></tr></table>.
28 <p>
29 Given a non-negative integer <var>t</var>, and positive integers <var>v</var>, <var>k</var>,
30 <var>lambda</var>, with <i>t</i> &#8804; <i>k</i> &#8804; <i>v</i> , this function returns a length
31 <i>t</i> +1 list whose (<i>s</i>+1)-st element is &#955;<sub><i>s</i></sub> as defined above,
32 if all the &#955;<sub><i>s</i></sub> are integers. Otherwise, <code>fail</code> is returned.
33 <p>
34 <pre>
35 gap&gt; TDesignLambdas(5,24,8,1);
36 [ 759, 253, 77, 21, 5, 1 ]
37 </pre>
38 <p>
39 <a name = "SSEC001.2"></a>
40 <li><code>TDesignLambdaMin( </code><var>t</var><code>, </code><var>v</var><code>, </code><var>k</var><code> )</code>
41 <p>
42 Given a non-negative integer <var>t</var>, and positive integers <var>v</var> and <var>k</var>, with
43 <i>t</i> &#8804; <i>k</i> &#8804; <i>v</i> , this function returns the minimum positive <var>lambda</var>
44 such that <code>TDesignLambdas( </code><var>t</var><code>, </code><var>v</var><code>, </code><var>k</var><code>, </code><var>lambda</var><code> )</code> does not return
45 <code>fail</code>.
46 <p>
47 See <a href="CHAP002.htm#SSEC001.1">TDesignLambdas</a>.
48 <p>
49 <pre>
50 gap&gt; TDesignLambdaMin(5,24,8);
51 1
52 gap&gt; TDesignLambdaMin(2,12,4);
53 3
54 </pre>
55 <p>
56 <a name = "SSEC001.3"></a>
57 <li><code>TDesignIntersectionTriangle( </code><var>t</var><code>, </code><var>v</var><code>, </code><var>k</var><code>, </code><var>lambda</var><code> )</code>
58 <p>
59 Suppose <i>D</i> is a <var>t</var>-(<var>v</var>,<var>k</var>,<var>lambda</var>) design, let <i>i</i> and <i>j</i>
60 be non-negative integers with <i>i</i>+<i>j</i> &#8804; <i>t</i>, and suppose <i>X</i> and <i>Y</i>
61 are disjoint subsets of the points of <i>D</i>, such that <i>X</i> and <i>Y</i> have
62 respective sizes <i>i</i> and <i>j</i>. The (<i>i</i>,<i>j</i>)-<strong>intersection number</strong> is
63 the number of blocks of <i>D</i> that contain <i>X</i> and are disjoint from <i>Y</i>
64 (this number depends only on <var>t</var>, <var>v</var>, <var>k</var>, <var>lambda</var>, <i>i</i> and <i>j</i>).
65 <p>
66 Given a non-negative integer <var>t</var>, and positive integers <var>v</var>, <var>k</var>
67 and <var>lambda</var>, with <i>t</i> &#8804; <i>k</i> &#8804; <i>v</i> , this function returns the
68 <strong><var>t</var>-design intersection triangle</strong>, which is a two dimensional array
69 whose (<i>i</i>+1,<i>j</i>+1)-entry is the (<i>i</i>,<i>j</i>)-intersection number for
70 a <var>t</var>-(<var>v</var>,<var>k</var>,<var>lambda</var>) design (assuming such a design exists),
71 such that <i>i</i>,<i>j</i> &#8805; 0, <i>i</i>+<i>j</i> &#8804; <i>t</i>. This function returns <code>fail</code> if
72 <code>TDesignLambdas(</code><var>t</var><code>,</code><var>v</var><code>,</code><var>k</var><code>,</code><var>lambda</var><code>)</code> does. When <i>lambda</i> =1, then more
73 information can be obtained using <a href="CHAP002.htm#SSEC001.4">SteinerSystemIntersectionTriangle</a>.
74 <p>
75 <pre>
76 gap&gt; TDesignLambdas(2,12,4,3);
77 [ 33, 11, 3 ]
78 gap&gt; TDesignIntersectionTriangle(2,12,4,3);
79 [ [ 33, 22, 14 ], [ 11, 8 ], [ 3 ] ]
80 gap&gt; TDesignLambdas(2,12,4,2);
81 fail
82 gap&gt; TDesignIntersectionTriangle(2,12,4,2);
83 fail
84 </pre>
85 <p>
86 <a name = "SSEC001.4"></a>
87 <li><code>SteinerSystemIntersectionTriangle( </code><var>t</var><code>, </code><var>v</var><code>, </code><var>k</var><code> )</code>
88 <p>
89 A <strong>Steiner system</strong> is a <var>t</var>-(<var>v</var>,<var>k</var>,1) design, and in this case it
90 is possible to extend the notion of intersection triangle defined in
91 <a href="CHAP002.htm#SSEC001.3">TDesignIntersectionTriangle</a>.
92 <p>
93 Suppose <i>D</i> is a <var>t</var>-(<var>v</var>,<var>k</var>,1) design, with <i>B</i> a block of <i>D</i>,
94 let <i>i</i> and <i>j</i> be non-negative integers with <i>i</i>+<i>j</i> &#8804; <i>k</i>, and suppose
95 <i>X</i> and <i>Y</i> are disjoint subsets of <i>B</i>, such that <i>X</i> and <i>Y</i> have
96 respective sizes <i>i</i> and <i>j</i>. The (<i>i</i>,<i>j</i>)-<strong>intersection number</strong> is the
97 number of blocks of <i>D</i> that contain <i>X</i> and are disjoint from <i>Y</i>
98 (this number depends only on <var>t</var>, <var>v</var>, <var>k</var>, <i>i</i> and <i>j</i>). Note that
99 when <i>i</i>+<i>j</i> &#8804; <i>t</i>, this intersection number is the same as that defined in
100 <a href="CHAP002.htm#SSEC001.3">TDesignIntersectionTriangle</a> for the general <var>t</var>-design case.
101 <p>
102 Given a non-negative integer <var>t</var>, and positive integers <var>v</var> and
103 <var>k</var>, with <i>t</i> &#8804; <i>k</i> &#8804; <i>v</i> , this function returns the <strong>Steiner
104 system intersection triangle</strong>, which is a two dimensional array whose
105 (<i>i</i>+1,<i>j</i>+1)-entry is the (<i>i</i>,<i>j</i>)-intersection number for a <var>t</var>-(<var>v</var>,<var>k</var>,1)
106 design (assuming such a design exists), such that <i>i</i>,<i>j</i> &#8805; 0, <i>i</i>+<i>j</i> &#8804; <i>k</i>. This function returns <code>fail</code> if <code>TDesignLambdas(</code><var>t</var><code>,</code><var>v</var><code>,</code><var>k</var><code>,1)</code> does.
107 <p>
108 See also <a href="CHAP002.htm#SSEC001.3">TDesignIntersectionTriangle</a>.
109 <p>
110 <pre>
111 gap&gt; SteinerSystemIntersectionTriangle(5,24,8);
112 [ [ 759, 506, 330, 210, 130, 78, 46, 30, 30 ],
113 [ 253, 176, 120, 80, 52, 32, 16, 0 ], [ 77, 56, 40, 28, 20, 16, 16 ],
114 [ 21, 16, 12, 8, 4, 0 ], [ 5, 4, 4, 4, 4 ], [ 1, 0, 0, 0 ], [ 1, 0, 0 ],
115 [ 1, 0 ], [ 1 ] ]
116 gap&gt; TDesignIntersectionTriangle(5,24,8,1);
117 [ [ 759, 506, 330, 210, 130, 78 ], [ 253, 176, 120, 80, 52 ],
118 [ 77, 56, 40, 28 ], [ 21, 16, 12 ], [ 5, 4 ], [ 1 ] ]
119 </pre>
120 <p>
121 <a name = "SSEC001.5"></a>
122 <li><code>TDesignBlockMultiplicityBound( </code><var>t</var><code>, </code><var>v</var><code>, </code><var>k</var><code>, </code><var>lambda</var><code> )</code>
123 <p>
124 Given a non-negative integer <var>t</var>, and positive integers <var>v</var>, <var>k</var> and
125 <var>lambda</var>, with <i>t</i> &#8804; <i>k</i> &#8804; <i>v</i> , this function returns a non-negative
126 integer which is an upper bound on the multiplicity of any block in
127 any <var>t</var>-(<var>v</var>,<var>k</var>,<var>lambda</var>) design (the <strong>multiplicity</strong> of a block in
128 a block design is the number of times that block occurs in the block
129 list). In particular, if the value 0 is returned, then this implies
130 that a <var>t</var>-(<var>v</var>,<var>k</var>,<var>lambda</var>) design does not exist.
131 <p>
132 Although our bounds are reasonably good, we do not claim that the
133 returned bound <i>m</i> is always achieved; that is, there may not exist a
134 <var>t</var>-(<var>v</var>,<var>k</var>,<var>lambda</var>) design having a block with multiplicity <i>m</i>.
135 <p>
136 See also <a href="CHAP002.htm#SSEC001.6">ResolvableTDesignBlockMultiplicityBound</a>.
137 <p>
138 <pre>
139 gap&gt; TDesignBlockMultiplicityBound(5,16,7,5);
140 2
141 gap&gt; TDesignBlockMultiplicityBound(2,36,6,1);
142 0
143 gap&gt; TDesignBlockMultiplicityBound(2,36,6,2);
144 2
145 gap&gt; TDesignBlockMultiplicityBound(2,15,5,2);
146 0
147 gap&gt; TDesignBlockMultiplicityBound(2,15,5,4);
148 2
149 gap&gt; TDesignBlockMultiplicityBound(2,11,4,6);
150 3
151 </pre>
152 <p>
153 <a name = "SSEC001.6"></a>
154 <li><code>ResolvableTDesignBlockMultiplicityBound( </code><var>t</var><code>, </code><var>v</var><code>, </code><var>k</var><code>, </code><var>lambda</var><code> )</code>
155 <p>
156 A <strong>resolution</strong> of a block design is a partition of the blocks into
157 subsets, each of which forms a partition of the point set, and a block
158 design is <strong>resolvable</strong> if it has a resolution.
159 <p>
160 Given a non-negative integer <var>t</var>, and positive integers <var>v</var>, <var>k</var> and
161 <var>lambda</var>, with <i>t</i> &#8804; <i>k</i> &#8804; <i>v</i> , this function returns a non-negative
162 integer which is an upper bound on the multiplicity of any block in any
163 resolvable <var>t</var>-(<var>v</var>,<var>k</var>,<var>lambda</var>) design (the <strong>multiplicity</strong> of a block
164 in a block design is the number of times that block occurs in the block
165 list). In particular, if the value 0 is returned, then this implies
166 that a resolvable <var>t</var>-(<var>v</var>,<var>k</var>,<var>lambda</var>) design does not exist.
167 <p>
168 Although our bounds are reasonably good, we do not claim that the returned
169 bound <i>m</i> is always achieved; that is, there may not exist a resolvable
170 <var>t</var>-(<var>v</var>,<var>k</var>,<var>lambda</var>) design having a block with multiplicity <i>m</i>.
171 <p>
172 See also <a href="CHAP002.htm#SSEC001.5">TDesignBlockMultiplicityBound</a>.
173 <p>
174 <pre>
175 gap&gt; ResolvableTDesignBlockMultiplicityBound(5,12,6,1);
176 1
177 gap&gt; ResolvableTDesignBlockMultiplicityBound(2,21,7,3);
178 0
179 gap&gt; TDesignBlockMultiplicityBound(2,21,7,3);
180 1
181 gap&gt; ResolvableTDesignBlockMultiplicityBound(2,12,4,3);
182 1
183 gap&gt; TDesignBlockMultiplicityBound(2,12,4,3);
184 2
185 </pre>
186 <p>
187 <p>
188 <h2><a name="SECT002">2.2 Block intersection polynomials</a></h2>
189 <p><p>
190 In <a href="biblio.htm#CaSo"><cite>CaSo</cite></a>, Cameron and Soicher introduce block intersection
191 polynomials and their applications to the study of block designs.
192 Here we give functions to construct and analyze block intersection
193 polynomials.
194 <p>
195 <a name = "SSEC002.1"></a>
196 <li><code>BlockIntersectionPolynomial(</code><var>x</var><code>, </code><var>m</var><code>, </code><var>lambdavec</var><code> )</code>
197 <p>
198 For <i>k</i> a non-negative integer, define the polynomial
199 <i>P</i>(<i>x</i>,<i>k</i>)=<i>x</i>(<i>x</i>&#8722;1)&#8230;(<i>x</i>&#8722;<i>k</i>+1). Let <i>s</i> and <i>t</i> be non-negative
200 integers, with <i>s</i> &#8805; <i>t</i>, and let <i>m</i><sub>0</sub>,&#8230;,<i>m</i><sub><i>s</i></sub> and
201 &#955;<sub>0</sub>,&#8230;,&#955;<sub><i>t</i></sub> be rational numbers. Then the <strong>block
202 intersection polynomial</strong> for the sequences [<i>m</i><sub>0</sub>,&#8230;,<i>m</i><sub><i>s</i></sub>],
203 [&#955;<sub>0</sub>,&#8230;,&#955;<sub><i>t</i></sub>] is defined to be
204 <br clear="all" /><table border="0" width="100%"><tr><td><table align="center" cellspacing="0" cellpadding="2"><tr><td nowrap="nowrap" align="center"></td><td nowrap="nowrap" align="center"><small><i>t</i></small><!--sup--><br /><span class="largerstill">&#8721;<br /></span><small><i>j</i>=0</small>&nbsp;<br /></td><td nowrap="nowrap" align="center"></td><td align="left" class="cl">&#x239B;<br />&#x239D;</td><td nowrap="nowrap" align="center"><i>t</i><br /><i>j</i><br /></td><td align="left" class="cl">&#x239E;<br />&#x23A0;</td><td nowrap="nowrap" align="center"><i>P</i>(&#8722;<i>x</i>,<i>t</i>&#8722;<i>j</i>)[<i>P</i>(<i>s</i>,<i>j</i>)&#955;<sub><i>j</i></sub>&#8722;</td><td nowrap="nowrap" align="center"><small><i>s</i></small><!--sup--><br /><span class="largerstill">&#8721;<br /></span><small><i>i</i>=<i>j</i></small>&nbsp;<br /></td><td nowrap="nowrap" align="center"><i>P</i>(<i>i</i>,<i>j</i>)<i>m</i><sub><i>i</i></sub>],</td></tr></table></td></tr></table>
205 and is denoted by <i>B</i>(<i>x</i>,[<i>m</i><sub>0</sub>,&#8230;,<i>m</i><sub><i>s</i></sub>],[&#955;<sub>0</sub>,&#8230;,&#955;<sub><i>t</i></sub>])&#183;
206 <p>
207 Now suppose <var>x</var> is an indeterminate over the rationals, and <var>m</var> and
208 <var>lambdavec</var> are non-empty lists of rational numbers, such that the length
209 of <var>lambdavec</var> is not greater than that of <var>m</var>. Then this function
210 returns the block intersection polynomial <i>B</i>(<i>x</i> ,<i>m</i> ,<i>lambdavec</i> ).
211 <p>
212 The importance of a block intersection polynomial is as follows.
213 Let <i>D</i>=(<i>V</i>,<span style="font-family:helvetica"><i>B</i></span>) be a block design, let <i>S</i> &#8838; <i>V</i>, with <i>s</i>=&#124;<i>S</i>&#124;,
214 and for <i>i</i>=0,&#8230;,<i>s</i>, suppose that <i>m</i><sub><i>i</i></sub> is a non-negative integer
215 with <i>m</i><sub><i>i</i></sub> &#8804; <i>n</i><sub><i>i</i></sub>, where <i>n</i><sub><i>i</i></sub> is the number of blocks intersecting <i>S</i>
216 in exactly <i>i</i> points. Let <i>t</i> be a non-negative <strong>even</strong> integer with <i>t</i> &#8804; <i>s</i>, and suppose that, for <i>j</i>=0&#8230;,<i>t</i>, we have <br clear="all" /><table border="0" width="100%"><tr><td><table align="center" cellspacing="0" cellpadding="2"><tr><td nowrap="nowrap" align="center">&#955;<sub><i>j</i></sub>=1/</td><td align="left" class="cl">&#x239B;<br />&#x239D;</td><td nowrap="nowrap" align="center"><i>s</i><br /><i>j</i><br /></td><td align="left" class="cl">&#x239E;<br />&#x23A0;</td><td nowrap="nowrap" align="center"></td><td nowrap="nowrap" align="center"><small></small><!--sup--><br /><span class="largerstill">&#8721;<br /></span><small><i>T</i> &#8838; <i>S</i>,&#124;<i>T</i>&#124;=<i>j</i></small>&nbsp;<br /></td><td nowrap="nowrap" align="center">&#955;<sub><i>T</i></sub></td></tr></table></td></tr></table>, where &#955;<sub><i>T</i></sub> is the
217 number of blocks of <i>D</i> containing <i>T</i>. Then the block intersection
218 polynomial <i>B</i>(<i>x</i>)=<i>B</i>(<i>x</i>,[<i>m</i><sub>0</sub>,&#8230;,<i>m</i><sub><i>s</i></sub>],[&#955;<sub>0</sub>,&#8230;,&#955;<sub><i>t</i></sub>])
219 is a polynomial with integer coefficients, and <i>B</i>(<i>n</i>) &#8805; 0 for every
220 integer <i>n</i>. (These conditions can be checked using the function
221 <a href="CHAP002.htm#SSEC002.2">BlockIntersectionPolynomialCheck</a>.) In addition, if <i>B</i>(<i>n</i>)=0 for some
222 integer <i>n</i>, then <i>m</i><sub><i>i</i></sub>=<i>n</i><sub><i>i</i></sub> for <i>i</i> &#8713; {<i>n</i>,<i>n</i>+1,&#8230;,<i>n</i>+<i>t</i>&#8722;1}.
223 <p>
224 For more information on block intersection polynomials and their
225 applications, see <a href="biblio.htm#CaSo"><cite>CaSo</cite></a> and <a href="biblio.htm#Soi1"><cite>Soi1</cite></a>.
226 <p>
227 <pre>
228 gap&gt; x:=Indeterminate(Rationals,1);
229 x_1
230 gap&gt; m:=[0,0,0,0,0,0,0,1];;
231 gap&gt; lambdavec:=TDesignLambdas(6,14,7,4);
232 [ 1716, 858, 396, 165, 60, 18, 4 ]
233 gap&gt; B:=BlockIntersectionPolynomial(x,m,lambdavec);
234 1715*x_1^6-10269*x_1^5+34685*x_1^4-69615*x_1^3+84560*x_1^2-56196*x_1+15120
235 gap&gt; Factors(B);
236 [ 1715*x_1-1715,
237 x_1^5-1222/245*x_1^4+3733/245*x_1^3-6212/245*x_1^2+5868/245*x_1-432/49 ]
238 gap&gt; Value(B,1);
239 0
240 </pre>
241 <p>
242 <a name = "SSEC002.2"></a>
243 <li><code>BlockIntersectionPolynomialCheck(</code><var>m</var><code>, </code><var>lambdavec</var><code>)</code>
244 <p>
245 Suppose <var>m</var> is a list of non-negative integers, and <var>lambdavec</var> is a
246 list of non-negative rational numbers, with the length of <var>lambdavec</var>
247 odd and not greater than the length of <var>m</var>.
248 <p>
249 Then, for <var>x</var> an indeterminate over the rationals, this function
250 checks whether <code>BlockIntersectionPolynomial(</code><var>x</var><code>,</code><var>m</var><code>,</code><var>lambdavec</var><code>)</code> is a
251 polynomial over the integers and has a non-negative value at each integer.
252 The function returns <code>true</code> if this is so; else <code>false</code> is returned.
253 <p>
254 See also <a href="CHAP002.htm#SSEC002.1">BlockIntersectionPolynomial</a>.
255 <p>
256 <pre>
257 gap&gt; m:=[0,0,0,0,0,0,0,1];;
258 gap&gt; lambdavec:=TDesignLambdas(6,14,7,4);
259 [ 1716, 858, 396, 165, 60, 18, 4 ]
260 gap&gt; BlockIntersectionPolynomialCheck(m,lambdavec);
261 true
262 gap&gt; m:=[1,0,0,0,0,0,0,1];;
263 gap&gt; BlockIntersectionPolynomialCheck(m,lambdavec);
264 false
265 </pre>
266 <p>
267 [<a href = "chapters.htm">Up</a>] [<a href ="CHAP001.htm">Previous</a>] [<a href ="CHAP003.htm">Next</a>] [<a href = "theindex.htm">Index</a>]
268 <P>
269 <address>design manual<br>March 2019
270 </address></body></html>
0 <html><head><title>[design] 3 Constructing block designs</title></head>
1 <body text="#000000" bgcolor="#ffffff">
2 [<a href = "chapters.htm">Up</a>] [<a href ="CHAP002.htm">Previous</a>] [<a href ="CHAP004.htm">Next</a>] [<a href = "theindex.htm">Index</a>]
3 <h1>3 Constructing block designs</h1><p>
4 <P>
5 <H3>Sections</H3>
6 <oL>
7 <li> <A HREF="CHAP003.htm#SECT001">Functions to construct block designs</a>
8 </ol><p>
9 <p>
10 <p>
11 <h2><a name="SECT001">3.1 Functions to construct block designs</a></h2>
12 <p><p>
13 <a name = "SSEC001.1"></a>
14 <li><code>BlockDesign( </code><var>v</var><code>, </code><var>B</var><code> )</code>
15 <li><code>BlockDesign( </code><var>v</var><code>, </code><var>B</var><code>, </code><var>G</var><code> )</code>
16 <p>
17 Let <var>v</var> be a positive integer and <var>B</var> a non-empty list of non-empty
18 sorted lists of elements of {1,&#8230;,<i>v</i> }.
19 <p>
20 The first version of this function returns the block design with point-set
21 {1,&#8230;,<i>v</i> } and block multiset <var>C</var>, where <var>C</var> is <code>SortedList(</code><var>B</var><code>)</code>.
22 <p>
23 For the second version of this function, we require <var>G</var> to be a group
24 of permutations of {1,&#8230;,<i>v</i> }, and the function returns the
25 block design with point-set {1,&#8230;,<i>v</i> } and block multiset <var>C</var>,
26 where <var>C</var> is the sorted list of the concatenation of the <var>G</var>-orbits of
27 the elements of <var>B</var>.
28 <p>
29 <pre>
30 gap&gt; BlockDesign( 2, [[1,2],[1],[1,2]] );
31 rec( isBlockDesign := true, v := 2, blocks := [ [ 1 ], [ 1, 2 ], [ 1, 2 ] ] )
32 gap&gt; D:=BlockDesign(7, [[1,2,4]], Group((1,2,3,4,5,6,7)));
33 rec( isBlockDesign := true, v := 7,
34 blocks := [ [ 1, 2, 4 ], [ 1, 3, 7 ], [ 1, 5, 6 ], [ 2, 3, 5 ],
35 [ 2, 6, 7 ], [ 3, 4, 6 ], [ 4, 5, 7 ] ],
36 autSubgroup := Group([ (1,2,3,4,5,6,7) ]) )
37 gap&gt; AllTDesignLambdas(D);
38 [ 7, 3, 1 ]
39 </pre>
40 <p>
41 <a name = "SSEC001.2"></a>
42 <li><code>AGPointFlatBlockDesign( </code><var>n</var><code>, </code><var>q</var><code>, </code><var>d</var><code> )</code>
43 <p>
44 Let <var>n</var> be positive integer, <var>q</var> a prime-power, and <var>d</var> a non-negative
45 integer less than or equal to <var>n</var>. Then this function returns the block
46 design whose points are the points of the affine space <i>AG</i>(<i>n</i> ,<i>q</i> ),
47 and whose blocks are the <i>d</i> -flats of <i>AG</i>(<i>n</i> ,<i>q</i> ), considering a
48 <i>d</i> -flat as a set of points.
49 <p>
50 Note that the <strong>affine space</strong> <i>AG</i>(<i>n</i> ,<i>q</i> ) consists of all the cosets of
51 all the subspaces of the vector space <i>V</i>(<i>n</i> ,<i>q</i> ), with the <strong>points</strong>
52 being the cosets of the 0-dimensional subspace and the <strong><i>d</i> -flats</strong>
53 being the cosets of the <i>d</i> -dimensional subspaces. As is usual, we
54 identify the points with the vectors in <i>V</i>(<i>n</i> ,<i>q</i> ), and these vectors
55 are given as the point-names.
56 <p>
57 <pre>
58 gap&gt; D:=AGPointFlatBlockDesign(2,4,1);
59 rec( isBlockDesign := true, v := 16,
60 blocks := [ [ 1, 2, 3, 4 ], [ 1, 5, 9, 13 ], [ 1, 6, 11, 16 ],
61 [ 1, 7, 12, 14 ], [ 1, 8, 10, 15 ], [ 2, 5, 12, 15 ], [ 2, 6, 10, 14 ],
62 [ 2, 7, 9, 16 ], [ 2, 8, 11, 13 ], [ 3, 5, 10, 16 ], [ 3, 6, 12, 13 ],
63 [ 3, 7, 11, 15 ], [ 3, 8, 9, 14 ], [ 4, 5, 11, 14 ], [ 4, 6, 9, 15 ],
64 [ 4, 7, 10, 13 ], [ 4, 8, 12, 16 ], [ 5, 6, 7, 8 ], [ 9, 10, 11, 12 ],
65 [ 13, 14, 15, 16 ] ],
66 autSubgroup := Group([ (5,9,13)(6,10,14)(7,11,15)(8,12,16),
67 (2,5,6)(3,9,11)(4,13,16)(7,14,12)(8,10,15),
68 (1,5)(2,6)(3,7)(4,8)(9,13)(10,14)(11,15)(12,16),
69 (3,4)(7,8)(9,13)(10,14)(11,16)(12,15) ]),
70 pointNames := [ [ 0*Z(2), 0*Z(2) ], [ 0*Z(2), Z(2)^0 ], [ 0*Z(2), Z(2^2) ],
71 [ 0*Z(2), Z(2^2)^2 ], [ Z(2)^0, 0*Z(2) ], [ Z(2)^0, Z(2)^0 ],
72 [ Z(2)^0, Z(2^2) ], [ Z(2)^0, Z(2^2)^2 ], [ Z(2^2), 0*Z(2) ],
73 [ Z(2^2), Z(2)^0 ], [ Z(2^2), Z(2^2) ], [ Z(2^2), Z(2^2)^2 ],
74 [ Z(2^2)^2, 0*Z(2) ], [ Z(2^2)^2, Z(2)^0 ], [ Z(2^2)^2, Z(2^2) ],
75 [ Z(2^2)^2, Z(2^2)^2 ] ] )
76 gap&gt; AllTDesignLambdas(D);
77 [ 20, 5, 1 ]
78 </pre>
79 <p>
80 <a name = "SSEC001.3"></a>
81 <li><code>PGPointFlatBlockDesign( </code><var>n</var><code>, </code><var>q</var><code>, </code><var>d</var><code> )</code>
82 <p>
83 Let <var>n</var> be a non-negative integer, <var>q</var> a prime-power, and <var>d</var> a
84 non-negative integer less than or equal to <var>n</var>. Then this function
85 returns the block design whose points are the (projective) points of
86 the projective space <i>PG</i>(<i>n</i> ,<i>q</i> ), and whose blocks are the <i>d</i> -flats
87 of <i>PG</i>(<i>n</i> ,<i>q</i> ), considering a <i>d</i> -flat as a set of projective points.
88 <p>
89 Note that the <strong>projective space</strong> <i>PG</i>(<i>n</i> ,<i>q</i> ) consists of all the
90 subspaces of the vector space <i>V</i>(<i>n</i> +1,<i>q</i> ), with the <strong>projective
91 points</strong> being the 1-dimensional subspaces and the <strong><i>d</i> -flats</strong> being
92 the (<i>d</i> +1)-dimensional subspaces.
93 <p>
94 <pre>
95 gap&gt; D:=PGPointFlatBlockDesign(3,2,1);
96 rec( isBlockDesign := true, v := 15,
97 blocks := [ [ 1, 2, 3 ], [ 1, 4, 5 ], [ 1, 6, 7 ], [ 1, 8, 9 ],
98 [ 1, 10, 11 ], [ 1, 12, 13 ], [ 1, 14, 15 ], [ 2, 4, 6 ], [ 2, 5, 7 ],
99 [ 2, 8, 10 ], [ 2, 9, 11 ], [ 2, 12, 14 ], [ 2, 13, 15 ], [ 3, 4, 7 ],
100 [ 3, 5, 6 ], [ 3, 8, 11 ], [ 3, 9, 10 ], [ 3, 12, 15 ], [ 3, 13, 14 ],
101 [ 4, 8, 12 ], [ 4, 9, 13 ], [ 4, 10, 14 ], [ 4, 11, 15 ], [ 5, 8, 13 ],
102 [ 5, 9, 12 ], [ 5, 10, 15 ], [ 5, 11, 14 ], [ 6, 8, 14 ], [ 6, 9, 15 ],
103 [ 6, 10, 12 ], [ 6, 11, 13 ], [ 7, 8, 15 ], [ 7, 9, 14 ],
104 [ 7, 10, 13 ], [ 7, 11, 12 ] ],
105 autSubgroup := Group([ (8,12)(9,13)(10,14)(11,15),
106 (1,2,4,8)(3,6,12,9)(5,10)(7,14,13,11) ]),
107 pointNames := [ &lt;vector space of dimension 1 over GF(2)&gt;,
108 &lt;vector space of dimension 1 over GF(2)&gt;,
109 &lt;vector space of dimension 1 over GF(2)&gt;,
110 &lt;vector space of dimension 1 over GF(2)&gt;,
111 &lt;vector space of dimension 1 over GF(2)&gt;,
112 &lt;vector space of dimension 1 over GF(2)&gt;,
113 &lt;vector space of dimension 1 over GF(2)&gt;,
114 &lt;vector space of dimension 1 over GF(2)&gt;,
115 &lt;vector space of dimension 1 over GF(2)&gt;,
116 &lt;vector space of dimension 1 over GF(2)&gt;,
117 &lt;vector space of dimension 1 over GF(2)&gt;,
118 &lt;vector space of dimension 1 over GF(2)&gt;,
119 &lt;vector space of dimension 1 over GF(2)&gt;,
120 &lt;vector space of dimension 1 over GF(2)&gt;,
121 &lt;vector space of dimension 1 over GF(2)&gt; ] )
122 gap&gt; AllTDesignLambdas(D);
123 [ 35, 7, 1 ]
124 </pre>
125 <p>
126 <a name = "SSEC001.4"></a>
127 <li><code>WittDesign( </code><var>n</var><code> )</code>
128 <p>
129 Suppose <i>n</i> &#8712; {9,10,11,12,21,22,23,24}.
130 <p>
131 If <i>n</i> =24 then this function returns the <strong>large Witt design</strong> <i>W</i><sub>24</sub>,
132 the unique (up to isomorphism) 5-(24,8,1) design. If <i>n</i> =24&#8722;<i>i</i>, where
133 <i>i</i> &#8712; {1,2,3}, then the <i>i</i>-fold point-derived design of <i>W</i><sub>24</sub>
134 is returned; this is the unique (up to isomorphism) (5&#8722;<i>i</i>)-(24&#8722;<i>i</i>,8&#8722;<i>i</i>,1)
135 design.
136 <p>
137 If <i>n</i> =12 then this function returns the <strong>small Witt design</strong> <i>W</i><sub>12</sub>,
138 the unique (up to isomorphism) 5-(12,6,1) design. If <i>n</i> =12&#8722;<i>i</i>, where
139 <i>i</i> &#8712; {1,2,3}, then the <i>i</i>-fold point-derived design of <i>W</i><sub>12</sub>
140 is returned; this is the unique (up to isomorphism) (5&#8722;<i>i</i>)-(12&#8722;<i>i</i>,6&#8722;<i>i</i>,1)
141 design.
142 <p>
143 <pre>
144 gap&gt; W24:=WittDesign(24);;
145 gap&gt; AllTDesignLambdas(W24);
146 [ 759, 253, 77, 21, 5, 1 ]
147 gap&gt; DisplayCompositionSeries(AutomorphismGroup(W24));
148 G (3 gens, size 244823040)
149 | M(24)
150 1 (0 gens, size 1)
151 gap&gt; W10:=WittDesign(10);;
152 gap&gt; AllTDesignLambdas(W10);
153 [ 30, 12, 4, 1 ]
154 gap&gt; DisplayCompositionSeries(AutomorphismGroup(W10));
155 G (4 gens, size 1440)
156 | Z(2)
157 S (4 gens, size 720)
158 | Z(2)
159 S (3 gens, size 360)
160 | A(6) ~ A(1,9) = L(2,9) ~ B(1,9) = O(3,9) ~ C(1,9) = S(2,9) ~ 2A(1,9) = U(2,\
161 9)
162 1 (0 gens, size 1)
163 </pre>
164 <p>
165 <a name = "SSEC001.5"></a>
166 <li><code>DualBlockDesign( </code><var>D</var><code> )</code>
167 <p>
168 Suppose <var>D</var> is a block design for which every point lies on at least
169 one block. Then this function returns the dual of <var>D</var>, the block design
170 in which the roles of points and blocks are interchanged, but incidence
171 (including repeated incidence) stays the same. Note that, since the
172 list of blocks of a block design is always sorted, the block list of
173 the dual of the dual of <var>D</var> may not be equal to the block list of <var>D</var>.
174 <p>
175 <pre>
176 gap&gt; D:=BlockDesign(4,[[1,3],[2,3,4],[3,4]]);;
177 gap&gt; dualD:=DualBlockDesign(D);
178 rec( isBlockDesign := true, v := 3,
179 blocks := [ [ 1 ], [ 1, 2, 3 ], [ 2 ], [ 2, 3 ] ],
180 pointNames := [ [ 1, 3 ], [ 2, 3, 4 ], [ 3, 4 ] ] )
181 gap&gt; DualBlockDesign(dualD).blocks;
182 [ [ 1, 2 ], [ 2, 3, 4 ], [ 2, 4 ] ]
183 </pre>
184 <p>
185 <a name = "SSEC001.6"></a>
186 <li><code>ComplementBlocksBlockDesign( </code><var>D</var><code> )</code>
187 <p>
188 Suppose <var>D</var> is a binary incomplete-block design.
189 Then this function returns the block design on the same
190 point-set as <var>D</var>, whose blocks are the complements of
191 those of <var>D</var> (complemented with respect to the point-set).
192 <p>
193 <pre>
194 gap&gt; D:=PGPointFlatBlockDesign(2,2,1);
195 rec( isBlockDesign := true, v := 7,
196 pointNames := [ &lt;vector space of dimension 1 over GF(2)&gt;,
197 &lt;vector space of dimension 1 over GF(2)&gt;,
198 &lt;vector space of dimension 1 over GF(2)&gt;,
199 &lt;vector space of dimension 1 over GF(2)&gt;,
200 &lt;vector space of dimension 1 over GF(2)&gt;,
201 &lt;vector space of dimension 1 over GF(2)&gt;,
202 &lt;vector space of dimension 1 over GF(2)&gt; ],
203 blocks := [ [ 1, 2, 3 ], [ 1, 4, 5 ], [ 1, 6, 7 ], [ 2, 4, 6 ],
204 [ 2, 5, 7 ], [ 3, 4, 7 ], [ 3, 5, 6 ] ] )
205 gap&gt; AllTDesignLambdas(D);
206 [ 7, 3, 1 ]
207 gap&gt; C:=ComplementBlocksBlockDesign(D);
208 rec( isBlockDesign := true, v := 7,
209 blocks := [ [ 1, 2, 4, 7 ], [ 1, 2, 5, 6 ], [ 1, 3, 4, 6 ], [ 1, 3, 5, 7 ],
210 [ 2, 3, 4, 5 ], [ 2, 3, 6, 7 ], [ 4, 5, 6, 7 ] ],
211 pointNames := [ &lt;vector space of dimension 1 over GF(2)&gt;,
212 &lt;vector space of dimension 1 over GF(2)&gt;,
213 &lt;vector space of dimension 1 over GF(2)&gt;,
214 &lt;vector space of dimension 1 over GF(2)&gt;,
215 &lt;vector space of dimension 1 over GF(2)&gt;,
216 &lt;vector space of dimension 1 over GF(2)&gt;,
217 &lt;vector space of dimension 1 over GF(2)&gt; ] )
218 gap&gt; AllTDesignLambdas(C);
219 [ 7, 4, 2 ]
220 </pre>
221 <p>
222 <a name = "SSEC001.7"></a>
223 <li><code>DeletedPointsBlockDesign( </code><var>D</var><code>, </code><var>Y</var><code> )</code>
224 <p>
225 Suppose <var>D</var> is a block design and <var>Y</var> is a proper subset of the point-set
226 of <var>D</var>.
227 <p>
228 Then this function returns the block design <i>DP</i> obtained from <var>D</var> by
229 deleting the points in <var>Y</var> from the point-set, and from each block.
230 It is an error if the resulting design contains an empty block.
231 The points of <i>DP</i> are relabelled 1,2,&#183;.&#183;, preserving the order of
232 the corresponding points of <var>D</var>; the point-names of <i>DP</i> (listed in
233 <code><i>DP</i>.pointNames</code>) are those of these corresponding points of <var>D</var>.
234 <p>
235 <pre>
236 gap&gt; D:=BlockDesigns(rec(v:=11,blockSizes:=[5],
237 &gt; tSubsetStructure:=rec(t:=2,lambdas:=[2])))[1];
238 rec( isBlockDesign := true, v := 11,
239 blocks := [ [ 1, 2, 3, 4, 5 ], [ 1, 2, 9, 10, 11 ], [ 1, 3, 6, 7, 9 ],
240 [ 1, 4, 7, 8, 10 ], [ 1, 5, 6, 8, 11 ], [ 2, 3, 6, 8, 10 ],
241 [ 2, 4, 6, 7, 11 ], [ 2, 5, 7, 8, 9 ], [ 3, 4, 8, 9, 11 ],
242 [ 3, 5, 7, 10, 11 ], [ 4, 5, 6, 9, 10 ] ],
243 tSubsetStructure := rec( t := 2, lambdas := [ 2 ] ), isBinary := true,
244 isSimple := true, blockSizes := [ 5 ], blockNumbers := [ 11 ], r := 5,
245 autGroup := Group([ (2,4)(3,5)(7,11)(8,9), (1,3)(2,5)(7,9)(10,11),
246 (1,5,3)(6,11,7)(8,10,9), (1,10,5,2,11,3)(4,9,7)(6,8) ]) )
247 gap&gt; AllTDesignLambdas(D);
248 [ 11, 5, 2 ]
249 gap&gt; DP:=DeletedPointsBlockDesign(D,[5,8]);
250 rec( isBlockDesign := true, v := 9,
251 blocks := [ [ 1, 2, 3, 4 ], [ 1, 2, 7, 8, 9 ], [ 1, 3, 5, 6, 7 ],
252 [ 1, 4, 6, 8 ], [ 1, 5, 9 ], [ 2, 3, 5, 8 ], [ 2, 4, 5, 6, 9 ],
253 [ 2, 6, 7 ], [ 3, 4, 7, 9 ], [ 3, 6, 8, 9 ], [ 4, 5, 7, 8 ] ],
254 pointNames := [ 1, 2, 3, 4, 6, 7, 9, 10, 11 ] )
255 gap&gt; PairwiseBalancedLambda(DP);
256 2
257 </pre>
258 <p>
259 <a name = "SSEC001.8"></a>
260 <li><code>DeletedBlocksBlockDesign( </code><var>D</var><code>, </code><var>Y</var><code>)</code>
261 <p>
262 Suppose <var>D</var> is a block design, and <var>Y</var> is a proper sublist of the
263 block-list of <var>D</var> (<var>Y</var> need not be sorted).
264 <p>
265 Then this function returns the block design obtained from <var>D</var> by deleting
266 the blocks in <var>Y</var> (counting repeats) from the block-list of <var>D</var>.
267 <p>
268 <pre>
269 gap&gt; D:=BlockDesign(7,[[1,2,4],[1,2,4]],Group((1,2,3,4,5,6,7)));
270 rec( isBlockDesign := true, v := 7,
271 blocks := [ [ 1, 2, 4 ], [ 1, 2, 4 ], [ 1, 3, 7 ], [ 1, 3, 7 ],
272 [ 1, 5, 6 ], [ 1, 5, 6 ], [ 2, 3, 5 ], [ 2, 3, 5 ], [ 2, 6, 7 ],
273 [ 2, 6, 7 ], [ 3, 4, 6 ], [ 3, 4, 6 ], [ 4, 5, 7 ], [ 4, 5, 7 ] ],
274 autSubgroup := Group([ (1,2,3,4,5,6,7) ]) )
275 gap&gt; DeletedBlocksBlockDesign(D,[[2,3,5],[2,3,5],[4,5,7]]);
276 rec( isBlockDesign := true, v := 7,
277 blocks := [ [ 1, 2, 4 ], [ 1, 2, 4 ], [ 1, 3, 7 ], [ 1, 3, 7 ],
278 [ 1, 5, 6 ], [ 1, 5, 6 ], [ 2, 6, 7 ], [ 2, 6, 7 ], [ 3, 4, 6 ],
279 [ 3, 4, 6 ], [ 4, 5, 7 ] ] )
280 </pre>
281 <p>
282 <a name = "SSEC001.9"></a>
283 <li><code>AddedPointBlockDesign( </code><var>D</var><code>, </code><var>Y</var><code> )</code>
284 <li><code>AddedPointBlockDesign( </code><var>D</var><code>, </code><var>Y</var><code>, </code><var>pointname</var><code> )</code>
285 <p>
286 Suppose <var>D</var> is a block design, and <var>Y</var> is a sublist of the block-list
287 of <var>D</var> (<var>Y</var> need not be sorted).
288 <p>
289 Then this function returns the block design obtained from <var>D</var> by adding
290 the new point <code></code><var>D</var><code>.v+1</code> to the point-set, and adding this new point
291 (once) to each block of <var>Y</var> (where repeats count).
292 <p>
293 The optional parameter <var>pointname</var> specifies a point-name for the
294 new point.
295 <p>
296 <pre>
297 gap&gt; D:=BlockDesign(7,[[1,2,4],[1,2,4]],Group((1,2,3,4,5,6,7)));
298 rec( isBlockDesign := true, v := 7,
299 blocks := [ [ 1, 2, 4 ], [ 1, 2, 4 ], [ 1, 3, 7 ], [ 1, 3, 7 ],
300 [ 1, 5, 6 ], [ 1, 5, 6 ], [ 2, 3, 5 ], [ 2, 3, 5 ], [ 2, 6, 7 ],
301 [ 2, 6, 7 ], [ 3, 4, 6 ], [ 3, 4, 6 ], [ 4, 5, 7 ], [ 4, 5, 7 ] ],
302 autSubgroup := Group([ (1,2,3,4,5,6,7) ]) )
303 gap&gt; AddedPointBlockDesign(D,[[2,3,5],[2,3,5],[4,5,7]],"infinity");
304 rec( isBlockDesign := true, v := 8,
305 blocks := [ [ 1, 2, 4 ], [ 1, 2, 4 ], [ 1, 3, 7 ], [ 1, 3, 7 ],
306 [ 1, 5, 6 ], [ 1, 5, 6 ], [ 2, 3, 5, 8 ], [ 2, 3, 5, 8 ], [ 2, 6, 7 ],
307 [ 2, 6, 7 ], [ 3, 4, 6 ], [ 3, 4, 6 ], [ 4, 5, 7 ], [ 4, 5, 7, 8 ] ],
308 pointNames := [ 1, 2, 3, 4, 5, 6, 7, "infinity" ] )
309 </pre>
310 <p>
311 <a name = "SSEC001.10"></a>
312 <li><code>AddedBlocksBlockDesign( </code><var>D</var><code>, </code><var>Y</var><code> )</code>
313 <p>
314 Suppose <var>Y</var> is a list of multisets of points of the block design <var>D</var>.
315 Then this function returns a new block design, whose point-set is that
316 of <var>D</var>, and whose block list is that of <var>D</var> with the elements of <var>Y</var>
317 (including repeats) added.
318 <p>
319 <pre>
320 gap&gt; D:=BlockDesign(7,[[1,2,4]],Group((1,2,3,4,5,6,7)));
321 rec( isBlockDesign := true, v := 7,
322 blocks := [ [ 1, 2, 4 ], [ 1, 3, 7 ], [ 1, 5, 6 ], [ 2, 3, 5 ],
323 [ 2, 6, 7 ], [ 3, 4, 6 ], [ 4, 5, 7 ] ],
324 autSubgroup := Group([ (1,2,3,4,5,6,7) ]) )
325 gap&gt; AddedBlocksBlockDesign(D,D.blocks);
326 rec( isBlockDesign := true, v := 7,
327 blocks := [ [ 1, 2, 4 ], [ 1, 2, 4 ], [ 1, 3, 7 ], [ 1, 3, 7 ],
328 [ 1, 5, 6 ], [ 1, 5, 6 ], [ 2, 3, 5 ], [ 2, 3, 5 ], [ 2, 6, 7 ],
329 [ 2, 6, 7 ], [ 3, 4, 6 ], [ 3, 4, 6 ], [ 4, 5, 7 ], [ 4, 5, 7 ] ] )
330 </pre>
331 <p>
332 <a name = "SSEC001.11"></a>
333 <li><code>DerivedBlockDesign( </code><var>D</var><code>, </code><var>x</var><code> )</code>
334 <p>
335 Suppose <var>D</var> is a block design, and <var>x</var> is a point or block of <var>D</var>.
336 Then this function returns the <strong>derived design</strong>
337 <a name = "I0"></a>
338
339 <i>DD</i> of <var>D</var>, with respect to <var>x</var>.
340 <p>
341 If <var>x</var> is a point then <i>DD</i> is the block design whose blocks are those
342 of <var>D</var> containing <var>x</var>, but with <var>x</var> deleted from these blocks, and the
343 points of <i>DD</i> are those which occur in some block of <i>DD</i>.
344 <p>
345 If <var>x</var> is a block, then the points of <i>DD</i> are the points in <var>x</var>, and
346 the blocks of <i>DD</i> are the blocks of <var>D</var> other than <var>x</var> containing at
347 least one point of <var>x</var>, but with all points not in <var>x</var> deleted from
348 these blocks. Note that any repeat of <var>x</var>, but not <var>x</var> itself, is a
349 block of <i>DD</i>.
350 <p>
351 It is an error if the resulting block design <i>DD</i> has no blocks or an
352 empty block.
353 <p>
354 The points of <i>DD</i> are relabelled 1,2,&#183;.&#183;, preserving the order of
355 the corresponding points of <var>D</var>; the point-names of <i>DD</i> (listed in
356 <code><i>DD</i>.pointNames</code>) are those of these corresponding points of <var>D</var>.
357 <p>
358 <pre>
359 gap&gt; D:=BlockDesigns(rec(v:=11,blockSizes:=[5],
360 &gt; tSubsetStructure:=rec(t:=2,lambdas:=[2])))[1];
361 rec( isBlockDesign := true, v := 11,
362 blocks := [ [ 1, 2, 3, 4, 5 ], [ 1, 2, 9, 10, 11 ], [ 1, 3, 6, 7, 9 ],
363 [ 1, 4, 7, 8, 10 ], [ 1, 5, 6, 8, 11 ], [ 2, 3, 6, 8, 10 ],
364 [ 2, 4, 6, 7, 11 ], [ 2, 5, 7, 8, 9 ], [ 3, 4, 8, 9, 11 ],
365 [ 3, 5, 7, 10, 11 ], [ 4, 5, 6, 9, 10 ] ],
366 tSubsetStructure := rec( t := 2, lambdas := [ 2 ] ), isBinary := true,
367 isSimple := true, blockSizes := [ 5 ], blockNumbers := [ 11 ], r := 5,
368 autGroup := Group([ (2,4)(3,5)(7,11)(8,9), (1,3)(2,5)(7,9)(10,11),
369 (1,5,3)(6,11,7)(8,10,9), (1,10,5,2,11,3)(4,9,7)(6,8) ]) )
370 gap&gt; AllTDesignLambdas(D);
371 [ 11, 5, 2 ]
372 gap&gt; DD:=DerivedBlockDesign(D,6);
373 rec( isBlockDesign := true, v := 10,
374 blocks := [ [ 1, 3, 6, 8 ], [ 1, 5, 7, 10 ], [ 2, 3, 7, 9 ],
375 [ 2, 4, 6, 10 ], [ 4, 5, 8, 9 ] ],
376 pointNames := [ 1, 2, 3, 4, 5, 7, 8, 9, 10, 11 ] )
377 gap&gt; AllTDesignLambdas(DD);
378 [ 5, 2 ]
379 gap&gt; DD:=DerivedBlockDesign(D,D.blocks[6]);
380 rec( isBlockDesign := true, v := 5,
381 blocks := [ [ 1, 2 ], [ 1, 3 ], [ 1, 4 ], [ 1, 5 ], [ 2, 3 ], [ 2, 4 ],
382 [ 2, 5 ], [ 3, 4 ], [ 3, 5 ], [ 4, 5 ] ],
383 pointNames := [ 2, 3, 6, 8, 10 ] )
384 gap&gt; AllTDesignLambdas(DD);
385 [ 10, 4, 1 ]
386 </pre>
387 <p>
388 <a name = "SSEC001.12"></a>
389 <li><code>ResidualBlockDesign( </code><var>D</var><code>, </code><var>x</var><code> )</code>
390 <p>
391 Suppose <var>D</var> is a block design, and <var>x</var> is a point or block of <var>D</var>.
392 Then this function returns the <strong>residual design</strong>
393 <a name = "I1"></a>
394
395 <i>RD</i> of <var>D</var>, with respect to <var>x</var>.
396 <p>
397 If <var>x</var> is a point then <i>RD</i> is the block design whose blocks are those
398 of <var>D</var> not containing <var>x</var>, and the points of <i>RD</i> are those which occur
399 in some block of <i>RD</i>.
400 <p>
401 If <var>x</var> is a block, then the points of <i>RD</i> are those of <var>D</var> not in
402 <var>x</var>, and the blocks of <i>RD</i> are the blocks of <var>D</var> (including repeats)
403 containing at least one point not in <var>x</var>, but with all points in <var>x</var>
404 deleted from these blocks.
405 <p>
406 It is an error if the resulting block design <i>RD</i> has no blocks.
407 <p>
408 The points of <i>RD</i> are relabelled 1,2,&#183;.&#183;, preserving the order of
409 the corresponding points of <var>D</var>; the point-names of <i>RD</i> (listed in
410 <code><i>RD</i>.pointNames</code>) are those of these corresponding points of <var>D</var>.
411 <p>
412 <pre>
413 gap&gt; D:=BlockDesigns(rec(v:=11,blockSizes:=[5],
414 &gt; tSubsetStructure:=rec(t:=2,lambdas:=[2])))[1];
415 rec( isBlockDesign := true, v := 11,
416 blocks := [ [ 1, 2, 3, 4, 5 ], [ 1, 2, 9, 10, 11 ], [ 1, 3, 6, 7, 9 ],
417 [ 1, 4, 7, 8, 10 ], [ 1, 5, 6, 8, 11 ], [ 2, 3, 6, 8, 10 ],
418 [ 2, 4, 6, 7, 11 ], [ 2, 5, 7, 8, 9 ], [ 3, 4, 8, 9, 11 ],
419 [ 3, 5, 7, 10, 11 ], [ 4, 5, 6, 9, 10 ] ],
420 tSubsetStructure := rec( t := 2, lambdas := [ 2 ] ), isBinary := true,
421 isSimple := true, blockSizes := [ 5 ], blockNumbers := [ 11 ], r := 5,
422 autGroup := Group([ (2,4)(3,5)(7,11)(8,9), (1,3)(2,5)(7,9)(10,11),
423 (1,5,3)(6,11,7)(8,10,9), (1,10,5,2,11,3)(4,9,7)(6,8) ]) )
424 gap&gt; AllTDesignLambdas(D);
425 [ 11, 5, 2 ]
426 gap&gt; RD:=ResidualBlockDesign(D,6);
427 rec( isBlockDesign := true, v := 10,
428 blocks := [ [ 1, 2, 3, 4, 5 ], [ 1, 2, 8, 9, 10 ], [ 1, 4, 6, 7, 9 ],
429 [ 2, 5, 6, 7, 8 ], [ 3, 4, 7, 8, 10 ], [ 3, 5, 6, 9, 10 ] ],
430 pointNames := [ 1, 2, 3, 4, 5, 7, 8, 9, 10, 11 ] )
431 gap&gt; AllTDesignLambdas(RD);
432 [ 6, 3 ]
433 gap&gt; RD:=ResidualBlockDesign(D,D.blocks[6]);
434 rec( isBlockDesign := true, v := 6,
435 blocks := [ [ 1, 2, 3 ], [ 1, 2, 4 ], [ 1, 3, 6 ], [ 1, 4, 5 ],
436 [ 1, 5, 6 ], [ 2, 3, 5 ], [ 2, 4, 6 ], [ 2, 5, 6 ], [ 3, 4, 5 ],
437 [ 3, 4, 6 ] ], pointNames := [ 1, 4, 5, 7, 9, 11 ] )
438 gap&gt; AllTDesignLambdas(RD);
439 [ 10, 5, 2 ]
440 </pre>
441 <p>
442 <a name = "SSEC001.13"></a>
443 <li><code>TDesignFromTBD( </code><var>D</var><code>, </code><var>t</var><code>, </code><var>k</var><code> )</code>
444 <p>
445 For <i>t</i> a non-negative integer, <i>K</i> a set of positive integers, and
446 <i>v</i>,&#955; positive integers with <i>t</i> &#8804; <i>v</i>, a <i>t</i>-<strong>wise balanced design</strong>,
447 or a <i>t</i>-(<i>v</i>,<i>K</i>,&#955;) <strong>design</strong>, is a binary block design with exactly
448 <i>v</i> points, such that each block has size in <i>K</i> and each <i>t</i>-subset of
449 the points is contained in exactly &#955; blocks.
450 <p>
451 Now let <var>t</var> and <var>k</var> be positive integers, <var>D</var> be a <var>t</var>-(<i>v</i>,<i>K</i>,&#955;)
452 design (for some set <i>K</i>), and <i>t</i> &#8804; <i>k</i> &#8804; <i>k</i><sub>1</sub>, where exactly <i>s</i>
453 distinct block-sizes <i>k</i><sub>1</sub> &lt; &#8230; &lt; <i>k</i><sub><i>s</i></sub> occur in <var>D</var>. Then this
454 function returns the <var>t</var>-design <i>D</i><sup>*</sup>=<i>D</i><sup>*</sup>(<i>t</i>,<i>k</i>) described and studied
455 in <a href="biblio.htm#McSo"><cite>McSo</cite></a>.
456 <p>
457 The point set of <i>D</i><sup>*</sup> is that of <var>D</var>, and the block multiset of <i>D</i><sup>*</sup>
458 consists of, for each <i>i</i>=1,&#8230;,<i>s</i> and each block <i>B</i> of <var>D</var> of size
459 <i>k</i><sub><i>i</i></sub> (including repeats), exactly <br clear="all" /><table border="0" width="100%"><tr><td><table align="center" cellspacing="0" cellpadding="2"><tr><td nowrap="nowrap" align="center"><i>n</i>/</td><td align="left" class="cl">&#x239B;<br />&#x239D;</td><td nowrap="nowrap" align="center"><i>k</i><sub><i>i</i></sub>&#8722;<i>t</i><br /><i>k</i>&#8722;<i>t</i><br /></td><td align="left" class="cl">&#x239E;<br />&#x23A0;</td><td nowrap="nowrap" align="center"></td></tr></table></td></tr></table> copies of
460 every <i>k</i>-subset of <i>B</i>, where <br clear="all" /><table border="0" width="100%"><tr><td><table align="center" cellspacing="0" cellpadding="2"><tr><td nowrap="nowrap" align="center"><i>n</i>:=\lcm(</td><td align="left" class="cl">&#x239B;<br />&#x239D;</td><td nowrap="nowrap" align="center"><i>k</i><sub><i>i</i></sub>&#8722;<i>t</i><br /><i>k</i>&#8722;<i>t</i><br /></td><td align="left" class="cl">&#x239E;<br />&#x23A0;</td><td nowrap="nowrap" align="center">:1 &#8804; <i>i</i> &#8804; <i>s</i>)</td></tr></table></td></tr></table>.
461 <p>
462 It is shown in <a href="biblio.htm#McSo"><cite>McSo</cite></a> that <i>D</i><sup>*</sup> is a <i>t</i>-(<i>v</i>,<i>k</i>,<i>n</i>&#955;) design,
463 that \Aut(<i>D</i>) &#8838; \Aut(<i>D</i><sup>*</sup>), and that if &#955; = 1 and <i>t</i> &lt; <i>k</i>,
464 then \Aut(<i>D</i>)=\Aut(<i>D</i><sup>*</sup>).
465 <p>
466 <pre>
467 gap&gt; D:=BlockDesigns(rec(v:=10, blockSizes:=[3,4],
468 &gt; tSubsetStructure:=rec(t:=2,lambdas:=[1])))[1];
469 rec( isBlockDesign := true, v := 10,
470 blocks := [ [ 1, 2, 3, 4 ], [ 1, 5, 6, 7 ], [ 1, 8, 9, 10 ], [ 2, 5, 10 ],
471 [ 2, 6, 8 ], [ 2, 7, 9 ], [ 3, 5, 9 ], [ 3, 6, 10 ], [ 3, 7, 8 ],
472 [ 4, 5, 8 ], [ 4, 6, 9 ], [ 4, 7, 10 ] ],
473 tSubsetStructure := rec( t := 2, lambdas := [ 1 ] ), isBinary := true,
474 isSimple := true, blockSizes := [ 3, 4 ], blockNumbers := [ 9, 3 ],
475 autGroup := Group([ (5,6,7)(8,9,10), (2,3)(5,7)(8,10),
476 (2,3,4)(5,7,6)(8,9,10), (2,3,4)(5,9,6,8,7,10), (2,6,9,3,7,10)(4,5,8) ])
477 )
478 gap&gt; PairwiseBalancedLambda(D);
479 1
480 gap&gt; Dstar:=TDesignFromTBD(D,2,3);
481 rec( isBlockDesign := true, v := 10,
482 blocks := [ [ 1, 2, 3 ], [ 1, 2, 4 ], [ 1, 3, 4 ], [ 1, 5, 6 ],
483 [ 1, 5, 7 ], [ 1, 6, 7 ], [ 1, 8, 9 ], [ 1, 8, 10 ], [ 1, 9, 10 ],
484 [ 2, 3, 4 ], [ 2, 5, 10 ], [ 2, 5, 10 ], [ 2, 6, 8 ], [ 2, 6, 8 ],
485 [ 2, 7, 9 ], [ 2, 7, 9 ], [ 3, 5, 9 ], [ 3, 5, 9 ], [ 3, 6, 10 ],
486 [ 3, 6, 10 ], [ 3, 7, 8 ], [ 3, 7, 8 ], [ 4, 5, 8 ], [ 4, 5, 8 ],
487 [ 4, 6, 9 ], [ 4, 6, 9 ], [ 4, 7, 10 ], [ 4, 7, 10 ], [ 5, 6, 7 ],
488 [ 8, 9, 10 ] ],
489 autGroup := Group([ (5,6,7)(8,9,10), (2,3)(5,7)(8,10), (2,3,4)(5,7,6)(8,9,
490 10), (2,3,4)(5,9,6,8,7,10), (2,6,9,3,7,10)(4,5,8) ]) )
491 gap&gt; AllTDesignLambdas(Dstar);
492 [ 30, 9, 2 ]
493 </pre>
494 <p>
495 [<a href = "chapters.htm">Up</a>] [<a href ="CHAP002.htm">Previous</a>] [<a href ="CHAP004.htm">Next</a>] [<a href = "theindex.htm">Index</a>]
496 <P>
497 <address>design manual<br>March 2019
498 </address></body></html>
0 <html><head><title>[design] 4 Determining basic properties of block designs</title></head>
1 <body text="#000000" bgcolor="#ffffff">
2 [<a href = "chapters.htm">Up</a>] [<a href ="CHAP003.htm">Previous</a>] [<a href ="CHAP005.htm">Next</a>] [<a href = "theindex.htm">Index</a>]
3 <h1>4 Determining basic properties of block designs</h1><p>
4 <P>
5 <H3>Sections</H3>
6 <oL>
7 <li> <A HREF="CHAP004.htm#SECT001">The functions for basic properties</a>
8 </ol><p>
9 <p>
10 <p>
11 <h2><a name="SECT001">4.1 The functions for basic properties</a></h2>
12 <p><p>
13 <a name = "SSEC001.1"></a>
14 <li><code>IsBlockDesign( </code><var>obj</var><code> )</code>
15 <p>
16 This boolean function returns <code>true</code> if and only if <var>obj</var>, which can be
17 an object of arbitrary type, is a block design.
18 <p>
19 <pre>
20 gap&gt; IsBlockDesign(5);
21 false
22 gap&gt; IsBlockDesign( BlockDesign(2,[[1],[1,2],[1,2]]) );
23 true
24 </pre>
25 <p>
26 <a name = "SSEC001.2"></a>
27 <li><code>IsBinaryBlockDesign( </code><var>D</var><code> )</code>
28 <p>
29 This boolean function returns <code>true</code> if and only if the block design
30 <var>D</var> is <strong>binary</strong>, that is, if no block of <var>D</var> has a repeated element.
31 <p>
32 <pre>
33 gap&gt; IsBinaryBlockDesign( BlockDesign(2,[[1],[1,2],[1,2]]) );
34 true
35 gap&gt; IsBinaryBlockDesign( BlockDesign(2,[[1],[1,2],[1,2,2]]) );
36 false
37 </pre>
38 <p>
39 <a name = "SSEC001.3"></a>
40 <li><code>IsSimpleBlockDesign( </code><var>D</var><code> )</code>
41 <p>
42 This boolean function returns <code>true</code> if and only if the block design
43 <var>D</var> is <strong>simple</strong>, that is, if no block of <var>D</var> is repeated.
44 <p>
45 <pre>
46 gap&gt; IsSimpleBlockDesign( BlockDesign(2,[[1],[1,2],[1,2]]) );
47 false
48 gap&gt; IsSimpleBlockDesign( BlockDesign(2,[[1],[1,2],[1,2,2]]) );
49 true
50 </pre>
51 <p>
52 <a name = "SSEC001.4"></a>
53 <li><code>IsConnectedBlockDesign( </code><var>D</var><code> )</code>
54 <p>
55 This boolean function returns <code>true</code> if and only if the block design
56 <var>D</var> is <strong>connected</strong>, that is, if its incidence graph is a connected
57 graph.
58 <p>
59 <pre>
60 gap&gt; IsConnectedBlockDesign( BlockDesign(2,[[1],[2]]) );
61 false
62 gap&gt; IsConnectedBlockDesign( BlockDesign(2,[[1,2]]) );
63 true
64 </pre>
65 <p>
66 <a name = "SSEC001.5"></a>
67 <li><code>BlockDesignPoints( </code><var>D</var><code> )</code>
68 <p>
69 This function returns the set of points of the block design <var>D</var>, that is
70 <code>[1..</code><var>D</var><code>.v]</code>. The returned result is immutable.
71 <p>
72 <pre>
73 gap&gt; D:=BlockDesign(3,[[1,2],[1,3],[2,3],[2,3]]);
74 rec( isBlockDesign := true, v := 3,
75 blocks := [ [ 1, 2 ], [ 1, 3 ], [ 2, 3 ], [ 2, 3 ] ] )
76 gap&gt; BlockDesignPoints(D);
77 [ 1 .. 3 ]
78 </pre>
79 <p>
80 <a name = "SSEC001.6"></a>
81 <li><code>NrBlockDesignPoints( </code><var>D</var><code> )</code>
82 <p>
83 This function returns the number of points of the block design <var>D</var>.
84 <p>
85 <pre>
86 gap&gt; D:=BlockDesign(3,[[1,2],[1,3],[2,3],[2,3]]);
87 rec( isBlockDesign := true, v := 3,
88 blocks := [ [ 1, 2 ], [ 1, 3 ], [ 2, 3 ], [ 2, 3 ] ] )
89 gap&gt; NrBlockDesignPoints(D);
90 3
91 </pre>
92 <p>
93 <a name = "SSEC001.7"></a>
94 <li><code>BlockDesignBlocks( </code><var>D</var><code> )</code>
95 <p>
96 This function returns the (sorted) list of blocks of the block design <var>D</var>.
97 The returned result is immutable.
98 <p>
99 <pre>
100 gap&gt; D:=BlockDesign(3,[[1,2],[1,3],[2,3],[2,3]]);
101 rec( isBlockDesign := true, v := 3,
102 blocks := [ [ 1, 2 ], [ 1, 3 ], [ 2, 3 ], [ 2, 3 ] ] )
103 gap&gt; BlockDesignBlocks(D);
104 [ [ 1, 2 ], [ 1, 3 ], [ 2, 3 ], [ 2, 3 ] ]
105 </pre>
106 <p>
107 <a name = "SSEC001.8"></a>
108 <li><code>NrBlockDesignBlocks( </code><var>D</var><code> )</code>
109 <p>
110 This function returns the number of blocks of the block design <var>D</var>.
111 <p>
112 <pre>
113 gap&gt; D:=BlockDesign(3,[[1,2],[1,3],[2,3],[2,3]]);
114 rec( isBlockDesign := true, v := 3,
115 blocks := [ [ 1, 2 ], [ 1, 3 ], [ 2, 3 ], [ 2, 3 ] ] )
116 gap&gt; NrBlockDesignBlocks(D);
117 4
118 </pre>
119 <p>
120 <a name = "SSEC001.9"></a>
121 <li><code>BlockSizes( </code><var>D</var><code> )</code>
122 <p>
123 This function returns the set of sizes (actually list-lengths) of the
124 blocks of the block design <var>D</var>.
125 <p>
126 <pre>
127 gap&gt; BlockSizes( BlockDesign(3,[[1],[1,2,2],[1,2,3],[2],[3]]) );
128 [ 1, 3 ]
129 </pre>
130 <p>
131 <a name = "SSEC001.10"></a>
132 <li><code>BlockNumbers( </code><var>D</var><code> )</code>
133 <p>
134 Let <var>D</var> be a block design. Then this function returns a list of
135 the same length as <code>BlockSizes(</code><var>D</var><code>)</code>, such that the <i>i</i>-th element
136 of this returned list is the number of blocks of <var>D</var> of size
137 <code>BlockSizes(</code><var>D</var><code>)[<i>i</i>]</code>.
138 <p>
139 <pre>
140 gap&gt; D:=BlockDesign(3,[[1],[1,2,2],[1,2,3],[2],[3]]);
141 rec( isBlockDesign := true, v := 3,
142 blocks := [ [ 1 ], [ 1, 2, 2 ], [ 1, 2, 3 ], [ 2 ], [ 3 ] ] )
143 gap&gt; BlockSizes(D);
144 [ 1, 3 ]
145 gap&gt; BlockNumbers(D);
146 [ 3, 2 ]
147 </pre>
148 <p>
149 <a name = "SSEC001.11"></a>
150 <li><code>ReplicationNumber( </code><var>D</var><code> )</code>
151 <p>
152 If the block design <var>D</var> is equireplicate, then this function returns
153 its replication number; otherwise <code>fail</code> is returned.
154 <p>
155 A block design <i>D</i> is <strong>equireplicate</strong> with <strong>replication number</strong> <i>r</i> if,
156 for every point <i>x</i> of <i>D</i>, <i>r</i> is equal to the sum over the blocks of
157 the multiplicity of <i>x</i> in a block. For a binary block design this is
158 the same as saying that each point <i>x</i> is contained in exactly <i>r</i> blocks.
159 <p>
160 <pre>
161 gap&gt; ReplicationNumber(BlockDesign(4,[[1],[1,2],[2,3,3],[4,4]]));
162 2
163 gap&gt; ReplicationNumber(BlockDesign(4,[[1],[1,2],[2,3],[4,4]]));
164 fail
165 </pre>
166 <p>
167 <a name = "SSEC001.12"></a>
168 <li><code>PairwiseBalancedLambda( </code><var>D</var><code> )</code>
169 <p>
170 A binary block design <i>D</i> is <strong>pairwise balanced</strong> if <i>D</i> has at least two
171 points and every pair of distinct points is contained in exactly &#955;
172 blocks, for some positive constant &#955;.
173 <p>
174 Given a binary block design <var>D</var>, this function returns <code>fail</code> if <var>D</var> is
175 not pairwise balanced, and otherwise the positive constant &#955; such
176 that every pair of distinct points of <var>D</var> is in exactly &#955; blocks.
177 <p>
178 <pre>
179 gap&gt; D:=BlockDesigns(rec(v:=10, blockSizes:=[3,4],
180 &gt; tSubsetStructure:=rec(t:=2,lambdas:=[1])))[1];
181 rec( isBlockDesign := true, v := 10,
182 blocks := [ [ 1, 2, 3, 4 ], [ 1, 5, 6, 7 ], [ 1, 8, 9, 10 ], [ 2, 5, 10 ],
183 [ 2, 6, 8 ], [ 2, 7, 9 ], [ 3, 5, 9 ], [ 3, 6, 10 ], [ 3, 7, 8 ],
184 [ 4, 5, 8 ], [ 4, 6, 9 ], [ 4, 7, 10 ] ],
185 tSubsetStructure := rec( t := 2, lambdas := [ 1 ] ), isBinary := true,
186 isSimple := true, blockSizes := [ 3, 4 ], blockNumbers := [ 9, 3 ],
187 autGroup := Group([ (5,6,7)(8,9,10), (2,3)(5,7)(8,10),
188 (2,3,4)(5,7,6)(8,9,10), (2,3,4)(5,9,6,8,7,10), (2,6,9,3,7,10)(4,5,8) ])
189 )
190 gap&gt; PairwiseBalancedLambda(D);
191 1
192 </pre>
193 <p>
194 <a name = "SSEC001.13"></a>
195 <li><code>TSubsetLambdasVector( </code><var>D</var><code>, </code><var>t</var><code> )</code>
196 <p>
197 Let <var>D</var> be a block design, <var>t</var> a non-negative integer, and
198 <code><i>v</i>=</code><var>D</var><code>.v</code>. Then this function returns an integer vector <i>L</i>
199 whose positions correspond to the <var>t</var>-subsets of {1,&#8230;,<i>v</i>}.
200 The <i>i</i>-th element of <i>L</i> is the sum over all blocks <i>B</i> of <var>D</var>
201 of the number of times the <i>i</i>-th <var>t</var>-subset (in lexicographic order)
202 is contained in <i>B</i>. (For example, if <i>t</i>=2 and <i>B</i>=[1,1,2,3,3,4], then
203 <i>B</i> contains [1,2] twice, [1,3] four times, [1,4] twice,
204 [2,3] twice, [2,4] once, and [3,4] twice.) In particular,
205 if <var>D</var> is binary then <i>L</i>[<i>i</i>] is simply the number of blocks of <var>D</var>
206 containing the <i>i</i>-th <var>t</var>-subset (in lexicographic order).
207 <p>
208 <pre>
209 gap&gt; D:=BlockDesign(3,[[1],[1,2,2],[1,2,3],[2],[3]]);;
210 gap&gt; TSubsetLambdasVector(D,0);
211 [ 5 ]
212 gap&gt; TSubsetLambdasVector(D,1);
213 [ 3, 4, 2 ]
214 gap&gt; TSubsetLambdasVector(D,2);
215 [ 3, 1, 1 ]
216 gap&gt; TSubsetLambdasVector(D,3);
217 [ 1 ]
218 </pre>
219 <p>
220 <a name = "SSEC001.14"></a>
221 <li><code>AllTDesignLambdas( </code><var>D</var><code> )</code>
222 <p>
223 If the block design <var>D</var> is not a <i>t</i>-design for some <i>t</i> &#8805; 0 then this
224 function returns an empty list. Otherwise <var>D</var> is a binary block design
225 with constant block size <i>k</i>, say, and this function returns a list
226 <i>L</i> of length <i>T</i>+1, where <i>T</i> is the maximum <i>t</i> &#8804; <i>k</i> such that <var>D</var>
227 is a <i>t</i>-design, and, for <i>i</i>=1,&#8230;,<i>T</i>+1, <i>L</i>[<i>i</i>] is equal to the
228 (constant) number of blocks of <var>D</var> containing an (<i>i</i>&#8722;1)-subset of
229 the point-set of <var>D</var>. The returned result is immutable.
230 <p>
231 <pre>
232 gap&gt; AllTDesignLambdas(PGPointFlatBlockDesign(3,2,1));
233 [ 35, 7, 1 ]
234 </pre>
235 <p>
236 <a name = "SSEC001.15"></a>
237 <li><code>AffineResolvableMu( </code><var>D</var><code> )</code>
238 <p>
239 A block design is <strong>affine resolvable</strong> if the design is resolvable
240 and any two blocks not in the same parallel class of a resolution
241 meet in a constant number &#956; of points.
242 <p>
243 If the block design <var>D</var> is affine resolvable, then this function
244 returns its value of &#956;; otherwise <code>fail</code> is returned.
245 <p>
246 The value 0 is returned if, and only if, <var>D</var> consists of a single
247 parallel class.
248 <p>
249 <pre>
250 gap&gt; P:=PGPointFlatBlockDesign(2,3,1);; # projective plane of order 3
251 gap&gt; AffineResolvableMu(P);
252 fail
253 gap&gt; A:=ResidualBlockDesign(P,P.blocks[1]);; # affine plane of order 3
254 gap&gt; AffineResolvableMu(A);
255 1
256 </pre>
257 <p>
258 [<a href = "chapters.htm">Up</a>] [<a href ="CHAP003.htm">Previous</a>] [<a href ="CHAP005.htm">Next</a>] [<a href = "theindex.htm">Index</a>]
259 <P>
260 <address>design manual<br>March 2019
261 </address></body></html>
0 <html><head><title>[design] 5 Matrices and efficiency measures for block designs</title></head>
1 <body text="#000000" bgcolor="#ffffff">
2 [<a href = "chapters.htm">Up</a>] [<a href ="CHAP004.htm">Previous</a>] [<a href ="CHAP006.htm">Next</a>] [<a href = "theindex.htm">Index</a>]
3 <h1>5 Matrices and efficiency measures for block designs</h1><p>
4 <P>
5 <H3>Sections</H3>
6 <oL>
7 <li> <A HREF="CHAP005.htm#SECT001">Matrices associated with a block design</a>
8 <li> <A HREF="CHAP005.htm#SECT002">The function BlockDesignEfficiency</a>
9 <li> <A HREF="CHAP005.htm#SECT003">Computing an interval for a certain real zero of a rational polynomial</a>
10 </ol><p>
11 <p>
12 In this chapter we describe functions to calculate certain matrices
13 associated with a block design, and the function <code>BlockDesignEfficiency</code>
14 which determines certain statistical efficiency measures of a 1-design.
15 <p>
16 We also document the utility function <code>DESIGN_IntervalForLeastRealZero</code>,
17 which is used in the calculation of E-efficiency measures, but has much
18 wider application.
19 <p>
20 <p>
21 <h2><a name="SECT001">5.1 Matrices associated with a block design</a></h2>
22 <p><p>
23 <a name = "SSEC001.1"></a>
24 <li><code>PointBlockIncidenceMatrix( </code><var>D</var><code> )</code>
25 <p>
26 This function returns the point-block incidence matrix <var>N</var> of the
27 block design <var>D</var>. This matrix has rows indexed by the points of <var>D</var>
28 and columns by the blocks of <var>D</var>, with the (<i>i</i>,<i>j</i>)-entry of <var>N</var> being
29 the number of times point <i>i</i> occurs in <code></code><var>D</var><code>.blocks[</code><var>j</var><code>]</code>.
30 <p>
31 The returned matrix <var>N</var> is immutable.
32 <p>
33 <pre>
34 gap&gt; D:=DualBlockDesign(AGPointFlatBlockDesign(2,3,1));;
35 gap&gt; BlockDesignBlocks(D);
36 [ [ 1, 2, 3, 4 ], [ 1, 5, 6, 7 ], [ 1, 8, 9, 10 ], [ 2, 5, 8, 11 ],
37 [ 2, 7, 9, 12 ], [ 3, 5, 10, 12 ], [ 3, 6, 9, 11 ], [ 4, 6, 8, 12 ],
38 [ 4, 7, 10, 11 ] ]
39 gap&gt; PointBlockIncidenceMatrix(D);
40 [ [ 1, 1, 1, 0, 0, 0, 0, 0, 0 ], [ 1, 0, 0, 1, 1, 0, 0, 0, 0 ],
41 [ 1, 0, 0, 0, 0, 1, 1, 0, 0 ], [ 1, 0, 0, 0, 0, 0, 0, 1, 1 ],
42 [ 0, 1, 0, 1, 0, 1, 0, 0, 0 ], [ 0, 1, 0, 0, 0, 0, 1, 1, 0 ],
43 [ 0, 1, 0, 0, 1, 0, 0, 0, 1 ], [ 0, 0, 1, 1, 0, 0, 0, 1, 0 ],
44 [ 0, 0, 1, 0, 1, 0, 1, 0, 0 ], [ 0, 0, 1, 0, 0, 1, 0, 0, 1 ],
45 [ 0, 0, 0, 1, 0, 0, 1, 0, 1 ], [ 0, 0, 0, 0, 1, 1, 0, 1, 0 ] ]
46 </pre>
47 <p>
48 <a name = "SSEC001.2"></a>
49 <li><code>ConcurrenceMatrix( </code><var>D</var><code> )</code>
50 <p>
51 This function returns the concurrence matrix <var>L</var> of the block design <var>D</var>.
52 This matrix is equal to <i>NN</i><sup><span class="roman">T</span></sup>, where <i>N</i> is the point-block
53 incidence matrix of <var>D</var> (see <a href="CHAP005.htm#SSEC001.1">PointBlockIncidenceMatrix</a>) and
54 <i>N</i><sup><span class="roman">T</span></sup> is the transpose of <i>N</i>. If <var>D</var> is a binary block design
55 then the (<i>i</i>,<i>j</i>)-entry of its concurrence matrix is the number of blocks
56 containing points <i>i</i> and <i>j</i>.
57 <p>
58 The returned matrix <var>L</var> is immutable.
59 <p>
60 <pre>
61 gap&gt; D:=DualBlockDesign(AGPointFlatBlockDesign(2,3,1));;
62 gap&gt; BlockDesignBlocks(D);
63 [ [ 1, 2, 3, 4 ], [ 1, 5, 6, 7 ], [ 1, 8, 9, 10 ], [ 2, 5, 8, 11 ],
64 [ 2, 7, 9, 12 ], [ 3, 5, 10, 12 ], [ 3, 6, 9, 11 ], [ 4, 6, 8, 12 ],
65 [ 4, 7, 10, 11 ] ]
66 gap&gt; ConcurrenceMatrix(D);
67 [ [ 3, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0 ],
68 [ 1, 3, 1, 1, 1, 0, 1, 1, 1, 0, 1, 1 ],
69 [ 1, 1, 3, 1, 1, 1, 0, 0, 1, 1, 1, 1 ],
70 [ 1, 1, 1, 3, 0, 1, 1, 1, 0, 1, 1, 1 ],
71 [ 1, 1, 1, 0, 3, 1, 1, 1, 0, 1, 1, 1 ],
72 [ 1, 0, 1, 1, 1, 3, 1, 1, 1, 0, 1, 1 ],
73 [ 1, 1, 0, 1, 1, 1, 3, 0, 1, 1, 1, 1 ],
74 [ 1, 1, 0, 1, 1, 1, 0, 3, 1, 1, 1, 1 ],
75 [ 1, 1, 1, 0, 0, 1, 1, 1, 3, 1, 1, 1 ],
76 [ 1, 0, 1, 1, 1, 0, 1, 1, 1, 3, 1, 1 ],
77 [ 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 3, 0 ],
78 [ 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 3 ] ]
79 </pre>
80 <p>
81 <a name = "SSEC001.3"></a>
82 <li><code>InformationMatrix( </code><var>D</var><code> )</code>
83 <p>
84 This function returns the information matrix <var>C</var> of the block design <var>D</var>.
85 <p>
86 This matrix is defined as follows. Suppose <var>D</var> has <i>v</i> points and <i>b</i>
87 blocks, let <i>R</i> be the <i>v</i>&times;<i>v</i> diagonal matrix whose (<i>i</i>,<i>i</i>)-entry
88 is the replication number of the point <i>i</i>, let <i>N</i> be the point-block
89 incidence matrix of <var>D</var> (see <a href="CHAP005.htm#SSEC001.1">PointBlockIncidenceMatrix</a>), and let <i>K</i>
90 be the <i>b</i>&times;<i>b</i> diagonal matrix whose (<i>j</i>,<i>j</i>)-entry is the length of
91 <code></code><var>D</var><code>.blocks[</code><var>j</var><code>]</code>. Then the <strong>information matrix</strong> of <var>D</var> is
92 <i>C</i>:=<i>R</i>&#8722;<i>NK</i><sup>&#8722;1</sup><i>N</i><sup><span class="roman">T</span></sup>. If <var>D</var> is a 1-(<i>v</i>,<i>k</i>,<i>r</i>) design then this expression
93 for <var>C</var> simplifies to <i>rI</i>&#8722;<i>k</i><sup>&#8722;1</sup><i>L</i>, where <i>I</i> is the <i>v</i>&times;<i>v</i> identity
94 matrix and <i>L</i> is the concurrence matrix of <var>D</var> (see <a href="CHAP005.htm#SSEC001.2">ConcurrenceMatrix</a>).
95 <p>
96 The returned matrix <var>C</var> is immutable.
97 <p>
98 <pre>
99 gap&gt; D:=DualBlockDesign(AGPointFlatBlockDesign(2,3,1));;
100 gap&gt; BlockDesignBlocks(D);
101 [ [ 1, 2, 3, 4 ], [ 1, 5, 6, 7 ], [ 1, 8, 9, 10 ], [ 2, 5, 8, 11 ],
102 [ 2, 7, 9, 12 ], [ 3, 5, 10, 12 ], [ 3, 6, 9, 11 ], [ 4, 6, 8, 12 ],
103 [ 4, 7, 10, 11 ] ]
104 gap&gt; InformationMatrix(D);
105 [ [ 9/4, -1/4, -1/4, -1/4, -1/4, -1/4, -1/4, -1/4, -1/4, -1/4, 0, 0 ],
106 [ -1/4, 9/4, -1/4, -1/4, -1/4, 0, -1/4, -1/4, -1/4, 0, -1/4, -1/4 ],
107 [ -1/4, -1/4, 9/4, -1/4, -1/4, -1/4, 0, 0, -1/4, -1/4, -1/4, -1/4 ],
108 [ -1/4, -1/4, -1/4, 9/4, 0, -1/4, -1/4, -1/4, 0, -1/4, -1/4, -1/4 ],
109 [ -1/4, -1/4, -1/4, 0, 9/4, -1/4, -1/4, -1/4, 0, -1/4, -1/4, -1/4 ],
110 [ -1/4, 0, -1/4, -1/4, -1/4, 9/4, -1/4, -1/4, -1/4, 0, -1/4, -1/4 ],
111 [ -1/4, -1/4, 0, -1/4, -1/4, -1/4, 9/4, 0, -1/4, -1/4, -1/4, -1/4 ],
112 [ -1/4, -1/4, 0, -1/4, -1/4, -1/4, 0, 9/4, -1/4, -1/4, -1/4, -1/4 ],
113 [ -1/4, -1/4, -1/4, 0, 0, -1/4, -1/4, -1/4, 9/4, -1/4, -1/4, -1/4 ],
114 [ -1/4, 0, -1/4, -1/4, -1/4, 0, -1/4, -1/4, -1/4, 9/4, -1/4, -1/4 ],
115 [ 0, -1/4, -1/4, -1/4, -1/4, -1/4, -1/4, -1/4, -1/4, -1/4, 9/4, 0 ],
116 [ 0, -1/4, -1/4, -1/4, -1/4, -1/4, -1/4, -1/4, -1/4, -1/4, 0, 9/4 ] ]
117 </pre>
118 <p>
119 <p>
120 <h2><a name="SECT002">5.2 The function BlockDesignEfficiency</a></h2>
121 <p><p>
122 <a name = "SSEC002.1"></a>
123 <li><code>BlockDesignEfficiency( </code><var>D</var><code> )</code>
124 <li><code>BlockDesignEfficiency( </code><var>D</var><code>, </code><var>eps</var><code> )</code>
125 <li><code>BlockDesignEfficiency( </code><var>D</var><code>, </code><var>eps</var><code>, </code><var>includeMV</var><code> )</code>
126 <p>
127 Let <var>D</var> be a 1-(<i>v</i>,<i>k</i>,<i>r</i>) design with <i>v</i> &gt; 1, let <var>eps</var> be a positive
128 rational number (default: 10<sup>&#8722;6</sup>), and let <var>includeMV</var> be a boolean
129 (default: <code>false</code>). Then this function returns a record <var>eff</var> containing
130 information on statistical efficiency measures of <var>D</var>. These measures
131 are defined below. See <a href="biblio.htm#Extrep"><cite>Extrep</cite></a>, <a href="biblio.htm#BaCa"><cite>BaCa</cite></a> and <a href="biblio.htm#BaRo"><cite>BaRo</cite></a>
132 for further details. All returned results are computed using exact
133 algebraic computation.
134 <p>
135 The component <code></code><var>eff</var><code>.A</code> contains the A-efficiency measure for <var>D</var>,
136 <code></code><var>eff</var><code>.Dpowered</code> contains the D-efficiency measure of <var>D</var> raised to the
137 power <i>v</i>&#8722;1, and <code></code><var>eff</var><code>.Einterval</code> is a list [<i>a</i>,<i>b</i>] of non-negative
138 rational numbers such that if <i>x</i> is the E-efficiency measure of <var>D</var>
139 then <i>a</i> &#8804; <i>x</i> &#8804; <i>b</i>, <i>b</i>&#8722;<i>a</i> &#8804; <var>eps</var>, and if <i>x</i> is rational then <i>a</i>=<i>x</i>=<i>b</i>.
140 Moreover <code></code><var>eff</var><code>.CEFpolynomial</code> contains the monic polynomial over the
141 rationals whose zeros (counting multiplicities) are the canonical
142 efficiency factors of the design <var>D</var>. If <code></code><var>includeMV</var><code>=true</code> then
143 additional work is done to compute the MV- (also called E&#8242;-) efficiency
144 measure, and then <code></code><var>eff</var><code>.MV</code> contains the value of this measure. (This
145 component may be set even if <code></code><var>includeMV</var><code>=false</code>, as a byproduct of
146 other computation.)
147 <p>
148 We now define the canonical efficiency factors and the A-, D-, E-,
149 and MV-efficiency measures of a 1-design.
150 <p>
151 Let <i>D</i> be a 1-(<i>v</i>,<i>k</i>,<i>r</i>) design with <i>v</i> &#8805; 2, let <i>C</i> be the information
152 matrix of <i>D</i> (see <a href="CHAP005.htm#SSEC001.3">InformationMatrix</a>), and let <i>F</i>:=<i>r</i><sup>&#8722;1</sup><i>C</i>.
153 The eigenvalues of <i>F</i> are all real and lie in the interval [0,1].
154 At least one of these eigenvalues is zero: an associated eigenvector is
155 the all-1 vector. The remaining eigenvalues &#948;<sub>1</sub> &#8804; &#948;<sub>2</sub> &#8804; &#8230; &#8804; &#948;<sub><i>v</i>&#8722;1</sub> of <i>F</i> are called the <strong>canonical efficiency
156 factors</strong> of <i>D</i>. These are all non-zero if and only if <i>D</i> is connected
157 (that is, the point-block incidence graph of <i>D</i> is a connected graph).
158 <p>
159 If <i>D</i> is not connected, then the A-, D-, E-, and MV-efficiency measures
160 of <i>D</i> are all defined to be zero. Otherwise, the <strong>A-efficiency
161 measure</strong> is (<i>v</i>&#8722;1)/&#8721;<sub><i>i</i>=1</sub><sup><i>v</i>&#8722;1</sup>1/&#948;<sub><i>i</i></sub> (the harmonic mean
162 of the canonical efficiency factors), the <strong>D-efficiency measure</strong>
163 is (&#8719;<sub><i>i</i>=1</sub><sup><i>v</i>&#8722;1</sup>&#948;<sub><i>i</i></sub>)<sup>1/(<i>v</i>&#8722;1)</sup> (the geometric mean of
164 the canonical efficiency factors), and the <strong>E-efficiency measure</strong> is
165 &#948;<sub>1</sub> (the minimum of the canonical efficiency factors).
166 <p>
167 If <i>D</i> is connected, and the MV-efficiency measure is required,
168 then it is computed as follows. Let <i>F</i>:=<i>r</i><sup>&#8722;1</sup><i>C</i> be as before,
169 and let <i>P</i>:=<i>v</i><sup>&#8722;1</sup><i>J</i>, where <i>J</i> is the <i>v</i>&times;<i>v</i> all-1 matrix. Set
170 <i>M</i>:=(<i>F</i>+<i>P</i>)<sup>&#8722;1</sup>&#8722;<i>P</i>, making <i>M</i> the ``Moore-Penrose inverse'' of <i>F</i> (see
171 <a href="biblio.htm#BaCa"><cite>BaCa</cite></a>). Then the <strong>MV-efficiency measure</strong> of <i>D</i> is the minimum
172 value (over all <i>i</i>,<i>j</i> &#8712; {1,&#8230;,<i>v</i>}, <i>i</i> &#8800; <i>j</i>) of
173 2/(<i>M</i><sub><i>ii</i></sub>+<i>M</i><sub><i>jj</i></sub>&#8722;<i>M</i><sub><i>ij</i></sub>&#8722;<i>M</i><sub><i>ji</i></sub>).
174 <p>
175 <pre>
176 gap&gt; D:=DualBlockDesign(AGPointFlatBlockDesign(2,3,1));;
177 gap&gt; BlockDesignBlocks(D);
178 [ [ 1, 2, 3, 4 ], [ 1, 5, 6, 7 ], [ 1, 8, 9, 10 ], [ 2, 5, 8, 11 ],
179 [ 2, 7, 9, 12 ], [ 3, 5, 10, 12 ], [ 3, 6, 9, 11 ], [ 4, 6, 8, 12 ],
180 [ 4, 7, 10, 11 ] ]
181 gap&gt; BlockDesignEfficiency(D);
182 rec( A := 33/41,
183 CEFpolynomial := x_1^11-9*x_1^10+147/4*x_1^9-719/8*x_1^8+18723/128*x_1^7-106\
184 47/64*x_1^6+138159/1024*x_1^5-159813/2048*x_1^4+2067201/65536*x_1^3-556227/655\
185 36*x_1^2+89667/65536*x_1-6561/65536, Dpowered := 6561/65536,
186 Einterval := [ 3/4, 3/4 ] )
187 gap&gt; BlockDesignEfficiency(D,10^(-4),true);
188 rec( A := 33/41,
189 CEFpolynomial := x_1^11-9*x_1^10+147/4*x_1^9-719/8*x_1^8+18723/128*x_1^7-106\
190 47/64*x_1^6+138159/1024*x_1^5-159813/2048*x_1^4+2067201/65536*x_1^3-556227/655\
191 36*x_1^2+89667/65536*x_1-6561/65536, Dpowered := 6561/65536,
192 Einterval := [ 3/4, 3/4 ], MV := 3/4 )
193 </pre>
194 <p>
195 <p>
196 <h2><a name="SECT003">5.3 Computing an interval for a certain real zero of a rational polynomial</a></h2>
197 <p><p>
198 We document a DESIGN package utility function used in the calculation
199 of the <code>Einterval</code> component above, but is more widely applicable.
200 <p>
201 <a name = "SSEC003.1"></a>
202 <li><code>DESIGN_IntervalForLeastRealZero( </code><var>f</var><code>, </code><var>a</var><code>, </code><var>b</var><code>, </code><var>eps</var><code> )</code>
203 <p>
204 Suppose that <var>f</var> is a univariate polynomial over the rationals, <var>a</var>,
205 <var>b</var> are rational numbers with <i>a</i> &#8804; <i>b</i> , and <var>eps</var> is a positive
206 rational number.
207 <p>
208 If <var>f</var> has no real zero in the closed interval [<i>a</i> ,<i>b</i> ], then this
209 function returns the empty list. Otherwise, let &#945; be the least
210 real zero of <var>f</var> such that <i>a</i> &#8804; &#945; &#8804; <i>b</i> . Then this function
211 returns a list [<i>c</i>,<i>d</i>] of rational numbers, with <i>c</i> &#8804; &#945; &#8804; <i>d</i>
212 and <i>d</i>&#8722;<i>c</i> &#8804; <i>eps</i> . Moreover, <i>c</i>=<i>d</i> if and only if &#945; is rational
213 (in which case &#945; = <i>c</i>=<i>d</i>).
214 <p>
215 <pre>
216 gap&gt; x:=Indeterminate(Rationals,1);
217 x_1
218 gap&gt; f:=(x+3)*(x^2-3);
219 x_1^3+3*x_1^2-3*x_1-9
220 gap&gt; L:=DESIGN_IntervalForLeastRealZero(f,-5,5,10^(-3));
221 [ -3, -3 ]
222 gap&gt; L:=DESIGN_IntervalForLeastRealZero(f,-2,5,10^(-3));
223 [ -14193/8192, -7093/4096 ]
224 gap&gt; List(L,Float);
225 [ -1.73254, -1.73169 ]
226 gap&gt; L:=DESIGN_IntervalForLeastRealZero(f,0,5,10^(-3));
227 [ 14185/8192, 7095/4096 ]
228 gap&gt; List(L,Float);
229 [ 1.73157, 1.73218 ]
230 gap&gt; L:=DESIGN_IntervalForLeastRealZero(f,0,5,10^(-5));
231 [ 454045/262144, 908095/524288 ]
232 gap&gt; List(L,Float);
233 [ 1.73204, 1.73205 ]
234 gap&gt; L:=DESIGN_IntervalForLeastRealZero(f,2,5,10^(-5));
235 [ ]
236 </pre>
237 <p>
238 <p>
239 [<a href = "chapters.htm">Up</a>] [<a href ="CHAP004.htm">Previous</a>] [<a href ="CHAP006.htm">Next</a>] [<a href = "theindex.htm">Index</a>]
240 <P>
241 <address>design manual<br>March 2019
242 </address></body></html>
0 <html><head><title>[design] 6 Automorphism groups and isomorphism testing for block designs</title></head>
1 <body text="#000000" bgcolor="#ffffff">
2 [<a href = "chapters.htm">Up</a>] [<a href ="CHAP005.htm">Previous</a>] [<a href ="CHAP007.htm">Next</a>] [<a href = "theindex.htm">Index</a>]
3 <h1>6 Automorphism groups and isomorphism testing for block designs</h1><p>
4 <P>
5 <H3>Sections</H3>
6 <oL>
7 <li> <A HREF="CHAP006.htm#SECT001">Computing automorphism groups</a>
8 <li> <A HREF="CHAP006.htm#SECT002">Testing isomorphism</a>
9 </ol><p>
10 <p>
11 The functions in this chapter depend on nauty <a href="biblio.htm#Nau90"><cite>Nau90</cite></a>, <a href="biblio.htm#MP14"><cite>MP14</cite></a>
12 or bliss <a href="biblio.htm#JK07"><cite>JK07</cite></a> via the GRAPE package, which must be fully
13 installed in order for these functions to work.
14 <p>
15 <p>
16 <h2><a name="SECT001">6.1 Computing automorphism groups</a></h2>
17 <p><p>
18 <a name = "SSEC001.1"></a>
19 <li><code>AutGroupBlockDesign( </code><var>D</var><code> )</code>
20 <p>
21 This function returns the automorphism group of the block design <var>D</var>.
22 The <strong>automorphism group</strong> \Aut(<i>D</i> ) of <var>D</var> is the group consisting of
23 all the permutations of the points {1,&#8230;,<i>D</i> <tt>.</tt><tt>v</tt>} which preserve
24 the block-multiset of <var>D</var>.
25 <p>
26 This function is not yet implemented for non-binary block designs.
27 <p>
28 This function can also be called via <code>AutomorphismGroup(</code><var>D</var><code>)</code>.
29 <p>
30 <pre>
31 gap&gt; D:=PGPointFlatBlockDesign(2,3,1);; # projective plane of order 3
32 gap&gt; Size(AutGroupBlockDesign(D));
33 5616
34 </pre>
35 <p>
36 <p>
37 <h2><a name="SECT002">6.2 Testing isomorphism</a></h2>
38 <p><p>
39 <a name = "SSEC002.1"></a>
40 <li><code>IsIsomorphicBlockDesign( </code><var>D1</var><code>, </code><var>D2</var><code> )</code>
41 <p>
42 This boolean function returns <code>true</code> if and only if block designs
43 <var>D1</var> and <var>D2</var> are <strong>isomorphic</strong>, that is, there is a bijection from the
44 point-set of <var>D1</var> to that of <var>D2</var> which maps the block-multiset of <var>D1</var>
45 to that of <var>D2</var>.
46 <p>
47 This function is not yet implemented for non-binary block designs.
48 <p>
49 For pairwise isomorphism testing for three or more binary block designs,
50 see <a href="CHAP006.htm#SSEC002.2">BlockDesignIsomorphismClassRepresentatives</a>.
51 <p>
52 <pre>
53 gap&gt; D1:=BlockDesign(3,[[1],[1,2,3],[2]]);;
54 gap&gt; D2:=BlockDesign(3,[[1],[1,2,3],[3]]);;
55 gap&gt; IsIsomorphicBlockDesign(D1,D2);
56 true
57 gap&gt; D3:=BlockDesign(4,[[1],[1,2,3],[3]]);;
58 gap&gt; IsIsomorphicBlockDesign(D2,D3);
59 false
60 gap&gt; # block designs with different numbers of points are not isomorphic
61 </pre>
62 <p>
63 <a name = "SSEC002.2"></a>
64 <li><code>BlockDesignIsomorphismClassRepresentatives( </code><var>L</var><code> )</code>
65 <p>
66 Given a list <var>L</var> of binary block designs, this function returns a list
67 consisting of pairwise non-isomorphic elements of <var>L</var>, representing all
68 the isomorphism classes of elements of <var>L</var>. The order of the elements
69 in the returned list may differ from their order in <var>L</var>.
70 <p>
71 <pre>
72 gap&gt; D1:=BlockDesign(3,[[1],[1,2,3],[2]]);;
73 gap&gt; D2:=BlockDesign(3,[[1],[1,2,3],[3]]);;
74 gap&gt; D3:=BlockDesign(4,[[1],[1,2,3],[3]]);;
75 gap&gt; BlockDesignIsomorphismClassRepresentatives([D1,D2,D3]);
76 [ rec( isBlockDesign := true, v := 4, blocks := [ [ 1 ], [ 1, 2, 3 ], [ 3 ] ],
77 isBinary := true ),
78 rec( isBlockDesign := true, v := 3, blocks := [ [ 1 ], [ 1, 2, 3 ], [ 2 ] ],
79 isBinary := true ) ]
80 </pre>
81 <p>
82 [<a href = "chapters.htm">Up</a>] [<a href ="CHAP005.htm">Previous</a>] [<a href ="CHAP007.htm">Next</a>] [<a href = "theindex.htm">Index</a>]
83 <P>
84 <address>design manual<br>March 2019
85 </address></body></html>
0 <html><head><title>[design] 7 Classifying block designs</title></head>
1 <body text="#000000" bgcolor="#ffffff">
2 [<a href = "chapters.htm">Up</a>] [<a href ="CHAP006.htm">Previous</a>] [<a href ="CHAP008.htm">Next</a>] [<a href = "theindex.htm">Index</a>]
3 <h1>7 Classifying block designs</h1><p>
4 <P>
5 <H3>Sections</H3>
6 <oL>
7 <li> <A HREF="CHAP007.htm#SECT001">The function BlockDesigns</a>
8 </ol><p>
9 <p>
10 This chapter describes the function <code>BlockDesigns</code> which can classify
11 block designs with given properties. The possible properties a user
12 can specify are many and varied, and are described below. Depending on
13 the properties, this function can handle block designs with up to about
14 20 points (sometimes more and sometimes less, depending on the problem).
15 <p>
16 <p>
17 <h2><a name="SECT001">7.1 The function BlockDesigns</a></h2>
18 <p><p>
19 <a name = "SSEC001.1"></a>
20 <li><code>BlockDesigns( </code><var>param</var><code> )</code>
21 <p>
22 This function returns a list <var>DL</var> of block designs whose properties are
23 specified by the user in the record <var>param</var>. The precise interpretation
24 of the output depends on <var>param</var>, described below. Only binary designs
25 are generated by this function, if <code></code><var>param</var><code>.blockDesign</code> is unbound
26 or is a binary design.
27 <p>
28 The required components of <var>param</var> are <code>v</code>, <code>blockSizes</code>, and
29 <code>tSubsetStructure</code>.
30 <p>
31 <code></code><var>param</var><code>.v</code> must be a positive integer, and specifies that for each block
32 design in the list <var>DL</var>, the points are 1,...,<code></code><var>param</var><code>.v</code>.
33 <p>
34 <code></code><var>param</var><code>.blockSizes</code> must be a set of positive integers, and specifies
35 that the block sizes of each block design in <var>DL</var> will be contained in
36 <code></code><var>param</var><code>.blockSizes</code>.
37 <p>
38 <code></code><var>param</var><code>.tSubsetStructure</code> must be a record, having
39 components <code>t</code>, <code>partition</code>, and <code>lambdas</code>. Let <var>t</var>
40 be equal to <code></code><var>param</var><code>.tSubsetStructure.t</code>, <var>partition</var>
41 be <code></code><var>param</var><code>.tSubsetStructure.partition</code>, and <var>lambdas</var> be
42 <code></code><var>param</var><code>.tSubsetStructure.lambdas</code>. Then <var>t</var> must be a non-negative
43 integer, <var>partition</var> must be a list of non-empty sets of <var>t</var>-subsets of
44 <code>[1..</code><var>param</var><code>.v]</code>, forming an ordered partition of all the <var>t</var>-subsets of
45 <code>[1..</code><var>param</var><code>.v]</code>, and <var>lambdas</var> must be a list of distinct non-negative
46 integers (not all zero) of the same length as <var>partition</var>. This specifies
47 that for each design in <var>DL</var>, each <var>t</var>-subset in <code></code><var>partition</var><code>[</code><var>i</var><code>]</code>
48 will occur exactly <code></code><var>lambdas</var><code>[</code><var>i</var><code>]</code> times, counted over all blocks of
49 the design. For binary designs, this means that each <var>t</var>-subset in
50 <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.
51 The <code>partition</code> component is optional if <var>lambdas</var> has length 1.
52 We require that <var>t</var> is less than or equal to each element of
53 <code></code><var>param</var><code>.blockSizes</code>, and if <code></code><var>param</var><code>.blockDesign</code> is bound,
54 then each block of <code></code><var>param</var><code>.blockDesign</code> must contain at least <var>t</var>
55 distinct elements. Note that if <code></code><var>param</var><code>.tSubsetStructure</code> is equal to
56 <code>rec(t:=0,lambdas:=[</code><var>b</var><code>])</code>, for some positive integer <var>b</var>, then all
57 that is being specified is that each design in <var>DL</var> must have exactly
58 <var>b</var> blocks.
59 <p>
60 The optional components of <var>param</var> are used to specify additional
61 constraints on the designs in <var>DL</var> or to change default parameter
62 values. These optional components are <code>blockDesign</code>, <code>r</code>, <code>b</code>,
63 <code>blockNumbers</code>, <code>blockIntersectionNumbers</code>, <code>blockMaxMultiplicities</code>,
64 <code>isoGroup</code>, <code>requiredAutSubgroup</code>, and <code>isoLevel</code>.
65 <p>
66 <code></code><var>param</var><code>.blockDesign</code> must be a block design with <code></code><var>param</var><code>.blockDesign.v</code>
67 equal to <code></code><var>param</var><code>.v</code>. Then each block multiset of a design in <var>DL</var> will
68 be a submultiset of <code></code><var>param</var><code>.blockDesign.blocks</code> (that is, each block of
69 a design <var>D</var> in <var>DL</var> will be a block of <code></code><var>param</var><code>.blockDesign</code>, and the
70 multiplicity of a block of <var>D</var> will be less than or equal to that block's
71 multiplicity in <code></code><var>param</var><code>.blockDesign</code>). The <code>blockDesign</code> component is
72 useful for the computation of subdesigns, such as parallel classes.
73 <p>
74 <code></code><var>param</var><code>.r</code> must be a positive integer, and specifies that in each design
75 in <var>DL</var>, each point will occur exactly <code></code><var>param</var><code>.r</code> times in the list of
76 blocks. In other words, each design in <var>DL</var> will have replication number
77 <code></code><var>param</var><code>.r</code>.
78 <p>
79 <code></code><var>param</var><code>.b</code> must be a positive integer, and specifies that each design
80 in <var>DL</var> will have exactly <code></code><var>param</var><code>.b</code> blocks.
81 <p>
82 <code></code><var>param</var><code>.blockNumbers</code> must be a list of non-negative integers, the <var>i</var>-th
83 element of which specifies the number of blocks whose size is equal
84 to <code></code><var>param</var><code>.blockSizes[</code><var>i</var><code>]</code> (for each design in <var>DL</var>). The length of
85 <code></code><var>param</var><code>.blockNumbers</code> must equal that of <code></code><var>param</var><code>.blockSizes</code>, and at
86 least one entry of <code></code><var>param</var><code>.blockNumbers</code> must be positive.
87 <p>
88 <code></code><var>param</var><code>.blockIntersectionNumbers</code> must be a symmetric matrix of sets
89 of non-negative integers, the <code>[</code><var>i</var><code>][</code><var>j</var><code>]</code>-element of which specifies
90 the set of possible sizes for the intersection of a block <i>B</i> of
91 size <code></code><var>param</var><code>.blockSizes[</code><var>i</var><code>]</code> with a different block (but possibly
92 a repeat of <i>B</i>) of size <code></code><var>param</var><code>.blockSizes[</code><var>j</var><code>]</code> (for each design
93 in <var>DL</var>). In the case of multisets, we take the multiplicity of an
94 element in the intersection to be the minimum of its multiplicities in
95 the multisets being intersected; for example, the intersection of
96 <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
97 dimension of <code></code><var>param</var><code>.blockIntersectionNumbers</code> must equal the length of
98 <code></code><var>param</var><code>.blockSizes</code>.
99 <p>
100 <code></code><var>param</var><code>.blockMaxMultiplicities</code> must be a list of non-negative integers,
101 the <var>i</var>-th element of which specifies an upper bound on the multiplicity
102 of a block whose size is equal to <code></code><var>param</var><code>.blockSizes[</code><var>i</var><code>]</code> (for each
103 design in <var>DL</var>). The length of <code></code><var>param</var><code>.blockMaxMultiplicities</code> must
104 equal that of <code></code><var>param</var><code>.blockSizes</code>.
105 <p>
106 Let <var>G</var> be the automorphism group of <code></code><var>param</var><code>.blockDesign</code> if bound, and
107 <var>G</var> be <code>SymmetricGroup(</code><var>param</var><code>.v)</code> otherwise. Let <var>H</var> be the subgroup of
108 <var>G</var> stabilizing <code></code><var>param</var><code>.tSubsetStructure.partition</code> (as an ordered list
109 of sets of sets) if bound, and <var>H</var> be equal to <var>G</var> otherwise.
110 <p>
111 <code></code><var>param</var><code>.isoGroup</code> must be a subgroup of <var>H</var>, and specifies that we
112 consider two designs with the required properties to be <strong>equivalent</strong>
113 if their block multisets are in the same orbit of <code></code><var>param</var><code>.isoGroup</code>
114 (in its action on multisets of multisets of <code>[1..</code><var>param</var><code>.v]</code>). The
115 default for <code></code><var>param</var><code>.isoGroup</code> is <var>H</var>. Thus, if <code></code><var>param</var><code>.blockDesign</code>
116 and <code></code><var>param</var><code>.isoGroup</code> are both unbound, equivalence is the same as
117 block-design isomorphism for the required designs.
118 <p>
119 <code></code><var>param</var><code>.requiredAutSubgroup</code> must be a subgroup of <code></code><var>param</var><code>.isoGroup</code>,
120 and specifies that each design in <var>DL</var> must be invariant under
121 <code></code><var>param</var><code>.requiredAutSubgroup</code> (in its action on multisets of multisets of
122 <code>[1..</code><var>param</var><code>.v]</code>). The default for <code></code><var>param</var><code>.requiredAutSubgroup</code> is the
123 trivial permutation group.
124 <p>
125 <code></code><var>param</var><code>.isoLevel</code> must be 0, 1, or 2 (the default is 2). The value
126 0 specifies that <var>DL</var> will contain at most one block design, and will
127 contain one block design with the required properties if and only if
128 such a block design exists; the value&nbsp;1 specifies that <var>DL</var> will contain
129 (perhaps properly) a list of <code></code><var>param</var><code>.isoGroup</code>-orbit representatives of
130 the required designs; the value 2 specifies that <var>DL</var> will consist
131 precisely of <code></code><var>param</var><code>.isoGroup</code>-orbit representatives of the required
132 designs.
133 <p>
134 For an example, we classify up to isomorphism the 2-(15,3,1) designs
135 invariant under a semi-regular group of automorphisms of order 5, and
136 then classify all parallel classes of these designs, up to the action
137 of the automorphism groups of these designs.
138 <p>
139 <pre>
140 gap&gt; DL:=BlockDesigns(rec(
141 &gt; v:=15,blockSizes:=[3],
142 &gt; tSubsetStructure:=rec(t:=2,lambdas:=[1]),
143 &gt; requiredAutSubgroup:=
144 &gt; Group((1,2,3,4,5)(6,7,8,9,10)(11,12,13,14,15))));;
145 gap&gt; List(DL,AllTDesignLambdas);
146 [ [ 35, 7, 1 ], [ 35, 7, 1 ], [ 35, 7, 1 ] ]
147 gap&gt; List(DL,D-&gt;Size(AutGroupBlockDesign(D)));
148 [ 20160, 5, 60 ]
149 gap&gt; parclasses:=List(DL,D-&gt;
150 &gt; BlockDesigns(rec(
151 &gt; blockDesign:=D,
152 &gt; v:=15,blockSizes:=[3],
153 &gt; tSubsetStructure:=rec(t:=1,lambdas:=[1]))));
154 [ [ rec( isBlockDesign := true, v := 15,
155 blocks := [ [ 1, 2, 6 ], [ 3, 4, 8 ], [ 5, 7, 14 ], [ 9, 12, 15 ],
156 [ 10, 11, 13 ] ],
157 tSubsetStructure := rec( t := 1, lambdas := [ 1 ] ),
158 isBinary := true, isSimple := true, blockSizes := [ 3 ],
159 blockNumbers := [ 5 ], r := 1,
160 autSubgroup := Group([ (2,6)(3,11)(4,10)(5,14)(8,13)(12,15),
161 (2,6)(4,8)(5,12)(7,9)(10,13)(14,15),
162 (2,6)(3,12)(4,9)(7,14)(8,15)(11,13),
163 (3,12,5)(4,15,7)(8,9,14)(10,11,13),
164 (1,6,2)(3,4,8)(5,7,14)(9,12,15)(10,11,13),
165 (1,8,11,2,3,10)(4,13,6)(5,15,14,9,7,12) ]) ) ],
166 [ rec( isBlockDesign := true, v := 15,
167 blocks := [ [ 1, 7, 12 ], [ 2, 8, 13 ], [ 3, 9, 14 ],
168 [ 4, 10, 15 ], [ 5, 6, 11 ] ],
169 tSubsetStructure := rec( t := 1, lambdas := [ 1 ] ),
170 isBinary := true, isSimple := true, blockSizes := [ 3 ],
171 blockNumbers := [ 5 ], r := 1,
172 autSubgroup := Group([ (1,5,4,3,2)(6,10,9,8,7)(11,15,14,13,12) ]) )
173 ],
174 [ rec( isBlockDesign := true, v := 15, blocks := [ [ 1, 2, 6 ], [ 3, 10, 13
175 ], [ 4, 11, 12 ], [ 5, 7, 15 ], [ 8, 9, 14 ] ],
176 tSubsetStructure := rec( t := 1, lambdas := [ 1 ] ),
177 isBinary := true, isSimple := true, blockSizes := [ 3 ],
178 blockNumbers := [ 5 ], r := 1,
179 autSubgroup := Group([ (1,2)(3,5)(7,10)(8,9)(11,12)(13,15),
180 (1,11,8)(2,12,9)(3,13,10)(4,14,6)(5,15,7) ]) ),
181 rec( isBlockDesign := true, v := 15,
182 blocks := [ [ 1, 8, 11 ], [ 2, 9, 12 ], [ 3, 10, 13 ],
183 [ 4, 6, 14 ], [ 5, 7, 15 ] ],
184 tSubsetStructure := rec( t := 1, lambdas := [ 1 ] ),
185 isBinary := true, isSimple := true, blockSizes := [ 3 ],
186 blockNumbers := [ 5 ], r := 1,
187 autSubgroup := Group([ (1,2)(3,5)(7,10)(8,9)(11,12)(13,15),
188 (1,3,4,2)(6,9,8,10)(11,13,14,12),
189 (1,3,5,2,4)(6,8,10,7,9)(11,13,15,12,14),
190 (1,11,8)(2,12,9)(3,13,10)(4,14,6)(5,15,7) ]) ) ] ]
191 gap&gt; List(parclasses,Length);
192 [ 1, 1, 2 ]
193 gap&gt; List(parclasses,L-&gt;List(L,parclass-&gt;Size(parclass.autSubgroup)));
194 [ [ 360 ], [ 5 ], [ 6, 60 ] ]
195 </pre>
196 <p>
197 [<a href = "chapters.htm">Up</a>] [<a href ="CHAP006.htm">Previous</a>] [<a href ="CHAP008.htm">Next</a>] [<a href = "theindex.htm">Index</a>]
198 <P>
199 <address>design manual<br>March 2019
200 </address></body></html>
0 <html><head><title>[design] 8 Classifying semi-Latin squares</title></head>
1 <body text="#000000" bgcolor="#ffffff">
2 [<a href = "chapters.htm">Up</a>] [<a href ="CHAP007.htm">Previous</a>] [<a href ="CHAP009.htm">Next</a>] [<a href = "theindex.htm">Index</a>]
3 <h1>8 Classifying semi-Latin squares</h1><p>
4 <P>
5 <H3>Sections</H3>
6 <oL>
7 <li> <A HREF="CHAP008.htm#SECT001">Semi-Latin squares and SOMAs</a>
8 <li> <A HREF="CHAP008.htm#SECT002">The function SemiLatinSquareDuals</a>
9 </ol><p>
10 <p>
11 This chapter describes the function <code>SemiLatinSquareDuals</code> which can
12 classify semi-Latin squares with certain given properties, and return
13 a list of their duals as block designs.
14 <p>
15 <p>
16 <h2><a name="SECT001">8.1 Semi-Latin squares and SOMAs</a></h2>
17 <p><p>
18 Let <i>n</i> and <i>k</i> be positive integers. An (<i>n</i>&times;<i>n</i>)/<i>k</i> <strong>semi-Latin
19 square</strong>
20 <a name = "I0"></a>
21
22 is an <i>n</i> by <i>n</i> array <i>A</i>, whose
23 entries are <i>k</i>-subsets of a <i>kn</i>-set <i>X</i> (the <strong>symbol-set</strong>), such that
24 each element of <i>X</i> occurs exactly once in each row and exactly once in
25 each column of <i>A</i>. (Thus an (<i>n</i>&times;<i>n</i>)/1 semi-Latin square is the same
26 thing as a Latin square of order <i>n</i>.) For extensive useful information on
27 semi-Latin squares, see <a href="http://www.maths.qmul.ac.uk/~rab/sls.html">http://www.maths.qmul.ac.uk/~rab/sls.html</a>.
28 <p>
29 A SOMA(<i>k</i>,<i>n</i>)
30 <a name = "I1"></a>
31
32 is an (<i>n</i>&times;<i>n</i>)/<i>k</i> semi-Latin square <i>A</i>,
33 with <i>n</i> &#8805; 2, in which no 2-subset of the symbol-set is contained in
34 more than one entry of <i>A</i>. For extensive useful information on SOMAs,
35 see <a href="http://www.maths.qmul.ac.uk/~lsoicher/soma/">http://www.maths.qmul.ac.uk/~lsoicher/soma/</a>.
36 <p>
37 Let <i>A</i> and <i>B</i> be (<i>n</i>&times;<i>n</i>)/<i>k</i> semi-Latin squares. We say that
38 <i>B</i> is <strong>(weakly) isomorphic</strong> to <i>A</i> if <i>B</i> can be obtained from <i>A</i>
39 by applying one or more of: a row permutation; a column permutation;
40 transposing; renaming the symbols. If transposing is not allowed then we
41 get the concept of strong isomorphism. More formally, <i>B</i> is <strong>strongly
42 isomorphic</strong> to <i>A</i> if <i>B</i> can be obtained from <i>A</i> by applying one or
43 more of: a row permutation; a column permutation; renaming the symbols.
44 <p>
45 Let <i>A</i> be an (<i>n</i>&times;<i>n</i>)/<i>k</i> semi-Latin square. Then the dual of <i>A</i>
46 can be represented as a binary block design as follows. The point-set of
47 <i>D</i> is taken to be the Cartesian square of {1,&#8230;,<i>n</i>}, with [<i>x</i>,<i>y</i>]
48 representing the [<i>x</i>,<i>y</i>]-entry of <i>A</i>. The blocks of <i>D</i> are in one-to-one
49 correspondance with the symbols of <i>A</i>, with the <i>i</i>-th block of <i>D</i>
50 consisting of the ordered pairs [<i>x</i>,<i>y</i>] such that the <i>i</i>-th symbol of
51 <i>A</i> is contained in the [<i>x</i>,<i>y</i>]-entry of <i>A</i>. Given <i>D</i>, the semi-Latin
52 square <i>A</i> can be recovered, up to the naming of its symbols.
53 <p>
54 <p>
55 <h2><a name="SECT002">8.2 The function SemiLatinSquareDuals</a></h2>
56 <p><p>
57 <a name = "SSEC002.1"></a>
58 <li><code>SemiLatinSquareDuals( </code><var>n</var><code>, </code><var>k</var><code> )</code>
59 <li><code>SemiLatinSquareDuals( </code><var>n</var><code>, </code><var>k</var><code>, </code><var>maxmult</var><code> )</code>
60 <li><code>SemiLatinSquareDuals( </code><var>n</var><code>, </code><var>k</var><code>, </code><var>maxmult</var><code>, </code><var>blockintsizes</var><code> )</code>
61 <li><code>SemiLatinSquareDuals( </code><var>n</var><code>, </code><var>k</var><code>, </code><var>maxmult</var><code>, </code><var>blockintsizes</var><code>, </code><var>isolevel</var><code> )</code>
62 <p>
63 Let <var>n</var> and <var>k</var> be positive integers. Then this function (which makes
64 heavy use of the function <code>BlockDesigns</code>) returns a list <var>DL</var> of block
65 designs which are the duals of the (<i>n</i> &times;<i>n</i> )/<i>k</i> semi-Latin
66 squares whose properties are specified by the given parameters, described
67 below. In practice, depending on the specified properties, this function
68 can be useful for <var>n</var> up to about 6 or 7.
69 <p>
70 The parameter <var>maxmult</var>, if given, must be a positive integer or
71 the string <code>"default"</code>. If it is a positive integer, then <var>maxmult</var>
72 specifies an upper bound on the multiplicity of each block in each
73 semi-Latin square dual in <var>DL</var>. The default value for <var>maxmult</var> (if
74 omitted or if given as <code>"default"</code>) is <var>k</var>, which poses no constraint
75 on the block multiplicities.
76 <p>
77 The parameter <var>blockintsizes</var>, if given, must be a set of non-negative
78 integers or the string <code>"default"</code>. If it is given as a set, then
79 <var>blockintsizes</var> specifies, for each semi-Latin square dual in <var>DL</var>,
80 the set of possible sizes for the intersection of a block <i>B</i> with a
81 different block (but possibly a repeat of <i>B</i>). The default value for
82 <var>blockintsizes</var> (if omitted or if given as <code>"default"</code>) is <code>[0..</code><var>n</var><code>]</code>,
83 which poses no constraint on the block intersection sizes. Note that
84 block intersection sizes in the dual of a semi-Latin square correspond
85 to concurrencies of points in the semi-Latin square itself. Also note
86 that if <i>n</i> &#8805; 2 and <var>blockintsizes</var> is specified to be <code>[0,1]</code> then
87 the (<i>n</i>&times;<i>n</i>)/<i>k</i> semi-Latin squares being considered are SOMA(<i>k</i>,<i>n</i>)s.
88 <p>
89 The parameter <var>isolevel</var>, if given, must be 0, 1, 2, 3, 4 or the string
90 <code>"default"</code> (the default value is 2). The value 0 specifies that <var>DL</var>
91 will contain at most one (semi-Latin square dual given as a) block design,
92 and will contain one such block design if and only if a semi-Latin square
93 with the required properties exists. The value&nbsp;1 specifies that <var>DL</var>
94 will contain a list of duals representing all weak isomorphism classes
95 of semi-Latin squares with the required properties (possibly with some
96 classes represented more than once) and the value 2 specifies that <var>DL</var>
97 will contain precisely one dual semi-Latin square representative for
98 each weak isomorphism class of semi-Latin squares with the required
99 properties. The values 3 and 4 for <var>isolevel</var> play the roles of 1 and 2,
100 respectively, but with weak isomorphism replaced by strong isomorphism.
101 Thus, <i>isolevel</i> =3 specifies that <var>DL</var> will contain a list of duals
102 representing all strong isomorphism classes of semi-Latin squares with
103 the required properties (possibly with some classes represented more than
104 once) and <i>isolevel</i> =4 specifies that <var>DL</var> will contain precisely one
105 dual semi-Latin square representative for each strong isomorphism class
106 of semi-Latin squares with the required properties.
107 <p>
108 For example, we determine the numbers of weak and strong isomorphism
109 classes of (4&times;4)/<i>k</i> semi-Latin squares for <i>k</i>=1,&#8230;,6. (These
110 numbers disagree with P.&nbsp;E.&nbsp;Chigbu's classification for the cases <i>k</i>=3,4
111 <a href="biblio.htm#BaCh"><cite>BaCh</cite></a>.)
112 <p>
113 <pre>
114 gap&gt; List([1..6],k-&gt;Length(SemiLatinSquareDuals(4,k))); # weak
115 [ 2, 10, 40, 164, 621, 2298 ]
116 gap&gt; List([1..6],k-&gt;Length(SemiLatinSquareDuals(4,k,"default","default",4))); # strong
117 [ 2, 11, 46, 201, 829, 3343 ]
118 </pre>
119 <p>
120 Next, we determine one SOMA(3,6).
121 <p>
122 <pre>
123 gap&gt; SemiLatinSquareDuals(6,3,"default",[0,1],0);
124 [ rec( isBlockDesign := true, v := 36,
125 blocks := [ [ 1, 8, 15, 22, 29, 36 ], [ 1, 9, 16, 23, 30, 32 ],
126 [ 1, 12, 14, 21, 28, 35 ], [ 2, 9, 17, 24, 25, 34 ],
127 [ 2, 11, 18, 22, 27, 31 ], [ 2, 12, 16, 19, 29, 33 ],
128 [ 3, 10, 14, 24, 29, 31 ], [ 3, 11, 16, 20, 25, 36 ],
129 [ 3, 12, 13, 23, 26, 34 ], [ 4, 7, 14, 23, 27, 36 ],
130 [ 4, 8, 17, 21, 30, 31 ], [ 4, 9, 18, 19, 26, 35 ],
131 [ 5, 7, 15, 20, 30, 34 ], [ 5, 8, 13, 24, 28, 33 ],
132 [ 5, 10, 18, 21, 25, 32 ], [ 6, 7, 17, 22, 26, 33 ],
133 [ 6, 10, 13, 20, 27, 35 ], [ 6, 11, 15, 19, 28, 32 ] ],
134 tSubsetStructure := rec( t := 1, lambdas := [ 3 ] ), isBinary := true,
135 isSimple := true, blockSizes := [ 6 ], blockNumbers := [ 18 ], r := 3,
136 autSubgroup := &lt;permutation group of size 72 with 3 generators&gt;,
137 pointNames := [ [ 1, 1 ], [ 1, 2 ], [ 1, 3 ], [ 1, 4 ], [ 1, 5 ],
138 [ 1, 6 ], [ 2, 1 ], [ 2, 2 ], [ 2, 3 ], [ 2, 4 ], [ 2, 5 ],
139 [ 2, 6 ], [ 3, 1 ], [ 3, 2 ], [ 3, 3 ], [ 3, 4 ], [ 3, 5 ],
140 [ 3, 6 ], [ 4, 1 ], [ 4, 2 ], [ 4, 3 ], [ 4, 4 ], [ 4, 5 ],
141 [ 4, 6 ], [ 5, 1 ], [ 5, 2 ], [ 5, 3 ], [ 5, 4 ], [ 5, 5 ],
142 [ 5, 6 ], [ 6, 1 ], [ 6, 2 ], [ 6, 3 ], [ 6, 4 ], [ 6, 5 ],
143 [ 6, 6 ] ] ) ]
144 </pre>
145 <p>
146 [<a href = "chapters.htm">Up</a>] [<a href ="CHAP007.htm">Previous</a>] [<a href ="CHAP009.htm">Next</a>] [<a href = "theindex.htm">Index</a>]
147 <P>
148 <address>design manual<br>March 2019
149 </address></body></html>
0 <html><head><title>[design] 9 Partitioning block designs</title></head>
1 <body text="#000000" bgcolor="#ffffff">
2 [<a href = "chapters.htm">Up</a>] [<a href ="CHAP008.htm">Previous</a>] [<a href ="CHAP010.htm">Next</a>] [<a href = "theindex.htm">Index</a>]
3 <h1>9 Partitioning block designs</h1><p>
4 <P>
5 <H3>Sections</H3>
6 <oL>
7 <li> <A HREF="CHAP009.htm#SECT001">Partitioning a block design into block designs</a>
8 <li> <A HREF="CHAP009.htm#SECT002">Computing resolutions</a>
9 </ol><p>
10 <p>
11 This chapter describes the function <code>PartitionsIntoBlockDesigns</code> which can
12 classify partitions of (the block multiset of) a given block design into
13 (the block multisets of) block designs having user-specified properties.
14 We also describe <code>MakeResolutionsComponent</code> which is useful for the
15 special case when the desired partitions are resolutions.
16 <p>
17 <p>
18 <h2><a name="SECT001">9.1 Partitioning a block design into block designs</a></h2>
19 <p><p>
20 <a name = "SSEC001.1"></a>
21 <li><code>PartitionsIntoBlockDesigns( </code><var>param</var><code> )</code>
22 <p>
23 Let <var>D</var> equal <code></code><var>param</var><code>.blockDesign</code>. This function returns a list <var>PL</var>
24 of partitions of (the block multiset of) <var>D</var>. Each element of <var>PL</var> is a
25 record with one component <code>partition</code>, and, in most cases, a component
26 <code>autGroup</code>. The <code>partition</code> component gives a list <var>P</var> of block designs,
27 all with the same point set as <var>D</var>, such that the list of (the block
28 multisets of) the designs in <code></code><var>P</var><code>.partition</code> forms a partition of (the
29 block multiset of) <var>D</var>. The component <code></code><var>P</var><code>.autGroup</code>, if bound, gives
30 the automorphism group of the partition, which is the stabilizer of the
31 partition in the automorphism group of <var>D</var>. The precise interpretation
32 of the output depends on <var>param</var>, described below.
33 <p>
34 The required components of <var>param</var> are <code>blockDesign</code>, <code>v</code>, <code>blockSizes</code>,
35 and <code>tSubsetStructure</code>.
36 <p>
37 <code></code><var>param</var><code>.blockDesign</code> is the block design to be partitioned.
38 <p>
39 <code></code><var>param</var><code>.v</code> must be a positive integer, and specifies that for each block
40 design in each partition in <var>PL</var>, the points are 1,...,<code></code><var>param</var><code>.v</code>.
41 It is required that <code></code><var>param</var><code>.v</code> be equal to <code></code><var>param</var><code>.blockDesign.v</code>.
42 <p>
43 <code></code><var>param</var><code>.blockSizes</code> must be a set of positive integers, and specifies
44 that the block sizes of each block design in each partition in <var>PL</var>
45 will be contained in <code></code><var>param</var><code>.blockSizes</code>.
46 <p>
47 <code></code><var>param</var><code>.tSubsetStructure</code> must be a record, having
48 components <code>t</code>, <code>partition</code>, and <code>lambdas</code>. Let <var>t</var> be
49 equal to <code></code><var>param</var><code>.tSubsetStructure.t</code>, <var>partition</var> be
50 <code></code><var>param</var><code>.tSubsetStructure.partition</code>, and <var>lambdas</var> be
51 <code></code><var>param</var><code>.tSubsetStructure.lambdas</code>. Then <var>t</var> must be a non-negative
52 integer, <var>partition</var> must be a list of non-empty sets of <var>t</var>-subsets of
53 <code>[1..</code><var>param</var><code>.v]</code>, forming an ordered partition of all the <var>t</var>-subsets of
54 <code>[1..</code><var>param</var><code>.v]</code>, and <var>lambdas</var> must be a list of distinct non-negative
55 integers (not all zero) of the same length as <var>partition</var>. This specifies
56 that for each design in each partition in <var>PL</var>, each <var>t</var>-subset in
57 <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
58 over all blocks of the design. For binary designs, this means that each
59 <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>
60 blocks. The <code>partition</code> component is optional if <var>lambdas</var> has length 1.
61 We require that <var>t</var> is less than or equal to each element of
62 <code></code><var>param</var><code>.blockSizes</code>, and that each block of <code></code><var>param</var><code>.blockDesign</code>
63 contains at least <var>t</var> distinct elements.
64 <p>
65 The optional components of <var>param</var> are used to specify additional
66 constraints on the partitions in <var>PL</var>, or to change default parameter
67 values. These optional components are <code>r</code>, <code>b</code>, <code>blockNumbers</code>,
68 <code>blockIntersectionNumbers</code>, <code>blockMaxMultiplicities</code>, <code>isoGroup</code>,
69 <code>requiredAutSubgroup</code>, and <code>isoLevel</code>. Note that the last three of these
70 optional components refer to the partitions and not to the block designs
71 in a partition.
72 <p>
73 <code></code><var>param</var><code>.r</code> must be a positive integer, and specifies that in each design
74 in each partition in <var>PL</var>, each point must occur exactly <code></code><var>param</var><code>.r</code>
75 times in the list of blocks.
76 <p>
77 <code></code><var>param</var><code>.b</code> must be a positive integer, and specifies that each design
78 in each partition in <var>PL</var> has exactly <code></code><var>param</var><code>.b</code> blocks.
79 <p>
80 <code></code><var>param</var><code>.blockNumbers</code> must be a list of non-negative integers, the <var>i</var>-th
81 element of which specifies the number of blocks whose size is equal to
82 <code></code><var>param</var><code>.blockSizes[</code><var>i</var><code>]</code> (in each design in each partition in <var>PL</var>). The
83 length of <code></code><var>param</var><code>.blockNumbers</code> must equal that of <code></code><var>param</var><code>.blockSizes</code>,
84 and at least one entry of <code></code><var>param</var><code>.blockNumbers</code> must be positive.
85 <p>
86 <code></code><var>param</var><code>.blockIntersectionNumbers</code> must be a symmetric matrix of sets
87 of non-negative integers, the <code>[</code><var>i</var><code>][</code><var>j</var><code>]</code>-element of which specifies
88 the set of possible sizes for the intersection of a block <i>B</i> of size
89 <code></code><var>param</var><code>.blockSizes[</code><var>i</var><code>]</code> with a different block (but possibly a repeat of
90 <i>B</i>) of size <code></code><var>param</var><code>.blockSizes[</code><var>j</var><code>]</code> (in each design in each partition
91 in <var>PL</var>). In the case of multisets, we take the multiplicity of an
92 element in the intersection to be the minimum of its multiplicities in
93 the multisets being intersected; for example, the intersection of
94 <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.
95 The dimension of <code></code><var>param</var><code>.blockIntersectionNumbers</code> must equal the length
96 of <code></code><var>param</var><code>.blockSizes</code>.
97 <p>
98 <code></code><var>param</var><code>.blockMaxMultiplicities</code> must be a list of non-negative
99 integers, the <var>i</var>-th element of which specifies an upper bound on the
100 multiplicity of a block whose size is equal to <code></code><var>param</var><code>.blockSizes[</code><var>i</var><code>]</code>
101 (for each design in each partition in <var>PL</var>). The length of
102 <code></code><var>param</var><code>.blockMaxMultiplicities</code> must equal that of <code></code><var>param</var><code>.blockSizes</code>.
103 <p>
104 <code></code><var>param</var><code>.isoGroup</code> must be a subgroup of the automorphism group of
105 <code></code><var>param</var><code>.blockDesign</code>. We consider two elements of <var>PL</var> to be
106 <strong>equivalent</strong> if they are in the same orbit of <code></code><var>param</var><code>.isoGroup</code>
107 (in its action on multisets of block multisets). The default for
108 <code></code><var>param</var><code>.isoGroup</code> is the automorphism group of <code></code><var>param</var><code>.blockDesign</code>.
109 <p>
110 <code></code><var>param</var><code>.requiredAutSubgroup</code> must be a subgroup of <code></code><var>param</var><code>.isoGroup</code>,
111 and specifies that each partition in <var>PL</var> must be invariant under
112 <code></code><var>param</var><code>.requiredAutSubgroup</code> (in its action on multisets of block
113 multisets). The default for <code></code><var>param</var><code>.requiredAutSubgroup</code> is the trivial
114 permutation group.
115 <p>
116 <code></code><var>param</var><code>.isoLevel</code> must be 0, 1, or 2 (the default is 2). The value 0
117 specifies that <var>PL</var> will contain at most one partition, and will contain
118 one partition with the required properties if and only if such a partition
119 exists; the value 1 specifies that <var>PL</var> will contain (perhaps properly)
120 a list of <code></code><var>param</var><code>.isoGroup</code> orbit-representatives of the required
121 partitions; the value 2 specifies that <var>PL</var> will consist precisely of
122 <code></code><var>param</var><code>.isoGroup</code>-orbit representatives of the required partitions.
123 <p>
124 For an example, we first classify up to isomorphism the 2-(15,3,1)
125 designs invariant under a semi-regular group of automorphisms of order 5,
126 and then use <code>PartitionsIntoBlockDesigns</code> to classify all the resolutions
127 of these designs, up to the actions of the respective automorphism groups
128 of the designs.
129 <p>
130 <pre>
131 gap&gt; DL:=BlockDesigns(rec(
132 &gt; v:=15,blockSizes:=[3],
133 &gt; tSubsetStructure:=rec(t:=2,lambdas:=[1]),
134 &gt; requiredAutSubgroup:=
135 &gt; Group((1,2,3,4,5)(6,7,8,9,10)(11,12,13,14,15))));;
136 gap&gt; List(DL,D-&gt;Size(AutGroupBlockDesign(D)));
137 [ 20160, 5, 60 ]
138 gap&gt; PL:=PartitionsIntoBlockDesigns(rec(
139 &gt; blockDesign:=DL[1],
140 &gt; v:=15,blockSizes:=[3],
141 &gt; tSubsetStructure:=rec(t:=1,lambdas:=[1])));
142 [ rec(
143 partition := [ rec( isBlockDesign := true, v := 15, blocks := [ [ 1, 2,
144 6 ], [ 3, 4, 8 ], [ 5, 7, 14 ], [ 9, 12, 15 ],
145 [ 10, 11, 13 ] ] ),
146 rec( isBlockDesign := true, v := 15, blocks :=
147 [ [ 1, 3, 11 ], [ 2, 4, 12 ], [ 5, 6, 8 ], [ 7, 13, 15 ],
148 [ 9, 10, 14 ] ] ),
149 rec( isBlockDesign := true, v := 15, blocks :=
150 [ [ 1, 4, 14 ], [ 2, 5, 15 ], [ 3, 10, 12 ], [ 6, 7, 11 ],
151 [ 8, 9, 13 ] ] ),
152 rec( isBlockDesign := true, v := 15, blocks :=
153 [ [ 1, 5, 10 ], [ 2, 9, 11 ], [ 3, 14, 15 ], [ 4, 6, 13 ],
154 [ 7, 8, 12 ] ] ),
155 rec( isBlockDesign := true, v := 15, blocks :=
156 [ [ 1, 7, 9 ], [ 2, 8, 10 ], [ 3, 5, 13 ], [ 4, 11, 15 ],
157 [ 6, 12, 14 ] ] ),
158 rec( isBlockDesign := true, v := 15, blocks :=
159 [ [ 1, 8, 15 ], [ 2, 13, 14 ], [ 3, 6, 9 ], [ 4, 7, 10 ],
160 [ 5, 11, 12 ] ] ),
161 rec( isBlockDesign := true, v := 15, blocks :=
162 [ [ 1, 12, 13 ], [ 2, 3, 7 ], [ 4, 5, 9 ], [ 6, 10, 15 ],
163 [ 8, 11, 14 ] ] ) ],
164 autGroup := Group([ (1,10)(2,11)(3,8)(6,13)(7,14)(12,15),
165 (1,13)(2,11)(3,14)(4,5)(6,10)(7,8),
166 (1,13,7)(2,11,5)(6,10,14)(9,12,15),
167 (2,11,5,15,4,9,12)(3,10,8,14,7,13,6) ]) ),
168 rec( partition := [ rec( isBlockDesign := true, v := 15,
169 blocks := [ [ 1, 2, 6 ], [ 3, 4, 8 ], [ 5, 7, 14 ],
170 [ 9, 12, 15 ], [ 10, 11, 13 ] ] ),
171 rec( isBlockDesign := true, v := 15,
172 blocks := [ [ 1, 3, 11 ], [ 2, 4, 12 ], [ 5, 6, 8 ],
173 [ 7, 13, 15 ], [ 9, 10, 14 ] ] ),
174 rec( isBlockDesign := true, v := 15,
175 blocks := [ [ 1, 4, 14 ], [ 2, 5, 15 ], [ 3, 10, 12 ],
176 [ 6, 7, 11 ], [ 8, 9, 13 ] ] ),
177 rec( isBlockDesign := true, v := 15,
178 blocks := [ [ 1, 5, 10 ], [ 2, 13, 14 ], [ 3, 6, 9 ],
179 [ 4, 11, 15 ], [ 7, 8, 12 ] ] ),
180 rec( isBlockDesign := true, v := 15,
181 blocks := [ [ 1, 7, 9 ], [ 2, 8, 10 ], [ 3, 14, 15 ],
182 [ 4, 6, 13 ], [ 5, 11, 12 ] ] ),
183 rec( isBlockDesign := true, v := 15,
184 blocks := [ [ 1, 8, 15 ], [ 2, 9, 11 ], [ 3, 5, 13 ],
185 [ 4, 7, 10 ], [ 6, 12, 14 ] ] ),
186 rec( isBlockDesign := true, v := 15,
187 blocks := [ [ 1, 12, 13 ], [ 2, 3, 7 ], [ 4, 5, 9 ],
188 [ 6, 10, 15 ], [ 8, 11, 14 ] ] ) ],
189 autGroup := Group([ (1,15)(2,9)(3,4)(5,7)(6,12)(10,13),
190 (1,12)(2,9)(3,5)(4,7)(6,15)(8,14),
191 (1,14)(2,5)(3,8)(6,7)(9,12)(10,13),
192 (1,8,10)(2,5,15)(3,14,13)(4,9,12) ]) ) ]
193 gap&gt; List(PL,resolution-&gt;Size(resolution.autGroup));
194 [ 168, 168 ]
195 gap&gt; PL:=PartitionsIntoBlockDesigns(rec(
196 &gt; blockDesign:=DL[2],
197 &gt; v:=15,blockSizes:=[3],
198 &gt; tSubsetStructure:=rec(t:=1,lambdas:=[1])));
199 [ ]
200 gap&gt; PL:=PartitionsIntoBlockDesigns(rec(
201 &gt; blockDesign:=DL[3],
202 &gt; v:=15,blockSizes:=[3],
203 &gt; tSubsetStructure:=rec(t:=1,lambdas:=[1])));
204 [ ]
205 </pre>
206 <p>
207 <p>
208 <h2><a name="SECT002">9.2 Computing resolutions</a></h2>
209 <p><p>
210 <a name = "SSEC002.1"></a>
211 <li><code>MakeResolutionsComponent( </code><var>D</var><code> )</code>
212 <li><code>MakeResolutionsComponent( </code><var>D</var><code>, </code><var>isolevel</var><code> )</code>
213 <p>
214 This function computes resolutions of the block design <var>D</var>, and stores
215 the result in <code></code><var>D</var><code>.resolutions</code>. If <code></code><var>D</var><code>.resolutions</code> already exists
216 then it is ignored and overwritten. This function returns no value.
217 <p>
218 A <strong>resolution</strong> of a block design <i>D</i> is a partition of the blocks into
219 subsets, each of which forms a partition of the point set. We say that
220 two resolutions <i>R</i> and <i>S</i> of <i>D</i> are <strong>isomorphic</strong> if there is an element
221 <i>g</i> in the automorphism group of <i>D</i>, such that the <i>g</i>-image of <i>R</i>
222 is <i>S</i>. (Isomorphism defines an equivalence relation on the set of
223 resolutions of <i>D</i>.)
224 <p>
225 The parameter <var>isolevel</var> (default 2) determines how many resolutions are
226 computed: <var>isolevel</var>=2 means to classify up to isomorphism, <var>isolevel</var>=1
227 means to determine at least one representative from each isomorphism
228 class, and <var>isolevel</var>=0 means to determine whether or not <var>D</var> has
229 a resolution.
230 <p>
231 When this function is finished, <code></code><var>D</var><code>.resolutions</code> will have the following
232 three components:
233 <p>
234 <code>list</code>: a list of distinct partitions into block designs forming resolutions
235 of <var>D</var>;
236 <p>
237 <code>pairwiseNonisomorphic</code>: <code>true</code>, <code>false</code> or <code>"unknown"</code>, depending on the
238 resolutions in <code>list</code> and what is known. If <var>isolevel</var>=0 or <var>isolevel</var>=2
239 then this component will be <code>true</code>;
240 <p>
241 <code>allClassesRepresented</code>: <code>true</code>, <code>false</code> or <code>"unknown"</code>, depending on the
242 resolutions in <code>list</code> and what is known. If <var>isolevel</var>=1 or <var>isolevel</var>=2
243 then this component will be <code>true</code>.
244 <p>
245 Note that <code></code><var>D</var><code>.resolutions</code> may be changed to contain more information
246 as a side-effect of other functions in the DESIGN package.
247 <p>
248 <pre>
249 gap&gt; L:=BlockDesigns(rec(v:=9,blockSizes:=[3],
250 &gt; tSubsetStructure:=rec(t:=2,lambdas:=[1])));;
251 gap&gt; D:=L[1];;
252 gap&gt; MakeResolutionsComponent(D);
253 gap&gt; D;
254 rec( isBlockDesign := true, v := 9,
255 blocks := [ [ 1, 2, 3 ], [ 1, 4, 5 ], [ 1, 6, 7 ], [ 1, 8, 9 ],
256 [ 2, 4, 6 ], [ 2, 5, 8 ], [ 2, 7, 9 ], [ 3, 4, 9 ], [ 3, 5, 7 ],
257 [ 3, 6, 8 ], [ 4, 7, 8 ], [ 5, 6, 9 ] ],
258 tSubsetStructure := rec( t := 2, lambdas := [ 1 ] ), isBinary := true,
259 isSimple := true, blockSizes := [ 3 ], blockNumbers := [ 12 ], r := 4,
260 autGroup := Group([ (1,2)(5,6)(7,8), (1,3,2)(4,8,7)(5,6,9), (1,2)(4,7)(5,9),
261 (1,2)(4,9)(5,7)(6,8), (1,4,8,6,9,2)(3,5,7) ]),
262 resolutions := rec( list := [ rec( partition :=
263 [ rec( isBlockDesign := true, v := 9,
264 blocks := [ [ 1, 2, 3 ], [ 4, 7, 8 ], [ 5, 6, 9 ] ] ),
265 rec( isBlockDesign := true, v := 9,
266 blocks := [ [ 1, 4, 5 ], [ 2, 7, 9 ], [ 3, 6, 8 ] ] ),
267 rec( isBlockDesign := true, v := 9,
268 blocks := [ [ 1, 6, 7 ], [ 2, 5, 8 ], [ 3, 4, 9 ] ] ),
269 rec( isBlockDesign := true, v := 9,
270 blocks := [ [ 1, 8, 9 ], [ 2, 4, 6 ], [ 3, 5, 7 ] ] ) ],
271 autGroup := Group(
272 [ (2,3)(4,5)(6,7)(8,9), (1,3,2)(4,8,7)(5,6,9),
273 (1,8,9)(2,4,6)(3,7,5), (1,2)(5,6)(7,8), (1,2)(4,7)(5,9),
274 (1,2,9,6,8,4)(3,7,5) ]) ) ], pairwiseNonisomorphic := true,
275 allClassesRepresented := true ) )
276 </pre>
277 <p>
278 [<a href = "chapters.htm">Up</a>] [<a href ="CHAP008.htm">Previous</a>] [<a href ="CHAP010.htm">Next</a>] [<a href = "theindex.htm">Index</a>]
279 <P>
280 <address>design manual<br>March 2019
281 </address></body></html>
0 <html><head><title>[design] 10 XML I/O of block designs</title></head>
1 <body text="#000000" bgcolor="#ffffff">
2 [<a href = "chapters.htm">Up</a>] [<a href ="CHAP009.htm">Previous</a>] [<a href = "theindex.htm">Index</a>]
3 <h1>10 XML I/O of block designs</h1><p>
4 <P>
5 <H3>Sections</H3>
6 <oL>
7 <li> <A HREF="CHAP010.htm#SECT001">Writing lists of block designs and their properties in XML-format</a>
8 <li> <A HREF="CHAP010.htm#SECT002">Reading lists of block designs in XML-format</a>
9 </ol><p>
10 <p>
11 This chapter describes functions to write and read lists of binary block
12 designs in the <a href="http://designtheory.org">http://designtheory.org</a> external representation
13 XML-format (see <a href="biblio.htm#Extrep"><cite>Extrep</cite></a>).
14 <p>
15 <p>
16 <h2><a name="SECT001">10.1 Writing lists of block designs and their properties in XML-format</a></h2>
17 <p><p>
18 <a name = "SSEC001.1"></a>
19 <li><code>BlockDesignsToXMLFile( </code><var>filename</var><code>, </code><var>designs</var><code> )</code>
20 <li><code>BlockDesignsToXMLFile( </code><var>filename</var><code>, </code><var>designs</var><code>, </code><var>include</var><code> )</code>
21 <li><code>BlockDesignsToXMLFile( </code><var>filename</var><code>, </code><var>designs</var><code>, </code><var>include</var><code>, </code><var>list_id</var><code> )</code>
22 <p>
23 This function writes a list of (assumed distinct) binary block designs
24 (given in DESIGN package format) to a file in external representation
25 XML-format (version&nbsp;2.0).
26 <p>
27 The parameter <var>filename</var> is a string giving the name of the file, and
28 <var>designs</var> is a record whose component <code>list</code> contains the list of block
29 designs (<var>designs</var> can also be a list, in which case it is replaced by
30 <code>rec(list:=</code><var>designs</var><code>)</code>).
31 <p>
32 The record <var>designs</var> should have the following components:
33 <p>
34 <code>list</code>: the list of distinct binary block designs in DESIGN package
35 format;
36 <p>
37 <code>pairwiseNonisomorphic</code> (optional): should be <code>true</code> or <code>false</code> or the
38 string <code>"unknown"</code>, specifying the pairwise-nonisomorphism status of the
39 designs in <code></code><var>designs</var><code>.list</code>;
40 <p>
41 <code>infoXML</code> (optional): should contain a string in XML format for the
42 <code></code><var>info</var><code></code> element of the <code></code><var>list_of_designs</var><code></code> which is written.
43 <p>
44 The combinatorial and group-theoretical properties output for each
45 design depend on <var>include</var> (default: empty&nbsp;list), which should
46 be a list containing zero or more of the strings <code>"indicators"</code>,
47 <code>"resolvable"</code>, <code>"combinatorial_properties"</code>, <code>"automorphism_group"</code>, and
48 <code>"resolutions"</code>. A shorthand for the list containing all these strings
49 is <code>"all"</code>. The strings <code>"indicators"</code>, <code>"combinatorial_properties"</code>,
50 <code>"automorphism_group"</code>, and <code>"resolutions"</code> are used to specify that
51 those subtrees of the external representation of each design are to
52 be expanded and written out. In the case of <code>"resolutions"</code> being in
53 <var>include</var>, <strong>all</strong> resolutions up to isomorphism will be determined and
54 written out. The string <code>"resolvable"</code> is used to specify that the
55 <code>resolvable</code> indicator must be set (usually this is not forced), if
56 the <code>indicators</code> subtree is written out, and also that if a design is
57 resolvable but <code>"resolutions"</code> is not in <var>include</var>, then one and only
58 one resolution should be written out in the <code>resolutions</code> subtree.
59 <p>
60 If <var>list_id</var> is given then the id's of the output designs will be
61 <code></code><var>list_id</var><code>-0</code>, <code></code><var>list_id</var><code>-1</code>, <code></code><var>list_id</var><code>-2</code>, ...
62 <p>
63 <pre>
64 gap&gt; D:=[ BlockDesign(3, [[1,2],[1,3]]),
65 &gt; BlockDesign(3, [[1,2],[1,2],[2,3]]) ];;
66 gap&gt; designs:=rec(list:=D, pairwiseNonisomorphic:=true);;
67 gap&gt; BlockDesignsToXMLFile("example.xml",designs,[],"example");
68 </pre>
69 <p>
70 <p>
71 <h2><a name="SECT002">10.2 Reading lists of block designs in XML-format</a></h2>
72 <p><p>
73 <a name = "SSEC002.1"></a>
74 <li><code>BlockDesignsFromXMLFile( </code><var>filename</var><code> )</code>
75 <p>
76 This function reads a file with name <var>filename</var>, containing a list of
77 distinct binary block designs in external representation XML-format,
78 and returns a record <var>designs</var> in DESIGN package format containing
79 the essential information in this file.
80 <p>
81 The record <var>designs</var> contains the following components:
82 <p>
83 <code>list</code>: a list of block designs in DESIGN package format of
84 the list of block designs in the file (certain elements such as
85 <code></code><var>statistical_properties</var><code></code> are stored verbatim as strings; certain other
86 elements are not stored since it is usually easier and more reliable to
87 recompute them -- this can be done when the block designs are written
88 out in XML format);
89 <p>
90 <code>pairwiseNonisomorphic</code> is set according to the attribute
91 <code>pairwise_nonisomorphic</code> of the XML element <code></code><var>list_of_designs</var><code></code>.
92 The component <code>pairwiseNonisomorphic</code> is <code>false</code> if this attribute
93 is <code>false</code>, <code>true</code> if this attribute is <code>true</code>, and <code>"unknown"</code> otherwise;
94 <p>
95 <code>infoXML</code> is bound iff the <code></code><var>info</var><code></code> element occurs as a child of the
96 XML <code></code><var>list_of_designs</var><code></code> element, and if bound, contains this <code></code><var>info</var><code></code>
97 element in a string.
98 <p>
99 <pre>
100 gap&gt; BlockDesignsFromXMLFile("example.xml");
101 rec(
102 infoXML := "&lt;info&gt;\n&lt;software&gt;\n[ DESIGN-1.7, GRAPE-4.8.2, GAPDoc-1.6.2, GAP\
103 -4.10.1 ]\n&lt;/software&gt;\n&lt;/info&gt;",
104 list :=
105 [
106 rec( blocks := [ [ 1, 2 ], [ 1, 3 ] ], id := "example-0",
107 isBinary := true, isBlockDesign := true, v := 3 ),
108 rec( blocks := [ [ 1, 2 ], [ 1, 2 ], [ 2, 3 ] ], id := "example-1",
109 isBinary := true, isBlockDesign := true, v := 3 ) ],
110 pairwiseNonisomorphic := true )
111 </pre>
112 <p>
113 [<a href = "chapters.htm">Up</a>] [<a href ="CHAP009.htm">Previous</a>] [<a href = "theindex.htm">Index</a>]
114 <P>
115 <address>design manual<br>March 2019
116 </address></body></html>
0 <html><head><title>design : a GAP 4 package - References</title></head>
1 <body text="#000000" bgcolor="#ffffff">
2 <h1><font face="Gill Sans,Helvetica,Arial">design</font> : a <font face="Gill Sans,Helvetica,Arial">GAP</font> 4 package - References</h1><dl>
3
4 <dt><a name="BaCh"><b>[BaCh]</b></a><dd>
5 R.&nbsp;A. Bailey and P.&nbsp;E. Chigbu.
6 <br> Enumeration of semi-latin squares.
7 <br> <em>Discrete Math.</em>, 167-168:73--84, 1997.
8
9 <dt><a name="BaCa"><b>[BaCa]</b></a><dd>
10 R.&nbsp;A. Bailey and P.&nbsp;J. Cameron.
11 <br> Combinatorics of optimal designs.
12 <br> In S.&nbsp;Huczynska, J.&nbsp;D. Mitchell, and C.&nbsp;M. Roney-Dougal, editors,
13 <em>Surveys in Combinatorics 2009</em>, volume 365 of <em>London Math. Soc.
14 Lecture Notes</em>, pages 19--73. Cambridge University Press, 2009.
15
16 <dt><a name="Dotw"><b>[Dotw]</b></a><dd>
17 R.&nbsp;A. Bailey, P.&nbsp;J. Cameron, P.&nbsp;Dobcs&aacute;nyi, J.&nbsp;P. Morgan, and L.&nbsp;H. Soicher.
18 <br> Designs on the web.
19 <br> <em>Discrete Math.</em>, 306:3014--3027, 2006.
20 <br> <a href="http://dx.doi.org/10.1016/j.disc.2004.10.027">http://dx.doi.org/10.1016/j.disc.2004.10.027</a>.
21
22 <dt><a name="BaRo"><b>[BaRo]</b></a><dd>
23 R.&nbsp;A. Bailey and G.&nbsp;Royle.
24 <br> Optimal semi-latin squares with side six and block size two.
25 <br> <em>Proc. Roy. Soc. London, Ser. A</em>, 453:1903--1914, 1997.
26
27 <dt><a name="Extrep"><b>[Extrep]</b></a><dd>
28 P.&nbsp;J. Cameron, P.&nbsp;Dobcs&aacute;nyi, J.&nbsp;P. Morgan, and L.&nbsp;H. Soicher.
29 <br> <em>The external representation of block designs, Version 2.0</em>,
30 2004.
31 <br> <a href="http://designtheory.org/library/extrep/">http://designtheory.org/library/extrep/</a>.
32
33 <dt><a name="CaSo"><b>[CaSo]</b></a><dd>
34 P.&nbsp;J. Cameron and L.&nbsp;H. Soicher.
35 <br> Block intersection polynomials.
36 <br> <em>Bull. London Math. Soc.</em>, 39:559--564, 2007.
37 <br> <a href="http://dx.doi.org/10.1112/blms/bdm034">http://dx.doi.org/10.1112/blms/bdm034</a>.
38
39 <dt><a name="JK07"><b>[JK07]</b></a><dd>
40 Tommi Juntilla and Petteri Kaski.
41 <br> Engineering an efficient canonical labeling tool for large and sparse
42 graphs.
43 <br> In David&nbsp;Applegate et&nbsp;al., editor, <em>Proceedings of the Ninth
44 Workshop on Algorithm Engineering and Experiments and the Fourth Workshop on
45 Analytic Algorithmics and Combinatorics</em>, pages 135--149. SIAM, 2007.
46 <br> bliss homepage: <a href="http://www.tcs.hut.fi/Software/bliss/">http://www.tcs.hut.fi/Software/bliss/</a>.
47
48 <dt><a name="Nau90"><b>[Nau90]</b></a><dd>
49 Brendan&nbsp;D. McKay.
50 <br> <em>nauty user's guide (version 1.5), Technical report
51 TR-CS-90-02</em>.
52 <br> Australian National University, Computer Science Department, 1990.
53 <br> nauty homepage: <a href="http://cs.anu.edu.au/people/bdm/nauty/">http://cs.anu.edu.au/people/bdm/nauty/</a>.
54
55 <dt><a name="MP14"><b>[MP14]</b></a><dd>
56 Brendan&nbsp;D. McKay and Adolfo Piperno.
57 <br> Practical graph isomorphism, ii.
58 <br> <em>J. Symbolic Comput.</em>, 60:94--112, 2014.
59
60 <dt><a name="McSo"><b>[McSo]</b></a><dd>
61 J.&nbsp;P. McSorley and L.&nbsp;H. Soicher.
62 <br> Constructing <i>t</i>-designs from <i>t</i>-wise balanced designs.
63 <br> <em>European J. Combinatorics</em>, 28:567--571, 2007.
64 <br> <a href="http://dx.doi.org/10.1016/j.ejc.2005.02.003">http://dx.doi.org/10.1016/j.ejc.2005.02.003</a>.
65
66 <dt><a name="Soi1"><b>[Soi1]</b></a><dd>
67 L.&nbsp;H. Soicher.
68 <br> More on block intersection polynomials and new applications to graphs
69 and block designs.
70 <br> <em>J. Comb. Theory, Ser. A</em>, 117:799--809, 2010.
71 <br> <a href="http://dx.doi.org/10.1016/j.jcta.2010.03.005">http://dx.doi.org/10.1016/j.jcta.2010.03.005</a>.
72
73 <dt><a name="Grape"><b>[Grape]</b></a><dd>
74 L.&nbsp;H. Soicher.
75 <br> <em>The GRAPE package for GAP, Version 4.8.2</em>, 2019.
76 <br> <a href="https://gap-packages.github.io/grape">https://gap-packages.github.io/grape</a>.
77
78 </dl><p>
79 [<a href="chapters.htm">Up</a>]<p>
80 <P>
81 <address>design manual<br>March 2019
82 </address></body></html>
0 <html><head><title>design : a GAP 4 package - Chapters</title></head>
1 <body text="#000000" bgcolor="#ffffff">
2 <h1><font face="Gill Sans,Helvetica,Arial">design</font> : a <font face="Gill Sans,Helvetica,Arial">GAP</font> 4 package - Chapters</h1>
3 <ul>
4 <li><a href="theindex.htm">Index</a>
5 </ul>
6 <ol>
7 <li><a href="CHAP001.htm">Design</a>
8 <li><a href="CHAP002.htm">Information from block design parameters</a>
9 <li><a href="CHAP003.htm">Constructing block designs</a>
10 <li><a href="CHAP004.htm">Determining basic properties of block designs</a>
11 <li><a href="CHAP005.htm">Matrices and efficiency measures for block designs</a>
12 <li><a href="CHAP006.htm">Automorphism groups and isomorphism testing for block designs</a>
13 <li><a href="CHAP007.htm">Classifying block designs</a>
14 <li><a href="CHAP008.htm">Classifying semi-Latin squares</a>
15 <li><a href="CHAP009.htm">Partitioning block designs</a>
16 <li><a href="CHAP010.htm">XML I/O of block designs</a>
17 </ol>
18 <ul>
19 <li><a href="biblio.htm">References</a>
20 <li><a href="theindex.htm">Index</a>
21 </ul><p>
22 <P>
23 <address>design manual<br>March 2019
24 </address></body></html>
0 <html><head><title>design : a GAP 4 package - Index A</title></head>
1 <body text="#000000" bgcolor="#ffffff">
2 <h1><font face="Gill Sans,Helvetica,Arial">design</font> : a <font face="Gill Sans,Helvetica,Arial">GAP</font> 4 package - Index A</h1>
3 <p>
4 <a href="theindex.htm">_</A>
5 <a href="indxA.htm">A</A>
6 <a href="indxB.htm">B</A>
7 <a href="indxC.htm">C</A>
8 <a href="indxD.htm">D</A>
9 <a href="indxE.htm">E</A>
10 <a href="indxF.htm">F</A>
11 <a href="indxI.htm">I</A>
12 <a href="indxL.htm">L</A>
13 <a href="indxM.htm">M</A>
14 <a href="indxN.htm">N</A>
15 <a href="indxP.htm">P</A>
16 <a href="indxR.htm">R</A>
17 <a href="indxS.htm">S</A>
18 <a href="indxT.htm">T</A>
19 <a href="indxW.htm">W</A>
20 <a href="indxX.htm">X</A>
21 <dt>AddedBlocksBlockDesign <a href="CHAP003.htm#SSEC001.10">3.1.10</a>
22 <dt>AddedPointBlockDesign <a href="CHAP003.htm#SSEC001.9">3.1.9</a>
23 <dt>AffineResolvableMu <a href="CHAP004.htm#SSEC001.15">4.1.15</a>
24 <dt>AGPointFlatBlockDesign <a href="CHAP003.htm#SSEC001.2">3.1.2</a>
25 <dt>AllTDesignLambdas <a href="CHAP004.htm#SSEC001.14">4.1.14</a>
26 <dt>AutGroupBlockDesign <a href="CHAP006.htm#SSEC001.1">6.1.1</a>
27 <dt>Automorphism groups and isomorphism testing for block designs <a href="CHAP006.htm">6.0</a>
28 </dl><p>
29 [<a href="chapters.htm">Up</a>]<p>
30 <P>
31 <address>design manual<br>March 2019
32 </address></body></html>
0 <html><head><title>design : a GAP 4 package - Index B</title></head>
1 <body text="#000000" bgcolor="#ffffff">
2 <h1><font face="Gill Sans,Helvetica,Arial">design</font> : a <font face="Gill Sans,Helvetica,Arial">GAP</font> 4 package - Index B</h1>
3 <p>
4 <a href="theindex.htm">_</A>
5 <a href="indxA.htm">A</A>
6 <a href="indxB.htm">B</A>
7 <a href="indxC.htm">C</A>
8 <a href="indxD.htm">D</A>
9 <a href="indxE.htm">E</A>
10 <a href="indxF.htm">F</A>
11 <a href="indxI.htm">I</A>
12 <a href="indxL.htm">L</A>
13 <a href="indxM.htm">M</A>
14 <a href="indxN.htm">N</A>
15 <a href="indxP.htm">P</A>
16 <a href="indxR.htm">R</A>
17 <a href="indxS.htm">S</A>
18 <a href="indxT.htm">T</A>
19 <a href="indxW.htm">W</A>
20 <a href="indxX.htm">X</A>
21 <dt>binary block design <a href="CHAP001.htm#I1">1.3</a>
22 <dt>block design <a href="CHAP001.htm#I0">1.3</a>
23 <dt>Block intersection polynomials <a href="CHAP002.htm#SECT002">2.2</a>
24 <dt>BlockDesign <a href="CHAP003.htm#SSEC001.1">3.1.1</a>
25 <dt>BlockDesignBlocks <a href="CHAP004.htm#SSEC001.7">4.1.7</a>
26 <dt>BlockDesignEfficiency <a href="CHAP005.htm#SSEC002.1">5.2.1</a>
27 <dt>BlockDesignIsomorphismClassRepresentatives <a href="CHAP006.htm#SSEC002.2">6.2.2</a>
28 <dt>BlockDesignPoints <a href="CHAP004.htm#SSEC001.5">4.1.5</a>
29 <dt>BlockDesigns <a href="CHAP007.htm#SSEC001.1">7.1.1</a>
30 <dt>BlockDesignsFromXMLFile <a href="CHAP010.htm#SSEC002.1">10.2.1</a>
31 <dt>BlockDesignsToXMLFile <a href="CHAP010.htm#SSEC001.1">10.1.1</a>
32 <dt>BlockIntersectionPolynomial <a href="CHAP002.htm#SSEC002.1">2.2.1</a>
33 <dt>BlockIntersectionPolynomialCheck <a href="CHAP002.htm#SSEC002.2">2.2.2</a>
34 <dt>BlockNumbers <a href="CHAP004.htm#SSEC001.10">4.1.10</a>
35 <dt>BlockSizes <a href="CHAP004.htm#SSEC001.9">4.1.9</a>
36 </dl><p>
37 [<a href="chapters.htm">Up</a>]<p>
38 <P>
39 <address>design manual<br>March 2019
40 </address></body></html>
0 <html><head><title>design : a GAP 4 package - Index C</title></head>
1 <body text="#000000" bgcolor="#ffffff">
2 <h1><font face="Gill Sans,Helvetica,Arial">design</font> : a <font face="Gill Sans,Helvetica,Arial">GAP</font> 4 package - Index C</h1>
3 <p>
4 <a href="theindex.htm">_</A>
5 <a href="indxA.htm">A</A>
6 <a href="indxB.htm">B</A>
7 <a href="indxC.htm">C</A>
8 <a href="indxD.htm">D</A>
9 <a href="indxE.htm">E</A>
10 <a href="indxF.htm">F</A>
11 <a href="indxI.htm">I</A>
12 <a href="indxL.htm">L</A>
13 <a href="indxM.htm">M</A>
14 <a href="indxN.htm">N</A>
15 <a href="indxP.htm">P</A>
16 <a href="indxR.htm">R</A>
17 <a href="indxS.htm">S</A>
18 <a href="indxT.htm">T</A>
19 <a href="indxW.htm">W</A>
20 <a href="indxX.htm">X</A>
21 <dt>Classifying block designs <a href="CHAP007.htm">7.0</a>
22 <dt>Classifying semi-Latin squares <a href="CHAP008.htm">8.0</a>
23 <dt>ComplementBlocksBlockDesign <a href="CHAP003.htm#SSEC001.6">3.1.6</a>
24 <dt>Computing an interval for a certain real zero of a rational polynomial <a href="CHAP005.htm#SECT003">5.3</a>
25 <dt>Computing automorphism groups <a href="CHAP006.htm#SECT001">6.1</a>
26 <dt>Computing resolutions <a href="CHAP009.htm#SECT002">9.2</a>
27 <dt>ConcurrenceMatrix <a href="CHAP005.htm#SSEC001.2">5.1.2</a>
28 <dt>Constructing block designs <a href="CHAP003.htm">3.0</a>
29 </dl><p>
30 [<a href="chapters.htm">Up</a>]<p>
31 <P>
32 <address>design manual<br>March 2019
33 </address></body></html>
0 <html><head><title>design : a GAP 4 package - Index D</title></head>
1 <body text="#000000" bgcolor="#ffffff">
2 <h1><font face="Gill Sans,Helvetica,Arial">design</font> : a <font face="Gill Sans,Helvetica,Arial">GAP</font> 4 package - Index D</h1>
3 <p>
4 <a href="theindex.htm">_</A>
5 <a href="indxA.htm">A</A>
6 <a href="indxB.htm">B</A>
7 <a href="indxC.htm">C</A>
8 <a href="indxD.htm">D</A>
9 <a href="indxE.htm">E</A>
10 <a href="indxF.htm">F</A>
11 <a href="indxI.htm">I</A>
12 <a href="indxL.htm">L</A>
13 <a href="indxM.htm">M</A>
14 <a href="indxN.htm">N</A>
15 <a href="indxP.htm">P</A>
16 <a href="indxR.htm">R</A>
17 <a href="indxS.htm">S</A>
18 <a href="indxT.htm">T</A>
19 <a href="indxW.htm">W</A>
20 <a href="indxX.htm">X</A>
21 <dt>DeletedBlocksBlockDesign <a href="CHAP003.htm#SSEC001.8">3.1.8</a>
22 <dt>DeletedPointsBlockDesign <a href="CHAP003.htm#SSEC001.7">3.1.7</a>
23 <dt>derived design <a href="CHAP003.htm#I0">3.1</a>
24 <dt>DerivedBlockDesign <a href="CHAP003.htm#SSEC001.11">3.1.11</a>
25 <dt>Design <a href="CHAP001.htm">1.0</a>
26 <dt>DESIGN_IntervalForLeastRealZero <a href="CHAP005.htm#SSEC003.1">5.3.1</a>
27 <dt>Determining basic properties of block designs <a href="CHAP004.htm">4.0</a>
28 <dt>DualBlockDesign <a href="CHAP003.htm#SSEC001.5">3.1.5</a>
29 </dl><p>
30 [<a href="chapters.htm">Up</a>]<p>
31 <P>
32 <address>design manual<br>March 2019
33 </address></body></html>
0 <html><head><title>design : a GAP 4 package - Index E</title></head>
1 <body text="#000000" bgcolor="#ffffff">
2 <h1><font face="Gill Sans,Helvetica,Arial">design</font> : a <font face="Gill Sans,Helvetica,Arial">GAP</font> 4 package - Index E</h1>
3 <p>
4 <a href="theindex.htm">_</A>
5 <a href="indxA.htm">A</A>
6 <a href="indxB.htm">B</A>
7 <a href="indxC.htm">C</A>
8 <a href="indxD.htm">D</A>
9 <a href="indxE.htm">E</A>
10 <a href="indxF.htm">F</A>
11 <a href="indxI.htm">I</A>
12 <a href="indxL.htm">L</A>
13 <a href="indxM.htm">M</A>
14 <a href="indxN.htm">N</A>
15 <a href="indxP.htm">P</A>
16 <a href="indxR.htm">R</A>
17 <a href="indxS.htm">S</A>
18 <a href="indxT.htm">T</A>
19 <a href="indxW.htm">W</A>
20 <a href="indxX.htm">X</A>
21 <dt>Example of the use of DESIGN <a href="CHAP001.htm#SECT004">1.4</a>
22 </dl><p>
23 [<a href="chapters.htm">Up</a>]<p>
24 <P>
25 <address>design manual<br>March 2019
26 </address></body></html>
0 <html><head><title>design : a GAP 4 package - Index F</title></head>
1 <body text="#000000" bgcolor="#ffffff">
2 <h1><font face="Gill Sans,Helvetica,Arial">design</font> : a <font face="Gill Sans,Helvetica,Arial">GAP</font> 4 package - Index F</h1>
3 <p>
4 <a href="theindex.htm">_</A>
5 <a href="indxA.htm">A</A>
6 <a href="indxB.htm">B</A>
7 <a href="indxC.htm">C</A>
8 <a href="indxD.htm">D</A>
9 <a href="indxE.htm">E</A>
10 <a href="indxF.htm">F</A>
11 <a href="indxI.htm">I</A>
12 <a href="indxL.htm">L</A>
13 <a href="indxM.htm">M</A>
14 <a href="indxN.htm">N</A>
15 <a href="indxP.htm">P</A>
16 <a href="indxR.htm">R</A>
17 <a href="indxS.htm">S</A>
18 <a href="indxT.htm">T</A>
19 <a href="indxW.htm">W</A>
20 <a href="indxX.htm">X</A>
21 <dt>Functions to construct block designs <a href="CHAP003.htm#SECT001">3.1</a>
22 </dl><p>
23 [<a href="chapters.htm">Up</a>]<p>
24 <P>
25 <address>design manual<br>March 2019
26 </address></body></html>
0 <html><head><title>design : a GAP 4 package - Index I</title></head>
1 <body text="#000000" bgcolor="#ffffff">
2 <h1><font face="Gill Sans,Helvetica,Arial">design</font> : a <font face="Gill Sans,Helvetica,Arial">GAP</font> 4 package - Index I</h1>
3 <p>
4 <a href="theindex.htm">_</A>
5 <a href="indxA.htm">A</A>
6 <a href="indxB.htm">B</A>
7 <a href="indxC.htm">C</A>
8 <a href="indxD.htm">D</A>
9 <a href="indxE.htm">E</A>
10 <a href="indxF.htm">F</A>
11 <a href="indxI.htm">I</A>
12 <a href="indxL.htm">L</A>
13 <a href="indxM.htm">M</A>
14 <a href="indxN.htm">N</A>
15 <a href="indxP.htm">P</A>
16 <a href="indxR.htm">R</A>
17 <a href="indxS.htm">S</A>
18 <a href="indxT.htm">T</A>
19 <a href="indxW.htm">W</A>
20 <a href="indxX.htm">X</A>
21 <dt>Information from $t$-design parameters <a href="CHAP002.htm#SECT001">2.1</a>
22 <dt>Information from block design parameters <a href="CHAP002.htm">2.0</a>
23 <dt>InformationMatrix <a href="CHAP005.htm#SSEC001.3">5.1.3</a>
24 <dt>Installing the DESIGN Package <a href="CHAP001.htm#SECT001">1.1</a>
25 <dt>IsBinaryBlockDesign <a href="CHAP004.htm#SSEC001.2">4.1.2</a>
26 <dt>IsBlockDesign <a href="CHAP004.htm#SSEC001.1">4.1.1</a>
27 <dt>IsConnectedBlockDesign <a href="CHAP004.htm#SSEC001.4">4.1.4</a>
28 <dt>IsIsomorphicBlockDesign <a href="CHAP006.htm#SSEC002.1">6.2.1</a>
29 <dt>IsSimpleBlockDesign <a href="CHAP004.htm#SSEC001.3">4.1.3</a>
30 </dl><p>
31 [<a href="chapters.htm">Up</a>]<p>
32 <P>
33 <address>design manual<br>March 2019
34 </address></body></html>
0 <html><head><title>design : a GAP 4 package - Index L</title></head>
1 <body text="#000000" bgcolor="#ffffff">
2 <h1><font face="Gill Sans,Helvetica,Arial">design</font> : a <font face="Gill Sans,Helvetica,Arial">GAP</font> 4 package - Index L</h1>
3 <p>
4 <a href="theindex.htm">_</A>
5 <a href="indxA.htm">A</A>
6 <a href="indxB.htm">B</A>
7 <a href="indxC.htm">C</A>
8 <a href="indxD.htm">D</A>
9 <a href="indxE.htm">E</A>
10 <a href="indxF.htm">F</A>
11 <a href="indxI.htm">I</A>
12 <a href="indxL.htm">L</A>
13 <a href="indxM.htm">M</A>
14 <a href="indxN.htm">N</A>
15 <a href="indxP.htm">P</A>
16 <a href="indxR.htm">R</A>
17 <a href="indxS.htm">S</A>
18 <a href="indxT.htm">T</A>
19 <a href="indxW.htm">W</A>
20 <a href="indxX.htm">X</A>
21 <dt>Loading DESIGN <a href="CHAP001.htm#SECT002">1.2</a>
22 </dl><p>
23 [<a href="chapters.htm">Up</a>]<p>
24 <P>
25 <address>design manual<br>March 2019
26 </address></body></html>
0 <html><head><title>design : a GAP 4 package - Index M</title></head>
1 <body text="#000000" bgcolor="#ffffff">
2 <h1><font face="Gill Sans,Helvetica,Arial">design</font> : a <font face="Gill Sans,Helvetica,Arial">GAP</font> 4 package - Index M</h1>
3 <p>
4 <a href="theindex.htm">_</A>
5 <a href="indxA.htm">A</A>
6 <a href="indxB.htm">B</A>
7 <a href="indxC.htm">C</A>
8 <a href="indxD.htm">D</A>
9 <a href="indxE.htm">E</A>
10 <a href="indxF.htm">F</A>
11 <a href="indxI.htm">I</A>
12 <a href="indxL.htm">L</A>
13 <a href="indxM.htm">M</A>
14 <a href="indxN.htm">N</A>
15 <a href="indxP.htm">P</A>
16 <a href="indxR.htm">R</A>
17 <a href="indxS.htm">S</A>
18 <a href="indxT.htm">T</A>
19 <a href="indxW.htm">W</A>
20 <a href="indxX.htm">X</A>
21 <dt>MakeResolutionsComponent <a href="CHAP009.htm#SSEC002.1">9.2.1</a>
22 <dt>Matrices and efficiency measures for block designs <a href="CHAP005.htm">5.0</a>
23 <dt>Matrices associated with a block design <a href="CHAP005.htm#SECT001">5.1</a>
24 </dl><p>
25 [<a href="chapters.htm">Up</a>]<p>
26 <P>
27 <address>design manual<br>March 2019
28 </address></body></html>
0 <html><head><title>design : a GAP 4 package - Index N</title></head>
1 <body text="#000000" bgcolor="#ffffff">
2 <h1><font face="Gill Sans,Helvetica,Arial">design</font> : a <font face="Gill Sans,Helvetica,Arial">GAP</font> 4 package - Index N</h1>
3 <p>
4 <a href="theindex.htm">_</A>
5 <a href="indxA.htm">A</A>
6 <a href="indxB.htm">B</A>
7 <a href="indxC.htm">C</A>
8 <a href="indxD.htm">D</A>
9 <a href="indxE.htm">E</A>
10 <a href="indxF.htm">F</A>
11 <a href="indxI.htm">I</A>
12 <a href="indxL.htm">L</A>
13 <a href="indxM.htm">M</A>
14 <a href="indxN.htm">N</A>
15 <a href="indxP.htm">P</A>
16 <a href="indxR.htm">R</A>
17 <a href="indxS.htm">S</A>
18 <a href="indxT.htm">T</A>
19 <a href="indxW.htm">W</A>
20 <a href="indxX.htm">X</A>
21 <dt>NrBlockDesignBlocks <a href="CHAP004.htm#SSEC001.8">4.1.8</a>
22 <dt>NrBlockDesignPoints <a href="CHAP004.htm#SSEC001.6">4.1.6</a>
23 </dl><p>
24 [<a href="chapters.htm">Up</a>]<p>
25 <P>
26 <address>design manual<br>March 2019
27 </address></body></html>
0 <html><head><title>design : a GAP 4 package - Index P</title></head>
1 <body text="#000000" bgcolor="#ffffff">
2 <h1><font face="Gill Sans,Helvetica,Arial">design</font> : a <font face="Gill Sans,Helvetica,Arial">GAP</font> 4 package - Index P</h1>
3 <p>
4 <a href="theindex.htm">_</A>
5 <a href="indxA.htm">A</A>
6 <a href="indxB.htm">B</A>
7 <a href="indxC.htm">C</A>
8 <a href="indxD.htm">D</A>
9 <a href="indxE.htm">E</A>
10 <a href="indxF.htm">F</A>
11 <a href="indxI.htm">I</A>
12 <a href="indxL.htm">L</A>
13 <a href="indxM.htm">M</A>
14 <a href="indxN.htm">N</A>
15 <a href="indxP.htm">P</A>
16 <a href="indxR.htm">R</A>
17 <a href="indxS.htm">S</A>
18 <a href="indxT.htm">T</A>
19 <a href="indxW.htm">W</A>
20 <a href="indxX.htm">X</A>
21 <dt>PairwiseBalancedLambda <a href="CHAP004.htm#SSEC001.12">4.1.12</a>
22 <dt>Partitioning a block design into block designs <a href="CHAP009.htm#SECT001">9.1</a>
23 <dt>Partitioning block designs <a href="CHAP009.htm">9.0</a>
24 <dt>PartitionsIntoBlockDesigns <a href="CHAP009.htm#SSEC001.1">9.1.1</a>
25 <dt>PGPointFlatBlockDesign <a href="CHAP003.htm#SSEC001.3">3.1.3</a>
26 <dt>PointBlockIncidenceMatrix <a href="CHAP005.htm#SSEC001.1">5.1.1</a>
27 </dl><p>
28 [<a href="chapters.htm">Up</a>]<p>
29 <P>
30 <address>design manual<br>March 2019
31 </address></body></html>
0 <html><head><title>design : a GAP 4 package - Index R</title></head>
1 <body text="#000000" bgcolor="#ffffff">
2 <h1><font face="Gill Sans,Helvetica,Arial">design</font> : a <font face="Gill Sans,Helvetica,Arial">GAP</font> 4 package - Index R</h1>
3 <p>
4 <a href="theindex.htm">_</A>
5 <a href="indxA.htm">A</A>
6 <a href="indxB.htm">B</A>
7 <a href="indxC.htm">C</A>
8 <a href="indxD.htm">D</A>
9 <a href="indxE.htm">E</A>
10 <a href="indxF.htm">F</A>
11 <a href="indxI.htm">I</A>
12 <a href="indxL.htm">L</A>
13 <a href="indxM.htm">M</A>
14 <a href="indxN.htm">N</A>
15 <a href="indxP.htm">P</A>
16 <a href="indxR.htm">R</A>
17 <a href="indxS.htm">S</A>
18 <a href="indxT.htm">T</A>
19 <a href="indxW.htm">W</A>
20 <a href="indxX.htm">X</A>
21 <dt>Reading lists of block designs in XML-format <a href="CHAP010.htm#SECT002">10.2</a>
22 <dt>ReplicationNumber <a href="CHAP004.htm#SSEC001.11">4.1.11</a>
23 <dt>residual design <a href="CHAP003.htm#I1">3.1</a>
24 <dt>ResidualBlockDesign <a href="CHAP003.htm#SSEC001.12">3.1.12</a>
25 <dt>ResolvableTDesignBlockMultiplicityBound <a href="CHAP002.htm#SSEC001.6">2.1.6</a>
26 </dl><p>
27 [<a href="chapters.htm">Up</a>]<p>
28 <P>
29 <address>design manual<br>March 2019
30 </address></body></html>
0 <html><head><title>design : a GAP 4 package - Index S</title></head>
1 <body text="#000000" bgcolor="#ffffff">
2 <h1><font face="Gill Sans,Helvetica,Arial">design</font> : a <font face="Gill Sans,Helvetica,Arial">GAP</font> 4 package - Index S</h1>
3 <p>
4 <a href="theindex.htm">_</A>
5 <a href="indxA.htm">A</A>
6 <a href="indxB.htm">B</A>
7 <a href="indxC.htm">C</A>
8 <a href="indxD.htm">D</A>
9 <a href="indxE.htm">E</A>
10 <a href="indxF.htm">F</A>
11 <a href="indxI.htm">I</A>
12 <a href="indxL.htm">L</A>
13 <a href="indxM.htm">M</A>
14 <a href="indxN.htm">N</A>
15 <a href="indxP.htm">P</A>
16 <a href="indxR.htm">R</A>
17 <a href="indxS.htm">S</A>
18 <a href="indxT.htm">T</A>
19 <a href="indxW.htm">W</A>
20 <a href="indxX.htm">X</A>
21 <dt>semi-Latin square <a href="CHAP008.htm#I0">8.1</a>
22 <dt>Semi-Latin squares and SOMAs <a href="CHAP008.htm#SECT001">8.1</a>
23 <dt>SemiLatinSquareDuals <a href="CHAP008.htm#SSEC002.1">8.2.1</a>
24 <dt>SOMA <a href="CHAP008.htm#I1">8.1</a>
25 <dt>SteinerSystemIntersectionTriangle <a href="CHAP002.htm#SSEC001.4">2.1.4</a>
26 </dl><p>
27 [<a href="chapters.htm">Up</a>]<p>
28 <P>
29 <address>design manual<br>March 2019
30 </address></body></html>
0 <html><head><title>design : a GAP 4 package - Index T</title></head>
1 <body text="#000000" bgcolor="#ffffff">
2 <h1><font face="Gill Sans,Helvetica,Arial">design</font> : a <font face="Gill Sans,Helvetica,Arial">GAP</font> 4 package - Index T</h1>
3 <p>
4 <a href="theindex.htm">_</A>
5 <a href="indxA.htm">A</A>
6 <a href="indxB.htm">B</A>
7 <a href="indxC.htm">C</A>
8 <a href="indxD.htm">D</A>
9 <a href="indxE.htm">E</A>
10 <a href="indxF.htm">F</A>
11 <a href="indxI.htm">I</A>
12 <a href="indxL.htm">L</A>
13 <a href="indxM.htm">M</A>
14 <a href="indxN.htm">N</A>
15 <a href="indxP.htm">P</A>
16 <a href="indxR.htm">R</A>
17 <a href="indxS.htm">S</A>
18 <a href="indxT.htm">T</A>
19 <a href="indxW.htm">W</A>
20 <a href="indxX.htm">X</A>
21 <dt>t-design <a href="CHAP002.htm#I0">2.1</a>
22 <dt>TDesignBlockMultiplicityBound <a href="CHAP002.htm#SSEC001.5">2.1.5</a>
23 <dt>TDesignFromTBD <a href="CHAP003.htm#SSEC001.13">3.1.13</a>
24 <dt>TDesignIntersectionTriangle <a href="CHAP002.htm#SSEC001.3">2.1.3</a>
25 <dt>TDesignLambdaMin <a href="CHAP002.htm#SSEC001.2">2.1.2</a>
26 <dt>TDesignLambdas <a href="CHAP002.htm#SSEC001.1">2.1.1</a>
27 <dt>Testing isomorphism <a href="CHAP006.htm#SECT002">6.2</a>
28 <dt>The function BlockDesignEfficiency <a href="CHAP005.htm#SECT002">5.2</a>
29 <dt>The function BlockDesigns <a href="CHAP007.htm#SECT001">7.1</a>
30 <dt>The function SemiLatinSquareDuals <a href="CHAP008.htm#SECT002">8.2</a>
31 <dt>The functions for basic properties <a href="CHAP004.htm#SECT001">4.1</a>
32 <dt>The structure of a block design in DESIGN <a href="CHAP001.htm#SECT003">1.3</a>
33 <dt>TSubsetLambdasVector <a href="CHAP004.htm#SSEC001.13">4.1.13</a>
34 </dl><p>
35 [<a href="chapters.htm">Up</a>]<p>
36 <P>
37 <address>design manual<br>March 2019
38 </address></body></html>
0 <html><head><title>design : a GAP 4 package - Index W</title></head>
1 <body text="#000000" bgcolor="#ffffff">
2 <h1><font face="Gill Sans,Helvetica,Arial">design</font> : a <font face="Gill Sans,Helvetica,Arial">GAP</font> 4 package - Index W</h1>
3 <p>
4 <a href="theindex.htm">_</A>
5 <a href="indxA.htm">A</A>
6 <a href="indxB.htm">B</A>
7 <a href="indxC.htm">C</A>
8 <a href="indxD.htm">D</A>
9 <a href="indxE.htm">E</A>
10 <a href="indxF.htm">F</A>
11 <a href="indxI.htm">I</A>
12 <a href="indxL.htm">L</A>
13 <a href="indxM.htm">M</A>
14 <a href="indxN.htm">N</A>
15 <a href="indxP.htm">P</A>
16 <a href="indxR.htm">R</A>
17 <a href="indxS.htm">S</A>
18 <a href="indxT.htm">T</A>
19 <a href="indxW.htm">W</A>
20 <a href="indxX.htm">X</A>
21 <dt>WittDesign <a href="CHAP003.htm#SSEC001.4">3.1.4</a>
22 <dt>Writing lists of block designs and their properties in XML-format <a href="CHAP010.htm#SECT001">10.1</a>
23 </dl><p>
24 [<a href="chapters.htm">Up</a>]<p>
25 <P>
26 <address>design manual<br>March 2019
27 </address></body></html>
0 <html><head><title>design : a GAP 4 package - Index X</title></head>
1 <body text="#000000" bgcolor="#ffffff">
2 <h1><font face="Gill Sans,Helvetica,Arial">design</font> : a <font face="Gill Sans,Helvetica,Arial">GAP</font> 4 package - Index X</h1>
3 <p>
4 <a href="theindex.htm">_</A>
5 <a href="indxA.htm">A</A>
6 <a href="indxB.htm">B</A>
7 <a href="indxC.htm">C</A>
8 <a href="indxD.htm">D</A>
9 <a href="indxE.htm">E</A>
10 <a href="indxF.htm">F</A>
11 <a href="indxI.htm">I</A>
12 <a href="indxL.htm">L</A>
13 <a href="indxM.htm">M</A>
14 <a href="indxN.htm">N</A>
15 <a href="indxP.htm">P</A>
16 <a href="indxR.htm">R</A>
17 <a href="indxS.htm">S</A>
18 <a href="indxT.htm">T</A>
19 <a href="indxW.htm">W</A>
20 <a href="indxX.htm">X</A>
21 <dt>XML I/O of block designs <a href="CHAP010.htm">10.0</a>
22 </dl><p>
23 [<a href="chapters.htm">Up</a>]<p>
24 <P>
25 <address>design manual<br>March 2019
26 </address></body></html>
0 <html><head><title>design : a GAP 4 package - Index _</title></head>
1 <body text="#000000" bgcolor="#ffffff">
2 <h1><font face="Gill Sans,Helvetica,Arial">design</font> : a <font face="Gill Sans,Helvetica,Arial">GAP</font> 4 package - Index _</h1>
3 <p>
4 <a href="theindex.htm">_</A>
5 <a href="indxA.htm">A</A>
6 <a href="indxB.htm">B</A>
7 <a href="indxC.htm">C</A>
8 <a href="indxD.htm">D</A>
9 <a href="indxE.htm">E</A>
10 <a href="indxF.htm">F</A>
11 <a href="indxI.htm">I</A>
12 <a href="indxL.htm">L</A>
13 <a href="indxM.htm">M</A>
14 <a href="indxN.htm">N</A>
15 <a href="indxP.htm">P</A>
16 <a href="indxR.htm">R</A>
17 <a href="indxS.htm">S</A>
18 <a href="indxT.htm">T</A>
19 <a href="indxW.htm">W</A>
20 <a href="indxX.htm">X</A>
21 </dl><p>
22 [<a href="chapters.htm">Up</a>]<p>
23 <P>
24 <address>design manual<br>March 2019
25 </address></body></html>
00 ############################################################################
11 ##
2 ## blockdesign.g Design 1.6 Package Leonard Soicher
2 ## blockdesign.g Design 1.7 Package Leonard Soicher
33 ##
44 ##
55 # Functions to study, construct and classify (sub)block designs
77 # block designs with given properties.
88 # At present there is limited support for non-binary block designs.
99 #
10 # Copyright (C) 2003-2011 Leonard H. Soicher
10 # Copyright (C) 2003-2019 Leonard H. Soicher
1111 #
1212 # This program is free software; you can redistribute it and/or modify
1313 # it under the terms of the GNU General Public License as published by
00 #############################################################################
11 ##
2 ## blockdesign_io.g Design 1.6 Package Leonard Soicher
2 ## blockdesign_io.g Design 1.7 Package Leonard Soicher
33 ##
44 ##
55 # The "GAP Expander/Writer" to expand the information about
1010 # DTRS external representation XML-format, and to convert these
1111 # block designs into GAP-format.
1212 #
13 # Copyright (C) 2003-2011 Leonard H. Soicher
13 # Copyright (C) 2003-2019 Leonard H. Soicher
1414 #
1515 # This program is free software; you can redistribute it and/or modify
1616 # it under the terms of the GNU General Public License as published by
0 LoadPackage( "design" );
1
2 TestDirectory(DirectoriesPackageLibrary( "design", "tst" ),
3 rec(exitGAP := true,
4 testOptions := rec(compareFunction := "uptowhitespace") ) );
5
6 FORCE_QUIT_GAP(1); # if we ever get here, there was an error
0 #############################################################################
1 ##
2 ## testall.tst DESIGN package Leonard Soicher
3 ##
4 ## To create a test file, place GAP prompts, input and output exactly as
5 ## they must appear in the GAP session. Do not remove lines containing
6 ## START_TEST and STOP_TEST statements.
7 ##
8 ## The first line starts the test. START_TEST reinitializes the caches and
9 ## the global random number generator, in order to be independent of the
10 ## reading order of several test files. Furthermore, the assertion level
11 ## is set to 2 by START_TEST and set back to the previous value in the
12 ## subsequent STOP_TEST call.
13 ##
14 ## The argument of STOP_TEST may be an arbitrary identifier string.
15 ##
16 gap> START_TEST("DESIGN package: testall.tst");
17
18 # Note that you may use comments in the test file
19 # and also separate parts of the test by empty lines
20
21 # First load the package without banner (the banner must be suppressed to
22 # avoid reporting discrepancies in the case when the package is already
23 # loaded)
24 gap> LoadPackage("design",false);
25 true
26 gap> H:=CyclicGroup(IsPermGroup,20);;
27 gap> D:=BlockDesigns(rec(v:=21,blockSizes:=[4,5],
28 > tSubsetStructure:=rec(t:=2,lambdas:=[1]),
29 > requiredAutSubgroup:=H ));;
30 gap> Length(D);
31 1
32 gap> D:=D[1];;
33 gap> BlockSizes(D);
34 [ 4, 5 ]
35 gap> BlockNumbers(D);
36 [ 20, 9 ]
37 gap> Size(AutGroupBlockDesign(D));
38 80
39 gap> Dstar:=TDesignFromTBD(D,2,4);;
40 gap> AllTDesignLambdas(Dstar);
41 [ 105, 20, 3 ]
42 gap> IsSimpleBlockDesign(Dstar);
43 false
44 gap> Size(AutGroupBlockDesign(Dstar));
45 80
46 gap> near_resolutions:=PartitionsIntoBlockDesigns(rec(
47 > blockDesign:=Dstar,
48 > v:=21,blockSizes:=[4],
49 > tSubsetStructure:=rec(t:=0,lambdas:=[5]),
50 > blockIntersectionNumbers:=[[ [0] ]],
51 > requiredAutSubgroup:=SylowSubgroup(H,5) ));;
52 gap> Length(near_resolutions);
53 2
54 gap> Collected(List(near_resolutions,x->Size(x.autGroup)));
55 [ [ 5, 1 ], [ 20, 1 ] ]
56 gap> TDesignBlockMultiplicityBound(2,21,4,3);
57 3
58 gap> Collected(List(Collected(BlockDesignBlocks(Dstar)),x->x[2]));
59 [ [ 1, 45 ], [ 3, 20 ] ]
60 gap> TDesignLambdas(5,24,8,1);
61 [ 759, 253, 77, 21, 5, 1 ]
62 gap> TDesignLambdaMin(5,24,8);
63 1
64 gap> TDesignLambdaMin(2,12,4);
65 3
66 gap> TDesignLambdas(2,12,4,3);
67 [ 33, 11, 3 ]
68 gap> TDesignIntersectionTriangle(2,12,4,3);
69 [ [ 33, 22, 14 ], [ 11, 8 ], [ 3 ] ]
70 gap> TDesignLambdas(2,12,4,2);
71 fail
72 gap> TDesignIntersectionTriangle(2,12,4,2);
73 fail
74 gap> SteinerSystemIntersectionTriangle(5,24,8);
75 [ [ 759, 506, 330, 210, 130, 78, 46, 30, 30 ],
76 [ 253, 176, 120, 80, 52, 32, 16, 0 ], [ 77, 56, 40, 28, 20, 16, 16 ],
77 [ 21, 16, 12, 8, 4, 0 ], [ 5, 4, 4, 4, 4 ], [ 1, 0, 0, 0 ], [ 1, 0, 0 ],
78 [ 1, 0 ], [ 1 ] ]
79 gap> TDesignIntersectionTriangle(5,24,8,1);
80 [ [ 759, 506, 330, 210, 130, 78 ], [ 253, 176, 120, 80, 52 ],
81 [ 77, 56, 40, 28 ], [ 21, 16, 12 ], [ 5, 4 ], [ 1 ] ]
82 gap> TDesignBlockMultiplicityBound(5,16,7,5);
83 2
84 gap> TDesignBlockMultiplicityBound(2,36,6,1);
85 0
86 gap> TDesignBlockMultiplicityBound(2,36,6,2);
87 2
88 gap> TDesignBlockMultiplicityBound(2,15,5,2);
89 0
90 gap> TDesignBlockMultiplicityBound(2,15,5,4);
91 2
92 gap> TDesignBlockMultiplicityBound(2,11,4,6);
93 3
94 gap> ResolvableTDesignBlockMultiplicityBound(5,12,6,1);
95 1
96 gap> ResolvableTDesignBlockMultiplicityBound(2,21,7,3);
97 0
98 gap> TDesignBlockMultiplicityBound(2,21,7,3);
99 1
100 gap> ResolvableTDesignBlockMultiplicityBound(2,12,4,3);
101 1
102 gap> TDesignBlockMultiplicityBound(2,12,4,3);
103 2
104 gap> x:=Indeterminate(Rationals,1);
105 x_1
106 gap> m:=[0,0,0,0,0,0,0,1];;
107 gap> lambdavec:=TDesignLambdas(6,14,7,4);
108 [ 1716, 858, 396, 165, 60, 18, 4 ]
109 gap> B:=BlockIntersectionPolynomial(x,m,lambdavec);
110 1715*x_1^6-10269*x_1^5+34685*x_1^4-69615*x_1^3+84560*x_1^2-56196*x_1+15120
111 gap> Value(B,1);
112 0
113 gap> m:=[0,0,0,0,0,0,0,1];;
114 gap> lambdavec:=TDesignLambdas(6,14,7,4);
115 [ 1716, 858, 396, 165, 60, 18, 4 ]
116 gap> BlockIntersectionPolynomialCheck(m,lambdavec);
117 true
118 gap> m:=[1,0,0,0,0,0,0,1];;
119 gap> BlockIntersectionPolynomialCheck(m,lambdavec);
120 false
121 gap> D:=BlockDesign(7, [[1,2,4]], Group((1,2,3,4,5,6,7)));;
122 gap> AllTDesignLambdas(D);
123 [ 7, 3, 1 ]
124 gap> D:=AGPointFlatBlockDesign(2,4,1);;
125 gap> AllTDesignLambdas(D);
126 [ 20, 5, 1 ]
127 gap> D:=PGPointFlatBlockDesign(3,2,1);;
128 gap> AllTDesignLambdas(D);
129 [ 35, 7, 1 ]
130 gap> W24:=WittDesign(24);;
131 gap> AllTDesignLambdas(W24);
132 [ 759, 253, 77, 21, 5, 1 ]
133 gap> Size(AutomorphismGroup(W24));
134 244823040
135 gap> W10:=WittDesign(10);;
136 gap> AllTDesignLambdas(W10);
137 [ 30, 12, 4, 1 ]
138 gap> Size(AutomorphismGroup(W10));
139 1440
140 gap> D:=BlockDesign(4,[[1,3],[2,3,4],[3,4]]);;
141 gap> dualD:=DualBlockDesign(D);;
142 gap> dualD.blocks;
143 [ [ 1 ], [ 1, 2, 3 ], [ 2 ], [ 2, 3 ] ]
144 gap> D:=PGPointFlatBlockDesign(2,2,1);;
145 gap> AllTDesignLambdas(D);
146 [ 7, 3, 1 ]
147 gap> C:=ComplementBlocksBlockDesign(D);;
148 gap> AllTDesignLambdas(C);
149 [ 7, 4, 2 ]
150 gap> D:=BlockDesigns(rec(v:=11,blockSizes:=[5],
151 > tSubsetStructure:=rec(t:=2,lambdas:=[2])))[1];;
152 gap> AllTDesignLambdas(D);
153 [ 11, 5, 2 ]
154 gap> DP:=DeletedPointsBlockDesign(D,[5,8]);;
155 gap> PairwiseBalancedLambda(DP);
156 2
157 gap> DD:=DerivedBlockDesign(D,6);;
158 gap> AllTDesignLambdas(DD);
159 [ 5, 2 ]
160 gap> DD:=DerivedBlockDesign(D,D.blocks[6]);;
161 gap> AllTDesignLambdas(DD);
162 [ 10, 4, 1 ]
163 gap> RD:=ResidualBlockDesign(D,6);;
164 gap> AllTDesignLambdas(RD);
165 [ 6, 3 ]
166 gap> RD:=ResidualBlockDesign(D,D.blocks[6]);;
167 gap> AllTDesignLambdas(RD);
168 [ 10, 5, 2 ]
169 gap> D:=BlockDesigns(rec(v:=10, blockSizes:=[3,4],
170 > tSubsetStructure:=rec(t:=2,lambdas:=[1])))[1];;
171 gap> PairwiseBalancedLambda(D);
172 1
173 gap> Dstar:=TDesignFromTBD(D,2,3);;
174 gap> AllTDesignLambdas(Dstar);
175 [ 30, 9, 2 ]
176 gap> IsBlockDesign(5);
177 false
178 gap> IsBlockDesign( BlockDesign(2,[[1],[1,2],[1,2]]) );
179 true
180 gap> IsBinaryBlockDesign( BlockDesign(2,[[1],[1,2],[1,2]]) );
181 true
182 gap> IsBinaryBlockDesign( BlockDesign(2,[[1],[1,2],[1,2,2]]) );
183 false
184 gap> IsSimpleBlockDesign( BlockDesign(2,[[1],[1,2],[1,2]]) );
185 false
186 gap> IsSimpleBlockDesign( BlockDesign(2,[[1],[1,2],[1,2,2]]) );
187 true
188 gap> IsConnectedBlockDesign( BlockDesign(2,[[1],[2]]) );
189 false
190 gap> IsConnectedBlockDesign( BlockDesign(2,[[1,2]]) );
191 true
192 gap> D:=BlockDesign(3,[[1,2],[1,3],[2,3],[2,3]]);;
193 gap> Length(BlockDesignPoints(D));
194 3
195 gap> NrBlockDesignPoints(D);
196 3
197 gap> BlockDesignBlocks(D);
198 [ [ 1, 2 ], [ 1, 3 ], [ 2, 3 ], [ 2, 3 ] ]
199 gap> NrBlockDesignBlocks(D);
200 4
201 gap> BlockSizes( BlockDesign(3,[[1],[1,2,2],[1,2,3],[2],[3]]) );
202 [ 1, 3 ]
203 gap> D:=BlockDesign(3,[[1],[1,2,2],[1,2,3],[2],[3]]);;
204 gap> BlockSizes(D);
205 [ 1, 3 ]
206 gap> BlockNumbers(D);
207 [ 3, 2 ]
208 gap> ReplicationNumber(BlockDesign(4,[[1],[1,2],[2,3,3],[4,4]]));
209 2
210 gap> ReplicationNumber(BlockDesign(4,[[1],[1,2],[2,3],[4,4]]));
211 fail
212 gap> D:=BlockDesigns(rec(v:=10, blockSizes:=[3,4],
213 > tSubsetStructure:=rec(t:=2,lambdas:=[1])))[1];;
214 gap> PairwiseBalancedLambda(D);
215 1
216 gap> D:=BlockDesign(3,[[1],[1,2,2],[1,2,3],[2],[3]]);;
217 gap> TSubsetLambdasVector(D,0);
218 [ 5 ]
219 gap> TSubsetLambdasVector(D,1);
220 [ 3, 4, 2 ]
221 gap> TSubsetLambdasVector(D,2);
222 [ 3, 1, 1 ]
223 gap> TSubsetLambdasVector(D,3);
224 [ 1 ]
225 gap> AllTDesignLambdas(PGPointFlatBlockDesign(3,2,1));
226 [ 35, 7, 1 ]
227 gap> P:=PGPointFlatBlockDesign(2,3,1);;
228 gap> AffineResolvableMu(P);
229 fail
230 gap> A:=ResidualBlockDesign(P,P.blocks[1]);;
231 gap> AffineResolvableMu(A);
232 1
233 gap> D:=DualBlockDesign(AGPointFlatBlockDesign(2,3,1));;
234 gap> PointBlockIncidenceMatrix(D);
235 [ [ 1, 1, 1, 0, 0, 0, 0, 0, 0 ], [ 1, 0, 0, 1, 1, 0, 0, 0, 0 ],
236 [ 1, 0, 0, 0, 0, 1, 1, 0, 0 ], [ 1, 0, 0, 0, 0, 0, 0, 1, 1 ],
237 [ 0, 1, 0, 1, 0, 1, 0, 0, 0 ], [ 0, 1, 0, 0, 0, 0, 1, 1, 0 ],
238 [ 0, 1, 0, 0, 1, 0, 0, 0, 1 ], [ 0, 0, 1, 1, 0, 0, 0, 1, 0 ],
239 [ 0, 0, 1, 0, 1, 0, 1, 0, 0 ], [ 0, 0, 1, 0, 0, 1, 0, 0, 1 ],
240 [ 0, 0, 0, 1, 0, 0, 1, 0, 1 ], [ 0, 0, 0, 0, 1, 1, 0, 1, 0 ] ]
241 gap> ConcurrenceMatrix(D);
242 [ [ 3, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0 ],
243 [ 1, 3, 1, 1, 1, 0, 1, 1, 1, 0, 1, 1 ],
244 [ 1, 1, 3, 1, 1, 1, 0, 0, 1, 1, 1, 1 ],
245 [ 1, 1, 1, 3, 0, 1, 1, 1, 0, 1, 1, 1 ],
246 [ 1, 1, 1, 0, 3, 1, 1, 1, 0, 1, 1, 1 ],
247 [ 1, 0, 1, 1, 1, 3, 1, 1, 1, 0, 1, 1 ],
248 [ 1, 1, 0, 1, 1, 1, 3, 0, 1, 1, 1, 1 ],
249 [ 1, 1, 0, 1, 1, 1, 0, 3, 1, 1, 1, 1 ],
250 [ 1, 1, 1, 0, 0, 1, 1, 1, 3, 1, 1, 1 ],
251 [ 1, 0, 1, 1, 1, 0, 1, 1, 1, 3, 1, 1 ],
252 [ 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 3, 0 ],
253 [ 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 3 ] ]
254 gap> InformationMatrix(D);
255 [ [ 9/4, -1/4, -1/4, -1/4, -1/4, -1/4, -1/4, -1/4, -1/4, -1/4, 0, 0 ],
256 [ -1/4, 9/4, -1/4, -1/4, -1/4, 0, -1/4, -1/4, -1/4, 0, -1/4, -1/4 ],
257 [ -1/4, -1/4, 9/4, -1/4, -1/4, -1/4, 0, 0, -1/4, -1/4, -1/4, -1/4 ],
258 [ -1/4, -1/4, -1/4, 9/4, 0, -1/4, -1/4, -1/4, 0, -1/4, -1/4, -1/4 ],
259 [ -1/4, -1/4, -1/4, 0, 9/4, -1/4, -1/4, -1/4, 0, -1/4, -1/4, -1/4 ],
260 [ -1/4, 0, -1/4, -1/4, -1/4, 9/4, -1/4, -1/4, -1/4, 0, -1/4, -1/4 ],
261 [ -1/4, -1/4, 0, -1/4, -1/4, -1/4, 9/4, 0, -1/4, -1/4, -1/4, -1/4 ],
262 [ -1/4, -1/4, 0, -1/4, -1/4, -1/4, 0, 9/4, -1/4, -1/4, -1/4, -1/4 ],
263 [ -1/4, -1/4, -1/4, 0, 0, -1/4, -1/4, -1/4, 9/4, -1/4, -1/4, -1/4 ],
264 [ -1/4, 0, -1/4, -1/4, -1/4, 0, -1/4, -1/4, -1/4, 9/4, -1/4, -1/4 ],
265 [ 0, -1/4, -1/4, -1/4, -1/4, -1/4, -1/4, -1/4, -1/4, -1/4, 9/4, 0 ],
266 [ 0, -1/4, -1/4, -1/4, -1/4, -1/4, -1/4, -1/4, -1/4, -1/4, 0, 9/4 ] ]
267 gap> BlockDesignEfficiency(D);
268 rec( A := 33/41,
269 CEFpolynomial := x_1^11-9*x_1^10+147/4*x_1^9-719/8*x_1^8+18723/128*x_1^7-106\
270 47/64*x_1^6+138159/1024*x_1^5-159813/2048*x_1^4+2067201/65536*x_1^3-556227/655\
271 36*x_1^2+89667/65536*x_1-6561/65536, Dpowered := 6561/65536,
272 Einterval := [ 3/4, 3/4 ] )
273 gap> BlockDesignEfficiency(D,10^(-4),true);
274 rec( A := 33/41,
275 CEFpolynomial := x_1^11-9*x_1^10+147/4*x_1^9-719/8*x_1^8+18723/128*x_1^7-106\
276 47/64*x_1^6+138159/1024*x_1^5-159813/2048*x_1^4+2067201/65536*x_1^3-556227/655\
277 36*x_1^2+89667/65536*x_1-6561/65536, Dpowered := 6561/65536,
278 Einterval := [ 3/4, 3/4 ], MV := 3/4 )
279 gap> D:=PGPointFlatBlockDesign(2,3,1);;
280 gap> Size(AutGroupBlockDesign(D));
281 5616
282 gap> D1:=BlockDesign(3,[[1],[1,2,3],[2]]);;
283 gap> D2:=BlockDesign(3,[[1],[1,2,3],[3]]);;
284 gap> IsIsomorphicBlockDesign(D1,D2);
285 true
286 gap> D3:=BlockDesign(4,[[1],[1,2,3],[3]]);;
287 gap> IsIsomorphicBlockDesign(D2,D3);
288 false
289 gap> D1:=BlockDesign(3,[[1],[1,2,3],[2]]);;
290 gap> D2:=BlockDesign(3,[[1],[1,2,3],[3]]);;
291 gap> D3:=BlockDesign(4,[[1],[1,2,3],[3]]);;
292 gap> Length(BlockDesignIsomorphismClassRepresentatives([D1,D2,D3]));
293 2
294 gap> DL:=BlockDesigns(rec(
295 > v:=15,blockSizes:=[3],
296 > tSubsetStructure:=rec(t:=2,lambdas:=[1]),
297 > requiredAutSubgroup:=
298 > Group((1,2,3,4,5)(6,7,8,9,10)(11,12,13,14,15))));;
299 gap> List(DL,AllTDesignLambdas);
300 [ [ 35, 7, 1 ], [ 35, 7, 1 ], [ 35, 7, 1 ] ]
301 gap> Collected(List(DL,D->Size(AutGroupBlockDesign(D))));
302 [ [ 5, 1 ], [ 60, 1 ], [ 20160, 1 ] ]
303 gap> parclasses:=List(DL,D->
304 > BlockDesigns(rec(
305 > blockDesign:=D,
306 > v:=15,blockSizes:=[3],
307 > tSubsetStructure:=rec(t:=1,lambdas:=[1]))));;
308 gap> Collected(List(parclasses,Length));
309 [ [ 1, 2 ], [ 2, 1 ] ]
310 gap> Collected(List(parclasses,L->Collected(List(L,parclass->Size(parclass.autSubgroup)))));
311 [ [ [ [ 5, 1 ] ], 1 ], [ [ [ 6, 1 ], [ 60, 1 ] ], 1 ], [ [ [ 360, 1 ] ], 1 ] ]
312 gap> List([1..6],k->Length(SemiLatinSquareDuals(4,k)));
313 [ 2, 10, 40, 164, 621, 2298 ]
314 gap> List([1..6],k->Length(SemiLatinSquareDuals(4,k,"default","default",4)));
315 [ 2, 11, 46, 201, 829, 3343 ]
316 gap> DL:=BlockDesigns(rec(
317 > v:=15,blockSizes:=[3],
318 > tSubsetStructure:=rec(t:=2,lambdas:=[1]),
319 > requiredAutSubgroup:=
320 > Group((1,2,3,4,5)(6,7,8,9,10)(11,12,13,14,15))));;
321 gap> Collected(List(DL,D->Size(AutomorphismGroup(D))));
322 [ [ 5, 1 ], [ 60, 1 ], [ 20160, 1 ] ]
323 gap> x:=Indeterminate(Rationals,1);
324 x_1
325 gap> f:=(x+3)*(x^2-3);
326 x_1^3+3*x_1^2-3*x_1-9
327 gap> L:=DESIGN_IntervalForLeastRealZero(f,-5,5,10^(-3));
328 [ -3, -3 ]
329 gap> L:=DESIGN_IntervalForLeastRealZero(f,-2,5,10^(-3));
330 [ -14193/8192, -7093/4096 ]
331 gap> List(L,Float);
332 [ -1.73254, -1.73169 ]
333 gap> L:=DESIGN_IntervalForLeastRealZero(f,0,5,10^(-3));
334 [ 14185/8192, 7095/4096 ]
335 gap> List(L,Float);
336 [ 1.73157, 1.73218 ]
337 gap> L:=DESIGN_IntervalForLeastRealZero(f,0,5,10^(-5));
338 [ 454045/262144, 908095/524288 ]
339 gap> List(L,Float);
340 [ 1.73204, 1.73205 ]
341 gap> L:=DESIGN_IntervalForLeastRealZero(f,2,5,10^(-5));
342 [ ]
343 gap> STOP_TEST( "testall.tst", 10000 );
344 ## The first argument of STOP_TEST should be the name of the test file.
345 ## The number is a proportionality factor that is used to output a
346 ## "GAPstone" speed ranking after the file has been completely processed.
347 ## For the files provided with the distribution this scaling is roughly
348 ## equalized to yield the same numbers as produced by the test file
349 ## tst/combinat.tst. For package tests, you may leave it unchanged.
350
351 #############################################################################