A constructive induction framework