Submonoids: CompleteLattice
structure #
This file defines a CompleteLattice
structure on Submonoid
s, 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 withcarrier
replaced 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 M
and coercioncoe : Submonoid M → Set M
form aGaloisInsertion
;MonoidHom.eqLocus
: the submonoid of elementsx : M
such thatf x = g x
;MonoidHom.ofClosureEqTopRight
: if a mapf : M → N
between two monoids satisfiesf 1 = 1
andf (x * y) = f x * f y
fory
from some dense sets
, thenf
is a monoid homomorphism. E.g., iff : ℕ → M
satisfiesf 0 = 0
andf (x + 1) = f x + f 1
, thenf
is 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' := ⋯ } }
The AddSubmonoid
s of an AddMonoid
form a complete lattice.
Equations
- AddSubmonoid.instCompleteLattice = CompleteLattice.mk ⋯ ⋯ ⋯ ⋯ ⋯ ⋯
Submonoids of a monoid form a complete lattice.
Equations
- Submonoid.instCompleteLattice = CompleteLattice.mk ⋯ ⋯ ⋯ ⋯ ⋯ ⋯
The AddSubmonoid
generated by a set
Equations
- AddSubmonoid.closure s = sInf {S : AddSubmonoid M | s ⊆ ↑S}
Instances For
The AddSubmonoid
generated by a set includes the set.
The submonoid generated by a set includes the set.
An additive submonoid S
includes closure s
if and only if it includes s
A submonoid S
includes closure s
if and only if it includes s
.
Additive submonoid closure of a set is monotone in its argument: if s ⊆ t
,
then closure s ≤ closure t
Submonoid closure of a set is monotone in its argument: if s ⊆ t
,
then closure s ≤ closure t
.
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. 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
.
Alias of Submonoid.closure_induction
.
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 for predicates with two arguments.
An induction principle for closure membership for predicates with two arguments.
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)
.
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)
.
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
- 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
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
Additive closure of an additive submonoid S
equals S
Closure of a 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
Equations
- IsAddUnit.addSubmonoid M = { carrier := setOf IsAddUnit, add_mem' := ⋯, zero_mem' := ⋯ }
Instances For
The submonoid consisting of the units of a monoid
Equations
- IsUnit.submonoid M = { carrier := setOf IsUnit, mul_mem' := ⋯, one_mem' := ⋯ }
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.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.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' := ⋯ }
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' := ⋯ }