ruc-ai4math/mathlib_handler_benchmark_410 huggingface dataset:
-- AddSubgroup.bot_or_nontrivial
@[to_additive "A subgroup is either the trivial subgroup or nontrivial."]
theorem bot_or_nontrivial (H : Subgroup G) : H = ⊥ ∨ Nontrivial H 
Arguments: {G : Type u_1} [AddGroup G] (H : AddSubgroup G)
Goal: H = ⊥ ∨ Nontrivial ↥H
-- Subgroup.bot_or_nontrivial
@[to_additive "A subgroup is either the trivial subgroup or nontrivial."]
theorem bot_or_nontrivial (H : Subgroup G) : H = ⊥ ∨ Nontrivial H 
Arguments: {G : Type u_1} [Group G] (H : Subgroup G)
Goal: H = ⊥ ∨ Nontrivial ↥H
-- AddSubgroup.bot_or_exists_ne_zero
@[to_additive "A subgroup is either the trivial subgroup or contains a nonzero element."]
theorem bot_or_exists_ne_one (H : Subgroup G) : H = ⊥ ∨ ∃ x ∈ H, x ≠ (1 : G) 
Arguments: {G : Type u_1} [AddGroup G] (H : AddSubgroup G)
Goal: H = ⊥ ∨ ∃ x ∈ H, x ≠ 0
-- Subgroup.bot_or_exists_ne_one
@[to_additive "A subgroup is either the trivial subgroup or contains a nonzero element."]
theorem bot_or_exists_ne_one (H : Subgroup G) : H = ⊥ ∨ ∃ x ∈ H, x ≠ (1 : G) 
Arguments: {G : Type u_1} [Group G] (H : Subgroup G)
Goal: H = ⊥ ∨ ∃ x ∈ H, x ≠ 1
-- Subgroup.ne_bot_iff_exists_ne_one
@[to_additive]
lemma ne_bot_iff_exists_ne_one {H : Subgroup G} : H ≠ ⊥ ↔ ∃ a : ↥H, a ≠ 1 
Arguments: {G : Type u_1} [Group G] {H : Subgroup G}
Goal: H ≠ ⊥ ↔ ∃ a, a ≠ 1
-- AddSubgroup.ne_bot_iff_exists_ne_zero
@[to_additive]
lemma ne_bot_iff_exists_ne_one {H : Subgroup G} : H ≠ ⊥ ↔ ∃ a : ↥H, a ≠ 1 
Arguments: {G : Type u_1} [AddGroup G] {H : AddSubgroup G}
Goal: H ≠ ⊥ ↔ ∃ a, a ≠ 0
-- AddSubgroup.coe_inf
@[to_additive (attr := simp)]
theorem coe_inf (p p' : Subgroup G) : ((p ⊓ p' : Subgroup G) : Set G) = (p : Set G) ∩ p' 
Arguments: {G : Type u_1} [AddGroup G] (p p' : AddSubgroup G)
Goal: ↑(p ⊓ p') = ↑p ∩ ↑p'
-- Subgroup.coe_inf
@[to_additive (attr := simp)]
theorem coe_inf (p p' : Subgroup G) : ((p ⊓ p' : Subgroup G) : Set G) = (p : Set G) ∩ p' 
Arguments: {G : Type u_1} [Group G] (p p' : Subgroup G)
Goal: ↑(p ⊓ p') = ↑p ∩ ↑p'
-- AddSubgroup.mem_inf
@[to_additive (attr := simp)]
theorem mem_inf {p p' : Subgroup G} {x : G} : x ∈ p ⊓ p' ↔ x ∈ p ∧ x ∈ p' 
Arguments: {G : Type u_1} [AddGroup G] {p p' : AddSubgroup G} {x : G}
Goal: x ∈ p ⊓ p' ↔ x ∈ p ∧ x ∈ p'
-- Subgroup.mem_inf
@[to_additive (attr := simp)]
theorem mem_inf {p p' : Subgroup G} {x : G} : x ∈ p ⊓ p' ↔ x ∈ p ∧ x ∈ p' 
Arguments: {G : Type u_1} [Group G] {p p' : Subgroup G} {x : G}
Goal: x ∈ p ⊓ p' ↔ x ∈ p ∧ x ∈ p'
-- Subgroup.coe_sInf
@[to_additive (attr := simp, norm_cast)]
theorem coe_sInf (H : Set (Subgroup G)) : ((sInf H : Subgroup G) : Set G) = ⋂ s ∈ H, ↑s 
Arguments: {G : Type u_1} [Group G] (H : Set (Subgroup G))
Goal: ↑(sInf H) = ⋂ s ∈ H, ↑s
-- AddSubgroup.coe_sInf
@[to_additive (attr := simp, norm_cast)]
theorem coe_sInf (H : Set (Subgroup G)) : ((sInf H : Subgroup G) : Set G) = ⋂ s ∈ H, ↑s 
Arguments: {G : Type u_1} [AddGroup G] (H : Set (AddSubgroup G))
Goal: ↑(sInf H) = ⋂ s ∈ H, ↑s
-- Subgroup.mem_sInf
@[to_additive (attr := simp)]
theorem mem_sInf {S : Set (Subgroup G)} {x : G} : x ∈ sInf S ↔ ∀ p ∈ S, x ∈ p 
Arguments: {G : Type u_1} [Group G] {S : Set (Subgroup G)} {x : G}
Goal: x ∈ sInf S ↔ ∀ p ∈ S, x ∈ p
-- AddSubgroup.mem_sInf
@[to_additive (attr := simp)]
theorem mem_sInf {S : Set (Subgroup G)} {x : G} : x ∈ sInf S ↔ ∀ p ∈ S, x ∈ p 
Arguments: {G : Type u_1} [AddGroup G] {S : Set (AddSubgroup G)} {x : G}
Goal: x ∈ sInf S ↔ ∀ p ∈ S, x ∈ p
-- Subgroup.mem_iInf
@[to_additive]
theorem mem_iInf {ι : Sort*} {S : ι → Subgroup G} {x : G} : (x ∈ ⨅ i, S i) ↔ ∀ i, x ∈ S i 
Arguments: {G : Type u_1} [Group G] {ι : Sort u_5} {S : ι → Subgroup G} {x : G}
Goal: x ∈ ⨅ i, S i ↔ ∀ (i : ι), x ∈ S i
-- AddSubgroup.mem_iInf
@[to_additive]
theorem mem_iInf {ι : Sort*} {S : ι → Subgroup G} {x : G} : (x ∈ ⨅ i, S i) ↔ ∀ i, x ∈ S i 
Arguments: {G : Type u_1} [AddGroup G] {ι : Sort u_5} {S : ι → AddSubgroup G} {x : G}
Goal: x ∈ ⨅ i, S i ↔ ∀ (i : ι), x ∈ S i
-- AddSubgroup.coe_iInf
@[to_additive (attr := simp, norm_cast)]
theorem coe_iInf {ι : Sort*} {S : ι → Subgroup G} : (↑(⨅ i, S i) : Set G) = ⋂ i, S i 
Arguments: {G : Type u_1} [AddGroup G] {ι : Sort u_5} {S : ι → AddSubgroup G}
Goal: ↑(⨅ i, S i) = ⋂ i, ↑(S i)
-- Subgroup.coe_iInf
@[to_additive (attr := simp, norm_cast)]
theorem coe_iInf {ι : Sort*} {S : ι → Subgroup G} : (↑(⨅ i, S i) : Set G) = ⋂ i, S i 
Arguments: {G : Type u_1} [Group G] {ι : Sort u_5} {S : ι → Subgroup G}
Goal: ↑(⨅ i, S i) = ⋂ i, ↑(S i)
-- Subgroup.mem_sup_left
@[to_additive]
theorem mem_sup_left {S T : Subgroup G} : ∀ {x : G}, x ∈ S → x ∈ S ⊔ T 
Arguments: {G : Type u_1} [Group G] {S T : Subgroup G} {x : G}
Goal: x ∈ S → x ∈ S ⊔ T
-- AddSubgroup.mem_sup_left
@[to_additive]
theorem mem_sup_left {S T : Subgroup G} : ∀ {x : G}, x ∈ S → x ∈ S ⊔ T 
Arguments: {G : Type u_1} [AddGroup G] {S T : AddSubgroup G} {x : G}
Goal: x ∈ S → x ∈ S ⊔ T
-- AddSubgroup.mem_sup_right
@[to_additive]
theorem mem_sup_right {S T : Subgroup G} : ∀ {x : G}, x ∈ T → x ∈ S ⊔ T 
Arguments: {G : Type u_1} [AddGroup G] {S T : AddSubgroup G} {x : G}
Goal: x ∈ T → x ∈ S ⊔ T
-- Subgroup.mem_sup_right
@[to_additive]
theorem mem_sup_right {S T : Subgroup G} : ∀ {x : G}, x ∈ T → x ∈ S ⊔ T 
Arguments: {G : Type u_1} [Group G] {S T : Subgroup G} {x : G}
Goal: x ∈ T → x ∈ S ⊔ T
-- AddSubgroup.add_mem_sup
@[to_additive]
theorem mul_mem_sup {S T : Subgroup G} {x y : G} (hx : x ∈ S) (hy : y ∈ T) : x * y ∈ S ⊔ T 
Arguments: {G : Type u_1} [AddGroup G] {S T : AddSubgroup G} {x y : G} (hx : x ∈ S) (hy : y ∈ T)
Goal: x + y ∈ S ⊔ T
-- Subgroup.mul_mem_sup
@[to_additive]
theorem mul_mem_sup {S T : Subgroup G} {x y : G} (hx : x ∈ S) (hy : y ∈ T) : x * y ∈ S ⊔ T 
Arguments: {G : Type u_1} [Group G] {S T : Subgroup G} {x y : G} (hx : x ∈ S) (hy : y ∈ T)
Goal: x * y ∈ S ⊔ T
-- AddSubgroup.mem_iSup_of_mem
@[to_additive]
theorem mem_iSup_of_mem {ι : Sort*} {S : ι → Subgroup G} (i : ι) :
    ∀ {x : G}, x ∈ S i → x ∈ iSup S 
Arguments: {G : Type u_1} [AddGroup G] {ι : Sort u_5} {S : ι → AddSubgroup G} (i : ι) {x : G}
Goal: x ∈ S i → x ∈ iSup S
-- Subgroup.mem_iSup_of_mem
@[to_additive]
theorem mem_iSup_of_mem {ι : Sort*} {S : ι → Subgroup G} (i : ι) :
    ∀ {x : G}, x ∈ S i → x ∈ iSup S 
Arguments: {G : Type u_1} [Group G] {ι : Sort u_5} {S : ι → Subgroup G} (i : ι) {x : G}
Goal: x ∈ S i → x ∈ iSup S
-- AddSubgroup.mem_sSup_of_mem
@[to_additive]
theorem mem_sSup_of_mem {S : Set (Subgroup G)} {s : Subgroup G} (hs : s ∈ S) :
    ∀ {x : G}, x ∈ s → x ∈ sSup S 
Arguments: {G : Type u_1} [AddGroup G] {S : Set (AddSubgroup G)} {s : AddSubgroup G} (hs : s ∈ S) {x : G}
Goal: x ∈ s → x ∈ sSup S
-- Subgroup.mem_sSup_of_mem
@[to_additive]
theorem mem_sSup_of_mem {S : Set (Subgroup G)} {s : Subgroup G} (hs : s ∈ S) :
    ∀ {x : G}, x ∈ s → x ∈ sSup S 
Arguments: {G : Type u_1} [Group G] {S : Set (Subgroup G)} {s : Subgroup G} (hs : s ∈ S) {x : G}
Goal: x ∈ s → x ∈ sSup S
-- Subgroup.subsingleton_iff
@[to_additive (attr := simp)]
theorem subsingleton_iff : Subsingleton (Subgroup G) ↔ Subsingleton G 
Arguments: {G : Type u_1} [Group G]
Goal: Subsingleton (Subgroup G) ↔ Subsingleton G
-- AddSubgroup.subsingleton_iff
@[to_additive (attr := simp)]
theorem subsingleton_iff : Subsingleton (Subgroup G) ↔ Subsingleton G 
Arguments: {G : Type u_1} [AddGroup G]
Goal: Subsingleton (AddSubgroup G) ↔ Subsingleton G
-- Subgroup.nontrivial_iff
@[to_additive (attr := simp)]
theorem nontrivial_iff : Nontrivial (Subgroup G) ↔ Nontrivial G 
Arguments: {G : Type u_1} [Group G]
Goal: Nontrivial (Subgroup G) ↔ Nontrivial G
-- AddSubgroup.nontrivial_iff
@[to_additive (attr := simp)]
theorem nontrivial_iff : Nontrivial (Subgroup G) ↔ Nontrivial G 
Arguments: {G : Type u_1} [AddGroup G]
Goal: Nontrivial (AddSubgroup G) ↔ Nontrivial G
-- Subgroup.eq_top_iff'
@[to_additive]
theorem eq_top_iff' : H = ⊤ ↔ ∀ x : G, x ∈ H 
Arguments: {G : Type u_1} [Group G] (H : Subgroup G)
Goal: H = ⊤ ↔ ∀ (x : G), x ∈ H
-- AddSubgroup.eq_top_iff'
@[to_additive]
theorem eq_top_iff' : H = ⊤ ↔ ∀ x : G, x ∈ H 
Arguments: {G : Type u_1} [AddGroup G] (H : AddSubgroup G)
Goal: H = ⊤ ↔ ∀ (x : G), x ∈ H
-- Subgroup.mem_closure
@[to_additive]
theorem mem_closure {x : G} : x ∈ closure k ↔ ∀ K : Subgroup G, k ⊆ K → x ∈ K 
Arguments: {G : Type u_1} [Group G] {k : Set G} {x : G}
Goal: x ∈ Subgroup.closure k ↔ ∀ (K : Subgroup G), k ⊆ ↑K → x ∈ K
-- AddSubgroup.mem_closure
@[to_additive]
theorem mem_closure {x : G} : x ∈ closure k ↔ ∀ K : Subgroup G, k ⊆ K → x ∈ K 
Arguments: {G : Type u_1} [AddGroup G] {k : Set G} {x : G}
Goal: x ∈ AddSubgroup.closure k ↔ ∀ (K : AddSubgroup G), k ⊆ ↑K → x ∈ K
-- AddSubgroup.subset_closure
@[to_additive (attr := simp, aesop safe 20 apply (rule_sets := [SetLike]))
  "The `AddSubgroup` generated by a set includes the set."]
theorem subset_closure : k ⊆ closure k 
Arguments: {G : Type u_1} [AddGroup G] {k : Set G}
Goal: k ⊆ ↑(AddSubgroup.closure k)
-- Subgroup.subset_closure
@[to_additive (attr := simp, aesop safe 20 apply (rule_sets := [SetLike]))
  "The `AddSubgroup` generated by a set includes the set."]
theorem subset_closure : k ⊆ closure k 
Arguments: {G : Type u_1} [Group G] {k : Set G}
Goal: k ⊆ ↑(Subgroup.closure k)
-- Subgroup.not_mem_of_not_mem_closure
@[to_additive]
theorem not_mem_of_not_mem_closure {P : G} (hP : P ∉ closure k) : P ∉ k 
Arguments: {G : Type u_1} [Group G] {k : Set G} {P : G} (hP : P ∉ Subgroup.closure k)
Goal: P ∉ k
-- AddSubgroup.not_mem_of_not_mem_closure
@[to_additive]
theorem not_mem_of_not_mem_closure {P : G} (hP : P ∉ closure k) : P ∉ k 
Arguments: {G : Type u_1} [AddGroup G] {k : Set G} {P : G} (hP : P ∉ AddSubgroup.closure k)
Goal: P ∉ k
-- Subgroup.closure_le
@[to_additive (attr := simp)
  "An additive subgroup `K` includes `closure k` if and only if it includes `k`"]
theorem closure_le : closure k ≤ K ↔ k ⊆ K 
Arguments: {G : Type u_1} [Group G] (K : Subgroup G) {k : Set G}
Goal: Subgroup.closure k ≤ K ↔ k ⊆ ↑K
-- AddSubgroup.closure_le
@[to_additive (attr := simp)
  "An additive subgroup `K` includes `closure k` if and only if it includes `k`"]
theorem closure_le : closure k ≤ K ↔ k ⊆ K 
Arguments: {G : Type u_1} [AddGroup G] (K : AddSubgroup G) {k : Set G}
Goal: AddSubgroup.closure k ≤ K ↔ k ⊆ ↑K
-- Subgroup.closure_eq_of_le
@[to_additive]
theorem closure_eq_of_le (h₁ : k ⊆ K) (h₂ : K ≤ closure k) : closure k = K 
Arguments: {G : Type u_1} [Group G] (K : Subgroup G) {k : Set G} (h₁ : k ⊆ ↑K) (h₂ : K ≤ Subgroup.closure k)
Goal: Subgroup.closure k = K
-- AddSubgroup.closure_eq_of_le
@[to_additive]
theorem closure_eq_of_le (h₁ : k ⊆ K) (h₂ : K ≤ closure k) : closure k = K 
Arguments: {G : Type u_1} [AddGroup G] (K : AddSubgroup G) {k : Set G} (h₁ : k ⊆ ↑K) (h₂ : K ≤ AddSubgroup.closure k)
Goal: AddSubgroup.closure k = K
-- Subgroup.closure_induction
@[to_additive (attr := elab_as_elim)
      "An induction principle for additive closure membership. If `p`
      holds for `0` and all elements of `k`, and is preserved under addition and inverses, then `p`
      holds for all elements of the additive closure of `k`."]
theorem closure_induction {p : G → Prop} {x} (h : x ∈ closure k) (mem : ∀ x ∈ k, p x) (one : p 1)
    (mul : ∀ x y, p x → p y → p (x * y)) (inv : ∀ x, p x → p x⁻¹) : p x 
Arguments: {G : Type u_1} [Group G] {k : Set G} {p : G → Prop} {x : G} (h : x ∈ Subgroup.closure k) (mem : ∀ x ∈ k, p x) (one : p 1) (mul : ∀ (x y : G), p x → p y → p (x * y)) (inv : ∀ (x : G), p x → p x⁻¹)
Goal: p x
-- AddSubgroup.closure_induction
@[to_additive (attr := elab_as_elim)
      "An induction principle for additive closure membership. If `p`
      holds for `0` and all elements of `k`, and is preserved under addition and inverses, then `p`
      holds for all elements of the additive closure of `k`."]
theorem closure_induction {p : G → Prop} {x} (h : x ∈ closure k) (mem : ∀ x ∈ k, p x) (one : p 1)
    (mul : ∀ x y, p x → p y → p (x * y)) (inv : ∀ x, p x → p x⁻¹) : p x 
Arguments: {G : Type u_1} [AddGroup G] {k : Set G} {p : G → Prop} {x : G} (h : x ∈ AddSubgroup.closure k) (mem : ∀ x ∈ k, p x) (one : p 0) (mul : ∀ (x y : G), p x → p y → p (x + y)) (inv : ∀ (x : G), p x → p (-x))
Goal: p x
-- Subgroup.closure_induction'
@[to_additive (attr := elab_as_elim) "A dependent version of `AddSubgroup.closure_induction`. "]
theorem closure_induction' {p : ∀ x, x ∈ closure k → Prop}
    (mem : ∀ (x) (h : x ∈ k), p x (subset_closure h)) (one : p 1 (one_mem _))
    (mul : ∀ x hx y hy, p x hx → p y hy → p (x * y) (mul_mem hx hy))
    (inv : ∀ x hx, p x hx → p x⁻¹ (inv_mem hx)) {x} (hx : x ∈ closure k) : p x hx 
Arguments: {G : Type u_1} [Group G] {k : Set G} {p : (x : G) → x ∈ Subgroup.closure k → Prop} (mem : ∀ (x : G) (h : x ∈ k), p x ⋯) (one : p 1 ⋯) (mul : ∀ (x : G) (hx : x ∈ Subgroup.closure k) (y : G) (hy : y ∈ Subgroup.closure k), p x hx → p y hy → p (x * y) ⋯) (inv : ∀ (x : G) (hx : x ∈ Subgroup.closure k), p x hx → p x⁻¹ ⋯) {x : G} (hx : x ∈ Subgroup.closure k)
Goal: p x hx
-- AddSubgroup.closure_induction'
@[to_additive (attr := elab_as_elim) "A dependent version of `AddSubgroup.closure_induction`. "]
theorem closure_induction' {p : ∀ x, x ∈ closure k → Prop}
    (mem : ∀ (x) (h : x ∈ k), p x (subset_closure h)) (one : p 1 (one_mem _))
    (mul : ∀ x hx y hy, p x hx → p y hy → p (x * y) (mul_mem hx hy))
    (inv : ∀ x hx, p x hx → p x⁻¹ (inv_mem hx)) {x} (hx : x ∈ closure k) : p x hx 
Arguments: {G : Type u_1} [AddGroup G] {k : Set G} {p : (x : G) → x ∈ AddSubgroup.closure k → Prop} (mem : ∀ (x : G) (h : x ∈ k), p x ⋯) (one : p 0 ⋯) (mul :
  ∀ (x : G) (hx : x ∈ AddSubgroup.closure k) (y : G) (hy : y ∈ AddSubgroup.closure k), p x hx → p y hy → p (x + y) ⋯) (inv : ∀ (x : G) (hx : x ∈ AddSubgroup.closure k), p x hx → p (-x) ⋯) {x : G} (hx : x ∈ AddSubgroup.closure k)
Goal: p x hx
-- Subgroup.closure_induction₂
@[to_additive (attr := elab_as_elim)
      "An induction principle for additive closure membership, for
      predicates with two arguments."]
theorem closure_induction₂ {p : G → G → Prop} {x} {y : G} (hx : x ∈ closure k) (hy : y ∈ closure k)
    (Hk : ∀ x ∈ k, ∀ y ∈ k, p x y) (H1_left : ∀ x, p 1 x) (H1_right : ∀ x, p x 1)
    (Hmul_left : ∀ x₁ x₂ y, p x₁ y → p x₂ y → p (x₁ * x₂) y)
    (Hmul_right : ∀ x y₁ y₂, p x y₁ → p x y₂ → p x (y₁ * y₂)) (Hinv_left : ∀ x y, p x y → p x⁻¹ y)
    (Hinv_right : ∀ x y, p x y → p x y⁻¹) : p x y 
Arguments: {G : Type u_1} [Group G] {k : Set G} {p : G → G → Prop} {x y : G} (hx : x ∈ Subgroup.closure k) (hy : y ∈ Subgroup.closure k) (Hk : ∀ x ∈ k, ∀ y ∈ k, p x y) (H1_left : ∀ (x : G), p 1 x) (H1_right : ∀ (x : G), p x 1) (Hmul_left : ∀ (x₁ x₂ y : G), p x₁ y → p x₂ y → p (x₁ * x₂) y) (Hmul_right : ∀ (x y₁ y₂ : G), p x y₁ → p x y₂ → p x (y₁ * y₂)) (Hinv_left : ∀ (x y : G), p x y → p x⁻¹ y) (Hinv_right : ∀ (x y : G), p x y → p x y⁻¹)
Goal: p x y
-- AddSubgroup.closure_induction₂
@[to_additive (attr := elab_as_elim)
      "An induction principle for additive closure membership, for
      predicates with two arguments."]
theorem closure_induction₂ {p : G → G → Prop} {x} {y : G} (hx : x ∈ closure k) (hy : y ∈ closure k)
    (Hk : ∀ x ∈ k, ∀ y ∈ k, p x y) (H1_left : ∀ x, p 1 x) (H1_right : ∀ x, p x 1)
    (Hmul_left : ∀ x₁ x₂ y, p x₁ y → p x₂ y → p (x₁ * x₂) y)
    (Hmul_right : ∀ x y₁ y₂, p x y₁ → p x y₂ → p x (y₁ * y₂)) (Hinv_left : ∀ x y, p x y → p x⁻¹ y)
    (Hinv_right : ∀ x y, p x y → p x y⁻¹) : p x y 
Arguments: {G : Type u_1} [AddGroup G] {k : Set G} {p : G → G → Prop} {x y : G} (hx : x ∈ AddSubgroup.closure k) (hy : y ∈ AddSubgroup.closure k) (Hk : ∀ x ∈ k, ∀ y ∈ k, p x y) (H1_left : ∀ (x : G), p 0 x) (H1_right : ∀ (x : G), p x 0) (Hmul_left : ∀ (x₁ x₂ y : G), p x₁ y → p x₂ y → p (x₁ + x₂) y) (Hmul_right : ∀ (x y₁ y₂ : G), p x y₁ → p x y₂ → p x (y₁ + y₂)) (Hinv_left : ∀ (x y : G), p x y → p (-x) y) (Hinv_right : ∀ (x y : G), p x y → p x (-y))
Goal: p x y
-- Subgroup.closure_closure_coe_preimage
@[to_additive (attr := simp)]
theorem closure_closure_coe_preimage {k : Set G} : closure (((↑) : closure k → G) ⁻¹' k) = ⊤ 
Arguments: {G : Type u_1} [Group G] {k : Set G}
Goal: Subgroup.closure (Subtype.val ⁻¹' k) = ⊤
-- AddSubgroup.closure_closure_coe_preimage
@[to_additive (attr := simp)]
theorem closure_closure_coe_preimage {k : Set G} : closure (((↑) : closure k → G) ⁻¹' k) = ⊤ 
Arguments: {G : Type u_1} [AddGroup G] {k : Set G}
Goal: AddSubgroup.closure (Subtype.val ⁻¹' k) = ⊤
-- Subgroup.closure_mono
@[to_additive
      "Additive subgroup closure of a set is monotone in its argument: if `h ⊆ k`,
      then `closure h ≤ closure k`"]
theorem closure_mono ⦃h k : Set G⦄ (h' : h ⊆ k) : closure h ≤ closure k 
Arguments: {G : Type u_1} [Group G] ⦃h k : Set G⦄ (h' : h ⊆ k)
Goal: Subgroup.closure h ≤ Subgroup.closure k
-- AddSubgroup.closure_mono
@[to_additive
      "Additive subgroup closure of a set is monotone in its argument: if `h ⊆ k`,
      then `closure h ≤ closure k`"]
theorem closure_mono ⦃h k : Set G⦄ (h' : h ⊆ k) : closure h ≤ closure k 
Arguments: {G : Type u_1} [AddGroup G] ⦃h k : Set G⦄ (h' : h ⊆ k)
Goal: AddSubgroup.closure h ≤ AddSubgroup.closure k
-- Subgroup.closure_eq
@[to_additive (attr := simp) "Additive closure of an additive subgroup `K` equals `K`"]
theorem closure_eq : closure (K : Set G) = K 
Arguments: {G : Type u_1} [Group G] (K : Subgroup G)
Goal: Subgroup.closure ↑K = K
-- AddSubgroup.closure_eq
@[to_additive (attr := simp) "Additive closure of an additive subgroup `K` equals `K`"]
theorem closure_eq : closure (K : Set G) = K 
Arguments: {G : Type u_1} [AddGroup G] (K : AddSubgroup G)
Goal: AddSubgroup.closure ↑K = K
-- AddSubgroup.closure_empty
@[to_additive (attr := simp)]
theorem closure_empty : closure (∅ : Set G) = ⊥ 
Arguments: {G : Type u_1} [AddGroup G]
Goal: AddSubgroup.closure ∅ = ⊥
-- Subgroup.closure_empty
@[to_additive (attr := simp)]
theorem closure_empty : closure (∅ : Set G) = ⊥ 
Arguments: {G : Type u_1} [Group G]
Goal: Subgroup.closure ∅ = ⊥
-- AddSubgroup.closure_univ
@[to_additive (attr := simp)]
theorem closure_univ : closure (univ : Set G) = ⊤ 
Arguments: {G : Type u_1} [AddGroup G]
Goal: AddSubgroup.closure Set.univ = ⊤
-- Subgroup.closure_univ
@[to_additive (attr := simp)]
theorem closure_univ : closure (univ : Set G) = ⊤ 
Arguments: {G : Type u_1} [Group G]
Goal: Subgroup.closure Set.univ = ⊤
-- Subgroup.closure_union
@[to_additive]
theorem closure_union (s t : Set G) : closure (s ∪ t) = closure s ⊔ closure t 
Arguments: {G : Type u_1} [Group G] (s t : Set G)
Goal: Subgroup.closure (s ∪ t) = Subgroup.closure s ⊔ Subgroup.closure t
-- AddSubgroup.closure_union
@[to_additive]
theorem closure_union (s t : Set G) : closure (s ∪ t) = closure s ⊔ closure t 
Arguments: {G : Type u_1} [AddGroup G] (s t : Set G)
Goal: AddSubgroup.closure (s ∪ t) = AddSubgroup.closure s ⊔ AddSubgroup.closure t
-- AddSubgroup.sup_eq_closure
@[to_additive]
theorem sup_eq_closure (H H' : Subgroup G) : H ⊔ H' = closure ((H : Set G) ∪ (H' : Set G)) 
Arguments: {G : Type u_1} [AddGroup G] (H H' : AddSubgroup G)
Goal: H ⊔ H' = AddSubgroup.closure (↑H ∪ ↑H')
-- Subgroup.sup_eq_closure
@[to_additive]
theorem sup_eq_closure (H H' : Subgroup G) : H ⊔ H' = closure ((H : Set G) ∪ (H' : Set G)) 
Arguments: {G : Type u_1} [Group G] (H H' : Subgroup G)
Goal: H ⊔ H' = Subgroup.closure (↑H ∪ ↑H')
-- Subgroup.closure_iUnion
@[to_additive]
theorem closure_iUnion {ι} (s : ι → Set G) : closure (⋃ i, s i) = ⨆ i, closure (s i) 
Arguments: {G : Type u_1} [Group G] {ι : Sort u_5} (s : ι → Set G)
Goal: Subgroup.closure (⋃ i, s i) = ⨆ i, Subgroup.closure (s i)
-- AddSubgroup.closure_iUnion
@[to_additive]
theorem closure_iUnion {ι} (s : ι → Set G) : closure (⋃ i, s i) = ⨆ i, closure (s i) 
Arguments: {G : Type u_1} [AddGroup G] {ι : Sort u_5} (s : ι → Set G)
Goal: AddSubgroup.closure (⋃ i, s i) = ⨆ i, AddSubgroup.closure (s i)
-- Subgroup.closure_eq_bot_iff
@[to_additive (attr := simp)]
theorem closure_eq_bot_iff : closure k = ⊥ ↔ k ⊆ {1} 
Arguments: {G : Type u_1} [Group G] {k : Set G}
Goal: Subgroup.closure k = ⊥ ↔ k ⊆ {1}
-- AddSubgroup.closure_eq_bot_iff
@[to_additive (attr := simp)]
theorem closure_eq_bot_iff : closure k = ⊥ ↔ k ⊆ {1} 
Arguments: {G : Type u_1} [AddGroup G] {k : Set G}
Goal: AddSubgroup.closure k = ⊥ ↔ k ⊆ {0}
-- AddSubgroup.iSup_eq_closure
@[to_additive]
theorem iSup_eq_closure {ι : Sort*} (p : ι → Subgroup G) :
    ⨆ i, p i = closure (⋃ i, (p i : Set G)) 
Arguments: {G : Type u_1} [AddGroup G] {ι : Sort u_5} (p : ι → AddSubgroup G)
Goal: ⨆ i, p i = AddSubgroup.closure (⋃ i, ↑(p i))
-- Subgroup.iSup_eq_closure
@[to_additive]
theorem iSup_eq_closure {ι : Sort*} (p : ι → Subgroup G) :
    ⨆ i, p i = closure (⋃ i, (p i : Set G)) 
Arguments: {G : Type u_1} [Group G] {ι : Sort u_5} (p : ι → Subgroup G)
Goal: ⨆ i, p i = Subgroup.closure (⋃ i, ↑(p i))
-- Subgroup.mem_closure_singleton
@[to_additive
      "The `AddSubgroup` generated by an element of an `AddGroup` equals the set of
      natural number multiples of the element."]
theorem mem_closure_singleton {x y : G} : y ∈ closure ({x} : Set G) ↔ ∃ n : ℤ, x ^ n = y 
Arguments: {G : Type u_1} [Group G] {x y : G}
Goal: y ∈ Subgroup.closure {x} ↔ ∃ n, x ^ n = y
-- AddSubgroup.mem_closure_singleton
@[to_additive
      "The `AddSubgroup` generated by an element of an `AddGroup` equals the set of
      natural number multiples of the element."]
theorem mem_closure_singleton {x y : G} : y ∈ closure ({x} : Set G) ↔ ∃ n : ℤ, x ^ n = y 
Arguments: {G : Type u_1} [AddGroup G] {x y : G}
Goal: y ∈ AddSubgroup.closure {x} ↔ ∃ n, n • x = y
-- Subgroup.closure_singleton_one
@[to_additive]
theorem closure_singleton_one : closure ({1} : Set G) = ⊥ 
Arguments: {G : Type u_1} [Group G]
Goal: Subgroup.closure {1} = ⊥
-- AddSubgroup.closure_singleton_zero
@[to_additive]
theorem closure_singleton_one : closure ({1} : Set G) = ⊥ 
Arguments: {G : Type u_1} [AddGroup G]
Goal: AddSubgroup.closure {0} = ⊥
-- AddSubgroup.le_closure_toAddSubmonoid
@[to_additive]
theorem le_closure_toSubmonoid (S : Set G) : Submonoid.closure S ≤ (closure S).toSubmonoid 
Arguments: {G : Type u_1} [AddGroup G] (S : Set G)
Goal: AddSubmonoid.closure S ≤ (AddSubgroup.closure S).toAddSubmonoid
-- Subgroup.le_closure_toSubmonoid
@[to_additive]
theorem le_closure_toSubmonoid (S : Set G) : Submonoid.closure S ≤ (closure S).toSubmonoid 
Arguments: {G : Type u_1} [Group G] (S : Set G)
Goal: Submonoid.closure S ≤ (Subgroup.closure S).toSubmonoid
-- Subgroup.closure_eq_top_of_mclosure_eq_top
@[to_additive]
theorem closure_eq_top_of_mclosure_eq_top {S : Set G} (h : Submonoid.closure S = ⊤) :
    closure S = ⊤ 
Arguments: {G : Type u_1} [Group G] {S : Set G} (h : Submonoid.closure S = ⊤)
Goal: Subgroup.closure S = ⊤
-- AddSubgroup.closure_eq_top_of_mclosure_eq_top
@[to_additive]
theorem closure_eq_top_of_mclosure_eq_top {S : Set G} (h : Submonoid.closure S = ⊤) :
    closure S = ⊤ 
Arguments: {G : Type u_1} [AddGroup G] {S : Set G} (h : AddSubmonoid.closure S = ⊤)
Goal: AddSubgroup.closure S = ⊤
-- AddSubgroup.mem_iSup_of_directed
@[to_additive]
theorem mem_iSup_of_directed {ι} [hι : Nonempty ι] {K : ι → Subgroup G} (hK : Directed (· ≤ ·) K)
    {x : G} : x ∈ (iSup K : Subgroup G) ↔ ∃ i, x ∈ K i 
Arguments: {G : Type u_1} [AddGroup G] {ι : Sort u_5} [hι : Nonempty ι] {K : ι → AddSubgroup G} (hK : Directed (fun x x_1 => x ≤ x_1) K) {x : G}
Goal: x ∈ iSup K ↔ ∃ i, x ∈ K i
-- Subgroup.mem_iSup_of_directed
@[to_additive]
theorem mem_iSup_of_directed {ι} [hι : Nonempty ι] {K : ι → Subgroup G} (hK : Directed (· ≤ ·) K)
    {x : G} : x ∈ (iSup K : Subgroup G) ↔ ∃ i, x ∈ K i 
Arguments: {G : Type u_1} [Group G] {ι : Sort u_5} [hι : Nonempty ι] {K : ι → Subgroup G} (hK : Directed (fun x x_1 => x ≤ x_1) K) {x : G}
Goal: x ∈ iSup K ↔ ∃ i, x ∈ K i
-- AddSubgroup.coe_iSup_of_directed
@[to_additive]
theorem coe_iSup_of_directed {ι} [Nonempty ι] {S : ι → Subgroup G} (hS : Directed (· ≤ ·) S) :
    ((⨆ i, S i : Subgroup G) : Set G) = ⋃ i, S i 
Arguments: {G : Type u_1} [AddGroup G] {ι : Sort u_5} [Nonempty ι] {S : ι → AddSubgroup G} (hS : Directed (fun x x_1 => x ≤ x_1) S)
Goal: ↑(⨆ i, S i) = ⋃ i, ↑(S i)
-- Subgroup.coe_iSup_of_directed
@[to_additive]
theorem coe_iSup_of_directed {ι} [Nonempty ι] {S : ι → Subgroup G} (hS : Directed (· ≤ ·) S) :
    ((⨆ i, S i : Subgroup G) : Set G) = ⋃ i, S i 
Arguments: {G : Type u_1} [Group G] {ι : Sort u_5} [Nonempty ι] {S : ι → Subgroup G} (hS : Directed (fun x x_1 => x ≤ x_1) S)
Goal: ↑(⨆ i, S i) = ⋃ i, ↑(S i)