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

Proof steps:
state_before: G : Type u_1
H : Type u_2
inst✝² : Mul G
inst✝¹ : Mul H
A✝ B✝ : Finset G
a0 b0 : G
inst✝ : DecidableEq H
f : G →ₙ* H
A B : Finset G
aG bG : G
aH bH : H
hae : f aG = aH
hbe : f bG = bH
huH : UniqueMul (image (⇑f) A) (image (⇑f) B) aH bH
huG : UniqueMul (filter (fun x => f x = aH) A) (filter (fun x => f x = bH) B) aG bG
a b : G
ha : a ∈ A
hb : b ∈ B
he : a * b = aG * bG
⊢ a = aG ∧ b = bG
state_after: G : Type u_1
H : Type u_2
inst✝² : Mul G
inst✝¹ : Mul H
A✝ B✝ : Finset G
a0 b0 : G
inst✝ : DecidableEq H
f : G →ₙ* H
A B : Finset G
aG bG : G
aH bH : H
hae : f aG = aH
hbe : f bG = bH
huG : UniqueMul (filter (fun x => f x = aH) A) (filter (fun x => f x = bH) B) aG bG
a b : G
ha : a ∈ A
hb : b ∈ B
he : a * b = aG * bG
huH : f a * f b = aH * bH → f a = aH ∧ f b = bH
⊢ a = aG ∧ b = bG
tactic: specialize huH (mem_image_of_mem _ ha) (mem_image_of_mem _ hb)
state_before: G : Type u_1
H : Type u_2
inst✝² : Mul G
inst✝¹ : Mul H
A✝ B✝ : Finset G
a0 b0 : G
inst✝ : DecidableEq H
f : G →ₙ* H
A B : Finset G
aG bG : G
aH bH : H
hae : f aG = aH
hbe : f bG = bH
huG : UniqueMul (filter (fun x => f x = aH) A) (filter (fun x => f x = bH) B) aG bG
a b : G
ha : a ∈ A
hb : b ∈ B
he : a * b = aG * bG
huH : f a * f b = aH * bH → f a = aH ∧ f b = bH
⊢ a = aG ∧ b = bG
state_after: G : Type u_1
H : Type u_2
inst✝² : Mul G
inst✝¹ : Mul H
A✝ B✝ : Finset G
a0 b0 : G
inst✝ : DecidableEq H
f : G →ₙ* H
A B : Finset G
aG bG : G
aH bH : H
hae : f aG = aH
hbe : f bG = bH
huG : UniqueMul (filter (fun x => f x = aH) A) (filter (fun x => f x = bH) B) aG bG
a b : G
ha : a ∈ A
hb : b ∈ B
he : a * b = aG * bG
huH : aH * bH = aH * bH → f a = aH ∧ f b = bH
⊢ a = aG ∧ b = bG
tactic: rw [← map_mul, he, map_mul, hae, hbe] at huH
state_before: G : Type u_1
H : Type u_2
inst✝² : Mul G
inst✝¹ : Mul H
A✝ B✝ : Finset G
a0 b0 : G
inst✝ : DecidableEq H
f : G →ₙ* H
A B : Finset G
aG bG : G
aH bH : H
hae : f aG = aH
hbe : f bG = bH
huG : UniqueMul (filter (fun x => f x = aH) A) (filter (fun x => f x = bH) B) aG bG
a b : G
ha : a ∈ A
hb : b ∈ B
he : a * b = aG * bG
huH : aH * bH = aH * bH → f a = aH ∧ f b = bH
⊢ a = aG ∧ b = bG
state_after: case refine_1
G : Type u_1
H : Type u_2
inst✝² : Mul G
inst✝¹ : Mul H
A✝ B✝ : Finset G
a0 b0 : G
inst✝ : DecidableEq H
f : G →ₙ* H
A B : Finset G
aG bG : G
aH bH : H
hae : f aG = aH
hbe : f bG = bH
huG : UniqueMul (filter (fun x => f x = aH) A) (filter (fun x => f x = bH) B) aG bG
a b : G
ha : a ∈ A
hb : b ∈ B
he : a * b = aG * bG
huH : aH * bH = aH * bH → f a = aH ∧ f b = bH
⊢ a ∈ A ∧ f a = aH

case refine_2
G : Type u_1
H : Type u_2
inst✝² : Mul G
inst✝¹ : Mul H
A✝ B✝ : Finset G
a0 b0 : G
inst✝ : DecidableEq H
f : G →ₙ* H
A B : Finset G
aG bG : G
aH bH : H
hae : f aG = aH
hbe : f bG = bH
huG : UniqueMul (filter (fun x => f x = aH) A) (filter (fun x => f x = bH) B) aG bG
a b : G
ha : a ∈ A
hb : b ∈ B
he : a * b = aG * bG
huH : aH * bH = aH * bH → f a = aH ∧ f b = bH
⊢ b ∈ B ∧ f b = bH
tactic: refine huG ?_ ?_ he <;> rw [mem_filter]
state_before: case refine_1
G : Type u_1
H : Type u_2
inst✝² : Mul G
inst✝¹ : Mul H
A✝ B✝ : Finset G
a0 b0 : G
inst✝ : DecidableEq H
f : G →ₙ* H
A B : Finset G
aG bG : G
aH bH : H
hae : f aG = aH
hbe : f bG = bH
huG : UniqueMul (filter (fun x => f x = aH) A) (filter (fun x => f x = bH) B) aG bG
a b : G
ha : a ∈ A
hb : b ∈ B
he : a * b = aG * bG
huH : aH * bH = aH * bH → f a = aH ∧ f b = bH
⊢ a ∈ A ∧ f a = aH

case refine_2
G : Type u_1
H : Type u_2
inst✝² : Mul G
inst✝¹ : Mul H
A✝ B✝ : Finset G
a0 b0 : G
inst✝ : DecidableEq H
f : G →ₙ* H
A B : Finset G
aG bG : G
aH bH : H
hae : f aG = aH
hbe : f bG = bH
huG : UniqueMul (filter (fun x => f x = aH) A) (filter (fun x => f x = bH) B) aG bG
a b : G
ha : a ∈ A
hb : b ∈ B
he : a * b = aG * bG
huH : aH * bH = aH * bH → f a = aH ∧ f b = bH
⊢ b ∈ B ∧ f b = bH
state_after: no goals
tactic: exacts [⟨ha, (huH rfl).1⟩, ⟨hb, (huH rfl).2⟩]