Ltac lg_instance1 l A B :=
assert(tempo_sg:= ex_point_lg l);
match goal with
|H: Q_Cong l |-  _ => assert(tempo_H:=H); apply (tempo_sg A) in tempo_H; ex_elim tempo_H B; exists B
end;
clear tempo_sg.
(* TODO : translate this kind of notations *)
Tactic Notation "soit" ident(A) ident(B) "de" "longueur" ident(l) := lg_instance1 l A B.
Ltac lg_instance2 l A P B :=
assert(tempo_sg:= ex_point_lg_out l);
match goal with
|H: A <> P |-  _ =>
match goal with
|HP : Q_Cong l |-  _ =>
match goal with
|HQ : ~ Q_Cong_Null l |-  _ => assert(tempo_HQ:=HQ);
apply (tempo_sg A P H HP) in tempo_HQ;
ex_and tempo_HQ B
end
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_3.
Context `{TnEQD:Tarski_neutral_dimensionless_with_decidable_point_equality}.

(* Specifications: *)
Lemma ex_points_lg_not_col : forall l P, Q_Cong l -> ~ Q_Cong_Null l -> exists A, exists B, l A B /\ ~Col A B P.
End Length_3.