Set Implicit Arguments.
Unset Strict Implicit.
Parameter V : Type.
Parameter AV : Type.
Parameter cons : V -> V -> AV.
Parameter R : AV -> AV -> Prop.
Parameter opp : V -> V.
Parameter zero : AV.
Parameter pi : AV.
Parameter plus : AV -> AV -> AV.
intros u v; try assumption.
apply (transitive (a:=plus (cons u v) (cons v u)) (b:=cons u u) (c:=zero));
auto.
exact (Chasles u v u).
apply angle_nul.
Qed.
Axiom
compatible : forall a b c d : AV, R a b -> R c d -> R (plus a c) (plus b d).
Parameter vR : V -> V -> Prop.
Axiom
vR_R_compatible :
forall u u' v v' : V, vR u u' -> vR v v' -> R (cons u v) (cons u' v').
Parameter PO : Type.
Parameter vec : PO -> PO -> V.
intros u; try assumption.
elim non_vide_P; intros A H; clear H.
elim v_vec with (u := u) (A := A); intros B H; try exact H.
apply v_trans with (opp (opp (vec A B))).
apply opp_compatible; apply opp_compatible.
try exact H.
apply v_trans with (opp (vec B A)).
apply opp_compatible.
apply v_trans with (vec B A).
apply opp_vect.
apply v_refl.
apply v_trans with (vec A B).
apply opp_vect.
apply v_sym; auto.
Qed.
Hint Resolve opp_opp opp_compatible v_refl v_sym.
intros u; try assumption.
apply transitive with (cons (opp u) (opp (opp u))).
apply vR_R_compatible.
apply v_refl.
apply v_sym; apply opp_opp.
apply angle_plat.
Qed.
elim non_vide_V.
intros u H; try assumption.
apply transitive with (plus (cons u (opp u)) (cons (opp u) u)).
apply compatible.
apply symetrique; auto.
apply angle_plat.
apply symetrique; auto.
apply oppu_u.
apply transitive with (cons u u).
apply Chasles.
auto.
apply angle_nul.
Qed.
intros u v; try assumption.
apply transitive with (plus (cons u v) (cons v (opp v))).
apply symetrique; auto.
apply Chasles.
apply compatible.
apply reflexive.
apply angle_plat.
Qed.
intros u v; try assumption.
apply transitive with (plus (cons (opp u) u) (cons u v)).
apply symetrique; auto.
apply Chasles.
apply compatible.
apply oppu_u.
apply reflexive.
Qed.
intros u v w t; try assumption.
apply transitive with (plus (cons u v) (cons v t)).
apply symetrique; auto.
apply Chasles.
apply compatible.
apply reflexive.
apply symetrique; auto.
apply Chasles.
Qed.
intros a b c; try assumption.
elim non_vide_V; intros u H; clear H.
elim angle_cons with (a := a) (u := u); intros v H; try exact H.
elim angle_cons with (a := b) (u := v); intros v0 H0; try exact H0.
elim angle_cons with (a := c) (u := v0); intros v1 H1; try exact H1.
apply transitive with (plus (cons u v) (plus (cons v v0) (cons v0 v1))).
apply compatible; auto.
apply compatible; auto.
apply transitive with (cons u v1).
apply symetrique; auto.
apply Chasles_2.
apply transitive with (plus (cons u v0) (cons v0 v1)).
apply symetrique; auto.
apply Chasles.
apply compatible; auto.
apply transitive with (plus (cons u v) (cons v v0)).
apply symetrique; auto.
apply Chasles.
apply compatible; auto.
apply symetrique; auto.
apply symetrique; auto.
apply symetrique; auto.
Qed.
intros a b c d H H0; try assumption.
apply compatible.
try exact H.
apply symetrique; try exact H0.
Qed.
intros u v; try assumption.
apply transitive with (plus (cons u v) (cons v v)).
apply compatible.
apply reflexive.
apply symetrique; auto.
apply angle_nul.
apply Chasles.
Qed.
intros u v; try assumption.
apply transitive with (plus (cons u u) (cons u v)).
apply compatible.
apply symetrique; auto.
apply angle_nul.
apply reflexive.
apply Chasles.
Qed.
elim non_vide_V.
intros u H; try assumption.
apply transitive with (plus (cons u (opp u)) zero).
apply compatible.
apply symetrique.
apply angle_plat.
apply reflexive.
apply transitive with (cons u (opp u)).
apply plus_zero.
apply angle_plat.
Qed.
intros a; try assumption.
elim non_vide_V; intros u H1; clear H1.
elim angle_cons with (a := a) (u := u); intros v H1; try exact H1.
apply transitive with (plus zero (cons u v)).
apply compatible.
apply reflexive.
try exact H1.
apply transitive with (cons u v).
apply zero_plus.
apply symetrique; auto.
Qed.
intros u v w t H; try assumption.
apply transitive with (plus zero (cons v u)).
apply symetrique; auto.
apply zero_plus.
apply transitive with (plus (plus (cons v u) (cons u v)) (cons v u)).
apply compatible.
apply symetrique; auto.
apply permute.
apply reflexive.
apply transitive with (plus (cons v u) (plus (cons w t) (cons t w))).
apply transitive with (plus (cons v u) (plus (cons u v) (cons v u))).
apply symetrique; auto.
apply point_angle.plus_assoc.
apply compatible.
apply reflexive.
apply transitive with zero.
apply permute.
apply symetrique; auto.
apply permute.
apply transitive with (plus (plus (cons v u) (cons w t)) (cons t w)).
apply point_angle.plus_assoc.
apply transitive with (plus zero (cons t w)).
apply compatible.
apply transitive with (plus (cons v u) (cons u v)).
apply compatible.
apply reflexive.
apply symetrique; auto.
apply permute.
apply reflexive.
apply zero_plus.
Qed.
intros u v w t s H H0; try assumption.
apply transitive with (plus (cons v u) (cons u t)).
apply symetrique; auto.
apply Chasles.
apply transitive with (plus (cons w u) (cons u s)).
apply compatible.
apply R_permute.
try exact H.
try exact H0.
apply Chasles.
Qed.
intros a b c d H H0; try assumption.
elim non_vide_V; intros u H1; clear H1.
elim angle_cons with (a := a) (u := u); intros v H1; try exact H1.
elim angle_cons with (a := c) (u := u); intros w H2; try exact H2.
elim angle_cons with (a := b) (u := v); intros t H3; try exact H3.
elim angle_cons with (a := d) (u := w); intros s H4; try exact H4.
cut (R (cons v t) (cons w s)); intros.
apply transitive with (cons v t).
try exact H3.
apply transitive with (cons w s).
try exact H5.
apply symetrique; auto.
apply regulier_cons with u.
apply transitive with a.
apply symetrique; auto.
apply transitive with c; auto.
apply transitive with (plus (cons u v) (cons v t)).
apply symetrique; auto.
apply Chasles.
apply transitive with (plus a b).
apply compatible.
apply symetrique; auto.
apply symetrique; auto.
apply transitive with (plus c d).
try exact H0.
apply transitive with (plus (cons u w) (cons w s)).
apply compatible.
try exact H2.
try exact H4.
apply Chasles.
Qed.

Axiom plus_sym : forall a b : AV, R (plus a b) (plus b a).