src/HOL/Prod.ML
changeset 4799 82b0ed20c2cb
parent 4772 8c7e7eaffbdf
child 4819 ef2e8e2a10e1
equal deleted inserted replaced
4798:7cfc85fc6fd7 4799:82b0ed20c2cb
    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))))";