(********************************************************************)

Inductive is_balanced_avl_right_shift (l r : avl_tree) : bal -> Prop :=
  | Is_Left_Balanced_Avl_Right_Shift :
      height_avl l = height_avl r ->
      is_balanced_avl_right_shift l r Left_Balanced
  | Is_Fully_Balanced_Avl_Right_Shift :
      S (height_avl l) = height_avl r ->
      is_balanced_avl_right_shift l r Balanced
  | Is_Right_Balanced_Avl_Right_Shift :
      S (S (height_avl l)) = height_avl r ->
      is_balanced_avl_right_shift l r Right_Balanced.(********************************************************************)

Inductive is_balanced_avl_right_shift (l r : avl_tree) : bal -> Prop :=
  | Is_Left_Balanced_Avl_Right_Shift :
      height_avl l = height_avl r ->
      is_balanced_avl_right_shift l r Left_Balanced
  | Is_Fully_Balanced_Avl_Right_Shift :
      S (height_avl l) = height_avl r ->
      is_balanced_avl_right_shift l r Balanced
  | Is_Right_Balanced_Avl_Right_Shift :
      S (S (height_avl l)) = height_avl r ->
      is_balanced_avl_right_shift l r Right_Balanced.(********************************************************************)

Inductive is_balanced_avl_right_shift (l r : avl_tree) : bal -> Prop :=
  | Is_Left_Balanced_Avl_Right_Shift :
      height_avl l = height_avl r ->
      is_balanced_avl_right_shift l r Left_Balanced
  | Is_Fully_Balanced_Avl_Right_Shift :
      S (height_avl l) = height_avl r ->
      is_balanced_avl_right_shift l r Balanced
  | Is_Right_Balanced_Avl_Right_Shift :
      S (S (height_avl l)) = height_avl r ->
      is_balanced_avl_right_shift l r Right_Balanced.(********************************************************************)

Inductive is_balanced_avl_right_shift (l r : avl_tree) : bal -> Prop :=
  | Is_Left_Balanced_Avl_Right_Shift :
      height_avl l = height_avl r ->
      is_balanced_avl_right_shift l r Left_Balanced
  | Is_Fully_Balanced_Avl_Right_Shift :
      S (height_avl l) = height_avl r ->
      is_balanced_avl_right_shift l r Balanced
  | Is_Right_Balanced_Avl_Right_Shift :
      S (S (height_avl l)) = height_avl r ->
      is_balanced_avl_right_shift l r Right_Balanced.

(* Specifications: *)
Lemma is_balanced_avl_is_balanced_avl_right_shift : forall (l0 r r0 : avl_tree) (b0 : bal), is_balanced_avl l0 r0 b0 -> height_avl r = S (height_avl r0) -> is_balanced_avl_right_shift l0 r b0.
Lemma is_balanced_avl_is_balanced_avl_right_shift_false : forall (l r : avl_tree) (b : bal), is_balanced_avl l r b -> is_balanced_avl_right_shift l r b -> False.