equal
deleted
inserted
replaced
78 | Some x => EVERY[res_inst_tac[("p",x)] PairE i, |
78 | Some x => EVERY[res_inst_tac[("p",x)] PairE i, |
79 REPEAT(hyp_subst_tac i), prune_params_tac]); |
79 REPEAT(hyp_subst_tac i), prune_params_tac]); |
80 |
80 |
81 end; |
81 end; |
82 |
82 |
83 claset_ref() := claset() addSaltern ("split_all_tac", split_all_tac); |
83 (* claset_ref() := claset() addbefore ("split_all_tac", TRY o split_all_tac);*) |
|
84 claset_ref() := claset() addSaltern ("split_all_tac", split_all_tac); |
84 |
85 |
85 (*** lemmas for splitting paired `!!' |
86 (*** lemmas for splitting paired `!!' |
86 Does not work with simplifier because it also affects premises in |
87 Does not work with simplifier because it also affects premises in |
87 congrence rules, where is can lead to premises of the form |
88 congrence rules, where is can lead to premises of the form |
88 !!a b. ... = ?P(a,b) |
89 !!a b. ... = ?P(a,b) |
171 by (stac split 1); |
172 by (stac split 1); |
172 by (Blast_tac 1); |
173 by (Blast_tac 1); |
173 qed "expand_split"; |
174 qed "expand_split"; |
174 |
175 |
175 (* could be done after split_tac has been speeded up significantly: |
176 (* could be done after split_tac has been speeded up significantly: |
176 simpset_ref() := (simpset() addsplits [expand_split]); |
177 simpset_ref() := simpset() addsplits [expand_split]; |
177 precompute the constants involved and don't do anything unless |
178 precompute the constants involved and don't do anything unless |
178 the current goal contains one of those constants |
179 the current goal contains one of those constants |
179 *) |
180 *) |
180 |
181 |
181 goal Prod.thy "R (split c p) = (~(? x y. p = (x,y) & (~R (c x y))))"; |
182 goal Prod.thy "R (split c p) = (~(? x y. p = (x,y) & (~R (c x y))))"; |