GAP stands for Groups, Algorithms and Programming. The name was chosen to reflect the aim of the system, which is introduced in this tutorial 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.
There are three further manuals in addition to this one: the ``Reference Manual'' containing detailed documentation of the mathematical functionality of GAP; ``Extending GAP'' containing some tutorial material on various aspects of GAP programming; and ``Programming in GAP 4'' containing detailed documentation of various aspects of the system of interest mainly to programmers.
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 the reference manual in chapter ref:Copyright Notice. 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 ``share packages''. Further details of this can be found in chapter ref:Share Packages in the reference manual, and on our World Wide Web site.
Development of GAP began at Lehrstuhl D für Mathematik, RWTH-Aachen, under the leadership of Prof. Joachim Neubüser in 1985. Version 2.4 was released in 1988 and version 3.1 in 1992. The final full release of GAP 3, version 3.4, was made in 1994. A more detailed account of the motivation and development of these versions of GAP is contained in section From the Preface for GAP 3.4, June 1994, below.
Since then, there have been two dramatic transitions in the GAP project. Firstly, in 1997, Prof. Neubüser retired, and overall coordination of GAP development, now very much an international effort, was transferred to St Andrews. Secondly a complete internal redesign and almost complete rewrite of the system, which was already in progress in Aachen, has been completed. Following five, increasingly usable, beta-test releases, version 4.1 is the first version of the rewritten system to be released without qualification for general use.
For those readers who have used an earlier version of GAP, an overview of the changes from the beta-test releases and from GAP 3 is given in section Changes from Earlier Versions below.
The system that you are getting now consists of four parts.
netscape
.
Together with the system we distribute GAP share packages, which are separate packages which have been written by various groups of people and remain under their responsibility. Some of these packages are written completely in the GAP language, others totally or in part in C (or even other languages). However the functions in these packages can be called directly from GAP and results are returned to GAP.
We operate a refereeing system for such packages, both to ensure the quality of the software we distribute, and to provide recognition for the authors. A number of GAP 4 share packages have already been accepted. Some others that have been submitted for review are available as ``preprints''. More information can be found on our World Wide Web site, see section Further Information about GAP.
In the preface to the first beta release of GAP 4, Joachim Neubüser wrote:
begingroupadvanceleftskip 0.5inadvancerightskip 0.5in
¼ It remains to me to thank all those who have done the huge amount of work that was needed to bring GAP 4 on its way. Many basic ideas for the new concepts as well as most of the new kernel implementation are still due to Martin Schönert before and even in parts after he left Lehrstuhl D für Mathematik. However together with him while he was still working here and continuing after he left, Thomas Breuer and Frank Celler have in long discussions found the way to the concepts and done crucial parts of the new implementations. Many others have worked adapting and rewriting the library, of whom I want to mention in particular Bettina Eick, Alexander Hulpke and Heiko Theissen from the Aachen team but also acknowledge the help lent already for some time from St. Andrews, in particular by Steve Linton.
To these and all others, whom I did not mention explicitly, I want to express my thanks for a yearlong cooperation in a spirit of enthusiasm, dedication and perseverance. I wish the team at St. Andrews a successful continuation of the development and maintenance of GAP in that same spirit and all users fun and success in using GAP.
Aachen, July 18, 1997 hfill Joachim Neubüser endgroup
Before going on to mention more recent contributions, I must express my heartfelt thanks, and I am sure, that of the wider community of GAP developers and users for the immense work that Joachim Neubüser himself has put into GAP over many years. The system would never have existed, let alone grown and prospered as it has, without his clear vision of what he wanted it to become, his ceaseless vigilance for opportunities for development, his championing of the cause of computation in group theory, his high standards which would not admit ``merely adequate'' solutions and his constant encouragement of everyone working on and with the system. We are all the richer for his efforts.
Many people have contributed to GAP development over the last two years. Alexander Hulpke has been a tower of strength, coordinating the work on the library, finding subtle bugs in code whose authors were no longer contactable, supporting the beta testers and, most recently coordinating the process of stabilization and debugging leading up to this release. Thomas Breuer in Aachen has remained our ``conscience'', pointing out to us when we were misusing GAP 4 concepts and so storing up trouble for later. He has also done an enormous amount of work on the support for representation theory in GAP. Others I would like to point out here include Bettina Eick, Volkmar Felsch, Willem de Graaf, Werner Nickel and Andrew Solomon. I should like to thank all of these people, and all the other contributors whom I have not mentioned explicitly for their efforts, their cheerfulness and their perseverance. I should also like to thank all the GAP4 beta-testers, package developers, manual proof readers and others who have given us extremely valuable and positive feedback.
GAP development in St Andrews has been financially supported by the Engineering and Physical Sciences Research Council, the Leverhulme Trust, the European Commission (ESPRIT programme), the Royal Society of Edinburgh and the British Council, to all of whom we are very grateful. Development also takes place at other centres with support from other funding bodies.
It finally remains for me to wish you all pleasure and success in using GAP, and to invite your constructive comment and criticism.
St Andrews 26 July 1999hfill Steve Linton
1.1 Changes from Earlier Versions
The main changes from the final beta-test release GAP 4 beta 5 are in the documentation and in performance, both of which are much improved and in the fixing of many bugs. The installation process has also been improved a little, and there are some new algorithms, especially in the areas of semigroups and finitely-presented groups. As far as we know any programs that worked with 4 beta 5 should still work in GAP 4.1.
The changes since the final release of GAP 3 (version 3.4.4) are much more wide-ranging. The general philosophy of the changes in two-fold. Firstly, many assumptions in the design of GAP 3 revealed its authors' primary interest in group theory, and indeed in finite group theory. Although much of the GAP 4 library is concerned with groups, the basic design now allows extension to other algebraic structures, as witnessed by the inclusion of substantial bodies of algorithms for computation with semigroups and Lie algebras. Secondly, as the scale of the system, and the number of people using and contributing to it has grown, some aspects of the underlying system have proved to be restricting, and these have been improved as part of comprehensive re-engineering of the system. This has included the new method selection system, which underpins the library, and a new, much more flexible, share package interface.
Details of these changes can be found in chapter Migrating to GAP 4 of this manual. It is perhaps worth mentioning a few points here.
Firstly, much remains unchanged, from the perspective of the mathematical user:
A number of visible aspects have changed:
Behind the scenes, much has changed:
A very few features of GAP 3 are not yet available in GAP 4.
crystcat
, which has been
submitted for refereeing and is distributed with this release as a
``preprint''.
gap-trouble
.
1.2 From the Preface for GAP 3.4, June 1994
GAP stands for Groups, Algorithms and Programming. The name was chosen to reflect the aim of the system, which is introduced in this manual.
Until well into the eighties the interest of pure mathematicians in computational group theory was stirred by, but in most cases also confined to the information that was produced by group theoretical software for their special research problems -- and hampered by the uneasy feeling that one was using black boxes of uncontrollable reliability. However the last years have seen a rapid spread of interest in the understanding, design and even implementation of group theoretical algorithms. These are gradually becoming accepted both as standard tools for a working group theoretician, like certain methods of proof, and as worthwhile objects of study, like connections between notions expressed in theorems.
GAP was started as an attempt to meet this interest. Therefore a primary design goal has been to give its user full access to algorithms and the data structures used by them, thus allowing critical study as well as modification of existing methods. We also intend to relieve the user from unwanted technical chores and to assist him in the programming, thus supporting invention and implementation of new algorithms as well as experimentation with them.
We have tried to achieve these goals by a design which in addition makes GAP easily portable, even to computers such as Atari ST and Amiga, and at the same time facilitates the maintenance of GAP with the limited resources of an academic environment.
While I had felt for some time rather strongly the wish for such a truly open system for computational group theory, the concrete idea of GAP was born when, together with a larger group of students, among whom were Johannes Meier, Werner Nickel, Alice Niemeyer, and Martin Schönert who eventually wrote the first version of GAP, I had my first contact with the Maple system at the EUROCAL meeting in Linz/Austria in 1985. Maple demonstrated to us the feasibility of a strong and efficient computer algebra system built from a small kernel, with an interpreted library of routines written in a problem-adapted language. The discussion of the plan of a system for computational group theory organized in a similar way started in the fall of 1985, programming only in the second half of 1986. A first version of GAP was operational by the end of 1986. The system was first presented at the Oberwolfach meeting on computational group theory in May 1988. Version 2.4 was the first officially to be given away from Aachen starting in December 1988. The strong interest in this version, in spite of its still rather small collection of group theoretical routines, as well as constructive criticism by many colleagues, confirmed our belief in the general design principles of the system. Nevertheless over three years had passed until in April 1992 version 3.1 was released, which was followed in February 1993 by version 3.2, in November 1993 by version 3.3 and is now in June 1994 followed by version 3.4.
A main reason for the long time between versions 2.4 and 3.1 and the fact that there had not been intermediate releases was that we had found it advisable to make a number of changes to basic data structures until with version 3.1 we hoped to have reached a state where we could maintain upward compatibility over further releases, which were planned to follow much more frequently. Both goals have been achieved over the last two years. Of course the time has also been used to extend the scope of the methods implemented in GAP. A rough estimate puts the size of the program library of version 3.4 at about sixteen times the size of that of version 2.4, while for version 3.1 the factor was about eight. Compared to GAP 3.2, which was the last version with major additions, new features of GAP 3.4 include the following:
¼
GAP was started as a joint Diplom project of four students whose names have already been mentioned. Since then many more finished Diplom projects have contributed to GAP as well as other members of Lehrstuhl D and colleagues from other institutes. Their individual contributions to the programs and to the manual are documented in the respective files. To all of them as well as to all who have helped proofreading and improving this manual I want to express my thanks for their engagement and enthusiasm as well as to many users of GAP who have helped us by pointing out deficiencies and suggesting improvements. Very special thanks however go to Martin Schönert. Not only does GAP owe many of its basic design features to his profound knowledge of computer languages and the techniques for their implementation, but in many long discussions he has in the name of future users always been the strongest defender of clarity of the design against my impatience and the temptation for ``quick and dirty'', solutions.
Since 1992 the development of GAP has been financially supported by the Deutsche Forschungsgemeinschaft in the context of the Forschungsschwerpunkt ``Algorithmische Zahlentheorie und Algebra''. This very important help is gratefully acknowledged.
As with the previous versions we send this version out hoping for further feedback of constructive criticism. Of course we ask to be notified about bugs, but moreover we shall appreciate any suggestion for the improvement of the basic system as well as of the algorithms in the library. Most of all, however, we hope that in spite of such criticism you will enjoy working with GAP.
Aachen, June 1.,1994, hfill Joachim Neubüser.
1.3 Further Information about GAP
Information about GAP is best obtained from the GAP Web pages that you find on:
http://www-gap.dcs.st-and.ac.uk/gap
and its mirrors at:
http://www.math.rwth-aachen.de/~GAP http://www.ccs.neu.edu/mirrors/GAP and http://wwwmaths.anu.edu.au/research.groups/algebra/GAP/www/
There you will find, amongst other things
gap-forum
mailing
list, formatted for reading with a Web browser, and indexed for
searching.
I would particularly ask you to note five things:
gap-trouble@dcs.st-and.ac.uk
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.
gap@dcs.st-and.ac.uk
to which we ask you send a brief message
when you install GAP.
GAP 4 manual