submodule

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



CoCoALib Documentation Index

Examples

User documentation

Here are some pseudo-constructors for modules which are generated by a (finite) vector of ModuleElem (in a FreeModule). There is no class for submodules, they are objects of type FGModule.

There are several ways to create a submodule:

Operations

The operations returning submodules are:

    FGModule syz(const std::vector<RingElem>& g);
    FGModule syz(const FreeModule& F, const std::vector<RingElem>& g);
    FGModule SyzOfGens(const ideal& I);
    FGModule SyzOfGens(const FreeModule& F, const ideal& I);

The operations on submodules are:

    bool IsElem(const ModuleElem& v, const module& M);
    bool IsContained(const module& M, const module& M);
    bool IsHomog(const module& M);
    matrix GensAsCols(const FGModule& Mod);
    matrix GensAsRows(const FGModule& Mod);
  
    FGModule SyzOfGens(const FGModule& N);
    FGModule SyzOfGens(const FreeModule& F, const FGModule& N);

Maintainer documentation for the classes module, and ModuleElem

I shall suppose that the maintainer documentation for modules and FGModules has already been read and digested. It could also be helpful to have read ring.txt since the "design philosophy" here imitates that used for rings.

SubmoduleImpl is a concrete class derived from FGModuleBase, i.e. objects of this class represent submodules of explicitly finitely generated modules. The data members comprise the two obvious values:

    FreeModule myM;                 // the ambient module in which the generators live
    vector<ModuleElem> myGensArray; // the generators as specified by the user

Additionally there are two other data members:

    bool myTidyGensIsValid;             // true iff myTidyGensArray contains a correct value
    vector<ModuleElem> myTidyGensArray; // a "nice" set of generators

It is difficult to be precise about the value which myTidyGensArray should contain (when valid) since it depends upon the module. If the module is over a polynomial ring then it will be a Groebner basis. If the module is over Z then it will presumably be either a "Hermite Basis" or an "LLL Basis".

Bugs, Shortcomings and other ideas

Implementation and documentation are rather incomplete.

Why is myM a FreeModule and not an FGModule???

What is myTidyGensArray for a module over Z???