1 Preface Welcome to GAP. This is one of three manuals documenting the core part of GAP, the other being the GAP Tutorial . and the document called GAP - Changes from Earlier Versions . This preface serves not only to introduce The GAP Reference Manual, but also as an introduction to the whole system. GAP stands for Groups, Algorithms and Programming. The name was chosen to reflect the aim of the system, which is introduced in this reference manual. Since that choice, the system has become somewhat broader, and you will also find information about algorithms and programming for other algebraic structures, such as semigroups and algebras. This manual, the GAP reference manual contains the official definitions of GAP functions. It should contain all the information needed to use GAP, and is not intended to be read cover-to-cover. To get started a new user may first look at parts of the GAP Tutorial . A lot of the functionality of the system and a number of contributed extensions are provided as GAP packages which are developed independently of the core part of GAP and can be loaded into a GAP session. Each package comes with a its own manual which is also available through the GAP help system. This manual is divided into chapters, sections and subsections. Chapter 2 describes the help system, which provides access to all the manuals from a running GAP session. Chapter 3 gives technical advice for running GAP. Chapter 4 introduces the GAP language, and the next chapters deal with the environment provided by GAP for the user. These are followed by the main bulk of chapters which are devoted to the various mathematical structures that GAP can handle. Subsequent sections of this preface explain the structure of the system and provide copyright and licensing information. 1.1 The GAP System GAP is a free, open and extensible software package for computation in discrete abstract algebra. The terms free and open describe the conditions under which the system is distributed -- in brief, it is free of charge (except possibly for the immediate costs of delivering it to you), you are free to pass it on within certain limits, and all of the workings of the system are open for you to examine and change. Details of these conditions can be found in Section 'Reference: Copyright and License'. The system is extensible in that you can write your own programs in the GAP language, and use them in just the same way as the programs which form part of the system (the library). Indeed, we actively support the contribution, refereeing and distribution of extensions to the system, in the form of GAP packages. Further details of this can be found in chapter 'Reference: Using GAP Packages', and on our website. Development of GAP began at Lehrstuhl D für Mathematik, RWTH-Aachen, under the leadership of Joachim Neubüser in 1985. Version 2.4 was released in 1988 and version 3.1 in 1992. In 1997 coordination of GAP development, now very much an international effort, was transferred to St Andrews. A complete internal redesign and almost complete rewrite of the system was completed over the following years and version 4.1 was released in July 1999. A sign of the further internationalization of the project was the GAP 4.4 release in 2004, which has been coordinated from Colorado State University, Fort Collins. More information on the motivation and development of GAP to date, can be found on our Web pages in a section entitled Release history and Prefaces. For those readers who have used an earlier version of GAP, an overview of the changes from GAP 4.4 and a brief summary of changes from earlier versions is given in a separate manual 'Changes: Changes between GAP 4.4 and GAP 4.5'. The system that you are getting now consists of a core system and a number of packages. The core system consists of four main parts. 1 A kernel, written in C, which provides the user with  automatic dynamic storage management, which the user needn't bother about in his programming;  a set of time-critical basic functions, e.g. arithmetic, operations for integers, finite fields, permutations and words, as well as natural operations for lists and records;  an interpreter for the GAP language, an untyped imperative programming language with functions as first class objects and some extra built-in data types such as permutations and finite field elements. The language supports a form of object-oriented programming, similar to that supported by languages like C++ and Java but with some important differences.  a small set of system functions allowing the GAP programmer to handle files and execute external programs in a uniform way, regardless of the particular operating system in use.  a set of programming tools for testing, debugging, and timing algorithms.  a read-eval-view style user interface. 2 A much larger library of GAP functions that implement algebraic and other algorithms. Since this is written entirely in the GAP language, the GAP language is both the main implementation language and the user language of the system. Therefore the user can as easily as the original programmers investigate and vary algorithms of the library and add new ones to it, first for own use and eventually for the benefit of all GAP users. 3 A library of group theoretical data which contains various libraries of groups, including the library of small groups (containing all groups of order at most 2000, except those of order 1024) and others. Large libraries of ordinary and Brauer character tables and Tables of Marks are included as packages. 4 The documentation. This is available as on-line help, as printable files in PDF format and as HTML for viewing with a Web browser. Also included with the core system are some test files and a few small utilities which we hope you will find useful. GAP packages are self-contained extensions to the core system. A package contains GAP code and its own documentation and may also contain data files or external programs to which the GAP code provides an interface. These packages may be loaded into GAP using the LoadPackage (Reference: LoadPackage) command, and both the package and its documentation are then available just as if they were parts of the core system. Some packages may be loaded automatically, when GAP is started, if they are present. Some packages, because they depend on external programs, may only be available on the operating systems where those programs are available (usually UNIX). You should note that, while the packages included with this release are the most recent versions ready for release at this time, new packages and new versions may be released at any time and can be easily installed in your copy of GAP. With GAP there are two packages (the library of ordinary and Brauer character tables, and the library of tables of marks) which contain functionality developed from parts of the GAP core system. These have been moved into packages for ease of maintenance and to allow new versions to be released independently of new releases of the core system. The library of small groups should also be regarded as a package, although it does not currently use the standard package mechanism. Other packages contain functionality which has never been part of the core system, and may extend it substantially, implementing specific algorithms to enhance its capabilities, providing data libraries, interfaces to other computer algebra systems and data sources such as the electronic version of the Atlas of Finite Group Representations; therefore, installation and usage of packages is recommended. Further details about GAP packages can be found in chapter 'Reference: Using GAP Packages', and on the GAP website here: https://www.gap-system.org/Packages/packages.html. 1.2 Authors and Maintainers GAP is the work of very many people, many of whom still maintain parts of the system. A complete list of authors, and an approximation to the current list of maintainers can be found on the GAP World Wide Web site at https://www.gap-system.org/Contacts/People/authors.html and https://www.gap-system.org/Contacts/People/modules.html. All GAP packages have their own authors and maintainers. It should however be noted that some packages provide interfaces between GAP and an external program, a copy of which is included for convenience, and that, in these cases, we do not claim that the package authors or maintainers wrote, or maintain, this external program. Similarly, the system and some packages include large data libraries that may have been computed by many people. We try to make clear in each case what credit is attributable to whom. We have, for some time, operated a refereeing system for contributed packages, both to ensure the quality of the software we distribute, and to provide recognition for the authors. We now consider this to be a refereeing system for modules, and we would note, in particular that, although it does not use the standard package interface, the library of small groups has been refereed and accepted on exactly the same basis as the accepted packages. We also include with this distribution a number of packages which have not (yet) gone through our refereeing process. Some may be accepted in the future, in other cases the authors have chosen not to submit them. More information can be found on our World Wide Web site (see Section 1.5). 1.3 Acknowledgements Very many people have worked on, and contributed to, GAP over the years since its inception. On our Web site you will find the prefaces to the previous releases, each of which acknowledges people who have made special contributions to that release. Even so, it is appropriate to mention here Joachim Neubüser whose vision of a free, open and extensible system for computational algebra inspired GAP in the first place, and Martin Schönert, who was the technical architect of GAP 3 and GAP 4. 1.4 Copyright and License Copyright © (1987-2018) by the GAP Group, incorporating the Copyright © 1999, 2000 by School of Mathematical and Computational Sciences, University of St Andrews, North Haugh, St Andrews, Fife KY16 9SS, Scotland being the Copyright © 1992 by Lehrstuhl D für Mathematik, RWTH, 52056 Aachen, Germany, transferred to St Andrews on July 21st, 1997. except for files in the distribution, which have an explicit different copyright statement. In particular, the copyright of packages distributed with GAP is usually with the package authors or their institutions. GAP is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. For details, see the file GPL in the etc directory of the GAP distribution or see http://www.gnu.org/licenses/gpl.html. If you obtain GAP please send us a short notice to that effect, e.g., an e-mail message to the address mailto:support@gap-system.org. This helps us to keep track of the number of GAP users. If you publish a mathematical result that was partly obtained using GAP, please cite GAP, just as you would cite another paper that you used (see below for sample citation). Also we would appreciate if you could inform us about such a paper, which we will add to the GAP bibliography (https://www.gap-system.org/Doc/Bib/bib.html). Specifically, please refer to  [GAP] The GAP Group, GAP - Groups, Algorithms, and Programming,  Version 4.8.10; 2018 (https://www.gap-system.org)  You are permitted to modify and redistribute GAP, but you are not allowed to restrict further redistribution. That is to say proprietary modifications will not be allowed. We want all versions of GAP to remain free. If you modify any part of GAP and redistribute it, you must supply a README document. This should specify what modifications you made in which files. We do not want to take credit or be blamed for your modifications. Of course we are interested in all of your modifications. In particular we would like to see bug-fixes, improvements and new functions. So again we would appreciate it if you would inform us about all modifications you make. In addition to the general copyright for GAP set forth above, the following terms apply to the versions of GAP for Windows. The executable of GAP for Windows that we distribute was compiled with the gcc compiler supplied with Cygwin installation (http://cygwin.com/). The GNU C compiler is Copyright © 2010 Free Software Foundation, Inc. under the terms of the GNU General Public License (GPL). The Cygwin API library is also covered by the GNU GPL. The executable we provide is linked against this library (and in the process includes GPL'd Cygwin glue code). This means that the executable falls under the GPL too, which it does anyhow. The cyggcc_s-1.dll, cygncurses-10.dll, cygncursesw-10.dll, cygpanel-10.dll, cygpopt-0.dll, cygreadline7.dll, cygstart.exe, cygwin1.dll, libW11.dll, mintty.exe, rxvt.exe and regtool.exe are taken unmodified from the Cygwin distribution. They are copyright by RedHat Software and released under the GPL. For more information on Cygwin, see http://www.cygwin.com. Please contact mailto:support@gap-system.org if you need further information. 1.5 Further Information about GAP Information about GAP is best obtained from the GAP website https://www.gap-system.org There you will find, amongst other things  directions to the sites from which you can download the current GAP distribution, all accepted and deposited GAP packages, and a selection of other contributions.  the GAP manual and an archive of the gap-forum mailing list, formatted for reading with a Web browser, and indexed for searching.  information about GAP developers, and about the email addresses available for comment, discussion and support. We would particularly ask you to note the following things:  The GAP Forum – an email discussion forum for comments, discussions or questions about GAP. You must subscribe to the list before you can post to it, see the website for details. In particular we will announce new releases in this mailing list.  The email address mailto:support@gap-system.org to which you are asked to send any questions or bug reports which do not seem likely to be of interest to the whole GAP Forum. Please give a (short, if possible) self-contained excerpt of a GAP session containing both input and output that illustrates your problem (including comments of why you think it is a bug) and state the type of the machine, operating system, (compiler used, if UNIX/Linux) and the version of GAP you are using (the first line after the GAP 4 banner starting GAP, Version 4...).  We also ask you to send a brief message to mailto:support@gap-system.org when you install GAP.  The correct form of citation of GAP, which we ask you use whenever you publish scientific results obtained using GAP. It finally remains for us to wish you all pleasure and success in using GAP, and to invite your constructive comment and criticism. The GAP Group, 15-Jan-2018