(** ** Tactics *) Ltac FinIndOn X := repeat match type of X with | Fin 0 => destruct X | Empty => destruct X | Unit => destruct X | Fin ?n => destruct X as [X|X] | ?L + Unit => destruct X as [X|X] end. (** This tactic can be used to generate n cases from a goal like forall (x : Fin n), _ *) Ltac FinInd := let X := fresh "X" in intro X; FinIndOn X.