open MulOpposite in
@[to_additive]
theorem of_mulOpposite (h : TwoUniqueProds Gᵐᵒᵖ) : TwoUniqueProds G where
  uniqueMul_of_one_lt_card hc := by
    let f : G ↪ Gᵐᵒᵖ := ⟨op, op_injective⟩
    rw [← card_map f, ← card_map f, mul_comm] at hc
    obtain ⟨p1, h1, p2, h2, hne, hu1, hu2⟩ := h.uniqueMul_of_one_lt_card hc
    simp_rw [mem_product] at h1 h2 ⊢
    refine ⟨(_, _), ⟨?_, ?_⟩, (_, _), ⟨?_, ?_⟩, ?_, hu1.of_mulOpposite, hu2.of_mulOpposite⟩
    

Proof state:
case intro.intro.intro.intro.intro.intro.refine_1
G : Type u
H : Type v
inst✝¹ : Mul G
inst✝ : Mul H
h : TwoUniqueProds Gᵐᵒᵖ
A✝ B✝ : Finset G
f : G ↪ Gᵐᵒᵖ := { toFun := op, inj' := (_ : Function.Injective op) }
hc : 1 < card (map f B✝) * card (map f A✝)
p1 p2 : Gᵐᵒᵖ × Gᵐᵒᵖ
hne : p1 ≠ p2
hu1 : UniqueMul (map f B✝) (map f A✝) p1.1 p1.2
hu2 : UniqueMul (map f B✝) (map f A✝) p2.1 p2.2
h1 :
  p1.1 ∈ map { toFun := op, inj' := (_ : Function.Injective op) } B✝ ∧
    p1.2 ∈ map { toFun := op, inj' := (_ : Function.Injective op) } A✝
h2 :
  p2.1 ∈ map { toFun := op, inj' := (_ : Function.Injective op) } B✝ ∧
    p2.2 ∈ map { toFun := op, inj' := (_ : Function.Injective op) } A✝
⊢ (p1.2.1, p1.1.1).1 ∈ A✝
case intro.intro.intro.intro.intro.intro.refine_2
G : Type u
H : Type v
inst✝¹ : Mul G
inst✝ : Mul H
h : TwoUniqueProds Gᵐᵒᵖ
A✝ B✝ : Finset G
f : G ↪ Gᵐᵒᵖ := { toFun := op, inj' := (_ : Function.Injective op) }
hc : 1 < card (map f B✝) * card (map f A✝)
p1 p2 : Gᵐᵒᵖ × Gᵐᵒᵖ
hne : p1 ≠ p2
hu1 : UniqueMul (map f B✝) (map f A✝) p1.1 p1.2
hu2 : UniqueMul (map f B✝) (map f A✝) p2.1 p2.2
h1 :
  p1.1 ∈ map { toFun := op, inj' := (_ : Function.Injective op) } B✝ ∧
    p1.2 ∈ map { toFun := op, inj' := (_ : Function.Injective op) } A✝
h2 :
  p2.1 ∈ map { toFun := op, inj' := (_ : Function.Injective op) } B✝ ∧
    p2.2 ∈ map { toFun := op, inj' := (_ : Function.Injective op) } A✝
⊢ (p1.2.1, p1.1.1).2 ∈ B✝
case intro.intro.intro.intro.intro.intro.refine_3
G : Type u
H : Type v
inst✝¹ : Mul G
inst✝ : Mul H
h : TwoUniqueProds Gᵐᵒᵖ
A✝ B✝ : Finset G
f : G ↪ Gᵐᵒᵖ := { toFun := op, inj' := (_ : Function.Injective op) }
hc : 1 < card (map f B✝) * card (map f A✝)
p1 p2 : Gᵐᵒᵖ × Gᵐᵒᵖ
hne : p1 ≠ p2
hu1 : UniqueMul (map f B✝) (map f A✝) p1.1 p1.2
hu2 : UniqueMul (map f B✝) (map f A✝) p2.1 p2.2
h1 :
  p1.1 ∈ map { toFun := op, inj' := (_ : Function.Injective op) } B✝ ∧
    p1.2 ∈ map { toFun := op, inj' := (_ : Function.Injective op) } A✝
h2 :
  p2.1 ∈ map { toFun := op, inj' := (_ : Function.Injective op) } B✝ ∧
    p2.2 ∈ map { toFun := op, inj' := (_ : Function.Injective op) } A✝
⊢ (p2.2.1, p2.1.1).1 ∈ A✝
case intro.intro.intro.intro.intro.intro.refine_4
G : Type u
H : Type v
inst✝¹ : Mul G
inst✝ : Mul H
h : TwoUniqueProds Gᵐᵒᵖ
A✝ B✝ : Finset G
f : G ↪ Gᵐᵒᵖ := { toFun := op, inj' := (_ : Function.Injective op) }
hc : 1 < card (map f B✝) * card (map f A✝)
p1 p2 : Gᵐᵒᵖ × Gᵐᵒᵖ
hne : p1 ≠ p2
hu1 : UniqueMul (map f B✝) (map f A✝) p1.1 p1.2
hu2 : UniqueMul (map f B✝) (map f A✝) p2.1 p2.2
h1 :
  p1.1 ∈ map { toFun := op, inj' := (_ : Function.Injective op) } B✝ ∧
    p1.2 ∈ map { toFun := op, inj' := (_ : Function.Injective op) } A✝
h2 :
  p2.1 ∈ map { toFun := op, inj' := (_ : Function.Injective op) } B✝ ∧
    p2.2 ∈ map { toFun := op, inj' := (_ : Function.Injective op) } A✝
⊢ (p2.2.1, p2.1.1).2 ∈ B✝
case intro.intro.intro.intro.intro.intro.refine_5
G : Type u
H : Type v
inst✝¹ : Mul G
inst✝ : Mul H
h : TwoUniqueProds Gᵐᵒᵖ
A✝ B✝ : Finset G
f : G ↪ Gᵐᵒᵖ := { toFun := op, inj' := (_ : Function.Injective op) }
hc : 1 < card (map f B✝) * card (map f A✝)
p1 p2 : Gᵐᵒᵖ × Gᵐᵒᵖ
hne : p1 ≠ p2
hu1 : UniqueMul (map f B✝) (map f A✝) p1.1 p1.2
hu2 : UniqueMul (map f B✝) (map f A✝) p2.1 p2.2
h1 :
  p1.1 ∈ map { toFun := op, inj' := (_ : Function.Injective op) } B✝ ∧
    p1.2 ∈ map { toFun := op, inj' := (_ : Function.Injective op) } A✝
h2 :
  p2.1 ∈ map { toFun := op, inj' := (_ : Function.Injective op) } B✝ ∧
    p2.2 ∈ map { toFun := op, inj' := (_ : Function.Injective op) } A✝
⊢ (p1.2.1, p1.1.1) ≠ (p2.2.1, p2.1.1)

Next tactic:
pick_goal 5