Ltac homt :=
  first [ apply scal_hom; auto; homt | 
          apply add_hom; auto; homt  |
          apply hom3E                 |
          apply hom3l; homt           |
          apply hom3r; homt           |
          apply hom2; homt            |
          apply hom1p                 |
          apply hom1d; homt           |
          apply hom0l; homt           |
          apply hom0r; homt           |
          apply hom0p; homt           |
          apply hom01                 |
          apply homd
   ].Ltac hom3t :=  
  apply proj_homn_eq; auto; try homt.Ltac hom0t := 
  apply proj_hom0_eq; auto; try homt.(* A tactic to normalize one specific bracket *)
Ltac normb a b c :=
 generalize (bracket_norm a b c); 
 intros (Hn1, (Hn2, (Hn3, (Hn4, Hn5))));
 rewrite ?Hn1, ?Hn2, ?Hn3, ?Hn4, ?Hn5;
 clear Hn1 Hn2 Hn3 Hn4 Hn5.

Theorem Pappus (a b c a' b' c': point) : let AB' := line a b' in let A'B := line a' b in let p := intersection AB' A'B in let BC' := line b c' in let B'C := line b' c in let q := intersection BC' B'C in let CA' := line c a' in let C'A := line c' a in let r := intersection CA' C'A in collinear a b c -> collinear a' b' c' -> collinear p q r.