Merge tag 'upstream/1.7'
Upstream version 1.7
Jerome Benoit
5 years ago
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. |
4 | 4 | |
5 | 5 | SetPackageInfo( rec( |
6 | 6 | |
7 | ## This is case sensitive, use your preferred spelling. | |
8 | 7 | 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", | |
9 | 12 | |
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 ), | |
13 | 24 | |
14 | ## Release date of the current version in dd/mm/yyyy format. | |
15 | Date := "23/11/2011", | |
25 | ArchiveFormats := ".tar.gz", | |
16 | 26 | |
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", ......], | |
60 | 27 | BinaryFiles := ["doc/manual.dvi", "doc/manual.pdf"], |
61 | 28 | |
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 | ## | |
93 | 29 | Persons := [ |
94 | 30 | rec( |
95 | 31 | LastName := "Soicher", |
97 | 33 | IsAuthor := true, |
98 | 34 | IsMaintainer := true, |
99 | 35 | 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/", | |
101 | 37 | Place := "London", |
102 | 38 | Institution := Concatenation( [ |
103 | 39 | "School of Mathematical Sciences, ", |
104 | "Queen Mary, University of London", | |
40 | "Queen Mary University of London", | |
105 | 41 | ] ) |
106 | 42 | ) |
107 | # provide such a record for each author and/or maintainer ... | |
108 | ||
109 | 43 | ], |
110 | 44 | |
111 | 45 | ## Status information. Currently the following cases are recognized: |
124 | 58 | # format: mm/yyyy |
125 | 59 | AcceptDate := "08/2006", |
126 | 60 | |
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 | ||
140 | 61 | ## Here you must provide a short abstract explaining the package content |
141 | 62 | ## in HTML format (used on the package overview Web page) and an URL |
142 | 63 | ## for a Webpage with more detailed information about the package |
145 | 66 | ## '<span class="pkgname">MyPKG</span>' for specifing package names. |
146 | 67 | ## |
147 | 68 | 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.", | |
151 | 70 | |
152 | 71 | ## On the GAP Website there is an online version of all manuals in the |
153 | 72 | ## GAP distribution. To handle the documentation of a package it is |
189 | 108 | Dependencies := rec( |
190 | 109 | # GAP version, use version strings for specifying exact versions, |
191 | 110 | # prepend a '>=' for specifying a least version. |
192 | GAP := ">=4.5", | |
111 | GAP := ">=4.10", | |
193 | 112 | # list of pairs [package name, (least) version], package name is case |
194 | 113 | # insensitive, least version denoted with '>=' prepended to version string. |
195 | 114 | # without these, the package will not load |
196 | 115 | # NeededOtherPackages := [["GAPDoc", ">= 0.99"]], |
197 | NeededOtherPackages := [["GRAPE", ">= 4.4"]], | |
116 | NeededOtherPackages := [["GRAPE", ">= 4.8"], ["GAPDoc", ">=1.6"]], | |
198 | 117 | # without these the package will issue a warning while loading |
199 | 118 | # SuggestedOtherPackages := [], |
200 | SuggestedOtherPackages := [["GAPDoc", ">= 1.4"]], | |
119 | SuggestedOtherPackages := [], | |
201 | 120 | # needed external conditions (programs, operating system, ...) provide |
202 | 121 | # just strings as text or |
203 | 122 | # pairs [text, URL] where URL provides further information |
220 | 139 | # AvailabilityTest := ReturnTrue, |
221 | 140 | AvailabilityTest := ReturnTrue, |
222 | 141 | |
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 | ||
238 | 142 | ## *Optional*, but recommended: path relative to package root to a file which |
239 | 143 | ## contains as many tests of the package functionality as sensible. |
240 | #TestFile := "tst/testall.g", | |
144 | TestFile := "tst/testall.g", | |
241 | 145 | |
242 | 146 | ## *Optional*: Here you can list some keyword related to the topic |
243 | 147 | ## of the package. |
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 |
6 | 6 | \def\DESIGN{\sf DESIGN} |
7 | 7 | \def\GRAPE{\sf GRAPE} |
8 | 8 | \def\nauty{\it nauty} |
9 | \def\bliss{\it bliss} | |
9 | 10 | \def\Aut{{\rm Aut}\,} |
10 | 11 | |
11 | 12 | \Chapter{Automorphism groups and isomorphism testing for block designs} |
12 | 13 | |
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. | |
15 | 17 | |
16 | 18 | %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% |
17 | 19 | \Section{Computing automorphism groups} |
347 | 347 | \>DerivedBlockDesign( <D>, <x> ) |
348 | 348 | |
349 | 349 | 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} | |
351 | 352 | $DD$ of <D>, with respect to <x>. |
352 | 353 | |
353 | 354 | If <x> is a point then $DD$ is the block design whose blocks are those |
402 | 403 | \>ResidualBlockDesign( <D>, <x> ) |
403 | 404 | |
404 | 405 | 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} | |
406 | 408 | $RD$ of <D>, with respect to <x>. |
407 | 409 | |
408 | 410 | If <x> is a point then $RD$ is the block design whose blocks are those |
11 | 11 | |
12 | 12 | \Chapter{Design} |
13 | 13 | |
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. | |
24 | 17 | |
25 | 18 | 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 | |
27 | 20 | funding under grant GR/R29659/01, to provide a web-based resource for |
28 | 21 | design theory; see \URL{http://designtheory.org} and \cite{Dotw}. |
29 | 22 | |
33 | 26 | (at your option) any later version. For details, see |
34 | 27 | \URL{http://www.gnu.org/licenses/gpl.html} |
35 | 28 | |
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: | |
39 | 31 | |
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}. | |
42 | 34 | |
43 | Any comments or bug reports should also go to | |
35 | Any comments or bug reports should go to | |
44 | 36 | \Mailto{L.H.Soicher@qmul.ac.uk}. |
45 | 37 | |
46 | 38 | %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% |
47 | 39 | \Section{Installing the DESIGN Package} |
48 | 40 | |
49 | The {\DESIGN} package is included in the standard {\GAP}~4.5 | |
41 | The {\DESIGN} package is included in the standard {\GAP} | |
50 | 42 | distribution. You only need to download and install {\DESIGN} if you need |
51 | 43 | to install the package locally or are installing an upgrade of {\DESIGN} |
52 | 44 | 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 | |
54 | 46 | {\DESIGN}, you can find archive files for the package in various formats |
55 | 47 | at \URL{http://www.gap-system.org/Packages/design.html}, and then your |
56 | 48 | archive file of choice should be downloaded and unpacked in the `pkg' |
57 | 49 | 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"). | |
59 | 51 | |
60 | 52 | 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. | |
64 | 55 | |
65 | 56 | %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% |
66 | 57 | \Section{Loading DESIGN} |
69 | 60 | the statement |
70 | 61 | |
71 | 62 | \begintt |
72 | gap> LoadPackage("design"); | |
73 | true | |
63 | LoadPackage("design"); | |
74 | 64 | \endtt |
75 | 65 | |
76 | 66 | %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% |
77 | 67 | \Section{The structure of a block design in DESIGN} |
78 | 68 | |
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 | |
80 | 72 | $X$ is a non-empty finite set whose elements are called *points*, and |
81 | 73 | $B$ is a non-empty finite multiset whose elements are called *blocks*, |
82 | 74 | such that each block is a non-empty finite multiset of points. |
83 | 75 | |
84 | 76 | {\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 | |
87 | 80 | the design), but these functions will check if an input block design |
88 | 81 | is binary. |
89 | 82 |
13 | 13 | In this chapter we describe functions to calculate certain matrices |
14 | 14 | associated with a block design, and the function `BlockDesignEfficiency' |
15 | 15 | 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. | |
16 | 20 | |
17 | 21 | %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% |
18 | 22 | \Section{Matrices associated with a block design} |
186 | 190 | Einterval := [ 3/4, 3/4 ], MV := 3/4 ) |
187 | 191 | \endexample |
188 | 192 | |
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 |
28 | 28 | # The HTML version of the manual |
29 | 29 | mkdir -p ../htm |
30 | 30 | echo "Creating HTML documentation" |
31 | ../../../etc/convert.pl -c -n design . ../htm | |
31 | ../../../etc/convert.pl -t -c -n design . ../htm | |
32 | 32 | |
33 | 33 | ############################################################################# |
34 | 34 | ## |
79 | 79 | |
80 | 80 | @manual{GAPDoc, |
81 | 81 | 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", | |
84 | 84 | 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/}", | |
92 | 85 | } |
93 | 86 | |
94 | 87 | @article{CaSo, |
124 | 117 | |
125 | 118 | @manual{Grape, |
126 | 119 | 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}", | |
130 | 123 | } |
131 | 124 | |
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 |
22 | 22 | %F UseReferences . . . . . . . . . . . . . . . . . . specify references |
23 | 23 | %% |
24 | 24 | % \UseReferences{../../../doc/ext} |
25 | % \UseReferences{../../../doc/ref} | |
25 | \UseReferences{../../../doc/ref} | |
26 | 26 | % |
27 | 27 | % |
28 | 28 | %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% |
14 | 14 | \Section{Information from $t$-design parameters} |
15 | 15 | |
16 | 16 | 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* | |
18 | 20 | $t,v,k,\lambda$, or a $t$-$(v,k,\lambda)$ *design*, is a binary block |
19 | 21 | design with exactly $v$ points, such that each block has size $k$ and |
20 | 22 | each $t$-subset of the points is contained in exactly $\lambda$ blocks. |
18 | 18 | \Section{Semi-Latin squares and SOMAs} |
19 | 19 | |
20 | 20 | 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 | |
22 | 24 | entries are $k$-subsets of a $kn$-set $X$ (the *symbol-set*), such that |
23 | 25 | each element of $X$ occurs exactly once in each row and exactly once in |
24 | 26 | each column of $A$. (Thus an $(n\times n)/1$ semi-Latin square is the same |
25 | 27 | thing as a Latin square of order $n$.) For extensive useful information on |
26 | 28 | semi-Latin squares, see \URL{http://www.maths.qmul.ac.uk/~rab/sls.html}. |
27 | 29 | |
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$, | |
29 | 33 | with $n\ge2$, in which no 2-subset of the symbol-set is contained in |
30 | 34 | 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/}. | |
32 | 36 | |
33 | 37 | Let $A$ and $B$ be $(n\times n)/k$ semi-Latin squares. We say that |
34 | 38 | $B$ is *(weakly) isomorphic* to $A$ if $B$ can be obtained from $A$ |
64 | 64 | |
65 | 65 | \beginexample |
66 | 66 | 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]]) ];; | |
68 | 68 | gap> designs:=rec(list:=D, pairwiseNonisomorphic:=true);; |
69 | 69 | gap> BlockDesignsToXMLFile("example.xml",designs,[],"example"); |
70 | 70 | \endexample |
100 | 100 | \beginexample |
101 | 101 | gap> BlockDesignsFromXMLFile("example.xml"); |
102 | 102 | 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>", | |
105 | 105 | list := |
106 | 106 | [ |
107 | 107 | rec( blocks := [ [ 1, 2 ], [ 1, 3 ] ], id := "example-0", |
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 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 © 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. 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>=〈(1,2,…,20)〉, 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> 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> D:=BlockDesigns(rec(v:=21,blockSizes:=[4,5], | |
123 | > tSubsetStructure:=rec(t:=2,lambdas:=[1]), | |
124 | > requiredAutSubgroup:=H ));; | |
125 | gap> Length(D); | |
126 | 1 | |
127 | gap> D:=D[1];; | |
128 | gap> BlockSizes(D); | |
129 | [ 4, 5 ] | |
130 | gap> BlockNumbers(D); | |
131 | [ 20, 9 ] | |
132 | gap> Size(AutGroupBlockDesign(D)); | |
133 | 80 | |
134 | gap> Dstar:=TDesignFromTBD(D,2,4);; | |
135 | gap> AllTDesignLambdas(Dstar); | |
136 | [ 105, 20, 3 ] | |
137 | gap> IsSimpleBlockDesign(Dstar); | |
138 | false | |
139 | gap> Size(AutGroupBlockDesign(Dstar)); | |
140 | 80 | |
141 | gap> near_resolutions:=PartitionsIntoBlockDesigns(rec( | |
142 | > blockDesign:=Dstar, | |
143 | > v:=21,blockSizes:=[4], | |
144 | > tSubsetStructure:=rec(t:=0,lambdas:=[5]), | |
145 | > blockIntersectionNumbers:=[[ [0] ]], | |
146 | > requiredAutSubgroup:=SylowSubgroup(H,5) ));; | |
147 | gap> Length(near_resolutions); | |
148 | 2 | |
149 | gap> List(near_resolutions,x->Size(x.autGroup)); | |
150 | [ 5, 20 ] | |
151 | gap> 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>,λ positive integers | |
15 | with <i>t</i> ≤ <i>k</i> ≤ <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>,λ, or a <i>t</i>-(<i>v</i>,<i>k</i>,λ) <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 λ 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>,λ) design is also an <i>s</i>-(<i>v</i>,<i>k</i>,λ<sub><i>s</i></sub>) design | |
27 | for 0 ≤ <i>s</i> ≤ <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">λ<sub><i>s</i></sub>=λ</td><td align="left" class="cl">⎛<br />⎝</td><td nowrap="nowrap" align="center"><i>v</i>−<i>s</i><br /><i>t</i>−<i>s</i><br /></td><td align="left" class="cl">⎞<br />⎠</td><td nowrap="nowrap" align="center">/</td><td align="left" class="cl">⎛<br />⎝</td><td nowrap="nowrap" align="center"><i>k</i>−<i>s</i><br /><i>t</i>−<i>s</i><br /></td><td align="left" class="cl">⎞<br />⎠</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> ≤ <i>k</i> ≤ <i>v</i> , this function returns a length | |
31 | <i>t</i> +1 list whose (<i>s</i>+1)-st element is λ<sub><i>s</i></sub> as defined above, | |
32 | if all the λ<sub><i>s</i></sub> are integers. Otherwise, <code>fail</code> is returned. | |
33 | <p> | |
34 | <pre> | |
35 | gap> 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> ≤ <i>k</i> ≤ <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> TDesignLambdaMin(5,24,8); | |
51 | 1 | |
52 | gap> 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> ≤ <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> ≤ <i>k</i> ≤ <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> ≥ 0, <i>i</i>+<i>j</i> ≤ <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> TDesignLambdas(2,12,4,3); | |
77 | [ 33, 11, 3 ] | |
78 | gap> TDesignIntersectionTriangle(2,12,4,3); | |
79 | [ [ 33, 22, 14 ], [ 11, 8 ], [ 3 ] ] | |
80 | gap> TDesignLambdas(2,12,4,2); | |
81 | fail | |
82 | gap> 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> ≤ <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> ≤ <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> ≤ <i>k</i> ≤ <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> ≥ 0, <i>i</i>+<i>j</i> ≤ <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> 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> 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> ≤ <i>k</i> ≤ <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> TDesignBlockMultiplicityBound(5,16,7,5); | |
140 | 2 | |
141 | gap> TDesignBlockMultiplicityBound(2,36,6,1); | |
142 | 0 | |
143 | gap> TDesignBlockMultiplicityBound(2,36,6,2); | |
144 | 2 | |
145 | gap> TDesignBlockMultiplicityBound(2,15,5,2); | |
146 | 0 | |
147 | gap> TDesignBlockMultiplicityBound(2,15,5,4); | |
148 | 2 | |
149 | gap> 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> ≤ <i>k</i> ≤ <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> ResolvableTDesignBlockMultiplicityBound(5,12,6,1); | |
176 | 1 | |
177 | gap> ResolvableTDesignBlockMultiplicityBound(2,21,7,3); | |
178 | 0 | |
179 | gap> TDesignBlockMultiplicityBound(2,21,7,3); | |
180 | 1 | |
181 | gap> ResolvableTDesignBlockMultiplicityBound(2,12,4,3); | |
182 | 1 | |
183 | gap> 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>−1)…(<i>x</i>−<i>k</i>+1). Let <i>s</i> and <i>t</i> be non-negative | |
200 | integers, with <i>s</i> ≥ <i>t</i>, and let <i>m</i><sub>0</sub>,…,<i>m</i><sub><i>s</i></sub> and | |
201 | λ<sub>0</sub>,…,λ<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>,…,<i>m</i><sub><i>s</i></sub>], | |
203 | [λ<sub>0</sub>,…,λ<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">∑<br /></span><small><i>j</i>=0</small> <br /></td><td nowrap="nowrap" align="center"></td><td align="left" class="cl">⎛<br />⎝</td><td nowrap="nowrap" align="center"><i>t</i><br /><i>j</i><br /></td><td align="left" class="cl">⎞<br />⎠</td><td nowrap="nowrap" align="center"><i>P</i>(−<i>x</i>,<i>t</i>−<i>j</i>)[<i>P</i>(<i>s</i>,<i>j</i>)λ<sub><i>j</i></sub>−</td><td nowrap="nowrap" align="center"><small><i>s</i></small><!--sup--><br /><span class="largerstill">∑<br /></span><small><i>i</i>=<i>j</i></small> <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>,…,<i>m</i><sub><i>s</i></sub>],[λ<sub>0</sub>,…,λ<sub><i>t</i></sub>])· | |
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> ⊆ <i>V</i>, with <i>s</i>=|<i>S</i>|, | |
214 | and for <i>i</i>=0,…,<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> ≤ <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> ≤ <i>s</i>, and suppose that, for <i>j</i>=0…,<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">λ<sub><i>j</i></sub>=1/</td><td align="left" class="cl">⎛<br />⎝</td><td nowrap="nowrap" align="center"><i>s</i><br /><i>j</i><br /></td><td align="left" class="cl">⎞<br />⎠</td><td nowrap="nowrap" align="center"></td><td nowrap="nowrap" align="center"><small></small><!--sup--><br /><span class="largerstill">∑<br /></span><small><i>T</i> ⊆ <i>S</i>,|<i>T</i>|=<i>j</i></small> <br /></td><td nowrap="nowrap" align="center">λ<sub><i>T</i></sub></td></tr></table></td></tr></table>, where λ<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>,…,<i>m</i><sub><i>s</i></sub>],[λ<sub>0</sub>,…,λ<sub><i>t</i></sub>]) | |
219 | is a polynomial with integer coefficients, and <i>B</i>(<i>n</i>) ≥ 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> ∉ {<i>n</i>,<i>n</i>+1,…,<i>n</i>+<i>t</i>−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> x:=Indeterminate(Rationals,1); | |
229 | x_1 | |
230 | gap> m:=[0,0,0,0,0,0,0,1];; | |
231 | gap> lambdavec:=TDesignLambdas(6,14,7,4); | |
232 | [ 1716, 858, 396, 165, 60, 18, 4 ] | |
233 | gap> 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> 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> 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> m:=[0,0,0,0,0,0,0,1];; | |
258 | gap> lambdavec:=TDesignLambdas(6,14,7,4); | |
259 | [ 1716, 858, 396, 165, 60, 18, 4 ] | |
260 | gap> BlockIntersectionPolynomialCheck(m,lambdavec); | |
261 | true | |
262 | gap> m:=[1,0,0,0,0,0,0,1];; | |
263 | gap> 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,…,<i>v</i> }. | |
19 | <p> | |
20 | The first version of this function returns the block design with point-set | |
21 | {1,…,<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,…,<i>v</i> }, and the function returns the | |
25 | block design with point-set {1,…,<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> BlockDesign( 2, [[1,2],[1],[1,2]] ); | |
31 | rec( isBlockDesign := true, v := 2, blocks := [ [ 1 ], [ 1, 2 ], [ 1, 2 ] ] ) | |
32 | gap> 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> 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> 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> 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> 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 := [ <vector space of dimension 1 over GF(2)>, | |
108 | <vector space of dimension 1 over GF(2)>, | |
109 | <vector space of dimension 1 over GF(2)>, | |
110 | <vector space of dimension 1 over GF(2)>, | |
111 | <vector space of dimension 1 over GF(2)>, | |
112 | <vector space of dimension 1 over GF(2)>, | |
113 | <vector space of dimension 1 over GF(2)>, | |
114 | <vector space of dimension 1 over GF(2)>, | |
115 | <vector space of dimension 1 over GF(2)>, | |
116 | <vector space of dimension 1 over GF(2)>, | |
117 | <vector space of dimension 1 over GF(2)>, | |
118 | <vector space of dimension 1 over GF(2)>, | |
119 | <vector space of dimension 1 over GF(2)>, | |
120 | <vector space of dimension 1 over GF(2)>, | |
121 | <vector space of dimension 1 over GF(2)> ] ) | |
122 | gap> 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> ∈ {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−<i>i</i>, where | |
133 | <i>i</i> ∈ {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−<i>i</i>)-(24−<i>i</i>,8−<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−<i>i</i>, where | |
139 | <i>i</i> ∈ {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−<i>i</i>)-(12−<i>i</i>,6−<i>i</i>,1) | |
141 | design. | |
142 | <p> | |
143 | <pre> | |
144 | gap> W24:=WittDesign(24);; | |
145 | gap> AllTDesignLambdas(W24); | |
146 | [ 759, 253, 77, 21, 5, 1 ] | |
147 | gap> DisplayCompositionSeries(AutomorphismGroup(W24)); | |
148 | G (3 gens, size 244823040) | |
149 | | M(24) | |
150 | 1 (0 gens, size 1) | |
151 | gap> W10:=WittDesign(10);; | |
152 | gap> AllTDesignLambdas(W10); | |
153 | [ 30, 12, 4, 1 ] | |
154 | gap> 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> D:=BlockDesign(4,[[1,3],[2,3,4],[3,4]]);; | |
177 | gap> 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> 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> D:=PGPointFlatBlockDesign(2,2,1); | |
195 | rec( isBlockDesign := true, v := 7, | |
196 | pointNames := [ <vector space of dimension 1 over GF(2)>, | |
197 | <vector space of dimension 1 over GF(2)>, | |
198 | <vector space of dimension 1 over GF(2)>, | |
199 | <vector space of dimension 1 over GF(2)>, | |
200 | <vector space of dimension 1 over GF(2)>, | |
201 | <vector space of dimension 1 over GF(2)>, | |
202 | <vector space of dimension 1 over GF(2)> ], | |
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> AllTDesignLambdas(D); | |
206 | [ 7, 3, 1 ] | |
207 | gap> 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 := [ <vector space of dimension 1 over GF(2)>, | |
212 | <vector space of dimension 1 over GF(2)>, | |
213 | <vector space of dimension 1 over GF(2)>, | |
214 | <vector space of dimension 1 over GF(2)>, | |
215 | <vector space of dimension 1 over GF(2)>, | |
216 | <vector space of dimension 1 over GF(2)>, | |
217 | <vector space of dimension 1 over GF(2)> ] ) | |
218 | gap> 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,·.·, 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> D:=BlockDesigns(rec(v:=11,blockSizes:=[5], | |
237 | > 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> AllTDesignLambdas(D); | |
248 | [ 11, 5, 2 ] | |
249 | gap> 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> 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> 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> 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> 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> 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> 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> 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,·.·, 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> D:=BlockDesigns(rec(v:=11,blockSizes:=[5], | |
360 | > 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> AllTDesignLambdas(D); | |
371 | [ 11, 5, 2 ] | |
372 | gap> 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> AllTDesignLambdas(DD); | |
378 | [ 5, 2 ] | |
379 | gap> 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> 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,·.·, 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> D:=BlockDesigns(rec(v:=11,blockSizes:=[5], | |
414 | > 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> AllTDesignLambdas(D); | |
425 | [ 11, 5, 2 ] | |
426 | gap> 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> AllTDesignLambdas(RD); | |
432 | [ 6, 3 ] | |
433 | gap> 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> 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>,λ positive integers with <i>t</i> ≤ <i>v</i>, a <i>t</i>-<strong>wise balanced design</strong>, | |
447 | or a <i>t</i>-(<i>v</i>,<i>K</i>,λ) <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 λ 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>,λ) | |
452 | design (for some set <i>K</i>), and <i>t</i> ≤ <i>k</i> ≤ <i>k</i><sub>1</sub>, where exactly <i>s</i> | |
453 | distinct block-sizes <i>k</i><sub>1</sub> < … < <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,…,<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">⎛<br />⎝</td><td nowrap="nowrap" align="center"><i>k</i><sub><i>i</i></sub>−<i>t</i><br /><i>k</i>−<i>t</i><br /></td><td align="left" class="cl">⎞<br />⎠</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">⎛<br />⎝</td><td nowrap="nowrap" align="center"><i>k</i><sub><i>i</i></sub>−<i>t</i><br /><i>k</i>−<i>t</i><br /></td><td align="left" class="cl">⎞<br />⎠</td><td nowrap="nowrap" align="center">:1 ≤ <i>i</i> ≤ <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>λ) design, | |
463 | that \Aut(<i>D</i>) ⊆ \Aut(<i>D</i><sup>*</sup>), and that if λ = 1 and <i>t</i> < <i>k</i>, | |
464 | then \Aut(<i>D</i>)=\Aut(<i>D</i><sup>*</sup>). | |
465 | <p> | |
466 | <pre> | |
467 | gap> D:=BlockDesigns(rec(v:=10, blockSizes:=[3,4], | |
468 | > 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> PairwiseBalancedLambda(D); | |
479 | 1 | |
480 | gap> 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> 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> IsBlockDesign(5); | |
21 | false | |
22 | gap> 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> IsBinaryBlockDesign( BlockDesign(2,[[1],[1,2],[1,2]]) ); | |
34 | true | |
35 | gap> 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> IsSimpleBlockDesign( BlockDesign(2,[[1],[1,2],[1,2]]) ); | |
47 | false | |
48 | gap> 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> IsConnectedBlockDesign( BlockDesign(2,[[1],[2]]) ); | |
61 | false | |
62 | gap> 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> 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> 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> 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> 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> 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> 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> 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> 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> 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> 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> BlockSizes(D); | |
144 | [ 1, 3 ] | |
145 | gap> 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> ReplicationNumber(BlockDesign(4,[[1],[1,2],[2,3,3],[4,4]])); | |
162 | 2 | |
163 | gap> 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 λ | |
172 | blocks, for some positive constant λ. | |
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 λ such | |
176 | that every pair of distinct points of <var>D</var> is in exactly λ blocks. | |
177 | <p> | |
178 | <pre> | |
179 | gap> D:=BlockDesigns(rec(v:=10, blockSizes:=[3,4], | |
180 | > 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> 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,…,<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> D:=BlockDesign(3,[[1],[1,2,2],[1,2,3],[2],[3]]);; | |
210 | gap> TSubsetLambdasVector(D,0); | |
211 | [ 5 ] | |
212 | gap> TSubsetLambdasVector(D,1); | |
213 | [ 3, 4, 2 ] | |
214 | gap> TSubsetLambdasVector(D,2); | |
215 | [ 3, 1, 1 ] | |
216 | gap> 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> ≥ 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> ≤ <i>k</i> such that <var>D</var> | |
227 | is a <i>t</i>-design, and, for <i>i</i>=1,…,<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>−1)-subset of | |
229 | the point-set of <var>D</var>. The returned result is immutable. | |
230 | <p> | |
231 | <pre> | |
232 | gap> 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 μ of points. | |
242 | <p> | |
243 | If the block design <var>D</var> is affine resolvable, then this function | |
244 | returns its value of μ; 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> P:=PGPointFlatBlockDesign(2,3,1);; # projective plane of order 3 | |
251 | gap> AffineResolvableMu(P); | |
252 | fail | |
253 | gap> A:=ResidualBlockDesign(P,P.blocks[1]);; # affine plane of order 3 | |
254 | gap> 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> D:=DualBlockDesign(AGPointFlatBlockDesign(2,3,1));; | |
35 | gap> 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> 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> D:=DualBlockDesign(AGPointFlatBlockDesign(2,3,1));; | |
62 | gap> 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> 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>×<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>×<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>−<i>NK</i><sup>−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>−<i>k</i><sup>−1</sup><i>L</i>, where <i>I</i> is the <i>v</i>×<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> D:=DualBlockDesign(AGPointFlatBlockDesign(2,3,1));; | |
100 | gap> 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> 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> > 1, let <var>eps</var> be a positive | |
128 | rational number (default: 10<sup>−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>−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> ≤ <i>x</i> ≤ <i>b</i>, <i>b</i>−<i>a</i> ≤ <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′-) 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> ≥ 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>−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 δ<sub>1</sub> ≤ δ<sub>2</sub> ≤ … ≤ δ<sub><i>v</i>−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>−1)/∑<sub><i>i</i>=1</sub><sup><i>v</i>−1</sup>1/δ<sub><i>i</i></sub> (the harmonic mean | |
162 | of the canonical efficiency factors), the <strong>D-efficiency measure</strong> | |
163 | is (∏<sub><i>i</i>=1</sub><sup><i>v</i>−1</sup>δ<sub><i>i</i></sub>)<sup>1/(<i>v</i>−1)</sup> (the geometric mean of | |
164 | the canonical efficiency factors), and the <strong>E-efficiency measure</strong> is | |
165 | δ<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>−1</sup><i>C</i> be as before, | |
169 | and let <i>P</i>:=<i>v</i><sup>−1</sup><i>J</i>, where <i>J</i> is the <i>v</i>×<i>v</i> all-1 matrix. Set | |
170 | <i>M</i>:=(<i>F</i>+<i>P</i>)<sup>−1</sup>−<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> ∈ {1,…,<i>v</i>}, <i>i</i> ≠ <i>j</i>) of | |
173 | 2/(<i>M</i><sub><i>ii</i></sub>+<i>M</i><sub><i>jj</i></sub>−<i>M</i><sub><i>ij</i></sub>−<i>M</i><sub><i>ji</i></sub>). | |
174 | <p> | |
175 | <pre> | |
176 | gap> D:=DualBlockDesign(AGPointFlatBlockDesign(2,3,1));; | |
177 | gap> 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> 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> 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> ≤ <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 α be the least | |
210 | real zero of <var>f</var> such that <i>a</i> ≤ α ≤ <i>b</i> . Then this function | |
211 | returns a list [<i>c</i>,<i>d</i>] of rational numbers, with <i>c</i> ≤ α ≤ <i>d</i> | |
212 | and <i>d</i>−<i>c</i> ≤ <i>eps</i> . Moreover, <i>c</i>=<i>d</i> if and only if α is rational | |
213 | (in which case α = <i>c</i>=<i>d</i>). | |
214 | <p> | |
215 | <pre> | |
216 | gap> x:=Indeterminate(Rationals,1); | |
217 | x_1 | |
218 | gap> f:=(x+3)*(x^2-3); | |
219 | x_1^3+3*x_1^2-3*x_1-9 | |
220 | gap> L:=DESIGN_IntervalForLeastRealZero(f,-5,5,10^(-3)); | |
221 | [ -3, -3 ] | |
222 | gap> L:=DESIGN_IntervalForLeastRealZero(f,-2,5,10^(-3)); | |
223 | [ -14193/8192, -7093/4096 ] | |
224 | gap> List(L,Float); | |
225 | [ -1.73254, -1.73169 ] | |
226 | gap> L:=DESIGN_IntervalForLeastRealZero(f,0,5,10^(-3)); | |
227 | [ 14185/8192, 7095/4096 ] | |
228 | gap> List(L,Float); | |
229 | [ 1.73157, 1.73218 ] | |
230 | gap> L:=DESIGN_IntervalForLeastRealZero(f,0,5,10^(-5)); | |
231 | [ 454045/262144, 908095/524288 ] | |
232 | gap> List(L,Float); | |
233 | [ 1.73204, 1.73205 ] | |
234 | gap> 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,…,<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> D:=PGPointFlatBlockDesign(2,3,1);; # projective plane of order 3 | |
32 | gap> 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> D1:=BlockDesign(3,[[1],[1,2,3],[2]]);; | |
54 | gap> D2:=BlockDesign(3,[[1],[1,2,3],[3]]);; | |
55 | gap> IsIsomorphicBlockDesign(D1,D2); | |
56 | true | |
57 | gap> D3:=BlockDesign(4,[[1],[1,2,3],[3]]);; | |
58 | gap> IsIsomorphicBlockDesign(D2,D3); | |
59 | false | |
60 | gap> # 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> D1:=BlockDesign(3,[[1],[1,2,3],[2]]);; | |
73 | gap> D2:=BlockDesign(3,[[1],[1,2,3],[3]]);; | |
74 | gap> D3:=BlockDesign(4,[[1],[1,2,3],[3]]);; | |
75 | gap> 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 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> DL:=BlockDesigns(rec( | |
141 | > v:=15,blockSizes:=[3], | |
142 | > tSubsetStructure:=rec(t:=2,lambdas:=[1]), | |
143 | > requiredAutSubgroup:= | |
144 | > Group((1,2,3,4,5)(6,7,8,9,10)(11,12,13,14,15))));; | |
145 | gap> List(DL,AllTDesignLambdas); | |
146 | [ [ 35, 7, 1 ], [ 35, 7, 1 ], [ 35, 7, 1 ] ] | |
147 | gap> List(DL,D->Size(AutGroupBlockDesign(D))); | |
148 | [ 20160, 5, 60 ] | |
149 | gap> parclasses:=List(DL,D-> | |
150 | > BlockDesigns(rec( | |
151 | > blockDesign:=D, | |
152 | > v:=15,blockSizes:=[3], | |
153 | > 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> List(parclasses,Length); | |
192 | [ 1, 1, 2 ] | |
193 | gap> List(parclasses,L->List(L,parclass->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>×<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>×<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>×<i>n</i>)/<i>k</i> semi-Latin square <i>A</i>, | |
33 | with <i>n</i> ≥ 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>×<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>×<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,…,<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> ×<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> ≥ 2 and <var>blockintsizes</var> is specified to be <code>[0,1]</code> then | |
87 | the (<i>n</i>×<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 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×4)/<i>k</i> semi-Latin squares for <i>k</i>=1,…,6. (These | |
110 | numbers disagree with P. E. 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> List([1..6],k->Length(SemiLatinSquareDuals(4,k))); # weak | |
115 | [ 2, 10, 40, 164, 621, 2298 ] | |
116 | gap> List([1..6],k->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> 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 := <permutation group of size 72 with 3 generators>, | |
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> DL:=BlockDesigns(rec( | |
132 | > v:=15,blockSizes:=[3], | |
133 | > tSubsetStructure:=rec(t:=2,lambdas:=[1]), | |
134 | > requiredAutSubgroup:= | |
135 | > Group((1,2,3,4,5)(6,7,8,9,10)(11,12,13,14,15))));; | |
136 | gap> List(DL,D->Size(AutGroupBlockDesign(D))); | |
137 | [ 20160, 5, 60 ] | |
138 | gap> PL:=PartitionsIntoBlockDesigns(rec( | |
139 | > blockDesign:=DL[1], | |
140 | > v:=15,blockSizes:=[3], | |
141 | > 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> List(PL,resolution->Size(resolution.autGroup)); | |
194 | [ 168, 168 ] | |
195 | gap> PL:=PartitionsIntoBlockDesigns(rec( | |
196 | > blockDesign:=DL[2], | |
197 | > v:=15,blockSizes:=[3], | |
198 | > tSubsetStructure:=rec(t:=1,lambdas:=[1]))); | |
199 | [ ] | |
200 | gap> PL:=PartitionsIntoBlockDesigns(rec( | |
201 | > blockDesign:=DL[3], | |
202 | > v:=15,blockSizes:=[3], | |
203 | > 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> L:=BlockDesigns(rec(v:=9,blockSizes:=[3], | |
250 | > tSubsetStructure:=rec(t:=2,lambdas:=[1])));; | |
251 | gap> D:=L[1];; | |
252 | gap> MakeResolutionsComponent(D); | |
253 | gap> 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 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 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> D:=[ BlockDesign(3, [[1,2],[1,3]]), | |
65 | > BlockDesign(3, [[1,2],[1,2],[2,3]]) ];; | |
66 | gap> designs:=rec(list:=D, pairwiseNonisomorphic:=true);; | |
67 | gap> 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> BlockDesignsFromXMLFile("example.xml"); | |
101 | rec( | |
102 | infoXML := "<info>\n<software>\n[ DESIGN-1.7, GRAPE-4.8.2, GAPDoc-1.6.2, GAP\ | |
103 | -4.10.1 ]\n</software>\n</info>", | |
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. A. Bailey and P. 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. A. Bailey and P. J. Cameron. | |
11 | <br> Combinatorics of optimal designs. | |
12 | <br> In S. Huczynska, J. D. Mitchell, and C. 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. A. Bailey, P. J. Cameron, P. Dobcsányi, J. P. Morgan, and L. 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. A. Bailey and G. 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. J. Cameron, P. Dobcsányi, J. P. Morgan, and L. 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. J. Cameron and L. 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 Applegate et 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 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 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. P. McSorley and L. 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. 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. 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>⏎ |
0 | 0 | ############################################################################ |
1 | 1 | ## |
2 | ## blockdesign.g Design 1.6 Package Leonard Soicher | |
2 | ## blockdesign.g Design 1.7 Package Leonard Soicher | |
3 | 3 | ## |
4 | 4 | ## |
5 | 5 | # Functions to study, construct and classify (sub)block designs |
7 | 7 | # block designs with given properties. |
8 | 8 | # At present there is limited support for non-binary block designs. |
9 | 9 | # |
10 | # Copyright (C) 2003-2011 Leonard H. Soicher | |
10 | # Copyright (C) 2003-2019 Leonard H. Soicher | |
11 | 11 | # |
12 | 12 | # This program is free software; you can redistribute it and/or modify |
13 | 13 | # it under the terms of the GNU General Public License as published by |
0 | 0 | ############################################################################# |
1 | 1 | ## |
2 | ## blockdesign_io.g Design 1.6 Package Leonard Soicher | |
2 | ## blockdesign_io.g Design 1.7 Package Leonard Soicher | |
3 | 3 | ## |
4 | 4 | ## |
5 | 5 | # The "GAP Expander/Writer" to expand the information about |
10 | 10 | # DTRS external representation XML-format, and to convert these |
11 | 11 | # block designs into GAP-format. |
12 | 12 | # |
13 | # Copyright (C) 2003-2011 Leonard H. Soicher | |
13 | # Copyright (C) 2003-2019 Leonard H. Soicher | |
14 | 14 | # |
15 | 15 | # This program is free software; you can redistribute it and/or modify |
16 | 16 | # 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 | ############################################################################# |