Adapted from Ideals, Varieties, and Algorithms Third Edition, 2007 ## Appendix CComputer Algebra Systems 1 For us, the most important AXIOM commands are [normalForm]?, for doing the division algorithm, and [groebner]?, for computing a Groebner basis. A distinctive feature of AXIOM is that every object has a specific type. In particular, this affects the way AXIOM works with monomial orders: an order is encoded in a special kind of type. For example, suppose we want to use lex order on with . This is done using the type: DMP([x,y,z], FRAC INT) (remember that AXIOM encloses a list inside brackets [...]).
Here HDMP([x,y,z],FRAC INT) where To see how this works in practice, we will divide by and using grevlex order with . We first give the three polynomials names and declare their types: fricas f : HDMP([x,
fricas g : HDMP([x,
fricas h : HDMP([x,
(Here colon : indicates a type declaration. You can save typing by giving: HDMP([x,y], FRAC INT) a symbolic name.) Then the remainder is computed by the command: fricas normalForm(f,
The output is the remainder of normalForm(poly, polylist) where To do the same computation using lex order with , first issue the command: fricas Lex := DMP([x,
Type: Typeto give: DMP([x,y], FRAC INT) the symbolic name fricas normalForm(f::Lex,
Here, we are using AXIOM's type conversion facility The syntax for the groebner(polylist) This computes a Groebner basis for the ideal generated by the
polynomials in fricas gb := groebner([g,
computes a list (and gives it the symbolic name fricas groebner([g,
will print out the remainders of S-polynomials (only one in this case) generated during the course of the computation. Adding the "info" option yields even more information. AXIOM can also work with coefficients in a variety of fields besides
. this is easily done by replacing fricas m : List DMP([x, Type: Voidfricas m := [v*x^2 + y,
fricas groebner(m)
Notice that this illustrates another method for declaring the type of polynomials used in a Grobner basis computation. Other fields are just as easy: one uses Besides working with lists of polynomials, AXIOM also allows the user to declare a list of polynomials to be an ideal. The syntax of the ideal command is: ideal polylist where `intersect` , which computes the intersection of a list of ideals.`zeroDim?` , which determines (using the methods of Chapter 5, 3) if the equations have finitely many solutions over an algebraically closed field.`dimension` , which computes the dimension of the variety defined by an ideal.`prime?` , which determines whether an ideal is prime.`radical` , which computes the radical of an ideal.`primaryDecomp` , which computes the primary decomposition of an ideal.
Examples of how to use these and other related commands can be
found in Section 8.12 of All of the commands described so far require that you declare
in advance the type of polynomial you'll be using. However, if
you only need Groebner bases in lex or grevlex order with
rational coefficients, then a simpler approach is to use the
AXIOM commands fricas lexGroebner([2*x^2+y,
Type: List(Polynomial(Integer))computes a Greobner basis (reduced up to constants) for the
ideal
using lex order with . Notice that we didn't have to
declare the type of the polynomials in advance - We will end this section by explaining how to get AXIOM to work with grlex order. All of the raw material need is present in AXIOM, though it takes a little work to put it together. For concreteness, suppose we want grlex order on x>y$. Then issue the commands: fricas )set expose add constructor GDMP fricas )set expose add constructor ODP Type: TypeThe basic idea here is that fricas groebner([g::Grlex, We should caution that type conversion doesn't work between
Grlex and the monomial orders created by fricas j : Grlex := x^2+y
Type: GeneralDistributedMultivariatePolynomial?([x,fricas k : Grlex := x+2*x*y
Type: GeneralDistributedMultivariatePolynomial?([x,fricas groebner([j,
Type: List(GeneralDistributedMultivariatePolynomial?([x,Using the AXIOM concept of a package, one could write a package which knows all of the monomial orders mentioned in the exercises to Chapter 2, 4, along with commands to convert one type to the other. fricas param := FRAC POLY INT
Type: Typefricas --vars := [ca,
fricas mm:List DMP(vars,
fricas b := groebner(mm); #b
Type: PositiveInteger?fricas for i in b repeat outputAsTex i
Type: Void |

Parameters and Variables--Bill Page, Wed, 19 Feb 2014 00:05:33 +0000 reply