Module docstring
{"# Submonoids: definition
This file defines bundled multiplicative and additive submonoids. We also define
a CompleteLattice structure on Submonoids, define the closure of a set as the minimal submonoid
that includes this set, and prove a few results about extending properties from a dense set (i.e.
a set with closure s = ⊤) to the whole monoid, see Submonoid.dense_induction and
MonoidHom.ofClosureEqTopLeft/MonoidHom.ofClosureEqTopRight.
Main definitions
Submonoid M: the type of bundled submonoids of a monoidM; the underlying set is given in thecarrierfield of the structure, and should be accessed through coercion as in(S : Set M).AddSubmonoid M: the type of bundled submonoids of an additive monoidM.
For each of the following definitions in the Submonoid namespace, there is a corresponding
definition in the AddSubmonoid namespace.
Submonoid.copy: copy of a submonoid withcarrierreplaced by a set that is equal but possibly not definitionally equal to the carrier of the originalSubmonoid.MonoidHom.eqLocusM: the submonoid of elementsx : Msuch thatf x = g x;
Implementation notes
Submonoid inclusion is denoted ≤ rather than ⊆, although ∈ is defined as
membership of a submonoid's underlying set.
Note that Submonoid M does not actually require Monoid M, instead requiring only the weaker
MulOneClass M.
This file is designed to have very few dependencies. In particular, it should not use natural
numbers. Submonoid is implemented by extending Subsemigroup requiring one_mem'.
Tags
submonoid, submonoids "}