724 fun unless_more_args scan = Scan.unless (Scan.lift |
726 fun unless_more_args scan = Scan.unless (Scan.lift |
725 ((Args.$$$ arbitraryN || Args.$$$ takingN || Args.$$$ typeN || |
727 ((Args.$$$ arbitraryN || Args.$$$ takingN || Args.$$$ typeN || |
726 Args.$$$ predN || Args.$$$ setN || Args.$$$ ruleN) -- Args.colon)) scan; |
728 Args.$$$ predN || Args.$$$ setN || Args.$$$ ruleN) -- Args.colon)) scan; |
727 |
729 |
728 val arbitrary = Scan.optional (Scan.lift (Args.$$$ arbitraryN -- Args.colon) |-- |
730 val arbitrary = Scan.optional (Scan.lift (Args.$$$ arbitraryN -- Args.colon) |-- |
729 Args.and_list1 (Scan.repeat (unless_more_args free))) []; |
731 P.and_list1' (Scan.repeat (unless_more_args free))) []; |
730 |
732 |
731 val taking = Scan.optional (Scan.lift (Args.$$$ takingN -- Args.colon) |-- |
733 val taking = Scan.optional (Scan.lift (Args.$$$ takingN -- Args.colon) |-- |
732 Scan.repeat1 (unless_more_args inst)) []; |
734 Scan.repeat1 (unless_more_args inst)) []; |
733 |
735 |
734 in |
736 in |
735 |
737 |
736 fun cases_meth src = |
738 fun cases_meth src = |
737 Method.syntax (Args.and_list (Scan.repeat (unless_more_args inst)) -- Scan.option cases_rule) src |
739 Method.syntax (P.and_list' (Scan.repeat (unless_more_args inst)) -- Scan.option cases_rule) src |
738 #> (fn ((insts, opt_rule), ctxt) => |
740 #> (fn ((insts, opt_rule), ctxt) => |
739 Method.METHOD_CASES (fn facts => |
741 Method.METHOD_CASES (fn facts => |
740 Seq.DETERM (HEADGOAL (cases_tac ctxt insts opt_rule facts)))); |
742 Seq.DETERM (HEADGOAL (cases_tac ctxt insts opt_rule facts)))); |
741 |
743 |
742 fun induct_meth src = |
744 fun induct_meth src = |
743 Method.syntax (Args.and_list (Scan.repeat (unless_more_args def_inst)) -- |
745 Method.syntax (P.and_list' (Scan.repeat (unless_more_args def_inst)) -- |
744 (arbitrary -- taking -- Scan.option induct_rule)) src |
746 (arbitrary -- taking -- Scan.option induct_rule)) src |
745 #> (fn ((insts, ((arbitrary, taking), opt_rule)), ctxt) => |
747 #> (fn ((insts, ((arbitrary, taking), opt_rule)), ctxt) => |
746 Method.RAW_METHOD_CASES (fn facts => |
748 Method.RAW_METHOD_CASES (fn facts => |
747 Seq.DETERM (HEADGOAL (induct_tac ctxt insts arbitrary taking opt_rule facts)))); |
749 Seq.DETERM (HEADGOAL (induct_tac ctxt insts arbitrary taking opt_rule facts)))); |
748 |
750 |