(*********************************************************)
(*		Definition bal and avl_tree	  	 *)

Inductive bal : Set :=
  | Left_Balanced : bal
  | Balanced : bal
  | Right_Balanced : bal.(*********************************************************)
(*		Definition bal and avl_tree	  	 *)

Inductive bal : Set :=
  | Left_Balanced : bal
  | Balanced : bal
  | Right_Balanced : bal.(*********************************************************)
(*		Definition bal and avl_tree	  	 *)

Inductive bal : Set :=
  | Left_Balanced : bal
  | Balanced : bal
  | Right_Balanced : bal.(*********************************************************)
(*		Definition bal and avl_tree	  	 *)

Inductive bal : Set :=
  | Left_Balanced : bal
  | Balanced : bal
  | Right_Balanced : bal.Inductive avl_tree : Set :=
  | Avl_Nil : avl_tree
  | Avl_Node : Int -> B -> avl_tree -> avl_tree -> bal -> avl_tree.Inductive avl_tree : Set :=
  | Avl_Nil : avl_tree
  | Avl_Node : Int -> B -> avl_tree -> avl_tree -> bal -> avl_tree.Inductive avl_tree : Set :=
  | Avl_Nil : avl_tree
  | Avl_Node : Int -> B -> avl_tree -> avl_tree -> bal -> avl_tree.(*********************************************************)
(*		Definition is_below		  	 *)


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


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


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

(* Specifications: *)
Lemma inv_below_key : forall (k : Int) (d : B) (l r : avl_tree) (b : bal) (k0 : Int), is_below (Avl_Node k d l r b) k0 -> Less k k0.
Lemma inv_below_left : forall (k : Int) (d : B) (l r : avl_tree) (b : bal) (k0 : Int), is_below (Avl_Node k d l r b) k0 -> is_below l k0.
Lemma inv_below_right : forall (k : Int) (d : B) (l r : avl_tree) (b : bal) (k0 : Int), is_below (Avl_Node k d l r b) k0 -> is_below r k0.
Lemma below_trans : forall (t : avl_tree) (k0 k1 : Int), is_below t k0 -> Less k0 k1 -> is_below t k1.