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.
(** D is the last graduation of AB before or equal to C, and E the first graduation after 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.