Strange failure of general rewriting

While using the general rewriting for some complex statement, I realized that the following (distilled version) does not work:

From Coq Require Import Morphisms Morphisms_Relations Relation_Definitions RelationClasses.

Inductive my_ty : Set :=
| my_ty_cons : my_ty
.

Notation "R <~> R'" := (@relation_equivalence my_ty R R') (at level 90, no associativity).

Inductive my_rel : relation my_ty :=
| my_rel_cons : my_rel my_ty_cons my_ty_cons
.

Set Debug "tactic-unification".

Goal forall a b Rgen (x : nat),
  Rgen x <~> my_rel ->
  Rgen x a b ->
  my_rel a b.
Proof.
  Search relation_equivalence.
  intros * H H0.
  Fail setoid_rewrite H in H0.
  change (Rgen x) with (fun a b => Rgen x a b) in H0.
  Fail setoid_rewrite H in H0.
Abort.

Context (pr : subrelation relation_equivalence (pointwise_relation my_ty (pointwise_relation my_ty iff))).

Goal forall a b Rgen (x : nat),
  Rgen x <~> my_rel ->
  Rgen x a b ->
  my_rel a b.
Proof.
  Search relation_equivalence.
  intros * H H0.
  change (Rgen x) with (fun a b => Rgen x a b) in H0.
  setoid_rewrite H in H0.
Abort.

In the first goal, both rewriting fails, specifically the first one fails because of unification failure. Why does it unify Rgen x (the left side of <~>) only with Rgen x a b, Rgen, x, a, b, but never with Rgen x?

This works once I use change (Rgen x) with (fun a b => Rgen x a b) in H0. (so that (fun a b => Rgen x a b) becomes a head by itself), but then the problem is about that subrelation I put as a Context. Why does this rewriting requires that? Isn’t the Proper instance for relation_equivalence not enough?