PolyRing

© 2005 John Abbott
GNU Free Documentation License, Version 1.2



CoCoALib Documentation Index

User documentation for PolyRing

PolyRing is an abstract class representing rings of polynomials. The polynomials may be (dense) univariate or (sparse) multivariate. Only a few operations are available at this level of abstraction. Use SparsePolyRing or DUPolyRing for more operations on polynomials of known representation.

Currently there are several functions to create polynomial rings: see SparsePolyRing for the sparse implementation and DenseUPolyRing for the dense implementation (only for univariate polynomials).

- CoeffRing is the ring of coefficients (must be commutative), - NumIndets specifies how many indeterminates there are; by default the indet names will be x[0],..x[NumIndets-1], and the ordering is StdDegRevLex -- see PPOrdering.

Examples

Operations on a PolyRing

Let P be an object of type PolyRing. Let R be an object of type ring.

Operations on RingElems of a PolyRing

See documentation for RingElem.

Homomorphisms

Let P be an object of type PolyRing. Let R be an object of type ring.

CoeffEmbeddingHom(P)
the homomorphism which maps CoeffRing(P) into P

PolyRingHom(P, R, CoeffHom, IndetImages)
the homomorphism from P to R which maps the coeffs using CoeffHom, and maps the k-th indet into IndetImages[k]

EvalHom(P, IndetImages)
the evaluation homomorphism from P to CoeffRing(P) which is the identity on the coeffs, and maps the kth indet into IndetImages[k]

PolyAlgebraHom(P, R, IndetImages)
must have CoeffRing(P) = R or CoeffRing(P) = CoeffRing(R) this is the identity on coeffs, and maps the k-th indet into IndetImages[k]

Maintainer documentation for PolyRing

The hard part has been deciding which member functions should be in PolyRingBase and which should be in less abstract classes. If you want to modify the code here, you should probably also look at SparsePolyRing and DUPolyRing... before messing with the code!

The implementations in PolyRing.C are all very simple: they just conduct some sanity checks on the function arguments before passing them to the PolyRing member function which will actually do the work.

Bugs, Shortcomings and other ideas

What precisely should the fancy version of deriv do? What are permitted values for the second arg? Must coeff=1? What if the second arg does not have precisely one term?

The range of member functions on RawValues is rather a hotch-potch. Hopefully, experience and use of the code will bring some better order to the chaos.

Verify the true need for myRemoveBigContent, myMulByCoeff, myDivByCoeff. If the coeff ring has zero divisors then myMulByCoeff could change the structure of the poly!

Maintainer doc is largely absent.