Theorem: Submonoid.pow_smul_mem_closure_smul
File: Mathlib/GroupTheory/Submonoid/Pointwise.lean

tactic: refine' @closure_induction N _ s (fun x : N => ∃ n : ℕ, r ^ n • x ∈ closure (r • s)) _ hx _ _ _
state_before: α : Type ?u.11742
G : Type ?u.11745
M : Type u_2
R : Type ?u.11751
A : Type ?u.11754
inst✝⁴ : Monoid M
inst✝³ : AddMonoid A
s✝ t u : Set M
N : Type u_1
inst✝² : CommMonoid N
inst✝¹ : MulAction M N
inst✝ : IsScalarTower M N N
r : M
s : Set N
x : N
hx : x ∈ closure s
⊢ ∃ n, r ^ n • x ∈ closure (r • s)

tactic: intro x hx
state_before: case refine'_1
α : Type ?u.11742
G : Type ?u.11745
M : Type u_2
R : Type ?u.11751
A : Type ?u.11754
inst✝⁴ : Monoid M
inst✝³ : AddMonoid A
s✝ t u : Set M
N : Type u_1
inst✝² : CommMonoid N
inst✝¹ : MulAction M N
inst✝ : IsScalarTower M N N
r : M
s : Set N
x : N
hx : x ∈ closure s
⊢ ∀ (x : N), x ∈ s → (fun x => ∃ n, r ^ n • x ∈ closure (r • s)) x

tactic: exact ⟨1, subset_closure ⟨_, hx, by rw [pow_one]⟩⟩
state_before: case refine'_1
α : Type ?u.11742
G : Type ?u.11745
M : Type u_2
R : Type ?u.11751
A : Type ?u.11754
inst✝⁴ : Monoid M
inst✝³ : AddMonoid A
s✝ t u : Set M
N : Type u_1
inst✝² : CommMonoid N
inst✝¹ : MulAction M N
inst✝ : IsScalarTower M N N
r : M
s : Set N
x✝ : N
hx✝ : x✝ ∈ closure s
x : N
hx : x ∈ s
⊢ ∃ n, r ^ n • x ∈ closure (r • s)

tactic: rw [pow_one]
state_before: α : Type ?u.11742
G : Type ?u.11745
M : Type u_2
R : Type ?u.11751
A : Type ?u.11754
inst✝⁴ : Monoid M
inst✝³ : AddMonoid A
s✝ t u : Set M
N : Type u_1
inst✝² : CommMonoid N
inst✝¹ : MulAction M N
inst✝ : IsScalarTower M N N
r : M
s : Set N
x✝ : N
hx✝ : x✝ ∈ closure s
x : N
hx : x ∈ s
⊢ (fun x => r • x) x = r ^ 1 • x

tactic: exact ⟨0, by simpa using one_mem _⟩
state_before: case refine'_2
α : Type ?u.11742
G : Type ?u.11745
M : Type u_2
R : Type ?u.11751
A : Type ?u.11754
inst✝⁴ : Monoid M
inst✝³ : AddMonoid A
s✝ t u : Set M
N : Type u_1
inst✝² : CommMonoid N
inst✝¹ : MulAction M N
inst✝ : IsScalarTower M N N
r : M
s : Set N
x : N
hx : x ∈ closure s
⊢ (fun x => ∃ n, r ^ n • x ∈ closure (r • s)) 1

tactic: simpa using one_mem _
state_before: α : Type ?u.11742
G : Type ?u.11745
M : Type u_2
R : Type ?u.11751
A : Type ?u.11754
inst✝⁴ : Monoid M
inst✝³ : AddMonoid A
s✝ t u : Set M
N : Type u_1
inst✝² : CommMonoid N
inst✝¹ : MulAction M N
inst✝ : IsScalarTower M N N
r : M
s : Set N
x : N
hx : x ∈ closure s
⊢ r ^ 0 • 1 ∈ closure (r • s)

tactic: rintro x y ⟨nx, hx⟩ ⟨ny, hy⟩
state_before: case refine'_3
α : Type ?u.11742
G : Type ?u.11745
M : Type u_2
R : Type ?u.11751
A : Type ?u.11754
inst✝⁴ : Monoid M
inst✝³ : AddMonoid A
s✝ t u : Set M
N : Type u_1
inst✝² : CommMonoid N
inst✝¹ : MulAction M N
inst✝ : IsScalarTower M N N
r : M
s : Set N
x : N
hx : x ∈ closure s
⊢ ∀ (x y : N),
    (fun x => ∃ n, r ^ n • x ∈ closure (r • s)) x →
      (fun x => ∃ n, r ^ n • x ∈ closure (r • s)) y → (fun x => ∃ n, r ^ n • x ∈ closure (r • s)) (x * y)

tactic: use ny + nx
state_before: case refine'_3.intro.intro
α : Type ?u.11742
G : Type ?u.11745
M : Type u_2
R : Type ?u.11751
A : Type ?u.11754
inst✝⁴ : Monoid M
inst✝³ : AddMonoid A
s✝ t u : Set M
N : Type u_1
inst✝² : CommMonoid N
inst✝¹ : MulAction M N
inst✝ : IsScalarTower M N N
r : M
s : Set N
x✝ : N
hx✝ : x✝ ∈ closure s
x y : N
nx : ℕ
hx : r ^ nx • x ∈ closure (r • s)
ny : ℕ
hy : r ^ ny • y ∈ closure (r • s)
⊢ ∃ n, r ^ n • (x * y) ∈ closure (r • s)

tactic: rw [pow_add, mul_smul, ← smul_mul_assoc, mul_comm, ← smul_mul_assoc]
state_before: case refine'_3.intro.intro
α : Type ?u.11742
G : Type ?u.11745
M : Type u_2
R : Type ?u.11751
A : Type ?u.11754
inst✝⁴ : Monoid M
inst✝³ : AddMonoid A
s✝ t u : Set M
N : Type u_1
inst✝² : CommMonoid N
inst✝¹ : MulAction M N
inst✝ : IsScalarTower M N N
r : M
s : Set N
x✝ : N
hx✝ : x✝ ∈ closure s
x y : N
nx : ℕ
hx : r ^ nx • x ∈ closure (r • s)
ny : ℕ
hy : r ^ ny • y ∈ closure (r • s)
⊢ r ^ (ny + nx) • (x * y) ∈ closure (r • s)

tactic: exact mul_mem hy hx
state_before: case refine'_3.intro.intro
α : Type ?u.11742
G : Type ?u.11745
M : Type u_2
R : Type ?u.11751
A : Type ?u.11754
inst✝⁴ : Monoid M
inst✝³ : AddMonoid A
s✝ t u : Set M
N : Type u_1
inst✝² : CommMonoid N
inst✝¹ : MulAction M N
inst✝ : IsScalarTower M N N
r : M
s : Set N
x✝ : N
hx✝ : x✝ ∈ closure s
x y : N
nx : ℕ
hx : r ^ nx • x ∈ closure (r • s)
ny : ℕ
hy : r ^ ny • y ∈ closure (r • s)
⊢ r ^ ny • y * r ^ nx • x ∈ closure (r • s)