(* File: Le_Ks.v  (last edited on 27/10/2000) (c) Klaus Weich  *)
Require Export Rev_App.
(*****************************************************************)
Inductive le_ni : nested_imps -> nested_imps -> Prop :=
| Le_NI_Nil : le_ni NNil NNil
| Le_NI_Cons_NN :
forall (x : nimp) (ni1 ni2 : nested_imps),
le_ni ni1 ni2 -> le_ni (Undecorated x :: ni1) (Undecorated x :: ni2)
| Le_NI_Cons_DN :
forall (x : nimp) (k : kripke_tree) (ni1 ni2 : nested_imps),
le_ni ni1 ni2 -> le_ni (Decorated x k :: ni1) (Undecorated x :: ni2)
| Le_NI_Cons_DD :
forall (x : nimp) (k : kripke_tree) (ni1 ni2 : nested_imps),
le_ni ni1 ni2 -> le_ni (Decorated x k :: ni1) (Decorated x k :: ni2).
intros ni1 ni2 x k le12.
elim le12; clear le12 ni1 ni2.
intros; assumption.
intros x' ni1 ni2 le12 ih in_k.
right.
apply ih.
inversion_clear in_k.
discriminate H.
assumption.
intros x' k' ni1 ni2 le12 ih in_k.
right.
apply ih.
inversion_clear in_k.
discriminate H.
assumption.
intros x' k' ni1 ni2 le12 ih in_k.
inversion_clear in_k.
left; assumption.
right; apply ih; assumption.
Qed.
intros ni; elim ni; clear ni.
apply Le_NI_Nil.
intros a; case a; clear a.
intros x N ih.
apply Le_NI_Cons_NN; assumption.
intros x k ni ih.
apply Le_NI_Cons_DD; assumption.
Qed.

Lemma le_ni_trans :
forall ni1 ni2 ni3 : nested_imps,
le_ni ni1 ni2 -> le_ni ni2 ni3 -> le_ni ni1 ni3.