unfold S4 in |- *.
uniformize_signed_areas.
ring.
Qed.

(* Specifications: *)
Lemma S4Simpl_2 : forall A B C : Point, S4 A B C C = S A B C.
intros.
Lemma S4Simpl_3 : forall A B C : Point, S4 A A B C = S A B C.
intros.
Lemma S4Simpl_4 : forall A B C : Point, S4 A B C A = S A B C.
intros.
Lemma S4Simpl_5 : forall A C D : Point, S4 C A D A = 0.
Lemma S4Simpl_6 : forall A C D : Point, S4 A C A D = 0.
Lemma half : 1- 1/2 = 1/2.
Ltac uniformize_signed_areas4_goal :=
repeat
match goal with
|  |- context [(- - ?X1)] =>
replace (- - X1) with X1; [ idtac | apply simplring1 ]
|  |- context [(S4 ?X1 ?X2 ?X1 ?X3)] =>
rewrite (S4Simpl_6 X1 X2 X3)
|  |- context [(S4 ?X2 ?X1 ?X3 ?X1)] =>
rewrite (S4Simpl_5 X1 X2 X3)
|  |- context [(S4 ?X1 ?X2 ?X2 ?X3)] =>
rewrite (S4Simpl_1 X1 X2 X3)
|  |- context [(S4 ?X1 ?X2 ?X3 ?X3)] =>
rewrite (S4Simpl_2 X1 X2 X3)
|  |- context [(S4 ?X1 ?X1 ?X2 ?X3)] =>
rewrite (S4Simpl_3 X1 X2 X3)
|  |- context [(S4 ?X1 ?X2 ?X3 ?X1)] =>
rewrite (S4Simpl_4 X1 X2 X3)
|  |- context [(S4 ?X1 ?X2 ?X3 ?X4)] =>
match goal with
|  |- context [(S4 ?X5 ?X6 ?X7 ?X8)] =>
(assert (Truc : S4 X5 X6 X7 X8 = - S4 X1 X2 X3 X4);
[ apply S4_5 || apply S4_6 || apply S4_7 || apply S4_8
| rewrite Truc; clear Truc ]) ||
(assert (Truc : S4 X5 X6 X7 X8 = S4 X1 X2 X3 X4);
[ apply S4_2 || apply S4_3 || apply S4_4
| rewrite Truc; clear Truc ])
end
end.