instance [Semiring R] : RingInvoClass (RingInvo R) R where
  coe f := f.toFun
  inv f := f.invFun
  coe_injective' e f h₁ h₂ := by
    rcases e with ⟨⟨tE, _⟩, _⟩; rcases f with ⟨⟨tF, _⟩, _⟩
    cases tE
    

Proof state:
case mk.mk.mk.mk.mk
R : Type u_1
inst✝¹ inst✝ : Semiring R
tF : R ≃ Rᵐᵒᵖ
map_mul'✝¹ : ∀ (x y : R), Equiv.toFun tF (x * y) = Equiv.toFun tF x * Equiv.toFun tF y
map_add'✝¹ : ∀ (x y : R), Equiv.toFun tF (x + y) = Equiv.toFun tF x + Equiv.toFun tF y
involution'✝¹ :
  ∀ (x : R),
    MulOpposite.unop
        (Equiv.toFun { toEquiv := tF, map_mul' := map_mul'✝¹, map_add' := map_add'✝¹ }.toEquiv
          (MulOpposite.unop
            (Equiv.toFun { toEquiv := tF, map_mul' := map_mul'✝¹, map_add' := map_add'✝¹ }.toEquiv x))) =
      x
toFun✝ : R → Rᵐᵒᵖ
invFun✝ : Rᵐᵒᵖ → R
left_inv✝ : Function.LeftInverse invFun✝ toFun✝
right_inv✝ : Function.RightInverse invFun✝ toFun✝
map_mul'✝ :
  ∀ (x y : R),
    Equiv.toFun { toFun := toFun✝, invFun := invFun✝, left_inv := left_inv✝, right_inv := right_inv✝ } (x * y) =
      Equiv.toFun { toFun := toFun✝, invFun := invFun✝, left_inv := left_inv✝, right_inv := right_inv✝ } x *
        Equiv.toFun { toFun := toFun✝, invFun := invFun✝, left_inv := left_inv✝, right_inv := right_inv✝ } y
map_add'✝ :
  ∀ (x y : R),
    Equiv.toFun { toFun := toFun✝, invFun := invFun✝, left_inv := left_inv✝, right_inv := right_inv✝ } (x + y) =
      Equiv.toFun { toFun := toFun✝, invFun := invFun✝, left_inv := left_inv✝, right_inv := right_inv✝ } x +
        Equiv.toFun { toFun := toFun✝, invFun := invFun✝, left_inv := left_inv✝, right_inv := right_inv✝ } y
involution'✝ :
  ∀ (x : R),
    MulOpposite.unop
        (Equiv.toFun
          { toEquiv := { toFun := toFun✝, invFun := invFun✝, left_inv := left_inv✝, right_inv := right_inv✝ },
              map_mul' := map_mul'✝, map_add' := map_add'✝ }.toEquiv
          (MulOpposite.unop
            (Equiv.toFun
              { toEquiv := { toFun := toFun✝, invFun := invFun✝, left_inv := left_inv✝, right_inv := right_inv✝ },
                  map_mul' := map_mul'✝, map_add' := map_add'✝ }.toEquiv
              x))) =
      x
h₁ :
  (fun f => f.toFun)
      {
        toRingEquiv :=
          { toEquiv := { toFun := toFun✝, invFun := invFun✝, left_inv := left_inv✝, right_inv := right_inv✝ },
            map_mul' := map_mul'✝, map_add' := map_add'✝ },
        involution' := involution'✝ } =
    (fun f => f.toFun)
      { toRingEquiv := { toEquiv := tF, map_mul' := map_mul'✝¹, map_add' := map_add'✝¹ }, involution' := involution'✝¹ }
h₂ :
  (fun f => f.invFun)
      {
        toRingEquiv :=
          { toEquiv := { toFun := toFun✝, invFun := invFun✝, left_inv := left_inv✝, right_inv := right_inv✝ },
            map_mul' := map_mul'✝, map_add' := map_add'✝ },
        involution' := involution'✝ } =
    (fun f => f.invFun)
      { toRingEquiv := { toEquiv := tF, map_mul' := map_mul'✝¹, map_add' := map_add'✝¹ }, involution' := involution'✝¹ }
⊢ {
      toRingEquiv :=
        { toEquiv := { toFun := toFun✝, invFun := invFun✝, left_inv := left_inv✝, right_inv := right_inv✝ },
          map_mul' := map_mul'✝, map_add' := map_add'✝ },
      involution' := involution'✝ } =
    { toRingEquiv := { toEquiv := tF, map_mul' := map_mul'✝¹, map_add' := map_add'✝¹ }, involution' := involution'✝¹ }

Next tactic:
cases tF