1 Preface

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.

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.
  -
support for the time critical parts of the new GAP4 method selection system.
  -
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.

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 already contains various libraries of groups, large libraries of ordinary and Brauer character tables, including all of the Cambridge Atlas of Finite Groups and Atlas of Brauer Characters, a library of tables of marks, a library of small groups (containing all groups of order at most 1000, except those of order 512) and others.

4.
The documentation. This is available as files that can either be used for on-line help or processed for printing with TeX or into HTML for viewing with a browser such as 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

Sections

  1. Changes from Earlier Versions
  2. From the Preface for GAP 3.4, June 1994
  3. Further Information about GAP

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:

-
The syntax of that part of the GAP language that most users need for investigating mathematical problems.

-
The great majority of function names.

-
Data libraries and the access to them. enditems

A number of visible aspects have changed:

-
Some function names that need finer specifications now that there are more structures available in GAP.

-
The access to information already obtained about a mathematical structure. In GAP 3 such information about a group could be looked up by directly inspecting the group record, whereas in GAP 4 functions must be used to access such information.

Behind the scenes, much has changed:

-
A new kernel, with improvements in memory management and in the language interpreter, as well as new features such as saving of workspaces and the possibility of compilation of GAP code into C.

-
A new structure to the library, based upon a new type and method selection system, which is able to support a broader range of algebraic computation and to make the structure of the library simpler and more modular.

-
New and faster algorithms in many mathematical areas.

-
Data structures and algorithms for new mathematical objects, such as algebras and semigroups.

-
A new and more flexible structure for the GAP installation and documentation, which means, for example, that a share package and its documentation can be installed and be fully usable without any changes to the GAP system.

A very few features of GAP 3 are not yet available in GAP 4.

-
Only a few of the GAP 3 share packages have yet been converted for use with GAP 4 (although several new packages are available only in GAP 4).

-
The Galois group determination algorithms which were implemented in the GAP 3 library are not present in GAP 4.

-
The algorithms for the factorization of polynomials over algebraic number fields which were implemented in the GAP 3 library are not present in GAP 4.

-
The library of crystallographic groups which was present in GAP 3 is now part of a share package crystcat, which has been submitted for refereeing and is distributed with this release as a ``preprint''.

-
The library of irreducible maximal finite integral matrix groups is not yet available.

-
The p-quotient and soluble quotient algorithms are implemented in the GAP 4 library, but those implementations are not yet described in the documentation. If you have a pressing need to use them, please contact 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

-
directions to the FTP sites from which you can download the current GAP distribution, any bugfixes, all accepted share 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.
-
advance information about and copies of presentations from various GAP workshops and events which take place from time to time

I would particularly ask you to note five things:

-
Any bugfixes which may have been made since this release.
-
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 Web page for details.
-
The email address 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.
-
The email address gap@dcs.st-and.ac.uk to which we ask you send a brief message when you install GAP.
-
The correct form of citation of GAP, which we ask you use whenever you publish scientific results obtained using GAP.

[Top] [Up] [Next] [Index]

GAP 4 manual
July 1999