Induction on non-freely generated data types