src/HOL/Nominal/nominal_induct.ML
changeset 32952 aeb1e44fbc19
parent 30549 d2d7874648bd
child 33368 b1cf34f1855c
equal deleted inserted replaced
32951:83392f9d303f 32952:aeb1e44fbc19
    48         val P :: x :: ys = vars;
    48         val P :: x :: ys = vars;
    49         val zs = Library.drop (m - n - 2, ys);
    49         val zs = Library.drop (m - n - 2, ys);
    50       in
    50       in
    51         (P, tuple_fun (map #2 avoiding) (Term.dest_Var P)) ::
    51         (P, tuple_fun (map #2 avoiding) (Term.dest_Var P)) ::
    52         (x, tuple (map Free avoiding)) ::
    52         (x, tuple (map Free avoiding)) ::
    53         List.mapPartial (fn (z, SOME t) => SOME (z, t) | _ => NONE) (zs ~~ inst)
    53         map_filter (fn (z, SOME t) => SOME (z, t) | _ => NONE) (zs ~~ inst)
    54       end;
    54       end;
    55      val substs =
    55      val substs =
    56        map2 subst insts concls |> List.concat |> distinct (op =)
    56        map2 subst insts concls |> flat |> distinct (op =)
    57        |> map (pairself (Thm.cterm_of (ProofContext.theory_of ctxt)));
    57        |> map (pairself (Thm.cterm_of (ProofContext.theory_of ctxt)));
    58   in 
    58   in 
    59     (((cases, nconcls), consumes), Drule.cterm_instantiate substs joined_rule) 
    59     (((cases, nconcls), consumes), Drule.cterm_instantiate substs joined_rule) 
    60   end;
    60   end;
    61 
    61 
    96     fun rule_cases r = RuleCases.make_nested true (Thm.prop_of r) (Induct.rulified_term r);
    96     fun rule_cases r = RuleCases.make_nested true (Thm.prop_of r) (Induct.rulified_term r);
    97   in
    97   in
    98     (fn i => fn st =>
    98     (fn i => fn st =>
    99       rules
    99       rules
   100       |> inst_mutual_rule ctxt insts avoiding
   100       |> inst_mutual_rule ctxt insts avoiding
   101       |> RuleCases.consume (List.concat defs) facts
   101       |> RuleCases.consume (flat defs) facts
   102       |> Seq.maps (fn (((cases, concls), (more_consumes, more_facts)), rule) =>
   102       |> Seq.maps (fn (((cases, concls), (more_consumes, more_facts)), rule) =>
   103         (PRECISE_CONJUNCTS (length concls) (ALLGOALS (fn j =>
   103         (PRECISE_CONJUNCTS (length concls) (ALLGOALS (fn j =>
   104           (CONJUNCTS (ALLGOALS
   104           (CONJUNCTS (ALLGOALS
   105             (Method.insert_tac (more_facts @ nth_list atomized_defs (j - 1))
   105             (Method.insert_tac (more_facts @ nth_list atomized_defs (j - 1))
   106               THEN' Induct.fix_tac defs_ctxt
   106               THEN' Induct.fix_tac defs_ctxt