Set Implicit Arguments.

Section Acc_irrelevance.

  Variable (X : Type) (R : X X Prop).


  Inductive Acc_eq : x, Acc R x Acc R x Prop :=
    | in_Acc_eq : x A1 A2, ( y H, @Acc_eq y ( y H) ( y H))
                                @Acc_eq x (Acc_intro _ ) (Acc_intro _ ).


  Fact Acc_eq_total x H1 H2 : @Acc_eq x .
  Proof.
    revert .
    induction as [ ? ? IH ] using Acc_inv_dep.
    intros []; constructor; intros; apply IH.
  Qed.



  Variables (P : X Type) (f : x, Acc R x P x)
            (Hf : x H1 H2, ( y Hy, f ( y Hy) = f ( _ Hy))
                                f (Acc_intro x ) = f (Acc_intro x )).

  Theorem Acc_irrelevance x H1 H2 : @f x = f .
  Proof.
    generalize (Acc_eq_total ).
    induction 1 as [ x _ IH ].
    apply Hf, IH.
  Qed.


End Acc_irrelevance.