Ltac eqgoal := let H := fresh in intro H; eq goal H; clear H.Ltac solve_list_eq := simpl; repeat progress (try rewrite app_ass; try rewrite <- app_nil_end; simpl; auto); auto.Ltac msplit n := 
  match n with 
    | 0    => idtac 
    | S ?n => split; [ | msplit n ]
   end.

Theorem exists_equiv : (exists n, P n) <-> (exists n, Q n).