instance : AlgEquivClass (A₁ ≃ₐ[R] A₂) R A₁ A₂ where
  coe f := f.toFun
  inv f := f.invFun
  coe_injective' f g h₁ h₂ := by
    obtain ⟨⟨f,_⟩,_⟩ := f
    obtain ⟨⟨g,_⟩,_⟩ := g
    

Proof state:
case mk.mk.mk.mk
R : Type uR
A₁ : Type uA₁
A₂ : Type uA₂
A₃ : Type uA₃
A₁' : Type uA₁'
A₂' : Type uA₂'
A₃' : Type uA₃'
inst✝¹² : CommSemiring R
inst✝¹¹ : Semiring A₁
inst✝¹⁰ : Semiring A₂
inst✝⁹ : Semiring A₃
inst✝⁸ : Semiring A₁'
inst✝⁷ : Semiring A₂'
inst✝⁶ : Semiring A₃'
inst✝⁵ : Algebra R A₁
inst✝⁴ : Algebra R A₂
inst✝³ : Algebra R A₃
inst✝² : Algebra R A₁'
inst✝¹ : Algebra R A₂'
inst✝ : Algebra R A₃'
e : A₁ ≃ₐ[R] A₂
f : A₁ → A₂
invFun✝¹ : A₂ → A₁
left_inv✝¹ : Function.LeftInverse invFun✝¹ f
right_inv✝¹ : Function.RightInverse invFun✝¹ f
map_mul'✝¹ :
  ∀ (x y : A₁),
    Equiv.toFun { toFun := f, invFun := invFun✝¹, left_inv := left_inv✝¹, right_inv := right_inv✝¹ } (x * y) =
      Equiv.toFun { toFun := f, invFun := invFun✝¹, left_inv := left_inv✝¹, right_inv := right_inv✝¹ } x *
        Equiv.toFun { toFun := f, invFun := invFun✝¹, left_inv := left_inv✝¹, right_inv := right_inv✝¹ } y
map_add'✝¹ :
  ∀ (x y : A₁),
    Equiv.toFun { toFun := f, invFun := invFun✝¹, left_inv := left_inv✝¹, right_inv := right_inv✝¹ } (x + y) =
      Equiv.toFun { toFun := f, invFun := invFun✝¹, left_inv := left_inv✝¹, right_inv := right_inv✝¹ } x +
        Equiv.toFun { toFun := f, invFun := invFun✝¹, left_inv := left_inv✝¹, right_inv := right_inv✝¹ } y
commutes'✝¹ :
  ∀ (r : R),
    Equiv.toFun { toFun := f, invFun := invFun✝¹, left_inv := left_inv✝¹, right_inv := right_inv✝¹ }
        ((algebraMap R A₁) r) =
      (algebraMap R A₂) r
g : A₁ → A₂
invFun✝ : A₂ → A₁
left_inv✝ : Function.LeftInverse invFun✝ g
right_inv✝ : Function.RightInverse invFun✝ g
map_mul'✝ :
  ∀ (x y : A₁),
    Equiv.toFun { toFun := g, invFun := invFun✝, left_inv := left_inv✝, right_inv := right_inv✝ } (x * y) =
      Equiv.toFun { toFun := g, invFun := invFun✝, left_inv := left_inv✝, right_inv := right_inv✝ } x *
        Equiv.toFun { toFun := g, invFun := invFun✝, left_inv := left_inv✝, right_inv := right_inv✝ } y
map_add'✝ :
  ∀ (x y : A₁),
    Equiv.toFun { toFun := g, invFun := invFun✝, left_inv := left_inv✝, right_inv := right_inv✝ } (x + y) =
      Equiv.toFun { toFun := g, invFun := invFun✝, left_inv := left_inv✝, right_inv := right_inv✝ } x +
        Equiv.toFun { toFun := g, invFun := invFun✝, left_inv := left_inv✝, right_inv := right_inv✝ } y
commutes'✝ :
  ∀ (r : R),
    Equiv.toFun { toFun := g, invFun := invFun✝, left_inv := left_inv✝, right_inv := right_inv✝ }
        ((algebraMap R A₁) r) =
      (algebraMap R A₂) r
h₁ :
  (fun f => f.toFun)
      { toEquiv := { toFun := f, invFun := invFun✝¹, left_inv := left_inv✝¹, right_inv := right_inv✝¹ },
        map_mul' := map_mul'✝¹, map_add' := map_add'✝¹, commutes' := commutes'✝¹ } =
    (fun f => f.toFun)
      { toEquiv := { toFun := g, invFun := invFun✝, left_inv := left_inv✝, right_inv := right_inv✝ },
        map_mul' := map_mul'✝, map_add' := map_add'✝, commutes' := commutes'✝ }
h₂ :
  (fun f => f.invFun)
      { toEquiv := { toFun := f, invFun := invFun✝¹, left_inv := left_inv✝¹, right_inv := right_inv✝¹ },
        map_mul' := map_mul'✝¹, map_add' := map_add'✝¹, commutes' := commutes'✝¹ } =
    (fun f => f.invFun)
      { toEquiv := { toFun := g, invFun := invFun✝, left_inv := left_inv✝, right_inv := right_inv✝ },
        map_mul' := map_mul'✝, map_add' := map_add'✝, commutes' := commutes'✝ }
⊢ { toEquiv := { toFun := f, invFun := invFun✝¹, left_inv := left_inv✝¹, right_inv := right_inv✝¹ },
      map_mul' := map_mul'✝¹, map_add' := map_add'✝¹, commutes' := commutes'✝¹ } =
    { toEquiv := { toFun := g, invFun := invFun✝, left_inv := left_inv✝, right_inv := right_inv✝ },
      map_mul' := map_mul'✝, map_add' := map_add'✝, commutes' := commutes'✝ }

Next tactic:
congr