(* occurence de termes dans les listes *)
Inductive term_occur : term -> term -> Prop :=
| to_eq : forall t : term, term_occur t t
| to_st :
forall (t : term) (a : ad) (tl : term_list),
term_list_occur t tl -> term_occur t (app a tl)
with term_list_occur : term -> term_list -> Prop :=
| tlo_head :
forall (t hd : term) (tl : term_list),
term_occur t hd -> term_list_occur t (tcons hd tl)
| tlo_tail :
forall (t hd : term) (tl : term_list),
term_list_occur t tl -> term_list_occur t (tcons hd tl).
Definition term_occur_def_0 (t : term) :=
forall u : term, term_occur u t -> term_high u <= term_high t.
Definition term_occur_def_1 (t : term_list) :=
forall u : term, term_list_occur u t -> term_high u <= term_high_0 t.

(* Specifications: *)
Lemma term_occur_0_0 :
forall (a : ad) (t : term_list),
term_occur_def_1 t -> term_occur_def_0 (app a t).
Lemma term_occur_0_1 : term_occur_def_1 tnil.
Lemma term_occur_0_2 :
forall t : term,
term_occur_def_0 t ->
forall t0 : term_list, term_occur_def_1 t0 -> term_occur_def_1 (tcons t t0).
Lemma term_occur_0 :
forall t u : term, term_occur u t -> term_high u <= term_high t.
Lemma term_occur_1 :
forall (t : term_list) (u : term),
term_list_occur u t -> term_high u <= term_high_0 t.