Built with doc-gen4, running Lean4.
Bubbles () indicate interactive fragments: hover for details, tap to reveal contents.
Use Ctrl+βCtrl+βto navigate, Ctrl+π±οΈto focus.
On Mac, use Cmdinstead of Ctrl.
/-
Copyright (c) 2022 Jireh Loreaux. All rights reserved.
Released under Apache 2.0 license as described in the file LICENSE.
Authors: Jireh Loreaux
! This file was ported from Lean 3 source module group_theory.subsemigroup.membership
! leanprover-community/mathlib commit 6cb77a8eaff0ddd100e87b1591c6d3ad319514ff
! Please do not edit these lines, except to modify the commit id
! if you have ported upstream changes.
-/
import Mathlib.GroupTheory.Subsemigroup.Basic
/-!
# 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 the `FreeSemigroup` as the subsemigroup (pushed to be a
semigroup) of the `FreeMonoid` consisting of non-identity elements.
## Tags
subsemigroup
-/
variable {
M]
open Set
namespace Subsemigroup
-- TODO: this section can be generalized to `[MulMemClass B M] [CompleteLattice B]`
-- such that `complete_lattice.le` coincides with `set_like.le`
@[
AddSubsemigroup.mem_sSup_of_mem
/-- 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`. -/
@[
to_additive: β {ΞΉ : Sort u_2} {M : Type u_1} [inst : AddM] (S : ΞΉ β AddSubsemigroupM) {C : M β Prop} {xβ : M},
(xβββ¨ i, Si) β (β (i : ΞΉ) (xβ : M), xββSi β Cxβ) β (β (x y : M), Cx β Cy β C (x+y)) β Cxβ
to_additive (attr := elab_as_elim)
"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
iSup_induction: β (S : ΞΉ β SubsemigroupM) {C : M β Prop} {xβ : M},
(xβββ¨ i, Si) β (β (i : ΞΉ) (xβ : M), xββSi β Cxβ) β (β (x y : M), Cx β Cy β C (x*y)) β Cxβ
ΞΉ: Sort u_2 M: Type u_1 A: Type ?u.9348 B: Type ?u.9351 instβ: MulM S: ΞΉ β SubsemigroupM C: M β Prop xβ: M hxβ: xβββ¨ i, Si hp: β (i : ΞΉ) (xβ : M), xββSi β Cxβ hmul: β (x y : M), Cx β Cy β C (x*y)
Cxβ
ΞΉ: Sort u_2 M: Type u_1 A: Type ?u.9348 B: Type ?u.9351 instβ: MulM S: ΞΉ β SubsemigroupM C: M β Prop xβ: M hxβ: xβββ¨ i, Si hp: β (i : ΞΉ) (xβ : M), xββSi β Cxβ hmul: β (x y : M), Cx β Cy β C (x*y)
Cxβ
ΞΉ: Sort u_2 M: Type u_1 A: Type ?u.9348 B: Type ?u.9351 instβ: MulM S: ΞΉ β SubsemigroupM C: M β Prop xβ: M hxβ: xββclosure (iUnionfun i => β(Si)) hp: β (i : ΞΉ) (xβ : M), xββSi β Cxβ hmul: β (x y : M), Cx β Cy β C (x*y)
Cxβ
ΞΉ: Sort u_2 M: Type u_1 A: Type ?u.9348 B: Type ?u.9351 instβ: MulM S: ΞΉ β SubsemigroupM C: M β Prop xβ: M hxβ: xββclosure (iUnionfun i => β(Si)) hp: β (i : ΞΉ) (xβ : M), xββSi β Cxβ hmul: β (x y : M), Cx β Cy β C (x*y)
Cxβ
ΞΉ: Sort u_2 M: Type u_1 A: Type ?u.9348 B: Type ?u.9351 instβ: MulM S: ΞΉ β SubsemigroupM C: M β Prop xβ: M hxβ: xββclosure (iUnionfun i => β(Si)) hp: β (i : ΞΉ) (xβ : M), xββSi β Cxβ hmul: β (x y : M), Cx β Cy β C (x*y)
Cxβ
ΞΉ: Sort u_2 M: Type u_1 A: Type ?u.9348 B: Type ?u.9351 instβ: MulM S: ΞΉ β SubsemigroupM C: M β Prop xβ: M hxβ: xβββ¨ i, Si hp: β (i : ΞΉ) (xβ : M), xββSi β Cxβ hmul: β (x y : M), Cx β Cy β C (x*y)
Cxβ
ΞΉ: Sort u_2 M: Type u_1 A: Type ?u.9348 B: Type ?u.9351 instβ: MulM S: ΞΉ β SubsemigroupM C: M β Prop xβ: M hxβ: xββclosure (iUnionfun i => β(Si)) hp: β (i : ΞΉ) (xβ : M), xββSi β Cxβ hmul: β (x y : M), Cx β Cy β C (x*y) xβ: M hxβ: xββiUnionfun i => β(Si)
Cxβ
ΞΉ: Sort u_2 M: Type u_1 A: Type ?u.9348 B: Type ?u.9351 instβ: MulM S: ΞΉ β SubsemigroupM C: M β Prop xβ: M hxβ: xβββ¨ i, Si hp: β (i : ΞΉ) (xβ : M), xββSi β Cxβ hmul: β (x y : M), Cx β Cy β C (x*y)
Cxβ
ΞΉ: Sort u_2 M: Type u_1 A: Type ?u.9348 B: Type ?u.9351 instβ: MulM S: ΞΉ β SubsemigroupM C: M β Prop xβ: M hxβ: xββclosure (iUnionfun i => β(Si)) hp: β (i : ΞΉ) (xβ : M), xββSi β Cxβ hmul: β (x y : M), Cx β Cy β C (x*y) xβ: M hxβ: xββiUnionfun i => β(Si) i: ΞΉ hi: xβββ(Si)
intro
Cxβ
ΞΉ: Sort u_2 M: Type u_1 A: Type ?u.9348 B: Type ?u.9351 instβ: MulM S: ΞΉ β SubsemigroupM C: M β Prop xβ: M hxβ: xβββ¨ i, Si hp: β (i : ΞΉ) (xβ : M), xββSi β Cxβ hmul: β (x y : M), Cx β Cy β C (x*y)
Cxβ
Goals accomplished! π
#align subsemigroup.supr_induction
Subsemigroup.iSup_induction: β {ΞΉ : Sort u_2} {M : Type u_1} [inst : MulM] (S : ΞΉ β SubsemigroupM) {C : M β Prop} {xβ : M},
(xβββ¨ i, Si) β (β (i : ΞΉ) (xβ : M), xββSi β Cxβ) β (β (x y : M), Cx β Cy β C (x*y)) β Cxβ
ΞΉ: Sort u_2 M: Type u_1 A: Type ?u.9929 B: Type ?u.9932 instβ: MulM S: ΞΉ β SubsemigroupM C: (x : M) β (xββ¨ i, Si) β Prop hp: β (i : ΞΉ) (x : M) (hxS : xβSi), Cx(_ : xββ¨ i, Si) hmul: β (x y : M) (hx : xββ¨ i, Si) (hy : yββ¨ i, Si), Cxhx β Cyhy β C (x*y) (_ : x*yββ¨ i, Si) xβ: M hxβ: xβββ¨ i, Si
Cxβhxβ
ΞΉ: Sort u_2 M: Type u_1 A: Type ?u.9929 B: Type ?u.9932 instβ: MulM S: ΞΉ β SubsemigroupM C: (x : M) β (xββ¨ i, Si) β Prop hp: β (i : ΞΉ) (x : M) (hxS : xβSi), Cx(_ : xββ¨ i, Si) hmul: β (x y : M) (hx : xββ¨ i, Si) (hy : yββ¨ i, Si), Cxhx β Cyhy β C (x*y) (_ : x*yββ¨ i, Si) xβ: M hxβ: xβββ¨ i, Si
β x, Cxβx
ΞΉ: Sort u_2 M: Type u_1 A: Type ?u.9929 B: Type ?u.9932 instβ: MulM S: ΞΉ β SubsemigroupM C: (x : M) β (xββ¨ i, Si) β Prop hp: β (i : ΞΉ) (x : M) (hxS : xβSi), Cx(_ : xββ¨ i, Si) hmul: β (x y : M) (hx : xββ¨ i, Si) (hy : yββ¨ i, Si), Cxhx β Cyhy β C (x*y) (_ : x*yββ¨ i, Si) xβ: M hxβ: xβββ¨ i, Si
Cxβhxβ
ΞΉ: Sort u_2 M: Type u_1 A: Type ?u.9929 B: Type ?u.9932 instβ: MulM S: ΞΉ β SubsemigroupM C: (x : M) β (xββ¨ i, Si) β Prop hp: β (i : ΞΉ) (x : M) (hxS : xβSi), Cx(_ : xββ¨ i, Si) hmul: β (x y : M) (hx : xββ¨ i, Si) (hy : yββ¨ i, Si), Cxhx β Cyhy β C (x*y) (_ : x*yββ¨ i, Si) xβ: M hxβ: xβββ¨ i, Si i: ΞΉ xβ: M hxβ: xββSi
refine_1
(fun x' => β hx'', Cx'hx'') xβ
ΞΉ: Sort u_2 M: Type u_1 A: Type ?u.9929 B: Type ?u.9932 instβ: MulM S: ΞΉ β SubsemigroupM C: (x : M) β (xββ¨ i, Si) β Prop hp: β (i : ΞΉ) (x : M) (hxS : xβSi), Cx(_ : xββ¨ i, Si) hmul: β (x y : M) (hx : xββ¨ i, Si) (hy : yββ¨ i, Si), Cxhx β Cyhy β C (x*y) (_ : x*yββ¨ i, Si) xβ: M hxβ: xβββ¨ i, Si xβ, y: M
ΞΉ: Sort u_2 M: Type u_1 A: Type ?u.9929 B: Type ?u.9932 instβ: MulM S: ΞΉ β SubsemigroupM C: (x : M) β (xββ¨ i, Si) β Prop hp: β (i : ΞΉ) (x : M) (hxS : xβSi), Cx(_ : xββ¨ i, Si) hmul: β (x y : M) (hx : xββ¨ i, Si) (hy : yββ¨ i, Si), Cxhx β Cyhy β C (x*y) (_ : x*yββ¨ i, Si) xβ: M hxβ: xβββ¨ i, Si
Cxβhxβ
ΞΉ: Sort u_2 M: Type u_1 A: Type ?u.9929 B: Type ?u.9932 instβ: MulM S: ΞΉ β SubsemigroupM C: (x : M) β (xββ¨ i, Si) β Prop hp: β (i : ΞΉ) (x : M) (hxS : xβSi), Cx(_ : xββ¨ i, Si) hmul: β (x y : M) (hx : xββ¨ i, Si) (hy : yββ¨ i, Si), Cxhx β Cyhy β C (x*y) (_ : x*yββ¨ i, Si) xβ: M hxβ: xβββ¨ i, Si i: ΞΉ xβ: M hxβ: xββSi
refine_1
(fun x' => β hx'', Cx'hx'') xβ
ΞΉ: Sort u_2 M: Type u_1 A: Type ?u.9929 B: Type ?u.9932 instβ: MulM S: ΞΉ β SubsemigroupM C: (x : M) β (xββ¨ i, Si) β Prop hp: β (i : ΞΉ) (x : M) (hxS : xβSi), Cx(_ : xββ¨ i, Si) hmul: β (x y : M) (hx : xββ¨ i, Si) (hy : yββ¨ i, Si), Cxhx β Cyhy β C (x*y) (_ : x*yββ¨ i, Si) xβ: M hxβ: xβββ¨ i, Si i: ΞΉ xβ: M hxβ: xββSi
refine_1
(fun x' => β hx'', Cx'hx'') xβ
ΞΉ: Sort u_2 M: Type u_1 A: Type ?u.9929 B: Type ?u.9932 instβ: MulM S: ΞΉ β SubsemigroupM C: (x : M) β (xββ¨ i, Si) β Prop hp: β (i : ΞΉ) (x : M) (hxS : xβSi), Cx(_ : xββ¨ i, Si) hmul: β (x y : M) (hx : xββ¨ i, Si) (hy : yββ¨ i, Si), Cxhx β Cyhy β C (x*y) (_ : x*yββ¨ i, Si) xβ: M hxβ: xβββ¨ i, Si xβ, y: M
ΞΉ: Sort u_2 M: Type u_1 A: Type ?u.9929 B: Type ?u.9932 instβ: MulM S: ΞΉ β SubsemigroupM C: (x : M) β (xββ¨ i, Si) β Prop hp: β (i : ΞΉ) (x : M) (hxS : xβSi), Cx(_ : xββ¨ i, Si) hmul: β (x y : M) (hx : xββ¨ i, Si) (hy : yββ¨ i, Si), Cxhx β Cyhy β C (x*y) (_ : x*yββ¨ i, Si) xβ: M hxβ: xβββ¨ i, Si
Cxβhxβ
ΞΉ: Sort u_2 M: Type u_1 A: Type ?u.9929 B: Type ?u.9932 instβ: MulM S: ΞΉ β SubsemigroupM C: (x : M) β (xββ¨ i, Si) β Prop hp: β (i : ΞΉ) (x : M) (hxS : xβSi), Cx(_ : xββ¨ i, Si) hmul: β (x y : M) (hx : xββ¨ i, Si) (hy : yββ¨ i, Si), Cxhx β Cyhy β C (x*y) (_ : x*yββ¨ i, Si) xβ: M hxβ: xβββ¨ i, Si xβ, y: M
ΞΉ: Sort u_2 M: Type u_1 A: Type ?u.9929 B: Type ?u.9932 instβ: MulM S: ΞΉ β SubsemigroupM C: (x : M) β (xββ¨ i, Si) β Prop hp: β (i : ΞΉ) (x : M) (hxS : xβSi), Cx(_ : xββ¨ i, Si) hmul: β (x y : M) (hx : xββ¨ i, Si) (hy : yββ¨ i, Si), Cxhx β Cyhy β C (x*y) (_ : x*yββ¨ i, Si) xβ: M hxβ: xβββ¨ i, Si xβ, y: M
ΞΉ: Sort u_2 M: Type u_1 A: Type ?u.9929 B: Type ?u.9932 instβ: MulM S: ΞΉ β SubsemigroupM C: (x : M) β (xββ¨ i, Si) β Prop hp: β (i : ΞΉ) (x : M) (hxS : xβSi), Cx(_ : xββ¨ i, Si) hmul: β (x y : M) (hx : xββ¨ i, Si) (hy : yββ¨ i, Si), Cxhx β Cyhy β C (x*y) (_ : x*yββ¨ i, Si) xβ: M hxβ: xβββ¨ i, Si xβ, y: M wβΒΉ: xβββ¨ i, Si Cx: CxβwβΒΉ wβ: yββ¨ i, Si Cy: Cywβ
ΞΉ: Sort u_2 M: Type u_1 A: Type ?u.9929 B: Type ?u.9932 instβ: MulM S: ΞΉ β SubsemigroupM C: (x : M) β (xββ¨ i, Si) β Prop hp: β (i : ΞΉ) (x : M) (hxS : xβSi), Cx(_ : xββ¨ i, Si) hmul: β (x y : M) (hx : xββ¨ i, Si) (hy : yββ¨ i, Si), Cxhx β Cyhy β C (x*y) (_ : x*yββ¨ i, Si) xβ: M hxβ: xβββ¨ i, Si xβ, y: M