-------------------------------------------- Disclaimer and License Agreement Fermat is provided on an "AS IS" basis, without warranty of any kind, including without limitation the warranties of merchantability, fitness for a particular purpose and non-infringement. The entire risk as to the quality and performance of the Software is borne by you. Should the Software prove defective, you assume the entire cost of any service and repair. This disclaimer of warranty constitutes an essential part of your use of Fermat. YOU MAY NOT ATTEMPT TO DECOMPILE FERMAT. Fermat is copyrighted. ---------------------------------------------- REGISTER. Send me your name right away through email. If there are new versions or bug fixes, I will inform you. ---------------------------------------------- Use Courier or Geneva to view this document. ------------------------------------- A Word on History Fermat began as a project in a compiler design course that I was teaching in 1986. It was therefore a programming language from the very beginning, and has always gone by the name "Fermat." It grew into a computer algebra system gradually. It flourished under three years of R. E. U. (Research Experiences for Undergraduates) projects when 16 undergraduates used it to search for nilpotent topological spaces. I used it to study (with others) certain infinite non-Abelian almost-free groups called the Gij groups. A large and time consuming project was that of my colleague A. Brumer studying elliptic curves. It was used by five or six graduate students to study computer algorithms and numerical analysis. Recently it has been used by undergraduate math majors studying dynamical systems, the FFT, and the RSA cryptosystem. Many suggestions and improvements have been made along the way, and many, many bugs found and corrected. Of course I am not naive enough to think that all bugs have been found. The version you are now receiving, however, contains no known bugs. --------------------------------------- Main Themes of Fermat Over the years of its evolution, Fermat has developed in two main directions: computations involving matrices, polynomials, and rational functions; and graphics. This apparently schizoid personality is due to the main project that motivated it, the computer search for three-dimensional nilpotent CW complexes. It would be nice to have the complexes represented visually as well as via large matrices of integers. Originally one program did all of this, but that became unwieldy and there are now two versions: QFermat for work over Q, Z, and finite fields, and FFermat, for work over the reals and complexes implemented as "floats." ---------------------------------------- Advantages of Fermat In every project, Fermat has proven to be much faster (often MUCH faster), to use much less main memory, and, often, to be more reliable than some well known expensive computer algebra systems. (As anyone knows who has used those systems for heavy industrial grade computation, frequent crashes, odd error messages, and inconvenient features are a constant problem.) Fermat is especially good at Smith normal form; polynomial and rational function arithmetic; determinant, normal forms, and inverse of matrices with polynomial entries over Z, Q, Zp, finite fields, or more complex fields; sparse matrices; characteristic polynomials; and gcd of polynomials over Z, Zp, or finite fields. In addition, I have striven to make it easy to use. For example, it is very easy to edit the output of Fermat (on the screen) and make it the input. This is a great boon in experiments with matrices. Extensive facilities exist for saving data to files and reading such data. Fermat has the useful ability to be interrupted and then later return to the computation, picking up where it left off. For Macs, this is unusual. Fermat's graphics facilities are general and powerful. It is possible to display graphically the numerical output of any program. This gives enormous flexibility to the user who is willing to write programs, and not just use the canned two- or three-dimensional function graphing routines. "Objects" can be created, then moved, rotated, cut up, or intersected or merged with other objects. The manual is full of examples of all of these uses. ----------------------------------- Release History and Bug Fixes: April 1996; version 1.0. (1) Under some circumstances, it was possible to set an element in a sparse array to 0. While not exactly a bug, this could be inconvenient. (2) If [x] was a sparse array, [x]^n would sometimes crash. (3) The builtin function Iszero did not work with sparse arrays. (4) If x[n,m] was a sparse array, accessing it via one dimensional format, x[i], did not work sometimes. (5) Reading and Saving files would sometimes fail to interrogate the user correctly for the name of the file. November 1996: (1) Compiling array references was flawed. (2) Determinant of matrices over finite fields would sometimes crash. (3) Divides failed on 0 input. (Oops!) (4) There was a parsing error in something like :[b] = (t^2+1)[b]. (5) There was a parsing error in something like :t = t(:(2)=7). (6) &(P = xy^2 - 181) worked but gave a funny message (variable has more than one letter). (7) Display of linear matrices, such as if [p] is 1 X 56 and you typed [p], it looked weird. (8) Colreduce would sometimes fail to swap columns correctly. (9) There was a problem with the diagonal statement :[x] = .... (10) Verbose mode often displayed too much stuff. It is now more reticent. New Features (all in QFermat only): (1) New Appendix 4 in the manual. (2) Gauss-Bareiss for determinant. New commands &K, &L. (3) Sqfree greatly expanded. (4) New command Pseudet. Colreduce now works on sparse arrays. (5) New commands Terms, SDivide; changes to Coef (). (6) GCD even faster on polynomials of many variables. (7) If you know that z is a factor of the determinant of a matrix [x] with all polynomial entries, you can type ([x],z) to compute the rest of the determinant. See Appendix 4 in the manual. January 27, 1997; version 1.04 of Qfermat (PPC and MPW). Two minor cosmetic changes: (1) Fixed a small problem in the PPC version in displaying large matrices, involving the continuation character. (2) It is now possible to capture a displayed "ordinary" matrix (written to the terminal window) and set a sparse matrix equal to it. Before, a sparse matrix could only be set equal to a matrix displayed in sparse format. However, there is a small weird-sounding problem: in modularmode, the first entry in the matrix must be an integer or polynomial. I know why this exists but it doesn't seem worth fixing. More history in the other ReadMe file. ----------------------------------- Give me feedback. Report all bugs and typos to the author, Robert H. Lewis, rlewis@fordham.edu. If you have features you would like to see added to Fermat, let me know! Robert H. Lewis Department of Mathematics Fordham University Bronx NY 10458 rlewis@fordham.edu December 27, 2000.