intros a t in_t t' suc.
generalize in_t; clear in_t.
elim suc; clear suc.
trivial.
clear t t'.
intros t0 t1 in_t1 t2 suc_t2 ih in_t2.
generalize in_t1; clear in_t1.
elim t0; clear t0.
intros a' succs in_t1.
apply in_succs with (t := t1).
assumption.
apply ih.
assumption.
Qed.
(********************************************************************)
(*  Monotone Trees                                                  *)
Variable I : Set.
Variable P : A -> I -> Prop.
Inductive Is_Monotone_Tree : Tree -> Prop :=
is_monotone_tree_intro :
forall (a : A) (succs : Forest),
Is_Monotone_Forest a succs -> Is_Monotone_Tree (node a succs)
with Is_Monotone_Forest : A -> Forest -> Prop :=
| is_monotone_forest_nil : forall a : A, Is_Monotone_Forest a Nil_Forest
| is_monotone_forest_cons :
forall (a : A) (t : Tree) (succs : Forest),
(forall i : I, P a i -> P (root t) i) ->
Is_Monotone_Tree t ->
Is_Monotone_Forest a succs ->
Is_Monotone_Forest a (Cons_Forest t succs).

(* Specifications: *)
Lemma is_monotone_tree_successor :
forall t : Tree,
Is_Monotone_Tree t ->
forall t0 : Tree, Successor t0 t -> Is_Monotone_Tree t0.