src/HOL/Tools/induct_tacs.ML
changeset 27239 f2f42f9fa09d
parent 27215 b43785a81e01
child 27322 a12978a1126a
equal deleted inserted replaced
27238:d2bf12727c8a 27239:f2f42f9fa09d
    42 
    42 
    43     val xi =
    43     val xi =
    44       (case Induct.vars_of (Thm.term_of (Thm.cprem_of rule 1)) of
    44       (case Induct.vars_of (Thm.term_of (Thm.cprem_of rule 1)) of
    45         Var (xi, _) :: _ => xi
    45         Var (xi, _) :: _ => xi
    46       | _ => raise THM ("Malformed cases rule", 0, [rule]));
    46       | _ => raise THM ("Malformed cases rule", 0, [rule]));
    47   in RuleInsts.res_inst_tac ctxt [(xi, s)] rule i st end
    47   in res_inst_tac ctxt [(xi, s)] rule i st end
    48   handle THM _ => Seq.empty;
    48   handle THM _ => Seq.empty;
    49 
    49 
    50 fun case_tac ctxt s = gen_case_tac ctxt (s, NONE);
    50 fun case_tac ctxt s = gen_case_tac ctxt (s, NONE);
    51 fun case_rule_tac ctxt s rule = gen_case_tac ctxt (s, SOME rule);
    51 fun case_rule_tac ctxt s rule = gen_case_tac ctxt (s, SOME rule);
    52 
    52 
    98     val _ = Method.trace ctxt [rule];
    98     val _ = Method.trace ctxt [rule];
    99 
    99 
   100     val concls = HOLogic.dest_concls (Thm.concl_of rule);
   100     val concls = HOLogic.dest_concls (Thm.concl_of rule);
   101     val insts = maps prep_inst (concls ~~ varss) handle Library.UnequalLengths =>
   101     val insts = maps prep_inst (concls ~~ varss) handle Library.UnequalLengths =>
   102       error "Induction rule has different numbers of variables";
   102       error "Induction rule has different numbers of variables";
   103   in RuleInsts.res_inst_tac ctxt insts rule i st end
   103   in res_inst_tac ctxt insts rule i st end
   104   handle THM _ => Seq.empty;
   104   handle THM _ => Seq.empty;
   105 
   105 
   106 end;
   106 end;
   107 
   107 
   108 fun induct_tac ctxt args = gen_induct_tac ctxt (args, NONE);
   108 fun induct_tac ctxt args = gen_induct_tac ctxt (args, NONE);