Inductive RM (n : nat) (t t' : nat_tree) : Prop :=
    rm_intro :
      ~ occ t' n ->
      (forall p : nat, occ t' p -> occ t p) ->
      (forall p : nat, occ t p -> occ t' p \/ n = p) ->
      search t' -> RM n t t'.Inductive RM (n : nat) (t t' : nat_tree) : Prop :=
    rm_intro :
      ~ occ t' n ->
      (forall p : nat, occ t' p -> occ t p) ->
      (forall p : nat, occ t p -> occ t' p \/ n = p) ->
      search t' -> RM n t t'.(* base cases *)

Remark RM_0 : forall n : nat, RM n NIL NIL.Remark RM_1 : forall n : nat, RM n (bin n NIL NIL) NIL.(* deleting in the left son *)

Remark rm_left :
 forall (n p : nat) (t1 t2 t' : nat_tree),
 p < n ->
 search (bin n t1 t2) -> RM p t1 t' -> RM p (bin n t1 t2) (bin n t' t2).(* deleting in the right son *)

Remark rm_right :
 forall (n p : nat) (t1 t2 t' : nat_tree),
 n < p ->
 search (bin n t1 t2) -> RM p t2 t' -> RM p (bin n t1 t2) (bin n t1 t').(* base case for deleting the root *)

Remark rm_NILt :
 forall (n : nat) (t : nat_tree),
 search (bin n NIL t) -> RM n (bin n NIL t) t.Remark rm_2 : q < n.Remark rm_3 : ~ occ (bin q t0 t') n.Remark rm_4 :
      forall p0 : nat,
      occ (bin q t0 t') p0 -> occ (bin n (bin p t1 t2) t') p0.Remark rm_5 :
      forall p0 : nat,
      occ (bin n (bin p t1 t2) t') p0 -> occ (bin q t0 t') p0 \/ n = p0.Remark rm_6 : search (bin q t0 t').

(* Specifications: *)
Lemma rm_root_lemma : RM n (bin n (bin p t1 t2) t') (bin q t0 t').
Theorem rm : forall (n : nat) (t : nat_tree), search t -> {t' : nat_tree | RM n t t'}.