  
  [1XA Development[0X
  
  
  [1XA.1 Why was [5Xhomalg[1X discontinued in [5XMaple[1X?[0X
  
  The  original implementation of [5Xhomalg[0m in [5XMaple[0m by Daniel Robertz and myself
  hit  several walls. The speed of the Gröbner basis routines in [5XMaple[0m was the
  smallest  issue.  The  rising  complexity  of data structures for high level
  algorithms  (bicomplexes, functors, spectral sequences, ...) became the main
  problem.  We  very  much  felt  the  need for an object-oriented programming
  language,  a  language that allows defining complicated mathematical objects
  carrying  properties  and  attributes  and  even containing other objects as
  subobjects.
  
  As  we  were  pushed to look for an alternative to [5XMaple[0m, our wish list grew
  even further. Section [14XA.2[0m is a summary of this wish list.
  
  
  [1XA.2 Why [5XGAP4[1X?[0X
  
  
  [1XA.2-1 [5XGAP[1X is free and open software[0X
  
  In 1993 J. Neubüser addressed the necessity of free software in mathematics:
  
  "You can read Sylow's Theorem and its proof in Huppert's book in the library
  without  even  buying  the book and then you can use Sylow's Theorem for the
  rest  of  your  life free of charge, but - and for understandable reasons of
  getting funds for the maintenance, the necessity of which I have pointed out
  [...]  -  for  many  computer  algebra  systems license fees have to be paid
  regularly  for the total time of their use. In order to protect what you pay
  for,  you  do  not get the source, but only an executable, i.e. a black box.
  You  can  press  buttons  and you get answers in the same way as you get the
  bright  pictures  from  your  television set but you cannot control how they
  were made in either case. With this situation two of the most basic rules of
  conduct in mathematics are violated. In mathematics information is passed on
  free  of charge and everything is laid open for checking. Not applying these
  rules  to  computer  algebra systems that are made for mathematical research
  [...]  means  moving in a most undesirable direction. Most important: Can we
  expect  somebody  to believe a result of a program that he is not allowed to
  see?  [...] And even: If O'Nan and Scott would have to pay a license fee for
  using  an  implementation  of their ideas about primitive groups, should not
  they  in  turn  be entitled to charge a license fee for using their ideas in
  the implementation?"
  
  I had the pleasure of being one of his students.
  
  The  detailed  copyright for [5XGAP[0m can found on the [5XGAP[0m homepage under Start >
  Download > Copyright.
  
  
  [1XA.2-2 [5XGAP[1X has an area of expertise[0X
  
  Not  only does [5XGAP[0m have the potential of natively supporting a wide range of
  mathematical  structures,  but finite groups and their representation theory
  are already an area of expertise. So there are at least some areas where one
  does not need to start from scratch.
  
  But one could argue that rings are more central for homological algebra than
  finite  groups,  and  that [5XGAP4[0m, as for the time when the [5Xhomalg[0m project was
  shaping, does not seriously support important rings in a manner that enables
  homological  computations.  This drawback would favor, for example, [5XSingular[0m
  (with  its  subsystem  [5XPlural[0m)  over  [5XGAP4[0m.  Point  [14XA.2-3[0m indicates how this
  drawback was overcome in a way, that even gave the lead back to [5XGAP4[0m.
  
  One  of my future plans for the [5Xhomalg[0m project is to address moduli problems
  in algebraic geometry (favorably via orbifold stacks), where discrete groups
  (and  especially  finite  groups)  play  a  central  role. As of the time of
  writing  these  lines,  discrete  groups,  finite  groups, and orbifolds are
  already  in  the  focus  of  part  of  the project: The package [5XSCO[0m by Simon
  Görtzen  to  compute  the  cohomology  of orbifolds is part of the currently
  available [5Xhomalg[0m project.
  
  For  the remaining points the choice of [5XGAP4[0m as the programming language for
  developing [5Xhomalg[0m was unavoidable.
  
  
  [1XA.2-3 [5XGAP4[1X can communicate[0X
  
  With  the excellent [5XIO[0m package of Max Neunhöffer [5XGAP4[0m is able to communicate
  in  an  extremely  efficient  way  with  the  outer  world via bidirectional
  streams. This allows [5Xhomalg[0m to delegate things that cannot be done in [5XGAP[0m to
  an external system such as [5XSingular[0m, [5XSage[0m, [5XMacaulay2[0m, [5XMAGMA[0m, or [5XMaple[0m.
  
  
  [1XA.2-4 [5XGAP4[1X is a [13Xmathematical[1X object-oriented programming language[0X
  
  The   object-oriented  programming  philosophy  of  [5XGAP4[0m  was  developed  by
  mathematicians  who  wanted  to handle complex mathematical objects carrying
  [13Xproperties[0m  and  [13Xattributes[0m,  as  often encountered in algebra and geometry.
  [5XGAP4[0m  was thus designed to address the needs of [13Xmathematical[0m object-oriented
  programming  more  than  any other language designed by computer scientists.
  This was primarily achieved by the advanced [13Xmethod selection[0m techniques that
  very much resemble the mathematical way of thinking.
  
  Unlike the common object-oriented programming languages, methods in [5XGAP4[0m are
  not  bound to objects but to operations. In particular, one can also install
  methods  that depend on two or more arguments. The index of a subgroup is an
  easy example of an operation illustrating this. While it would be sufficient
  to  bind  a  method  for  computing  the  order  of  a  group  to the object
  representing the group, it is not clear what to do with the index, since its
  definition  involves  two objects: a group G and a subgroup U. Note that the
  index of U in a subgroup of G containing U might also be of interest. Things
  become  even  more  complicated  when  the  arguments  of  the operation are
  unrelated objects. Moreover, binding methods to operations makes it possible
  for  the  programming  language  to  support the installation of one or more
  methods  for  the  same  operation, depending on already known properties or
  attributes of the involved objects.
  
  Moreover   [5XGAP4[0m   supports   so-called  [13Ximmediate  and  true  methods[0m.  This
  considerably  simplifies  teaching  theorems to the computer. For example it
  takes  one  line  of  code to teach [5XGAP4[0m that a reflexive left module over a
  ring  with  left  global dimension less or equal to two is projective. These
  logical  implications  are installed globally and [5XGAP4[0m immediately uses them
  as  soon as the respective assumptions are fulfilled. This mechanism enables
  [5XGAP4[0m  to  draw arbitrary long lines of conclusions. The more one knows about
  the  objects  involved  in  the  computation  the more specialized efficient
  algorithms  can  be  utilized,  while  other  computations can be completely
  avoided.  [5Xhomalg[0m  is equipped with plenty of logical implications for rings,
  matrices, modules, morphisms, and complexes.
  
  When  all  these  features  become relevant to what you want to do, there is
  hardly an alternative to [5XGAP4[0m.
  
  
  [1XA.2-5 [5XGAP4[1X packages are easily extendible[0X
  
  Being able to install several methods for a single operation (--> [14XA.2-4[0m) has
  the  additional  advantage of making [5XGAP4[0m packages easily extendible. If you
  have  an  algorithm  that,  in a special case, performs better than existing
  algorithms  you  can  install  it  as a method which gets triggered when the
  special  case  occurs.  You  don't  need to break existing code to insert an
  additional  [10Xelif[0m  section contributing to an increasing unreadability of the
  code.  Even  better,  you don't even need to know [13Xanything[0m about the code of
  other  existing  methods.  In  addition to that, you can add (maybe missing)
  properties  and  attributes (along with methods to compute them) to existing
  objects.
  
  
  [1XA.3 Why not [5XSage[1X?[0X
  
  Although  the  [5Xpython[0m-based [5XSage[0m fulfills most of the above requirements, it
  was  primarily  the points expressed in [14XA.2-4[0m that finally favored [5XGAP4[0m over
  [5XSage[0m:  The  object-orientedness  of  [5Xpython[0m,  although very modern, does not
  cover  the  needs of the [5Xhomalg[0m package. At this place I would like to thank
  William  Stein  for the helpful discussion about [5XSage[0m during the early stage
  of  developing [5Xhomalg[0m, and to Max Neunhöffer who explained me the advantages
  of the object-oriented programming in [5XGAP4[0m.
  
  
  [1XA.4 How does [5Xhomalg[1X compare to [5XSage[1X?[0X
  
  In what follows [5Xhomalg[0m often refers to the whole [5Xhomalg[0m project.
  
  
  [1XA.4-1 They differ in objectives and scale[0X
  
  First  of all, [5XSage[0m is a huge project, that, among other things, is intended
  to  replace  commercial, general purpose computer algebra systems like [5XMaple[0m
  and  [5XMathematica[0m.  So  while  [5XSage[0m  targets  (a growing number of) different
  fields  of  computer  algebra,  [5Xhomalg[0m  only  focuses  on  homological,  and
  hopefully in the near future also homotopical techniques (applicable to some
  of  these  different fields). The two projects simply follow different goals
  and are different in scale.
  
  
  [1XA.4-2 They differ in the programming language[0X
  
  [5XSage[0m  is based on [5Xpython[0m and the [5XC[0m-extension [5Xcython[0m while [5Xhomalg[0m is based on
  [5XGAP4[0m.  Quoting  from  an  email response William Stein sent me on the 25. of
  February,  2008:  "Sage  *is*  Python  +  a  library".  Although I seriously
  considered  developing  [5Xhomalg[0m  as part of [5XSage[0m, for the reason mentioned in
  [14XA.2-4[0m I finally decided to use [5XGAP4[0m as the programming language.
  
  
  [1XA.4-3 They differ in the way they communicate with the outer world[0X
  
  Both  [5XSage[0m  and  [5Xhomalg[0m  rely  for  many things on external computer algebra
  systems.  But although one can simply invoke a [5XGAP[0m shell or a [5XSingular[0m shell
  from  within  [5XSage[0m, [5XSage[0m normally runs the external computer algebra systems
  in  the  background  and  tries  to  understand the internals of the objects
  residing  in  them.  An  object  in  the external computer algebra system is
  wrapped  by  an  object in [5XSage[0m and supporting this external object involves
  understanding its details in the external system. [5Xhomalg[0m follows a different
  strategy:  The  only  external  objects  [5Xhomalg[0m  needs  (beside  rings)  are
  non-empty matrices. And being zero or not is basically the only thing [5Xhomalg[0m
  wants  to  know  about  a  matrix  after knowing its dimension. I myself was
  stunned  by  this  insight,  which  culminated  in  [13Xthe  principle  of least
  communication[0m (--> [14X1.1-10[0m).
  
  In  particular, [5XSage[0m can make use of all of [5Xhomalg[0m, but for in order to make
  full  use,  [5XSage[0m needs to understand the internals of the [5Xhomalg[0m objects. On
  the  contrary, [5Xhomalg[0m can only make limited use of [5XSage[0m (or of virtually any
  computer  algebra  system  that  supports  rings  in  a  sufficient way (-->
  [14X1.1-4[0m)),  but  without  the  need  to  delve into the inner life of the [5XSage[0m
  objects.
  
