Theorem: ofMul_image_zpowers_eq_zmultiples_ofMul
File: Mathlib/Algebra/Group/Subgroup/ZPowers.lean

tactic: ext y
state_before: G : Type u_1
inst✝² : Group G
A : Type u_2
inst✝¹ : AddGroup A
N : Type u_3
inst✝ : Group N
x : G
⊢ ⇑Additive.ofMul '' ↑(Subgroup.zpowers x) = ↑(AddSubgroup.zmultiples (Additive.ofMul x))
state_after: case h
G : Type u_1
inst✝² : Group G
A : Type u_2
inst✝¹ : AddGroup A
N : Type u_3
inst✝ : Group N
x : G
y : Additive G
⊢ y ∈ ⇑Additive.ofMul '' ↑(Subgroup.zpowers x) ↔ y ∈ ↑(AddSubgroup.zmultiples (Additive.ofMul x))

tactic: constructor
state_before: case h
G : Type u_1
inst✝² : Group G
A : Type u_2
inst✝¹ : AddGroup A
N : Type u_3
inst✝ : Group N
x : G
y : Additive G
⊢ y ∈ ⇑Additive.ofMul '' ↑(Subgroup.zpowers x) ↔ y ∈ ↑(AddSubgroup.zmultiples (Additive.ofMul x))
state_after: case h.mp
G : Type u_1
inst✝² : Group G
A : Type u_2
inst✝¹ : AddGroup A
N : Type u_3
inst✝ : Group N
x : G
y : Additive G
⊢ y ∈ ⇑Additive.ofMul '' ↑(Subgroup.zpowers x) → y ∈ ↑(AddSubgroup.zmultiples (Additive.ofMul x))

case h.mpr
G : Type u_1
inst✝² : Group G
A : Type u_2
inst✝¹ : AddGroup A
N : Type u_3
inst✝ : Group N
x : G
y : Additive G
⊢ y ∈ ↑(AddSubgroup.zmultiples (Additive.ofMul x)) → y ∈ ⇑Additive.ofMul '' ↑(Subgroup.zpowers x)

tactic: rintro ⟨z, ⟨m, hm⟩, hz2⟩
state_before: case h.mp
G : Type u_1
inst✝² : Group G
A : Type u_2
inst✝¹ : AddGroup A
N : Type u_3
inst✝ : Group N
x : G
y : Additive G
⊢ y ∈ ⇑Additive.ofMul '' ↑(Subgroup.zpowers x) → y ∈ ↑(AddSubgroup.zmultiples (Additive.ofMul x))
state_after: case h.mp.intro.intro.intro
G : Type u_1
inst✝² : Group G
A : Type u_2
inst✝¹ : AddGroup A
N : Type u_3
inst✝ : Group N
x : G
y : Additive G
z : G
hz2 : Additive.ofMul z = y
m : ℤ
hm : (fun x_1 => x ^ x_1) m = z
⊢ y ∈ ↑(AddSubgroup.zmultiples (Additive.ofMul x))

tactic: use m
state_before: case h.mp.intro.intro.intro
G : Type u_1
inst✝² : Group G
A : Type u_2
inst✝¹ : AddGroup A
N : Type u_3
inst✝ : Group N
x : G
y : Additive G
z : G
hz2 : Additive.ofMul z = y
m : ℤ
hm : (fun x_1 => x ^ x_1) m = z
⊢ y ∈ ↑(AddSubgroup.zmultiples (Additive.ofMul x))
state_after: case h
G : Type u_1
inst✝² : Group G
A : Type u_2
inst✝¹ : AddGroup A
N : Type u_3
inst✝ : Group N
x : G
y : Additive G
z : G
hz2 : Additive.ofMul z = y
m : ℤ
hm : (fun x_1 => x ^ x_1) m = z
⊢ (fun x_1 => x_1 • Additive.ofMul x) m = y

tactic: simp only at *
state_before: case h
G : Type u_1
inst✝² : Group G
A : Type u_2
inst✝¹ : AddGroup A
N : Type u_3
inst✝ : Group N
x : G
y : Additive G
z : G
hz2 : Additive.ofMul z = y
m : ℤ
hm : (fun x_1 => x ^ x_1) m = z
⊢ (fun x_1 => x_1 • Additive.ofMul x) m = y
state_after: case h
G : Type u_1
inst✝² : Group G
A : Type u_2
inst✝¹ : AddGroup A
N : Type u_3
inst✝ : Group N
x : G
y : Additive G
z : G
hz2 : Additive.ofMul z = y
m : ℤ
hm : x ^ m = z
⊢ m • Additive.ofMul x = y

tactic: rwa [← ofMul_zpow, hm]
state_before: case h
G : Type u_1
inst✝² : Group G
A : Type u_2
inst✝¹ : AddGroup A
N : Type u_3
inst✝ : Group N
x : G
y : Additive G
z : G
hz2 : Additive.ofMul z = y
m : ℤ
hm : x ^ m = z
⊢ m • Additive.ofMul x = y
state_after: no goals

tactic: rintro ⟨n, hn⟩
state_before: case h.mpr
G : Type u_1
inst✝² : Group G
A : Type u_2
inst✝¹ : AddGroup A
N : Type u_3
inst✝ : Group N
x : G
y : Additive G
⊢ y ∈ ↑(AddSubgroup.zmultiples (Additive.ofMul x)) → y ∈ ⇑Additive.ofMul '' ↑(Subgroup.zpowers x)
state_after: case h.mpr.intro
G : Type u_1
inst✝² : Group G
A : Type u_2
inst✝¹ : AddGroup A
N : Type u_3
inst✝ : Group N
x : G
y : Additive G
n : ℤ
hn : (fun x_1 => x_1 • Additive.ofMul x) n = y
⊢ y ∈ ⇑Additive.ofMul '' ↑(Subgroup.zpowers x)

tactic: refine ⟨x ^ n, ⟨n, rfl⟩, ?_⟩
state_before: case h.mpr.intro
G : Type u_1
inst✝² : Group G
A : Type u_2
inst✝¹ : AddGroup A
N : Type u_3
inst✝ : Group N
x : G
y : Additive G
n : ℤ
hn : (fun x_1 => x_1 • Additive.ofMul x) n = y
⊢ y ∈ ⇑Additive.ofMul '' ↑(Subgroup.zpowers x)
state_after: case h.mpr.intro
G : Type u_1
inst✝² : Group G
A : Type u_2
inst✝¹ : AddGroup A
N : Type u_3
inst✝ : Group N
x : G
y : Additive G
n : ℤ
hn : (fun x_1 => x_1 • Additive.ofMul x) n = y
⊢ Additive.ofMul (x ^ n) = y

tactic: rwa [ofMul_zpow]
state_before: case h.mpr.intro
G : Type u_1
inst✝² : Group G
A : Type u_2
inst✝¹ : AddGroup A
N : Type u_3
inst✝ : Group N
x : G
y : Additive G
n : ℤ
hn : (fun x_1 => x_1 • Additive.ofMul x) n = y
⊢ Additive.ofMul (x ^ n) = y
state_after: no goals