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
Equations
- AddSubmonoid.instInfSet = { sInf := fun (s : Set (AddSubmonoid M)) => { carrier := ⋂ t ∈ s, ↑t, add_mem' := ⋯, zero_mem' := ⋯ } }
Submonoids of a monoid form a complete lattice.
Equations
- One or more equations did not get rendered due to their size.
The AddSubmonoids of an AddMonoid form a complete lattice.
Equations
- One or more equations did not get rendered due to their size.
The AddSubmonoid generated by a set
Equations
- AddSubmonoid.closure s = sInf {S : AddSubmonoid M | s ⊆ ↑S}
Instances For
The submonoid generated by a set includes the set.
The AddSubmonoid generated by a set includes the set.
Alias of AddSubmonoid.notMem_of_notMem_closure.
Alias of Submonoid.notMem_of_notMem_closure.
An additive submonoid S includes closure s if and only if it includes s.
An induction principle for closure membership. If p holds for 1 and all elements of s, and
is preserved under multiplication, then p holds for all elements of the closure of s.
An induction principle for additive closure membership. If p holds for 0 and all
elements of s, and is preserved under addition, then p holds for all elements of the
additive closure of s.
An induction principle for closure membership for predicates with two arguments.
An induction principle for additive closure membership for predicates with two arguments.
If s is a dense set in a monoid M, Submonoid.closure s = ⊤, then in order to prove that
some predicate p holds for all x : M it suffices to verify p x for x ∈ s, verify p 1,
and verify that p x and p y imply p (x * y).
If s is a dense set in an additive monoid M, AddSubmonoid.closure s = ⊤, then in
order to prove that some predicate p holds for all x : M it suffices to verify p x for
x ∈ s, verify p 0, and verify that p x and p y imply p (x + y).
The Submonoid.closure of a set is the union of {1} and its Subsemigroup.closure.
closure forms a Galois insertion with the coercion to set.
Equations
- Submonoid.gi M = { choice := fun (s : Set M) (x : ↑(Submonoid.closure s) ≤ s) => Submonoid.closure s, gc := ⋯, le_l_u := ⋯, choice_eq := ⋯ }
Instances For
closure forms a Galois insertion with the coercion to set.
Equations
- AddSubmonoid.gi M = { choice := fun (s : Set M) (x : ↑(AddSubmonoid.closure s) ≤ s) => AddSubmonoid.closure s, gc := ⋯, le_l_u := ⋯, choice_eq := ⋯ }
Instances For
Closure of a submonoid S equals S.
Additive closure of an additive submonoid S equals S
If two monoid homomorphisms are equal on a set, then they are equal on its submonoid closure.
If two monoid homomorphisms are equal on a set, then they are equal on its submonoid closure.
The additive submonoid consisting of the additive units of an additive monoid
Instances For
Let s be a subset of a monoid M such that the closure of s is the whole monoid.
Then MonoidHom.ofClosureEqTopLeft defines a monoid homomorphism from M asking for
a proof of f (x * y) = f x * f y only for x ∈ s.
Equations
- MonoidHom.ofClosureMEqTopLeft f hs h1 hmul = { toFun := f, map_one' := h1, map_mul' := ⋯ }
Instances For
Let s be a subset of an additive monoid M such that the closure of s is
the whole monoid. Then AddMonoidHom.ofClosureEqTopLeft defines an additive monoid
homomorphism from M asking for a proof of f (x + y) = f x + f y only for x ∈ s.
Equations
- AddMonoidHom.ofClosureMEqTopLeft f hs h1 hmul = { toFun := f, map_zero' := h1, map_add' := ⋯ }
Instances For
Let s be a subset of a monoid M such that the closure of s is the whole monoid.
Then MonoidHom.ofClosureEqTopRight defines a monoid homomorphism from M asking for
a proof of f (x * y) = f x * f y only for y ∈ s.
Equations
- MonoidHom.ofClosureMEqTopRight f hs h1 hmul = { toFun := f, map_one' := h1, map_mul' := ⋯ }
Instances For
Let s be a subset of an additive monoid M such that the closure of s is
the whole monoid. Then AddMonoidHom.ofClosureEqTopRight defines an additive monoid
homomorphism from M asking for a proof of f (x + y) = f x + f y only for y ∈ s.
Equations
- AddMonoidHom.ofClosureMEqTopRight f hs h1 hmul = { toFun := f, map_zero' := h1, map_add' := ⋯ }