Plans in general regarding semigroups.
More...
Go to the source code of this file.
Detailed Description
Plans in general regarding semigroups.
 Todo:
 Transformations

The abbreviation for transformations is "trf", in the two forms "trf_l" (via lists), and "trf_sm" (more general, via setmaps).

Provide trf_sm_compo and trf_sm_mon.

Compare "Acronyms" in Algebra/Lisp/Groupoids/Groups/plans/SymmetricGroups.hpp.

It seems we should switch "trf_l" > "trfl", and likewise "trf_sm" > "trfsm".

There is also "trff", that is, transformations as functions.
 Todo:
 The natural operation of N

For every semigroup (S,*) we have the natural operation of N by "exponentiation", (n,x) > x^n for x in S and n in N.

This operation is an operation of the prering (N,+,*,0,1) on (S,*) (i.e., a "premodule"; see ComputerAlgebra/Algebra/Lisp/Ringframes/plans/BasicNotions.hpp), that is, a homomorphism of (N,+,*,0,1) into the transformationprering of S (with mapcomposition as multiplication, and pointwisecomposition (in S) as addition).

If S is a monoid, than N_0 can operate, and if S is a group, then Z can operate.

Algorithmically, these are just case distinctions: if n = 0, then return the neutral element, if n < 0, then compute the inverse x' and return (x')^(n).

According to our general philosophy "no polymorphism at the
Maxima/Lisp level", we should thus have three functions, providing these three different operations.

Perhaps all this should go to Algebra/Lisp/Ringframes/Operations ?

And perhaps the groupcase to Algebra/Lisp/Ringframes/Modules ?

Or perhaps we keep it all in this module, with links to the other modules ?

Compare "Module Operations" in ComputerAlgebra/Algebra/Lisp/Ringframes/plans/general.hpp.

In [Henri Cohen, A Course in Computational Algebraic Number Theory, Springer, 1993] one finds four basic algorithms.

"Rightleft binary"

"Leftright binary"

"Leftright binary, using bits"

"Leftright base 2^k"; with a "flexible" improvement in the Addendum (page 547).

Furthermore "addition chains" are mentioned.

And we need also to provide the simple iterated multiplication.

An additional "service" possibly provided by a semigroup in this context is a (fast) squaring algorithm.

This could be an additional parameter for all the above (fast) methods.

While instances are provided which just use the semigroup multiplication.

Semigroups could also provide the complete operation of N:

In permutation groups where the elements are given by their cycle presentation, powers can be computed directly very efficiently; see "Computing powers, based on the cycle representation" in ComputerAlgebra/Algebra/Lisp/Groupoids/Groups/plans/SymmetricGroups.hpp.

So if an algorithm uses the operation of N (or N_0, or Z) on a semigroup (monoid, group), then the operation should be provided as a parameter.
 Todo:
 Semilattices

Should semilattices yield of submodule of this module, or should it be separate?
Definition in file general.hpp.