intros P step.
cut
(forall (n m : nat) (ni : nested_imps) (dni : decorated_nested_imps),
count_undecs ni < n -> length ni < m -> P (rev_app dni ni)).
intros claim ni.
apply
claim
with
(n := S (count_undecs ni))
(m := S (length ni))
(ni := ni)
(dni := DNI_NIL); clear claim.
apply lt_n_Sn.
apply lt_n_Sn.
intros n; elim n; clear n.
intros m ni dni lt_nonref lt_length.
elimtype False.
inversion_clear lt_nonref.
intros n ih m.
elim m; clear m.
intros ni dni lt_nonref lt_length.
elimtype False.
inversion_clear lt_length.
intros m sih ni dni lt_nonref lt_length.
apply step; clear step.
intros ni1 dni1 lt_ks.
inversion_clear lt_ks.
apply ih with (S (length ni1)); clear ih.
apply lt_S_n.
apply le_lt_trans with (count_undecs ni); assumption.
apply lt_n_Sn.
apply sih.
apply le_lt_trans with (count_undecs ni).
apply le_ks_le_count_undecs with dni1 dni; assumption.
assumption.
apply lt_le_trans with (length ni).
assumption.
apply lt_n_Sm_le; assumption.
Qed.

(* Specifications: *)
Lemma lt_ks_shift_nd :
forall (ni ni1 : nested_imps) (dni dni1 : decorated_nested_imps)
(x : nimp) (k : kripke_tree),
le_ni (rev_app dni1 ni1) (rev_app ((x, k) :: dni) ni) ->
Lt_Ks ni1 dni1 (Undecorated x :: ni) dni.