Theorem: Group.mem_closure_union_iff
File: Mathlib/Deprecated/Subgroup.lean

tactic: simp only [closure_eq_mclosure, Monoid.mem_closure_union_iff, exists_prop, preimage_union]
state_before: G✝ : Type ?u.136865
H : Type ?u.136868
A : Type ?u.136871
a a₁ a₂ b c : G✝
inst✝¹ : Group G✝
s✝ : Set G✝
G : Type u_1
inst✝ : CommGroup G
s t : Set G
x : G
⊢ x ∈ closure (s ∪ t) ↔ ∃ y, y ∈ closure s ∧ ∃ z, z ∈ closure t ∧ y * z = x

tactic: constructor
state_before: G✝ : Type ?u.136865
H : Type ?u.136868
A : Type ?u.136871
a a₁ a₂ b c : G✝
inst✝¹ : Group G✝
s✝ : Set G✝
G : Type u_1
inst✝ : CommGroup G
s t : Set G
x : G
⊢ (∃ y,
      (∃ y_1, y_1 ∈ Monoid.Closure s ∧ ∃ z, z ∈ Monoid.Closure t ∧ y_1 * z = y) ∧
        ∃ z,
          (∃ y, y ∈ Monoid.Closure (Inv.inv ⁻¹' s) ∧ ∃ z_1, z_1 ∈ Monoid.Closure (Inv.inv ⁻¹' t) ∧ y * z_1 = z) ∧
            y * z = x) ↔
    ∃ y,
      (∃ y_1, y_1 ∈ Monoid.Closure s ∧ ∃ z, z ∈ Monoid.Closure (Inv.inv ⁻¹' s) ∧ y_1 * z = y) ∧
        ∃ z, (∃ y, y ∈ Monoid.Closure t ∧ ∃ z_1, z_1 ∈ Monoid.Closure (Inv.inv ⁻¹' t) ∧ y * z_1 = z) ∧ y * z = x

tactic: rintro ⟨_, ⟨ys, hys, yt, hyt, rfl⟩, _, ⟨zs, hzs, zt, hzt, rfl⟩, rfl⟩
state_before: case mp
G✝ : Type ?u.136865
H : Type ?u.136868
A : Type ?u.136871
a a₁ a₂ b c : G✝
inst✝¹ : Group G✝
s✝ : Set G✝
G : Type u_1
inst✝ : CommGroup G
s t : Set G
x : G
⊢ (∃ y,
      (∃ y_1, y_1 ∈ Monoid.Closure s ∧ ∃ z, z ∈ Monoid.Closure t ∧ y_1 * z = y) ∧
        ∃ z,
          (∃ y, y ∈ Monoid.Closure (Inv.inv ⁻¹' s) ∧ ∃ z_1, z_1 ∈ Monoid.Closure (Inv.inv ⁻¹' t) ∧ y * z_1 = z) ∧
            y * z = x) →
    ∃ y,
      (∃ y_1, y_1 ∈ Monoid.Closure s ∧ ∃ z, z ∈ Monoid.Closure (Inv.inv ⁻¹' s) ∧ y_1 * z = y) ∧
        ∃ z, (∃ y, y ∈ Monoid.Closure t ∧ ∃ z_1, z_1 ∈ Monoid.Closure (Inv.inv ⁻¹' t) ∧ y * z_1 = z) ∧ y * z = x

tactic: refine' ⟨_, ⟨_, hys, _, hzs, rfl⟩, _, ⟨_, hyt, _, hzt, rfl⟩, _⟩
state_before: case mp.intro.intro.intro.intro.intro.intro.intro.intro.intro.intro.intro.intro
G✝ : Type ?u.136865
H : Type ?u.136868
A : Type ?u.136871
a a₁ a₂ b c : G✝
inst✝¹ : Group G✝
s✝ : Set G✝
G : Type u_1
inst✝ : CommGroup G
s t : Set G
ys : G
hys : ys ∈ Monoid.Closure s
yt : G
hyt : yt ∈ Monoid.Closure t
zs : G
hzs : zs ∈ Monoid.Closure (Inv.inv ⁻¹' s)
zt : G
hzt : zt ∈ Monoid.Closure (Inv.inv ⁻¹' t)
⊢ ∃ y,
    (∃ y_1, y_1 ∈ Monoid.Closure s ∧ ∃ z, z ∈ Monoid.Closure (Inv.inv ⁻¹' s) ∧ y_1 * z = y) ∧
      ∃ z,
        (∃ y, y ∈ Monoid.Closure t ∧ ∃ z_1, z_1 ∈ Monoid.Closure (Inv.inv ⁻¹' t) ∧ y * z_1 = z) ∧
          y * z = ys * yt * (zs * zt)

tactic: rw [mul_assoc, mul_assoc, mul_left_comm zs]
state_before: case mp.intro.intro.intro.intro.intro.intro.intro.intro.intro.intro.intro.intro
G✝ : Type ?u.136865
H : Type ?u.136868
A : Type ?u.136871
a a₁ a₂ b c : G✝
inst✝¹ : Group G✝
s✝ : Set G✝
G : Type u_1
inst✝ : CommGroup G
s t : Set G
ys : G
hys : ys ∈ Monoid.Closure s
yt : G
hyt : yt ∈ Monoid.Closure t
zs : G
hzs : zs ∈ Monoid.Closure (Inv.inv ⁻¹' s)
zt : G
hzt : zt ∈ Monoid.Closure (Inv.inv ⁻¹' t)
⊢ ys * zs * (yt * zt) = ys * yt * (zs * zt)

tactic: rintro ⟨_, ⟨ys, hys, zs, hzs, rfl⟩, _, ⟨yt, hyt, zt, hzt, rfl⟩, rfl⟩
state_before: case mpr
G✝ : Type ?u.136865
H : Type ?u.136868
A : Type ?u.136871
a a₁ a₂ b c : G✝
inst✝¹ : Group G✝
s✝ : Set G✝
G : Type u_1
inst✝ : CommGroup G
s t : Set G
x : G
⊢ (∃ y,
      (∃ y_1, y_1 ∈ Monoid.Closure s ∧ ∃ z, z ∈ Monoid.Closure (Inv.inv ⁻¹' s) ∧ y_1 * z = y) ∧
        ∃ z, (∃ y, y ∈ Monoid.Closure t ∧ ∃ z_1, z_1 ∈ Monoid.Closure (Inv.inv ⁻¹' t) ∧ y * z_1 = z) ∧ y * z = x) →
    ∃ y,
      (∃ y_1, y_1 ∈ Monoid.Closure s ∧ ∃ z, z ∈ Monoid.Closure t ∧ y_1 * z = y) ∧
        ∃ z,
          (∃ y, y ∈ Monoid.Closure (Inv.inv ⁻¹' s) ∧ ∃ z_1, z_1 ∈ Monoid.Closure (Inv.inv ⁻¹' t) ∧ y * z_1 = z) ∧
            y * z = x

tactic: refine' ⟨_, ⟨ys, hys, yt, hyt, rfl⟩, _, ⟨zs, hzs, zt, hzt, rfl⟩, _⟩
state_before: case mpr.intro.intro.intro.intro.intro.intro.intro.intro.intro.intro.intro.intro
G✝ : Type ?u.136865
H : Type ?u.136868
A : Type ?u.136871
a a₁ a₂ b c : G✝
inst✝¹ : Group G✝
s✝ : Set G✝
G : Type u_1
inst✝ : CommGroup G
s t : Set G
ys : G
hys : ys ∈ Monoid.Closure s
zs : G
hzs : zs ∈ Monoid.Closure (Inv.inv ⁻¹' s)
yt : G
hyt : yt ∈ Monoid.Closure t
zt : G
hzt : zt ∈ Monoid.Closure (Inv.inv ⁻¹' t)
⊢ ∃ y,
    (∃ y_1, y_1 ∈ Monoid.Closure s ∧ ∃ z, z ∈ Monoid.Closure t ∧ y_1 * z = y) ∧
      ∃ z,
        (∃ y, y ∈ Monoid.Closure (Inv.inv ⁻¹' s) ∧ ∃ z_1, z_1 ∈ Monoid.Closure (Inv.inv ⁻¹' t) ∧ y * z_1 = z) ∧
          y * z = ys * zs * (yt * zt)

tactic: rw [mul_assoc, mul_assoc, mul_left_comm yt]
state_before: case mpr.intro.intro.intro.intro.intro.intro.intro.intro.intro.intro.intro.intro
G✝ : Type ?u.136865
H : Type ?u.136868
A : Type ?u.136871
a a₁ a₂ b c : G✝
inst✝¹ : Group G✝
s✝ : Set G✝
G : Type u_1
inst✝ : CommGroup G
s t : Set G
ys : G
hys : ys ∈ Monoid.Closure s
zs : G
hzs : zs ∈ Monoid.Closure (Inv.inv ⁻¹' s)
yt : G
hyt : yt ∈ Monoid.Closure t
zt : G
hzt : zt ∈ Monoid.Closure (Inv.inv ⁻¹' t)
⊢ ys * yt * (zs * zt) = ys * zs * (yt * zt)