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 {
ΞΉ: Sort ?u.14
ΞΉ
:
Sort _: Type ?u.2
Sort
Sort _: Type ?u.2
_
} {
M: Type ?u.5
M
A: Type ?u.7996
A
B: Type ?u.7999
B
:
Type _: Type (?u.11+1)
Type _
} section NonAssoc variable [
Mul: Type ?u.8313 β†’ Type ?u.8313
Mul
M: Type ?u.17
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` @[
to_additive: βˆ€ {ΞΉ : Sort u_2} {M : Type u_1} [inst : Add M] {S : ΞΉ β†’ AddSubsemigroup M}, Directed (fun x x_1 => x ≀ x_1) S β†’ βˆ€ {x : M}, (x ∈ ⨆ i, S i) ↔ βˆƒ i, x ∈ S i
to_additive
] theorem
mem_iSup_of_directed: βˆ€ {S : ΞΉ β†’ Subsemigroup M}, Directed (fun x x_1 => x ≀ x_1) S β†’ βˆ€ {x : M}, (x ∈ ⨆ i, S i) ↔ βˆƒ i, x ∈ S i
mem_iSup_of_directed
{
S: ΞΉ β†’ Subsemigroup M
S
:
ΞΉ: Sort ?u.29
ΞΉ
β†’
Subsemigroup: (M : Type ?u.46) β†’ [inst : Mul M] β†’ Type ?u.46
Subsemigroup
M: Type ?u.32
M
} (
hS: Directed (fun x x_1 => x ≀ x_1) S
hS
:
Directed: {Ξ± : Type ?u.57} β†’ {ΞΉ : Sort ?u.56} β†’ (Ξ± β†’ Ξ± β†’ Prop) β†’ (ΞΉ β†’ Ξ±) β†’ Prop
Directed
(Β· ≀ Β·): Subsemigroup M β†’ Subsemigroup M β†’ Prop
(Β· ≀ Β·)
S: ΞΉ β†’ Subsemigroup M
S
) {
x: M
x
:
M: Type ?u.32
M
} : (
x: M
x
∈ ⨆
i: ?m.147
i
,
S: ΞΉ β†’ Subsemigroup M
S
i: ?m.147
i
) ↔ βˆƒ
i: ?m.193
i
,
x: M
x
∈
S: ΞΉ β†’ Subsemigroup M
S
i: ?m.193
i
:=

Goals accomplished! πŸ™
ΞΉ: Sort u_2

M: Type u_1

A: Type ?u.35

B: Type ?u.38

inst✝: Mul M

S: ΞΉ β†’ Subsemigroup M

hS: Directed (fun x x_1 => x ≀ x_1) S

x: M


(x ∈ ⨆ i, S i) ↔ βˆƒ i, x ∈ S i
ΞΉ: Sort u_2

M: Type u_1

A: Type ?u.35

B: Type ?u.38

inst✝: Mul M

S: ΞΉ β†’ Subsemigroup M

hS: Directed (fun x x_1 => x ≀ x_1) S

x: M


(x ∈ ⨆ i, S i) β†’ βˆƒ i, x ∈ S i
ΞΉ: Sort u_2

M: Type u_1

A: Type ?u.35

B: Type ?u.38

inst✝: Mul M

S: ΞΉ β†’ Subsemigroup M

hS: Directed (fun x x_1 => x ≀ x_1) S

x: M


(x ∈ ⨆ i, S i) ↔ βˆƒ i, x ∈ S i
ΞΉ: Sort u_2

M: Type u_1

A: Type ?u.35

B: Type ?u.38

inst✝: Mul M

S: ΞΉ β†’ Subsemigroup M

hS: Directed (fun x x_1 => x ≀ x_1) S

x: M


(x ∈ ⨆ i, S i) β†’ βˆƒ i, x ∈ S i

Goals accomplished! πŸ™
ΞΉ: Sort u_2

M: Type u_1

A: Type ?u.35

B: Type ?u.38

inst✝: Mul M

S: ΞΉ β†’ Subsemigroup M

hS: Directed (fun x x_1 => x ≀ x_1) S

x: M


(x ∈ ⨆ i, S i) ↔ βˆƒ i, x ∈ S i
ΞΉ: Sort u_2

M: Type u_1

A: Type ?u.35

B: Type ?u.38

inst✝: Mul M

S: ΞΉ β†’ Subsemigroup M

hS: Directed (fun x x_1 => x ≀ x_1) S

x: M

hx: x ∈ closure (iUnion fun i => ↑(S i))


βˆ€ (x y : M), (βˆƒ i, x ∈ S i) β†’ (βˆƒ i, y ∈ S i) β†’ βˆƒ i, x * y ∈ S i
ΞΉ: Sort u_2

M: Type u_1

A: Type ?u.35

B: Type ?u.38

inst✝: Mul M

S: ΞΉ β†’ Subsemigroup M

hS: Directed (fun x x_1 => x ≀ x_1) S

x: M


(x ∈ ⨆ i, S i) ↔ βˆƒ i, x ∈ S i
ΞΉ: Sort u_2

M: Type u_1

A: Type ?u.35

B: Type ?u.38

inst✝: Mul M

S: ΞΉ β†’ Subsemigroup M

hS: Directed (fun x x_1 => x ≀ x_1) S

x: M

hx: x ∈ closure (iUnion fun i => ↑(S i))


βˆ€ (x y : M), (βˆƒ i, x ∈ S i) β†’ (βˆƒ i, y ∈ S i) β†’ βˆƒ i, x * y ∈ S i
ΞΉ: Sort u_2

M: Type u_1

A: Type ?u.35

B: Type ?u.38

inst✝: Mul M

S: ΞΉ β†’ Subsemigroup M

hS: Directed (fun x x_1 => x ≀ x_1) S

x: M

hx: x ∈ closure (iUnion fun i => ↑(S i))


βˆ€ (x y : M), (βˆƒ i, x ∈ S i) β†’ (βˆƒ i, y ∈ S i) β†’ βˆƒ i, x * y ∈ S i
ΞΉ: Sort u_2

M: Type u_1

A: Type ?u.35

B: Type ?u.38

inst✝: Mul M

S: ΞΉ β†’ Subsemigroup M

hS: Directed (fun x x_1 => x ≀ x_1) S

x✝: M

hx: x✝ ∈ closure (iUnion fun i => ↑(S i))

x, y: M

i: ΞΉ

hi: x ∈ S i

j: ΞΉ

hj: y ∈ S j


intro.intro
βˆƒ i, x * y ∈ S i
ΞΉ: Sort u_2

M: Type u_1

A: Type ?u.35

B: Type ?u.38

inst✝: Mul M

S: ΞΉ β†’ Subsemigroup M

hS: Directed (fun x x_1 => x ≀ x_1) S

x: M

hx: x ∈ closure (iUnion fun i => ↑(S i))


βˆ€ (x y : M), (βˆƒ i, x ∈ S i) β†’ (βˆƒ i, y ∈ S i) β†’ βˆƒ i, x * y ∈ S i
ΞΉ: Sort u_2

M: Type u_1

A: Type ?u.35

B: Type ?u.38

inst✝: Mul M

S: ΞΉ β†’ Subsemigroup M

hS: Directed (fun x x_1 => x ≀ x_1) S

x✝: M

hx: x✝ ∈ closure (iUnion fun i => ↑(S i))

x, y: M

i: ΞΉ

hi: x ∈ S i

j: ΞΉ

hj: y ∈ S j

k: ΞΉ

hki: S i ≀ S k

hkj: S j ≀ S k


intro.intro.intro.intro
βˆƒ i, x * y ∈ S i
ΞΉ: Sort u_2

M: Type u_1

A: Type ?u.35

B: Type ?u.38

inst✝: Mul M

S: ΞΉ β†’ Subsemigroup M

hS: Directed (fun x x_1 => x ≀ x_1) S

x: M

hx: x ∈ closure (iUnion fun i => ↑(S i))


βˆ€ (x y : M), (βˆƒ i, x ∈ S i) β†’ (βˆƒ i, y ∈ S i) β†’ βˆƒ i, x * y ∈ S i

Goals accomplished! πŸ™
#align subsemigroup.mem_supr_of_directed
Subsemigroup.mem_iSup_of_directed: βˆ€ {ΞΉ : Sort u_2} {M : Type u_1} [inst : Mul M] {S : ΞΉ β†’ Subsemigroup M}, Directed (fun x x_1 => x ≀ x_1) S β†’ βˆ€ {x : M}, (x ∈ ⨆ i, S i) ↔ βˆƒ i, x ∈ S i
Subsemigroup.mem_iSup_of_directed
#align add_subsemigroup.mem_supr_of_directed
AddSubsemigroup.mem_iSup_of_directed: βˆ€ {ΞΉ : Sort u_2} {M : Type u_1} [inst : Add M] {S : ΞΉ β†’ AddSubsemigroup M}, Directed (fun x x_1 => x ≀ x_1) S β†’ βˆ€ {x : M}, (x ∈ ⨆ i, S i) ↔ βˆƒ i, x ∈ S i
AddSubsemigroup.mem_iSup_of_directed
@[
to_additive: βˆ€ {ΞΉ : Sort u_2} {M : Type u_1} [inst : Add M] {S : ΞΉ β†’ AddSubsemigroup M}, Directed (fun x x_1 => x ≀ x_1) S β†’ ↑(⨆ i, S i) = iUnion fun i => ↑(S i)
to_additive
] theorem
coe_iSup_of_directed: βˆ€ {ΞΉ : Sort u_2} {M : Type u_1} [inst : Mul M] {S : ΞΉ β†’ Subsemigroup M}, Directed (fun x x_1 => x ≀ x_1) S β†’ ↑(⨆ i, S i) = iUnion fun i => ↑(S i)
coe_iSup_of_directed
{
S: ΞΉ β†’ Subsemigroup M
S
:
ΞΉ: Sort ?u.1440
ΞΉ
β†’
Subsemigroup: (M : Type ?u.1457) β†’ [inst : Mul M] β†’ Type ?u.1457
Subsemigroup
M: Type ?u.1443
M
} (
hS: Directed (fun x x_1 => x ≀ x_1) S
hS
:
Directed: {Ξ± : Type ?u.1468} β†’ {ΞΉ : Sort ?u.1467} β†’ (Ξ± β†’ Ξ± β†’ Prop) β†’ (ΞΉ β†’ Ξ±) β†’ Prop
Directed
(Β· ≀ Β·): Subsemigroup M β†’ Subsemigroup M β†’ Prop
(Β· ≀ Β·)
S: ΞΉ β†’ Subsemigroup M
S
) : ((⨆
i: ?m.1557
i
,
S: ΞΉ β†’ Subsemigroup M
S
i: ?m.1557
i
:
Subsemigroup: (M : Type ?u.1537) β†’ [inst : Mul M] β†’ Type ?u.1537
Subsemigroup
M: Type ?u.1443
M
) :
Set: Type ?u.1535 β†’ Type ?u.1535
Set
M: Type ?u.1443
M
) = ⋃
i: ?m.1679
i
, ↑(
S: ΞΉ β†’ Subsemigroup M
S
i: ?m.1679
i
) :=
Set.ext: βˆ€ {Ξ± : Type ?u.1956} {a b : Set Ξ±}, (βˆ€ (x : Ξ±), x ∈ a ↔ x ∈ b) β†’ a = b
Set.ext
fun
x: ?m.1965
x
=>

Goals accomplished! πŸ™
ΞΉ: Sort u_2

M: Type u_1

A: Type ?u.1446

B: Type ?u.1449

inst✝: Mul M

S: ΞΉ β†’ Subsemigroup M

hS: Directed (fun x x_1 => x ≀ x_1) S

x: M


x ∈ ↑(⨆ i, S i) ↔ x ∈ iUnion fun i => ↑(S i)

Goals accomplished! πŸ™
#align subsemigroup.coe_supr_of_directed
Subsemigroup.coe_iSup_of_directed: βˆ€ {ΞΉ : Sort u_2} {M : Type u_1} [inst : Mul M] {S : ΞΉ β†’ Subsemigroup M}, Directed (fun x x_1 => x ≀ x_1) S β†’ ↑(⨆ i, S i) = iUnion fun i => ↑(S i)
Subsemigroup.coe_iSup_of_directed
#align add_subsemigroup.coe_supr_of_directed
AddSubsemigroup.coe_iSup_of_directed: βˆ€ {ΞΉ : Sort u_2} {M : Type u_1} [inst : Add M] {S : ΞΉ β†’ AddSubsemigroup M}, Directed (fun x x_1 => x ≀ x_1) S β†’ ↑(⨆ i, S i) = iUnion fun i => ↑(S i)
AddSubsemigroup.coe_iSup_of_directed
@[
to_additive: βˆ€ {M : Type u_1} [inst : Add M] {S : Set (AddSubsemigroup M)}, DirectedOn (fun x x_1 => x ≀ x_1) S β†’ βˆ€ {x : M}, x ∈ sSup S ↔ βˆƒ s, s ∈ S ∧ x ∈ s
to_additive
] theorem
mem_sSup_of_directed_on: βˆ€ {S : Set (Subsemigroup M)}, DirectedOn (fun x x_1 => x ≀ x_1) S β†’ βˆ€ {x : M}, x ∈ sSup S ↔ βˆƒ s, s ∈ S ∧ x ∈ s
mem_sSup_of_directed_on
{S :
Set: Type ?u.3761 β†’ Type ?u.3761
Set
(
Subsemigroup: (M : Type ?u.3762) β†’ [inst : Mul M] β†’ Type ?u.3762
Subsemigroup
M: Type ?u.3749
M
)} (
hS: DirectedOn (fun x x_1 => x ≀ x_1) S
hS
:
DirectedOn: {Ξ± : Type ?u.3772} β†’ (Ξ± β†’ Ξ± β†’ Prop) β†’ Set Ξ± β†’ Prop
DirectedOn
(Β· ≀ Β·): Subsemigroup M β†’ Subsemigroup M β†’ Prop
(Β· ≀ Β·)
S) {
x: M
x
:
M: Type ?u.3749
M
} :
x: M
x
∈
sSup: {Ξ± : Type ?u.3841} β†’ [self : SupSet Ξ±] β†’ Set Ξ± β†’ Ξ±
sSup
S ↔ βˆƒ
s: ?m.3900
s
∈ S,
x: M
x
∈
s: ?m.3900
s
:=

Goals accomplished! πŸ™
ΞΉ: Sort ?u.3746

M: Type u_1

A: Type ?u.3752

B: Type ?u.3755

inst✝: Mul M

S: Set (Subsemigroup M)

hS: DirectedOn (fun x x_1 => x ≀ x_1) S

x: M


x ∈ sSup S ↔ βˆƒ s, s ∈ S ∧ x ∈ s

Goals accomplished! πŸ™
#align subsemigroup.mem_Sup_of_directed_on
Subsemigroup.mem_sSup_of_directed_on: βˆ€ {M : Type u_1} [inst : Mul M] {S : Set (Subsemigroup M)}, DirectedOn (fun x x_1 => x ≀ x_1) S β†’ βˆ€ {x : M}, x ∈ sSup S ↔ βˆƒ s, s ∈ S ∧ x ∈ s
Subsemigroup.mem_sSup_of_directed_on
#align add_subsemigroup.mem_Sup_of_directed_on
AddSubsemigroup.mem_sSup_of_directed_on: βˆ€ {M : Type u_1} [inst : Add M] {S : Set (AddSubsemigroup M)}, DirectedOn (fun x x_1 => x ≀ x_1) S β†’ βˆ€ {x : M}, x ∈ sSup S ↔ βˆƒ s, s ∈ S ∧ x ∈ s
AddSubsemigroup.mem_sSup_of_directed_on
@[
to_additive: βˆ€ {M : Type u_1} [inst : Add M] {S : Set (AddSubsemigroup M)}, DirectedOn (fun x x_1 => x ≀ x_1) S β†’ ↑(sSup S) = iUnion fun s => iUnion fun h => ↑s
to_additive
] theorem
coe_sSup_of_directed_on: βˆ€ {S : Set (Subsemigroup M)}, DirectedOn (fun x x_1 => x ≀ x_1) S β†’ ↑(sSup S) = iUnion fun s => iUnion fun h => ↑s
coe_sSup_of_directed_on
{S :
Set: Type ?u.4522 β†’ Type ?u.4522
Set
(
Subsemigroup: (M : Type ?u.4523) β†’ [inst : Mul M] β†’ Type ?u.4523
Subsemigroup
M: Type ?u.4510
M
)} (
hS: DirectedOn (fun x x_1 => x ≀ x_1) S
hS
:
DirectedOn: {Ξ± : Type ?u.4533} β†’ (Ξ± β†’ Ξ± β†’ Prop) β†’ Set Ξ± β†’ Prop
DirectedOn
(Β· ≀ Β·): Subsemigroup M β†’ Subsemigroup M β†’ Prop
(Β· ≀ Β·)
S) : (↑(
sSup: {Ξ± : Type ?u.4598} β†’ [self : SupSet Ξ±] β†’ Set Ξ± β†’ Ξ±
sSup
S) :
Set: Type ?u.4597 β†’ Type ?u.4597
Set
M: Type ?u.4510
M
) = ⋃
s: ?m.4715
s
∈ S, ↑
s: ?m.4715
s
:=
Set.ext: βˆ€ {Ξ± : Type ?u.5035} {a b : Set Ξ±}, (βˆ€ (x : Ξ±), x ∈ a ↔ x ∈ b) β†’ a = b
Set.ext
fun
x: ?m.5044
x
=>

Goals accomplished! πŸ™
ΞΉ: Sort ?u.4507

M: Type u_1

A: Type ?u.4513

B: Type ?u.4516

inst✝: Mul M

S: Set (Subsemigroup M)

hS: DirectedOn (fun x x_1 => x ≀ x_1) S

x: M


x ∈ ↑(sSup S) ↔ x ∈ iUnion fun s => iUnion fun h => ↑s

Goals accomplished! πŸ™
#align subsemigroup.coe_Sup_of_directed_on
Subsemigroup.coe_sSup_of_directed_on: βˆ€ {M : Type u_1} [inst : Mul M] {S : Set (Subsemigroup M)}, DirectedOn (fun x x_1 => x ≀ x_1) S β†’ ↑(sSup S) = iUnion fun s => iUnion fun h => ↑s
Subsemigroup.coe_sSup_of_directed_on
#align add_subsemigroup.coe_Sup_of_directed_on
AddSubsemigroup.coe_sSup_of_directed_on: βˆ€ {M : Type u_1} [inst : Add M] {S : Set (AddSubsemigroup M)}, DirectedOn (fun x x_1 => x ≀ x_1) S β†’ ↑(sSup S) = iUnion fun s => iUnion fun h => ↑s
AddSubsemigroup.coe_sSup_of_directed_on
@[
to_additive: βˆ€ {M : Type u_1} [inst : Add M] {S T : AddSubsemigroup M} {x : M}, x ∈ S β†’ x ∈ S βŠ” T
to_additive
] theorem
mem_sup_left: βˆ€ {M : Type u_1} [inst : Mul M] {S T : Subsemigroup M} {x : M}, x ∈ S β†’ x ∈ S βŠ” T
mem_sup_left
{S T :
Subsemigroup: (M : Type ?u.7704) β†’ [inst : Mul M] β†’ Type ?u.7704
Subsemigroup
M: Type ?u.7682
M
} : βˆ€ {
x: M
x
:
M: Type ?u.7682
M
},
x: M
x
∈ S β†’
x: M
x
∈ S βŠ” T :=

Goals accomplished! πŸ™
ΞΉ: Sort ?u.7679

M: Type u_1

A: Type ?u.7685

B: Type ?u.7688

inst✝: Mul M

S, T: Subsemigroup M


βˆ€ {x : M}, x ∈ S β†’ x ∈ S βŠ” T
ΞΉ: Sort ?u.7679

M: Type u_1

A: Type ?u.7685

B: Type ?u.7688

inst✝: Mul M

S, T: Subsemigroup M

this: S ≀ S βŠ” T


βˆ€ {x : M}, x ∈ S β†’ x ∈ S βŠ” T
ΞΉ: Sort ?u.7679

M: Type u_1

A: Type ?u.7685

B: Type ?u.7688

inst✝: Mul M

S, T: Subsemigroup M


βˆ€ {x : M}, x ∈ S β†’ x ∈ S βŠ” T

Goals accomplished! πŸ™
#align subsemigroup.mem_sup_left
Subsemigroup.mem_sup_left: βˆ€ {M : Type u_1} [inst : Mul M] {S T : Subsemigroup M} {x : M}, x ∈ S β†’ x ∈ S βŠ” T
Subsemigroup.mem_sup_left
#align add_subsemigroup.mem_sup_left
AddSubsemigroup.mem_sup_left: βˆ€ {M : Type u_1} [inst : Add M] {S T : AddSubsemigroup M} {x : M}, x ∈ S β†’ x ∈ S βŠ” T
AddSubsemigroup.mem_sup_left
@[
to_additive: βˆ€ {M : Type u_1} [inst : Add M] {S T : AddSubsemigroup M} {x : M}, x ∈ T β†’ x ∈ S βŠ” T
to_additive
] theorem
mem_sup_right: βˆ€ {M : Type u_1} [inst : Mul M] {S T : Subsemigroup M} {x : M}, x ∈ T β†’ x ∈ S βŠ” T
mem_sup_right
{S T :
Subsemigroup: (M : Type ?u.8015) β†’ [inst : Mul M] β†’ Type ?u.8015
Subsemigroup
M: Type ?u.7993
M
} : βˆ€ {
x: M
x
:
M: Type ?u.7993
M
},
x: M
x
∈ T β†’
x: M
x
∈ S βŠ” T :=

Goals accomplished! πŸ™
ΞΉ: Sort ?u.7990

M: Type u_1

A: Type ?u.7996

B: Type ?u.7999

inst✝: Mul M

S, T: Subsemigroup M


βˆ€ {x : M}, x ∈ T β†’ x ∈ S βŠ” T
ΞΉ: Sort ?u.7990

M: Type u_1

A: Type ?u.7996

B: Type ?u.7999

inst✝: Mul M

S, T: Subsemigroup M

this: T ≀ S βŠ” T


βˆ€ {x : M}, x ∈ T β†’ x ∈ S βŠ” T
ΞΉ: Sort ?u.7990

M: Type u_1

A: Type ?u.7996

B: Type ?u.7999

inst✝: Mul M

S, T: Subsemigroup M


βˆ€ {x : M}, x ∈ T β†’ x ∈ S βŠ” T

Goals accomplished! πŸ™
#align subsemigroup.mem_sup_right
Subsemigroup.mem_sup_right: βˆ€ {M : Type u_1} [inst : Mul M] {S T : Subsemigroup M} {x : M}, x ∈ T β†’ x ∈ S βŠ” T
Subsemigroup.mem_sup_right
#align add_subsemigroup.mem_sup_right
AddSubsemigroup.mem_sup_right: βˆ€ {M : Type u_1} [inst : Add M] {S T : AddSubsemigroup M} {x : M}, x ∈ T β†’ x ∈ S βŠ” T
AddSubsemigroup.mem_sup_right
@[
to_additive: βˆ€ {M : Type u_1} [inst : Add M] {S T : AddSubsemigroup M} {x y : M}, x ∈ S β†’ y ∈ T β†’ x + y ∈ S βŠ” T
to_additive
] theorem
mul_mem_sup: βˆ€ {S T : Subsemigroup M} {x y : M}, x ∈ S β†’ y ∈ T β†’ x * y ∈ S βŠ” T
mul_mem_sup
{S T :
Subsemigroup: (M : Type ?u.8326) β†’ [inst : Mul M] β†’ Type ?u.8326
Subsemigroup
M: Type ?u.8304
M
} {
x: M
x
y: M
y
:
M: Type ?u.8304
M
} (
hx: x ∈ S
hx
:
x: M
x
∈ S) (
hy: y ∈ T
hy
:
y: M
y
∈ T) :
x: M
x
*
y: M
y
∈ S βŠ” T :=
mul_mem: βˆ€ {S : Type ?u.8507} {M : Type ?u.8506} [inst : Mul M] [inst_1 : SetLike S M] [self : MulMemClass S M] {s : S} {a b : M}, a ∈ s β†’ b ∈ s β†’ a * b ∈ s
mul_mem
(
mem_sup_left: βˆ€ {M : Type ?u.8562} [inst : Mul M] {S T : Subsemigroup M} {x : M}, x ∈ S β†’ x ∈ S βŠ” T
mem_sup_left
hx: x ∈ S
hx
) (
mem_sup_right: βˆ€ {M : Type ?u.8600} [inst : Mul M] {S T : Subsemigroup M} {x : M}, x ∈ T β†’ x ∈ S βŠ” T
mem_sup_right
hy: y ∈ T
hy
) #align subsemigroup.mul_mem_sup
Subsemigroup.mul_mem_sup: βˆ€ {M : Type u_1} [inst : Mul M] {S T : Subsemigroup M} {x y : M}, x ∈ S β†’ y ∈ T β†’ x * y ∈ S βŠ” T
Subsemigroup.mul_mem_sup
#align add_subsemigroup.add_mem_sup
AddSubsemigroup.add_mem_sup: βˆ€ {M : Type u_1} [inst : Add M] {S T : AddSubsemigroup M} {x y : M}, x ∈ S β†’ y ∈ T β†’ x + y ∈ S βŠ” T
AddSubsemigroup.add_mem_sup
@[
to_additive: βˆ€ {ΞΉ : Sort u_2} {M : Type u_1} [inst : Add M] {S : ΞΉ β†’ AddSubsemigroup M} (i : ΞΉ) {x : M}, x ∈ S i β†’ x ∈ iSup S
to_additive
] theorem
mem_iSup_of_mem: βˆ€ {ΞΉ : Sort u_2} {M : Type u_1} [inst : Mul M] {S : ΞΉ β†’ Subsemigroup M} (i : ΞΉ) {x : M}, x ∈ S i β†’ x ∈ iSup S
mem_iSup_of_mem
{
S: ΞΉ β†’ Subsemigroup M
S
:
ΞΉ: Sort ?u.8691
ΞΉ
β†’
Subsemigroup: (M : Type ?u.8708) β†’ [inst : Mul M] β†’ Type ?u.8708
Subsemigroup
M: Type ?u.8694
M
} (
i: ΞΉ
i
:
ΞΉ: Sort ?u.8691
ΞΉ
) : βˆ€ {
x: M
x
:
M: Type ?u.8694
M
},
x: M
x
∈
S: ΞΉ β†’ Subsemigroup M
S
i: ΞΉ
i
β†’
x: M
x
∈
iSup: {Ξ± : Type ?u.8783} β†’ [inst : SupSet Ξ±] β†’ {ΞΉ : Sort ?u.8782} β†’ (ΞΉ β†’ Ξ±) β†’ Ξ±
iSup
S: ΞΉ β†’ Subsemigroup M
S
:=

Goals accomplished! πŸ™
ΞΉ: Sort u_2

M: Type u_1

A: Type ?u.8697

B: Type ?u.8700

inst✝: Mul M

S: ΞΉ β†’ Subsemigroup M

i: ΞΉ


βˆ€ {x : M}, x ∈ S i β†’ x ∈ iSup S
ΞΉ: Sort u_2

M: Type u_1

A: Type ?u.8697

B: Type ?u.8700

inst✝: Mul M

S: ΞΉ β†’ Subsemigroup M

i: ΞΉ

this: S i ≀ iSup S


βˆ€ {x : M}, x ∈ S i β†’ x ∈ iSup S
ΞΉ: Sort u_2

M: Type u_1

A: Type ?u.8697

B: Type ?u.8700

inst✝: Mul M

S: ΞΉ β†’ Subsemigroup M

i: ΞΉ


βˆ€ {x : M}, x ∈ S i β†’ x ∈ iSup S

Goals accomplished! πŸ™
#align subsemigroup.mem_supr_of_mem
Subsemigroup.mem_iSup_of_mem: βˆ€ {ΞΉ : Sort u_2} {M : Type u_1} [inst : Mul M] {S : ΞΉ β†’ Subsemigroup M} (i : ΞΉ) {x : M}, x ∈ S i β†’ x ∈ iSup S
Subsemigroup.mem_iSup_of_mem
#align add_subsemigroup.mem_supr_of_mem
AddSubsemigroup.mem_iSup_of_mem: βˆ€ {ΞΉ : Sort u_2} {M : Type u_1} [inst : Add M] {S : ΞΉ β†’ AddSubsemigroup M} (i : ΞΉ) {x : M}, x ∈ S i β†’ x ∈ iSup S
AddSubsemigroup.mem_iSup_of_mem
@[
to_additive: βˆ€ {M : Type u_1} [inst : Add M] {S : Set (AddSubsemigroup M)} {s : AddSubsemigroup M}, s ∈ S β†’ βˆ€ {x : M}, x ∈ s β†’ x ∈ sSup S
to_additive
] theorem
mem_sSup_of_mem: βˆ€ {S : Set (Subsemigroup M)} {s : Subsemigroup M}, s ∈ S β†’ βˆ€ {x : M}, x ∈ s β†’ x ∈ sSup S
mem_sSup_of_mem
{S :
Set: Type ?u.9014 β†’ Type ?u.9014
Set
(
Subsemigroup: (M : Type ?u.9015) β†’ [inst : Mul M] β†’ Type ?u.9015
Subsemigroup
M: Type ?u.9002
M
)} {s :
Subsemigroup: (M : Type ?u.9025) β†’ [inst : Mul M] β†’ Type ?u.9025
Subsemigroup
M: Type ?u.9002
M
} (
hs: s ∈ S
hs
: s ∈ S) : βˆ€ {
x: M
x
:
M: Type ?u.9002
M
},
x: M
x
∈ s β†’
x: M
x
∈
sSup: {Ξ± : Type ?u.9119} β†’ [self : SupSet Ξ±] β†’ Set Ξ± β†’ Ξ±
sSup
S :=

Goals accomplished! πŸ™
ΞΉ: Sort ?u.8999

M: Type u_1

A: Type ?u.9005

B: Type ?u.9008

inst✝: Mul M

S: Set (Subsemigroup M)

s: Subsemigroup M

hs: s ∈ S


βˆ€ {x : M}, x ∈ s β†’ x ∈ sSup S
ΞΉ: Sort ?u.8999

M: Type u_1

A: Type ?u.9005

B: Type ?u.9008

inst✝: Mul M

S: Set (Subsemigroup M)

s: Subsemigroup M

hs: s ∈ S

this: s ≀ sSup S


βˆ€ {x : M}, x ∈ s β†’ x ∈ sSup S
ΞΉ: Sort ?u.8999

M: Type u_1

A: Type ?u.9005

B: Type ?u.9008

inst✝: Mul M

S: Set (Subsemigroup M)

s: Subsemigroup M

hs: s ∈ S


βˆ€ {x : M}, x ∈ s β†’ x ∈ sSup S

Goals accomplished! πŸ™
#align subsemigroup.mem_Sup_of_mem
Subsemigroup.mem_sSup_of_mem: βˆ€ {M : Type u_1} [inst : Mul M] {S : Set (Subsemigroup M)} {s : Subsemigroup M}, s ∈ S β†’ βˆ€ {x : M}, x ∈ s β†’ x ∈ sSup S
Subsemigroup.mem_sSup_of_mem
#align add_subsemigroup.mem_Sup_of_mem
AddSubsemigroup.mem_sSup_of_mem: βˆ€ {M : Type u_1} [inst : Add M] {S : Set (AddSubsemigroup M)} {s : AddSubsemigroup M}, s ∈ S β†’ βˆ€ {x : M}, x ∈ s β†’ x ∈ sSup S
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 : Add M] (S : ΞΉ β†’ AddSubsemigroup M) {C : M β†’ Prop} {x₁ : M}, (x₁ ∈ ⨆ i, S i) β†’ (βˆ€ (i : ΞΉ) (xβ‚‚ : M), xβ‚‚ ∈ S i β†’ C xβ‚‚) β†’ (βˆ€ (x y : M), C x β†’ C y β†’ C (x + y)) β†’ C x₁
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 : ΞΉ β†’ Subsemigroup M) {C : M β†’ Prop} {x₁ : M}, (x₁ ∈ ⨆ i, S i) β†’ (βˆ€ (i : ΞΉ) (xβ‚‚ : M), xβ‚‚ ∈ S i β†’ C xβ‚‚) β†’ (βˆ€ (x y : M), C x β†’ C y β†’ C (x * y)) β†’ C x₁
iSup_induction
(
S: ΞΉ β†’ Subsemigroup M
S
:
ΞΉ: Sort ?u.9342
ΞΉ
β†’
Subsemigroup: (M : Type ?u.9359) β†’ [inst : Mul M] β†’ Type ?u.9359
Subsemigroup
M: Type ?u.9345
M
) {
C: M β†’ Prop
C
:
M: Type ?u.9345
M
β†’
Prop: Type
Prop
} {
x₁: M
x₁
:
M: Type ?u.9345
M
} (
hx₁: x₁ ∈ ⨆ i, S i
hx₁
:
x₁: M
x₁
∈ ⨆
i: ?m.9410
i
,
S: ΞΉ β†’ Subsemigroup M
S
i: ?m.9410
i
) (
hp: βˆ€ (i : ΞΉ) (xβ‚‚ : M), xβ‚‚ ∈ S i β†’ C xβ‚‚
hp
: βˆ€ (
i: ?m.9458
i
) (
xβ‚‚: M
xβ‚‚
:
M: Type ?u.9345
M
) (
_hxS: xβ‚‚ ∈ S i
_hxS
:
xβ‚‚: M
xβ‚‚
∈
S: ΞΉ β†’ Subsemigroup M
S
i: ?m.9458
i
),
C: M β†’ Prop
C
xβ‚‚: M
xβ‚‚
) (
hmul: βˆ€ (x y : M), C x β†’ C y β†’ C (x * y)
hmul
: βˆ€
x: ?m.9485
x
y: ?m.9488
y
,
C: M β†’ Prop
C
x: ?m.9485
x
β†’
C: M β†’ Prop
C
y: ?m.9488
y
β†’
C: M β†’ Prop
C
(
x: ?m.9485
x
*
y: ?m.9488
y
)) :
C: M β†’ Prop
C
x₁: M
x₁
:=

Goals accomplished! πŸ™
ΞΉ: Sort u_2

M: Type u_1

A: Type ?u.9348

B: Type ?u.9351

inst✝: Mul M

S: ΞΉ β†’ Subsemigroup M

C: M β†’ Prop

x₁: M

hx₁: x₁ ∈ ⨆ i, S i

hp: βˆ€ (i : ΞΉ) (xβ‚‚ : M), xβ‚‚ ∈ S i β†’ C xβ‚‚

hmul: βˆ€ (x y : M), C x β†’ C y β†’ C (x * y)


C x₁
ΞΉ: Sort u_2

M: Type u_1

A: Type ?u.9348

B: Type ?u.9351

inst✝: Mul M

S: ΞΉ β†’ Subsemigroup M

C: M β†’ Prop

x₁: M

hx₁: x₁ ∈ ⨆ i, S i

hp: βˆ€ (i : ΞΉ) (xβ‚‚ : M), xβ‚‚ ∈ S i β†’ C xβ‚‚

hmul: βˆ€ (x y : M), C x β†’ C y β†’ C (x * y)


C x₁
ΞΉ: Sort u_2

M: Type u_1

A: Type ?u.9348

B: Type ?u.9351

inst✝: Mul M

S: ΞΉ β†’ Subsemigroup M

C: M β†’ Prop

x₁: M

hx₁: x₁ ∈ closure (iUnion fun i => ↑(S i))

hp: βˆ€ (i : ΞΉ) (xβ‚‚ : M), xβ‚‚ ∈ S i β†’ C xβ‚‚

hmul: βˆ€ (x y : M), C x β†’ C y β†’ C (x * y)


C x₁
ΞΉ: Sort u_2

M: Type u_1

A: Type ?u.9348

B: Type ?u.9351

inst✝: Mul M

S: ΞΉ β†’ Subsemigroup M

C: M β†’ Prop

x₁: M

hx₁: x₁ ∈ closure (iUnion fun i => ↑(S i))

hp: βˆ€ (i : ΞΉ) (xβ‚‚ : M), xβ‚‚ ∈ S i β†’ C xβ‚‚

hmul: βˆ€ (x y : M), C x β†’ C y β†’ C (x * y)


C x₁
ΞΉ: Sort u_2

M: Type u_1

A: Type ?u.9348

B: Type ?u.9351

inst✝: Mul M

S: ΞΉ β†’ Subsemigroup M

C: M β†’ Prop

x₁: M

hx₁: x₁ ∈ closure (iUnion fun i => ↑(S i))

hp: βˆ€ (i : ΞΉ) (xβ‚‚ : M), xβ‚‚ ∈ S i β†’ C xβ‚‚

hmul: βˆ€ (x y : M), C x β†’ C y β†’ C (x * y)


C x₁
ΞΉ: Sort u_2

M: Type u_1

A: Type ?u.9348

B: Type ?u.9351

inst✝: Mul M

S: ΞΉ β†’ Subsemigroup M

C: M β†’ Prop

x₁: M

hx₁: x₁ ∈ ⨆ i, S i

hp: βˆ€ (i : ΞΉ) (xβ‚‚ : M), xβ‚‚ ∈ S i β†’ C xβ‚‚

hmul: βˆ€ (x y : M), C x β†’ C y β†’ C (x * y)


C x₁
ΞΉ: Sort u_2

M: Type u_1

A: Type ?u.9348

B: Type ?u.9351

inst✝: Mul M

S: ΞΉ β†’ Subsemigroup M

C: M β†’ Prop

x₁: M

hx₁: x₁ ∈ closure (iUnion fun i => ↑(S i))

hp: βˆ€ (i : ΞΉ) (xβ‚‚ : M), xβ‚‚ ∈ S i β†’ C xβ‚‚

hmul: βˆ€ (x y : M), C x β†’ C y β†’ C (x * y)

xβ‚‚: M

hxβ‚‚: xβ‚‚ ∈ iUnion fun i => ↑(S i)


C xβ‚‚
ΞΉ: Sort u_2

M: Type u_1

A: Type ?u.9348

B: Type ?u.9351

inst✝: Mul M

S: ΞΉ β†’ Subsemigroup M

C: M β†’ Prop

x₁: M

hx₁: x₁ ∈ ⨆ i, S i

hp: βˆ€ (i : ΞΉ) (xβ‚‚ : M), xβ‚‚ ∈ S i β†’ C xβ‚‚

hmul: βˆ€ (x y : M), C x β†’ C y β†’ C (x * y)


C x₁
ΞΉ: Sort u_2

M: Type u_1

A: Type ?u.9348

B: Type ?u.9351

inst✝: Mul M

S: ΞΉ β†’ Subsemigroup M

C: M β†’ Prop

x₁: M

hx₁: x₁ ∈ closure (iUnion fun i => ↑(S i))

hp: βˆ€ (i : ΞΉ) (xβ‚‚ : M), xβ‚‚ ∈ S i β†’ C xβ‚‚

hmul: βˆ€ (x y : M), C x β†’ C y β†’ C (x * y)

xβ‚‚: M

hxβ‚‚: xβ‚‚ ∈ iUnion fun i => ↑(S i)

i: ΞΉ

hi: xβ‚‚ ∈ ↑(S i)


intro
C xβ‚‚
ΞΉ: Sort u_2

M: Type u_1

A: Type ?u.9348

B: Type ?u.9351

inst✝: Mul M

S: ΞΉ β†’ Subsemigroup M

C: M β†’ Prop

x₁: M

hx₁: x₁ ∈ ⨆ i, S i

hp: βˆ€ (i : ΞΉ) (xβ‚‚ : M), xβ‚‚ ∈ S i β†’ C xβ‚‚

hmul: βˆ€ (x y : M), C x β†’ C y β†’ C (x * y)


C x₁

Goals accomplished! πŸ™
#align subsemigroup.supr_induction
Subsemigroup.iSup_induction: βˆ€ {ΞΉ : Sort u_2} {M : Type u_1} [inst : Mul M] (S : ΞΉ β†’ Subsemigroup M) {C : M β†’ Prop} {x₁ : M}, (x₁ ∈ ⨆ i, S i) β†’ (βˆ€ (i : ΞΉ) (xβ‚‚ : M), xβ‚‚ ∈ S i β†’ C xβ‚‚) β†’ (βˆ€ (x y : M), C x β†’ C y β†’ C (x * y)) β†’ C x₁
Subsemigroup.iSup_induction
#align add_subsemigroup.supr_induction
AddSubsemigroup.iSup_induction: βˆ€ {ΞΉ : Sort u_2} {M : Type u_1} [inst : Add M] (S : ΞΉ β†’ AddSubsemigroup M) {C : M β†’ Prop} {x₁ : M}, (x₁ ∈ ⨆ i, S i) β†’ (βˆ€ (i : ΞΉ) (xβ‚‚ : M), xβ‚‚ ∈ S i β†’ C xβ‚‚) β†’ (βˆ€ (x y : M), C x β†’ C y β†’ C (x + y)) β†’ C x₁
AddSubsemigroup.iSup_induction
/-- A dependent version of `Subsemigroup.iSup_induction`. -/ @[
to_additive: βˆ€ {ΞΉ : Sort u_2} {M : Type u_1} [inst : Add M] (S : ΞΉ β†’ AddSubsemigroup M) {C : (x : M) β†’ (x ∈ ⨆ i, S i) β†’ Prop}, (βˆ€ (i : ΞΉ) (x : M) (hxS : x ∈ S i), C x (_ : x ∈ ⨆ i, S i)) β†’ (βˆ€ (x y : M) (hx : x ∈ ⨆ i, S i) (hy : y ∈ ⨆ i, S i), C x hx β†’ C y hy β†’ C (x + y) (_ : x + y ∈ ⨆ i, S i)) β†’ βˆ€ {x₁ : M} (hx₁ : x₁ ∈ ⨆ i, S i), C x₁ hx₁
to_additive
(attr := elab_as_elim) "A dependent version of `AddSubsemigroup.iSup_induction`."] theorem
iSup_induction': βˆ€ {ΞΉ : Sort u_2} {M : Type u_1} [inst : Mul M] (S : ΞΉ β†’ Subsemigroup M) {C : (x : M) β†’ (x ∈ ⨆ i, S i) β†’ Prop}, (βˆ€ (i : ΞΉ) (x : M) (hxS : x ∈ S i), C x (_ : x ∈ ⨆ i, S i)) β†’ (βˆ€ (x y : M) (hx : x ∈ ⨆ i, S i) (hy : y ∈ ⨆ i, S i), C x hx β†’ C y hy β†’ C (x * y) (_ : x * y ∈ ⨆ i, S i)) β†’ βˆ€ {x₁ : M} (hx₁ : x₁ ∈ ⨆ i, S i), C x₁ hx₁
iSup_induction'
(
S: ΞΉ β†’ Subsemigroup M
S
:
ΞΉ: Sort ?u.9923
ΞΉ
β†’
Subsemigroup: (M : Type ?u.9940) β†’ [inst : Mul M] β†’ Type ?u.9940
Subsemigroup
M: Type ?u.9926
M
) {
C: (x : M) β†’ (x ∈ ⨆ i, S i) β†’ Prop
C
: βˆ€
x: ?m.9951
x
, (
x: ?m.9951
x
∈ ⨆
i: ?m.9990
i
,
S: ΞΉ β†’ Subsemigroup M
S
i: ?m.9990
i
) β†’
Prop: Type
Prop
} (
hp: βˆ€ (i : ΞΉ) (x : M) (hxS : x ∈ S i), C x (_ : x ∈ ⨆ i, S i)
hp
: βˆ€ (
i: ?m.10043
i
) (
x: ?m.10046
x
) (
hxS: x ∈ S i
hxS
:
x: ?m.10046
x
∈
S: ΞΉ β†’ Subsemigroup M
S
i: ?m.10043
i
),
C: (x : M) β†’ (x ∈ ⨆ i, S i) β†’ Prop
C
x: ?m.10046
x
(
mem_iSup_of_mem: βˆ€ {ΞΉ : Sort ?u.10087} {M : Type ?u.10086} [inst : Mul M] {S : ΞΉ β†’ Subsemigroup M} (i : ΞΉ) {x : M}, x ∈ S i β†’ x ∈ iSup S
mem_iSup_of_mem
i: ?m.10043
i
β€Ή_β€Ί)) (
hmul: βˆ€ (x y : M) (hx : x ∈ ⨆ i, S i) (hy : y ∈ ⨆ i, S i), C x hx β†’ C y hy β†’ C (x * y) (_ : x * y ∈ ⨆ i, S i)
hmul
: βˆ€
x: ?m.10132
x
y: ?m.10135
y
hx: ?m.10138
hx
hy: ?m.10141
hy
,
C: (x : M) β†’ (x ∈ ⨆ i, S i) β†’ Prop
C
x: ?m.10132
x
hx: ?m.10138
hx
β†’
C: (x : M) β†’ (x ∈ ⨆ i, S i) β†’ Prop
C
y: ?m.10135
y
hy: ?m.10141
hy
β†’
C: (x : M) β†’ (x ∈ ⨆ i, S i) β†’ Prop
C
(
x: ?m.10132
x
*
y: ?m.10135
y
) (
mul_mem: βˆ€ {S : Type ?u.10187} {M : Type ?u.10186} [inst : Mul M] [inst_1 : SetLike S M] [self : MulMemClass S M] {s : S} {a b : M}, a ∈ s β†’ b ∈ s β†’ a * b ∈ s
mul_mem
β€Ή_β€Ί β€Ή_β€Ί)) {
x₁: M
x₁
:
M: Type ?u.9926
M
} (
hx₁: x₁ ∈ ⨆ i, S i
hx₁
:
x₁: M
x₁
∈ ⨆
i: ?m.10301
i
,
S: ΞΉ β†’ Subsemigroup M
S
i: ?m.10301
i
) :
C: (x : M) β†’ (x ∈ ⨆ i, S i) β†’ Prop
C
x₁: M
x₁
hx₁: x₁ ∈ ⨆ i, S i
hx₁
:=

Goals accomplished! πŸ™
ΞΉ: Sort u_2

M: Type u_1

A: Type ?u.9929

B: Type ?u.9932

inst✝: Mul M

S: ΞΉ β†’ Subsemigroup M

C: (x : M) β†’ (x ∈ ⨆ i, S i) β†’ Prop

hp: βˆ€ (i : ΞΉ) (x : M) (hxS : x ∈ S i), C x (_ : x ∈ ⨆ i, S i)

hmul: βˆ€ (x y : M) (hx : x ∈ ⨆ i, S i) (hy : y ∈ ⨆ i, S i), C x hx β†’ C y hy β†’ C (x * y) (_ : x * y ∈ ⨆ i, S i)

x₁: M

hx₁: x₁ ∈ ⨆ i, S i


C x₁ hx₁
ΞΉ: Sort u_2

M: Type u_1

A: Type ?u.9929

B: Type ?u.9932

inst✝: Mul M

S: ΞΉ β†’ Subsemigroup M

C: (x : M) β†’ (x ∈ ⨆ i, S i) β†’ Prop

hp: βˆ€ (i : ΞΉ) (x : M) (hxS : x ∈ S i), C x (_ : x ∈ ⨆ i, S i)

hmul: βˆ€ (x y : M) (hx : x ∈ ⨆ i, S i) (hy : y ∈ ⨆ i, S i), C x hx β†’ C y hy β†’ C (x * y) (_ : x * y ∈ ⨆ i, S i)

x₁: M

hx₁: x₁ ∈ ⨆ i, S i


βˆƒ x, C x₁ x
ΞΉ: Sort u_2

M: Type u_1

A: Type ?u.9929

B: Type ?u.9932

inst✝: Mul M

S: ΞΉ β†’ Subsemigroup M

C: (x : M) β†’ (x ∈ ⨆ i, S i) β†’ Prop

hp: βˆ€ (i : ΞΉ) (x : M) (hxS : x ∈ S i), C x (_ : x ∈ ⨆ i, S i)

hmul: βˆ€ (x y : M) (hx : x ∈ ⨆ i, S i) (hy : y ∈ ⨆ i, S i), C x hx β†’ C y hy β†’ C (x * y) (_ : x * y ∈ ⨆ i, S i)

x₁: M

hx₁: x₁ ∈ ⨆ i, S i


C x₁ hx₁
ΞΉ: Sort u_2

M: Type u_1

A: Type ?u.9929

B: Type ?u.9932

inst✝: Mul M

S: ΞΉ β†’ Subsemigroup M

C: (x : M) β†’ (x ∈ ⨆ i, S i) β†’ Prop

hp: βˆ€ (i : ΞΉ) (x : M) (hxS : x ∈ S i), C x (_ : x ∈ ⨆ i, S i)

hmul: βˆ€ (x y : M) (hx : x ∈ ⨆ i, S i) (hy : y ∈ ⨆ i, S i), C x hx β†’ C y hy β†’ C (x * y) (_ : x * y ∈ ⨆ i, S i)

x₁: M

hx₁: x₁ ∈ ⨆ i, S i

i: ΞΉ

xβ‚‚: M

hxβ‚‚: xβ‚‚ ∈ S i


refine_1
(fun x' => βˆƒ hx'', C x' hx'') xβ‚‚
ΞΉ: Sort u_2

M: Type u_1

A: Type ?u.9929

B: Type ?u.9932

inst✝: Mul M

S: ΞΉ β†’ Subsemigroup M

C: (x : M) β†’ (x ∈ ⨆ i, S i) β†’ Prop

hp: βˆ€ (i : ΞΉ) (x : M) (hxS : x ∈ S i), C x (_ : x ∈ ⨆ i, S i)

hmul: βˆ€ (x y : M) (hx : x ∈ ⨆ i, S i) (hy : y ∈ ⨆ i, S i), C x hx β†’ C y hy β†’ C (x * y) (_ : x * y ∈ ⨆ i, S i)

x₁: M

hx₁: x₁ ∈ ⨆ i, S i

x₃, y: M


refine_2
(fun x' => βˆƒ hx'', C x' hx'') x₃ β†’ (fun x' => βˆƒ hx'', C x' hx'') y β†’ (fun x' => βˆƒ hx'', C x' hx'') (x₃ * y)
ΞΉ: Sort u_2

M: Type u_1

A: Type ?u.9929

B: Type ?u.9932

inst✝: Mul M

S: ΞΉ β†’ Subsemigroup M

C: (x : M) β†’ (x ∈ ⨆ i, S i) β†’ Prop

hp: βˆ€ (i : ΞΉ) (x : M) (hxS : x ∈ S i), C x (_ : x ∈ ⨆ i, S i)

hmul: βˆ€ (x y : M) (hx : x ∈ ⨆ i, S i) (hy : y ∈ ⨆ i, S i), C x hx β†’ C y hy β†’ C (x * y) (_ : x * y ∈ ⨆ i, S i)

x₁: M

hx₁: x₁ ∈ ⨆ i, S i


C x₁ hx₁
ΞΉ: Sort u_2

M: Type u_1

A: Type ?u.9929

B: Type ?u.9932

inst✝: Mul M

S: ΞΉ β†’ Subsemigroup M

C: (x : M) β†’ (x ∈ ⨆ i, S i) β†’ Prop

hp: βˆ€ (i : ΞΉ) (x : M) (hxS : x ∈ S i), C x (_ : x ∈ ⨆ i, S i)

hmul: βˆ€ (x y : M) (hx : x ∈ ⨆ i, S i) (hy : y ∈ ⨆ i, S i), C x hx β†’ C y hy β†’ C (x * y) (_ : x * y ∈ ⨆ i, S i)

x₁: M

hx₁: x₁ ∈ ⨆ i, S i

i: ΞΉ

xβ‚‚: M

hxβ‚‚: xβ‚‚ ∈ S i


refine_1
(fun x' => βˆƒ hx'', C x' hx'') xβ‚‚
ΞΉ: Sort u_2

M: Type u_1

A: Type ?u.9929

B: Type ?u.9932

inst✝: Mul M

S: ΞΉ β†’ Subsemigroup M

C: (x : M) β†’ (x ∈ ⨆ i, S i) β†’ Prop

hp: βˆ€ (i : ΞΉ) (x : M) (hxS : x ∈ S i), C x (_ : x ∈ ⨆ i, S i)

hmul: βˆ€ (x y : M) (hx : x ∈ ⨆ i, S i) (hy : y ∈ ⨆ i, S i), C x hx β†’ C y hy β†’ C (x * y) (_ : x * y ∈ ⨆ i, S i)

x₁: M

hx₁: x₁ ∈ ⨆ i, S i

i: ΞΉ

xβ‚‚: M

hxβ‚‚: xβ‚‚ ∈ S i


refine_1
(fun x' => βˆƒ hx'', C x' hx'') xβ‚‚
ΞΉ: Sort u_2

M: Type u_1

A: Type ?u.9929

B: Type ?u.9932

inst✝: Mul M

S: ΞΉ β†’ Subsemigroup M

C: (x : M) β†’ (x ∈ ⨆ i, S i) β†’ Prop

hp: βˆ€ (i : ΞΉ) (x : M) (hxS : x ∈ S i), C x (_ : x ∈ ⨆ i, S i)

hmul: βˆ€ (x y : M) (hx : x ∈ ⨆ i, S i) (hy : y ∈ ⨆ i, S i), C x hx β†’ C y hy β†’ C (x * y) (_ : x * y ∈ ⨆ i, S i)

x₁: M

hx₁: x₁ ∈ ⨆ i, S i

x₃, y: M


refine_2
(fun x' => βˆƒ hx'', C x' hx'') x₃ β†’ (fun x' => βˆƒ hx'', C x' hx'') y β†’ (fun x' => βˆƒ hx'', C x' hx'') (x₃ * y)

Goals accomplished! πŸ™
ΞΉ: Sort u_2

M: Type u_1

A: Type ?u.9929

B: Type ?u.9932

inst✝: Mul M

S: ΞΉ β†’ Subsemigroup M

C: (x : M) β†’ (x ∈ ⨆ i, S i) β†’ Prop

hp: βˆ€ (i : ΞΉ) (x : M) (hxS : x ∈ S i), C x (_ : x ∈ ⨆ i, S i)

hmul: βˆ€ (x y : M) (hx : x ∈ ⨆ i, S i) (hy : y ∈ ⨆ i, S i), C x hx β†’ C y hy β†’ C (x * y) (_ : x * y ∈ ⨆ i, S i)

x₁: M

hx₁: x₁ ∈ ⨆ i, S i


C x₁ hx₁
ΞΉ: Sort u_2

M: Type u_1

A: Type ?u.9929

B: Type ?u.9932

inst✝: Mul M

S: ΞΉ β†’ Subsemigroup M

C: (x : M) β†’ (x ∈ ⨆ i, S i) β†’ Prop

hp: βˆ€ (i : ΞΉ) (x : M) (hxS : x ∈ S i), C x (_ : x ∈ ⨆ i, S i)

hmul: βˆ€ (x y : M) (hx : x ∈ ⨆ i, S i) (hy : y ∈ ⨆ i, S i), C x hx β†’ C y hy β†’ C (x * y) (_ : x * y ∈ ⨆ i, S i)

x₁: M

hx₁: x₁ ∈ ⨆ i, S i

x₃, y: M


refine_2
(fun x' => βˆƒ hx'', C x' hx'') x₃ β†’ (fun x' => βˆƒ hx'', C x' hx'') y β†’ (fun x' => βˆƒ hx'', C x' hx'') (x₃ * y)
ΞΉ: Sort u_2

M: Type u_1

A: Type ?u.9929

B: Type ?u.9932

inst✝: Mul M

S: ΞΉ β†’ Subsemigroup M

C: (x : M) β†’ (x ∈ ⨆ i, S i) β†’ Prop

hp: βˆ€ (i : ΞΉ) (x : M) (hxS : x ∈ S i), C x (_ : x ∈ ⨆ i, S i)

hmul: βˆ€ (x y : M) (hx : x ∈ ⨆ i, S i) (hy : y ∈ ⨆ i, S i), C x hx β†’ C y hy β†’ C (x * y) (_ : x * y ∈ ⨆ i, S i)

x₁: M

hx₁: x₁ ∈ ⨆ i, S i

x₃, y: M


refine_2
(fun x' => βˆƒ hx'', C x' hx'') x₃ β†’ (fun x' => βˆƒ hx'', C x' hx'') y β†’ (fun x' => βˆƒ hx'', C x' hx'') (x₃ * y)
ΞΉ: Sort u_2

M: Type u_1

A: Type ?u.9929

B: Type ?u.9932

inst✝: Mul M

S: ΞΉ β†’ Subsemigroup M

C: (x : M) β†’ (x ∈ ⨆ i, S i) β†’ Prop

hp: βˆ€ (i : ΞΉ) (x : M) (hxS : x ∈ S i), C x (_ : x ∈ ⨆ i, S i)

hmul: βˆ€ (x y : M) (hx : x ∈ ⨆ i, S i) (hy : y ∈ ⨆ i, S i), C x hx β†’ C y hy β†’ C (x * y) (_ : x * y ∈ ⨆ i, S i)

x₁: M

hx₁: x₁ ∈ ⨆ i, S i

x₃, y: M

w✝¹: x₃ ∈ ⨆ i, S i

Cx: C x₃ w✝¹

w✝: y ∈ ⨆ i, S i

Cy: C y w✝


refine_2.intro.intro
βˆƒ hx'', C (x₃ * y) hx''
ΞΉ: Sort u_2

M: Type u_1

A: Type ?u.9929

B: Type ?u.9932

inst✝: Mul M

S: ΞΉ β†’ Subsemigroup M

C: (x : M) β†’ (x ∈ ⨆ i, S i) β†’ Prop

hp: βˆ€ (i : ΞΉ) (x : M) (hxS : x ∈ S i), C x (_ : x ∈ ⨆ i, S i)

hmul: βˆ€ (x y : M) (hx : x ∈ ⨆ i, S i) (hy : y ∈ ⨆ i, S i), C x hx β†’ C y hy β†’ C (x * y) (_ : x * y ∈ ⨆ i, S i)

x₁: M

hx₁: x₁ ∈ ⨆ i, S i

x₃, y: M


refine_2
(fun x' => βˆƒ hx'', C x' hx'') x₃ β†’ (fun x' => βˆƒ hx'', C x' hx'') y β†’ (fun x' => βˆƒ hx'', C x' hx'') (x₃ * y)

Goals accomplished! πŸ™
#align subsemigroup.supr_induction'
Subsemigroup.iSup_induction': βˆ€ {ΞΉ : Sort u_2} {M : Type u_1} [inst : Mul M] (S : ΞΉ β†’ Subsemigroup M) {C : (x : M) β†’ (x ∈ ⨆ i, S i) β†’ Prop}, (βˆ€ (i : ΞΉ) (x : M) (hxS : x ∈ S i), C x (_ : x ∈ ⨆ i, S i)) β†’ (βˆ€ (x y : M) (hx : x ∈ ⨆ i, S i) (hy : y ∈ ⨆ i, S i), C x hx β†’ C y hy β†’ C (x * y) (_ : x * y ∈ ⨆ i, S i)) β†’ βˆ€ {x₁ : M} (hx₁ : x₁ ∈ ⨆ i, S i), C x₁ hx₁
Subsemigroup.iSup_induction'
#align add_subsemigroup.supr_induction'
AddSubsemigroup.iSup_induction': βˆ€ {ΞΉ : Sort u_2} {M : Type u_1} [inst : Add M] (S : ΞΉ β†’ AddSubsemigroup M) {C : (x : M) β†’ (x ∈ ⨆ i, S i) β†’ Prop}, (βˆ€ (i : ΞΉ) (x : M) (hxS : x ∈ S i), C x (_ : x ∈ ⨆ i, S i)) β†’ (βˆ€ (x y : M) (hx : x ∈ ⨆ i, S i) (hy : y ∈ ⨆ i, S i), C x hx β†’ C y hy β†’ C (x + y) (_ : x + y ∈ ⨆ i, S i)) β†’ βˆ€ {x₁ : M} (hx₁ : x₁ ∈ ⨆ i, S i), C x₁ hx₁
AddSubsemigroup.iSup_induction'
end Subsemigroup end NonAssoc