\input texinfo @c -*-texinfo-*- @c This is a TeXinfo file. It can be formatted for printing using TeX, @c or it prepared for on-line reading using GNU emacs. To do either of @c these things you will need to obtain version 2 or later of the @c TeXinfo package from GNU (and TeX or GNU emacs). @tex \global\chapheadingskip = 15pt plus 4pt minus 2pt \global\secheadingskip = 12pt plus 3pt minus 2pt \global\subsecheadingskip = 9pt plus 2pt minus 2pt @end tex @c %**start of header @setfilename me @settitle Vector Enumeration Programs, version 3.04 @c %**end of header @ifinfo Vector Enumeration Programs, Version 3.04 Copyright @copyright{} 1993 Steve Linton @end ifinfo @titlepage @title Vector Enumeration Programs, version 3.04 @author Steve Linton @page @vskip 0pt plus 1filll Copyright @copyright{} 1993,1994 Steve Linton @end titlepage @node Top, Introduction, (dir), (dir) @top Vector Enumeration @comment node-name, next, previous, up This is the manual for version 3.04 of my vector enumeration programs @code{me}, @code{qme} and @code{zme}. These programs are distributed free of charge for non-commercial use, and there is NO WARRANTY WHATSOEVER. This document does not describe the underlying mathematics, which are described in the papers referred to later, but describes the operation of the programs. @menu * Introduction:: Introduction * Installation:: Installation * Input Formats:: Input Formats * Command Line Options:: Command Line Options * Output Formats:: Output Formats * Strategy:: Strategy * The Source Code:: The Source Code * Examples:: Examples * Concept Index:: Concept Index * Options Index:: Options Index --- The Detailed Node Listing --- Introduction * New Features:: What's New What's New * New in Version 3.04 :: What's New in Version 3.04 * New in Versions 3.02 and 3.03:: What's New in Versions 3.02 and 3.03 * New in Version 3.01:: What's New in Version 3.01 * New in Version 3:: What's New in Version 3 Installation * Installation Procedure:: Installation Procedure * Pre-requisites:: Pre-requisites Installation Procedure * Simple Compilation:: * General Installation:: * Compile-time options:: Input Formats * A Presentation File:: * Input for Quotient Construction:: A Presentation File * Characteristic:: * Generators:: * Relations:: * Submodule Generators:: Relations * Group Type Relations:: * Algebra Relations:: * Weight Specifications:: Submodule Generators * Submodule Generators in Packed Form:: * Submodule Generators in Sparse Form:: * Universal Submodule Generators:: Command Line Options * Strategic Options:: * Output Options:: * Logging and Error Message Options:: * Input File Options:: * Debugging Options:: * Limit Options:: Output Options * Options to control what information is output:: * Options for Output Formats:: * Output File Names:: Output Formats * Cayley Format:: * GAP format:: * Meataxe Format:: * AXIOM format:: * Plain ASCII format:: * Plain Binary Format:: Strategy * Weights:: * Lookahead:: The Source Code * Generalities:: * The Source Files:: Generalities * Important macros:: * Arithmetic:: * Prototyping and Other Language Issues:: Examples * A permutation representation:: * A Quotient of this Representation:: * A Non-cyclic Module:: * A Monoid Representation:: * An Integer Module with Torsion:: * Quotient Construction Example:: * A Quotient of a Polynomial Ring:: @end menu @node Introduction, Installation, Top, Top @comment node-name, next, previous, up @chapter Introduction @cindex References @cindex Papers The vector enumeration algorithm for fields is described in the papers @cite{Constructing Matrix Representations of Finitely Presented Groups} (J. Symbolic Computation (12) 1991) and @cite{On Vector Enumeration} (to appear in the Journal of Linear Algebra and Applications). The @code{me} and @code{qme} programs implement this algorithm, @code{me} for prime fields of order less than 256 and @code{qme} for the rational numbers. The @code{zme} program implements an extended algorithm which works over principle ideal rings, for the special case of the integers. The extended algorithm will be described in a future publication. This document describes the installation and use of these three programs, the formats of input and output files and the various options which control the execution. Some notes on the structure of the programs is also included. In @cite{On Vector Enumeration}, an application of the algorithm to constructing quotients of algebra representations is described. These programs include a special option @code{-Q} to read an input format suited to that application and proceed accordingly. @menu * New Features:: What's New @end menu @node New Features, , Introduction, Introduction @comment node-name, next, previous, up @section What's New @cindex New features @menu * New in Version 3.04 :: What's New in Version 3.04 * New in Versions 3.02 and 3.03:: What's New in Versions 3.02 and 3.03 * New in Version 3.01:: What's New in Version 3.01 * New in Version 3:: What's New in Version 3 @end menu @node New in Version 3.04 , New in Versions 3.02 and 3.03, New Features, New Features @subsection What's New in Version 3.04 @cindex Version 3.04, new features There are a number of changes in version 3.04. Several bugs were fixed, in particular one relating to meat-axe format output. Thanks to Jurgen Mueller for spotting this one and to Thomas Breuer for reporting it. The @code{-L} command line option was added at this release, to allow logging information to be preceded by a comment designator. @cindex runtime The runtime in milliseconds was added to the output in several of the formats. This change should not break any reasonable program using the output. @cindex Makefile Finally, a new @file{Makefile} is added, suitable for most @code{make} programs. This supllies standard options for building the system in a range of environments. The old @file{Makefile}, which retains some advantages for development (well I like it anyway), is renamed @file{GNUmakefile}. @node New in Versions 3.02 and 3.03, New in Version 3.01, New in Version 3.04 , New Features @subsection What's New in Versions 3.02 and 3.03 @cindex Version 3.02 and 3.02, new features These versions (3.02 was never released) contain bug fixes relating to the integer vector enumeration program @code{zme} and changes to some undocumented features relating to the forthcoming GAP interface. The @code{zme} bugs could cause a crash or improper non-termination. @node New in Version 3.01, New in Version 3, New in Versions 3.02 and 3.03, New Features @subsection What's New in Version 3.01 @cindex Version 3.01, new features This version is a bug-fix version. The main bug fixed at this release is that under certain circumstances information could be lost during look-ahead, resulting in the output module being a proper pre-image of the correct module. The fix for this problem involves allowing some definitions to be made, even during look-ahead. When the @code{-t} option @pxref{Limit Options} is used to limit the total number of dimensions, a proportion of the limit is allocated for these critical definitions. This proportion can be changed by a new form of the @code{-t} option. @node New in Version 3, , New in Version 3.01, New Features @comment node-name, next, previous, up @subsection What's New in Version 3 @cindex Version 3, new features @itemize @bullet @item The @code{zme} program is completely new in this version. @item The @code{quot} quotient-constructing program has been merged with @code{me} and corresponding functionality added to @code{qme} and @code{zme}. @xref{Input File Options} and @ref{Input for Quotient Construction}. @item A number of internal changes have improved performance for most examples, sometimes dramatically. @item The input format has been enriched in a number of ways @pxref{Input Formats} and the error handling and reporting in the parser has been greatly enhanced @pxref{Logging and Error Message Options}. @item Three new output formats have been added: one for output to be read into AXIOM and two formats intended to be simply and quickly read by special-purpose programs. @xref{Output Formats} and @ref{Output Options}. @item A special option has been added to indicate that all the generators commute with one another, so that the module constructed will be a quotient of a polynomial ring. @xref{Input File Options}. @item All the programs have been combined into a single set of sources. @xref{The Source Code}. @item A number of new options have been added to control execution and limit the module dimension and the run time. @xref{Limit Options} @item A new option has been added to override the characteristic given in the presentation file. @xref{Input File Options}. @item A new options has been added to suppress the automatically generated relations for non-invertible generators. @item Early-closing is now disabled by default, in the interests of mathematical accuracy. It can be re-enabled using the @code{-e} option. @xref{Strategic Options}. @end itemize @node Installation, Input Formats, Introduction, Top @comment node-name, next, previous, up @chapter Installation @menu * Installation Procedure:: Installation Procedure * Pre-requisites:: Pre-requisites @end menu @node Installation Procedure, Pre-requisites, Installation, Installation @comment node-name, next, previous, up @section Installation Procedure @cindex Installation @cindex Compilation @cindex Distribution @cindex Getting hold of the programs @cindex Directories Since you're reading this manual you have probably already obtained the vector enumeration package and unpacked it from the compressed distribution. Just for completeness, or for getting a later version, the software is available from me, Steve Linton (@code{sal@@cs.stand.ac.uk}), or by anonymous FTP from @code{galois.maths.qmw.ac.uk}. It consists of just one file @file{nme.tar.Z} (there may also be @file{nme.tar.z} and/or @file{nme.zoo}). The file @file{nme.README} is a copy of the @file{README} file contained in the distribution. You should create a new directory @dfn{the nme home directory} into which to unpack the distribution which will then create subdirectories @file{./ve}, @file{./rat}, @file{./int}, @file{./docs} and @file{./examples}. The first three contain only @file{GNUmakefile}s, @file{./docs} contains this TeXInfo file and @file{./examples} contains some input files for testing. The current directory contains the C and Bison source files, the master @file{Makefile} and @file{GNUmakefile} and the shell script @file{build.sh}. There are three alternative ways of compiling the programs. Simple compilation should suffice for most users. @menu * Simple Compilation:: * General Installation:: * Compile-time options:: @end menu @node Simple Compilation, General Installation, Installation Procedure, Installation Procedure @comment node-name, next, previous, up @subsection Simple Compilation @cindex Compilation, simple @cindex Build script Users not intending to modify the programs or to compile them for multiple architectures in the same directory hierarchy should use simple compilation. Simply change to the nme home directory and: @enumerate 1 @item Edit the shell script @file{build.sh} to: @itemize @bullet @item Set the correct name for the C compiler (probably @code{cc} or @code{gcc}). @item Set the system flags to avoid problems with you compiler library and header files. See @file{Makefile} for details of this. @item Set the compiler, pre-processor and linker flags so that the compiler will find the GMP libraries and include files @pxref{Pre-requisites} and will suitably optimize the programs. @item Include the C version of @code{alloca} if it is not provided by your system (most BSD systems provide it, most System V systems do not). @item Comment out appropriate sections of the script if you do not need all of the programs @file{me}, @file{qme} and @file{zme}. If you need only @file{me}, then you needn't worry about GMP. @end itemize @item Type @samp{./build.sh}. @item Cross your fingers. @end enumerate Assuming everything works, you will end up with the three executable programs in the @file{bin} subdirectory of the nme home directory. They may be moved to any convenient location. @node General Installation, Compile-time options, Simple Compilation, Installation Procedure @comment node-name, next, previous, up @subsection General Installation @cindex Compilation, general @cindex Make program If you plan to develop enhancements to the programs, or wish to compile them for multiple architectures then you will need to install the package completely. You can do this either using the @file{Makefile}, mainly prepared for when the package is installed as a GAP share library, or using the @file{GNUmakefile}. For the latter you will need version 3.63 or later of GNU make. It will also be simpler if you have a C compiler with the @code{-M} option to prepare dependency lists automatically. General installation and simple installation should not be done in the same directory, as they use subdirectories differently. @cindex Architectures, hardware @cindex Hardware architectures @cindex Multiple architectures @subsubsection Using GNU Make For general installation with GNU make you will need to arrange to have an environment variable @code{ARCH} set to some convenient name for the current hardware architecture. I do this with a line @example setenv ARCH `arch` @end example in my @file{.cshrc} file, and a small shell script @file{arch} that uses the hostname to decide what type of computer I am using. On Sun systems @file{arch} is a system command. You should then create a subdirectory @file{bin} of the nme home directory. For each architecture @var{xxx} that is likely to be of interest you should also create subdirectories @var{xxx} of the @file{bin}, @file{ve}, @file{rat} and @file{int} subdirectories of the nme home directory. You should then edit the file @file{Makefile.inc} in the nme home directory and set the C compiler, and compiler, linker and pre-processor flags suitably. Assuming that your command to call GNU make is @code{gmake}, running @code{gmake} in the nme home directory should make all three programs, while running it in @file{ve} will make @code{me}, in @file{rat} will make @code{qme} and running it in @file{int} will make @code{zme}. The binaries will be stored in @file{bin/$ARCH}, which can conveniently be included in your path, and separate directories will be used for the object files for each architecture, so that they can be kept independently up to date. @subsubsection Using the GAP Makefile To use Martin Schoenert's ingenious Makefile to build the package, edit @file{Makefile} in the nme home directory and set the variables @code{INCDIRGMP} and @code{LIBDIRGMP} appropriately for your system. Then type @code{make