Module docstring
{"# Submonoids: CompleteLattice structure
This file defines 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
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.Submonoid.closure: monoid closure of a set, i.e., the least submonoid that includes the set.Submonoid.gi:closure : Set M → Submonoid Mand coercioncoe : Submonoid M → Set Mform aGaloisInsertion;MonoidHom.eqLocus: the submonoid of elementsx : Msuch thatf x = g x;MonoidHom.ofClosureEqTopRight: if a mapf : M → Nbetween two monoids satisfiesf 1 = 1andf (x * y) = f x * f yforyfrom some dense sets, thenfis a monoid homomorphism. E.g., iff : ℕ → Msatisfiesf 0 = 0andf (x + 1) = f x + f 1, thenfis an additive monoid homomorphism.
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 "}