Plans in general regarding groupoids.
More...
Go to the source code of this file.
Detailed Description
Plans in general regarding groupoids.
 Todo:
 Write tests
 Todo:
 Naming conventions
 Todo:
 Forms of "constructive" groupoids

For implicit representations (see "Abstract representation of structures") we (still) assume

that representations of groupoid elements are given by terms (though there may be many terms),

that we can decide equality,

and that we can decide membership.

One can drop both (decidability) conditions, turning the groupoid operations into "promise functions" which only yield defined results if the inputs are actually groupoid elements.

Independently we can consider that we have given a function f() which returns a "random element" of the finite groupoid:

The returned valued must be guaranteed to be an element.

Strongest is guaranteed uniform distribution.

In the extreme other case we don't have any guarantee.

Strengthenings of implicit representations:

A generating set is often at hand.

Additionally a "rewrite algorithm" might be given, computing for each representation of a groupoid element a word in the generators representing that element.

For such a rewrite algorithm one can require "canonicity", that is, for inputs representing the same element we obtain the same word (thus the rewrite algorithm also solves equality decision).
 Todo:
 Straightline programs

The most general form of a "straightline program" to represent an element of a groupoid is just a Maxima term.

Much more special, it is just a sequence of words, the first only in the given generators, and all further words are allowed to use all previous words, while the final word represents the element.
 Todo:
 Congruence relations

A new submodule "Quotients.mac" is needed for the handling of congruence relations in groupoids.

See also "Induced congruence relation" in ComputerAlgebra/Algebra/Lisp/Groupoids/plans/Homomorphisms.hpp.

Providing congruence_grd_p, and for a given congruence relation, the quotient groupoid.

Likely we should provide two representations of the quotient groupoid:

The direct one, with equivalence classes as elements.

Since Maximasets have an underlying order, it seems sensible to use the first element of an equivalence class as a representative.
Definition in file general.hpp.