Ltac lg_instance_not_col l P A B :=
assert(tempo_sg:= ex_points_lg_not_col l P);
match goal with
|HP : Q_Cong l |-  _ => match goal with
|HQ : ~ Q_Cong_Null l |-  _ => assert(tempo_HQ:=HQ);
apply (tempo_sg HP) in tempo_HQ;
elim tempo_HQ;
intro A;
let tempo_HR := fresh "tempo_HR" in
intro tempo_HR;
elim tempo_HR;
intro B;
intro;
spliter;
clear tempo_HR tempo_HQ
end
end;
clear tempo_sg.
Tactic Notation "soit" ident(B) "sur" "la" "demie" "droite" ident(A) ident(P) "/" "longueur" ident(A) ident(B) "=" ident(l) := lg_instance2 l A P B.
Section Length_4.
Context `{TnEQD:Tarski_neutral_dimensionless_with_decidable_point_equality}.
Notation "l1 =l= l2" := (EqL l1 l2) (at level 80, right associativity).

(* Specifications: *)
Lemma ex_eql : forall l1 l2, (exists A , exists B, Len A B l1 /\ Len A B l2)  -> l1 =l= l2.
Lemma all_eql : forall A B l1 l2, Len A B l1 -> Len A B l2 -> EqL l1 l2.
Lemma null_len : forall A B la lb, Len A A la -> Len B B lb -> EqL la lb.
Global Instance eqL_equivalence : Equivalence EqL.
Lemma ex_lg : forall A B, exists l, Q_Cong l /\ l A B.
Lemma lg_eql_lg : forall l1 l2, Q_Cong l1 -> EqL l1 l2 -> Q_Cong l2.
Lemma ex_eqL : forall l1 l2, Q_Cong l1 -> Q_Cong l2 -> (exists A, exists B, l1 A B /\ l2 A B) -> EqL l1 l2.
End Length_4.