Notation "n .-tuple" := (tuple_of n)
  (at level 2, format "n .-tuple") : type_scope.Notation "[ 'tnth' t i ]" := (tnth t (@Ordinal (tsize t) i (erefl true)))
  (at level 0, t, i at level 8, format "[ 'tnth'  t  i ]") : form_scope.Definition in_tuple (s : seq T) := Tuple (eqxx (size s)).

(* Specifications: *)
Lemma tcastE m n (eq_mn : m = n) t i : tnth (tcast eq_mn t) i = tnth t (cast_ord (esym eq_mn) i).
Lemma tcast_id n (eq_nn : n = n) t : tcast eq_nn t = t.
Lemma tcastK m n (eq_mn : m = n) : cancel (tcast eq_mn) (tcast (esym eq_mn)).
Lemma tcastKV m n (eq_mn : m = n) : cancel (tcast (esym eq_mn)) (tcast eq_mn).
Lemma tcast_trans m n p (eq_mn : m = n) (eq_np : n = p) t: tcast (etrans eq_mn eq_np) t = tcast eq_np (tcast eq_mn t).
Lemma in_tupleE s : in_tuple s = s :> seq T.