Variant unlift_spec n h i : option 'I_n.-1 -> Type :=
| UnliftSome j of i = lift h j : unlift_spec h i (Some j)
| UnliftNone   of i = h        : unlift_spec h i None.

(* Specifications: *)
Lemma unliftP n (h i : 'I_n) : unlift_spec h i (unlift h i).
Lemma neq_lift n (h : 'I_n) i : h != lift h i.
Lemma lift_inj n (h : 'I_n) : injective (lift h).
Definition unsplit {m n} (jk : 'I_m + 'I_n) :=
match jk with inl j => lshift n j | inr k => rshift m k end.
Lemma ltn_unsplit m n (jk : 'I_m + 'I_n) : (unsplit jk < m) = jk.
Section OrdinalPos.