equal
deleted
inserted
replaced
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 |