commutative monoid

Commutative Monoid

Commutative Monoid

Mathematically a commutative Monoid is a Semigroup M along with an identity element u, such that

(∃u M) => (∀m M)(u+m = m+u = m)

When such an identity element u exists, it is necessarily unique.

Important

Contract: Commutative Monoid initializer parameters must have

  • add closed commutative and associative on reps

  • zero an identity on reps, rep+zero == rep == zero+rep

class boring_math.abstract_algebra.algebras.commutative_monoid.CommutativeMonoid

Bases: CommutativeSemigroup, Generic

Parameters:
  • add – Closed commutative and associative function reps.

  • zero – Representation for additive identity.

  • narrow – Narrow the rep type, many-to-one function. Like choosing an element from a coset of a group.

__init__(add: Callable[[H, H], H], zero: H, narrow: Callable[[H], H] | None = None)
Parameters:
  • add – Closed commutative and associative function reps.

  • zero – Representation for additive identity.

  • narrow – Narrow the rep type, many-to-one function. Like choosing an element from a coset of a group.

class boring_math.abstract_algebra.algebras.commutative_monoid.CommutativeMonoidElement

Bases: CommutativeSemigroupElement, Generic

__init__(rep: H, algebra: CommutativeMonoid[H]) None
__str__() str
Returns:

str(self) = CommutativeMonoidElement<rep>

__mul__(n: object) Self

Repeatedly add an element to itself n >= 0 times.

Parameters:

n – Object, usually a non-negative int or action.

Returns:

If n: int then self added to itself n times else NotImplemented.

Raises:
  • ValueError – When n < 0.

  • ValueError – If self and other are same type but different concrete algebras.

  • TypeError – If algebra fails to have an additive identity element or an addition method.

__rmul__(n: int) Self

Repeatedly add an element to itself n > 0 times.

__add__(right: Self) Self

Add two elements of the same concrete algebra together.

Parameters:

other – Another element within the same algebra.

Returns:

The sum self + other.

Raises:
  • ValueError – If self and other are same type but different concrete algebras.

  • TypeError – If Addition not defined on the algebra of the elements.

  • TypeError – If self and right are different types.

__radd__(left: Self) Self

When left side of addition does not know how to add right side.

Parameters:

other – Left side of the addition.

Returns:

Never returns, otherwise left.__add__(right) would have worked.

Raises:

TypeError – When right side does not know how to add the left side to itself.