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.

Lemma R_permute :
forall u v w t : V, R (cons u v) (cons w t) -> R (cons v u) (cons t w).