© 2010,2013 John Abbott, Anna Bigatti
GNU Free Documentation License, Version 1.2

CoCoALib Documentation Index

Quick Summary: CoCoALib and CoCoA-5

CoCoA-5 is an easy-to-use interactive system for computations in commutative algebra; it contains an on-line manual accessible via the ? command.

CoCoALib is a C++ library of functions for computations in commutative algebra.

This introduction is part of the documentation for CoCoALib; to use the library you will need some basic knowledge of the C++ programming language.

Getting Started

The first step is to compile the software: see INSTALL

Using CoCoALib

As we know that no one likes to read documentation, the best place to start is by looking at the examples/ directory full of sample code using CoCoALib.

Writing Your Own Programs

The simplest approach is to copy the example program ex-empty.C and modify that (see guide).

If you want to experiment with CoCoALib using a different directory, just copy examples/Makefile into your directory and change the line


so that it specifies the full path of CoCoALib-XX, for instance


In any case, it is best to start with a copy of ex-empty.C.

Debugging with CoCoALib

CoCoALib does offer some help in tracking down bugs in programs which use it. If the preprocessor symbol CoCoA_DEBUG is set then various run-time assertions are enabled which perform extra checks in various functions. If you use the compiler g++ then the simplest way to activate debugging is to modify two lines in the file configuration/ -- the file contains comments to guide you. You may like to read [assert.html] to learn about CoCoA_ASSERT.

Various Forms of Documentation

CoCoALib comes with a collection of hand-written descriptions of its capabilities as well as a collection of example programs showing how to use many of the features of the library. The hope is that the example programs (plus perhaps a little intelligent guesswork) will suffice to answer most questions about CoCoALib. The hand-written documentation is intended to be more thorough: so less guesswork is needed, but you may have to plough through lots of tedious text to find the detail you're looking for.

The hand-written documentation is split into many files: generally there is one file of documentation for each implementation file in the source code. Furthermore, each file comprises three sections:

This documentation is in the CoCoALib directory doc/txt/, and converted into html (doc/html/) and LaTeX (doc/tex/) using txt2tags.

A template file fo adding to this documentation and some basic instructions for txt2tags are in the file doc/txt/empty.txt.

There is also some automatically generated DOXYGEN documentation in [../doxygen/index.html]

We believe that many simple questions are probably best answered by looking at the example programs (and perhaps applying a little intelligent guesswork). The hand-written documentation in the directory doc/ is supposed to be exhaustive (and is doubtless also rather exhausting). The Doxygen files will most likely be of use to those already experienced in using CoCoALib.

Sundry Important Points

We have tried to give CoCoALib a natural interface, but this has not always been possible. Here are the main problem areas:

Powering and Exponentiation

The use of the hat symbol (^) to denote exponentiation is very widespread. CoCoALib does not allow this you must use the function power instead.

Why not? Because it would be too easy to write misleading code, i.e. valid code which does not compute what you would expect. Here is a simple example: 3*x^2 is interpreted by the compiler as (3*x)^2. Unfortunately there is no way to make the C++ compiler use the expected interpretation.

Integers and Rationals

The C++ language is not designed to compute directly with unlimited integers or with exact rational numbers; special types (namely BigInt and BigRat) to handle these sorts of values have been added as part of CoCoALib (with the real work being done by the GMP library). Nevertheless the user has to be wary of several pitfalls where code which looks correct at first glance does not produce the right answer.

=== Reporting CoCoALib Bugs and other problems ==

Please let us know if you find any bugs in CoCoALib. Ideally your bug report should include a small program which exhibits the bad behaviour with a clear indication of what you think the program should do, and where it apparently goes wrong. The best way to inform us of the problem is to report an issue on

If you'd rather not use redmine Forum, you can send email to: