123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188 |
- module xideal;
- %
- % XIDEAL V2.4
- %
- %
- % Authors: David Hartley
- % GMD - German National Research Center
- % for Information Technology
- % D-53754 St Augustin
- % Germany
- %
- % email: David.Hartley@gmd.de
- %
- %
- % Philip A Tuckey
- % Laboratoire de Physique Mol\'eculaire,
- % Universit\'e de Franche-Comt\'e,
- % 25030 Besan\c{}con,
- % France
- %
- % email: pat@rs1.univ-fcomte.fr
- %
- %
- % Description: Tools for calculations with ideals of polynomials in
- % exterior algebra. Uses Groebner basis algorithms
- % described in D Hartley and P A Tuckey, "A direct
- % characterisation of Groebner bases in Clifford and
- % Grassmann algebras", Preprint MPI-Ph/93-96 1993, and J
- % Apel "A relationship between Groebner bases of ideals
- % and vector modules of G-algebras", Contemp
- % Math 131(1992)195.
- %
- % Requires: REDUCE 3.6 patched to 25 Apr 96 or later
- %
- % Created: 5/8/92 V0 as ideal.red
- %
- % Modified: 4/3/94 V1 Renamed xideal.red
- % Compiles independently
- % Converted right reduction and spolys to
- % left
- % Added graded lexicographical ordering
- % Enabled non-graded ideals
- % Fixed trivial ideal bug
- % Removed subform
- % Renamed xtrace -> xstats
- % 1/12/94 V2 Enable 2-sided ideals
- % Enable p-forms with p >= 0
- % 8/12/95 Added subs2 checking in reduction
- % 19/1/96 V2.2 Added subs2 checking in xrepartit
- % Added resimp before subs2
- % Fixed rtypes of operators
- % 16/4/96 V2.3 Added exvars and excoeffs
- %
- %
- % Algebraic mode entry points
- %
- % xorder k;
- % establishes the term order, where k is one of lex, gradlex (graded by
- % number of factors in term) or deglex (graded by exterior degree of
- % term.)
- %
- % xvars U,V,W,...;
- % declares which degree 0 kernels are to be regarded as polynomial
- % variables (rest are coefficient parameters). U,V,W can be variables
- % or lists of variables. xvars nil, restores the default, in which all
- % declared 0-forms are polynomial variables.
- %
- % xideal(S) xideal(S,V,r) or xideal(S,r)
- % calculates an exterior Groebner basis for the list of generator S,
- % with optional 0-form variables V, optionally up to degree r.
- %
- % xmodideal(F,S) or F xmodideal S
- % reduces F with respect to an exterior Groebner basis for the list of
- % generators S. F may be either a single exterior form,
- % or a list of forms.
- %
- % xmod(F,S) or F xmod S
- % reduces F with respect to the set of exterior polynomials S, which is
- % not necessarily a Groebner basis. F may be either a single
- % exterior form, or a list of forms. This routine can be used in
- % conjunction with xideal to produce the same effect as xmodideal:
- % F xmodideal S = F xmod xideal(S,exdegree F).
- %
- % xauto(S)
- % autoreduces the polynomials in S.
- %
- % exvars(F)
- % returns polynomials variables (as defined by xvars) from F
- %
- % excoeffs(F)
- % returns polynomials coefficients (as defined by xvars) from F
- %
- % Switches
- %
- % xfullreduce - Allows reduced Groebner bases to be calculated
- % (default ON)
- % trxideal - Trace spoly and wedge poly production (default OFF)
- % trxmod - Trace reduction to normal form (default OFF)
- %
- % ======================================================================
- % Need EXCALC loaded first.
- load_package 'excalc;
-
- create!-package('(
-
- xideal % Header module
- xgroeb % GB calculation
- xreduct % Normal form algorithms
- xcrit % Critical pairs, critical values
- xpowers % Powers, including div relation and lcm.
- xstorage % Storage and retrieval of critical pairs and polynomials.
- xaux % Auxiliary functions for XIDEAL
- xexcalc % Modifications to Eberhard Schruefer's excalc
-
- ),'(contrib xideal));
-
- % Switches
- fluid '(!*xfullreduce !*trxideal !*twosided !*trxmod);
- switch xfullreduce,trxideal,twosided,trxmod;
- !*xfullreduce := t; % whether to autoreduce GB
- !*trxideal := nil; % display new polynomials added to GB
- !*twosided := nil; % construct GB for two-sided ideal
- !*trxmod := nil; % display reduction chains
- % Global variables
- fluid '(xvars!* xtruncate!* xvarlist!* xdegreelist!* zerodivs!*
- xpolylist!*);
- xvars!* := t; % list of variables to include in partition
- xtruncate!* := nil; % degree at which to truncate GB
- xvarlist!* := {}; % variables in current problem
- xdegreelist!* := {}; % a-list of degrees of variables
- zerodivs!* := {}; % odd degree variables
- xpolylist!* := {}; % internal list for debugging only
-
- % Macros used in other modules
- smacro procedure xkey pr;
- car pr;
- smacro procedure pr_type pr;
- cadr pr;
- smacro procedure pr_lhs pr;
- caddr pr;
- smacro procedure pr_rhs pr;
- cadddr pr;
- smacro procedure empty_xset;
- '!*xset!* . nil;
- smacro procedure empty_xsetp c;
- null cdr c;
- smacro procedure xset_item c;
- car c;
- % Macros from other packages for compilation
- smacro procedure ldpf u; % from excalc
- %selector for leading standard form in patitioned sf;
- caar u;
- smacro procedure !*k2pf u; % from excalc
- u .* (1 ./ 1) .+ nil;
- smacro procedure negpf u; % from excalc
- multpfsq(u,(-1) ./ 1);
- smacro procedure get!*fdeg u; % from excalc
- (if x then car x else nil) where x = get(u,'fdegree);
- smacro procedure get!*ifdeg u; % from excalc
- (if x then cdr x else nil)
- where x = assoc(length cdr u,get(car u,'ifdegree));
-
- endmodule;
- end;
|