src/Tools/induct_tacs.ML
changeset 59763 56d2c357e6b5
parent 59755 f8d164ab0dc1
child 59780 23b67731f4f0
equal deleted inserted replaced
59762:df377a6fdd90 59763:56d2c357e6b5
    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 res_inst_tac ctxt [((xi, Position.none), s)] rule i st end
    47   in Rule_Insts.res_inst_tac ctxt [((xi, Position.none), 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 
   102     val _ = Method.trace ctxt [rule'];
   102     val _ = Method.trace ctxt [rule'];
   103 
   103 
   104     val concls = Logic.dest_conjunctions (Thm.concl_of rule);
   104     val concls = Logic.dest_conjunctions (Thm.concl_of rule);
   105     val insts = maps prep_inst (concls ~~ varss) handle ListPair.UnequalLengths =>
   105     val insts = maps prep_inst (concls ~~ varss) handle ListPair.UnequalLengths =>
   106       error "Induction rule has different numbers of variables";
   106       error "Induction rule has different numbers of variables";
   107   in res_inst_tac ctxt insts rule' i st end
   107   in Rule_Insts.res_inst_tac ctxt insts rule' i st end
   108   handle THM _ => Seq.empty;
   108   handle THM _ => Seq.empty;
   109 
   109 
   110 end;
   110 end;
   111 
   111 
   112 fun induct_tac ctxt args = gen_induct_tac ctxt args NONE;
   112 fun induct_tac ctxt args = gen_induct_tac ctxt args NONE;