CoCoA
Authors: Abbott John 
Published: January 2007

The CoCoA program together with Singular and Macaulay 2 form an elite group of
highly specialized systems
having as their main forte the capability
to calculate Gröbner bases
. Although a number of general purpose symbolic computation systems (e.g. REDUCE and Maple) do offer the possibility to compute Gröbner bases, their non-specialist nature implies a number of severe compromises which make them far less suitable to act as a laboratory---most notably: relatively poor execution speed and limited control over the algorithm parameters. In contrast, CoCoA does not offer facilities for calculus, floating point computation, or any other area not closely related to commutative polynomial algebra.Development in CoCoA is often spurred on by symbiosis with those using it, not only in algebraic geometry research but also in other fields such as mathematical analysis, and statistics. In fact, CoCoA has become widely used in many countries both for research and teaching, and its didactic role means that
ease of use is a high priority
. Indeed, the mathematically natural way of instructing CoCoA to do computations enhances the worth of its technical skills.CoCoA 5 represents an important new phase in the project: the software is being completely rewritten in C++. CoCoA 5 will be available as an
interactive system
, as a
C++ library
, and as a
server
(using an OpenMath-like interface). We have already achieved significant improvements in flexibility and speed, and note that ease of use remains a high priority while also offering the skilled practitioner a high degree of control. Ultimately CoCoA 5 will extend the range of specialization of the current public release.A big challenge in the design of CoCoA 5 was to reconcile two traditionally conflicting goals: flexibility and efficiency. The
inheritance mechanism of C++ plays a crucial role here
. Our use of inheritance is exemplified by the way in which rings and their elements are implemented, inspired by the tenet to allow arbitrary (commutative) rings wherever possible. The run-time penalty for this additional abstraction is virtually negligible.In a few cases, to meet the run-time performance targets, the CoCoA library foundations do use "quick and dirty hackery". Here credit is due to the design of C++ which allows such desperate code to be written where necessary, and which also permits it to fit seamlessly into a well-structured program.Undoubtedly the principal feature of CoCoA 5 is its code for computing Gröbner bases. In the case of Buchberger's algorithm there is an unusually
wide gulf between the neat elegance of the theory and the complex engineering within a refined implementation
. In CoCoA 5 a carefully structured design, which comprises clearly separated components with well defined roles, will facilitate the inclusion of future improvements in an
implementation already including many modern ideas:
e.g.
binary divisibility mask, geobuckets, fraction free representation, sophisticated reducer selection strategy, automatic homogenization, and additional reducers.So far most effort has been invested in the new library which is now in alpha testing. To help development, a rudimentary prototype server has been built which communicates with CoCoA 4.3 (pre-release); this server will evolve in parallel with the library. The interactive system is planned as a separate user interface issuing requests to the CoCoA server.