(** [weak p f] answers a function witch is the identity for the p{^  th} first element of [fin (p + m)] and [FS (FS .. (FS (f k)))] for [FS (FS .. (FS k))] with p FSs *)
Fixpoint weak {m}{n} p (f : t m -> t n) :
t (p + m) -> t (p + n) :=
match p as p' return t (p' + m) -> t (p' + n) with
|0 => f
|S p' => fun x => match x with
|@F1 n' => fun eq : n' = p' + m => F1
|@FS n' y => fun eq : n' = p' + m => FS (weak p' f (eq_rect _ t y _ eq))
end (eq_refl _)
end.
(** The p{^ th} element of [fin m] viewed as the p{^ th} element of [fin (m + n)] *)
Fixpoint L {m} n (p : t m) : t (m + n) :=
match p with |F1 => F1 |FS p' => FS (L n p') end.

(* Specifications: *)
Lemma L_sanity {m} n (p : t m) : proj1_sig (to_nat (L n p)) = proj1_sig (to_nat p).
Lemma L_inj {m} n (p q : t m) : L n p = L n q -> p = q.
Definition L_R {m} n (p : t m) : t (n + m).