## From the Preface of GAP 4.B.1

[*The preface started with a copy of the preface for GAP 3.4.3 as a reference for the previous state.*]

### Preface for the first beta release of GAP 4

The transition from GAP 3.4 which got its presumably last update 3.4.4 in April this year to this present first beta release GAP 4.B.1 of GAP 4 marks a major step in the system design of GAP, similar in importance to the step from GAP 2.4 to GAP 3.1 in April 1992 on which I comment in my preface to GAP 3.4 of June 1994. However in contrast to the situation in 1992 we hope that the changes will be much less bothering to the majority of the GAP users this time. Let me first talk about some reasons and background for developing GAP 4 and then briefly sketch what remains and what changes.

The planning of GAP 4 started already at the time of the release of GAP 3.4 (Summer 1994) and its development has been a major reason for the fact that since then only updates (up to GAP 3.4.4) but no new releases of GAP 3 have come out. Also a number of new algorithms have been implemented in Aachen anticipating GAP 4 and hence have not become generally available yet.

There were three major reasons for the development of GAP 4:

- There has been a growing demand to implement new mathematical structures in GAP (Lie algebras are just one example). However GAP 3 was not really designed for such tasks.
- The number and diversity of (sometimes competing) algorithmic methods is growing rapidly. We definitely want to maintain the principle that the user should be able to control what methods are used. However, the growing complexity of the interrelation of algorithms makes it mandatory to have also a 'method selection' mechanism which controls the choice between different possibilities to proceed within a GAP function, that is at least partially guided by already computed knowledge about the objects under investigation.
- While the two points mentioned above have caused 'visible' changes from GAP 3 to GAP 4, in this transition also important changes have taken place 'behind the scene'. There are e.g. improvements of the storage management and function calls, and last not least a compiler from GAP 4 to C is part of this beta release.

So regarding system aspects let's briefly sketch:

What is left unchanged?

- The syntax of that part of the GAP language that most users need investigating mathematical problems.
- The great majority of function names.
- Data libraries and the access to them.

What has 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. E.g. 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.

What is new?

- A whole machinery for the definition of new structures.
- A hopefully clearer separation of aspects of knowledge about the mathematical objects that GAP handles by the introduction of the concepts of attributes, families, categories, and representations.
- A number of new structures, such as Lie algebras.

Then to the mathematical functionality provided by GAP 4 in comparison to GAP 3:

- Almost all of the program library of GAP 3 has been transferred to GAP 4. Some of this had just to be adapted to the new features (which in itself has been a huge job in view of the size of the program library), but for quite a few tasks the opportunity has been used to implement new and more efficient algorithms - notably so e.g. for permutation groups and polycyclic groups.
- A number of new algorithms have been implemented for which the features of GAP 4 proved more adequate or even necessary and which are now made public in GAP for the first time.
- One main deficiency of the present beta release is that the meanwhile large library of share packages of GAP 3 has not yet been transferred.

The other main deficiency is that there is not yet a complete manual for GAP 4.

It is intended to provide eventually at least four books as parts of the manual. The first and second are intended for people who want to use GAP "as is". Books 3 and 4 on the other hand are meant for people who want to extend GAP 4 by introducing new structures. Books 1 and 3 are tutorials for the respective purpose while Books 2 and 4 are the corresponding reference manuals.

Of these four books a good deal of Books 1 and 3, i.e. the tutorial parts, are provided with this release, while there are only rudimentary parts of books 2 and 4 available. For people already familiar with GAP 3 the chapter "Migrating to GAP 4" in the first book may be particularly helpful.

There have been (weekly changing) alpha test versions of GAP 4 since December 1996, and a number of specially experienced GAP users in addition to the GAP teams at Aachen and St. Andrews have used these and provided helpful criticism and suggestions. It is envisaged that there will be new beta releases from now on about every couple of months until an official version GAP 4.1 can be released next year. It is hoped that these further beta releases will gradually provide the missing parts mentioned above as well as further enhancements. However, since the date of the official handover of GAP from Aachen to St. Andrews has now been fixed to be July 21, 1997, this further development will happen under the responsibility of St. Andrews.

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 fuer 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 lended 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 Joachim Neubüser