group_theory.subsemigroup.membership
⟷
Mathlib.GroupTheory.Subsemigroup.Membership
The following section lists changes to this file in mathlib3 and mathlib4 that occured after the initial port. Most recent changes are shown first. Hovering over a commit will show all commits associated with the same mathlib3 commit.
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(last sync)
mathlib commit https://github.com/leanprover-community/mathlib/commit/65a1391a0106c9204fe45bc73a039f056558cb83
@@ -139,7 +139,7 @@ then it holds for all elements of the supremum of `S`. -/
theorem iSup_induction (S : ι → Subsemigroup M) {C : M → Prop} {x : M} (hx : x ∈ ⨆ i, S i)
(hp : ∀ (i), ∀ x ∈ S i, C x) (hmul : ∀ x y, C x → C y → C (x * y)) : C x :=
by
- rw [supr_eq_closure] at hx
+ rw [supr_eq_closure] at hx
refine' closure_induction hx (fun x hx => _) hmul
obtain ⟨i, hi⟩ := set.mem_Union.mp hx
exact hp _ _ hi
mathlib commit https://github.com/leanprover-community/mathlib/commit/ce64cd319bb6b3e82f31c2d38e79080d377be451
@@ -52,7 +52,7 @@ theorem mem_iSup_of_directed {S : ι → Subsemigroup M} (hS : Directed (· ≤
by
refine' ⟨_, fun ⟨i, hi⟩ => (SetLike.le_def.1 <| le_iSup S i) hi⟩
suffices x ∈ closure (⋃ i, (S i : Set M)) → ∃ i, x ∈ S i by
- simpa only [closure_Union_of_finite, closure_eq (S _)] using this
+ simpa only [closure_iUnion_of_finite, closure_eq (S _)] using this
refine' fun hx => closure_induction hx (fun y hy => mem_Union.mp hy) _
· rintro x y ⟨i, hi⟩ ⟨j, hj⟩
rcases hS i j with ⟨k, hki, hkj⟩
mathlib commit https://github.com/leanprover-community/mathlib/commit/ce64cd319bb6b3e82f31c2d38e79080d377be451
@@ -3,7 +3,7 @@ Copyright (c) 2022 Jireh Loreaux. All rights reserved.
Released under Apache 2.0 license as described in the file LICENSE.
Authors: Jireh Loreaux
-/
-import Mathbin.GroupTheory.Subsemigroup.Basic
+import GroupTheory.Subsemigroup.Basic
#align_import group_theory.subsemigroup.membership from "leanprover-community/mathlib"@"baba818b9acea366489e8ba32d2cc0fcaf50a1f7"
mathlib commit https://github.com/leanprover-community/mathlib/commit/442a83d738cb208d3600056c489be16900ba701d
@@ -52,7 +52,7 @@ theorem mem_iSup_of_directed {S : ι → Subsemigroup M} (hS : Directed (· ≤
by
refine' ⟨_, fun ⟨i, hi⟩ => (SetLike.le_def.1 <| le_iSup S i) hi⟩
suffices x ∈ closure (⋃ i, (S i : Set M)) → ∃ i, x ∈ S i by
- simpa only [closure_iUnion, closure_eq (S _)] using this
+ simpa only [closure_Union_of_finite, closure_eq (S _)] using this
refine' fun hx => closure_induction hx (fun y hy => mem_Union.mp hy) _
· rintro x y ⟨i, hi⟩ ⟨j, hj⟩
rcases hS i j with ⟨k, hki, hkj⟩
mathlib commit https://github.com/leanprover-community/mathlib/commit/32a7e535287f9c73f2e4d2aef306a39190f0b504
@@ -56,7 +56,7 @@ theorem mem_iSup_of_directed {S : ι → Subsemigroup M} (hS : Directed (· ≤
refine' fun hx => closure_induction hx (fun y hy => mem_Union.mp hy) _
· rintro x y ⟨i, hi⟩ ⟨j, hj⟩
rcases hS i j with ⟨k, hki, hkj⟩
- exact ⟨k, (S k).mul_mem (hki hi) (hkj hj)⟩
+ exact ⟨k, (S k).hMul_mem (hki hi) (hkj hj)⟩
#align subsemigroup.mem_supr_of_directed Subsemigroup.mem_iSup_of_directed
#align add_subsemigroup.mem_supr_of_directed AddSubsemigroup.mem_iSup_of_directed
-/
@@ -107,7 +107,7 @@ theorem mem_sup_right {S T : Subsemigroup M} : ∀ {x : M}, x ∈ T → x ∈ S
#print Subsemigroup.mul_mem_sup /-
@[to_additive]
theorem mul_mem_sup {S T : Subsemigroup M} {x y : M} (hx : x ∈ S) (hy : y ∈ T) : x * y ∈ S ⊔ T :=
- mul_mem (mem_sup_left hx) (mem_sup_right hy)
+ hMul_mem (mem_sup_left hx) (mem_sup_right hy)
#align subsemigroup.mul_mem_sup Subsemigroup.mul_mem_sup
#align add_subsemigroup.add_mem_sup AddSubsemigroup.add_mem_sup
-/
@@ -152,7 +152,7 @@ theorem iSup_induction (S : ι → Subsemigroup M) {C : M → Prop} {x : M} (hx
@[elab_as_elim, to_additive "A dependent version of `add_subsemigroup.supr_induction`. "]
theorem iSup_induction' (S : ι → Subsemigroup M) {C : ∀ x, (x ∈ ⨆ i, S i) → Prop}
(hp : ∀ (i), ∀ x ∈ S i, C x (mem_iSup_of_mem i ‹_›))
- (hmul : ∀ x y hx hy, C x hx → C y hy → C (x * y) (mul_mem ‹_› ‹_›)) {x : M}
+ (hmul : ∀ x y hx hy, C x hx → C y hy → C (x * y) (hMul_mem ‹_› ‹_›)) {x : M}
(hx : x ∈ ⨆ i, S i) : C x hx :=
by
refine' Exists.elim _ fun (hx : x ∈ ⨆ i, S i) (hc : C x hx) => hc
mathlib commit https://github.com/leanprover-community/mathlib/commit/8ea5598db6caeddde6cb734aa179cc2408dbd345
@@ -2,14 +2,11 @@
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 baba818b9acea366489e8ba32d2cc0fcaf50a1f7
-! Please do not edit these lines, except to modify the commit id
-! if you have ported upstream changes.
-/
import Mathbin.GroupTheory.Subsemigroup.Basic
+#align_import group_theory.subsemigroup.membership from "leanprover-community/mathlib"@"baba818b9acea366489e8ba32d2cc0fcaf50a1f7"
+
/-!
# Subsemigroups: membership criteria
mathlib commit https://github.com/leanprover-community/mathlib/commit/9fb8964792b4237dac6200193a0d533f1b3f7423
@@ -46,6 +46,7 @@ open Set
namespace Subsemigroup
+#print Subsemigroup.mem_iSup_of_directed /-
-- TODO: this section can be generalized to `[mul_mem_class B M] [complete_lattice B]`
-- such that `complete_lattice.le` coincides with `set_like.le`
@[to_additive]
@@ -61,59 +62,77 @@ theorem mem_iSup_of_directed {S : ι → Subsemigroup M} (hS : Directed (· ≤
exact ⟨k, (S k).mul_mem (hki hi) (hkj hj)⟩
#align subsemigroup.mem_supr_of_directed Subsemigroup.mem_iSup_of_directed
#align add_subsemigroup.mem_supr_of_directed AddSubsemigroup.mem_iSup_of_directed
+-/
+#print Subsemigroup.coe_iSup_of_directed /-
@[to_additive]
theorem coe_iSup_of_directed {S : ι → Subsemigroup M} (hS : Directed (· ≤ ·) S) :
((⨆ i, S i : Subsemigroup M) : Set M) = ⋃ i, ↑(S i) :=
Set.ext fun x => by simp [mem_supr_of_directed hS]
#align subsemigroup.coe_supr_of_directed Subsemigroup.coe_iSup_of_directed
#align add_subsemigroup.coe_supr_of_directed AddSubsemigroup.coe_iSup_of_directed
+-/
+#print Subsemigroup.mem_sSup_of_directed_on /-
@[to_additive]
theorem mem_sSup_of_directed_on {S : Set (Subsemigroup M)} (hS : DirectedOn (· ≤ ·) S) {x : M} :
x ∈ sSup S ↔ ∃ s ∈ S, x ∈ s := by
simp only [sSup_eq_iSup', mem_supr_of_directed hS.directed_coe, SetCoe.exists, Subtype.coe_mk]
#align subsemigroup.mem_Sup_of_directed_on Subsemigroup.mem_sSup_of_directed_on
#align add_subsemigroup.mem_Sup_of_directed_on AddSubsemigroup.mem_sSup_of_directed_on
+-/
+#print Subsemigroup.coe_sSup_of_directed_on /-
@[to_additive]
theorem coe_sSup_of_directed_on {S : Set (Subsemigroup M)} (hS : DirectedOn (· ≤ ·) S) :
(↑(sSup S) : Set M) = ⋃ s ∈ S, ↑s :=
Set.ext fun x => by simp [mem_Sup_of_directed_on hS]
#align subsemigroup.coe_Sup_of_directed_on Subsemigroup.coe_sSup_of_directed_on
#align add_subsemigroup.coe_Sup_of_directed_on AddSubsemigroup.coe_sSup_of_directed_on
+-/
+#print Subsemigroup.mem_sup_left /-
@[to_additive]
theorem mem_sup_left {S T : Subsemigroup M} : ∀ {x : M}, x ∈ S → x ∈ S ⊔ T :=
show S ≤ S ⊔ T from le_sup_left
#align subsemigroup.mem_sup_left Subsemigroup.mem_sup_left
#align add_subsemigroup.mem_sup_left AddSubsemigroup.mem_sup_left
+-/
+#print Subsemigroup.mem_sup_right /-
@[to_additive]
theorem mem_sup_right {S T : Subsemigroup M} : ∀ {x : M}, x ∈ T → x ∈ S ⊔ T :=
show T ≤ S ⊔ T from le_sup_right
#align subsemigroup.mem_sup_right Subsemigroup.mem_sup_right
#align add_subsemigroup.mem_sup_right AddSubsemigroup.mem_sup_right
+-/
+#print Subsemigroup.mul_mem_sup /-
@[to_additive]
theorem mul_mem_sup {S T : Subsemigroup M} {x y : M} (hx : x ∈ S) (hy : y ∈ T) : x * y ∈ S ⊔ T :=
mul_mem (mem_sup_left hx) (mem_sup_right hy)
#align subsemigroup.mul_mem_sup Subsemigroup.mul_mem_sup
#align add_subsemigroup.add_mem_sup AddSubsemigroup.add_mem_sup
+-/
+#print Subsemigroup.mem_iSup_of_mem /-
@[to_additive]
theorem mem_iSup_of_mem {S : ι → Subsemigroup M} (i : ι) : ∀ {x : M}, x ∈ S i → x ∈ iSup S :=
show S i ≤ iSup S from le_iSup _ _
#align subsemigroup.mem_supr_of_mem Subsemigroup.mem_iSup_of_mem
#align add_subsemigroup.mem_supr_of_mem AddSubsemigroup.mem_iSup_of_mem
+-/
+#print Subsemigroup.mem_sSup_of_mem /-
@[to_additive]
theorem mem_sSup_of_mem {S : Set (Subsemigroup M)} {s : Subsemigroup M} (hs : s ∈ S) :
∀ {x : M}, x ∈ s → x ∈ sSup S :=
show s ≤ sSup S from le_sSup hs
#align subsemigroup.mem_Sup_of_mem Subsemigroup.mem_sSup_of_mem
#align add_subsemigroup.mem_Sup_of_mem AddSubsemigroup.mem_sSup_of_mem
+-/
+#print Subsemigroup.iSup_induction /-
/-- 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`. -/
@@ -129,7 +148,9 @@ theorem iSup_induction (S : ι → Subsemigroup M) {C : M → Prop} {x : M} (hx
exact hp _ _ hi
#align subsemigroup.supr_induction Subsemigroup.iSup_induction
#align add_subsemigroup.supr_induction AddSubsemigroup.iSup_induction
+-/
+#print Subsemigroup.iSup_induction' /-
/-- A dependent version of `subsemigroup.supr_induction`. -/
@[elab_as_elim, to_additive "A dependent version of `add_subsemigroup.supr_induction`. "]
theorem iSup_induction' (S : ι → Subsemigroup M) {C : ∀ x, (x ∈ ⨆ i, S i) → Prop}
@@ -144,6 +165,7 @@ theorem iSup_induction' (S : ι → Subsemigroup M) {C : ∀ x, (x ∈ ⨆ i, S
exact ⟨_, hmul _ _ _ _ Cx Cy⟩
#align subsemigroup.supr_induction' Subsemigroup.iSup_induction'
#align add_subsemigroup.supr_induction' AddSubsemigroup.iSup_induction'
+-/
end Subsemigroup
mathlib commit https://github.com/leanprover-community/mathlib/commit/cca40788df1b8755d5baf17ab2f27dacc2e17acb
@@ -123,7 +123,7 @@ then it holds for all elements of the supremum of `S`. -/
theorem iSup_induction (S : ι → Subsemigroup M) {C : M → Prop} {x : M} (hx : x ∈ ⨆ i, S i)
(hp : ∀ (i), ∀ x ∈ S i, C x) (hmul : ∀ x y, C x → C y → C (x * y)) : C x :=
by
- rw [supr_eq_closure] at hx
+ rw [supr_eq_closure] at hx
refine' closure_induction hx (fun x hx => _) hmul
obtain ⟨i, hi⟩ := set.mem_Union.mp hx
exact hp _ _ hi
mathlib commit https://github.com/leanprover-community/mathlib/commit/917c3c072e487b3cccdbfeff17e75b40e45f66cb
@@ -46,12 +46,6 @@ open Set
namespace Subsemigroup
-/- warning: subsemigroup.mem_supr_of_directed -> Subsemigroup.mem_iSup_of_directed is a dubious translation:
-lean 3 declaration is
- forall {ι : Sort.{u1}} {M : Type.{u2}} [_inst_1 : Mul.{u2} M] {S : ι -> (Subsemigroup.{u2} M _inst_1)}, (Directed.{u2, u1} (Subsemigroup.{u2} M _inst_1) ι (LE.le.{u2} (Subsemigroup.{u2} M _inst_1) (Preorder.toHasLe.{u2} (Subsemigroup.{u2} M _inst_1) (PartialOrder.toPreorder.{u2} (Subsemigroup.{u2} M _inst_1) (SetLike.partialOrder.{u2, u2} (Subsemigroup.{u2} M _inst_1) M (Subsemigroup.setLike.{u2} M _inst_1))))) S) -> (forall {x : M}, Iff (Membership.Mem.{u2, u2} M (Subsemigroup.{u2} M _inst_1) (SetLike.hasMem.{u2, u2} (Subsemigroup.{u2} M _inst_1) M (Subsemigroup.setLike.{u2} M _inst_1)) x (iSup.{u2, u1} (Subsemigroup.{u2} M _inst_1) (CompleteSemilatticeSup.toHasSup.{u2} (Subsemigroup.{u2} M _inst_1) (CompleteLattice.toCompleteSemilatticeSup.{u2} (Subsemigroup.{u2} M _inst_1) (Subsemigroup.completeLattice.{u2} M _inst_1))) ι (fun (i : ι) => S i))) (Exists.{u1} ι (fun (i : ι) => Membership.Mem.{u2, u2} M (Subsemigroup.{u2} M _inst_1) (SetLike.hasMem.{u2, u2} (Subsemigroup.{u2} M _inst_1) M (Subsemigroup.setLike.{u2} M _inst_1)) x (S i))))
-but is expected to have type
- forall {ι : Sort.{u1}} {M : Type.{u2}} [_inst_1 : Mul.{u2} M] {S : ι -> (Subsemigroup.{u2} M _inst_1)}, (Directed.{u2, u1} (Subsemigroup.{u2} M _inst_1) ι (fun (x._@.Mathlib.GroupTheory.Subsemigroup.Membership._hyg.40 : Subsemigroup.{u2} M _inst_1) (x._@.Mathlib.GroupTheory.Subsemigroup.Membership._hyg.42 : Subsemigroup.{u2} M _inst_1) => LE.le.{u2} (Subsemigroup.{u2} M _inst_1) (Preorder.toLE.{u2} (Subsemigroup.{u2} M _inst_1) (PartialOrder.toPreorder.{u2} (Subsemigroup.{u2} M _inst_1) (CompleteSemilatticeInf.toPartialOrder.{u2} (Subsemigroup.{u2} M _inst_1) (CompleteLattice.toCompleteSemilatticeInf.{u2} (Subsemigroup.{u2} M _inst_1) (Subsemigroup.instCompleteLatticeSubsemigroup.{u2} M _inst_1))))) x._@.Mathlib.GroupTheory.Subsemigroup.Membership._hyg.40 x._@.Mathlib.GroupTheory.Subsemigroup.Membership._hyg.42) S) -> (forall {x : M}, Iff (Membership.mem.{u2, u2} M (Subsemigroup.{u2} M _inst_1) (SetLike.instMembership.{u2, u2} (Subsemigroup.{u2} M _inst_1) M (Subsemigroup.instSetLikeSubsemigroup.{u2} M _inst_1)) x (iSup.{u2, u1} (Subsemigroup.{u2} M _inst_1) (CompleteLattice.toSupSet.{u2} (Subsemigroup.{u2} M _inst_1) (Subsemigroup.instCompleteLatticeSubsemigroup.{u2} M _inst_1)) ι (fun (i : ι) => S i))) (Exists.{u1} ι (fun (i : ι) => Membership.mem.{u2, u2} M (Subsemigroup.{u2} M _inst_1) (SetLike.instMembership.{u2, u2} (Subsemigroup.{u2} M _inst_1) M (Subsemigroup.instSetLikeSubsemigroup.{u2} M _inst_1)) x (S i))))
-Case conversion may be inaccurate. Consider using '#align subsemigroup.mem_supr_of_directed Subsemigroup.mem_iSup_of_directedₓ'. -/
-- TODO: this section can be generalized to `[mul_mem_class B M] [complete_lattice B]`
-- such that `complete_lattice.le` coincides with `set_like.le`
@[to_additive]
@@ -68,12 +62,6 @@ theorem mem_iSup_of_directed {S : ι → Subsemigroup M} (hS : Directed (· ≤
#align subsemigroup.mem_supr_of_directed Subsemigroup.mem_iSup_of_directed
#align add_subsemigroup.mem_supr_of_directed AddSubsemigroup.mem_iSup_of_directed
-/- warning: subsemigroup.coe_supr_of_directed -> Subsemigroup.coe_iSup_of_directed is a dubious translation:
-lean 3 declaration is
- forall {ι : Sort.{u1}} {M : Type.{u2}} [_inst_1 : Mul.{u2} M] {S : ι -> (Subsemigroup.{u2} M _inst_1)}, (Directed.{u2, u1} (Subsemigroup.{u2} M _inst_1) ι (LE.le.{u2} (Subsemigroup.{u2} M _inst_1) (Preorder.toHasLe.{u2} (Subsemigroup.{u2} M _inst_1) (PartialOrder.toPreorder.{u2} (Subsemigroup.{u2} M _inst_1) (SetLike.partialOrder.{u2, u2} (Subsemigroup.{u2} M _inst_1) M (Subsemigroup.setLike.{u2} M _inst_1))))) S) -> (Eq.{succ u2} (Set.{u2} M) ((fun (a : Type.{u2}) (b : Type.{u2}) [self : HasLiftT.{succ u2, succ u2} a b] => self.0) (Subsemigroup.{u2} M _inst_1) (Set.{u2} M) (HasLiftT.mk.{succ u2, succ u2} (Subsemigroup.{u2} M _inst_1) (Set.{u2} M) (CoeTCₓ.coe.{succ u2, succ u2} (Subsemigroup.{u2} M _inst_1) (Set.{u2} M) (SetLike.Set.hasCoeT.{u2, u2} (Subsemigroup.{u2} M _inst_1) M (Subsemigroup.setLike.{u2} M _inst_1)))) (iSup.{u2, u1} (Subsemigroup.{u2} M _inst_1) (CompleteSemilatticeSup.toHasSup.{u2} (Subsemigroup.{u2} M _inst_1) (CompleteLattice.toCompleteSemilatticeSup.{u2} (Subsemigroup.{u2} M _inst_1) (Subsemigroup.completeLattice.{u2} M _inst_1))) ι (fun (i : ι) => S i))) (Set.iUnion.{u2, u1} M ι (fun (i : ι) => (fun (a : Type.{u2}) (b : Type.{u2}) [self : HasLiftT.{succ u2, succ u2} a b] => self.0) (Subsemigroup.{u2} M _inst_1) (Set.{u2} M) (HasLiftT.mk.{succ u2, succ u2} (Subsemigroup.{u2} M _inst_1) (Set.{u2} M) (CoeTCₓ.coe.{succ u2, succ u2} (Subsemigroup.{u2} M _inst_1) (Set.{u2} M) (SetLike.Set.hasCoeT.{u2, u2} (Subsemigroup.{u2} M _inst_1) M (Subsemigroup.setLike.{u2} M _inst_1)))) (S i))))
-but is expected to have type
- forall {ι : Sort.{u1}} {M : Type.{u2}} [_inst_1 : Mul.{u2} M] {S : ι -> (Subsemigroup.{u2} M _inst_1)}, (Directed.{u2, u1} (Subsemigroup.{u2} M _inst_1) ι (fun (x._@.Mathlib.GroupTheory.Subsemigroup.Membership._hyg.267 : Subsemigroup.{u2} M _inst_1) (x._@.Mathlib.GroupTheory.Subsemigroup.Membership._hyg.269 : Subsemigroup.{u2} M _inst_1) => LE.le.{u2} (Subsemigroup.{u2} M _inst_1) (Preorder.toLE.{u2} (Subsemigroup.{u2} M _inst_1) (PartialOrder.toPreorder.{u2} (Subsemigroup.{u2} M _inst_1) (CompleteSemilatticeInf.toPartialOrder.{u2} (Subsemigroup.{u2} M _inst_1) (CompleteLattice.toCompleteSemilatticeInf.{u2} (Subsemigroup.{u2} M _inst_1) (Subsemigroup.instCompleteLatticeSubsemigroup.{u2} M _inst_1))))) x._@.Mathlib.GroupTheory.Subsemigroup.Membership._hyg.267 x._@.Mathlib.GroupTheory.Subsemigroup.Membership._hyg.269) S) -> (Eq.{succ u2} (Set.{u2} M) (SetLike.coe.{u2, u2} (Subsemigroup.{u2} M _inst_1) M (Subsemigroup.instSetLikeSubsemigroup.{u2} M _inst_1) (iSup.{u2, u1} (Subsemigroup.{u2} M _inst_1) (CompleteLattice.toSupSet.{u2} (Subsemigroup.{u2} M _inst_1) (Subsemigroup.instCompleteLatticeSubsemigroup.{u2} M _inst_1)) ι (fun (i : ι) => S i))) (Set.iUnion.{u2, u1} M ι (fun (i : ι) => SetLike.coe.{u2, u2} (Subsemigroup.{u2} M _inst_1) M (Subsemigroup.instSetLikeSubsemigroup.{u2} M _inst_1) (S i))))
-Case conversion may be inaccurate. Consider using '#align subsemigroup.coe_supr_of_directed Subsemigroup.coe_iSup_of_directedₓ'. -/
@[to_additive]
theorem coe_iSup_of_directed {S : ι → Subsemigroup M} (hS : Directed (· ≤ ·) S) :
((⨆ i, S i : Subsemigroup M) : Set M) = ⋃ i, ↑(S i) :=
@@ -81,12 +69,6 @@ theorem coe_iSup_of_directed {S : ι → Subsemigroup M} (hS : Directed (· ≤
#align subsemigroup.coe_supr_of_directed Subsemigroup.coe_iSup_of_directed
#align add_subsemigroup.coe_supr_of_directed AddSubsemigroup.coe_iSup_of_directed
-/- warning: subsemigroup.mem_Sup_of_directed_on -> Subsemigroup.mem_sSup_of_directed_on is a dubious translation:
-lean 3 declaration is
- forall {M : Type.{u1}} [_inst_1 : Mul.{u1} M] {S : Set.{u1} (Subsemigroup.{u1} M _inst_1)}, (DirectedOn.{u1} (Subsemigroup.{u1} M _inst_1) (LE.le.{u1} (Subsemigroup.{u1} M _inst_1) (Preorder.toHasLe.{u1} (Subsemigroup.{u1} M _inst_1) (PartialOrder.toPreorder.{u1} (Subsemigroup.{u1} M _inst_1) (SetLike.partialOrder.{u1, u1} (Subsemigroup.{u1} M _inst_1) M (Subsemigroup.setLike.{u1} M _inst_1))))) S) -> (forall {x : M}, Iff (Membership.Mem.{u1, u1} M (Subsemigroup.{u1} M _inst_1) (SetLike.hasMem.{u1, u1} (Subsemigroup.{u1} M _inst_1) M (Subsemigroup.setLike.{u1} M _inst_1)) x (SupSet.sSup.{u1} (Subsemigroup.{u1} M _inst_1) (CompleteSemilatticeSup.toHasSup.{u1} (Subsemigroup.{u1} M _inst_1) (CompleteLattice.toCompleteSemilatticeSup.{u1} (Subsemigroup.{u1} M _inst_1) (Subsemigroup.completeLattice.{u1} M _inst_1))) S)) (Exists.{succ u1} (Subsemigroup.{u1} M _inst_1) (fun (s : Subsemigroup.{u1} M _inst_1) => Exists.{0} (Membership.Mem.{u1, u1} (Subsemigroup.{u1} M _inst_1) (Set.{u1} (Subsemigroup.{u1} M _inst_1)) (Set.hasMem.{u1} (Subsemigroup.{u1} M _inst_1)) s S) (fun (H : Membership.Mem.{u1, u1} (Subsemigroup.{u1} M _inst_1) (Set.{u1} (Subsemigroup.{u1} M _inst_1)) (Set.hasMem.{u1} (Subsemigroup.{u1} M _inst_1)) s S) => Membership.Mem.{u1, u1} M (Subsemigroup.{u1} M _inst_1) (SetLike.hasMem.{u1, u1} (Subsemigroup.{u1} M _inst_1) M (Subsemigroup.setLike.{u1} M _inst_1)) x s))))
-but is expected to have type
- forall {M : Type.{u1}} [_inst_1 : Mul.{u1} M] {S : Set.{u1} (Subsemigroup.{u1} M _inst_1)}, (DirectedOn.{u1} (Subsemigroup.{u1} M _inst_1) (fun (x._@.Mathlib.GroupTheory.Subsemigroup.Membership._hyg.357 : Subsemigroup.{u1} M _inst_1) (x._@.Mathlib.GroupTheory.Subsemigroup.Membership._hyg.359 : Subsemigroup.{u1} M _inst_1) => LE.le.{u1} (Subsemigroup.{u1} M _inst_1) (Preorder.toLE.{u1} (Subsemigroup.{u1} M _inst_1) (PartialOrder.toPreorder.{u1} (Subsemigroup.{u1} M _inst_1) (CompleteSemilatticeInf.toPartialOrder.{u1} (Subsemigroup.{u1} M _inst_1) (CompleteLattice.toCompleteSemilatticeInf.{u1} (Subsemigroup.{u1} M _inst_1) (Subsemigroup.instCompleteLatticeSubsemigroup.{u1} M _inst_1))))) x._@.Mathlib.GroupTheory.Subsemigroup.Membership._hyg.357 x._@.Mathlib.GroupTheory.Subsemigroup.Membership._hyg.359) S) -> (forall {x : M}, Iff (Membership.mem.{u1, u1} M (Subsemigroup.{u1} M _inst_1) (SetLike.instMembership.{u1, u1} (Subsemigroup.{u1} M _inst_1) M (Subsemigroup.instSetLikeSubsemigroup.{u1} M _inst_1)) x (SupSet.sSup.{u1} (Subsemigroup.{u1} M _inst_1) (CompleteLattice.toSupSet.{u1} (Subsemigroup.{u1} M _inst_1) (Subsemigroup.instCompleteLatticeSubsemigroup.{u1} M _inst_1)) S)) (Exists.{succ u1} (Subsemigroup.{u1} M _inst_1) (fun (s : Subsemigroup.{u1} M _inst_1) => And (Membership.mem.{u1, u1} (Subsemigroup.{u1} M _inst_1) (Set.{u1} (Subsemigroup.{u1} M _inst_1)) (Set.instMembershipSet.{u1} (Subsemigroup.{u1} M _inst_1)) s S) (Membership.mem.{u1, u1} M (Subsemigroup.{u1} M _inst_1) (SetLike.instMembership.{u1, u1} (Subsemigroup.{u1} M _inst_1) M (Subsemigroup.instSetLikeSubsemigroup.{u1} M _inst_1)) x s))))
-Case conversion may be inaccurate. Consider using '#align subsemigroup.mem_Sup_of_directed_on Subsemigroup.mem_sSup_of_directed_onₓ'. -/
@[to_additive]
theorem mem_sSup_of_directed_on {S : Set (Subsemigroup M)} (hS : DirectedOn (· ≤ ·) S) {x : M} :
x ∈ sSup S ↔ ∃ s ∈ S, x ∈ s := by
@@ -94,12 +76,6 @@ theorem mem_sSup_of_directed_on {S : Set (Subsemigroup M)} (hS : DirectedOn (·
#align subsemigroup.mem_Sup_of_directed_on Subsemigroup.mem_sSup_of_directed_on
#align add_subsemigroup.mem_Sup_of_directed_on AddSubsemigroup.mem_sSup_of_directed_on
-/- warning: subsemigroup.coe_Sup_of_directed_on -> Subsemigroup.coe_sSup_of_directed_on is a dubious translation:
-lean 3 declaration is
- forall {M : Type.{u1}} [_inst_1 : Mul.{u1} M] {S : Set.{u1} (Subsemigroup.{u1} M _inst_1)}, (DirectedOn.{u1} (Subsemigroup.{u1} M _inst_1) (LE.le.{u1} (Subsemigroup.{u1} M _inst_1) (Preorder.toHasLe.{u1} (Subsemigroup.{u1} M _inst_1) (PartialOrder.toPreorder.{u1} (Subsemigroup.{u1} M _inst_1) (SetLike.partialOrder.{u1, u1} (Subsemigroup.{u1} M _inst_1) M (Subsemigroup.setLike.{u1} M _inst_1))))) S) -> (Eq.{succ u1} (Set.{u1} M) ((fun (a : Type.{u1}) (b : Type.{u1}) [self : HasLiftT.{succ u1, succ u1} a b] => self.0) (Subsemigroup.{u1} M _inst_1) (Set.{u1} M) (HasLiftT.mk.{succ u1, succ u1} (Subsemigroup.{u1} M _inst_1) (Set.{u1} M) (CoeTCₓ.coe.{succ u1, succ u1} (Subsemigroup.{u1} M _inst_1) (Set.{u1} M) (SetLike.Set.hasCoeT.{u1, u1} (Subsemigroup.{u1} M _inst_1) M (Subsemigroup.setLike.{u1} M _inst_1)))) (SupSet.sSup.{u1} (Subsemigroup.{u1} M _inst_1) (CompleteSemilatticeSup.toHasSup.{u1} (Subsemigroup.{u1} M _inst_1) (CompleteLattice.toCompleteSemilatticeSup.{u1} (Subsemigroup.{u1} M _inst_1) (Subsemigroup.completeLattice.{u1} M _inst_1))) S)) (Set.iUnion.{u1, succ u1} M (Subsemigroup.{u1} M _inst_1) (fun (s : Subsemigroup.{u1} M _inst_1) => Set.iUnion.{u1, 0} M (Membership.Mem.{u1, u1} (Subsemigroup.{u1} M _inst_1) (Set.{u1} (Subsemigroup.{u1} M _inst_1)) (Set.hasMem.{u1} (Subsemigroup.{u1} M _inst_1)) s S) (fun (H : Membership.Mem.{u1, u1} (Subsemigroup.{u1} M _inst_1) (Set.{u1} (Subsemigroup.{u1} M _inst_1)) (Set.hasMem.{u1} (Subsemigroup.{u1} M _inst_1)) s S) => (fun (a : Type.{u1}) (b : Type.{u1}) [self : HasLiftT.{succ u1, succ u1} a b] => self.0) (Subsemigroup.{u1} M _inst_1) (Set.{u1} M) (HasLiftT.mk.{succ u1, succ u1} (Subsemigroup.{u1} M _inst_1) (Set.{u1} M) (CoeTCₓ.coe.{succ u1, succ u1} (Subsemigroup.{u1} M _inst_1) (Set.{u1} M) (SetLike.Set.hasCoeT.{u1, u1} (Subsemigroup.{u1} M _inst_1) M (Subsemigroup.setLike.{u1} M _inst_1)))) s))))
-but is expected to have type
- forall {M : Type.{u1}} [_inst_1 : Mul.{u1} M] {S : Set.{u1} (Subsemigroup.{u1} M _inst_1)}, (DirectedOn.{u1} (Subsemigroup.{u1} M _inst_1) (fun (x._@.Mathlib.GroupTheory.Subsemigroup.Membership._hyg.428 : Subsemigroup.{u1} M _inst_1) (x._@.Mathlib.GroupTheory.Subsemigroup.Membership._hyg.430 : Subsemigroup.{u1} M _inst_1) => LE.le.{u1} (Subsemigroup.{u1} M _inst_1) (Preorder.toLE.{u1} (Subsemigroup.{u1} M _inst_1) (PartialOrder.toPreorder.{u1} (Subsemigroup.{u1} M _inst_1) (CompleteSemilatticeInf.toPartialOrder.{u1} (Subsemigroup.{u1} M _inst_1) (CompleteLattice.toCompleteSemilatticeInf.{u1} (Subsemigroup.{u1} M _inst_1) (Subsemigroup.instCompleteLatticeSubsemigroup.{u1} M _inst_1))))) x._@.Mathlib.GroupTheory.Subsemigroup.Membership._hyg.428 x._@.Mathlib.GroupTheory.Subsemigroup.Membership._hyg.430) S) -> (Eq.{succ u1} (Set.{u1} M) (SetLike.coe.{u1, u1} (Subsemigroup.{u1} M _inst_1) M (Subsemigroup.instSetLikeSubsemigroup.{u1} M _inst_1) (SupSet.sSup.{u1} (Subsemigroup.{u1} M _inst_1) (CompleteLattice.toSupSet.{u1} (Subsemigroup.{u1} M _inst_1) (Subsemigroup.instCompleteLatticeSubsemigroup.{u1} M _inst_1)) S)) (Set.iUnion.{u1, succ u1} M (Subsemigroup.{u1} M _inst_1) (fun (s : Subsemigroup.{u1} M _inst_1) => Set.iUnion.{u1, 0} M (Membership.mem.{u1, u1} (Subsemigroup.{u1} M _inst_1) (Set.{u1} (Subsemigroup.{u1} M _inst_1)) (Set.instMembershipSet.{u1} (Subsemigroup.{u1} M _inst_1)) s S) (fun (H : Membership.mem.{u1, u1} (Subsemigroup.{u1} M _inst_1) (Set.{u1} (Subsemigroup.{u1} M _inst_1)) (Set.instMembershipSet.{u1} (Subsemigroup.{u1} M _inst_1)) s S) => SetLike.coe.{u1, u1} (Subsemigroup.{u1} M _inst_1) M (Subsemigroup.instSetLikeSubsemigroup.{u1} M _inst_1) s))))
-Case conversion may be inaccurate. Consider using '#align subsemigroup.coe_Sup_of_directed_on Subsemigroup.coe_sSup_of_directed_onₓ'. -/
@[to_additive]
theorem coe_sSup_of_directed_on {S : Set (Subsemigroup M)} (hS : DirectedOn (· ≤ ·) S) :
(↑(sSup S) : Set M) = ⋃ s ∈ S, ↑s :=
@@ -107,60 +83,30 @@ theorem coe_sSup_of_directed_on {S : Set (Subsemigroup M)} (hS : DirectedOn (·
#align subsemigroup.coe_Sup_of_directed_on Subsemigroup.coe_sSup_of_directed_on
#align add_subsemigroup.coe_Sup_of_directed_on AddSubsemigroup.coe_sSup_of_directed_on
-/- warning: subsemigroup.mem_sup_left -> Subsemigroup.mem_sup_left is a dubious translation:
-lean 3 declaration is
- forall {M : Type.{u1}} [_inst_1 : Mul.{u1} M] {S : Subsemigroup.{u1} M _inst_1} {T : Subsemigroup.{u1} M _inst_1} {x : M}, (Membership.Mem.{u1, u1} M (Subsemigroup.{u1} M _inst_1) (SetLike.hasMem.{u1, u1} (Subsemigroup.{u1} M _inst_1) M (Subsemigroup.setLike.{u1} M _inst_1)) x S) -> (Membership.Mem.{u1, u1} M (Subsemigroup.{u1} M _inst_1) (SetLike.hasMem.{u1, u1} (Subsemigroup.{u1} M _inst_1) M (Subsemigroup.setLike.{u1} M _inst_1)) x (Sup.sup.{u1} (Subsemigroup.{u1} M _inst_1) (SemilatticeSup.toHasSup.{u1} (Subsemigroup.{u1} M _inst_1) (Lattice.toSemilatticeSup.{u1} (Subsemigroup.{u1} M _inst_1) (CompleteLattice.toLattice.{u1} (Subsemigroup.{u1} M _inst_1) (Subsemigroup.completeLattice.{u1} M _inst_1)))) S T))
-but is expected to have type
- forall {M : Type.{u1}} [_inst_1 : Mul.{u1} M] {S : Subsemigroup.{u1} M _inst_1} {T : Subsemigroup.{u1} M _inst_1} {x : M}, (Membership.mem.{u1, u1} M (Subsemigroup.{u1} M _inst_1) (SetLike.instMembership.{u1, u1} (Subsemigroup.{u1} M _inst_1) M (Subsemigroup.instSetLikeSubsemigroup.{u1} M _inst_1)) x S) -> (Membership.mem.{u1, u1} M (Subsemigroup.{u1} M _inst_1) (SetLike.instMembership.{u1, u1} (Subsemigroup.{u1} M _inst_1) M (Subsemigroup.instSetLikeSubsemigroup.{u1} M _inst_1)) x (Sup.sup.{u1} (Subsemigroup.{u1} M _inst_1) (SemilatticeSup.toSup.{u1} (Subsemigroup.{u1} M _inst_1) (Lattice.toSemilatticeSup.{u1} (Subsemigroup.{u1} M _inst_1) (CompleteLattice.toLattice.{u1} (Subsemigroup.{u1} M _inst_1) (Subsemigroup.instCompleteLatticeSubsemigroup.{u1} M _inst_1)))) S T))
-Case conversion may be inaccurate. Consider using '#align subsemigroup.mem_sup_left Subsemigroup.mem_sup_leftₓ'. -/
@[to_additive]
theorem mem_sup_left {S T : Subsemigroup M} : ∀ {x : M}, x ∈ S → x ∈ S ⊔ T :=
show S ≤ S ⊔ T from le_sup_left
#align subsemigroup.mem_sup_left Subsemigroup.mem_sup_left
#align add_subsemigroup.mem_sup_left AddSubsemigroup.mem_sup_left
-/- warning: subsemigroup.mem_sup_right -> Subsemigroup.mem_sup_right is a dubious translation:
-lean 3 declaration is
- forall {M : Type.{u1}} [_inst_1 : Mul.{u1} M] {S : Subsemigroup.{u1} M _inst_1} {T : Subsemigroup.{u1} M _inst_1} {x : M}, (Membership.Mem.{u1, u1} M (Subsemigroup.{u1} M _inst_1) (SetLike.hasMem.{u1, u1} (Subsemigroup.{u1} M _inst_1) M (Subsemigroup.setLike.{u1} M _inst_1)) x T) -> (Membership.Mem.{u1, u1} M (Subsemigroup.{u1} M _inst_1) (SetLike.hasMem.{u1, u1} (Subsemigroup.{u1} M _inst_1) M (Subsemigroup.setLike.{u1} M _inst_1)) x (Sup.sup.{u1} (Subsemigroup.{u1} M _inst_1) (SemilatticeSup.toHasSup.{u1} (Subsemigroup.{u1} M _inst_1) (Lattice.toSemilatticeSup.{u1} (Subsemigroup.{u1} M _inst_1) (CompleteLattice.toLattice.{u1} (Subsemigroup.{u1} M _inst_1) (Subsemigroup.completeLattice.{u1} M _inst_1)))) S T))
-but is expected to have type
- forall {M : Type.{u1}} [_inst_1 : Mul.{u1} M] {S : Subsemigroup.{u1} M _inst_1} {T : Subsemigroup.{u1} M _inst_1} {x : M}, (Membership.mem.{u1, u1} M (Subsemigroup.{u1} M _inst_1) (SetLike.instMembership.{u1, u1} (Subsemigroup.{u1} M _inst_1) M (Subsemigroup.instSetLikeSubsemigroup.{u1} M _inst_1)) x T) -> (Membership.mem.{u1, u1} M (Subsemigroup.{u1} M _inst_1) (SetLike.instMembership.{u1, u1} (Subsemigroup.{u1} M _inst_1) M (Subsemigroup.instSetLikeSubsemigroup.{u1} M _inst_1)) x (Sup.sup.{u1} (Subsemigroup.{u1} M _inst_1) (SemilatticeSup.toSup.{u1} (Subsemigroup.{u1} M _inst_1) (Lattice.toSemilatticeSup.{u1} (Subsemigroup.{u1} M _inst_1) (CompleteLattice.toLattice.{u1} (Subsemigroup.{u1} M _inst_1) (Subsemigroup.instCompleteLatticeSubsemigroup.{u1} M _inst_1)))) S T))
-Case conversion may be inaccurate. Consider using '#align subsemigroup.mem_sup_right Subsemigroup.mem_sup_rightₓ'. -/
@[to_additive]
theorem mem_sup_right {S T : Subsemigroup M} : ∀ {x : M}, x ∈ T → x ∈ S ⊔ T :=
show T ≤ S ⊔ T from le_sup_right
#align subsemigroup.mem_sup_right Subsemigroup.mem_sup_right
#align add_subsemigroup.mem_sup_right AddSubsemigroup.mem_sup_right
-/- warning: subsemigroup.mul_mem_sup -> Subsemigroup.mul_mem_sup is a dubious translation:
-lean 3 declaration is
- forall {M : Type.{u1}} [_inst_1 : Mul.{u1} M] {S : Subsemigroup.{u1} M _inst_1} {T : Subsemigroup.{u1} M _inst_1} {x : M} {y : M}, (Membership.Mem.{u1, u1} M (Subsemigroup.{u1} M _inst_1) (SetLike.hasMem.{u1, u1} (Subsemigroup.{u1} M _inst_1) M (Subsemigroup.setLike.{u1} M _inst_1)) x S) -> (Membership.Mem.{u1, u1} M (Subsemigroup.{u1} M _inst_1) (SetLike.hasMem.{u1, u1} (Subsemigroup.{u1} M _inst_1) M (Subsemigroup.setLike.{u1} M _inst_1)) y T) -> (Membership.Mem.{u1, u1} M (Subsemigroup.{u1} M _inst_1) (SetLike.hasMem.{u1, u1} (Subsemigroup.{u1} M _inst_1) M (Subsemigroup.setLike.{u1} M _inst_1)) (HMul.hMul.{u1, u1, u1} M M M (instHMul.{u1} M _inst_1) x y) (Sup.sup.{u1} (Subsemigroup.{u1} M _inst_1) (SemilatticeSup.toHasSup.{u1} (Subsemigroup.{u1} M _inst_1) (Lattice.toSemilatticeSup.{u1} (Subsemigroup.{u1} M _inst_1) (CompleteLattice.toLattice.{u1} (Subsemigroup.{u1} M _inst_1) (Subsemigroup.completeLattice.{u1} M _inst_1)))) S T))
-but is expected to have type
- forall {M : Type.{u1}} [_inst_1 : Mul.{u1} M] {S : Subsemigroup.{u1} M _inst_1} {T : Subsemigroup.{u1} M _inst_1} {x : M} {y : M}, (Membership.mem.{u1, u1} M (Subsemigroup.{u1} M _inst_1) (SetLike.instMembership.{u1, u1} (Subsemigroup.{u1} M _inst_1) M (Subsemigroup.instSetLikeSubsemigroup.{u1} M _inst_1)) x S) -> (Membership.mem.{u1, u1} M (Subsemigroup.{u1} M _inst_1) (SetLike.instMembership.{u1, u1} (Subsemigroup.{u1} M _inst_1) M (Subsemigroup.instSetLikeSubsemigroup.{u1} M _inst_1)) y T) -> (Membership.mem.{u1, u1} M (Subsemigroup.{u1} M _inst_1) (SetLike.instMembership.{u1, u1} (Subsemigroup.{u1} M _inst_1) M (Subsemigroup.instSetLikeSubsemigroup.{u1} M _inst_1)) (HMul.hMul.{u1, u1, u1} M M M (instHMul.{u1} M _inst_1) x y) (Sup.sup.{u1} (Subsemigroup.{u1} M _inst_1) (SemilatticeSup.toSup.{u1} (Subsemigroup.{u1} M _inst_1) (Lattice.toSemilatticeSup.{u1} (Subsemigroup.{u1} M _inst_1) (CompleteLattice.toLattice.{u1} (Subsemigroup.{u1} M _inst_1) (Subsemigroup.instCompleteLatticeSubsemigroup.{u1} M _inst_1)))) S T))
-Case conversion may be inaccurate. Consider using '#align subsemigroup.mul_mem_sup Subsemigroup.mul_mem_supₓ'. -/
@[to_additive]
theorem mul_mem_sup {S T : Subsemigroup M} {x y : M} (hx : x ∈ S) (hy : y ∈ T) : x * y ∈ S ⊔ T :=
mul_mem (mem_sup_left hx) (mem_sup_right hy)
#align subsemigroup.mul_mem_sup Subsemigroup.mul_mem_sup
#align add_subsemigroup.add_mem_sup AddSubsemigroup.add_mem_sup
-/- warning: subsemigroup.mem_supr_of_mem -> Subsemigroup.mem_iSup_of_mem is a dubious translation:
-lean 3 declaration is
- forall {ι : Sort.{u1}} {M : Type.{u2}} [_inst_1 : Mul.{u2} M] {S : ι -> (Subsemigroup.{u2} M _inst_1)} (i : ι) {x : M}, (Membership.Mem.{u2, u2} M (Subsemigroup.{u2} M _inst_1) (SetLike.hasMem.{u2, u2} (Subsemigroup.{u2} M _inst_1) M (Subsemigroup.setLike.{u2} M _inst_1)) x (S i)) -> (Membership.Mem.{u2, u2} M (Subsemigroup.{u2} M _inst_1) (SetLike.hasMem.{u2, u2} (Subsemigroup.{u2} M _inst_1) M (Subsemigroup.setLike.{u2} M _inst_1)) x (iSup.{u2, u1} (Subsemigroup.{u2} M _inst_1) (CompleteSemilatticeSup.toHasSup.{u2} (Subsemigroup.{u2} M _inst_1) (CompleteLattice.toCompleteSemilatticeSup.{u2} (Subsemigroup.{u2} M _inst_1) (Subsemigroup.completeLattice.{u2} M _inst_1))) ι S))
-but is expected to have type
- forall {ι : Sort.{u1}} {M : Type.{u2}} [_inst_1 : Mul.{u2} M] {S : ι -> (Subsemigroup.{u2} M _inst_1)} (i : ι) {x : M}, (Membership.mem.{u2, u2} M (Subsemigroup.{u2} M _inst_1) (SetLike.instMembership.{u2, u2} (Subsemigroup.{u2} M _inst_1) M (Subsemigroup.instSetLikeSubsemigroup.{u2} M _inst_1)) x (S i)) -> (Membership.mem.{u2, u2} M (Subsemigroup.{u2} M _inst_1) (SetLike.instMembership.{u2, u2} (Subsemigroup.{u2} M _inst_1) M (Subsemigroup.instSetLikeSubsemigroup.{u2} M _inst_1)) x (iSup.{u2, u1} (Subsemigroup.{u2} M _inst_1) (CompleteLattice.toSupSet.{u2} (Subsemigroup.{u2} M _inst_1) (Subsemigroup.instCompleteLatticeSubsemigroup.{u2} M _inst_1)) ι S))
-Case conversion may be inaccurate. Consider using '#align subsemigroup.mem_supr_of_mem Subsemigroup.mem_iSup_of_memₓ'. -/
@[to_additive]
theorem mem_iSup_of_mem {S : ι → Subsemigroup M} (i : ι) : ∀ {x : M}, x ∈ S i → x ∈ iSup S :=
show S i ≤ iSup S from le_iSup _ _
#align subsemigroup.mem_supr_of_mem Subsemigroup.mem_iSup_of_mem
#align add_subsemigroup.mem_supr_of_mem AddSubsemigroup.mem_iSup_of_mem
-/- warning: subsemigroup.mem_Sup_of_mem -> Subsemigroup.mem_sSup_of_mem is a dubious translation:
-lean 3 declaration is
- forall {M : Type.{u1}} [_inst_1 : Mul.{u1} M] {S : Set.{u1} (Subsemigroup.{u1} M _inst_1)} {s : Subsemigroup.{u1} M _inst_1}, (Membership.Mem.{u1, u1} (Subsemigroup.{u1} M _inst_1) (Set.{u1} (Subsemigroup.{u1} M _inst_1)) (Set.hasMem.{u1} (Subsemigroup.{u1} M _inst_1)) s S) -> (forall {x : M}, (Membership.Mem.{u1, u1} M (Subsemigroup.{u1} M _inst_1) (SetLike.hasMem.{u1, u1} (Subsemigroup.{u1} M _inst_1) M (Subsemigroup.setLike.{u1} M _inst_1)) x s) -> (Membership.Mem.{u1, u1} M (Subsemigroup.{u1} M _inst_1) (SetLike.hasMem.{u1, u1} (Subsemigroup.{u1} M _inst_1) M (Subsemigroup.setLike.{u1} M _inst_1)) x (SupSet.sSup.{u1} (Subsemigroup.{u1} M _inst_1) (CompleteSemilatticeSup.toHasSup.{u1} (Subsemigroup.{u1} M _inst_1) (CompleteLattice.toCompleteSemilatticeSup.{u1} (Subsemigroup.{u1} M _inst_1) (Subsemigroup.completeLattice.{u1} M _inst_1))) S)))
-but is expected to have type
- forall {M : Type.{u1}} [_inst_1 : Mul.{u1} M] {S : Set.{u1} (Subsemigroup.{u1} M _inst_1)} {s : Subsemigroup.{u1} M _inst_1}, (Membership.mem.{u1, u1} (Subsemigroup.{u1} M _inst_1) (Set.{u1} (Subsemigroup.{u1} M _inst_1)) (Set.instMembershipSet.{u1} (Subsemigroup.{u1} M _inst_1)) s S) -> (forall {x : M}, (Membership.mem.{u1, u1} M (Subsemigroup.{u1} M _inst_1) (SetLike.instMembership.{u1, u1} (Subsemigroup.{u1} M _inst_1) M (Subsemigroup.instSetLikeSubsemigroup.{u1} M _inst_1)) x s) -> (Membership.mem.{u1, u1} M (Subsemigroup.{u1} M _inst_1) (SetLike.instMembership.{u1, u1} (Subsemigroup.{u1} M _inst_1) M (Subsemigroup.instSetLikeSubsemigroup.{u1} M _inst_1)) x (SupSet.sSup.{u1} (Subsemigroup.{u1} M _inst_1) (CompleteLattice.toSupSet.{u1} (Subsemigroup.{u1} M _inst_1) (Subsemigroup.instCompleteLatticeSubsemigroup.{u1} M _inst_1)) S)))
-Case conversion may be inaccurate. Consider using '#align subsemigroup.mem_Sup_of_mem Subsemigroup.mem_sSup_of_memₓ'. -/
@[to_additive]
theorem mem_sSup_of_mem {S : Set (Subsemigroup M)} {s : Subsemigroup M} (hs : s ∈ S) :
∀ {x : M}, x ∈ s → x ∈ sSup S :=
@@ -168,12 +114,6 @@ theorem mem_sSup_of_mem {S : Set (Subsemigroup M)} {s : Subsemigroup M} (hs : s
#align subsemigroup.mem_Sup_of_mem Subsemigroup.mem_sSup_of_mem
#align add_subsemigroup.mem_Sup_of_mem AddSubsemigroup.mem_sSup_of_mem
-/- warning: subsemigroup.supr_induction -> Subsemigroup.iSup_induction is a dubious translation:
-lean 3 declaration is
- forall {ι : Sort.{u1}} {M : Type.{u2}} [_inst_1 : Mul.{u2} M] (S : ι -> (Subsemigroup.{u2} M _inst_1)) {C : M -> Prop} {x : M}, (Membership.Mem.{u2, u2} M (Subsemigroup.{u2} M _inst_1) (SetLike.hasMem.{u2, u2} (Subsemigroup.{u2} M _inst_1) M (Subsemigroup.setLike.{u2} M _inst_1)) x (iSup.{u2, u1} (Subsemigroup.{u2} M _inst_1) (CompleteSemilatticeSup.toHasSup.{u2} (Subsemigroup.{u2} M _inst_1) (CompleteLattice.toCompleteSemilatticeSup.{u2} (Subsemigroup.{u2} M _inst_1) (Subsemigroup.completeLattice.{u2} M _inst_1))) ι (fun (i : ι) => S i))) -> (forall (i : ι) (x : M), (Membership.Mem.{u2, u2} M (Subsemigroup.{u2} M _inst_1) (SetLike.hasMem.{u2, u2} (Subsemigroup.{u2} M _inst_1) M (Subsemigroup.setLike.{u2} M _inst_1)) x (S i)) -> (C x)) -> (forall (x : M) (y : M), (C x) -> (C y) -> (C (HMul.hMul.{u2, u2, u2} M M M (instHMul.{u2} M _inst_1) x y))) -> (C x)
-but is expected to have type
- forall {ι : Sort.{u1}} {M : Type.{u2}} [_inst_1 : Mul.{u2} M] (S : ι -> (Subsemigroup.{u2} M _inst_1)) {C : M -> Prop} {x : M}, (Membership.mem.{u2, u2} M (Subsemigroup.{u2} M _inst_1) (SetLike.instMembership.{u2, u2} (Subsemigroup.{u2} M _inst_1) M (Subsemigroup.instSetLikeSubsemigroup.{u2} M _inst_1)) x (iSup.{u2, u1} (Subsemigroup.{u2} M _inst_1) (CompleteLattice.toSupSet.{u2} (Subsemigroup.{u2} M _inst_1) (Subsemigroup.instCompleteLatticeSubsemigroup.{u2} M _inst_1)) ι (fun (i : ι) => S i))) -> (forall (i : ι) (x : M), (Membership.mem.{u2, u2} M (Subsemigroup.{u2} M _inst_1) (SetLike.instMembership.{u2, u2} (Subsemigroup.{u2} M _inst_1) M (Subsemigroup.instSetLikeSubsemigroup.{u2} M _inst_1)) x (S i)) -> (C x)) -> (forall (x : M) (y : M), (C x) -> (C y) -> (C (HMul.hMul.{u2, u2, u2} M M M (instHMul.{u2} M _inst_1) x y))) -> (C x)
-Case conversion may be inaccurate. Consider using '#align subsemigroup.supr_induction Subsemigroup.iSup_inductionₓ'. -/
/-- 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`. -/
@@ -190,12 +130,6 @@ theorem iSup_induction (S : ι → Subsemigroup M) {C : M → Prop} {x : M} (hx
#align subsemigroup.supr_induction Subsemigroup.iSup_induction
#align add_subsemigroup.supr_induction AddSubsemigroup.iSup_induction
-/- warning: subsemigroup.supr_induction' -> Subsemigroup.iSup_induction' is a dubious translation:
-lean 3 declaration is
- forall {ι : Sort.{u1}} {M : Type.{u2}} [_inst_1 : Mul.{u2} M] (S : ι -> (Subsemigroup.{u2} M _inst_1)) {C : forall (x : M), (Membership.Mem.{u2, u2} M (Subsemigroup.{u2} M _inst_1) (SetLike.hasMem.{u2, u2} (Subsemigroup.{u2} M _inst_1) M (Subsemigroup.setLike.{u2} M _inst_1)) x (iSup.{u2, u1} (Subsemigroup.{u2} M _inst_1) (CompleteSemilatticeSup.toHasSup.{u2} (Subsemigroup.{u2} M _inst_1) (CompleteLattice.toCompleteSemilatticeSup.{u2} (Subsemigroup.{u2} M _inst_1) (Subsemigroup.completeLattice.{u2} M _inst_1))) ι (fun (i : ι) => S i))) -> Prop}, (forall (i : ι) (x : M) (H : Membership.Mem.{u2, u2} M (Subsemigroup.{u2} M _inst_1) (SetLike.hasMem.{u2, u2} (Subsemigroup.{u2} M _inst_1) M (Subsemigroup.setLike.{u2} M _inst_1)) x (S i)), C x (Subsemigroup.mem_iSup_of_mem.{u1, u2} ι M _inst_1 (fun (i : ι) => S i) i x H)) -> (forall (x : M) (y : M) (hx : Membership.Mem.{u2, u2} M (Subsemigroup.{u2} M _inst_1) (SetLike.hasMem.{u2, u2} (Subsemigroup.{u2} M _inst_1) M (Subsemigroup.setLike.{u2} M _inst_1)) x (iSup.{u2, u1} (Subsemigroup.{u2} M _inst_1) (CompleteSemilatticeSup.toHasSup.{u2} (Subsemigroup.{u2} M _inst_1) (CompleteLattice.toCompleteSemilatticeSup.{u2} (Subsemigroup.{u2} M _inst_1) (Subsemigroup.completeLattice.{u2} M _inst_1))) ι (fun (i : ι) => S i))) (hy : Membership.Mem.{u2, u2} M (Subsemigroup.{u2} M _inst_1) (SetLike.hasMem.{u2, u2} (Subsemigroup.{u2} M _inst_1) M (Subsemigroup.setLike.{u2} M _inst_1)) y (iSup.{u2, u1} (Subsemigroup.{u2} M _inst_1) (CompleteSemilatticeSup.toHasSup.{u2} (Subsemigroup.{u2} M _inst_1) (CompleteLattice.toCompleteSemilatticeSup.{u2} (Subsemigroup.{u2} M _inst_1) (Subsemigroup.completeLattice.{u2} M _inst_1))) ι (fun (i : ι) => S i))), (C x hx) -> (C y hy) -> (C (HMul.hMul.{u2, u2, u2} M M M (instHMul.{u2} M _inst_1) x y) (MulMemClass.mul_mem.{u2, u2} (Subsemigroup.{u2} M _inst_1) M _inst_1 (Subsemigroup.setLike.{u2} M _inst_1) (Subsemigroup.mulMemClass.{u2} M _inst_1) (iSup.{u2, u1} (Subsemigroup.{u2} M _inst_1) (CompleteSemilatticeSup.toHasSup.{u2} (Subsemigroup.{u2} M _inst_1) (CompleteLattice.toCompleteSemilatticeSup.{u2} (Subsemigroup.{u2} M _inst_1) (Subsemigroup.completeLattice.{u2} M _inst_1))) ι (fun (i : ι) => S i)) x y hx hy))) -> (forall {x : M} (hx : Membership.Mem.{u2, u2} M (Subsemigroup.{u2} M _inst_1) (SetLike.hasMem.{u2, u2} (Subsemigroup.{u2} M _inst_1) M (Subsemigroup.setLike.{u2} M _inst_1)) x (iSup.{u2, u1} (Subsemigroup.{u2} M _inst_1) (CompleteSemilatticeSup.toHasSup.{u2} (Subsemigroup.{u2} M _inst_1) (CompleteLattice.toCompleteSemilatticeSup.{u2} (Subsemigroup.{u2} M _inst_1) (Subsemigroup.completeLattice.{u2} M _inst_1))) ι (fun (i : ι) => S i))), C x hx)
-but is expected to have type
- forall {ι : Sort.{u1}} {M : Type.{u2}} [_inst_1 : Mul.{u2} M] (S : ι -> (Subsemigroup.{u2} M _inst_1)) {C : forall (x : M), (Membership.mem.{u2, u2} M (Subsemigroup.{u2} M _inst_1) (SetLike.instMembership.{u2, u2} (Subsemigroup.{u2} M _inst_1) M (Subsemigroup.instSetLikeSubsemigroup.{u2} M _inst_1)) x (iSup.{u2, u1} (Subsemigroup.{u2} M _inst_1) (CompleteLattice.toSupSet.{u2} (Subsemigroup.{u2} M _inst_1) (Subsemigroup.instCompleteLatticeSubsemigroup.{u2} M _inst_1)) ι (fun (i : ι) => S i))) -> Prop}, (forall (i : ι) (x : M) (H : Membership.mem.{u2, u2} M (Subsemigroup.{u2} M _inst_1) (SetLike.instMembership.{u2, u2} (Subsemigroup.{u2} M _inst_1) M (Subsemigroup.instSetLikeSubsemigroup.{u2} M _inst_1)) x (S i)), C x (Subsemigroup.mem_iSup_of_mem.{u1, u2} ι M _inst_1 (fun (i : ι) => S i) i x H)) -> (forall (x : M) (y : M) (hx : Membership.mem.{u2, u2} M (Subsemigroup.{u2} M _inst_1) (SetLike.instMembership.{u2, u2} (Subsemigroup.{u2} M _inst_1) M (Subsemigroup.instSetLikeSubsemigroup.{u2} M _inst_1)) x (iSup.{u2, u1} (Subsemigroup.{u2} M _inst_1) (CompleteLattice.toSupSet.{u2} (Subsemigroup.{u2} M _inst_1) (Subsemigroup.instCompleteLatticeSubsemigroup.{u2} M _inst_1)) ι (fun (i : ι) => S i))) (hy : Membership.mem.{u2, u2} M (Subsemigroup.{u2} M _inst_1) (SetLike.instMembership.{u2, u2} (Subsemigroup.{u2} M _inst_1) M (Subsemigroup.instSetLikeSubsemigroup.{u2} M _inst_1)) y (iSup.{u2, u1} (Subsemigroup.{u2} M _inst_1) (CompleteLattice.toSupSet.{u2} (Subsemigroup.{u2} M _inst_1) (Subsemigroup.instCompleteLatticeSubsemigroup.{u2} M _inst_1)) ι (fun (i : ι) => S i))), (C x hx) -> (C y hy) -> (C (HMul.hMul.{u2, u2, u2} M M M (instHMul.{u2} M _inst_1) x y) (MulMemClass.mul_mem.{u2, u2} (Subsemigroup.{u2} M _inst_1) M _inst_1 (Subsemigroup.instSetLikeSubsemigroup.{u2} M _inst_1) (Subsemigroup.instMulMemClassSubsemigroupInstSetLikeSubsemigroup.{u2} M _inst_1) (iSup.{u2, u1} (Subsemigroup.{u2} M _inst_1) (CompleteLattice.toSupSet.{u2} (Subsemigroup.{u2} M _inst_1) (Subsemigroup.instCompleteLatticeSubsemigroup.{u2} M _inst_1)) ι (fun (i : ι) => S i)) x y hx hy))) -> (forall {x : M} (hx : Membership.mem.{u2, u2} M (Subsemigroup.{u2} M _inst_1) (SetLike.instMembership.{u2, u2} (Subsemigroup.{u2} M _inst_1) M (Subsemigroup.instSetLikeSubsemigroup.{u2} M _inst_1)) x (iSup.{u2, u1} (Subsemigroup.{u2} M _inst_1) (CompleteLattice.toSupSet.{u2} (Subsemigroup.{u2} M _inst_1) (Subsemigroup.instCompleteLatticeSubsemigroup.{u2} M _inst_1)) ι (fun (i : ι) => S i))), C x hx)
-Case conversion may be inaccurate. Consider using '#align subsemigroup.supr_induction' Subsemigroup.iSup_induction'ₓ'. -/
/-- A dependent version of `subsemigroup.supr_induction`. -/
@[elab_as_elim, to_additive "A dependent version of `add_subsemigroup.supr_induction`. "]
theorem iSup_induction' (S : ι → Subsemigroup M) {C : ∀ x, (x ∈ ⨆ i, S i) → Prop}
mathlib commit https://github.com/leanprover-community/mathlib/commit/0b9eaaa7686280fad8cce467f5c3c57ee6ce77f8
@@ -48,7 +48,7 @@ namespace Subsemigroup
/- warning: subsemigroup.mem_supr_of_directed -> Subsemigroup.mem_iSup_of_directed is a dubious translation:
lean 3 declaration is
- forall {ι : Sort.{u1}} {M : Type.{u2}} [_inst_1 : Mul.{u2} M] {S : ι -> (Subsemigroup.{u2} M _inst_1)}, (Directed.{u2, u1} (Subsemigroup.{u2} M _inst_1) ι (LE.le.{u2} (Subsemigroup.{u2} M _inst_1) (Preorder.toLE.{u2} (Subsemigroup.{u2} M _inst_1) (PartialOrder.toPreorder.{u2} (Subsemigroup.{u2} M _inst_1) (SetLike.partialOrder.{u2, u2} (Subsemigroup.{u2} M _inst_1) M (Subsemigroup.setLike.{u2} M _inst_1))))) S) -> (forall {x : M}, Iff (Membership.Mem.{u2, u2} M (Subsemigroup.{u2} M _inst_1) (SetLike.hasMem.{u2, u2} (Subsemigroup.{u2} M _inst_1) M (Subsemigroup.setLike.{u2} M _inst_1)) x (iSup.{u2, u1} (Subsemigroup.{u2} M _inst_1) (CompleteSemilatticeSup.toHasSup.{u2} (Subsemigroup.{u2} M _inst_1) (CompleteLattice.toCompleteSemilatticeSup.{u2} (Subsemigroup.{u2} M _inst_1) (Subsemigroup.completeLattice.{u2} M _inst_1))) ι (fun (i : ι) => S i))) (Exists.{u1} ι (fun (i : ι) => Membership.Mem.{u2, u2} M (Subsemigroup.{u2} M _inst_1) (SetLike.hasMem.{u2, u2} (Subsemigroup.{u2} M _inst_1) M (Subsemigroup.setLike.{u2} M _inst_1)) x (S i))))
+ forall {ι : Sort.{u1}} {M : Type.{u2}} [_inst_1 : Mul.{u2} M] {S : ι -> (Subsemigroup.{u2} M _inst_1)}, (Directed.{u2, u1} (Subsemigroup.{u2} M _inst_1) ι (LE.le.{u2} (Subsemigroup.{u2} M _inst_1) (Preorder.toHasLe.{u2} (Subsemigroup.{u2} M _inst_1) (PartialOrder.toPreorder.{u2} (Subsemigroup.{u2} M _inst_1) (SetLike.partialOrder.{u2, u2} (Subsemigroup.{u2} M _inst_1) M (Subsemigroup.setLike.{u2} M _inst_1))))) S) -> (forall {x : M}, Iff (Membership.Mem.{u2, u2} M (Subsemigroup.{u2} M _inst_1) (SetLike.hasMem.{u2, u2} (Subsemigroup.{u2} M _inst_1) M (Subsemigroup.setLike.{u2} M _inst_1)) x (iSup.{u2, u1} (Subsemigroup.{u2} M _inst_1) (CompleteSemilatticeSup.toHasSup.{u2} (Subsemigroup.{u2} M _inst_1) (CompleteLattice.toCompleteSemilatticeSup.{u2} (Subsemigroup.{u2} M _inst_1) (Subsemigroup.completeLattice.{u2} M _inst_1))) ι (fun (i : ι) => S i))) (Exists.{u1} ι (fun (i : ι) => Membership.Mem.{u2, u2} M (Subsemigroup.{u2} M _inst_1) (SetLike.hasMem.{u2, u2} (Subsemigroup.{u2} M _inst_1) M (Subsemigroup.setLike.{u2} M _inst_1)) x (S i))))
but is expected to have type
forall {ι : Sort.{u1}} {M : Type.{u2}} [_inst_1 : Mul.{u2} M] {S : ι -> (Subsemigroup.{u2} M _inst_1)}, (Directed.{u2, u1} (Subsemigroup.{u2} M _inst_1) ι (fun (x._@.Mathlib.GroupTheory.Subsemigroup.Membership._hyg.40 : Subsemigroup.{u2} M _inst_1) (x._@.Mathlib.GroupTheory.Subsemigroup.Membership._hyg.42 : Subsemigroup.{u2} M _inst_1) => LE.le.{u2} (Subsemigroup.{u2} M _inst_1) (Preorder.toLE.{u2} (Subsemigroup.{u2} M _inst_1) (PartialOrder.toPreorder.{u2} (Subsemigroup.{u2} M _inst_1) (CompleteSemilatticeInf.toPartialOrder.{u2} (Subsemigroup.{u2} M _inst_1) (CompleteLattice.toCompleteSemilatticeInf.{u2} (Subsemigroup.{u2} M _inst_1) (Subsemigroup.instCompleteLatticeSubsemigroup.{u2} M _inst_1))))) x._@.Mathlib.GroupTheory.Subsemigroup.Membership._hyg.40 x._@.Mathlib.GroupTheory.Subsemigroup.Membership._hyg.42) S) -> (forall {x : M}, Iff (Membership.mem.{u2, u2} M (Subsemigroup.{u2} M _inst_1) (SetLike.instMembership.{u2, u2} (Subsemigroup.{u2} M _inst_1) M (Subsemigroup.instSetLikeSubsemigroup.{u2} M _inst_1)) x (iSup.{u2, u1} (Subsemigroup.{u2} M _inst_1) (CompleteLattice.toSupSet.{u2} (Subsemigroup.{u2} M _inst_1) (Subsemigroup.instCompleteLatticeSubsemigroup.{u2} M _inst_1)) ι (fun (i : ι) => S i))) (Exists.{u1} ι (fun (i : ι) => Membership.mem.{u2, u2} M (Subsemigroup.{u2} M _inst_1) (SetLike.instMembership.{u2, u2} (Subsemigroup.{u2} M _inst_1) M (Subsemigroup.instSetLikeSubsemigroup.{u2} M _inst_1)) x (S i))))
Case conversion may be inaccurate. Consider using '#align subsemigroup.mem_supr_of_directed Subsemigroup.mem_iSup_of_directedₓ'. -/
@@ -70,7 +70,7 @@ theorem mem_iSup_of_directed {S : ι → Subsemigroup M} (hS : Directed (· ≤
/- warning: subsemigroup.coe_supr_of_directed -> Subsemigroup.coe_iSup_of_directed is a dubious translation:
lean 3 declaration is
- forall {ι : Sort.{u1}} {M : Type.{u2}} [_inst_1 : Mul.{u2} M] {S : ι -> (Subsemigroup.{u2} M _inst_1)}, (Directed.{u2, u1} (Subsemigroup.{u2} M _inst_1) ι (LE.le.{u2} (Subsemigroup.{u2} M _inst_1) (Preorder.toLE.{u2} (Subsemigroup.{u2} M _inst_1) (PartialOrder.toPreorder.{u2} (Subsemigroup.{u2} M _inst_1) (SetLike.partialOrder.{u2, u2} (Subsemigroup.{u2} M _inst_1) M (Subsemigroup.setLike.{u2} M _inst_1))))) S) -> (Eq.{succ u2} (Set.{u2} M) ((fun (a : Type.{u2}) (b : Type.{u2}) [self : HasLiftT.{succ u2, succ u2} a b] => self.0) (Subsemigroup.{u2} M _inst_1) (Set.{u2} M) (HasLiftT.mk.{succ u2, succ u2} (Subsemigroup.{u2} M _inst_1) (Set.{u2} M) (CoeTCₓ.coe.{succ u2, succ u2} (Subsemigroup.{u2} M _inst_1) (Set.{u2} M) (SetLike.Set.hasCoeT.{u2, u2} (Subsemigroup.{u2} M _inst_1) M (Subsemigroup.setLike.{u2} M _inst_1)))) (iSup.{u2, u1} (Subsemigroup.{u2} M _inst_1) (CompleteSemilatticeSup.toHasSup.{u2} (Subsemigroup.{u2} M _inst_1) (CompleteLattice.toCompleteSemilatticeSup.{u2} (Subsemigroup.{u2} M _inst_1) (Subsemigroup.completeLattice.{u2} M _inst_1))) ι (fun (i : ι) => S i))) (Set.iUnion.{u2, u1} M ι (fun (i : ι) => (fun (a : Type.{u2}) (b : Type.{u2}) [self : HasLiftT.{succ u2, succ u2} a b] => self.0) (Subsemigroup.{u2} M _inst_1) (Set.{u2} M) (HasLiftT.mk.{succ u2, succ u2} (Subsemigroup.{u2} M _inst_1) (Set.{u2} M) (CoeTCₓ.coe.{succ u2, succ u2} (Subsemigroup.{u2} M _inst_1) (Set.{u2} M) (SetLike.Set.hasCoeT.{u2, u2} (Subsemigroup.{u2} M _inst_1) M (Subsemigroup.setLike.{u2} M _inst_1)))) (S i))))
+ forall {ι : Sort.{u1}} {M : Type.{u2}} [_inst_1 : Mul.{u2} M] {S : ι -> (Subsemigroup.{u2} M _inst_1)}, (Directed.{u2, u1} (Subsemigroup.{u2} M _inst_1) ι (LE.le.{u2} (Subsemigroup.{u2} M _inst_1) (Preorder.toHasLe.{u2} (Subsemigroup.{u2} M _inst_1) (PartialOrder.toPreorder.{u2} (Subsemigroup.{u2} M _inst_1) (SetLike.partialOrder.{u2, u2} (Subsemigroup.{u2} M _inst_1) M (Subsemigroup.setLike.{u2} M _inst_1))))) S) -> (Eq.{succ u2} (Set.{u2} M) ((fun (a : Type.{u2}) (b : Type.{u2}) [self : HasLiftT.{succ u2, succ u2} a b] => self.0) (Subsemigroup.{u2} M _inst_1) (Set.{u2} M) (HasLiftT.mk.{succ u2, succ u2} (Subsemigroup.{u2} M _inst_1) (Set.{u2} M) (CoeTCₓ.coe.{succ u2, succ u2} (Subsemigroup.{u2} M _inst_1) (Set.{u2} M) (SetLike.Set.hasCoeT.{u2, u2} (Subsemigroup.{u2} M _inst_1) M (Subsemigroup.setLike.{u2} M _inst_1)))) (iSup.{u2, u1} (Subsemigroup.{u2} M _inst_1) (CompleteSemilatticeSup.toHasSup.{u2} (Subsemigroup.{u2} M _inst_1) (CompleteLattice.toCompleteSemilatticeSup.{u2} (Subsemigroup.{u2} M _inst_1) (Subsemigroup.completeLattice.{u2} M _inst_1))) ι (fun (i : ι) => S i))) (Set.iUnion.{u2, u1} M ι (fun (i : ι) => (fun (a : Type.{u2}) (b : Type.{u2}) [self : HasLiftT.{succ u2, succ u2} a b] => self.0) (Subsemigroup.{u2} M _inst_1) (Set.{u2} M) (HasLiftT.mk.{succ u2, succ u2} (Subsemigroup.{u2} M _inst_1) (Set.{u2} M) (CoeTCₓ.coe.{succ u2, succ u2} (Subsemigroup.{u2} M _inst_1) (Set.{u2} M) (SetLike.Set.hasCoeT.{u2, u2} (Subsemigroup.{u2} M _inst_1) M (Subsemigroup.setLike.{u2} M _inst_1)))) (S i))))
but is expected to have type
forall {ι : Sort.{u1}} {M : Type.{u2}} [_inst_1 : Mul.{u2} M] {S : ι -> (Subsemigroup.{u2} M _inst_1)}, (Directed.{u2, u1} (Subsemigroup.{u2} M _inst_1) ι (fun (x._@.Mathlib.GroupTheory.Subsemigroup.Membership._hyg.267 : Subsemigroup.{u2} M _inst_1) (x._@.Mathlib.GroupTheory.Subsemigroup.Membership._hyg.269 : Subsemigroup.{u2} M _inst_1) => LE.le.{u2} (Subsemigroup.{u2} M _inst_1) (Preorder.toLE.{u2} (Subsemigroup.{u2} M _inst_1) (PartialOrder.toPreorder.{u2} (Subsemigroup.{u2} M _inst_1) (CompleteSemilatticeInf.toPartialOrder.{u2} (Subsemigroup.{u2} M _inst_1) (CompleteLattice.toCompleteSemilatticeInf.{u2} (Subsemigroup.{u2} M _inst_1) (Subsemigroup.instCompleteLatticeSubsemigroup.{u2} M _inst_1))))) x._@.Mathlib.GroupTheory.Subsemigroup.Membership._hyg.267 x._@.Mathlib.GroupTheory.Subsemigroup.Membership._hyg.269) S) -> (Eq.{succ u2} (Set.{u2} M) (SetLike.coe.{u2, u2} (Subsemigroup.{u2} M _inst_1) M (Subsemigroup.instSetLikeSubsemigroup.{u2} M _inst_1) (iSup.{u2, u1} (Subsemigroup.{u2} M _inst_1) (CompleteLattice.toSupSet.{u2} (Subsemigroup.{u2} M _inst_1) (Subsemigroup.instCompleteLatticeSubsemigroup.{u2} M _inst_1)) ι (fun (i : ι) => S i))) (Set.iUnion.{u2, u1} M ι (fun (i : ι) => SetLike.coe.{u2, u2} (Subsemigroup.{u2} M _inst_1) M (Subsemigroup.instSetLikeSubsemigroup.{u2} M _inst_1) (S i))))
Case conversion may be inaccurate. Consider using '#align subsemigroup.coe_supr_of_directed Subsemigroup.coe_iSup_of_directedₓ'. -/
@@ -83,7 +83,7 @@ theorem coe_iSup_of_directed {S : ι → Subsemigroup M} (hS : Directed (· ≤
/- warning: subsemigroup.mem_Sup_of_directed_on -> Subsemigroup.mem_sSup_of_directed_on is a dubious translation:
lean 3 declaration is
- forall {M : Type.{u1}} [_inst_1 : Mul.{u1} M] {S : Set.{u1} (Subsemigroup.{u1} M _inst_1)}, (DirectedOn.{u1} (Subsemigroup.{u1} M _inst_1) (LE.le.{u1} (Subsemigroup.{u1} M _inst_1) (Preorder.toLE.{u1} (Subsemigroup.{u1} M _inst_1) (PartialOrder.toPreorder.{u1} (Subsemigroup.{u1} M _inst_1) (SetLike.partialOrder.{u1, u1} (Subsemigroup.{u1} M _inst_1) M (Subsemigroup.setLike.{u1} M _inst_1))))) S) -> (forall {x : M}, Iff (Membership.Mem.{u1, u1} M (Subsemigroup.{u1} M _inst_1) (SetLike.hasMem.{u1, u1} (Subsemigroup.{u1} M _inst_1) M (Subsemigroup.setLike.{u1} M _inst_1)) x (SupSet.sSup.{u1} (Subsemigroup.{u1} M _inst_1) (CompleteSemilatticeSup.toHasSup.{u1} (Subsemigroup.{u1} M _inst_1) (CompleteLattice.toCompleteSemilatticeSup.{u1} (Subsemigroup.{u1} M _inst_1) (Subsemigroup.completeLattice.{u1} M _inst_1))) S)) (Exists.{succ u1} (Subsemigroup.{u1} M _inst_1) (fun (s : Subsemigroup.{u1} M _inst_1) => Exists.{0} (Membership.Mem.{u1, u1} (Subsemigroup.{u1} M _inst_1) (Set.{u1} (Subsemigroup.{u1} M _inst_1)) (Set.hasMem.{u1} (Subsemigroup.{u1} M _inst_1)) s S) (fun (H : Membership.Mem.{u1, u1} (Subsemigroup.{u1} M _inst_1) (Set.{u1} (Subsemigroup.{u1} M _inst_1)) (Set.hasMem.{u1} (Subsemigroup.{u1} M _inst_1)) s S) => Membership.Mem.{u1, u1} M (Subsemigroup.{u1} M _inst_1) (SetLike.hasMem.{u1, u1} (Subsemigroup.{u1} M _inst_1) M (Subsemigroup.setLike.{u1} M _inst_1)) x s))))
+ forall {M : Type.{u1}} [_inst_1 : Mul.{u1} M] {S : Set.{u1} (Subsemigroup.{u1} M _inst_1)}, (DirectedOn.{u1} (Subsemigroup.{u1} M _inst_1) (LE.le.{u1} (Subsemigroup.{u1} M _inst_1) (Preorder.toHasLe.{u1} (Subsemigroup.{u1} M _inst_1) (PartialOrder.toPreorder.{u1} (Subsemigroup.{u1} M _inst_1) (SetLike.partialOrder.{u1, u1} (Subsemigroup.{u1} M _inst_1) M (Subsemigroup.setLike.{u1} M _inst_1))))) S) -> (forall {x : M}, Iff (Membership.Mem.{u1, u1} M (Subsemigroup.{u1} M _inst_1) (SetLike.hasMem.{u1, u1} (Subsemigroup.{u1} M _inst_1) M (Subsemigroup.setLike.{u1} M _inst_1)) x (SupSet.sSup.{u1} (Subsemigroup.{u1} M _inst_1) (CompleteSemilatticeSup.toHasSup.{u1} (Subsemigroup.{u1} M _inst_1) (CompleteLattice.toCompleteSemilatticeSup.{u1} (Subsemigroup.{u1} M _inst_1) (Subsemigroup.completeLattice.{u1} M _inst_1))) S)) (Exists.{succ u1} (Subsemigroup.{u1} M _inst_1) (fun (s : Subsemigroup.{u1} M _inst_1) => Exists.{0} (Membership.Mem.{u1, u1} (Subsemigroup.{u1} M _inst_1) (Set.{u1} (Subsemigroup.{u1} M _inst_1)) (Set.hasMem.{u1} (Subsemigroup.{u1} M _inst_1)) s S) (fun (H : Membership.Mem.{u1, u1} (Subsemigroup.{u1} M _inst_1) (Set.{u1} (Subsemigroup.{u1} M _inst_1)) (Set.hasMem.{u1} (Subsemigroup.{u1} M _inst_1)) s S) => Membership.Mem.{u1, u1} M (Subsemigroup.{u1} M _inst_1) (SetLike.hasMem.{u1, u1} (Subsemigroup.{u1} M _inst_1) M (Subsemigroup.setLike.{u1} M _inst_1)) x s))))
but is expected to have type
forall {M : Type.{u1}} [_inst_1 : Mul.{u1} M] {S : Set.{u1} (Subsemigroup.{u1} M _inst_1)}, (DirectedOn.{u1} (Subsemigroup.{u1} M _inst_1) (fun (x._@.Mathlib.GroupTheory.Subsemigroup.Membership._hyg.357 : Subsemigroup.{u1} M _inst_1) (x._@.Mathlib.GroupTheory.Subsemigroup.Membership._hyg.359 : Subsemigroup.{u1} M _inst_1) => LE.le.{u1} (Subsemigroup.{u1} M _inst_1) (Preorder.toLE.{u1} (Subsemigroup.{u1} M _inst_1) (PartialOrder.toPreorder.{u1} (Subsemigroup.{u1} M _inst_1) (CompleteSemilatticeInf.toPartialOrder.{u1} (Subsemigroup.{u1} M _inst_1) (CompleteLattice.toCompleteSemilatticeInf.{u1} (Subsemigroup.{u1} M _inst_1) (Subsemigroup.instCompleteLatticeSubsemigroup.{u1} M _inst_1))))) x._@.Mathlib.GroupTheory.Subsemigroup.Membership._hyg.357 x._@.Mathlib.GroupTheory.Subsemigroup.Membership._hyg.359) S) -> (forall {x : M}, Iff (Membership.mem.{u1, u1} M (Subsemigroup.{u1} M _inst_1) (SetLike.instMembership.{u1, u1} (Subsemigroup.{u1} M _inst_1) M (Subsemigroup.instSetLikeSubsemigroup.{u1} M _inst_1)) x (SupSet.sSup.{u1} (Subsemigroup.{u1} M _inst_1) (CompleteLattice.toSupSet.{u1} (Subsemigroup.{u1} M _inst_1) (Subsemigroup.instCompleteLatticeSubsemigroup.{u1} M _inst_1)) S)) (Exists.{succ u1} (Subsemigroup.{u1} M _inst_1) (fun (s : Subsemigroup.{u1} M _inst_1) => And (Membership.mem.{u1, u1} (Subsemigroup.{u1} M _inst_1) (Set.{u1} (Subsemigroup.{u1} M _inst_1)) (Set.instMembershipSet.{u1} (Subsemigroup.{u1} M _inst_1)) s S) (Membership.mem.{u1, u1} M (Subsemigroup.{u1} M _inst_1) (SetLike.instMembership.{u1, u1} (Subsemigroup.{u1} M _inst_1) M (Subsemigroup.instSetLikeSubsemigroup.{u1} M _inst_1)) x s))))
Case conversion may be inaccurate. Consider using '#align subsemigroup.mem_Sup_of_directed_on Subsemigroup.mem_sSup_of_directed_onₓ'. -/
@@ -96,7 +96,7 @@ theorem mem_sSup_of_directed_on {S : Set (Subsemigroup M)} (hS : DirectedOn (·
/- warning: subsemigroup.coe_Sup_of_directed_on -> Subsemigroup.coe_sSup_of_directed_on is a dubious translation:
lean 3 declaration is
- forall {M : Type.{u1}} [_inst_1 : Mul.{u1} M] {S : Set.{u1} (Subsemigroup.{u1} M _inst_1)}, (DirectedOn.{u1} (Subsemigroup.{u1} M _inst_1) (LE.le.{u1} (Subsemigroup.{u1} M _inst_1) (Preorder.toLE.{u1} (Subsemigroup.{u1} M _inst_1) (PartialOrder.toPreorder.{u1} (Subsemigroup.{u1} M _inst_1) (SetLike.partialOrder.{u1, u1} (Subsemigroup.{u1} M _inst_1) M (Subsemigroup.setLike.{u1} M _inst_1))))) S) -> (Eq.{succ u1} (Set.{u1} M) ((fun (a : Type.{u1}) (b : Type.{u1}) [self : HasLiftT.{succ u1, succ u1} a b] => self.0) (Subsemigroup.{u1} M _inst_1) (Set.{u1} M) (HasLiftT.mk.{succ u1, succ u1} (Subsemigroup.{u1} M _inst_1) (Set.{u1} M) (CoeTCₓ.coe.{succ u1, succ u1} (Subsemigroup.{u1} M _inst_1) (Set.{u1} M) (SetLike.Set.hasCoeT.{u1, u1} (Subsemigroup.{u1} M _inst_1) M (Subsemigroup.setLike.{u1} M _inst_1)))) (SupSet.sSup.{u1} (Subsemigroup.{u1} M _inst_1) (CompleteSemilatticeSup.toHasSup.{u1} (Subsemigroup.{u1} M _inst_1) (CompleteLattice.toCompleteSemilatticeSup.{u1} (Subsemigroup.{u1} M _inst_1) (Subsemigroup.completeLattice.{u1} M _inst_1))) S)) (Set.iUnion.{u1, succ u1} M (Subsemigroup.{u1} M _inst_1) (fun (s : Subsemigroup.{u1} M _inst_1) => Set.iUnion.{u1, 0} M (Membership.Mem.{u1, u1} (Subsemigroup.{u1} M _inst_1) (Set.{u1} (Subsemigroup.{u1} M _inst_1)) (Set.hasMem.{u1} (Subsemigroup.{u1} M _inst_1)) s S) (fun (H : Membership.Mem.{u1, u1} (Subsemigroup.{u1} M _inst_1) (Set.{u1} (Subsemigroup.{u1} M _inst_1)) (Set.hasMem.{u1} (Subsemigroup.{u1} M _inst_1)) s S) => (fun (a : Type.{u1}) (b : Type.{u1}) [self : HasLiftT.{succ u1, succ u1} a b] => self.0) (Subsemigroup.{u1} M _inst_1) (Set.{u1} M) (HasLiftT.mk.{succ u1, succ u1} (Subsemigroup.{u1} M _inst_1) (Set.{u1} M) (CoeTCₓ.coe.{succ u1, succ u1} (Subsemigroup.{u1} M _inst_1) (Set.{u1} M) (SetLike.Set.hasCoeT.{u1, u1} (Subsemigroup.{u1} M _inst_1) M (Subsemigroup.setLike.{u1} M _inst_1)))) s))))
+ forall {M : Type.{u1}} [_inst_1 : Mul.{u1} M] {S : Set.{u1} (Subsemigroup.{u1} M _inst_1)}, (DirectedOn.{u1} (Subsemigroup.{u1} M _inst_1) (LE.le.{u1} (Subsemigroup.{u1} M _inst_1) (Preorder.toHasLe.{u1} (Subsemigroup.{u1} M _inst_1) (PartialOrder.toPreorder.{u1} (Subsemigroup.{u1} M _inst_1) (SetLike.partialOrder.{u1, u1} (Subsemigroup.{u1} M _inst_1) M (Subsemigroup.setLike.{u1} M _inst_1))))) S) -> (Eq.{succ u1} (Set.{u1} M) ((fun (a : Type.{u1}) (b : Type.{u1}) [self : HasLiftT.{succ u1, succ u1} a b] => self.0) (Subsemigroup.{u1} M _inst_1) (Set.{u1} M) (HasLiftT.mk.{succ u1, succ u1} (Subsemigroup.{u1} M _inst_1) (Set.{u1} M) (CoeTCₓ.coe.{succ u1, succ u1} (Subsemigroup.{u1} M _inst_1) (Set.{u1} M) (SetLike.Set.hasCoeT.{u1, u1} (Subsemigroup.{u1} M _inst_1) M (Subsemigroup.setLike.{u1} M _inst_1)))) (SupSet.sSup.{u1} (Subsemigroup.{u1} M _inst_1) (CompleteSemilatticeSup.toHasSup.{u1} (Subsemigroup.{u1} M _inst_1) (CompleteLattice.toCompleteSemilatticeSup.{u1} (Subsemigroup.{u1} M _inst_1) (Subsemigroup.completeLattice.{u1} M _inst_1))) S)) (Set.iUnion.{u1, succ u1} M (Subsemigroup.{u1} M _inst_1) (fun (s : Subsemigroup.{u1} M _inst_1) => Set.iUnion.{u1, 0} M (Membership.Mem.{u1, u1} (Subsemigroup.{u1} M _inst_1) (Set.{u1} (Subsemigroup.{u1} M _inst_1)) (Set.hasMem.{u1} (Subsemigroup.{u1} M _inst_1)) s S) (fun (H : Membership.Mem.{u1, u1} (Subsemigroup.{u1} M _inst_1) (Set.{u1} (Subsemigroup.{u1} M _inst_1)) (Set.hasMem.{u1} (Subsemigroup.{u1} M _inst_1)) s S) => (fun (a : Type.{u1}) (b : Type.{u1}) [self : HasLiftT.{succ u1, succ u1} a b] => self.0) (Subsemigroup.{u1} M _inst_1) (Set.{u1} M) (HasLiftT.mk.{succ u1, succ u1} (Subsemigroup.{u1} M _inst_1) (Set.{u1} M) (CoeTCₓ.coe.{succ u1, succ u1} (Subsemigroup.{u1} M _inst_1) (Set.{u1} M) (SetLike.Set.hasCoeT.{u1, u1} (Subsemigroup.{u1} M _inst_1) M (Subsemigroup.setLike.{u1} M _inst_1)))) s))))
but is expected to have type
forall {M : Type.{u1}} [_inst_1 : Mul.{u1} M] {S : Set.{u1} (Subsemigroup.{u1} M _inst_1)}, (DirectedOn.{u1} (Subsemigroup.{u1} M _inst_1) (fun (x._@.Mathlib.GroupTheory.Subsemigroup.Membership._hyg.428 : Subsemigroup.{u1} M _inst_1) (x._@.Mathlib.GroupTheory.Subsemigroup.Membership._hyg.430 : Subsemigroup.{u1} M _inst_1) => LE.le.{u1} (Subsemigroup.{u1} M _inst_1) (Preorder.toLE.{u1} (Subsemigroup.{u1} M _inst_1) (PartialOrder.toPreorder.{u1} (Subsemigroup.{u1} M _inst_1) (CompleteSemilatticeInf.toPartialOrder.{u1} (Subsemigroup.{u1} M _inst_1) (CompleteLattice.toCompleteSemilatticeInf.{u1} (Subsemigroup.{u1} M _inst_1) (Subsemigroup.instCompleteLatticeSubsemigroup.{u1} M _inst_1))))) x._@.Mathlib.GroupTheory.Subsemigroup.Membership._hyg.428 x._@.Mathlib.GroupTheory.Subsemigroup.Membership._hyg.430) S) -> (Eq.{succ u1} (Set.{u1} M) (SetLike.coe.{u1, u1} (Subsemigroup.{u1} M _inst_1) M (Subsemigroup.instSetLikeSubsemigroup.{u1} M _inst_1) (SupSet.sSup.{u1} (Subsemigroup.{u1} M _inst_1) (CompleteLattice.toSupSet.{u1} (Subsemigroup.{u1} M _inst_1) (Subsemigroup.instCompleteLatticeSubsemigroup.{u1} M _inst_1)) S)) (Set.iUnion.{u1, succ u1} M (Subsemigroup.{u1} M _inst_1) (fun (s : Subsemigroup.{u1} M _inst_1) => Set.iUnion.{u1, 0} M (Membership.mem.{u1, u1} (Subsemigroup.{u1} M _inst_1) (Set.{u1} (Subsemigroup.{u1} M _inst_1)) (Set.instMembershipSet.{u1} (Subsemigroup.{u1} M _inst_1)) s S) (fun (H : Membership.mem.{u1, u1} (Subsemigroup.{u1} M _inst_1) (Set.{u1} (Subsemigroup.{u1} M _inst_1)) (Set.instMembershipSet.{u1} (Subsemigroup.{u1} M _inst_1)) s S) => SetLike.coe.{u1, u1} (Subsemigroup.{u1} M _inst_1) M (Subsemigroup.instSetLikeSubsemigroup.{u1} M _inst_1) s))))
Case conversion may be inaccurate. Consider using '#align subsemigroup.coe_Sup_of_directed_on Subsemigroup.coe_sSup_of_directed_onₓ'. -/
mathlib commit https://github.com/leanprover-community/mathlib/commit/e3fb84046afd187b710170887195d50bada934ee
@@ -46,66 +46,66 @@ open Set
namespace Subsemigroup
-/- warning: subsemigroup.mem_supr_of_directed -> Subsemigroup.mem_supᵢ_of_directed is a dubious translation:
+/- warning: subsemigroup.mem_supr_of_directed -> Subsemigroup.mem_iSup_of_directed is a dubious translation:
lean 3 declaration is
- forall {ι : Sort.{u1}} {M : Type.{u2}} [_inst_1 : Mul.{u2} M] {S : ι -> (Subsemigroup.{u2} M _inst_1)}, (Directed.{u2, u1} (Subsemigroup.{u2} M _inst_1) ι (LE.le.{u2} (Subsemigroup.{u2} M _inst_1) (Preorder.toLE.{u2} (Subsemigroup.{u2} M _inst_1) (PartialOrder.toPreorder.{u2} (Subsemigroup.{u2} M _inst_1) (SetLike.partialOrder.{u2, u2} (Subsemigroup.{u2} M _inst_1) M (Subsemigroup.setLike.{u2} M _inst_1))))) S) -> (forall {x : M}, Iff (Membership.Mem.{u2, u2} M (Subsemigroup.{u2} M _inst_1) (SetLike.hasMem.{u2, u2} (Subsemigroup.{u2} M _inst_1) M (Subsemigroup.setLike.{u2} M _inst_1)) x (supᵢ.{u2, u1} (Subsemigroup.{u2} M _inst_1) (CompleteSemilatticeSup.toHasSup.{u2} (Subsemigroup.{u2} M _inst_1) (CompleteLattice.toCompleteSemilatticeSup.{u2} (Subsemigroup.{u2} M _inst_1) (Subsemigroup.completeLattice.{u2} M _inst_1))) ι (fun (i : ι) => S i))) (Exists.{u1} ι (fun (i : ι) => Membership.Mem.{u2, u2} M (Subsemigroup.{u2} M _inst_1) (SetLike.hasMem.{u2, u2} (Subsemigroup.{u2} M _inst_1) M (Subsemigroup.setLike.{u2} M _inst_1)) x (S i))))
+ forall {ι : Sort.{u1}} {M : Type.{u2}} [_inst_1 : Mul.{u2} M] {S : ι -> (Subsemigroup.{u2} M _inst_1)}, (Directed.{u2, u1} (Subsemigroup.{u2} M _inst_1) ι (LE.le.{u2} (Subsemigroup.{u2} M _inst_1) (Preorder.toLE.{u2} (Subsemigroup.{u2} M _inst_1) (PartialOrder.toPreorder.{u2} (Subsemigroup.{u2} M _inst_1) (SetLike.partialOrder.{u2, u2} (Subsemigroup.{u2} M _inst_1) M (Subsemigroup.setLike.{u2} M _inst_1))))) S) -> (forall {x : M}, Iff (Membership.Mem.{u2, u2} M (Subsemigroup.{u2} M _inst_1) (SetLike.hasMem.{u2, u2} (Subsemigroup.{u2} M _inst_1) M (Subsemigroup.setLike.{u2} M _inst_1)) x (iSup.{u2, u1} (Subsemigroup.{u2} M _inst_1) (CompleteSemilatticeSup.toHasSup.{u2} (Subsemigroup.{u2} M _inst_1) (CompleteLattice.toCompleteSemilatticeSup.{u2} (Subsemigroup.{u2} M _inst_1) (Subsemigroup.completeLattice.{u2} M _inst_1))) ι (fun (i : ι) => S i))) (Exists.{u1} ι (fun (i : ι) => Membership.Mem.{u2, u2} M (Subsemigroup.{u2} M _inst_1) (SetLike.hasMem.{u2, u2} (Subsemigroup.{u2} M _inst_1) M (Subsemigroup.setLike.{u2} M _inst_1)) x (S i))))
but is expected to have type
- forall {ι : Sort.{u1}} {M : Type.{u2}} [_inst_1 : Mul.{u2} M] {S : ι -> (Subsemigroup.{u2} M _inst_1)}, (Directed.{u2, u1} (Subsemigroup.{u2} M _inst_1) ι (fun (x._@.Mathlib.GroupTheory.Subsemigroup.Membership._hyg.40 : Subsemigroup.{u2} M _inst_1) (x._@.Mathlib.GroupTheory.Subsemigroup.Membership._hyg.42 : Subsemigroup.{u2} M _inst_1) => LE.le.{u2} (Subsemigroup.{u2} M _inst_1) (Preorder.toLE.{u2} (Subsemigroup.{u2} M _inst_1) (PartialOrder.toPreorder.{u2} (Subsemigroup.{u2} M _inst_1) (CompleteSemilatticeInf.toPartialOrder.{u2} (Subsemigroup.{u2} M _inst_1) (CompleteLattice.toCompleteSemilatticeInf.{u2} (Subsemigroup.{u2} M _inst_1) (Subsemigroup.instCompleteLatticeSubsemigroup.{u2} M _inst_1))))) x._@.Mathlib.GroupTheory.Subsemigroup.Membership._hyg.40 x._@.Mathlib.GroupTheory.Subsemigroup.Membership._hyg.42) S) -> (forall {x : M}, Iff (Membership.mem.{u2, u2} M (Subsemigroup.{u2} M _inst_1) (SetLike.instMembership.{u2, u2} (Subsemigroup.{u2} M _inst_1) M (Subsemigroup.instSetLikeSubsemigroup.{u2} M _inst_1)) x (supᵢ.{u2, u1} (Subsemigroup.{u2} M _inst_1) (CompleteLattice.toSupSet.{u2} (Subsemigroup.{u2} M _inst_1) (Subsemigroup.instCompleteLatticeSubsemigroup.{u2} M _inst_1)) ι (fun (i : ι) => S i))) (Exists.{u1} ι (fun (i : ι) => Membership.mem.{u2, u2} M (Subsemigroup.{u2} M _inst_1) (SetLike.instMembership.{u2, u2} (Subsemigroup.{u2} M _inst_1) M (Subsemigroup.instSetLikeSubsemigroup.{u2} M _inst_1)) x (S i))))
-Case conversion may be inaccurate. Consider using '#align subsemigroup.mem_supr_of_directed Subsemigroup.mem_supᵢ_of_directedₓ'. -/
+ forall {ι : Sort.{u1}} {M : Type.{u2}} [_inst_1 : Mul.{u2} M] {S : ι -> (Subsemigroup.{u2} M _inst_1)}, (Directed.{u2, u1} (Subsemigroup.{u2} M _inst_1) ι (fun (x._@.Mathlib.GroupTheory.Subsemigroup.Membership._hyg.40 : Subsemigroup.{u2} M _inst_1) (x._@.Mathlib.GroupTheory.Subsemigroup.Membership._hyg.42 : Subsemigroup.{u2} M _inst_1) => LE.le.{u2} (Subsemigroup.{u2} M _inst_1) (Preorder.toLE.{u2} (Subsemigroup.{u2} M _inst_1) (PartialOrder.toPreorder.{u2} (Subsemigroup.{u2} M _inst_1) (CompleteSemilatticeInf.toPartialOrder.{u2} (Subsemigroup.{u2} M _inst_1) (CompleteLattice.toCompleteSemilatticeInf.{u2} (Subsemigroup.{u2} M _inst_1) (Subsemigroup.instCompleteLatticeSubsemigroup.{u2} M _inst_1))))) x._@.Mathlib.GroupTheory.Subsemigroup.Membership._hyg.40 x._@.Mathlib.GroupTheory.Subsemigroup.Membership._hyg.42) S) -> (forall {x : M}, Iff (Membership.mem.{u2, u2} M (Subsemigroup.{u2} M _inst_1) (SetLike.instMembership.{u2, u2} (Subsemigroup.{u2} M _inst_1) M (Subsemigroup.instSetLikeSubsemigroup.{u2} M _inst_1)) x (iSup.{u2, u1} (Subsemigroup.{u2} M _inst_1) (CompleteLattice.toSupSet.{u2} (Subsemigroup.{u2} M _inst_1) (Subsemigroup.instCompleteLatticeSubsemigroup.{u2} M _inst_1)) ι (fun (i : ι) => S i))) (Exists.{u1} ι (fun (i : ι) => Membership.mem.{u2, u2} M (Subsemigroup.{u2} M _inst_1) (SetLike.instMembership.{u2, u2} (Subsemigroup.{u2} M _inst_1) M (Subsemigroup.instSetLikeSubsemigroup.{u2} M _inst_1)) x (S i))))
+Case conversion may be inaccurate. Consider using '#align subsemigroup.mem_supr_of_directed Subsemigroup.mem_iSup_of_directedₓ'. -/
-- TODO: this section can be generalized to `[mul_mem_class B M] [complete_lattice B]`
-- such that `complete_lattice.le` coincides with `set_like.le`
@[to_additive]
-theorem mem_supᵢ_of_directed {S : ι → Subsemigroup M} (hS : Directed (· ≤ ·) S) {x : M} :
+theorem mem_iSup_of_directed {S : ι → Subsemigroup M} (hS : Directed (· ≤ ·) S) {x : M} :
(x ∈ ⨆ i, S i) ↔ ∃ i, x ∈ S i :=
by
- refine' ⟨_, fun ⟨i, hi⟩ => (SetLike.le_def.1 <| le_supᵢ S i) hi⟩
+ refine' ⟨_, fun ⟨i, hi⟩ => (SetLike.le_def.1 <| le_iSup S i) hi⟩
suffices x ∈ closure (⋃ i, (S i : Set M)) → ∃ i, x ∈ S i by
- simpa only [closure_unionᵢ, closure_eq (S _)] using this
+ simpa only [closure_iUnion, closure_eq (S _)] using this
refine' fun hx => closure_induction hx (fun y hy => mem_Union.mp hy) _
· rintro x y ⟨i, hi⟩ ⟨j, hj⟩
rcases hS i j with ⟨k, hki, hkj⟩
exact ⟨k, (S k).mul_mem (hki hi) (hkj hj)⟩
-#align subsemigroup.mem_supr_of_directed Subsemigroup.mem_supᵢ_of_directed
-#align add_subsemigroup.mem_supr_of_directed AddSubsemigroup.mem_supᵢ_of_directed
+#align subsemigroup.mem_supr_of_directed Subsemigroup.mem_iSup_of_directed
+#align add_subsemigroup.mem_supr_of_directed AddSubsemigroup.mem_iSup_of_directed
-/- warning: subsemigroup.coe_supr_of_directed -> Subsemigroup.coe_supᵢ_of_directed is a dubious translation:
+/- warning: subsemigroup.coe_supr_of_directed -> Subsemigroup.coe_iSup_of_directed is a dubious translation:
lean 3 declaration is
- forall {ι : Sort.{u1}} {M : Type.{u2}} [_inst_1 : Mul.{u2} M] {S : ι -> (Subsemigroup.{u2} M _inst_1)}, (Directed.{u2, u1} (Subsemigroup.{u2} M _inst_1) ι (LE.le.{u2} (Subsemigroup.{u2} M _inst_1) (Preorder.toLE.{u2} (Subsemigroup.{u2} M _inst_1) (PartialOrder.toPreorder.{u2} (Subsemigroup.{u2} M _inst_1) (SetLike.partialOrder.{u2, u2} (Subsemigroup.{u2} M _inst_1) M (Subsemigroup.setLike.{u2} M _inst_1))))) S) -> (Eq.{succ u2} (Set.{u2} M) ((fun (a : Type.{u2}) (b : Type.{u2}) [self : HasLiftT.{succ u2, succ u2} a b] => self.0) (Subsemigroup.{u2} M _inst_1) (Set.{u2} M) (HasLiftT.mk.{succ u2, succ u2} (Subsemigroup.{u2} M _inst_1) (Set.{u2} M) (CoeTCₓ.coe.{succ u2, succ u2} (Subsemigroup.{u2} M _inst_1) (Set.{u2} M) (SetLike.Set.hasCoeT.{u2, u2} (Subsemigroup.{u2} M _inst_1) M (Subsemigroup.setLike.{u2} M _inst_1)))) (supᵢ.{u2, u1} (Subsemigroup.{u2} M _inst_1) (CompleteSemilatticeSup.toHasSup.{u2} (Subsemigroup.{u2} M _inst_1) (CompleteLattice.toCompleteSemilatticeSup.{u2} (Subsemigroup.{u2} M _inst_1) (Subsemigroup.completeLattice.{u2} M _inst_1))) ι (fun (i : ι) => S i))) (Set.unionᵢ.{u2, u1} M ι (fun (i : ι) => (fun (a : Type.{u2}) (b : Type.{u2}) [self : HasLiftT.{succ u2, succ u2} a b] => self.0) (Subsemigroup.{u2} M _inst_1) (Set.{u2} M) (HasLiftT.mk.{succ u2, succ u2} (Subsemigroup.{u2} M _inst_1) (Set.{u2} M) (CoeTCₓ.coe.{succ u2, succ u2} (Subsemigroup.{u2} M _inst_1) (Set.{u2} M) (SetLike.Set.hasCoeT.{u2, u2} (Subsemigroup.{u2} M _inst_1) M (Subsemigroup.setLike.{u2} M _inst_1)))) (S i))))
+ forall {ι : Sort.{u1}} {M : Type.{u2}} [_inst_1 : Mul.{u2} M] {S : ι -> (Subsemigroup.{u2} M _inst_1)}, (Directed.{u2, u1} (Subsemigroup.{u2} M _inst_1) ι (LE.le.{u2} (Subsemigroup.{u2} M _inst_1) (Preorder.toLE.{u2} (Subsemigroup.{u2} M _inst_1) (PartialOrder.toPreorder.{u2} (Subsemigroup.{u2} M _inst_1) (SetLike.partialOrder.{u2, u2} (Subsemigroup.{u2} M _inst_1) M (Subsemigroup.setLike.{u2} M _inst_1))))) S) -> (Eq.{succ u2} (Set.{u2} M) ((fun (a : Type.{u2}) (b : Type.{u2}) [self : HasLiftT.{succ u2, succ u2} a b] => self.0) (Subsemigroup.{u2} M _inst_1) (Set.{u2} M) (HasLiftT.mk.{succ u2, succ u2} (Subsemigroup.{u2} M _inst_1) (Set.{u2} M) (CoeTCₓ.coe.{succ u2, succ u2} (Subsemigroup.{u2} M _inst_1) (Set.{u2} M) (SetLike.Set.hasCoeT.{u2, u2} (Subsemigroup.{u2} M _inst_1) M (Subsemigroup.setLike.{u2} M _inst_1)))) (iSup.{u2, u1} (Subsemigroup.{u2} M _inst_1) (CompleteSemilatticeSup.toHasSup.{u2} (Subsemigroup.{u2} M _inst_1) (CompleteLattice.toCompleteSemilatticeSup.{u2} (Subsemigroup.{u2} M _inst_1) (Subsemigroup.completeLattice.{u2} M _inst_1))) ι (fun (i : ι) => S i))) (Set.iUnion.{u2, u1} M ι (fun (i : ι) => (fun (a : Type.{u2}) (b : Type.{u2}) [self : HasLiftT.{succ u2, succ u2} a b] => self.0) (Subsemigroup.{u2} M _inst_1) (Set.{u2} M) (HasLiftT.mk.{succ u2, succ u2} (Subsemigroup.{u2} M _inst_1) (Set.{u2} M) (CoeTCₓ.coe.{succ u2, succ u2} (Subsemigroup.{u2} M _inst_1) (Set.{u2} M) (SetLike.Set.hasCoeT.{u2, u2} (Subsemigroup.{u2} M _inst_1) M (Subsemigroup.setLike.{u2} M _inst_1)))) (S i))))
but is expected to have type
- forall {ι : Sort.{u1}} {M : Type.{u2}} [_inst_1 : Mul.{u2} M] {S : ι -> (Subsemigroup.{u2} M _inst_1)}, (Directed.{u2, u1} (Subsemigroup.{u2} M _inst_1) ι (fun (x._@.Mathlib.GroupTheory.Subsemigroup.Membership._hyg.267 : Subsemigroup.{u2} M _inst_1) (x._@.Mathlib.GroupTheory.Subsemigroup.Membership._hyg.269 : Subsemigroup.{u2} M _inst_1) => LE.le.{u2} (Subsemigroup.{u2} M _inst_1) (Preorder.toLE.{u2} (Subsemigroup.{u2} M _inst_1) (PartialOrder.toPreorder.{u2} (Subsemigroup.{u2} M _inst_1) (CompleteSemilatticeInf.toPartialOrder.{u2} (Subsemigroup.{u2} M _inst_1) (CompleteLattice.toCompleteSemilatticeInf.{u2} (Subsemigroup.{u2} M _inst_1) (Subsemigroup.instCompleteLatticeSubsemigroup.{u2} M _inst_1))))) x._@.Mathlib.GroupTheory.Subsemigroup.Membership._hyg.267 x._@.Mathlib.GroupTheory.Subsemigroup.Membership._hyg.269) S) -> (Eq.{succ u2} (Set.{u2} M) (SetLike.coe.{u2, u2} (Subsemigroup.{u2} M _inst_1) M (Subsemigroup.instSetLikeSubsemigroup.{u2} M _inst_1) (supᵢ.{u2, u1} (Subsemigroup.{u2} M _inst_1) (CompleteLattice.toSupSet.{u2} (Subsemigroup.{u2} M _inst_1) (Subsemigroup.instCompleteLatticeSubsemigroup.{u2} M _inst_1)) ι (fun (i : ι) => S i))) (Set.unionᵢ.{u2, u1} M ι (fun (i : ι) => SetLike.coe.{u2, u2} (Subsemigroup.{u2} M _inst_1) M (Subsemigroup.instSetLikeSubsemigroup.{u2} M _inst_1) (S i))))
-Case conversion may be inaccurate. Consider using '#align subsemigroup.coe_supr_of_directed Subsemigroup.coe_supᵢ_of_directedₓ'. -/
+ forall {ι : Sort.{u1}} {M : Type.{u2}} [_inst_1 : Mul.{u2} M] {S : ι -> (Subsemigroup.{u2} M _inst_1)}, (Directed.{u2, u1} (Subsemigroup.{u2} M _inst_1) ι (fun (x._@.Mathlib.GroupTheory.Subsemigroup.Membership._hyg.267 : Subsemigroup.{u2} M _inst_1) (x._@.Mathlib.GroupTheory.Subsemigroup.Membership._hyg.269 : Subsemigroup.{u2} M _inst_1) => LE.le.{u2} (Subsemigroup.{u2} M _inst_1) (Preorder.toLE.{u2} (Subsemigroup.{u2} M _inst_1) (PartialOrder.toPreorder.{u2} (Subsemigroup.{u2} M _inst_1) (CompleteSemilatticeInf.toPartialOrder.{u2} (Subsemigroup.{u2} M _inst_1) (CompleteLattice.toCompleteSemilatticeInf.{u2} (Subsemigroup.{u2} M _inst_1) (Subsemigroup.instCompleteLatticeSubsemigroup.{u2} M _inst_1))))) x._@.Mathlib.GroupTheory.Subsemigroup.Membership._hyg.267 x._@.Mathlib.GroupTheory.Subsemigroup.Membership._hyg.269) S) -> (Eq.{succ u2} (Set.{u2} M) (SetLike.coe.{u2, u2} (Subsemigroup.{u2} M _inst_1) M (Subsemigroup.instSetLikeSubsemigroup.{u2} M _inst_1) (iSup.{u2, u1} (Subsemigroup.{u2} M _inst_1) (CompleteLattice.toSupSet.{u2} (Subsemigroup.{u2} M _inst_1) (Subsemigroup.instCompleteLatticeSubsemigroup.{u2} M _inst_1)) ι (fun (i : ι) => S i))) (Set.iUnion.{u2, u1} M ι (fun (i : ι) => SetLike.coe.{u2, u2} (Subsemigroup.{u2} M _inst_1) M (Subsemigroup.instSetLikeSubsemigroup.{u2} M _inst_1) (S i))))
+Case conversion may be inaccurate. Consider using '#align subsemigroup.coe_supr_of_directed Subsemigroup.coe_iSup_of_directedₓ'. -/
@[to_additive]
-theorem coe_supᵢ_of_directed {S : ι → Subsemigroup M} (hS : Directed (· ≤ ·) S) :
+theorem coe_iSup_of_directed {S : ι → Subsemigroup M} (hS : Directed (· ≤ ·) S) :
((⨆ i, S i : Subsemigroup M) : Set M) = ⋃ i, ↑(S i) :=
Set.ext fun x => by simp [mem_supr_of_directed hS]
-#align subsemigroup.coe_supr_of_directed Subsemigroup.coe_supᵢ_of_directed
-#align add_subsemigroup.coe_supr_of_directed AddSubsemigroup.coe_supᵢ_of_directed
+#align subsemigroup.coe_supr_of_directed Subsemigroup.coe_iSup_of_directed
+#align add_subsemigroup.coe_supr_of_directed AddSubsemigroup.coe_iSup_of_directed
-/- warning: subsemigroup.mem_Sup_of_directed_on -> Subsemigroup.mem_supₛ_of_directed_on is a dubious translation:
+/- warning: subsemigroup.mem_Sup_of_directed_on -> Subsemigroup.mem_sSup_of_directed_on is a dubious translation:
lean 3 declaration is
- forall {M : Type.{u1}} [_inst_1 : Mul.{u1} M] {S : Set.{u1} (Subsemigroup.{u1} M _inst_1)}, (DirectedOn.{u1} (Subsemigroup.{u1} M _inst_1) (LE.le.{u1} (Subsemigroup.{u1} M _inst_1) (Preorder.toLE.{u1} (Subsemigroup.{u1} M _inst_1) (PartialOrder.toPreorder.{u1} (Subsemigroup.{u1} M _inst_1) (SetLike.partialOrder.{u1, u1} (Subsemigroup.{u1} M _inst_1) M (Subsemigroup.setLike.{u1} M _inst_1))))) S) -> (forall {x : M}, Iff (Membership.Mem.{u1, u1} M (Subsemigroup.{u1} M _inst_1) (SetLike.hasMem.{u1, u1} (Subsemigroup.{u1} M _inst_1) M (Subsemigroup.setLike.{u1} M _inst_1)) x (SupSet.supₛ.{u1} (Subsemigroup.{u1} M _inst_1) (CompleteSemilatticeSup.toHasSup.{u1} (Subsemigroup.{u1} M _inst_1) (CompleteLattice.toCompleteSemilatticeSup.{u1} (Subsemigroup.{u1} M _inst_1) (Subsemigroup.completeLattice.{u1} M _inst_1))) S)) (Exists.{succ u1} (Subsemigroup.{u1} M _inst_1) (fun (s : Subsemigroup.{u1} M _inst_1) => Exists.{0} (Membership.Mem.{u1, u1} (Subsemigroup.{u1} M _inst_1) (Set.{u1} (Subsemigroup.{u1} M _inst_1)) (Set.hasMem.{u1} (Subsemigroup.{u1} M _inst_1)) s S) (fun (H : Membership.Mem.{u1, u1} (Subsemigroup.{u1} M _inst_1) (Set.{u1} (Subsemigroup.{u1} M _inst_1)) (Set.hasMem.{u1} (Subsemigroup.{u1} M _inst_1)) s S) => Membership.Mem.{u1, u1} M (Subsemigroup.{u1} M _inst_1) (SetLike.hasMem.{u1, u1} (Subsemigroup.{u1} M _inst_1) M (Subsemigroup.setLike.{u1} M _inst_1)) x s))))
+ forall {M : Type.{u1}} [_inst_1 : Mul.{u1} M] {S : Set.{u1} (Subsemigroup.{u1} M _inst_1)}, (DirectedOn.{u1} (Subsemigroup.{u1} M _inst_1) (LE.le.{u1} (Subsemigroup.{u1} M _inst_1) (Preorder.toLE.{u1} (Subsemigroup.{u1} M _inst_1) (PartialOrder.toPreorder.{u1} (Subsemigroup.{u1} M _inst_1) (SetLike.partialOrder.{u1, u1} (Subsemigroup.{u1} M _inst_1) M (Subsemigroup.setLike.{u1} M _inst_1))))) S) -> (forall {x : M}, Iff (Membership.Mem.{u1, u1} M (Subsemigroup.{u1} M _inst_1) (SetLike.hasMem.{u1, u1} (Subsemigroup.{u1} M _inst_1) M (Subsemigroup.setLike.{u1} M _inst_1)) x (SupSet.sSup.{u1} (Subsemigroup.{u1} M _inst_1) (CompleteSemilatticeSup.toHasSup.{u1} (Subsemigroup.{u1} M _inst_1) (CompleteLattice.toCompleteSemilatticeSup.{u1} (Subsemigroup.{u1} M _inst_1) (Subsemigroup.completeLattice.{u1} M _inst_1))) S)) (Exists.{succ u1} (Subsemigroup.{u1} M _inst_1) (fun (s : Subsemigroup.{u1} M _inst_1) => Exists.{0} (Membership.Mem.{u1, u1} (Subsemigroup.{u1} M _inst_1) (Set.{u1} (Subsemigroup.{u1} M _inst_1)) (Set.hasMem.{u1} (Subsemigroup.{u1} M _inst_1)) s S) (fun (H : Membership.Mem.{u1, u1} (Subsemigroup.{u1} M _inst_1) (Set.{u1} (Subsemigroup.{u1} M _inst_1)) (Set.hasMem.{u1} (Subsemigroup.{u1} M _inst_1)) s S) => Membership.Mem.{u1, u1} M (Subsemigroup.{u1} M _inst_1) (SetLike.hasMem.{u1, u1} (Subsemigroup.{u1} M _inst_1) M (Subsemigroup.setLike.{u1} M _inst_1)) x s))))
but is expected to have type
- forall {M : Type.{u1}} [_inst_1 : Mul.{u1} M] {S : Set.{u1} (Subsemigroup.{u1} M _inst_1)}, (DirectedOn.{u1} (Subsemigroup.{u1} M _inst_1) (fun (x._@.Mathlib.GroupTheory.Subsemigroup.Membership._hyg.357 : Subsemigroup.{u1} M _inst_1) (x._@.Mathlib.GroupTheory.Subsemigroup.Membership._hyg.359 : Subsemigroup.{u1} M _inst_1) => LE.le.{u1} (Subsemigroup.{u1} M _inst_1) (Preorder.toLE.{u1} (Subsemigroup.{u1} M _inst_1) (PartialOrder.toPreorder.{u1} (Subsemigroup.{u1} M _inst_1) (CompleteSemilatticeInf.toPartialOrder.{u1} (Subsemigroup.{u1} M _inst_1) (CompleteLattice.toCompleteSemilatticeInf.{u1} (Subsemigroup.{u1} M _inst_1) (Subsemigroup.instCompleteLatticeSubsemigroup.{u1} M _inst_1))))) x._@.Mathlib.GroupTheory.Subsemigroup.Membership._hyg.357 x._@.Mathlib.GroupTheory.Subsemigroup.Membership._hyg.359) S) -> (forall {x : M}, Iff (Membership.mem.{u1, u1} M (Subsemigroup.{u1} M _inst_1) (SetLike.instMembership.{u1, u1} (Subsemigroup.{u1} M _inst_1) M (Subsemigroup.instSetLikeSubsemigroup.{u1} M _inst_1)) x (SupSet.supₛ.{u1} (Subsemigroup.{u1} M _inst_1) (CompleteLattice.toSupSet.{u1} (Subsemigroup.{u1} M _inst_1) (Subsemigroup.instCompleteLatticeSubsemigroup.{u1} M _inst_1)) S)) (Exists.{succ u1} (Subsemigroup.{u1} M _inst_1) (fun (s : Subsemigroup.{u1} M _inst_1) => And (Membership.mem.{u1, u1} (Subsemigroup.{u1} M _inst_1) (Set.{u1} (Subsemigroup.{u1} M _inst_1)) (Set.instMembershipSet.{u1} (Subsemigroup.{u1} M _inst_1)) s S) (Membership.mem.{u1, u1} M (Subsemigroup.{u1} M _inst_1) (SetLike.instMembership.{u1, u1} (Subsemigroup.{u1} M _inst_1) M (Subsemigroup.instSetLikeSubsemigroup.{u1} M _inst_1)) x s))))
-Case conversion may be inaccurate. Consider using '#align subsemigroup.mem_Sup_of_directed_on Subsemigroup.mem_supₛ_of_directed_onₓ'. -/
+ forall {M : Type.{u1}} [_inst_1 : Mul.{u1} M] {S : Set.{u1} (Subsemigroup.{u1} M _inst_1)}, (DirectedOn.{u1} (Subsemigroup.{u1} M _inst_1) (fun (x._@.Mathlib.GroupTheory.Subsemigroup.Membership._hyg.357 : Subsemigroup.{u1} M _inst_1) (x._@.Mathlib.GroupTheory.Subsemigroup.Membership._hyg.359 : Subsemigroup.{u1} M _inst_1) => LE.le.{u1} (Subsemigroup.{u1} M _inst_1) (Preorder.toLE.{u1} (Subsemigroup.{u1} M _inst_1) (PartialOrder.toPreorder.{u1} (Subsemigroup.{u1} M _inst_1) (CompleteSemilatticeInf.toPartialOrder.{u1} (Subsemigroup.{u1} M _inst_1) (CompleteLattice.toCompleteSemilatticeInf.{u1} (Subsemigroup.{u1} M _inst_1) (Subsemigroup.instCompleteLatticeSubsemigroup.{u1} M _inst_1))))) x._@.Mathlib.GroupTheory.Subsemigroup.Membership._hyg.357 x._@.Mathlib.GroupTheory.Subsemigroup.Membership._hyg.359) S) -> (forall {x : M}, Iff (Membership.mem.{u1, u1} M (Subsemigroup.{u1} M _inst_1) (SetLike.instMembership.{u1, u1} (Subsemigroup.{u1} M _inst_1) M (Subsemigroup.instSetLikeSubsemigroup.{u1} M _inst_1)) x (SupSet.sSup.{u1} (Subsemigroup.{u1} M _inst_1) (CompleteLattice.toSupSet.{u1} (Subsemigroup.{u1} M _inst_1) (Subsemigroup.instCompleteLatticeSubsemigroup.{u1} M _inst_1)) S)) (Exists.{succ u1} (Subsemigroup.{u1} M _inst_1) (fun (s : Subsemigroup.{u1} M _inst_1) => And (Membership.mem.{u1, u1} (Subsemigroup.{u1} M _inst_1) (Set.{u1} (Subsemigroup.{u1} M _inst_1)) (Set.instMembershipSet.{u1} (Subsemigroup.{u1} M _inst_1)) s S) (Membership.mem.{u1, u1} M (Subsemigroup.{u1} M _inst_1) (SetLike.instMembership.{u1, u1} (Subsemigroup.{u1} M _inst_1) M (Subsemigroup.instSetLikeSubsemigroup.{u1} M _inst_1)) x s))))
+Case conversion may be inaccurate. Consider using '#align subsemigroup.mem_Sup_of_directed_on Subsemigroup.mem_sSup_of_directed_onₓ'. -/
@[to_additive]
-theorem mem_supₛ_of_directed_on {S : Set (Subsemigroup M)} (hS : DirectedOn (· ≤ ·) S) {x : M} :
- x ∈ supₛ S ↔ ∃ s ∈ S, x ∈ s := by
- simp only [supₛ_eq_supᵢ', mem_supr_of_directed hS.directed_coe, SetCoe.exists, Subtype.coe_mk]
-#align subsemigroup.mem_Sup_of_directed_on Subsemigroup.mem_supₛ_of_directed_on
-#align add_subsemigroup.mem_Sup_of_directed_on AddSubsemigroup.mem_supₛ_of_directed_on
+theorem mem_sSup_of_directed_on {S : Set (Subsemigroup M)} (hS : DirectedOn (· ≤ ·) S) {x : M} :
+ x ∈ sSup S ↔ ∃ s ∈ S, x ∈ s := by
+ simp only [sSup_eq_iSup', mem_supr_of_directed hS.directed_coe, SetCoe.exists, Subtype.coe_mk]
+#align subsemigroup.mem_Sup_of_directed_on Subsemigroup.mem_sSup_of_directed_on
+#align add_subsemigroup.mem_Sup_of_directed_on AddSubsemigroup.mem_sSup_of_directed_on
-/- warning: subsemigroup.coe_Sup_of_directed_on -> Subsemigroup.coe_supₛ_of_directed_on is a dubious translation:
+/- warning: subsemigroup.coe_Sup_of_directed_on -> Subsemigroup.coe_sSup_of_directed_on is a dubious translation:
lean 3 declaration is
- forall {M : Type.{u1}} [_inst_1 : Mul.{u1} M] {S : Set.{u1} (Subsemigroup.{u1} M _inst_1)}, (DirectedOn.{u1} (Subsemigroup.{u1} M _inst_1) (LE.le.{u1} (Subsemigroup.{u1} M _inst_1) (Preorder.toLE.{u1} (Subsemigroup.{u1} M _inst_1) (PartialOrder.toPreorder.{u1} (Subsemigroup.{u1} M _inst_1) (SetLike.partialOrder.{u1, u1} (Subsemigroup.{u1} M _inst_1) M (Subsemigroup.setLike.{u1} M _inst_1))))) S) -> (Eq.{succ u1} (Set.{u1} M) ((fun (a : Type.{u1}) (b : Type.{u1}) [self : HasLiftT.{succ u1, succ u1} a b] => self.0) (Subsemigroup.{u1} M _inst_1) (Set.{u1} M) (HasLiftT.mk.{succ u1, succ u1} (Subsemigroup.{u1} M _inst_1) (Set.{u1} M) (CoeTCₓ.coe.{succ u1, succ u1} (Subsemigroup.{u1} M _inst_1) (Set.{u1} M) (SetLike.Set.hasCoeT.{u1, u1} (Subsemigroup.{u1} M _inst_1) M (Subsemigroup.setLike.{u1} M _inst_1)))) (SupSet.supₛ.{u1} (Subsemigroup.{u1} M _inst_1) (CompleteSemilatticeSup.toHasSup.{u1} (Subsemigroup.{u1} M _inst_1) (CompleteLattice.toCompleteSemilatticeSup.{u1} (Subsemigroup.{u1} M _inst_1) (Subsemigroup.completeLattice.{u1} M _inst_1))) S)) (Set.unionᵢ.{u1, succ u1} M (Subsemigroup.{u1} M _inst_1) (fun (s : Subsemigroup.{u1} M _inst_1) => Set.unionᵢ.{u1, 0} M (Membership.Mem.{u1, u1} (Subsemigroup.{u1} M _inst_1) (Set.{u1} (Subsemigroup.{u1} M _inst_1)) (Set.hasMem.{u1} (Subsemigroup.{u1} M _inst_1)) s S) (fun (H : Membership.Mem.{u1, u1} (Subsemigroup.{u1} M _inst_1) (Set.{u1} (Subsemigroup.{u1} M _inst_1)) (Set.hasMem.{u1} (Subsemigroup.{u1} M _inst_1)) s S) => (fun (a : Type.{u1}) (b : Type.{u1}) [self : HasLiftT.{succ u1, succ u1} a b] => self.0) (Subsemigroup.{u1} M _inst_1) (Set.{u1} M) (HasLiftT.mk.{succ u1, succ u1} (Subsemigroup.{u1} M _inst_1) (Set.{u1} M) (CoeTCₓ.coe.{succ u1, succ u1} (Subsemigroup.{u1} M _inst_1) (Set.{u1} M) (SetLike.Set.hasCoeT.{u1, u1} (Subsemigroup.{u1} M _inst_1) M (Subsemigroup.setLike.{u1} M _inst_1)))) s))))
+ forall {M : Type.{u1}} [_inst_1 : Mul.{u1} M] {S : Set.{u1} (Subsemigroup.{u1} M _inst_1)}, (DirectedOn.{u1} (Subsemigroup.{u1} M _inst_1) (LE.le.{u1} (Subsemigroup.{u1} M _inst_1) (Preorder.toLE.{u1} (Subsemigroup.{u1} M _inst_1) (PartialOrder.toPreorder.{u1} (Subsemigroup.{u1} M _inst_1) (SetLike.partialOrder.{u1, u1} (Subsemigroup.{u1} M _inst_1) M (Subsemigroup.setLike.{u1} M _inst_1))))) S) -> (Eq.{succ u1} (Set.{u1} M) ((fun (a : Type.{u1}) (b : Type.{u1}) [self : HasLiftT.{succ u1, succ u1} a b] => self.0) (Subsemigroup.{u1} M _inst_1) (Set.{u1} M) (HasLiftT.mk.{succ u1, succ u1} (Subsemigroup.{u1} M _inst_1) (Set.{u1} M) (CoeTCₓ.coe.{succ u1, succ u1} (Subsemigroup.{u1} M _inst_1) (Set.{u1} M) (SetLike.Set.hasCoeT.{u1, u1} (Subsemigroup.{u1} M _inst_1) M (Subsemigroup.setLike.{u1} M _inst_1)))) (SupSet.sSup.{u1} (Subsemigroup.{u1} M _inst_1) (CompleteSemilatticeSup.toHasSup.{u1} (Subsemigroup.{u1} M _inst_1) (CompleteLattice.toCompleteSemilatticeSup.{u1} (Subsemigroup.{u1} M _inst_1) (Subsemigroup.completeLattice.{u1} M _inst_1))) S)) (Set.iUnion.{u1, succ u1} M (Subsemigroup.{u1} M _inst_1) (fun (s : Subsemigroup.{u1} M _inst_1) => Set.iUnion.{u1, 0} M (Membership.Mem.{u1, u1} (Subsemigroup.{u1} M _inst_1) (Set.{u1} (Subsemigroup.{u1} M _inst_1)) (Set.hasMem.{u1} (Subsemigroup.{u1} M _inst_1)) s S) (fun (H : Membership.Mem.{u1, u1} (Subsemigroup.{u1} M _inst_1) (Set.{u1} (Subsemigroup.{u1} M _inst_1)) (Set.hasMem.{u1} (Subsemigroup.{u1} M _inst_1)) s S) => (fun (a : Type.{u1}) (b : Type.{u1}) [self : HasLiftT.{succ u1, succ u1} a b] => self.0) (Subsemigroup.{u1} M _inst_1) (Set.{u1} M) (HasLiftT.mk.{succ u1, succ u1} (Subsemigroup.{u1} M _inst_1) (Set.{u1} M) (CoeTCₓ.coe.{succ u1, succ u1} (Subsemigroup.{u1} M _inst_1) (Set.{u1} M) (SetLike.Set.hasCoeT.{u1, u1} (Subsemigroup.{u1} M _inst_1) M (Subsemigroup.setLike.{u1} M _inst_1)))) s))))
but is expected to have type
- forall {M : Type.{u1}} [_inst_1 : Mul.{u1} M] {S : Set.{u1} (Subsemigroup.{u1} M _inst_1)}, (DirectedOn.{u1} (Subsemigroup.{u1} M _inst_1) (fun (x._@.Mathlib.GroupTheory.Subsemigroup.Membership._hyg.428 : Subsemigroup.{u1} M _inst_1) (x._@.Mathlib.GroupTheory.Subsemigroup.Membership._hyg.430 : Subsemigroup.{u1} M _inst_1) => LE.le.{u1} (Subsemigroup.{u1} M _inst_1) (Preorder.toLE.{u1} (Subsemigroup.{u1} M _inst_1) (PartialOrder.toPreorder.{u1} (Subsemigroup.{u1} M _inst_1) (CompleteSemilatticeInf.toPartialOrder.{u1} (Subsemigroup.{u1} M _inst_1) (CompleteLattice.toCompleteSemilatticeInf.{u1} (Subsemigroup.{u1} M _inst_1) (Subsemigroup.instCompleteLatticeSubsemigroup.{u1} M _inst_1))))) x._@.Mathlib.GroupTheory.Subsemigroup.Membership._hyg.428 x._@.Mathlib.GroupTheory.Subsemigroup.Membership._hyg.430) S) -> (Eq.{succ u1} (Set.{u1} M) (SetLike.coe.{u1, u1} (Subsemigroup.{u1} M _inst_1) M (Subsemigroup.instSetLikeSubsemigroup.{u1} M _inst_1) (SupSet.supₛ.{u1} (Subsemigroup.{u1} M _inst_1) (CompleteLattice.toSupSet.{u1} (Subsemigroup.{u1} M _inst_1) (Subsemigroup.instCompleteLatticeSubsemigroup.{u1} M _inst_1)) S)) (Set.unionᵢ.{u1, succ u1} M (Subsemigroup.{u1} M _inst_1) (fun (s : Subsemigroup.{u1} M _inst_1) => Set.unionᵢ.{u1, 0} M (Membership.mem.{u1, u1} (Subsemigroup.{u1} M _inst_1) (Set.{u1} (Subsemigroup.{u1} M _inst_1)) (Set.instMembershipSet.{u1} (Subsemigroup.{u1} M _inst_1)) s S) (fun (H : Membership.mem.{u1, u1} (Subsemigroup.{u1} M _inst_1) (Set.{u1} (Subsemigroup.{u1} M _inst_1)) (Set.instMembershipSet.{u1} (Subsemigroup.{u1} M _inst_1)) s S) => SetLike.coe.{u1, u1} (Subsemigroup.{u1} M _inst_1) M (Subsemigroup.instSetLikeSubsemigroup.{u1} M _inst_1) s))))
-Case conversion may be inaccurate. Consider using '#align subsemigroup.coe_Sup_of_directed_on Subsemigroup.coe_supₛ_of_directed_onₓ'. -/
+ forall {M : Type.{u1}} [_inst_1 : Mul.{u1} M] {S : Set.{u1} (Subsemigroup.{u1} M _inst_1)}, (DirectedOn.{u1} (Subsemigroup.{u1} M _inst_1) (fun (x._@.Mathlib.GroupTheory.Subsemigroup.Membership._hyg.428 : Subsemigroup.{u1} M _inst_1) (x._@.Mathlib.GroupTheory.Subsemigroup.Membership._hyg.430 : Subsemigroup.{u1} M _inst_1) => LE.le.{u1} (Subsemigroup.{u1} M _inst_1) (Preorder.toLE.{u1} (Subsemigroup.{u1} M _inst_1) (PartialOrder.toPreorder.{u1} (Subsemigroup.{u1} M _inst_1) (CompleteSemilatticeInf.toPartialOrder.{u1} (Subsemigroup.{u1} M _inst_1) (CompleteLattice.toCompleteSemilatticeInf.{u1} (Subsemigroup.{u1} M _inst_1) (Subsemigroup.instCompleteLatticeSubsemigroup.{u1} M _inst_1))))) x._@.Mathlib.GroupTheory.Subsemigroup.Membership._hyg.428 x._@.Mathlib.GroupTheory.Subsemigroup.Membership._hyg.430) S) -> (Eq.{succ u1} (Set.{u1} M) (SetLike.coe.{u1, u1} (Subsemigroup.{u1} M _inst_1) M (Subsemigroup.instSetLikeSubsemigroup.{u1} M _inst_1) (SupSet.sSup.{u1} (Subsemigroup.{u1} M _inst_1) (CompleteLattice.toSupSet.{u1} (Subsemigroup.{u1} M _inst_1) (Subsemigroup.instCompleteLatticeSubsemigroup.{u1} M _inst_1)) S)) (Set.iUnion.{u1, succ u1} M (Subsemigroup.{u1} M _inst_1) (fun (s : Subsemigroup.{u1} M _inst_1) => Set.iUnion.{u1, 0} M (Membership.mem.{u1, u1} (Subsemigroup.{u1} M _inst_1) (Set.{u1} (Subsemigroup.{u1} M _inst_1)) (Set.instMembershipSet.{u1} (Subsemigroup.{u1} M _inst_1)) s S) (fun (H : Membership.mem.{u1, u1} (Subsemigroup.{u1} M _inst_1) (Set.{u1} (Subsemigroup.{u1} M _inst_1)) (Set.instMembershipSet.{u1} (Subsemigroup.{u1} M _inst_1)) s S) => SetLike.coe.{u1, u1} (Subsemigroup.{u1} M _inst_1) M (Subsemigroup.instSetLikeSubsemigroup.{u1} M _inst_1) s))))
+Case conversion may be inaccurate. Consider using '#align subsemigroup.coe_Sup_of_directed_on Subsemigroup.coe_sSup_of_directed_onₓ'. -/
@[to_additive]
-theorem coe_supₛ_of_directed_on {S : Set (Subsemigroup M)} (hS : DirectedOn (· ≤ ·) S) :
- (↑(supₛ S) : Set M) = ⋃ s ∈ S, ↑s :=
+theorem coe_sSup_of_directed_on {S : Set (Subsemigroup M)} (hS : DirectedOn (· ≤ ·) S) :
+ (↑(sSup S) : Set M) = ⋃ s ∈ S, ↑s :=
Set.ext fun x => by simp [mem_Sup_of_directed_on hS]
-#align subsemigroup.coe_Sup_of_directed_on Subsemigroup.coe_supₛ_of_directed_on
-#align add_subsemigroup.coe_Sup_of_directed_on AddSubsemigroup.coe_supₛ_of_directed_on
+#align subsemigroup.coe_Sup_of_directed_on Subsemigroup.coe_sSup_of_directed_on
+#align add_subsemigroup.coe_Sup_of_directed_on AddSubsemigroup.coe_sSup_of_directed_on
/- warning: subsemigroup.mem_sup_left -> Subsemigroup.mem_sup_left is a dubious translation:
lean 3 declaration is
@@ -143,63 +143,63 @@ theorem mul_mem_sup {S T : Subsemigroup M} {x y : M} (hx : x ∈ S) (hy : y ∈
#align subsemigroup.mul_mem_sup Subsemigroup.mul_mem_sup
#align add_subsemigroup.add_mem_sup AddSubsemigroup.add_mem_sup
-/- warning: subsemigroup.mem_supr_of_mem -> Subsemigroup.mem_supᵢ_of_mem is a dubious translation:
+/- warning: subsemigroup.mem_supr_of_mem -> Subsemigroup.mem_iSup_of_mem is a dubious translation:
lean 3 declaration is
- forall {ι : Sort.{u1}} {M : Type.{u2}} [_inst_1 : Mul.{u2} M] {S : ι -> (Subsemigroup.{u2} M _inst_1)} (i : ι) {x : M}, (Membership.Mem.{u2, u2} M (Subsemigroup.{u2} M _inst_1) (SetLike.hasMem.{u2, u2} (Subsemigroup.{u2} M _inst_1) M (Subsemigroup.setLike.{u2} M _inst_1)) x (S i)) -> (Membership.Mem.{u2, u2} M (Subsemigroup.{u2} M _inst_1) (SetLike.hasMem.{u2, u2} (Subsemigroup.{u2} M _inst_1) M (Subsemigroup.setLike.{u2} M _inst_1)) x (supᵢ.{u2, u1} (Subsemigroup.{u2} M _inst_1) (CompleteSemilatticeSup.toHasSup.{u2} (Subsemigroup.{u2} M _inst_1) (CompleteLattice.toCompleteSemilatticeSup.{u2} (Subsemigroup.{u2} M _inst_1) (Subsemigroup.completeLattice.{u2} M _inst_1))) ι S))
+ forall {ι : Sort.{u1}} {M : Type.{u2}} [_inst_1 : Mul.{u2} M] {S : ι -> (Subsemigroup.{u2} M _inst_1)} (i : ι) {x : M}, (Membership.Mem.{u2, u2} M (Subsemigroup.{u2} M _inst_1) (SetLike.hasMem.{u2, u2} (Subsemigroup.{u2} M _inst_1) M (Subsemigroup.setLike.{u2} M _inst_1)) x (S i)) -> (Membership.Mem.{u2, u2} M (Subsemigroup.{u2} M _inst_1) (SetLike.hasMem.{u2, u2} (Subsemigroup.{u2} M _inst_1) M (Subsemigroup.setLike.{u2} M _inst_1)) x (iSup.{u2, u1} (Subsemigroup.{u2} M _inst_1) (CompleteSemilatticeSup.toHasSup.{u2} (Subsemigroup.{u2} M _inst_1) (CompleteLattice.toCompleteSemilatticeSup.{u2} (Subsemigroup.{u2} M _inst_1) (Subsemigroup.completeLattice.{u2} M _inst_1))) ι S))
but is expected to have type
- forall {ι : Sort.{u1}} {M : Type.{u2}} [_inst_1 : Mul.{u2} M] {S : ι -> (Subsemigroup.{u2} M _inst_1)} (i : ι) {x : M}, (Membership.mem.{u2, u2} M (Subsemigroup.{u2} M _inst_1) (SetLike.instMembership.{u2, u2} (Subsemigroup.{u2} M _inst_1) M (Subsemigroup.instSetLikeSubsemigroup.{u2} M _inst_1)) x (S i)) -> (Membership.mem.{u2, u2} M (Subsemigroup.{u2} M _inst_1) (SetLike.instMembership.{u2, u2} (Subsemigroup.{u2} M _inst_1) M (Subsemigroup.instSetLikeSubsemigroup.{u2} M _inst_1)) x (supᵢ.{u2, u1} (Subsemigroup.{u2} M _inst_1) (CompleteLattice.toSupSet.{u2} (Subsemigroup.{u2} M _inst_1) (Subsemigroup.instCompleteLatticeSubsemigroup.{u2} M _inst_1)) ι S))
-Case conversion may be inaccurate. Consider using '#align subsemigroup.mem_supr_of_mem Subsemigroup.mem_supᵢ_of_memₓ'. -/
+ forall {ι : Sort.{u1}} {M : Type.{u2}} [_inst_1 : Mul.{u2} M] {S : ι -> (Subsemigroup.{u2} M _inst_1)} (i : ι) {x : M}, (Membership.mem.{u2, u2} M (Subsemigroup.{u2} M _inst_1) (SetLike.instMembership.{u2, u2} (Subsemigroup.{u2} M _inst_1) M (Subsemigroup.instSetLikeSubsemigroup.{u2} M _inst_1)) x (S i)) -> (Membership.mem.{u2, u2} M (Subsemigroup.{u2} M _inst_1) (SetLike.instMembership.{u2, u2} (Subsemigroup.{u2} M _inst_1) M (Subsemigroup.instSetLikeSubsemigroup.{u2} M _inst_1)) x (iSup.{u2, u1} (Subsemigroup.{u2} M _inst_1) (CompleteLattice.toSupSet.{u2} (Subsemigroup.{u2} M _inst_1) (Subsemigroup.instCompleteLatticeSubsemigroup.{u2} M _inst_1)) ι S))
+Case conversion may be inaccurate. Consider using '#align subsemigroup.mem_supr_of_mem Subsemigroup.mem_iSup_of_memₓ'. -/
@[to_additive]
-theorem mem_supᵢ_of_mem {S : ι → Subsemigroup M} (i : ι) : ∀ {x : M}, x ∈ S i → x ∈ supᵢ S :=
- show S i ≤ supᵢ S from le_supᵢ _ _
-#align subsemigroup.mem_supr_of_mem Subsemigroup.mem_supᵢ_of_mem
-#align add_subsemigroup.mem_supr_of_mem AddSubsemigroup.mem_supᵢ_of_mem
+theorem mem_iSup_of_mem {S : ι → Subsemigroup M} (i : ι) : ∀ {x : M}, x ∈ S i → x ∈ iSup S :=
+ show S i ≤ iSup S from le_iSup _ _
+#align subsemigroup.mem_supr_of_mem Subsemigroup.mem_iSup_of_mem
+#align add_subsemigroup.mem_supr_of_mem AddSubsemigroup.mem_iSup_of_mem
-/- warning: subsemigroup.mem_Sup_of_mem -> Subsemigroup.mem_supₛ_of_mem is a dubious translation:
+/- warning: subsemigroup.mem_Sup_of_mem -> Subsemigroup.mem_sSup_of_mem is a dubious translation:
lean 3 declaration is
- forall {M : Type.{u1}} [_inst_1 : Mul.{u1} M] {S : Set.{u1} (Subsemigroup.{u1} M _inst_1)} {s : Subsemigroup.{u1} M _inst_1}, (Membership.Mem.{u1, u1} (Subsemigroup.{u1} M _inst_1) (Set.{u1} (Subsemigroup.{u1} M _inst_1)) (Set.hasMem.{u1} (Subsemigroup.{u1} M _inst_1)) s S) -> (forall {x : M}, (Membership.Mem.{u1, u1} M (Subsemigroup.{u1} M _inst_1) (SetLike.hasMem.{u1, u1} (Subsemigroup.{u1} M _inst_1) M (Subsemigroup.setLike.{u1} M _inst_1)) x s) -> (Membership.Mem.{u1, u1} M (Subsemigroup.{u1} M _inst_1) (SetLike.hasMem.{u1, u1} (Subsemigroup.{u1} M _inst_1) M (Subsemigroup.setLike.{u1} M _inst_1)) x (SupSet.supₛ.{u1} (Subsemigroup.{u1} M _inst_1) (CompleteSemilatticeSup.toHasSup.{u1} (Subsemigroup.{u1} M _inst_1) (CompleteLattice.toCompleteSemilatticeSup.{u1} (Subsemigroup.{u1} M _inst_1) (Subsemigroup.completeLattice.{u1} M _inst_1))) S)))
+ forall {M : Type.{u1}} [_inst_1 : Mul.{u1} M] {S : Set.{u1} (Subsemigroup.{u1} M _inst_1)} {s : Subsemigroup.{u1} M _inst_1}, (Membership.Mem.{u1, u1} (Subsemigroup.{u1} M _inst_1) (Set.{u1} (Subsemigroup.{u1} M _inst_1)) (Set.hasMem.{u1} (Subsemigroup.{u1} M _inst_1)) s S) -> (forall {x : M}, (Membership.Mem.{u1, u1} M (Subsemigroup.{u1} M _inst_1) (SetLike.hasMem.{u1, u1} (Subsemigroup.{u1} M _inst_1) M (Subsemigroup.setLike.{u1} M _inst_1)) x s) -> (Membership.Mem.{u1, u1} M (Subsemigroup.{u1} M _inst_1) (SetLike.hasMem.{u1, u1} (Subsemigroup.{u1} M _inst_1) M (Subsemigroup.setLike.{u1} M _inst_1)) x (SupSet.sSup.{u1} (Subsemigroup.{u1} M _inst_1) (CompleteSemilatticeSup.toHasSup.{u1} (Subsemigroup.{u1} M _inst_1) (CompleteLattice.toCompleteSemilatticeSup.{u1} (Subsemigroup.{u1} M _inst_1) (Subsemigroup.completeLattice.{u1} M _inst_1))) S)))
but is expected to have type
- forall {M : Type.{u1}} [_inst_1 : Mul.{u1} M] {S : Set.{u1} (Subsemigroup.{u1} M _inst_1)} {s : Subsemigroup.{u1} M _inst_1}, (Membership.mem.{u1, u1} (Subsemigroup.{u1} M _inst_1) (Set.{u1} (Subsemigroup.{u1} M _inst_1)) (Set.instMembershipSet.{u1} (Subsemigroup.{u1} M _inst_1)) s S) -> (forall {x : M}, (Membership.mem.{u1, u1} M (Subsemigroup.{u1} M _inst_1) (SetLike.instMembership.{u1, u1} (Subsemigroup.{u1} M _inst_1) M (Subsemigroup.instSetLikeSubsemigroup.{u1} M _inst_1)) x s) -> (Membership.mem.{u1, u1} M (Subsemigroup.{u1} M _inst_1) (SetLike.instMembership.{u1, u1} (Subsemigroup.{u1} M _inst_1) M (Subsemigroup.instSetLikeSubsemigroup.{u1} M _inst_1)) x (SupSet.supₛ.{u1} (Subsemigroup.{u1} M _inst_1) (CompleteLattice.toSupSet.{u1} (Subsemigroup.{u1} M _inst_1) (Subsemigroup.instCompleteLatticeSubsemigroup.{u1} M _inst_1)) S)))
-Case conversion may be inaccurate. Consider using '#align subsemigroup.mem_Sup_of_mem Subsemigroup.mem_supₛ_of_memₓ'. -/
+ forall {M : Type.{u1}} [_inst_1 : Mul.{u1} M] {S : Set.{u1} (Subsemigroup.{u1} M _inst_1)} {s : Subsemigroup.{u1} M _inst_1}, (Membership.mem.{u1, u1} (Subsemigroup.{u1} M _inst_1) (Set.{u1} (Subsemigroup.{u1} M _inst_1)) (Set.instMembershipSet.{u1} (Subsemigroup.{u1} M _inst_1)) s S) -> (forall {x : M}, (Membership.mem.{u1, u1} M (Subsemigroup.{u1} M _inst_1) (SetLike.instMembership.{u1, u1} (Subsemigroup.{u1} M _inst_1) M (Subsemigroup.instSetLikeSubsemigroup.{u1} M _inst_1)) x s) -> (Membership.mem.{u1, u1} M (Subsemigroup.{u1} M _inst_1) (SetLike.instMembership.{u1, u1} (Subsemigroup.{u1} M _inst_1) M (Subsemigroup.instSetLikeSubsemigroup.{u1} M _inst_1)) x (SupSet.sSup.{u1} (Subsemigroup.{u1} M _inst_1) (CompleteLattice.toSupSet.{u1} (Subsemigroup.{u1} M _inst_1) (Subsemigroup.instCompleteLatticeSubsemigroup.{u1} M _inst_1)) S)))
+Case conversion may be inaccurate. Consider using '#align subsemigroup.mem_Sup_of_mem Subsemigroup.mem_sSup_of_memₓ'. -/
@[to_additive]
-theorem mem_supₛ_of_mem {S : Set (Subsemigroup M)} {s : Subsemigroup M} (hs : s ∈ S) :
- ∀ {x : M}, x ∈ s → x ∈ supₛ S :=
- show s ≤ supₛ S from le_supₛ hs
-#align subsemigroup.mem_Sup_of_mem Subsemigroup.mem_supₛ_of_mem
-#align add_subsemigroup.mem_Sup_of_mem AddSubsemigroup.mem_supₛ_of_mem
+theorem mem_sSup_of_mem {S : Set (Subsemigroup M)} {s : Subsemigroup M} (hs : s ∈ S) :
+ ∀ {x : M}, x ∈ s → x ∈ sSup S :=
+ show s ≤ sSup S from le_sSup hs
+#align subsemigroup.mem_Sup_of_mem Subsemigroup.mem_sSup_of_mem
+#align add_subsemigroup.mem_Sup_of_mem AddSubsemigroup.mem_sSup_of_mem
-/- warning: subsemigroup.supr_induction -> Subsemigroup.supᵢ_induction is a dubious translation:
+/- warning: subsemigroup.supr_induction -> Subsemigroup.iSup_induction is a dubious translation:
lean 3 declaration is
- forall {ι : Sort.{u1}} {M : Type.{u2}} [_inst_1 : Mul.{u2} M] (S : ι -> (Subsemigroup.{u2} M _inst_1)) {C : M -> Prop} {x : M}, (Membership.Mem.{u2, u2} M (Subsemigroup.{u2} M _inst_1) (SetLike.hasMem.{u2, u2} (Subsemigroup.{u2} M _inst_1) M (Subsemigroup.setLike.{u2} M _inst_1)) x (supᵢ.{u2, u1} (Subsemigroup.{u2} M _inst_1) (CompleteSemilatticeSup.toHasSup.{u2} (Subsemigroup.{u2} M _inst_1) (CompleteLattice.toCompleteSemilatticeSup.{u2} (Subsemigroup.{u2} M _inst_1) (Subsemigroup.completeLattice.{u2} M _inst_1))) ι (fun (i : ι) => S i))) -> (forall (i : ι) (x : M), (Membership.Mem.{u2, u2} M (Subsemigroup.{u2} M _inst_1) (SetLike.hasMem.{u2, u2} (Subsemigroup.{u2} M _inst_1) M (Subsemigroup.setLike.{u2} M _inst_1)) x (S i)) -> (C x)) -> (forall (x : M) (y : M), (C x) -> (C y) -> (C (HMul.hMul.{u2, u2, u2} M M M (instHMul.{u2} M _inst_1) x y))) -> (C x)
+ forall {ι : Sort.{u1}} {M : Type.{u2}} [_inst_1 : Mul.{u2} M] (S : ι -> (Subsemigroup.{u2} M _inst_1)) {C : M -> Prop} {x : M}, (Membership.Mem.{u2, u2} M (Subsemigroup.{u2} M _inst_1) (SetLike.hasMem.{u2, u2} (Subsemigroup.{u2} M _inst_1) M (Subsemigroup.setLike.{u2} M _inst_1)) x (iSup.{u2, u1} (Subsemigroup.{u2} M _inst_1) (CompleteSemilatticeSup.toHasSup.{u2} (Subsemigroup.{u2} M _inst_1) (CompleteLattice.toCompleteSemilatticeSup.{u2} (Subsemigroup.{u2} M _inst_1) (Subsemigroup.completeLattice.{u2} M _inst_1))) ι (fun (i : ι) => S i))) -> (forall (i : ι) (x : M), (Membership.Mem.{u2, u2} M (Subsemigroup.{u2} M _inst_1) (SetLike.hasMem.{u2, u2} (Subsemigroup.{u2} M _inst_1) M (Subsemigroup.setLike.{u2} M _inst_1)) x (S i)) -> (C x)) -> (forall (x : M) (y : M), (C x) -> (C y) -> (C (HMul.hMul.{u2, u2, u2} M M M (instHMul.{u2} M _inst_1) x y))) -> (C x)
but is expected to have type
- forall {ι : Sort.{u1}} {M : Type.{u2}} [_inst_1 : Mul.{u2} M] (S : ι -> (Subsemigroup.{u2} M _inst_1)) {C : M -> Prop} {x : M}, (Membership.mem.{u2, u2} M (Subsemigroup.{u2} M _inst_1) (SetLike.instMembership.{u2, u2} (Subsemigroup.{u2} M _inst_1) M (Subsemigroup.instSetLikeSubsemigroup.{u2} M _inst_1)) x (supᵢ.{u2, u1} (Subsemigroup.{u2} M _inst_1) (CompleteLattice.toSupSet.{u2} (Subsemigroup.{u2} M _inst_1) (Subsemigroup.instCompleteLatticeSubsemigroup.{u2} M _inst_1)) ι (fun (i : ι) => S i))) -> (forall (i : ι) (x : M), (Membership.mem.{u2, u2} M (Subsemigroup.{u2} M _inst_1) (SetLike.instMembership.{u2, u2} (Subsemigroup.{u2} M _inst_1) M (Subsemigroup.instSetLikeSubsemigroup.{u2} M _inst_1)) x (S i)) -> (C x)) -> (forall (x : M) (y : M), (C x) -> (C y) -> (C (HMul.hMul.{u2, u2, u2} M M M (instHMul.{u2} M _inst_1) x y))) -> (C x)
-Case conversion may be inaccurate. Consider using '#align subsemigroup.supr_induction Subsemigroup.supᵢ_inductionₓ'. -/
+ forall {ι : Sort.{u1}} {M : Type.{u2}} [_inst_1 : Mul.{u2} M] (S : ι -> (Subsemigroup.{u2} M _inst_1)) {C : M -> Prop} {x : M}, (Membership.mem.{u2, u2} M (Subsemigroup.{u2} M _inst_1) (SetLike.instMembership.{u2, u2} (Subsemigroup.{u2} M _inst_1) M (Subsemigroup.instSetLikeSubsemigroup.{u2} M _inst_1)) x (iSup.{u2, u1} (Subsemigroup.{u2} M _inst_1) (CompleteLattice.toSupSet.{u2} (Subsemigroup.{u2} M _inst_1) (Subsemigroup.instCompleteLatticeSubsemigroup.{u2} M _inst_1)) ι (fun (i : ι) => S i))) -> (forall (i : ι) (x : M), (Membership.mem.{u2, u2} M (Subsemigroup.{u2} M _inst_1) (SetLike.instMembership.{u2, u2} (Subsemigroup.{u2} M _inst_1) M (Subsemigroup.instSetLikeSubsemigroup.{u2} M _inst_1)) x (S i)) -> (C x)) -> (forall (x : M) (y : M), (C x) -> (C y) -> (C (HMul.hMul.{u2, u2, u2} M M M (instHMul.{u2} M _inst_1) x y))) -> (C x)
+Case conversion may be inaccurate. Consider using '#align subsemigroup.supr_induction Subsemigroup.iSup_inductionₓ'. -/
/-- 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`. -/
@[elab_as_elim,
to_additive
" An induction principle for elements of `⨆ i, S i`.\nIf `C` holds all elements of `S i` for all `i`, and is preserved under addition,\nthen it holds for all elements of the supremum of `S`. "]
-theorem supᵢ_induction (S : ι → Subsemigroup M) {C : M → Prop} {x : M} (hx : x ∈ ⨆ i, S i)
+theorem iSup_induction (S : ι → Subsemigroup M) {C : M → Prop} {x : M} (hx : x ∈ ⨆ i, S i)
(hp : ∀ (i), ∀ x ∈ S i, C x) (hmul : ∀ x y, C x → C y → C (x * y)) : C x :=
by
rw [supr_eq_closure] at hx
refine' closure_induction hx (fun x hx => _) hmul
obtain ⟨i, hi⟩ := set.mem_Union.mp hx
exact hp _ _ hi
-#align subsemigroup.supr_induction Subsemigroup.supᵢ_induction
-#align add_subsemigroup.supr_induction AddSubsemigroup.supᵢ_induction
+#align subsemigroup.supr_induction Subsemigroup.iSup_induction
+#align add_subsemigroup.supr_induction AddSubsemigroup.iSup_induction
-/- warning: subsemigroup.supr_induction' -> Subsemigroup.supᵢ_induction' is a dubious translation:
+/- warning: subsemigroup.supr_induction' -> Subsemigroup.iSup_induction' is a dubious translation:
lean 3 declaration is
- forall {ι : Sort.{u1}} {M : Type.{u2}} [_inst_1 : Mul.{u2} M] (S : ι -> (Subsemigroup.{u2} M _inst_1)) {C : forall (x : M), (Membership.Mem.{u2, u2} M (Subsemigroup.{u2} M _inst_1) (SetLike.hasMem.{u2, u2} (Subsemigroup.{u2} M _inst_1) M (Subsemigroup.setLike.{u2} M _inst_1)) x (supᵢ.{u2, u1} (Subsemigroup.{u2} M _inst_1) (CompleteSemilatticeSup.toHasSup.{u2} (Subsemigroup.{u2} M _inst_1) (CompleteLattice.toCompleteSemilatticeSup.{u2} (Subsemigroup.{u2} M _inst_1) (Subsemigroup.completeLattice.{u2} M _inst_1))) ι (fun (i : ι) => S i))) -> Prop}, (forall (i : ι) (x : M) (H : Membership.Mem.{u2, u2} M (Subsemigroup.{u2} M _inst_1) (SetLike.hasMem.{u2, u2} (Subsemigroup.{u2} M _inst_1) M (Subsemigroup.setLike.{u2} M _inst_1)) x (S i)), C x (Subsemigroup.mem_supᵢ_of_mem.{u1, u2} ι M _inst_1 (fun (i : ι) => S i) i x H)) -> (forall (x : M) (y : M) (hx : Membership.Mem.{u2, u2} M (Subsemigroup.{u2} M _inst_1) (SetLike.hasMem.{u2, u2} (Subsemigroup.{u2} M _inst_1) M (Subsemigroup.setLike.{u2} M _inst_1)) x (supᵢ.{u2, u1} (Subsemigroup.{u2} M _inst_1) (CompleteSemilatticeSup.toHasSup.{u2} (Subsemigroup.{u2} M _inst_1) (CompleteLattice.toCompleteSemilatticeSup.{u2} (Subsemigroup.{u2} M _inst_1) (Subsemigroup.completeLattice.{u2} M _inst_1))) ι (fun (i : ι) => S i))) (hy : Membership.Mem.{u2, u2} M (Subsemigroup.{u2} M _inst_1) (SetLike.hasMem.{u2, u2} (Subsemigroup.{u2} M _inst_1) M (Subsemigroup.setLike.{u2} M _inst_1)) y (supᵢ.{u2, u1} (Subsemigroup.{u2} M _inst_1) (CompleteSemilatticeSup.toHasSup.{u2} (Subsemigroup.{u2} M _inst_1) (CompleteLattice.toCompleteSemilatticeSup.{u2} (Subsemigroup.{u2} M _inst_1) (Subsemigroup.completeLattice.{u2} M _inst_1))) ι (fun (i : ι) => S i))), (C x hx) -> (C y hy) -> (C (HMul.hMul.{u2, u2, u2} M M M (instHMul.{u2} M _inst_1) x y) (MulMemClass.mul_mem.{u2, u2} (Subsemigroup.{u2} M _inst_1) M _inst_1 (Subsemigroup.setLike.{u2} M _inst_1) (Subsemigroup.mulMemClass.{u2} M _inst_1) (supᵢ.{u2, u1} (Subsemigroup.{u2} M _inst_1) (CompleteSemilatticeSup.toHasSup.{u2} (Subsemigroup.{u2} M _inst_1) (CompleteLattice.toCompleteSemilatticeSup.{u2} (Subsemigroup.{u2} M _inst_1) (Subsemigroup.completeLattice.{u2} M _inst_1))) ι (fun (i : ι) => S i)) x y hx hy))) -> (forall {x : M} (hx : Membership.Mem.{u2, u2} M (Subsemigroup.{u2} M _inst_1) (SetLike.hasMem.{u2, u2} (Subsemigroup.{u2} M _inst_1) M (Subsemigroup.setLike.{u2} M _inst_1)) x (supᵢ.{u2, u1} (Subsemigroup.{u2} M _inst_1) (CompleteSemilatticeSup.toHasSup.{u2} (Subsemigroup.{u2} M _inst_1) (CompleteLattice.toCompleteSemilatticeSup.{u2} (Subsemigroup.{u2} M _inst_1) (Subsemigroup.completeLattice.{u2} M _inst_1))) ι (fun (i : ι) => S i))), C x hx)
+ forall {ι : Sort.{u1}} {M : Type.{u2}} [_inst_1 : Mul.{u2} M] (S : ι -> (Subsemigroup.{u2} M _inst_1)) {C : forall (x : M), (Membership.Mem.{u2, u2} M (Subsemigroup.{u2} M _inst_1) (SetLike.hasMem.{u2, u2} (Subsemigroup.{u2} M _inst_1) M (Subsemigroup.setLike.{u2} M _inst_1)) x (iSup.{u2, u1} (Subsemigroup.{u2} M _inst_1) (CompleteSemilatticeSup.toHasSup.{u2} (Subsemigroup.{u2} M _inst_1) (CompleteLattice.toCompleteSemilatticeSup.{u2} (Subsemigroup.{u2} M _inst_1) (Subsemigroup.completeLattice.{u2} M _inst_1))) ι (fun (i : ι) => S i))) -> Prop}, (forall (i : ι) (x : M) (H : Membership.Mem.{u2, u2} M (Subsemigroup.{u2} M _inst_1) (SetLike.hasMem.{u2, u2} (Subsemigroup.{u2} M _inst_1) M (Subsemigroup.setLike.{u2} M _inst_1)) x (S i)), C x (Subsemigroup.mem_iSup_of_mem.{u1, u2} ι M _inst_1 (fun (i : ι) => S i) i x H)) -> (forall (x : M) (y : M) (hx : Membership.Mem.{u2, u2} M (Subsemigroup.{u2} M _inst_1) (SetLike.hasMem.{u2, u2} (Subsemigroup.{u2} M _inst_1) M (Subsemigroup.setLike.{u2} M _inst_1)) x (iSup.{u2, u1} (Subsemigroup.{u2} M _inst_1) (CompleteSemilatticeSup.toHasSup.{u2} (Subsemigroup.{u2} M _inst_1) (CompleteLattice.toCompleteSemilatticeSup.{u2} (Subsemigroup.{u2} M _inst_1) (Subsemigroup.completeLattice.{u2} M _inst_1))) ι (fun (i : ι) => S i))) (hy : Membership.Mem.{u2, u2} M (Subsemigroup.{u2} M _inst_1) (SetLike.hasMem.{u2, u2} (Subsemigroup.{u2} M _inst_1) M (Subsemigroup.setLike.{u2} M _inst_1)) y (iSup.{u2, u1} (Subsemigroup.{u2} M _inst_1) (CompleteSemilatticeSup.toHasSup.{u2} (Subsemigroup.{u2} M _inst_1) (CompleteLattice.toCompleteSemilatticeSup.{u2} (Subsemigroup.{u2} M _inst_1) (Subsemigroup.completeLattice.{u2} M _inst_1))) ι (fun (i : ι) => S i))), (C x hx) -> (C y hy) -> (C (HMul.hMul.{u2, u2, u2} M M M (instHMul.{u2} M _inst_1) x y) (MulMemClass.mul_mem.{u2, u2} (Subsemigroup.{u2} M _inst_1) M _inst_1 (Subsemigroup.setLike.{u2} M _inst_1) (Subsemigroup.mulMemClass.{u2} M _inst_1) (iSup.{u2, u1} (Subsemigroup.{u2} M _inst_1) (CompleteSemilatticeSup.toHasSup.{u2} (Subsemigroup.{u2} M _inst_1) (CompleteLattice.toCompleteSemilatticeSup.{u2} (Subsemigroup.{u2} M _inst_1) (Subsemigroup.completeLattice.{u2} M _inst_1))) ι (fun (i : ι) => S i)) x y hx hy))) -> (forall {x : M} (hx : Membership.Mem.{u2, u2} M (Subsemigroup.{u2} M _inst_1) (SetLike.hasMem.{u2, u2} (Subsemigroup.{u2} M _inst_1) M (Subsemigroup.setLike.{u2} M _inst_1)) x (iSup.{u2, u1} (Subsemigroup.{u2} M _inst_1) (CompleteSemilatticeSup.toHasSup.{u2} (Subsemigroup.{u2} M _inst_1) (CompleteLattice.toCompleteSemilatticeSup.{u2} (Subsemigroup.{u2} M _inst_1) (Subsemigroup.completeLattice.{u2} M _inst_1))) ι (fun (i : ι) => S i))), C x hx)
but is expected to have type
- forall {ι : Sort.{u1}} {M : Type.{u2}} [_inst_1 : Mul.{u2} M] (S : ι -> (Subsemigroup.{u2} M _inst_1)) {C : forall (x : M), (Membership.mem.{u2, u2} M (Subsemigroup.{u2} M _inst_1) (SetLike.instMembership.{u2, u2} (Subsemigroup.{u2} M _inst_1) M (Subsemigroup.instSetLikeSubsemigroup.{u2} M _inst_1)) x (supᵢ.{u2, u1} (Subsemigroup.{u2} M _inst_1) (CompleteLattice.toSupSet.{u2} (Subsemigroup.{u2} M _inst_1) (Subsemigroup.instCompleteLatticeSubsemigroup.{u2} M _inst_1)) ι (fun (i : ι) => S i))) -> Prop}, (forall (i : ι) (x : M) (H : Membership.mem.{u2, u2} M (Subsemigroup.{u2} M _inst_1) (SetLike.instMembership.{u2, u2} (Subsemigroup.{u2} M _inst_1) M (Subsemigroup.instSetLikeSubsemigroup.{u2} M _inst_1)) x (S i)), C x (Subsemigroup.mem_supᵢ_of_mem.{u1, u2} ι M _inst_1 (fun (i : ι) => S i) i x H)) -> (forall (x : M) (y : M) (hx : Membership.mem.{u2, u2} M (Subsemigroup.{u2} M _inst_1) (SetLike.instMembership.{u2, u2} (Subsemigroup.{u2} M _inst_1) M (Subsemigroup.instSetLikeSubsemigroup.{u2} M _inst_1)) x (supᵢ.{u2, u1} (Subsemigroup.{u2} M _inst_1) (CompleteLattice.toSupSet.{u2} (Subsemigroup.{u2} M _inst_1) (Subsemigroup.instCompleteLatticeSubsemigroup.{u2} M _inst_1)) ι (fun (i : ι) => S i))) (hy : Membership.mem.{u2, u2} M (Subsemigroup.{u2} M _inst_1) (SetLike.instMembership.{u2, u2} (Subsemigroup.{u2} M _inst_1) M (Subsemigroup.instSetLikeSubsemigroup.{u2} M _inst_1)) y (supᵢ.{u2, u1} (Subsemigroup.{u2} M _inst_1) (CompleteLattice.toSupSet.{u2} (Subsemigroup.{u2} M _inst_1) (Subsemigroup.instCompleteLatticeSubsemigroup.{u2} M _inst_1)) ι (fun (i : ι) => S i))), (C x hx) -> (C y hy) -> (C (HMul.hMul.{u2, u2, u2} M M M (instHMul.{u2} M _inst_1) x y) (MulMemClass.mul_mem.{u2, u2} (Subsemigroup.{u2} M _inst_1) M _inst_1 (Subsemigroup.instSetLikeSubsemigroup.{u2} M _inst_1) (Subsemigroup.instMulMemClassSubsemigroupInstSetLikeSubsemigroup.{u2} M _inst_1) (supᵢ.{u2, u1} (Subsemigroup.{u2} M _inst_1) (CompleteLattice.toSupSet.{u2} (Subsemigroup.{u2} M _inst_1) (Subsemigroup.instCompleteLatticeSubsemigroup.{u2} M _inst_1)) ι (fun (i : ι) => S i)) x y hx hy))) -> (forall {x : M} (hx : Membership.mem.{u2, u2} M (Subsemigroup.{u2} M _inst_1) (SetLike.instMembership.{u2, u2} (Subsemigroup.{u2} M _inst_1) M (Subsemigroup.instSetLikeSubsemigroup.{u2} M _inst_1)) x (supᵢ.{u2, u1} (Subsemigroup.{u2} M _inst_1) (CompleteLattice.toSupSet.{u2} (Subsemigroup.{u2} M _inst_1) (Subsemigroup.instCompleteLatticeSubsemigroup.{u2} M _inst_1)) ι (fun (i : ι) => S i))), C x hx)
-Case conversion may be inaccurate. Consider using '#align subsemigroup.supr_induction' Subsemigroup.supᵢ_induction'ₓ'. -/
+ forall {ι : Sort.{u1}} {M : Type.{u2}} [_inst_1 : Mul.{u2} M] (S : ι -> (Subsemigroup.{u2} M _inst_1)) {C : forall (x : M), (Membership.mem.{u2, u2} M (Subsemigroup.{u2} M _inst_1) (SetLike.instMembership.{u2, u2} (Subsemigroup.{u2} M _inst_1) M (Subsemigroup.instSetLikeSubsemigroup.{u2} M _inst_1)) x (iSup.{u2, u1} (Subsemigroup.{u2} M _inst_1) (CompleteLattice.toSupSet.{u2} (Subsemigroup.{u2} M _inst_1) (Subsemigroup.instCompleteLatticeSubsemigroup.{u2} M _inst_1)) ι (fun (i : ι) => S i))) -> Prop}, (forall (i : ι) (x : M) (H : Membership.mem.{u2, u2} M (Subsemigroup.{u2} M _inst_1) (SetLike.instMembership.{u2, u2} (Subsemigroup.{u2} M _inst_1) M (Subsemigroup.instSetLikeSubsemigroup.{u2} M _inst_1)) x (S i)), C x (Subsemigroup.mem_iSup_of_mem.{u1, u2} ι M _inst_1 (fun (i : ι) => S i) i x H)) -> (forall (x : M) (y : M) (hx : Membership.mem.{u2, u2} M (Subsemigroup.{u2} M _inst_1) (SetLike.instMembership.{u2, u2} (Subsemigroup.{u2} M _inst_1) M (Subsemigroup.instSetLikeSubsemigroup.{u2} M _inst_1)) x (iSup.{u2, u1} (Subsemigroup.{u2} M _inst_1) (CompleteLattice.toSupSet.{u2} (Subsemigroup.{u2} M _inst_1) (Subsemigroup.instCompleteLatticeSubsemigroup.{u2} M _inst_1)) ι (fun (i : ι) => S i))) (hy : Membership.mem.{u2, u2} M (Subsemigroup.{u2} M _inst_1) (SetLike.instMembership.{u2, u2} (Subsemigroup.{u2} M _inst_1) M (Subsemigroup.instSetLikeSubsemigroup.{u2} M _inst_1)) y (iSup.{u2, u1} (Subsemigroup.{u2} M _inst_1) (CompleteLattice.toSupSet.{u2} (Subsemigroup.{u2} M _inst_1) (Subsemigroup.instCompleteLatticeSubsemigroup.{u2} M _inst_1)) ι (fun (i : ι) => S i))), (C x hx) -> (C y hy) -> (C (HMul.hMul.{u2, u2, u2} M M M (instHMul.{u2} M _inst_1) x y) (MulMemClass.mul_mem.{u2, u2} (Subsemigroup.{u2} M _inst_1) M _inst_1 (Subsemigroup.instSetLikeSubsemigroup.{u2} M _inst_1) (Subsemigroup.instMulMemClassSubsemigroupInstSetLikeSubsemigroup.{u2} M _inst_1) (iSup.{u2, u1} (Subsemigroup.{u2} M _inst_1) (CompleteLattice.toSupSet.{u2} (Subsemigroup.{u2} M _inst_1) (Subsemigroup.instCompleteLatticeSubsemigroup.{u2} M _inst_1)) ι (fun (i : ι) => S i)) x y hx hy))) -> (forall {x : M} (hx : Membership.mem.{u2, u2} M (Subsemigroup.{u2} M _inst_1) (SetLike.instMembership.{u2, u2} (Subsemigroup.{u2} M _inst_1) M (Subsemigroup.instSetLikeSubsemigroup.{u2} M _inst_1)) x (iSup.{u2, u1} (Subsemigroup.{u2} M _inst_1) (CompleteLattice.toSupSet.{u2} (Subsemigroup.{u2} M _inst_1) (Subsemigroup.instCompleteLatticeSubsemigroup.{u2} M _inst_1)) ι (fun (i : ι) => S i))), C x hx)
+Case conversion may be inaccurate. Consider using '#align subsemigroup.supr_induction' Subsemigroup.iSup_induction'ₓ'. -/
/-- A dependent version of `subsemigroup.supr_induction`. -/
@[elab_as_elim, to_additive "A dependent version of `add_subsemigroup.supr_induction`. "]
-theorem supᵢ_induction' (S : ι → Subsemigroup M) {C : ∀ x, (x ∈ ⨆ i, S i) → Prop}
- (hp : ∀ (i), ∀ x ∈ S i, C x (mem_supᵢ_of_mem i ‹_›))
+theorem iSup_induction' (S : ι → Subsemigroup M) {C : ∀ x, (x ∈ ⨆ i, S i) → Prop}
+ (hp : ∀ (i), ∀ x ∈ S i, C x (mem_iSup_of_mem i ‹_›))
(hmul : ∀ x y hx hy, C x hx → C y hy → C (x * y) (mul_mem ‹_› ‹_›)) {x : M}
(hx : x ∈ ⨆ i, S i) : C x hx :=
by
@@ -208,8 +208,8 @@ theorem supᵢ_induction' (S : ι → Subsemigroup M) {C : ∀ x, (x ∈ ⨆ i,
· exact ⟨_, hp _ _ hx⟩
· rintro ⟨_, Cx⟩ ⟨_, Cy⟩
exact ⟨_, hmul _ _ _ _ Cx Cy⟩
-#align subsemigroup.supr_induction' Subsemigroup.supᵢ_induction'
-#align add_subsemigroup.supr_induction' AddSubsemigroup.supᵢ_induction'
+#align subsemigroup.supr_induction' Subsemigroup.iSup_induction'
+#align add_subsemigroup.supr_induction' AddSubsemigroup.iSup_induction'
end Subsemigroup
mathlib commit https://github.com/leanprover-community/mathlib/commit/9da1b3534b65d9661eb8f42443598a92bbb49211
@@ -109,9 +109,9 @@ theorem coe_supₛ_of_directed_on {S : Set (Subsemigroup M)} (hS : DirectedOn (
/- warning: subsemigroup.mem_sup_left -> Subsemigroup.mem_sup_left is a dubious translation:
lean 3 declaration is
- forall {M : Type.{u1}} [_inst_1 : Mul.{u1} M] {S : Subsemigroup.{u1} M _inst_1} {T : Subsemigroup.{u1} M _inst_1} {x : M}, (Membership.Mem.{u1, u1} M (Subsemigroup.{u1} M _inst_1) (SetLike.hasMem.{u1, u1} (Subsemigroup.{u1} M _inst_1) M (Subsemigroup.setLike.{u1} M _inst_1)) x S) -> (Membership.Mem.{u1, u1} M (Subsemigroup.{u1} M _inst_1) (SetLike.hasMem.{u1, u1} (Subsemigroup.{u1} M _inst_1) M (Subsemigroup.setLike.{u1} M _inst_1)) x (HasSup.sup.{u1} (Subsemigroup.{u1} M _inst_1) (SemilatticeSup.toHasSup.{u1} (Subsemigroup.{u1} M _inst_1) (Lattice.toSemilatticeSup.{u1} (Subsemigroup.{u1} M _inst_1) (CompleteLattice.toLattice.{u1} (Subsemigroup.{u1} M _inst_1) (Subsemigroup.completeLattice.{u1} M _inst_1)))) S T))
+ forall {M : Type.{u1}} [_inst_1 : Mul.{u1} M] {S : Subsemigroup.{u1} M _inst_1} {T : Subsemigroup.{u1} M _inst_1} {x : M}, (Membership.Mem.{u1, u1} M (Subsemigroup.{u1} M _inst_1) (SetLike.hasMem.{u1, u1} (Subsemigroup.{u1} M _inst_1) M (Subsemigroup.setLike.{u1} M _inst_1)) x S) -> (Membership.Mem.{u1, u1} M (Subsemigroup.{u1} M _inst_1) (SetLike.hasMem.{u1, u1} (Subsemigroup.{u1} M _inst_1) M (Subsemigroup.setLike.{u1} M _inst_1)) x (Sup.sup.{u1} (Subsemigroup.{u1} M _inst_1) (SemilatticeSup.toHasSup.{u1} (Subsemigroup.{u1} M _inst_1) (Lattice.toSemilatticeSup.{u1} (Subsemigroup.{u1} M _inst_1) (CompleteLattice.toLattice.{u1} (Subsemigroup.{u1} M _inst_1) (Subsemigroup.completeLattice.{u1} M _inst_1)))) S T))
but is expected to have type
- forall {M : Type.{u1}} [_inst_1 : Mul.{u1} M] {S : Subsemigroup.{u1} M _inst_1} {T : Subsemigroup.{u1} M _inst_1} {x : M}, (Membership.mem.{u1, u1} M (Subsemigroup.{u1} M _inst_1) (SetLike.instMembership.{u1, u1} (Subsemigroup.{u1} M _inst_1) M (Subsemigroup.instSetLikeSubsemigroup.{u1} M _inst_1)) x S) -> (Membership.mem.{u1, u1} M (Subsemigroup.{u1} M _inst_1) (SetLike.instMembership.{u1, u1} (Subsemigroup.{u1} M _inst_1) M (Subsemigroup.instSetLikeSubsemigroup.{u1} M _inst_1)) x (HasSup.sup.{u1} (Subsemigroup.{u1} M _inst_1) (SemilatticeSup.toHasSup.{u1} (Subsemigroup.{u1} M _inst_1) (Lattice.toSemilatticeSup.{u1} (Subsemigroup.{u1} M _inst_1) (CompleteLattice.toLattice.{u1} (Subsemigroup.{u1} M _inst_1) (Subsemigroup.instCompleteLatticeSubsemigroup.{u1} M _inst_1)))) S T))
+ forall {M : Type.{u1}} [_inst_1 : Mul.{u1} M] {S : Subsemigroup.{u1} M _inst_1} {T : Subsemigroup.{u1} M _inst_1} {x : M}, (Membership.mem.{u1, u1} M (Subsemigroup.{u1} M _inst_1) (SetLike.instMembership.{u1, u1} (Subsemigroup.{u1} M _inst_1) M (Subsemigroup.instSetLikeSubsemigroup.{u1} M _inst_1)) x S) -> (Membership.mem.{u1, u1} M (Subsemigroup.{u1} M _inst_1) (SetLike.instMembership.{u1, u1} (Subsemigroup.{u1} M _inst_1) M (Subsemigroup.instSetLikeSubsemigroup.{u1} M _inst_1)) x (Sup.sup.{u1} (Subsemigroup.{u1} M _inst_1) (SemilatticeSup.toSup.{u1} (Subsemigroup.{u1} M _inst_1) (Lattice.toSemilatticeSup.{u1} (Subsemigroup.{u1} M _inst_1) (CompleteLattice.toLattice.{u1} (Subsemigroup.{u1} M _inst_1) (Subsemigroup.instCompleteLatticeSubsemigroup.{u1} M _inst_1)))) S T))
Case conversion may be inaccurate. Consider using '#align subsemigroup.mem_sup_left Subsemigroup.mem_sup_leftₓ'. -/
@[to_additive]
theorem mem_sup_left {S T : Subsemigroup M} : ∀ {x : M}, x ∈ S → x ∈ S ⊔ T :=
@@ -121,9 +121,9 @@ theorem mem_sup_left {S T : Subsemigroup M} : ∀ {x : M}, x ∈ S → x ∈ S
/- warning: subsemigroup.mem_sup_right -> Subsemigroup.mem_sup_right is a dubious translation:
lean 3 declaration is
- forall {M : Type.{u1}} [_inst_1 : Mul.{u1} M] {S : Subsemigroup.{u1} M _inst_1} {T : Subsemigroup.{u1} M _inst_1} {x : M}, (Membership.Mem.{u1, u1} M (Subsemigroup.{u1} M _inst_1) (SetLike.hasMem.{u1, u1} (Subsemigroup.{u1} M _inst_1) M (Subsemigroup.setLike.{u1} M _inst_1)) x T) -> (Membership.Mem.{u1, u1} M (Subsemigroup.{u1} M _inst_1) (SetLike.hasMem.{u1, u1} (Subsemigroup.{u1} M _inst_1) M (Subsemigroup.setLike.{u1} M _inst_1)) x (HasSup.sup.{u1} (Subsemigroup.{u1} M _inst_1) (SemilatticeSup.toHasSup.{u1} (Subsemigroup.{u1} M _inst_1) (Lattice.toSemilatticeSup.{u1} (Subsemigroup.{u1} M _inst_1) (CompleteLattice.toLattice.{u1} (Subsemigroup.{u1} M _inst_1) (Subsemigroup.completeLattice.{u1} M _inst_1)))) S T))
+ forall {M : Type.{u1}} [_inst_1 : Mul.{u1} M] {S : Subsemigroup.{u1} M _inst_1} {T : Subsemigroup.{u1} M _inst_1} {x : M}, (Membership.Mem.{u1, u1} M (Subsemigroup.{u1} M _inst_1) (SetLike.hasMem.{u1, u1} (Subsemigroup.{u1} M _inst_1) M (Subsemigroup.setLike.{u1} M _inst_1)) x T) -> (Membership.Mem.{u1, u1} M (Subsemigroup.{u1} M _inst_1) (SetLike.hasMem.{u1, u1} (Subsemigroup.{u1} M _inst_1) M (Subsemigroup.setLike.{u1} M _inst_1)) x (Sup.sup.{u1} (Subsemigroup.{u1} M _inst_1) (SemilatticeSup.toHasSup.{u1} (Subsemigroup.{u1} M _inst_1) (Lattice.toSemilatticeSup.{u1} (Subsemigroup.{u1} M _inst_1) (CompleteLattice.toLattice.{u1} (Subsemigroup.{u1} M _inst_1) (Subsemigroup.completeLattice.{u1} M _inst_1)))) S T))
but is expected to have type
- forall {M : Type.{u1}} [_inst_1 : Mul.{u1} M] {S : Subsemigroup.{u1} M _inst_1} {T : Subsemigroup.{u1} M _inst_1} {x : M}, (Membership.mem.{u1, u1} M (Subsemigroup.{u1} M _inst_1) (SetLike.instMembership.{u1, u1} (Subsemigroup.{u1} M _inst_1) M (Subsemigroup.instSetLikeSubsemigroup.{u1} M _inst_1)) x T) -> (Membership.mem.{u1, u1} M (Subsemigroup.{u1} M _inst_1) (SetLike.instMembership.{u1, u1} (Subsemigroup.{u1} M _inst_1) M (Subsemigroup.instSetLikeSubsemigroup.{u1} M _inst_1)) x (HasSup.sup.{u1} (Subsemigroup.{u1} M _inst_1) (SemilatticeSup.toHasSup.{u1} (Subsemigroup.{u1} M _inst_1) (Lattice.toSemilatticeSup.{u1} (Subsemigroup.{u1} M _inst_1) (CompleteLattice.toLattice.{u1} (Subsemigroup.{u1} M _inst_1) (Subsemigroup.instCompleteLatticeSubsemigroup.{u1} M _inst_1)))) S T))
+ forall {M : Type.{u1}} [_inst_1 : Mul.{u1} M] {S : Subsemigroup.{u1} M _inst_1} {T : Subsemigroup.{u1} M _inst_1} {x : M}, (Membership.mem.{u1, u1} M (Subsemigroup.{u1} M _inst_1) (SetLike.instMembership.{u1, u1} (Subsemigroup.{u1} M _inst_1) M (Subsemigroup.instSetLikeSubsemigroup.{u1} M _inst_1)) x T) -> (Membership.mem.{u1, u1} M (Subsemigroup.{u1} M _inst_1) (SetLike.instMembership.{u1, u1} (Subsemigroup.{u1} M _inst_1) M (Subsemigroup.instSetLikeSubsemigroup.{u1} M _inst_1)) x (Sup.sup.{u1} (Subsemigroup.{u1} M _inst_1) (SemilatticeSup.toSup.{u1} (Subsemigroup.{u1} M _inst_1) (Lattice.toSemilatticeSup.{u1} (Subsemigroup.{u1} M _inst_1) (CompleteLattice.toLattice.{u1} (Subsemigroup.{u1} M _inst_1) (Subsemigroup.instCompleteLatticeSubsemigroup.{u1} M _inst_1)))) S T))
Case conversion may be inaccurate. Consider using '#align subsemigroup.mem_sup_right Subsemigroup.mem_sup_rightₓ'. -/
@[to_additive]
theorem mem_sup_right {S T : Subsemigroup M} : ∀ {x : M}, x ∈ T → x ∈ S ⊔ T :=
@@ -133,9 +133,9 @@ theorem mem_sup_right {S T : Subsemigroup M} : ∀ {x : M}, x ∈ T → x ∈ S
/- warning: subsemigroup.mul_mem_sup -> Subsemigroup.mul_mem_sup is a dubious translation:
lean 3 declaration is
- forall {M : Type.{u1}} [_inst_1 : Mul.{u1} M] {S : Subsemigroup.{u1} M _inst_1} {T : Subsemigroup.{u1} M _inst_1} {x : M} {y : M}, (Membership.Mem.{u1, u1} M (Subsemigroup.{u1} M _inst_1) (SetLike.hasMem.{u1, u1} (Subsemigroup.{u1} M _inst_1) M (Subsemigroup.setLike.{u1} M _inst_1)) x S) -> (Membership.Mem.{u1, u1} M (Subsemigroup.{u1} M _inst_1) (SetLike.hasMem.{u1, u1} (Subsemigroup.{u1} M _inst_1) M (Subsemigroup.setLike.{u1} M _inst_1)) y T) -> (Membership.Mem.{u1, u1} M (Subsemigroup.{u1} M _inst_1) (SetLike.hasMem.{u1, u1} (Subsemigroup.{u1} M _inst_1) M (Subsemigroup.setLike.{u1} M _inst_1)) (HMul.hMul.{u1, u1, u1} M M M (instHMul.{u1} M _inst_1) x y) (HasSup.sup.{u1} (Subsemigroup.{u1} M _inst_1) (SemilatticeSup.toHasSup.{u1} (Subsemigroup.{u1} M _inst_1) (Lattice.toSemilatticeSup.{u1} (Subsemigroup.{u1} M _inst_1) (CompleteLattice.toLattice.{u1} (Subsemigroup.{u1} M _inst_1) (Subsemigroup.completeLattice.{u1} M _inst_1)))) S T))
+ forall {M : Type.{u1}} [_inst_1 : Mul.{u1} M] {S : Subsemigroup.{u1} M _inst_1} {T : Subsemigroup.{u1} M _inst_1} {x : M} {y : M}, (Membership.Mem.{u1, u1} M (Subsemigroup.{u1} M _inst_1) (SetLike.hasMem.{u1, u1} (Subsemigroup.{u1} M _inst_1) M (Subsemigroup.setLike.{u1} M _inst_1)) x S) -> (Membership.Mem.{u1, u1} M (Subsemigroup.{u1} M _inst_1) (SetLike.hasMem.{u1, u1} (Subsemigroup.{u1} M _inst_1) M (Subsemigroup.setLike.{u1} M _inst_1)) y T) -> (Membership.Mem.{u1, u1} M (Subsemigroup.{u1} M _inst_1) (SetLike.hasMem.{u1, u1} (Subsemigroup.{u1} M _inst_1) M (Subsemigroup.setLike.{u1} M _inst_1)) (HMul.hMul.{u1, u1, u1} M M M (instHMul.{u1} M _inst_1) x y) (Sup.sup.{u1} (Subsemigroup.{u1} M _inst_1) (SemilatticeSup.toHasSup.{u1} (Subsemigroup.{u1} M _inst_1) (Lattice.toSemilatticeSup.{u1} (Subsemigroup.{u1} M _inst_1) (CompleteLattice.toLattice.{u1} (Subsemigroup.{u1} M _inst_1) (Subsemigroup.completeLattice.{u1} M _inst_1)))) S T))
but is expected to have type
- forall {M : Type.{u1}} [_inst_1 : Mul.{u1} M] {S : Subsemigroup.{u1} M _inst_1} {T : Subsemigroup.{u1} M _inst_1} {x : M} {y : M}, (Membership.mem.{u1, u1} M (Subsemigroup.{u1} M _inst_1) (SetLike.instMembership.{u1, u1} (Subsemigroup.{u1} M _inst_1) M (Subsemigroup.instSetLikeSubsemigroup.{u1} M _inst_1)) x S) -> (Membership.mem.{u1, u1} M (Subsemigroup.{u1} M _inst_1) (SetLike.instMembership.{u1, u1} (Subsemigroup.{u1} M _inst_1) M (Subsemigroup.instSetLikeSubsemigroup.{u1} M _inst_1)) y T) -> (Membership.mem.{u1, u1} M (Subsemigroup.{u1} M _inst_1) (SetLike.instMembership.{u1, u1} (Subsemigroup.{u1} M _inst_1) M (Subsemigroup.instSetLikeSubsemigroup.{u1} M _inst_1)) (HMul.hMul.{u1, u1, u1} M M M (instHMul.{u1} M _inst_1) x y) (HasSup.sup.{u1} (Subsemigroup.{u1} M _inst_1) (SemilatticeSup.toHasSup.{u1} (Subsemigroup.{u1} M _inst_1) (Lattice.toSemilatticeSup.{u1} (Subsemigroup.{u1} M _inst_1) (CompleteLattice.toLattice.{u1} (Subsemigroup.{u1} M _inst_1) (Subsemigroup.instCompleteLatticeSubsemigroup.{u1} M _inst_1)))) S T))
+ forall {M : Type.{u1}} [_inst_1 : Mul.{u1} M] {S : Subsemigroup.{u1} M _inst_1} {T : Subsemigroup.{u1} M _inst_1} {x : M} {y : M}, (Membership.mem.{u1, u1} M (Subsemigroup.{u1} M _inst_1) (SetLike.instMembership.{u1, u1} (Subsemigroup.{u1} M _inst_1) M (Subsemigroup.instSetLikeSubsemigroup.{u1} M _inst_1)) x S) -> (Membership.mem.{u1, u1} M (Subsemigroup.{u1} M _inst_1) (SetLike.instMembership.{u1, u1} (Subsemigroup.{u1} M _inst_1) M (Subsemigroup.instSetLikeSubsemigroup.{u1} M _inst_1)) y T) -> (Membership.mem.{u1, u1} M (Subsemigroup.{u1} M _inst_1) (SetLike.instMembership.{u1, u1} (Subsemigroup.{u1} M _inst_1) M (Subsemigroup.instSetLikeSubsemigroup.{u1} M _inst_1)) (HMul.hMul.{u1, u1, u1} M M M (instHMul.{u1} M _inst_1) x y) (Sup.sup.{u1} (Subsemigroup.{u1} M _inst_1) (SemilatticeSup.toSup.{u1} (Subsemigroup.{u1} M _inst_1) (Lattice.toSemilatticeSup.{u1} (Subsemigroup.{u1} M _inst_1) (CompleteLattice.toLattice.{u1} (Subsemigroup.{u1} M _inst_1) (Subsemigroup.instCompleteLatticeSubsemigroup.{u1} M _inst_1)))) S T))
Case conversion may be inaccurate. Consider using '#align subsemigroup.mul_mem_sup Subsemigroup.mul_mem_supₓ'. -/
@[to_additive]
theorem mul_mem_sup {S T : Subsemigroup M} {x y : M} (hx : x ∈ S) (hy : y ∈ T) : x * y ∈ S ⊔ T :=
mathlib commit https://github.com/leanprover-community/mathlib/commit/bd9851ca476957ea4549eb19b40e7b5ade9428cc
@@ -48,9 +48,9 @@ theorem mem_iSup_of_directed {S : ι → Subsemigroup M} (hS : Directed (· ≤
suffices x ∈ closure (⋃ i, (S i : Set M)) → ∃ i, x ∈ S i by
simpa only [closure_iUnion, closure_eq (S _)] using this
refine fun hx ↦ closure_induction hx (fun y hy ↦ mem_iUnion.mp hy) ?_
- · rintro x y ⟨i, hi⟩ ⟨j, hj⟩
- rcases hS i j with ⟨k, hki, hkj⟩
- exact ⟨k, (S k).mul_mem (hki hi) (hkj hj)⟩
+ rintro x y ⟨i, hi⟩ ⟨j, hj⟩
+ rcases hS i j with ⟨k, hki, hkj⟩
+ exact ⟨k, (S k).mul_mem (hki hi) (hkj hj)⟩
#align subsemigroup.mem_supr_of_directed Subsemigroup.mem_iSup_of_directed
#align add_subsemigroup.mem_supr_of_directed AddSubsemigroup.mem_iSup_of_directed
@@ -119,11 +119,11 @@ then it holds for all elements of the supremum of `S`. -/
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} (hx₁ : x₁ ∈ ⨆ i, S i)
- (hp : ∀ i, ∀ x₂ ∈ S i, C x₂) (hmul : ∀ x y, C x → C y → C (x * y)) : C x₁ := by
+ (mem : ∀ i, ∀ x₂ ∈ S i, C x₂) (mul : ∀ x y, C x → C y → C (x * y)) : C x₁ := by
rw [iSup_eq_closure] at hx₁
- refine' closure_induction hx₁ (fun x₂ hx₂ => _) hmul
+ refine' closure_induction hx₁ (fun x₂ hx₂ => _) mul
obtain ⟨i, hi⟩ := Set.mem_iUnion.mp hx₂
- exact hp _ _ hi
+ exact mem _ _ hi
#align subsemigroup.supr_induction Subsemigroup.iSup_induction
#align add_subsemigroup.supr_induction AddSubsemigroup.iSup_induction
@@ -131,15 +131,15 @@ theorem iSup_induction (S : ι → Subsemigroup M) {C : M → Prop} {x₁ : M} (
@[to_additive (attr := elab_as_elim)
"A dependent version of `AddSubsemigroup.iSup_induction`."]
theorem iSup_induction' (S : ι → Subsemigroup M) {C : ∀ x, (x ∈ ⨆ i, S i) → Prop}
- (hp : ∀ (i) (x) (hxS : x ∈ S i), C x (mem_iSup_of_mem i ‹_›))
- (hmul : ∀ x y hx hy, C x hx → C y hy → C (x * y) (mul_mem ‹_› ‹_›)) {x₁ : M}
+ (mem : ∀ (i) (x) (hxS : x ∈ S i), C x (mem_iSup_of_mem i ‹_›))
+ (mul : ∀ x y hx hy, C x hx → C y hy → C (x * y) (mul_mem ‹_› ‹_›)) {x₁ : M}
(hx₁ : x₁ ∈ ⨆ i, S i) : C x₁ hx₁ := by
refine Exists.elim ?_ fun (hx₁' : x₁ ∈ ⨆ i, S i) (hc : C x₁ hx₁') => hc
refine @iSup_induction _ _ _ S (fun x' => ∃ hx'', C x' hx'') _ hx₁
(fun i x₂ hx₂ => ?_) fun x₃ y => ?_
- · exact ⟨_, hp _ _ hx₂⟩
+ · exact ⟨_, mem _ _ hx₂⟩
· rintro ⟨_, Cx⟩ ⟨_, Cy⟩
- exact ⟨_, hmul _ _ _ _ Cx Cy⟩
+ exact ⟨_, mul _ _ _ _ Cx Cy⟩
#align subsemigroup.supr_induction' Subsemigroup.iSup_induction'
#align add_subsemigroup.supr_induction' AddSubsemigroup.iSup_induction'
@@ -119,7 +119,7 @@ then it holds for all elements of the supremum of `S`. -/
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} (hx₁ : x₁ ∈ ⨆ i, S i)
- (hp : ∀ (i) (x₂ : M) (_hxS : x₂ ∈ S i), C x₂) (hmul : ∀ x y, C x → C y → C (x * y)) : C x₁ := by
+ (hp : ∀ i, ∀ x₂ ∈ S i, C x₂) (hmul : ∀ x y, C x → C y → C (x * y)) : C x₁ := by
rw [iSup_eq_closure] at hx₁
refine' closure_induction hx₁ (fun x₂ hx₂ => _) hmul
obtain ⟨i, hi⟩ := Set.mem_iUnion.mp hx₂
@@ -44,10 +44,10 @@ namespace Subsemigroup
@[to_additive]
theorem mem_iSup_of_directed {S : ι → Subsemigroup M} (hS : Directed (· ≤ ·) S) {x : M} :
(x ∈ ⨆ i, S i) ↔ ∃ i, x ∈ S i := by
- refine' ⟨_, fun ⟨i, hi⟩ => (SetLike.le_def.1 <| le_iSup S i) hi⟩
+ refine ⟨?_, fun ⟨i, hi⟩ ↦ le_iSup S i hi⟩
suffices x ∈ closure (⋃ i, (S i : Set M)) → ∃ i, x ∈ S i by
simpa only [closure_iUnion, closure_eq (S _)] using this
- refine' fun hx => closure_induction hx (fun y hy => mem_iUnion.mp hy) _
+ refine fun hx ↦ closure_induction hx (fun y hy ↦ mem_iUnion.mp hy) ?_
· rintro x y ⟨i, hi⟩ ⟨j, hj⟩
rcases hS i j with ⟨k, hki, hkj⟩
exact ⟨k, (S k).mul_mem (hki hi) (hkj hj)⟩
@@ -56,7 +56,7 @@ theorem mem_iSup_of_directed {S : ι → Subsemigroup M} (hS : Directed (· ≤
@[to_additive]
theorem coe_iSup_of_directed {S : ι → Subsemigroup M} (hS : Directed (· ≤ ·) S) :
- ((⨆ i, S i : Subsemigroup M) : Set M) = ⋃ i, ↑(S i) :=
+ ((⨆ i, S i : Subsemigroup M) : Set M) = ⋃ i, S i :=
Set.ext fun x => by simp [mem_iSup_of_directed hS]
#align subsemigroup.coe_supr_of_directed Subsemigroup.coe_iSup_of_directed
#align add_subsemigroup.coe_supr_of_directed AddSubsemigroup.coe_iSup_of_directed
Type _
and Sort _
(#6499)
We remove all possible occurences of Type _
and Sort _
in favor of Type*
and Sort*
.
This has nice performance benefits.
@@ -29,7 +29,7 @@ stub and only provides rudimentary support.
subsemigroup
-/
-variable {ι : Sort _} {M A B : Type _}
+variable {ι : Sort*} {M A B : Type*}
section NonAssoc
@@ -2,14 +2,11 @@
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
+#align_import group_theory.subsemigroup.membership from "leanprover-community/mathlib"@"6cb77a8eaff0ddd100e87b1591c6d3ad319514ff"
+
/-!
# Subsemigroups: membership criteria
fix-comments.py
on all files.@@ -42,7 +42,7 @@ open Set
namespace Subsemigroup
--- TODO: this section can be generalized to `[mul_mem_class B M] [complete_lattice B]`
+-- TODO: this section can be generalized to `[MulMemClass B M] [CompleteLattice B]`
-- such that `complete_lattice.le` coincides with `set_like.le`
@[to_additive]
theorem mem_iSup_of_directed {S : ι → Subsemigroup M} (hS : Directed (· ≤ ·) S) {x : M} :
sSup
/iSup
(#3938)
As discussed on Zulip
supₛ
→ sSup
infₛ
→ sInf
supᵢ
→ iSup
infᵢ
→ iInf
bsupₛ
→ bsSup
binfₛ
→ bsInf
bsupᵢ
→ biSup
binfᵢ
→ biInf
csupₛ
→ csSup
cinfₛ
→ csInf
csupᵢ
→ ciSup
cinfᵢ
→ ciInf
unionₛ
→ sUnion
interₛ
→ sInter
unionᵢ
→ iUnion
interᵢ
→ iInter
bunionₛ
→ bsUnion
binterₛ
→ bsInter
bunionᵢ
→ biUnion
binterᵢ
→ biInter
Co-authored-by: Parcly Taxel <reddeloostw@gmail.com>
@@ -17,8 +17,8 @@ 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_supᵢ_of_directed`, `coe_supᵢ_of_directed`, `mem_supₛ_of_directed_on`,
- `coe_supₛ_of_directed_on`: the supremum of a directed collection of subsemigroup is their union.
+* `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
@@ -45,39 +45,39 @@ namespace Subsemigroup
-- TODO: this section can be generalized to `[mul_mem_class B M] [complete_lattice B]`
-- such that `complete_lattice.le` coincides with `set_like.le`
@[to_additive]
-theorem mem_supᵢ_of_directed {S : ι → Subsemigroup M} (hS : Directed (· ≤ ·) S) {x : M} :
+theorem mem_iSup_of_directed {S : ι → Subsemigroup M} (hS : Directed (· ≤ ·) S) {x : M} :
(x ∈ ⨆ i, S i) ↔ ∃ i, x ∈ S i := by
- refine' ⟨_, fun ⟨i, hi⟩ => (SetLike.le_def.1 <| le_supᵢ S i) hi⟩
+ refine' ⟨_, fun ⟨i, hi⟩ => (SetLike.le_def.1 <| le_iSup S i) hi⟩
suffices x ∈ closure (⋃ i, (S i : Set M)) → ∃ i, x ∈ S i by
- simpa only [closure_unionᵢ, closure_eq (S _)] using this
- refine' fun hx => closure_induction hx (fun y hy => mem_unionᵢ.mp hy) _
+ simpa only [closure_iUnion, closure_eq (S _)] using this
+ refine' fun hx => closure_induction hx (fun y hy => mem_iUnion.mp hy) _
· rintro x y ⟨i, hi⟩ ⟨j, hj⟩
rcases hS i j with ⟨k, hki, hkj⟩
exact ⟨k, (S k).mul_mem (hki hi) (hkj hj)⟩
-#align subsemigroup.mem_supr_of_directed Subsemigroup.mem_supᵢ_of_directed
-#align add_subsemigroup.mem_supr_of_directed AddSubsemigroup.mem_supᵢ_of_directed
+#align subsemigroup.mem_supr_of_directed Subsemigroup.mem_iSup_of_directed
+#align add_subsemigroup.mem_supr_of_directed AddSubsemigroup.mem_iSup_of_directed
@[to_additive]
-theorem coe_supᵢ_of_directed {S : ι → Subsemigroup M} (hS : Directed (· ≤ ·) S) :
+theorem coe_iSup_of_directed {S : ι → Subsemigroup M} (hS : Directed (· ≤ ·) S) :
((⨆ i, S i : Subsemigroup M) : Set M) = ⋃ i, ↑(S i) :=
- Set.ext fun x => by simp [mem_supᵢ_of_directed hS]
-#align subsemigroup.coe_supr_of_directed Subsemigroup.coe_supᵢ_of_directed
-#align add_subsemigroup.coe_supr_of_directed AddSubsemigroup.coe_supᵢ_of_directed
+ Set.ext fun x => by simp [mem_iSup_of_directed hS]
+#align subsemigroup.coe_supr_of_directed Subsemigroup.coe_iSup_of_directed
+#align add_subsemigroup.coe_supr_of_directed AddSubsemigroup.coe_iSup_of_directed
@[to_additive]
-theorem mem_supₛ_of_directed_on {S : Set (Subsemigroup M)} (hS : DirectedOn (· ≤ ·) S) {x : M} :
- x ∈ supₛ S ↔ ∃ s ∈ S, x ∈ s := by
- simp only [supₛ_eq_supᵢ', mem_supᵢ_of_directed hS.directed_val, SetCoe.exists, Subtype.coe_mk,
+theorem mem_sSup_of_directed_on {S : Set (Subsemigroup M)} (hS : DirectedOn (· ≤ ·) S) {x : M} :
+ x ∈ sSup S ↔ ∃ s ∈ S, x ∈ s := by
+ simp only [sSup_eq_iSup', mem_iSup_of_directed hS.directed_val, SetCoe.exists, Subtype.coe_mk,
exists_prop]
-#align subsemigroup.mem_Sup_of_directed_on Subsemigroup.mem_supₛ_of_directed_on
-#align add_subsemigroup.mem_Sup_of_directed_on AddSubsemigroup.mem_supₛ_of_directed_on
+#align subsemigroup.mem_Sup_of_directed_on Subsemigroup.mem_sSup_of_directed_on
+#align add_subsemigroup.mem_Sup_of_directed_on AddSubsemigroup.mem_sSup_of_directed_on
@[to_additive]
-theorem coe_supₛ_of_directed_on {S : Set (Subsemigroup M)} (hS : DirectedOn (· ≤ ·) S) :
- (↑(supₛ S) : Set M) = ⋃ s ∈ S, ↑s :=
- Set.ext fun x => by simp [mem_supₛ_of_directed_on hS]
-#align subsemigroup.coe_Sup_of_directed_on Subsemigroup.coe_supₛ_of_directed_on
-#align add_subsemigroup.coe_Sup_of_directed_on AddSubsemigroup.coe_supₛ_of_directed_on
+theorem coe_sSup_of_directed_on {S : Set (Subsemigroup M)} (hS : DirectedOn (· ≤ ·) S) :
+ (↑(sSup S) : Set M) = ⋃ s ∈ S, ↑s :=
+ Set.ext fun x => by simp [mem_sSup_of_directed_on hS]
+#align subsemigroup.coe_Sup_of_directed_on Subsemigroup.coe_sSup_of_directed_on
+#align add_subsemigroup.coe_Sup_of_directed_on AddSubsemigroup.coe_sSup_of_directed_on
@[to_additive]
theorem mem_sup_left {S T : Subsemigroup M} : ∀ {x : M}, x ∈ S → x ∈ S ⊔ T := by
@@ -100,19 +100,19 @@ theorem mul_mem_sup {S T : Subsemigroup M} {x y : M} (hx : x ∈ S) (hy : y ∈
#align add_subsemigroup.add_mem_sup AddSubsemigroup.add_mem_sup
@[to_additive]
-theorem mem_supᵢ_of_mem {S : ι → Subsemigroup M} (i : ι) : ∀ {x : M}, x ∈ S i → x ∈ supᵢ S := by
- have : S i ≤ supᵢ S := le_supᵢ _ _
+theorem mem_iSup_of_mem {S : ι → Subsemigroup M} (i : ι) : ∀ {x : M}, x ∈ S i → x ∈ iSup S := by
+ have : S i ≤ iSup S := le_iSup _ _
tauto
-#align subsemigroup.mem_supr_of_mem Subsemigroup.mem_supᵢ_of_mem
-#align add_subsemigroup.mem_supr_of_mem AddSubsemigroup.mem_supᵢ_of_mem
+#align subsemigroup.mem_supr_of_mem Subsemigroup.mem_iSup_of_mem
+#align add_subsemigroup.mem_supr_of_mem AddSubsemigroup.mem_iSup_of_mem
@[to_additive]
-theorem mem_supₛ_of_mem {S : Set (Subsemigroup M)} {s : Subsemigroup M} (hs : s ∈ S) :
- ∀ {x : M}, x ∈ s → x ∈ supₛ S := by
- have : s ≤ supₛ S := le_supₛ hs
+theorem mem_sSup_of_mem {S : Set (Subsemigroup M)} {s : Subsemigroup M} (hs : s ∈ S) :
+ ∀ {x : M}, x ∈ s → x ∈ sSup S := by
+ have : s ≤ sSup S := le_sSup hs
tauto
-#align subsemigroup.mem_Sup_of_mem Subsemigroup.mem_supₛ_of_mem
-#align add_subsemigroup.mem_Sup_of_mem AddSubsemigroup.mem_supₛ_of_mem
+#align subsemigroup.mem_Sup_of_mem Subsemigroup.mem_sSup_of_mem
+#align add_subsemigroup.mem_Sup_of_mem 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,
@@ -121,30 +121,30 @@ then it holds for all elements of the supremum of `S`. -/
"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 supᵢ_induction (S : ι → Subsemigroup M) {C : M → Prop} {x₁ : M} (hx₁ : x₁ ∈ ⨆ i, S i)
+theorem iSup_induction (S : ι → Subsemigroup M) {C : M → Prop} {x₁ : M} (hx₁ : x₁ ∈ ⨆ i, S i)
(hp : ∀ (i) (x₂ : M) (_hxS : x₂ ∈ S i), C x₂) (hmul : ∀ x y, C x → C y → C (x * y)) : C x₁ := by
- rw [supᵢ_eq_closure] at hx₁
+ rw [iSup_eq_closure] at hx₁
refine' closure_induction hx₁ (fun x₂ hx₂ => _) hmul
- obtain ⟨i, hi⟩ := Set.mem_unionᵢ.mp hx₂
+ obtain ⟨i, hi⟩ := Set.mem_iUnion.mp hx₂
exact hp _ _ hi
-#align subsemigroup.supr_induction Subsemigroup.supᵢ_induction
-#align add_subsemigroup.supr_induction AddSubsemigroup.supᵢ_induction
+#align subsemigroup.supr_induction Subsemigroup.iSup_induction
+#align add_subsemigroup.supr_induction AddSubsemigroup.iSup_induction
-/-- A dependent version of `Subsemigroup.supᵢ_induction`. -/
+/-- A dependent version of `Subsemigroup.iSup_induction`. -/
@[to_additive (attr := elab_as_elim)
-"A dependent version of `AddSubsemigroup.supᵢ_induction`."]
-theorem supᵢ_induction' (S : ι → Subsemigroup M) {C : ∀ x, (x ∈ ⨆ i, S i) → Prop}
- (hp : ∀ (i) (x) (hxS : x ∈ S i), C x (mem_supᵢ_of_mem i ‹_›))
+"A dependent version of `AddSubsemigroup.iSup_induction`."]
+theorem iSup_induction' (S : ι → Subsemigroup M) {C : ∀ x, (x ∈ ⨆ i, S i) → Prop}
+ (hp : ∀ (i) (x) (hxS : x ∈ S i), C x (mem_iSup_of_mem i ‹_›))
(hmul : ∀ x y hx hy, C x hx → C y hy → C (x * y) (mul_mem ‹_› ‹_›)) {x₁ : M}
(hx₁ : x₁ ∈ ⨆ i, S i) : C x₁ hx₁ := by
refine Exists.elim ?_ fun (hx₁' : x₁ ∈ ⨆ i, S i) (hc : C x₁ hx₁') => hc
- refine @supᵢ_induction _ _ _ S (fun x' => ∃ hx'', C x' hx'') _ hx₁
+ refine @iSup_induction _ _ _ S (fun x' => ∃ hx'', C x' hx'') _ hx₁
(fun i x₂ hx₂ => ?_) fun x₃ y => ?_
· exact ⟨_, hp _ _ hx₂⟩
· rintro ⟨_, Cx⟩ ⟨_, Cy⟩
exact ⟨_, hmul _ _ _ _ Cx Cy⟩
-#align subsemigroup.supr_induction' Subsemigroup.supᵢ_induction'
-#align add_subsemigroup.supr_induction' AddSubsemigroup.supᵢ_induction'
+#align subsemigroup.supr_induction' Subsemigroup.iSup_induction'
+#align add_subsemigroup.supr_induction' AddSubsemigroup.iSup_induction'
end Subsemigroup
@@ -55,12 +55,14 @@ theorem mem_supᵢ_of_directed {S : ι → Subsemigroup M} (hS : Directed (·
rcases hS i j with ⟨k, hki, hkj⟩
exact ⟨k, (S k).mul_mem (hki hi) (hkj hj)⟩
#align subsemigroup.mem_supr_of_directed Subsemigroup.mem_supᵢ_of_directed
+#align add_subsemigroup.mem_supr_of_directed AddSubsemigroup.mem_supᵢ_of_directed
@[to_additive]
theorem coe_supᵢ_of_directed {S : ι → Subsemigroup M} (hS : Directed (· ≤ ·) S) :
((⨆ i, S i : Subsemigroup M) : Set M) = ⋃ i, ↑(S i) :=
Set.ext fun x => by simp [mem_supᵢ_of_directed hS]
#align subsemigroup.coe_supr_of_directed Subsemigroup.coe_supᵢ_of_directed
+#align add_subsemigroup.coe_supr_of_directed AddSubsemigroup.coe_supᵢ_of_directed
@[to_additive]
theorem mem_supₛ_of_directed_on {S : Set (Subsemigroup M)} (hS : DirectedOn (· ≤ ·) S) {x : M} :
@@ -68,35 +70,41 @@ theorem mem_supₛ_of_directed_on {S : Set (Subsemigroup M)} (hS : DirectedOn (
simp only [supₛ_eq_supᵢ', mem_supᵢ_of_directed hS.directed_val, SetCoe.exists, Subtype.coe_mk,
exists_prop]
#align subsemigroup.mem_Sup_of_directed_on Subsemigroup.mem_supₛ_of_directed_on
+#align add_subsemigroup.mem_Sup_of_directed_on AddSubsemigroup.mem_supₛ_of_directed_on
@[to_additive]
theorem coe_supₛ_of_directed_on {S : Set (Subsemigroup M)} (hS : DirectedOn (· ≤ ·) S) :
(↑(supₛ S) : Set M) = ⋃ s ∈ S, ↑s :=
Set.ext fun x => by simp [mem_supₛ_of_directed_on hS]
#align subsemigroup.coe_Sup_of_directed_on Subsemigroup.coe_supₛ_of_directed_on
+#align add_subsemigroup.coe_Sup_of_directed_on AddSubsemigroup.coe_supₛ_of_directed_on
@[to_additive]
theorem mem_sup_left {S T : Subsemigroup M} : ∀ {x : M}, x ∈ S → x ∈ S ⊔ T := by
have : S ≤ S ⊔ T := le_sup_left
tauto
#align subsemigroup.mem_sup_left Subsemigroup.mem_sup_left
+#align add_subsemigroup.mem_sup_left AddSubsemigroup.mem_sup_left
@[to_additive]
theorem mem_sup_right {S T : Subsemigroup M} : ∀ {x : M}, x ∈ T → x ∈ S ⊔ T := by
have : T ≤ S ⊔ T := le_sup_right
tauto
#align subsemigroup.mem_sup_right Subsemigroup.mem_sup_right
+#align add_subsemigroup.mem_sup_right AddSubsemigroup.mem_sup_right
@[to_additive]
theorem mul_mem_sup {S T : Subsemigroup M} {x y : M} (hx : x ∈ S) (hy : y ∈ T) : x * y ∈ S ⊔ T :=
mul_mem (mem_sup_left hx) (mem_sup_right hy)
#align subsemigroup.mul_mem_sup Subsemigroup.mul_mem_sup
+#align add_subsemigroup.add_mem_sup AddSubsemigroup.add_mem_sup
@[to_additive]
theorem mem_supᵢ_of_mem {S : ι → Subsemigroup M} (i : ι) : ∀ {x : M}, x ∈ S i → x ∈ supᵢ S := by
have : S i ≤ supᵢ S := le_supᵢ _ _
tauto
#align subsemigroup.mem_supr_of_mem Subsemigroup.mem_supᵢ_of_mem
+#align add_subsemigroup.mem_supr_of_mem AddSubsemigroup.mem_supᵢ_of_mem
@[to_additive]
theorem mem_supₛ_of_mem {S : Set (Subsemigroup M)} {s : Subsemigroup M} (hs : s ∈ S) :
@@ -104,6 +112,7 @@ theorem mem_supₛ_of_mem {S : Set (Subsemigroup M)} {s : Subsemigroup M} (hs :
have : s ≤ supₛ S := le_supₛ hs
tauto
#align subsemigroup.mem_Sup_of_mem Subsemigroup.mem_supₛ_of_mem
+#align add_subsemigroup.mem_Sup_of_mem AddSubsemigroup.mem_supₛ_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,
@@ -119,6 +128,7 @@ theorem supᵢ_induction (S : ι → Subsemigroup M) {C : M → Prop} {x₁ : M}
obtain ⟨i, hi⟩ := Set.mem_unionᵢ.mp hx₂
exact hp _ _ hi
#align subsemigroup.supr_induction Subsemigroup.supᵢ_induction
+#align add_subsemigroup.supr_induction AddSubsemigroup.supᵢ_induction
/-- A dependent version of `Subsemigroup.supᵢ_induction`. -/
@[to_additive (attr := elab_as_elim)
@@ -134,6 +144,7 @@ theorem supᵢ_induction' (S : ι → Subsemigroup M) {C : ∀ x, (x ∈ ⨆ i,
· rintro ⟨_, Cx⟩ ⟨_, Cy⟩
exact ⟨_, hmul _ _ _ _ Cx Cy⟩
#align subsemigroup.supr_induction' Subsemigroup.supᵢ_induction'
+#align add_subsemigroup.supr_induction' AddSubsemigroup.supᵢ_induction'
end Subsemigroup
to_additive
is @[to_additive (attrs := simp, ext, simps)]
simp
and simps
attributes to the to_additive
-dictionary.simp
-attributes). In particular it's possible that norm_cast
might generate some auxiliary declarations.to_additive
and simps
from the Simps
file to the toAdditive
file for uniformity.@[reassoc]
Co-authored-by: Johan Commelin <johan@commelin.net> Co-authored-by: Scott Morrison <scott.morrison@gmail.com>
@@ -108,7 +108,8 @@ theorem mem_supₛ_of_mem {S : Set (Subsemigroup M)} {s : Subsemigroup M} (hs :
/-- 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`. -/
-@[elab_as_elim, to_additive "An induction principle for elements of `⨆ i, S i`. If `C` holds all
+@[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 supᵢ_induction (S : ι → Subsemigroup M) {C : M → Prop} {x₁ : M} (hx₁ : x₁ ∈ ⨆ i, S i)
@@ -120,7 +121,8 @@ theorem supᵢ_induction (S : ι → Subsemigroup M) {C : M → Prop} {x₁ : M}
#align subsemigroup.supr_induction Subsemigroup.supᵢ_induction
/-- A dependent version of `Subsemigroup.supᵢ_induction`. -/
-@[elab_as_elim, to_additive "A dependent version of `AddSubsemigroup.supᵢ_induction`."]
+@[to_additive (attr := elab_as_elim)
+"A dependent version of `AddSubsemigroup.supᵢ_induction`."]
theorem supᵢ_induction' (S : ι → Subsemigroup M) {C : ∀ x, (x ∈ ⨆ i, S i) → Prop}
(hp : ∀ (i) (x) (hxS : x ∈ S i), C x (mem_supᵢ_of_mem i ‹_›))
(hmul : ∀ x y hx hy, C x hx → C y hy → C (x * y) (mul_mem ‹_› ‹_›)) {x₁ : M}
All dependencies are ported!