ite E in p2 *.
        by rewrite (eq_irrelevance p1 p2).
  Qed.

  Canonical tuple_eqTuple n T : eqType :=
    Equality.Pack (Equality.Mixin (@eqtupleP n T)).

  Check forall t : 3.-tuple nat, [:: t] == [::].
  Check forall t : 3.-tuple bool, uniq [:: t; t].
  Fail Check forall t : 3.-tuple (7.-tuple nat), undup_uniq [:: t; t].

  Canonical tuple_subType n s := [subType for (@tval n s)].
  Fail Definition tuple_eqMixin n T := [eqMixin of n.-tuple T by <:].
  Canonical tuple_eqType n (T : eqType) := EqType 