(* Definition of binary trees *)
Inductive btree : Type :=
  | leaf : A -> btree
  | node : btree -> btree -> btree.(* Definition of binary trees *)
Inductive btree : Type :=
  | leaf : A -> btree
  | node : btree -> btree -> btree.(* Definition of binary trees *)
Inductive btree : Type :=
  | leaf : A -> btree
  | node : btree -> btree -> btree.(* Predicate that defines belonging *)
Inductive inb : btree -> btree -> Prop :=
  | inleaf : forall t : btree, inb t t
  | innodeL : forall t t1 t2 : btree, inb t t1 -> inb t (node t1 t2)
  | innodeR : forall t t1 t2 : btree, inb t t2 -> inb t (node t1 t2).(* Predicate that defines belonging *)
Inductive inb : btree -> btree -> Prop :=
  | inleaf : forall t : btree, inb t t
  | innodeL : forall t t1 t2 : btree, inb t t1 -> inb t (node t1 t2)
  | innodeR : forall t t1 t2 : btree, inb t t2 -> inb t (node t1 t2).(* Predicate that defines belonging *)
Inductive inb : btree -> btree -> Prop :=
  | inleaf : forall t : btree, inb t t
  | innodeL : forall t t1 t2 : btree, inb t t1 -> inb t (node t1 t2)
  | innodeR : forall t t1 t2 : btree, inb t t2 -> inb t (node t1 t2).(* Predicate that defines belonging *)
Inductive inb : btree -> btree -> Prop :=
  | inleaf : forall t : btree, inb t t
  | innodeL : forall t t1 t2 : btree, inb t t1 -> inb t (node t1 t2)
  | innodeR : forall t t1 t2 : btree, inb t t2 -> inb t (node t1 t2).

(* Specifications: *)
Theorem inb_trans : forall t1 t2 t3, inb t1 t2 -> inb t2 t3 -> inb t1 t3.
Theorem inb_ex : forall t : btree, exists x : _, inb (leaf x) t.