ideal

© 2005-2016 John Abbott, Anna M. Bigatti
GNU Free Documentation License, Version 1.2



CoCoALib Documentation Index

Examples

User documentation

The class ideal is for representing values which are ideals of some ring. There are several ways to create an ideal:

NOTE: THIS SYNTAX WILL PROBABLY CHANGE

If you want to make an ideal in R with no generators use this syntax ideal(R, vector<RingElem>() )

Operations

The permitted operations on ideals are: let I and J be two ideals of the same ring

Queries

Additional operations for ideals in a SparsePolyRing

Additional queries

Using Frobby library

Writing new types of ideal

Anyone who writes a new type of ring class will have to consider writing a new type of ideal class to go with that ring. The ideal class must be derived from the abstract class IdealBase (and to be instantiable must offer implementations of all pure virtual functions). Be especially careful to update the data members IamPrime and IamMaximal in the non-const member functions (add, intersection, and colon).

Some guidance may be obtained from looking at the FieldIdealImpl class which implements ideals in a field (there are only two: ideal(0) and ideal(1)). See the file FieldIdeal.

Maintainer documentation for the classes ideal, IdealBase

The class ideal is little more than a reference counting smart pointer class pointing to an object of type derived from IdealBase. This approach allows many different implementations of ideals to be manipulated in a convenient and transparent manner using a common abstract interface.

The abstract class IdealBase specifies the interface which every concrete ideal class must offer. It is more complicated than one might expect partly because we want to allow the advanced user to tell the ideal whether it has certain important properties (which might be computationally expensive to determine automatically).

RadicalMembership: The implementation is straightforward (once you have learned the theory about "Rabinowitch's Trick"). We can be slightly clever when the ideal is homogeneous. (Can be terribly slow: see in test-RadicalMembership1.C for some commented out cases.)

Bugs, Shortcomings and other ideas

The maintainer documentation is still quite incomplete.

Shouldn't ideals be created by a function called NewIdeal???

I am not at all sure about the wisdom of having implemented IamPrime and IamMaximal. It seems to be terribly easy to forget to update these values when ideal values are modified (e.g. in IdealBase::add). It has also led to rather more complication that I would have liked. BUT I don't see how to allow the user to state that an ideal is maximal/prime without incurring such complication.

Functions to examine the bool3 flags could be handy for heuristic short-cuts when an ideal is already known to have a certain property.

Is it worth having a constructor for principal ideals generated by a number rather than a RingElem? e.g. NewIdeal(R,5) or NewIdeal(R,BigInt(5)).

Several member functions have names not in accordance with the coding conventions.

Main changes

2022

2017

2016