Inductive Z_btree : Set :=
  | Z_leaf : Z_btree
  | Z_bnode : Z -> Z_btree -> Z_btree -> Z_btree.Inductive Z_btree : Set :=
  | Z_leaf : Z_btree
  | Z_bnode : Z -> Z_btree -> Z_btree -> Z_btree.Inductive Z_btree : Set :=
  | Z_leaf : Z_btree
  | Z_bnode : Z -> Z_btree -> Z_btree -> Z_btree.Inductive Binp : Z_btree -> Prop :=
    Binp_intro : forall (n : Z) (t1 t2 : Z_btree), Binp (Z_bnode n t1 t2).Inductive Binp : Z_btree -> Prop :=
    Binp_intro : forall (n : Z) (t1 t2 : Z_btree), Binp (Z_bnode n t1 t2).Inductive occ (n : Z) : Z_btree -> Prop :=
  | occ_root : forall t1 t2 : Z_btree, occ n (Z_bnode n t1 t2)
  | occ_l :
      forall (p : Z) (t1 t2 : Z_btree), occ n t1 -> occ n (Z_bnode p t1 t2)
  | occ_r :
      forall (p : Z) (t1 t2 : Z_btree), occ n t2 -> occ n (Z_bnode p t1 t2).Inductive occ (n : Z) : Z_btree -> Prop :=
  | occ_root : forall t1 t2 : Z_btree, occ n (Z_bnode n t1 t2)
  | occ_l :
      forall (p : Z) (t1 t2 : Z_btree), occ n t1 -> occ n (Z_bnode p t1 t2)
  | occ_r :
      forall (p : Z) (t1 t2 : Z_btree), occ n t2 -> occ n (Z_bnode p t1 t2).Inductive occ (n : Z) : Z_btree -> Prop :=
  | occ_root : forall t1 t2 : Z_btree, occ n (Z_bnode n t1 t2)
  | occ_l :
      forall (p : Z) (t1 t2 : Z_btree), occ n t1 -> occ n (Z_bnode p t1 t2)
  | occ_r :
      forall (p : Z) (t1 t2 : Z_btree), occ n t2 -> occ n (Z_bnode p t1 t2).Inductive occ (n : Z) : Z_btree -> Prop :=
  | occ_root : forall t1 t2 : Z_btree, occ n (Z_bnode n t1 t2)
  | occ_l :
      forall (p : Z) (t1 t2 : Z_btree), occ n t1 -> occ n (Z_bnode p t1 t2)
  | occ_r :
      forall (p : Z) (t1 t2 : Z_btree), occ n t2 -> occ n (Z_bnode p t1 t2).Derive Inversion_clear OCC_INV with
 (forall (z z' : Z) (t1 t2 : Z_btree), occ z' (Z_bnode z t1 t2)).

(* Specifications: *)
Lemma occ_inv : forall (z z' : Z) (t1 t2 : Z_btree), occ z' (Z_bnode z t1 t2) -> z = z' \/ occ z' t1 \/ occ z' t2.
Lemma not_occ_Leaf : forall z : Z, ~ occ z Z_leaf.