## Preface of GAP 2.4

GAP stands for `Groups, Algorithms and Programming'. The name was chosen to reflect the aim of the system, that is introduced in this manual. Up to this decade the interest of pure mathematicians in computational group theory was stirred by, but also mostly confined to the information that group theoretical software produced on 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, which are gradually getting accepted both as tools for a working group theoretician like standard methods of proof and as worthwhile objects of study like connections between notions expressed in theorems.

GAP is an attempt to meet this interest. It aims at giving its user full access to algorithms and the data structures used by them, allowing critical study as well as modification of existing methods. It intends to releave 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.

In GAP we have tried to achieve this goal by a design which also makes GAP easily portable, even to computers like Atari ST and Amiga, and at the same time will facilitate the maintenance of GAP with the limited resources of an academic environment.

GAP has a small `kernel' (presently less than 200 kByte) written in C, which provides the user with:

- automatic dynamical storage management, which the user has not to bother about in his programming;
- a set of time critical basic functions, e.g. `arithmetic' operations for integers, finite field elements, permutations and words;
- an interpreter for the GAP language, which belongs to the PASCAL family, but, while allowing additional types for group theoretical objects, does not require type declarations;
- a set of programming tools for testing, debugging, and timing algorithms.

The much larger part of GAP is its `library' of group theoretical and other algorithms, which is entirely written in the GAP language. So in contrast to the situation in older group theoretical software the GAP language is both the main implementation language and the user language of the system. So the user can as easily as the original programmer investigate and vary algorithms of the library and add new ones to it, first for his own and eventually for the benefit of all GAP users.

The policy for the further development of GAP is to keep the kernel at roughly its present size, extending the set of basic functions only by very selected ones that have proved to be both of general use and time-critical. In the interest of the possibility to exchange functions written in the GAP language, the kernel has to be maintained in a single place which in the foreseeable future will be Aachen. On the other hand we hope that the design of GAP will allow the library to grow not only by continued work in Aachen but, as any other part of mathematics, by exchange of contributions from many sides. In line with this hope GAP is given away at the conditions that have always been in use between mathematicians, i.e. in particular free of charge except for refund of the cost for the reproduction of the manual and for a floppy or a tape for the code.

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 the authors of this manual, I had the first contact with the Maple system at the EUROCAL meeting in Linz/Austria in 1985. Maple demonstrated to us the feasability of a strong and efficient computer algebra system built from a small kernel with an interpreted library. The discussion of the plan started in the fall in 1985, programming only in the second half of 1986. A first version of GAP was operational by the end of 1986. The system was officially presented at the Oberwolfach meeting in May 1988. This version 2.4 is the first to be given away from Aachen. While this happens, work on a version 3.0 is under way. This will still see some improvements of the kernel, e.g. some presently existing limitations of the size of integers and the number of objects will be removed. There may also be some changes with respect to the use of the datatypes `sequence' and `set'. However, except for these, the interface to the kernel will remain unchanged, while of course we hope to be able to release a number of additions to the library and give some advice on a general format for library functions with version 3.0.

GAP was started as a joint `Diplom' project of four students whose names are hidden in the GAP banner: Johannes Meier, Alice Niemeyer, Werner Nickel and Martin Schönert. While all four have meanwhile finished their `Diplom', further students are presently extending the library in the course of their work for the `Diplom'. Contributions of two of them, Thomas Bischops and Alexander Wegner, are already contained in this version. To all of them I want to express my thanks for their engagement and enthusiasm. Very special thanks however go to Martin Schönert. Not only ows GAP 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 the clarity of the design against my impatience and the temptation of `quick and dirty' solutions.

A first version of this manual was read by Charles C. Sims during his visit to Aachen in June 1988. I want to thank him for his corrections and suggestions.

As indicated above, this is the first version to be released outside Aachen, although we believe to know a number of improvements already. We send this version out hoping for 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, Dec. 19, 1988, Joachim Neubüser.