\documentstyle{article}
\begin{document}
\title{History of SACLIB}
\author{George E. Collins}
\maketitle

SACLIB (symbolic algebraic computation library) is a very large
collection of C language programs (more than 900) for computer
algebra.  The roots of this system go back to 1956, just two
years after the commercial programmed computer, the IBM 701 was
marketed, and a number of years before the term "computer algebra"
had any meaning.  In this year the writer began to write a set of
programs for performing arithmetic operations on multi-precision
integers, and for performing addition and multiplication on
polynomials in an arbitrary number of variables with such integers
as coefficients.  His purpose was to explore Alfred Tarski's
quantifier elimination method for the elementary theory of real 
closed fields (equivalently the elementary theory of the ordered field
of the real numbers), \cite{Tar51}.  Over the next 10 years, with some
interruptions, this set of programs was somewhat augmented  and 
modified to run on newer IBM computers.  Also design changes were
made.  Most notably, whereas the initial design utilized fixed-size
arrays, in 1960 the system was redesigned so that integers and
polynomials were instead represented as lists. 

In 1966 the writer changed his affiliation from IBM to the University
of Wisconsin (at Madison) Computer Sciences Department.  No IBM
computers were operational at the University of Wisconsin, and it
was necessary to reprogram the system, which, \cite{Col66},
had acquired the name PM, standing for Polynomial Manipulation.
� very important decision was made to reprogram the system in
a computer-independent manner, using the FORTRAN language.  The
resulting system was given the name SAC-1 (Symbolic Algebraic
Computation, Version 1).  The primary reason for choosing FORTRAN
was that at that time FORTRAN was the only standardized programming
language, and the only one that nearly every computer user was
familiar with.  During the next few years, with the assistance
of several Ph. D. students, the capabilities of the system were
rapidly expanded to include such things as polynomial greatest
common divisors and resultants, polynomial factorization and
polynomial linear algebra, as new algebraic algorithms were
devised and studied.

In 1976 SAC-1 began to be transformed into a new System, SAC-2.
SAC-2 was programmed in a special programming language called
ALDES (ALgorithm DEScription Language) designed by R\"udiger Loos,
\cite{Loos76}.  Loos also designed and implemented a translator
from the ALDES language into a small subset of standard
FORTRAN.  Most SAC-1 programs were rewritten in ALDES without 
substantive change.  However, whereas SAC-1 programs were
written to use a reference count list processing system, SAC-2
programs use a garbage collection system.  During the SAC-2 period
many new programs were written, most notably for polynomial real
and complex root isolation and refinement, for algebraic number
arithmetic, and for quantifier elimination.

In 1991, Hoon Hong wrote a translator from ALDES to the C language
that was used, together with some human editing, to convert the
SAC-2 system from its FORTRAN base to the C language base of the
current SACLIB system.  The SAC-2 garbage collection system had
depended on making the values of list variables accessible to the
garbage collector by requiring the programs to explicitly
place the values on a special software stack.  The SACLIB
garbage collector instead obtains such values from the stack
that is maintained by the C compiler.  Another change was that
whereas SAC-2 programs had to simulate recursion since it was
not supported by FORTRAN (at least not in 1976, the advent of
SAC-2), in SACLIB recursion is supported by the C language.
Improvements made to SACLIB since 1991 include faster integer
arithmetic, new algorithms for greatest common divisors of
polynomials with algebraic number coefficients, faster factorization
of univariate polynomials over the integers, and faster polynomial
real root isolation using floating point arithmetic with
directed rounding.

\bibliographystyle{plain}
\bibliography{sachis}

\end{document}

