| 1 | Dear User: | 
|---|
| 2 |  | 
|---|
| 3 | This directory contains files which provide Grobner basis support for | 
|---|
| 4 | the free computer algebra system Maxima. The older versions of the | 
|---|
| 5 | package are distributed with Maxima in the subfolder of the Maxima | 
|---|
| 6 | installation tree, like: | 
|---|
| 7 |  | 
|---|
| 8 | maxima/5.xx.x/share/contrib/Grobner | 
|---|
| 9 |  | 
|---|
| 10 | This version is meant to be a backward-compatible replacement for this | 
|---|
| 11 | package. It features an implementation of the Faugere's F4 algorithm. | 
|---|
| 12 |  | 
|---|
| 13 | == INSTALLATION INSTRUCTIONS == | 
|---|
| 14 |  | 
|---|
| 15 | In order to use the package, | 
|---|
| 16 | 1. Copy the files in this directory to your favorite location; | 
|---|
| 17 | or better, checkout the contents of this repository with SVN. | 
|---|
| 18 | 2. Edit the file "grobner.mac" to modify the location of the Lisp | 
|---|
| 19 | files, to reflect your choice made in previous step. | 
|---|
| 20 | 3. Start your Maxima and load the file "grobner.mac" | 
|---|
| 21 | 4. Optionally, compile the Lisp files, so that the next file | 
|---|
| 22 | you load "grobner.mac", the compiled (.fasl) versions of | 
|---|
| 23 | the files will be loaded. The compilation instructions | 
|---|
| 24 | vary slightly depending on Lisp version. | 
|---|
| 25 |  | 
|---|
| 26 | This version has been verified to work under this Maxima version: | 
|---|
| 27 |  | 
|---|
| 28 | ---------------------------------------------------------------- | 
|---|
| 29 | Maxima 5.34.1 http://maxima.sourceforge.net | 
|---|
| 30 | using Lisp SBCL 1.2.4-1.fc21 | 
|---|
| 31 | ---------------------------------------------------------------- | 
|---|
| 32 |  | 
|---|
| 33 | It should also be portable across other ANSI Common Lisp implementations. | 
|---|
| 34 |  | 
|---|
| 35 | The file grobner.demo is a Macsyma-style demo file for most of the operations | 
|---|
| 36 | provided by the package. In order to run it, go to the Maxima level and | 
|---|
| 37 | type: | 
|---|
| 38 |  | 
|---|
| 39 | demo("grobner.demo"); | 
|---|
| 40 |  | 
|---|
| 41 | or | 
|---|
| 42 |  | 
|---|
| 43 | batch("grobner.demo"); | 
|---|
| 44 |  | 
|---|
| 45 | and watch the demonstration. | 
|---|
| 46 |  | 
|---|
| 47 | Maxima documentation for this package has not been written yet, but | 
|---|
| 48 | there is a sizable amount of documentation in the LISP source. | 
|---|
| 49 |  | 
|---|
| 50 | == COMPILATION INSTRUCTIONS FOR SBCL == | 
|---|
| 51 |  | 
|---|
| 52 | === When using ASDF (preferred way): | 
|---|
| 53 | ---------------------------------------------------------------- | 
|---|
| 54 | * (require :asdf) | 
|---|
| 55 | * (load "ngrobner.asd") | 
|---|
| 56 | * (asdf:load-system :ngrobner) | 
|---|
| 57 | ---------------------------------------------------------------- | 
|---|
| 58 | The compiled files (extension .fasl for SBCL) will be typically | 
|---|
| 59 | placed in a standard location determined by the ASDF configuration. On my system it is: | 
|---|
| 60 | ---------------------------------------------------------------- | 
|---|
| 61 | /home/marek/.cache/common-lisp/sbcl-1.2.4-1.fc21-linux-x64/home/marek/Repos/MaximaGrobner/branches/f4grobner/ | 
|---|
| 62 | ---------------------------------------------------------------- | 
|---|
| 63 | given that the SVN repository was copied to /home/marek/Repos/MaximaGrobner. | 
|---|
| 64 |  | 
|---|
| 65 | === When not using ASDF (for whatever reason): | 
|---|
| 66 |  | 
|---|
| 67 | Step 1. Start SBCL in the directory which is a copy of this directory. | 
|---|
| 68 | Step 2. Execute Lisp commands: | 
|---|
| 69 | ---------------------------------------------------------------- | 
|---|
| 70 | * (load "compile-me.lisp") | 
|---|
| 71 | ---------------------------------------------------------------- | 
|---|
| 72 |  | 
|---|
| 73 | The resulting compiled files (extension .fasl for SBCL) will end up in | 
|---|
| 74 | the same folder as the Lisp files. Then can be moved any directory | 
|---|
| 75 | where Maxima can find them, as determined by the variable | 
|---|
| 76 | file_search_lisp. This variable needs to be modified in "grobner.mac" | 
|---|
| 77 | accordingly. After that, every time you load "grobner.mac" the | 
|---|
| 78 | compiled version will be used. | 
|---|
| 79 |  | 
|---|
| 80 | == 5AM TESTS == | 
|---|
| 81 |  | 
|---|
| 82 | The system is set up for using the FiveAM unit testing framework. | 
|---|
| 83 | One performs the tests by loading a single file: | 
|---|
| 84 | ---------------------------------------------------------------- | 
|---|
| 85 | * (load "5am-tests") | 
|---|
| 86 | ---------------------------------------------------------------- | 
|---|
| 87 | Note that this requires ASDF and QuickLisp being installed. | 
|---|
| 88 |  | 
|---|
| 89 | NOTE: The coverage is still minimal. The number of tests | 
|---|
| 90 | will increase over time. | 
|---|
| 91 |  | 
|---|
| 92 | == TESTING WITH ORACLE APPROACH == | 
|---|
| 93 |  | 
|---|
| 94 | The alternative mechanism is enabled | 
|---|
| 95 | by doing this *BEFORE* loading/compiling NGROBNER: | 
|---|
| 96 | ---------------------------------------------------------------- | 
|---|
| 97 | * (push :grobner-check *features*) | 
|---|
| 98 | ---------------------------------------------------------------- | 
|---|
| 99 | This will enable verification of every Grobner basis computed, | 
|---|
| 100 | by performing Buchberger criterion, after the basis is computed. | 
|---|
| 101 | This is an "oracle" testing, given that the portion of the code | 
|---|
| 102 | required for verification of Groebner bases is correct. A significant | 
|---|
| 103 | test involves loading the demonstration code, like: | 
|---|
| 104 | ---------------------------------------------------------------- | 
|---|
| 105 | (%i1) batch("grobner.demo"); | 
|---|
| 106 | ---------------------------------------------------------------- | 
|---|
| 107 | The failure will result in a spectacular error message. | 
|---|
| 108 | NOTE: For this to work (push :grobner-check *features*) | 
|---|
| 109 | needed to be executed before loading/compiling Lisp code. | 
|---|
| 110 |  | 
|---|
| 111 | == ADDITIONAL COMMENTS == | 
|---|
| 112 |  | 
|---|
| 113 | The files were derived the sources of a package CGBlisp, version 2, | 
|---|
| 114 | also authored by me, which will eventually be released at my Web site | 
|---|
| 115 | (see below).  An older version of CGBlisp is available at the Web | 
|---|
| 116 | site. | 
|---|
| 117 |  | 
|---|
| 118 | == VIEWING DOCUMENTATION == | 
|---|
| 119 |  | 
|---|
| 120 | Various components of the system have significant documentation | 
|---|
| 121 | attached.  This can be browsed with tools such as DOCBROWSER or | 
|---|
| 122 | MANIFEST.  Both start a web server on a local port. A quick tutorial | 
|---|
| 123 | on these tools: if you have Quicklisp, you can use this one-liner to | 
|---|
| 124 | start MANIFEST: | 
|---|
| 125 |  | 
|---|
| 126 | * (ql:quickload :manifest) (manifest:START) | 
|---|
| 127 |  | 
|---|
| 128 | The port of MANIFEST server is printed. | 
|---|
| 129 |  | 
|---|
| 130 | Or this one-liner to start DOCBROWSER on port 8084: | 
|---|
| 131 |  | 
|---|
| 132 | * (ql:quickload :docbrowser) (docbrowser:start-docserver 8084) | 
|---|
| 133 |  | 
|---|
| 134 | Enjoy. | 
|---|
| 135 | --Marek Rychlik | 
|---|
| 136 |  | 
|---|
| 137 | 5-24-2002 | 
|---|
| 138 | Revised: 1-25-2009 | 
|---|
| 139 | Revised: 1-25-2015 | 
|---|
| 140 |  | 
|---|
| 141 | E-mail: rychlik@u.arizona.edu | 
|---|
| 142 | URL: http://marekrychlik.com | 
|---|