<h4>B.1 <span class="Heading">Why was <strong class="pkg">homalg</strong> discontinued in <span class="URL"><a href="http://www.maplesoft.com/">Maple</a></span>?</span></h4>
<p>The original implementation of <strong class="pkg">homalg</strong> in <strong class="pkg">Maple</strong> by Daniel Robertz and myself hit several walls. The speed of the Gröbner basis routines in <strong class="pkg">Maple</strong> 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.</p>
<p>As we were pushed to look for an alternative to <strong class="pkg">Maple</strong>, our wish list grew even further. Section <a href="chapB_mj.html#X7D2A5B127A68AB58"><span class="RefLink">B.2</span></a> is a summary of this wish list.</p>
<p>"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?"</p>
<p>I had the pleasure of being one of his students.</p>
<p>The detailed copyright for <strong class="pkg">GAP</strong> can found on the <strong class="pkg">GAP</strong> homepage under <span class="URL"><a href="http://www.gap-system.org/Download/copyright.html#free">Start > Download > Copyright</a></span>.</p>
<h5>B.2-2 <span class="Heading"><strong class="pkg">GAP</strong> has an area of expertise</span></h5>
<p>Not only does <strong class="pkg">GAP</strong> 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.</p>
<p>But one could argue that rings are more central for homological algebra than finite groups, and that <strong class="pkg">GAP4</strong>, as for the time when the <strong class="pkg">homalg</strong> project was shaping, does not seriously support important rings in a manner that enables homological computations. This drawback would favor, for example, <span class="URL"><a href="http://www.singular.uni-kl.de/">Singular</a></span> (with its subsystem <strong class="pkg">Plural</strong>) over <strong class="pkg">GAP4</strong>. Point <a href="chapB_mj.html#X863002078157C105"><span class="RefLink">B.2-3</span></a> indicates how this drawback was overcome in a way, that even gave the lead back to <strong class="pkg">GAP4</strong>.</p>
<p>One of my future plans for the <strong class="pkg">homalg</strong> 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 <strong class="pkg">SCO</strong> by Simon Görtzen to compute the cohomology of orbifolds is part of the currently available <strong class="pkg">homalg</strong> project.</p>
<p>For the remaining points the choice of <strong class="pkg">GAP4</strong> as the programming language for developing <strong class="pkg">homalg</strong> was unavoidable.</p>
<h5>B.2-3 <span class="Heading"><strong class="pkg">GAP4</strong> can communicate</span></h5>
<p>With the excellent <strong class="pkg">IO</strong> <span class="URL"><a href="http://www-groups.mcs.st-and.ac.uk/~neunhoef/Computer/Software/Gap/io.html">package</a></span> of Max Neunhöffer <strong class="pkg">GAP4</strong> is able to communicate in an extremely efficient way with the outer world via bidirectional streams. This allows <strong class="pkg">homalg</strong> to delegate things that cannot be done in <strong class="pkg">GAP</strong> to an external system such as <strong class="pkg">Singular</strong>, <strong class="pkg">Sage</strong>, <strong class="pkg">Macaulay2</strong>, <strong class="pkg">MAGMA</strong>, or <strong class="pkg">Maple</strong>.</p>
<h5>B.2-4 <span class="Heading"><strong class="pkg">GAP4</strong> is a <em>mathematical</em> object-oriented programming language</span></h5>
<p>The object-oriented programming philosophy of <strong class="pkg">GAP4</strong> was developed by mathematicians who wanted to handle complex mathematical <a href="../../../doc/ref/chap79_mj.html#X83548994805AD1C9"><span class="RefLink">objects</span></a> carrying <a href="../../../doc/tut/chap8_mj.html#X81C430C37B2F16D8"><span class="RefLink">properties</span></a> and <a href="../../../doc/tut/chap8_mj.html#X7C701DBF7BAE649A"><span class="RefLink">attributes</span></a>, as often encountered in algebra and geometry. <strong class="pkg">GAP4</strong> was thus designed to address the needs of <em>mathematical</em> object-oriented programming more than any other language designed by computer scientists. This was primarily achieved by the advanced <a href="../../../doc/tut/chap8_mj.html#X81C430C37B2F16D8"><span class="RefLink">method selection</span></a> techniques that very much resemble the mathematical way of thinking.</p>
<p>Unlike the common object-oriented programming languages, methods in <strong class="pkg">GAP4</strong> are not bound to objects but to <a href="../../../doc/tut/chap8_mj.html#X7AEED9AB824CD4DA"><span class="RefLink">operations</span></a>. 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 <span class="SimpleMath">\(G\)</span> and a subgroup <span class="SimpleMath">\(U\)</span>. Note that the index of <span class="SimpleMath">\(U\)</span> in a subgroup of <span class="SimpleMath">\(G\)</span> containing <span class="SimpleMath">\(U\)</span> 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.</p>
<p>Moreover <strong class="pkg">GAP4</strong> supports so-called <a href="../../../doc/tut/chap8_mj.html#X85CC8C167A280043"><span class="RefLink">immediate and true methods</span></a>. This considerably simplifies teaching theorems to the computer. For example it takes one line of code to teach <strong class="pkg">GAP4</strong> 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 <strong class="pkg">GAP4</strong> immediately uses them as soon as the respective assumptions are fulfilled. This mechanism enables <strong class="pkg">GAP4</strong> 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. <strong class="pkg">homalg</strong> is equipped with plenty of logical implications for rings, matrices, modules, morphisms, and complexes.</p>
<p>When all these features become relevant to what you want to do, there is hardly an alternative to <strong class="pkg">GAP4</strong>.</p>
<h5>B.2-5 <span class="Heading"><strong class="pkg">GAP4</strong> packages are easily extendible</span></h5>
<p>Being able to install several methods for a single operation (--> <a href="chapB_mj.html#X78EB6CAE7C7F2F7C"><span class="RefLink">B.2-4</span></a>) has the additional advantage of making <strong class="pkg">GAP4</strong> 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 elif section contributing to an increasing unreadability of the code. Even better, you don't even need to know <em>anything</em> 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.</p>
<h4>B.3 <span class="Heading">Why not <span class="URL"><a href="http://www.sagemath.org/">Sage</a></span>?</span></h4>
<p>Although the <strong class="pkg">python</strong>-based <strong class="pkg">Sage</strong> fulfills most of the above requirements, it was primarily the points expressed in <a href="chapB_mj.html#X78EB6CAE7C7F2F7C"><span class="RefLink">B.2-4</span></a> that finally favored <strong class="pkg">GAP4</strong> over <strong class="pkg">Sage</strong>: The object-orientedness of <strong class="pkg">python</strong>, although very modern, does not cover the needs of the <strong class="pkg">homalg</strong> package. At this place I would like to thank <span class="URL"><a href="http://modular.math.washington.edu/">William Stein</a></span> for the helpful discussion about <strong class="pkg">Sage</strong> during the early stage of developing <strong class="pkg">homalg</strong>, and to Max Neunhöffer who explained me the advantages of the object-oriented programming in <strong class="pkg">GAP4</strong>.</p>
<h5>B.4-1 <span class="Heading">They differ in objectives and scale</span></h5>
<p>First of all, <strong class="pkg">Sage</strong> is a huge project, that, among other things, is intended to replace commercial, general purpose computer algebra systems like <strong class="pkg">Maple</strong> and <strong class="pkg">Mathematica</strong>. So while <strong class="pkg">Sage</strong> targets (a growing number of) different fields of computer algebra, <strong class="pkg">homalg</strong> 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.</p>
<h5>B.4-2 <span class="Heading">They differ in the programming language</span></h5>
<p><strong class="pkg">Sage</strong> is based on <strong class="pkg">python</strong> and the <strongclass="pkg">C</strong>-extension <strong class="pkg">cython</strong> while <strong class="pkg">homalg</strong> is based on <strong class="pkg">GAP4</strong>. 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 <strong class="pkg">homalg</strong> as part of <strong class="pkg">Sage</strong>, for the reason mentioned in <a href="chapB_mj.html#X78EB6CAE7C7F2F7C"><span class="RefLink">B.2-4</span></a> I finally decided to use <strong class="pkg">GAP4</strong> as the programming language.</p>
<h5>B.4-3 <span class="Heading">They differ in the way they communicate with the outer world</span></h5>
<p>Both <strong class="pkg">Sage</strong> and <strong class="pkg">homalg</strong> rely for many things on external computer algebra systems. But although one can simply invoke a <strong class="pkg">GAP</strong> shell or a <strong class="pkg">Singular</strong> shell from within <strong class="pkg">Sage</strong>, <strong class="pkg">Sage</strong> 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 <strong class="pkg">Sage</strong> and supporting this external object involves understanding its details in the external system. <strong class="pkg">homalg</strong> follows a different strategy: The only external objects <strong class="pkg">homalg</strong> needs (beside rings) are non-empty matrices. And being zero or not is basically the only thing <strong class="pkg">homalg</strong> wants to know about a matrix after knowing its dimension. I myself was stunned by this insight, which culminated in <a href="https://homalg-project.github.io/homalg_project/Modules/doc/chap1_mj.html#X79DFCAF17BD3DDC6"><span class="RefLink">Modules: The principle of least communication (technical)</span></a>.</p>
<p>In particular, <strong class="pkg">Sage</strong> can make use of all of <strong class="pkg">homalg</strong>, but for in order to make full use, <strong class="pkg">Sage</strong> needs to understand the internals of the <strong class="pkg">homalg</strong> objects. On the contrary, <strong class="pkg">homalg</strong> can only make limited use of <strong class="pkg">Sage</strong> (or of virtually any computer algebra system that supports rings in a sufficient way (--> <a href="https://homalg-project.github.io/homalg_project/Modules/doc/chap1_mj.html#X84913827857A1F7B"><span class="RefLink">Modules: Rings supported in a sufficient way</span></a>)), but without the need to delve into the inner life of the <strong class="pkg">Sage</strong> objects.</p>
Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.
Bemerkung:
Die farbliche Syntaxdarstellung ist noch experimentell.