(*********************************************************************)
(*  Construction statements                                                         *)
(*********************************************************************)

Definition on_line (A B C : Point) : Prop := Col A B C /\ B <> C.Definition inter_ll (I A B C D : Point) : Prop :=
  Col I A B /\ Col I C D /\ ~ parallel A B C D.Definition on_parallel (A' A B C : Point) : Prop := B <> C  /\ parallel A A' B C.Definition on_inter_line_parallel (Y R U V P Q : Point) : Prop :=
  ~Col R P Q /\ Col Y U V /\ parallel Y R P Q /\ ~ parallel P Q U V.Definition on_inter_parallel_parallel (Y R U V W P Q : Point) : Prop :=
  ~Col R P Q /\ parallel Y R U V /\ parallel Y W P Q /\ ~ parallel P Q U V.Definition is_midpoint (I A B : Point) := on_line_d I A B (1 / 2).Definition mratio (Y U V : Point) (r : F) :=
  on_parallel_d Y U U V (r / (1 + r)) /\ 1 + r  <> 0.

(* Specifications: *)
Theorem on_lineex : forall P Q : Point, P <> Q -> {Y : Point | Col Y P Q}.
Theorem on_line_ex : forall P Q : Point, P<>Q -> exists Y, on_line Y P Q.
Theorem inter_llex : forall P Q U V : Point, ~ parallel P Q U V -> {Y : Point | Col Y P Q /\ Col Y U V}.
Lemma inter_ll_ex : forall P Q U V : Point, ~ parallel P Q U V -> exists Y, inter_ll Y P Q U V.
Theorem on_parallelex : forall P Q R : Point, Q<>R -> ~ Col P Q R -> exists Y, parallel Q R P Y.
Theorem on_parallel_ex : forall P Q R : Point, Q<>R -> ~ Col P Q R -> exists Y, on_parallel Y P Q R.
Lemma on_parallel_d_ex : forall (P Q R : Point) (lambda : F), P<>Q -> ~ Col P Q R -> exists Y, on_parallel_d Y R P Q lambda.