Subsemigroups: membership criteria #
In this file we prove various facts about membership in a subsemigroup.
The intent is to mimic GroupTheory/Submonoid/Membership
, but currently this file is mostly a
stub and only provides rudimentary support.
mem_iSup_of_directed
,coe_iSup_of_directed
,mem_sSup_of_directed_on
,coe_sSup_of_directed_on
: the supremum of a directed collection of subsemigroup is their union.
TODO #
- Define the
FreeSemigroup
generated by a set. This might require some rather substantial additions to low-level API. For example, developing the subtype of nonempty lists, then defining a product on nonempty lists, powers where the exponent is a positive natural, et cetera. Another option would be to define theFreeSemigroup
as the subsemigroup (pushed to be a semigroup) of theFreeMonoid
consisting of non-identity elements.
Tags #
subsemigroup
theorem
Subsemigroup.mem_iSup_of_directed
{ι : Sort u_1}
{M : Type u_2}
[Mul M]
{S : ι → Subsemigroup M}
(hS : Directed (fun (x1 x2 : Subsemigroup M) => x1 ≤ x2) S)
{x : M}
:
theorem
AddSubsemigroup.mem_iSup_of_directed
{ι : Sort u_1}
{M : Type u_2}
[Add M]
{S : ι → AddSubsemigroup M}
(hS : Directed (fun (x1 x2 : AddSubsemigroup M) => x1 ≤ x2) S)
{x : M}
:
theorem
Subsemigroup.coe_iSup_of_directed
{ι : Sort u_1}
{M : Type u_2}
[Mul M]
{S : ι → Subsemigroup M}
(hS : Directed (fun (x1 x2 : Subsemigroup M) => x1 ≤ x2) S)
:
↑(⨆ (i : ι), S i) = ⋃ (i : ι), ↑(S i)
theorem
AddSubsemigroup.coe_iSup_of_directed
{ι : Sort u_1}
{M : Type u_2}
[Add M]
{S : ι → AddSubsemigroup M}
(hS : Directed (fun (x1 x2 : AddSubsemigroup M) => x1 ≤ x2) S)
:
↑(⨆ (i : ι), S i) = ⋃ (i : ι), ↑(S i)
theorem
Subsemigroup.mem_sSup_of_directed_on
{M : Type u_2}
[Mul M]
{S : Set (Subsemigroup M)}
(hS : DirectedOn (fun (x1 x2 : Subsemigroup M) => x1 ≤ x2) S)
{x : M}
:
theorem
AddSubsemigroup.mem_sSup_of_directed_on
{M : Type u_2}
[Add M]
{S : Set (AddSubsemigroup M)}
(hS : DirectedOn (fun (x1 x2 : AddSubsemigroup M) => x1 ≤ x2) S)
{x : M}
:
theorem
Subsemigroup.coe_sSup_of_directed_on
{M : Type u_2}
[Mul M]
{S : Set (Subsemigroup M)}
(hS : DirectedOn (fun (x1 x2 : Subsemigroup M) => x1 ≤ x2) S)
:
theorem
AddSubsemigroup.coe_sSup_of_directed_on
{M : Type u_2}
[Add M]
{S : Set (AddSubsemigroup M)}
(hS : DirectedOn (fun (x1 x2 : AddSubsemigroup M) => x1 ≤ x2) S)
:
theorem
Subsemigroup.mul_mem_sup
{M : Type u_2}
[Mul M]
{S T : Subsemigroup M}
{x y : M}
(hx : x ∈ S)
(hy : y ∈ T)
:
theorem
AddSubsemigroup.add_mem_sup
{M : Type u_2}
[Add M]
{S T : AddSubsemigroup M}
{x y : M}
(hx : x ∈ S)
(hy : y ∈ T)
:
theorem
Subsemigroup.mem_iSup_of_mem
{ι : Sort u_1}
{M : Type u_2}
[Mul M]
{S : ι → Subsemigroup M}
(i : ι)
{x : M}
:
theorem
AddSubsemigroup.mem_iSup_of_mem
{ι : Sort u_1}
{M : Type u_2}
[Add M]
{S : ι → AddSubsemigroup M}
(i : ι)
{x : M}
:
theorem
Subsemigroup.mem_sSup_of_mem
{M : Type u_2}
[Mul M]
{S : Set (Subsemigroup M)}
{s : Subsemigroup M}
(hs : s ∈ S)
{x : M}
:
theorem
AddSubsemigroup.mem_sSup_of_mem
{M : Type u_2}
[Add M]
{S : Set (AddSubsemigroup M)}
{s : AddSubsemigroup M}
(hs : s ∈ S)
{x : M}
:
theorem
Subsemigroup.iSup_induction
{ι : Sort u_1}
{M : Type u_2}
[Mul M]
(S : ι → Subsemigroup M)
{C : M → Prop}
{x₁ : M}
(hx₁ : x₁ ∈ ⨆ (i : ι), S i)
(mem : ∀ (i : ι), ∀ x₂ ∈ S i, C x₂)
(mul : ∀ (x y : M), C x → C y → C (x * y))
:
C x₁
An induction principle for elements of ⨆ i, S i
.
If C
holds all elements of S i
for all i
, and is preserved under multiplication,
then it holds for all elements of the supremum of S
.
theorem
AddSubsemigroup.iSup_induction
{ι : Sort u_1}
{M : Type u_2}
[Add M]
(S : ι → AddSubsemigroup M)
{C : M → Prop}
{x₁ : M}
(hx₁ : x₁ ∈ ⨆ (i : ι), S i)
(mem : ∀ (i : ι), ∀ x₂ ∈ S i, C x₂)
(mul : ∀ (x y : M), C x → C y → C (x + y))
:
C x₁
An induction principle for elements of ⨆ i, S i
. If C
holds all
elements of S i
for all i
, and is preserved under addition, then it holds for all elements of
the supremum of S
.
theorem
Subsemigroup.iSup_induction'
{ι : Sort u_1}
{M : Type u_2}
[Mul M]
(S : ι → Subsemigroup M)
{C : (x : M) → x ∈ ⨆ (i : ι), S i → Prop}
(mem : ∀ (i : ι) (x : M) (hxS : x ∈ S i), C x ⋯)
(mul : ∀ (x y : M) (hx : x ∈ ⨆ (i : ι), S i) (hy : y ∈ ⨆ (i : ι), S i), C x hx → C y hy → C (x * y) ⋯)
{x₁ : M}
(hx₁ : x₁ ∈ ⨆ (i : ι), S i)
:
C x₁ hx₁
A dependent version of Subsemigroup.iSup_induction
.
theorem
AddSubsemigroup.iSup_induction'
{ι : Sort u_1}
{M : Type u_2}
[Add M]
(S : ι → AddSubsemigroup M)
{C : (x : M) → x ∈ ⨆ (i : ι), S i → Prop}
(mem : ∀ (i : ι) (x : M) (hxS : x ∈ S i), C x ⋯)
(mul : ∀ (x y : M) (hx : x ∈ ⨆ (i : ι), S i) (hy : y ∈ ⨆ (i : ι), S i), C x hx → C y hy → C (x + y) ⋯)
{x₁ : M}
(hx₁ : x₁ ∈ ⨆ (i : ι), S i)
:
C x₁ hx₁
A dependent version of AddSubsemigroup.iSup_induction
.