Theorem: ofMul_image_powers_eq_multiples_ofMul
File: Mathlib/Algebra/Group/Submonoid/Membership.lean

tactic: ext
state_before: M : Type u_1
A : Type u_2
B : Type u_3
inst✝ : Monoid M
x : M
⊢ ⇑Additive.ofMul '' ↑(Submonoid.powers x) = ↑(AddSubmonoid.multiples (Additive.ofMul x))
state_after: case h
M : Type u_1
A : Type u_2
B : Type u_3
inst✝ : Monoid M
x : M
x✝ : Additive M
⊢ x✝ ∈ ⇑Additive.ofMul '' ↑(Submonoid.powers x) ↔ x✝ ∈ ↑(AddSubmonoid.multiples (Additive.ofMul x))

tactic: constructor
state_before: case h
M : Type u_1
A : Type u_2
B : Type u_3
inst✝ : Monoid M
x : M
x✝ : Additive M
⊢ x✝ ∈ ⇑Additive.ofMul '' ↑(Submonoid.powers x) ↔ x✝ ∈ ↑(AddSubmonoid.multiples (Additive.ofMul x))
state_after: case h.mp
M : Type u_1
A : Type u_2
B : Type u_3
inst✝ : Monoid M
x : M
x✝ : Additive M
⊢ x✝ ∈ ⇑Additive.ofMul '' ↑(Submonoid.powers x) → x✝ ∈ ↑(AddSubmonoid.multiples (Additive.ofMul x))

case h.mpr
M : Type u_1
A : Type u_2
B : Type u_3
inst✝ : Monoid M
x : M
x✝ : Additive M
⊢ x✝ ∈ ↑(AddSubmonoid.multiples (Additive.ofMul x)) → x✝ ∈ ⇑Additive.ofMul '' ↑(Submonoid.powers x)

tactic: rintro ⟨y, ⟨n, hy1⟩, hy2⟩
state_before: case h.mp
M : Type u_1
A : Type u_2
B : Type u_3
inst✝ : Monoid M
x : M
x✝ : Additive M
⊢ x✝ ∈ ⇑Additive.ofMul '' ↑(Submonoid.powers x) → x✝ ∈ ↑(AddSubmonoid.multiples (Additive.ofMul x))
state_after: case h.mp.intro.intro.intro
M : Type u_1
A : Type u_2
B : Type u_3
inst✝ : Monoid M
x : M
x✝ : Additive M
y : M
hy2 : Additive.ofMul y = x✝
n : ℕ
hy1 : (fun x_1 => x ^ x_1) n = y
⊢ x✝ ∈ ↑(AddSubmonoid.multiples (Additive.ofMul x))

tactic: use n
state_before: case h.mp.intro.intro.intro
M : Type u_1
A : Type u_2
B : Type u_3
inst✝ : Monoid M
x : M
x✝ : Additive M
y : M
hy2 : Additive.ofMul y = x✝
n : ℕ
hy1 : (fun x_1 => x ^ x_1) n = y
⊢ x✝ ∈ ↑(AddSubmonoid.multiples (Additive.ofMul x))
state_after: case h
M : Type u_1
A : Type u_2
B : Type u_3
inst✝ : Monoid M
x : M
x✝ : Additive M
y : M
hy2 : Additive.ofMul y = x✝
n : ℕ
hy1 : (fun x_1 => x ^ x_1) n = y
⊢ (fun i => i • Additive.ofMul x) n = x✝

tactic: simpa [← ofMul_pow, hy1]
state_before: case h
M : Type u_1
A : Type u_2
B : Type u_3
inst✝ : Monoid M
x : M
x✝ : Additive M
y : M
hy2 : Additive.ofMul y = x✝
n : ℕ
hy1 : (fun x_1 => x ^ x_1) n = y
⊢ (fun i => i • Additive.ofMul x) n = x✝
state_after: no goals

tactic: rintro ⟨n, hn⟩
state_before: case h.mpr
M : Type u_1
A : Type u_2
B : Type u_3
inst✝ : Monoid M
x : M
x✝ : Additive M
⊢ x✝ ∈ ↑(AddSubmonoid.multiples (Additive.ofMul x)) → x✝ ∈ ⇑Additive.ofMul '' ↑(Submonoid.powers x)
state_after: case h.mpr.intro
M : Type u_1
A : Type u_2
B : Type u_3
inst✝ : Monoid M
x : M
x✝ : Additive M
n : ℕ
hn : (fun i => i • Additive.ofMul x) n = x✝
⊢ x✝ ∈ ⇑Additive.ofMul '' ↑(Submonoid.powers x)

tactic: refine ⟨x ^ n, ⟨n, rfl⟩, ?_⟩
state_before: case h.mpr.intro
M : Type u_1
A : Type u_2
B : Type u_3
inst✝ : Monoid M
x : M
x✝ : Additive M
n : ℕ
hn : (fun i => i • Additive.ofMul x) n = x✝
⊢ x✝ ∈ ⇑Additive.ofMul '' ↑(Submonoid.powers x)
state_after: case h.mpr.intro
M : Type u_1
A : Type u_2
B : Type u_3
inst✝ : Monoid M
x : M
x✝ : Additive M
n : ℕ
hn : (fun i => i • Additive.ofMul x) n = x✝
⊢ Additive.ofMul (x ^ n) = x✝

tactic: rwa [ofMul_pow]
state_before: case h.mpr.intro
M : Type u_1
A : Type u_2
B : Type u_3
inst✝ : Monoid M
x : M
x✝ : Additive M
n : ℕ
hn : (fun i => i • Additive.ofMul x) n = x✝
⊢ Additive.ofMul (x ^ n) = x✝
state_after: no goals