Inductive GradExpInv : Tpoint -> Tpoint -> Tpoint -> Prop :=
    gradexpinv_init : forall A B, GradExpInv A B B
  | gradexpinv_stab : forall A B B' C, Bet A B' B -> Cong A B' B' B -> GradExpInv A B C ->
                    GradExpInv A B' C.Inductive GradExpInv : Tpoint -> Tpoint -> Tpoint -> Prop :=
    gradexpinv_init : forall A B, GradExpInv A B B
  | gradexpinv_stab : forall A B B' C, Bet A B' B -> Cong A B' B' B -> GradExpInv A B C ->
                    GradExpInv A B' C.Inductive GradExpInv : Tpoint -> Tpoint -> Tpoint -> Prop :=
    gradexpinv_init : forall A B, GradExpInv A B B
  | gradexpinv_stab : forall A B B' C, Bet A B' B -> Cong A B' B' B -> GradExpInv A B C ->
                    GradExpInv A B' C.

(* Specifications: *)
Lemma gradexp_clos_trans : forall A B C, GradExp A B C <-> clos_refl_trans_n1 Tpoint (fun X Y => Midpoint X A Y) B C.
Lemma gradexpinv_clos_trans : forall A B C, GradExpInv A B C <-> clos_refl_trans_1n Tpoint (fun X Y => Midpoint X A Y) B C.
Lemma gradexp__gradexpinv : forall A B C, GradExp A B C <-> GradExpInv A B C.
Lemma reach__grad_min : forall A B C, A <> B -> Bet A B C -> Reach A B A C -> exists D E, Bet A D C /\ Grad A B D /\ E <> C /\ Bet A C E /\ Bet A D E /\ Cong A B D E.
Lemma reach__ex_gradexp_lt : forall A B P Q, A <> B -> Reach P Q A B -> exists C, GradExp A C B /\ Lt A C P Q.