
Require Import Relations Program Setoid Morphisms.

Section S1.
  Variable R: nat -> relation bool.
  Instance HR1: forall n, Transitive (R n). Admitted.
  Instance HR2: forall n, Symmetric (R n).  Admitted.
  Hypothesis H: forall n a, R n (andb a a) a.
  Goal forall n a b, R n b a.
   intros. 
   (* rewrite <- H. *) (* Anomaly: Evar ?.. was not declared. Please report. *)
   (* idem with setoid_rewrite *)
(*    assert (HR2' := HR2 n). *)
   rewrite <- H.                (* ok *)
   admit.
  Qed.
End S1.

Section S2.
  Variable R: nat -> relation bool.
  Instance HR: forall n, Equivalence (R n). Admitted.
  Hypothesis H: forall n a, R n (andb a a) a.
  Goal forall n a b, R n a b.
   intros. rewrite <- H. admit.
  Qed.
End S2.

(* the parametrised relation is required to get the problem *)
Section S3.
  Variable R: relation bool.
  Instance HR1': Transitive R. Admitted.
  Instance HR2': Symmetric R.  Admitted.
  Hypothesis H: forall a, R (andb a a) a.
  Goal forall a b, R b a.
   intros. 
   rewrite <- H.                (* ok *)
   admit.
  Qed.
End S3.