Support Questions and Answers

Click on a question to show (or hide) its answer.

REDUCE is a Computer Algebra System. Think of it as a very advanced programmable scientific calculator intended for solving algebraic or symbolic problems. But it will also solve purely numerical problems (exactly or approximately) and plot graphs.

REDUCE is intended for users who want to solve problems in mathematics, science and engineering at pre-university level and above, although it was originally developed for research in high energy (elementary particle) physics. But, as when using any kind of calculator or computer software, you may need to do quite a lot of work to get your problem into a form that REDUCE can solve. REDUCE (like most Computer Algebra Systems) is good at solving concrete problems (such as problems involving matrices with specified elements) and not so good as solving abstract problems (such as problems involving vector spaces of arbitrary dimension).

  1. Casual users wishing to solve straightforward problems can use REDUCE interactively and may want to use some of the contributed REDUCE packages that are not automatically loaded, which extend the domain of applicability of REDUCE beyond that of the core system.
  2. Users wishing to solve more complicated problems can use the REDUCE algebraic-mode programming language and may want to prepare REDUCE programs in files of source code to be read into REDUCE.
  3. Advanced users wishing to extend the domain of applicability of REDUCE may want to write programs using the REDUCE symbolic-mode programming language and compile them into new packages.
  4. Developers wishing to port REDUCE to other platforms or Lisp systems, incorporate REDUCE into other software, or modify REDUCE for their own purposes, and anyone interested in how REDUCE works, can access all the current source code for REDUCE and its support systems.

Go to the SourceForge REDUCE project page, click on the green Download button and install the file that is downloaded. For more options (previous versions, other platforms, etc.) click on the Files tab. For full and historical REDUCE-related source code (for REDUCE itself, Lisp systems, user interfaces, documentation, etc.) click on the Code tab to access the Subversion repository. See How to Obtain and Run REDUCE for further details.

Once you have installed REDUCE, you should see applications named something like CSL REDUCE and/or PSL REDUCE in your application menu; click on one of them. CSL REDUCE provides a graphical user interface (by default) and PSL REDUCE provides a command-line interface. See How to Obtain and Run REDUCE for further details. But unless you are already familiar with REDUCE you should probably first browse the REDUCE User's Manual, either as HTML or PDF. A number of published books about REDUCE and related topics are also available.

REDUCE runs on Standard Lisp and there are two versions of Standard Lisp that were developed primarily to support REDUCE, namely PSL and CSL (in that order chronologically). We only release distributions of REDUCE based on these two Lisps, although REDUCE can be implemented on other versions of Standard Lisp (and there is some experimental code to do this in the repository).

PSL REDUCE itself provides only a command-line interface (CLI). CSL REDUCE provides a graphical user interface (GUI) by default, but it provides a command-line interface if started with the --nogui option. Run-REDUCE is a GUI for running any command-line version of REDUCE. GNU TeXmacs provides a GUI for PSL and CSL REDUCE via a plugin for running REDUCE. GNU Emacs provides a GUI for PSL and CSL REDUCE via the REDUCE IDE package. The Redfront versions of PSL and CSL REDUCE both provide the same consistent CLI with input history and text colouring. See How to Obtain and Run REDUCE for further details. (There is also code in the repository for XR, an X Window GUI for PSL, but it is not currently distributed as a pre-built binary and is somewhat out of date.)

At the start of a REDUCE session, the system checks for the existence of a user's REDUCE startup file, and executes the REDUCE statements in it. For CSL REDUCE (only), running redcsl --nogui --help at a command prompt lists the start-up options (assuming redcsl is on your search path – see How to Obtain and Run REDUCE).

The REDUCE User's Manual [ HTML | PDF ] is the obvious starting point and there are also a number of published books covering various aspects of REDUCE. You may like to work through the REDUCE interactive lessons. Many of the REDUCE packages have one or more associated test files (with extension .tst) and a corresponding log file (with extension .rlg) containing the output from running the test. These files, particularly the log files, provide instructive examples of how to use REDUCE, although they were not written as instructional material, are somewhat cryptic and assume the reader is familiar with the problems addressed. The xmpl directory in the REDUCE repository provides a convenient collection of test and log files from many of the packages, although they may be out of date.

Inside Reduce, the Symbolic Mode Primer [ HTML | PDF ], the Standard Lisp Report [ HTML | PDF ], the PSL Users Manual [ HTML | PDF ] and the CSL Reference all provide useful background. Some of the published books on REDUCE discuss algorithms and implementation, and the references in them will take you further. Ultimately, you will have to read the REDUCE source code!

REDUCE is hosted on SourceForge, which provides a project site and a project web site for each project; see the SourceForge Site Documentation for details. The project site (https://sourceforge.net/p/reduce-algebra for REDUCE) hosts the software itself and its format is completely controlled by SourceForge. The project web site (https://reduce-algebra.sourceforge.io for REDUCE) hosts any other information (such as this page) that the REDUCE developers want to provide and its format is controlled by them. The REDUCE web site can also be accessed as reduce-algebra.com, which is the URL of the original REDUCE web site created by Tony Hearn when REDUCE was a commercial product, but since 2017 it has been an alias for https://reduce-algebra.sourceforge.io. (The same URL but beginning with www, namely www.reduce-algebra.com, also works.) Redlog, which is the REDUCE package for computing with logic included in the standard distribution, has its own independent web site, which includes the Reduce Wiki that provides some general information about REDUCE.

There is a link to the SourceForge Site Documentation at the bottom of every SourceForge page, but this is aimed more at developers than users and is not specific to REDUCE. The most useful general user documentation is probably the User Account Information.

According to the SourceForge documentation on User Account Information: Software can be downloaded from SourceForge.net without registering an account. An account is needed in order to participate in discussion forums, submit bug reports, and join a project [as an administrator or developer]. Register a user account.

If you think you have found an error or omission in REDUCE, or in any of its support systems or documentation, then please report it using the bug tracker accessible via the Bugs tab on the REDUCE project page. You need to be logged in to SourceForge to do this. Or, if you prefer, you can use the reduce-algebra-developers mailing list, but you need to be registered with SourceForge to do this.

There are currently three REDUCE discussion fora – Open Discussion, Help, and Developers – accessible via the Discussion tab on the REDUCE project page. If you are not sure which is most appropriate, you can take a look at past discussions on each forum. You need to be logged in to SourceForge to post comments.

Note that SourceForge uses markdown syntax for input such as forum posts, which can have unexpected consequences if you think you are writing plain text! Please read the Formatting Help if you are not familiar with markdown. In particular, markdown hijacks several mathematical operators for other purposes and, for example, if you want to use * to indicate multiplication then you either need to escape it as \* or use the HTML entity code *.

We currently run only one mailing list, details of which are accessible via the Mailing Lists tab on the REDUCE project page. Here you can access past discussions and subscribe to the list. Although the list is called "reduce-algebra-developers", it is used for general "discussion of development, administration and support for Reduce". In practice, it is probably used most by users asking questions that developers try to answer. It is currently the main support mechanism for REDUCE and can be used to report bugs, request features, and discuss anything related to REDUCE. Developers also occasionally use it for announcements. The list is low volume! Just send an email to reduce-algebra-developers@lists.sourceforge.net, but you should be registered with SourceForge before you do this.

Log in to the REDUCE project page at SourceForge and then click on the Get Updates button (beside the green Download button).

To control all your email subscriptions, log in to SourceForge and then look at the Me link towards the top right-hand corner of most SourceForge pages. Hover over this, click on Account Settings in the drop-down menu and then select the Subscriptions tab.

You can browse the REDUCE source code repository most easily by clicking on the Code tab on the REDUCE project page. You are most likely to be interested in the code in the directory called trunk, so click on trunk in the File column. Most directories contain a README file that is displayed at the bottom of the directory listing and gives some information about the purpose of the directory and/or how to use its contents. Most of the code relates to REDUCE itself or the Lisp systems used to implement it.

The packages directory contains most of the main code for REDUCE itself, which is written in RLISP and is (essentially) independent of the underlying Lisp system. The csl and psl directories contain the main code for the two Lisp systems that support the distributed versions of REDUCE. The jlisp, jslisp and vsl directories contain experimental Lisp systems based on CSL. The doc directory contains the main documentation for REDUCE. The contrib and generic directories contain contributed code that is not (yet) incorporated into the REDUCE distributions. The web directory contains the code and content for the REDUCE web site (such as this page).

As in most computer programming languages, the identifier log represents the natural logarithm function in REDUCE. It is the fundamental logarithm function in REDUCE and works in both algebraic and numerical contexts. It is used in the results of computations whenever any logarithms remain unevaluated.

In science and engineering, it is common to use the identifier log to represent logarithms to the base 10 rather than natural logarithm, and REDUCE provides the identifier log10 to represent logarithms to the base 10. REDUCE also provides the identifier logb to represent general logarithms to any base, which is specified by the second argument to the function. The function log10 is a special case of logb and both simplify to the function log. For example, the REDUCE input

{df(log(x),x), df(log10(x),x), df(logb(x,b),x)};

evaluates to

  1       1          1
{---,-----------,----------}
  x   log(10)*x   log(b)*x

In mathematics, it is common to use the identifier ln to represent the natural logarithm, and in REDUCE this identifier is defined to be an operator but with no algebraic properties. This means it can be used as a function that by default always evaluates to itself without being explicitly declared to be an operator. For example, by default all four expressions in the list

{df(ln(x),x), int(ln(x),x), ln(1), ln(e)};

remain unevaluated and are output exactly as they were input. However, a rule such as the following can be used to simplify ln to log:

{df(ln(x),x), int(ln(x),x), ln(1), ln(e)} where ln ~x => log x;
  1
{---,x*(log(x) - 1),0,1}
  x

A similar rule can be used to simplify log to ln, which might be useful for output:

ws where log ~x => ln x;
  1
{---,x*(ln(x) - 1),0,1}
  x

Such a computation, using ln for both input and output, must be done in two separate steps to avoid recursive simplification. A let statement can be used instead of a where clause, but then each let rule must be cleared before the other rule is applied, again to avoid recursive simplification.

The function ln can be used in numerical contexts when the switch rounded is on and will evaluate exactly as log. In fact, ln is an alias for log in symbolic mode, although not in algebraic mode.

You can turn off typeset display of mathematical output by turning off the switch fancy, either by using the Switches menu or by executing the command

off fancy;

This may provide a workaround in the unlikely event of a display glitch. In addition, if you are having problems with the window-based version, or prefer a command-line version, you can run CSL REDUCE in command-line mode by starting it using the command

redcsl --nogui or redcsl -w