(*********************************************************)
(*		Definition is_below_avl		  	 *)


Inductive is_below_avl : avl_tree -> Int -> Prop :=
  | Below_Avl_Nil : forall k0 : Int, is_below_avl Avl_Nil k0
  | Below_Avl_Node :
      forall (k : Int) (d : B) (l r : avl_tree) (b : bal) (k0 : Int),
      Less k k0 -> is_below_avl r k0 -> is_below_avl (Avl_Node k d l r b) k0.(*********************************************************)
(*		Definition is_below_avl		  	 *)


Inductive is_below_avl : avl_tree -> Int -> Prop :=
  | Below_Avl_Nil : forall k0 : Int, is_below_avl Avl_Nil k0
  | Below_Avl_Node :
      forall (k : Int) (d : B) (l r : avl_tree) (b : bal) (k0 : Int),
      Less k k0 -> is_below_avl r k0 -> is_below_avl (Avl_Node k d l r b) k0.(*********************************************************)
(*		Definition is_below_avl		  	 *)


Inductive is_below_avl : avl_tree -> Int -> Prop :=
  | Below_Avl_Nil : forall k0 : Int, is_below_avl Avl_Nil k0
  | Below_Avl_Node :
      forall (k : Int) (d : B) (l r : avl_tree) (b : bal) (k0 : Int),
      Less k k0 -> is_below_avl r k0 -> is_below_avl (Avl_Node k d l r b) k0.

(* Specifications: *)
Lemma inv_below_avl_key : forall (k : Int) (d : B) (l r : avl_tree) (b : bal) (k0 : Int), is_below_avl (Avl_Node k d l r b) k0 -> Less k k0.
Lemma inv_below_avl_right : forall (k : Int) (d : B) (l r : avl_tree) (b : bal) (k0 : Int), is_below_avl (Avl_Node k d l r b) k0 -> is_below_avl r k0.
Lemma below_avl_trans : forall (t : avl_tree) (k0 k1 : Int), is_below_avl t k0 -> Less k0 k1 -> is_below_avl t k1.
Lemma below_below_avl : forall (t : avl_tree) (key : Int), is_below t key -> is_below_avl t key.