Theorem: UniqueMul.mulHom_image_iff
File: Mathlib/Algebra/Group/UniqueProds.lean

tactic: refine' ⟨fun h ↦ _, fun h ↦ _⟩
state_before: G : Type u_2
H : Type u_1
inst✝² : Mul G
inst✝¹ : Mul H
A B : Finset G
a0 b0 : G
inst✝ : DecidableEq H
f : G →ₙ* H
hf : Function.Injective ↑f
⊢ UniqueMul (Finset.image (↑f) A) (Finset.image (↑f) B) (↑f a0) (↑f b0) ↔ UniqueMul A B a0 b0

tactic: intro a b ha hb ab
state_before: case refine'_1
G : Type u_2
H : Type u_1
inst✝² : Mul G
inst✝¹ : Mul H
A B : Finset G
a0 b0 : G
inst✝ : DecidableEq H
f : G →ₙ* H
hf : Function.Injective ↑f
h : UniqueMul (Finset.image (↑f) A) (Finset.image (↑f) B) (↑f a0) (↑f b0)
⊢ UniqueMul A B a0 b0

tactic: rw [← hf.eq_iff, ← hf.eq_iff]
state_before: case refine'_1
G : Type u_2
H : Type u_1
inst✝² : Mul G
inst✝¹ : Mul H
A B : Finset G
a0 b0 : G
inst✝ : DecidableEq H
f : G →ₙ* H
hf : Function.Injective ↑f
h : UniqueMul (Finset.image (↑f) A) (Finset.image (↑f) B) (↑f a0) (↑f b0)
a b : G
ha : a ∈ A
hb : b ∈ B
ab : a * b = a0 * b0
⊢ a = a0 ∧ b = b0

tactic: rw [← hf.eq_iff, map_mul, map_mul] at ab
state_before: case refine'_1
G : Type u_2
H : Type u_1
inst✝² : Mul G
inst✝¹ : Mul H
A B : Finset G
a0 b0 : G
inst✝ : DecidableEq H
f : G →ₙ* H
hf : Function.Injective ↑f
h : UniqueMul (Finset.image (↑f) A) (Finset.image (↑f) B) (↑f a0) (↑f b0)
a b : G
ha : a ∈ A
hb : b ∈ B
ab : a * b = a0 * b0
⊢ ↑f a = ↑f a0 ∧ ↑f b = ↑f b0

tactic: exact h (Finset.mem_image.mpr ⟨_, ha, rfl⟩) (Finset.mem_image.mpr ⟨_, hb, rfl⟩) ab
state_before: case refine'_1
G : Type u_2
H : Type u_1
inst✝² : Mul G
inst✝¹ : Mul H
A B : Finset G
a0 b0 : G
inst✝ : DecidableEq H
f : G →ₙ* H
hf : Function.Injective ↑f
h : UniqueMul (Finset.image (↑f) A) (Finset.image (↑f) B) (↑f a0) (↑f b0)
a b : G
ha : a ∈ A
hb : b ∈ B
ab : ↑f a * ↑f b = ↑f a0 * ↑f b0
⊢ ↑f a = ↑f a0 ∧ ↑f b = ↑f b0

tactic: intro a b aA bB ab
state_before: case refine'_2
G : Type u_2
H : Type u_1
inst✝² : Mul G
inst✝¹ : Mul H
A B : Finset G
a0 b0 : G
inst✝ : DecidableEq H
f : G →ₙ* H
hf : Function.Injective ↑f
h : UniqueMul A B a0 b0
⊢ UniqueMul (Finset.image (↑f) A) (Finset.image (↑f) B) (↑f a0) (↑f b0)

tactic: obtain ⟨a, ha, rfl⟩ : ∃ a' ∈ A, f a' = a := Finset.mem_image.mp aA
state_before: case refine'_2
G : Type u_2
H : Type u_1
inst✝² : Mul G
inst✝¹ : Mul H
A B : Finset G
a0 b0 : G
inst✝ : DecidableEq H
f : G →ₙ* H
hf : Function.Injective ↑f
h : UniqueMul A B a0 b0
a b : H
aA : a ∈ Finset.image (↑f) A
bB : b ∈ Finset.image (↑f) B
ab : a * b = ↑f a0 * ↑f b0
⊢ a = ↑f a0 ∧ b = ↑f b0

tactic: obtain ⟨b, hb, rfl⟩ : ∃ b' ∈ B, f b' = b := Finset.mem_image.mp bB
state_before: case refine'_2.intro.intro
G : Type u_2
H : Type u_1
inst✝² : Mul G
inst✝¹ : Mul H
A B : Finset G
a0 b0 : G
inst✝ : DecidableEq H
f : G →ₙ* H
hf : Function.Injective ↑f
h : UniqueMul A B a0 b0
b : H
bB : b ∈ Finset.image (↑f) B
a : G
ha : a ∈ A
aA : ↑f a ∈ Finset.image (↑f) A
ab : ↑f a * b = ↑f a0 * ↑f b0
⊢ ↑f a = ↑f a0 ∧ b = ↑f b0

tactic: rw [hf.eq_iff, hf.eq_iff]
state_before: case refine'_2.intro.intro.intro.intro
G : Type u_2
H : Type u_1
inst✝² : Mul G
inst✝¹ : Mul H
A B : Finset G
a0 b0 : G
inst✝ : DecidableEq H
f : G →ₙ* H
hf : Function.Injective ↑f
h : UniqueMul A B a0 b0
a : G
ha : a ∈ A
aA : ↑f a ∈ Finset.image (↑f) A
b : G
hb : b ∈ B
bB : ↑f b ∈ Finset.image (↑f) B
ab : ↑f a * ↑f b = ↑f a0 * ↑f b0
⊢ ↑f a = ↑f a0 ∧ ↑f b = ↑f b0

tactic: rw [← map_mul, ← map_mul, hf.eq_iff] at ab
state_before: case refine'_2.intro.intro.intro.intro
G : Type u_2
H : Type u_1
inst✝² : Mul G
inst✝¹ : Mul H
A B : Finset G
a0 b0 : G
inst✝ : DecidableEq H
f : G →ₙ* H
hf : Function.Injective ↑f
h : UniqueMul A B a0 b0
a : G
ha : a ∈ A
aA : ↑f a ∈ Finset.image (↑f) A
b : G
hb : b ∈ B
bB : ↑f b ∈ Finset.image (↑f) B
ab : ↑f a * ↑f b = ↑f a0 * ↑f b0
⊢ a = a0 ∧ b = b0

tactic: exact h ha hb ab
state_before: case refine'_2.intro.intro.intro.intro
G : Type u_2
H : Type u_1
inst✝² : Mul G
inst✝¹ : Mul H
A B : Finset G
a0 b0 : G
inst✝ : DecidableEq H
f : G →ₙ* H
hf : Function.Injective ↑f
h : UniqueMul A B a0 b0
a : G
ha : a ∈ A
aA : ↑f a ∈ Finset.image (↑f) A
b : G
hb : b ∈ B
bB : ↑f b ∈ Finset.image (↑f) B
ab : a * b = a0 * b0
⊢ a = a0 ∧ b = b0