src/HOL/HOL_lemmas.ML
changeset 7490 9a74b57740d1
parent 7427 e5a5d59dd513
child 7533 1659dc4e3552
equal deleted inserted replaced
7489:77d654ea31a9 7490:9a74b57740d1
   422 fun stac th = 
   422 fun stac th = 
   423   let val th' = th RS def_imp_eq handle THM _ => th
   423   let val th' = th RS def_imp_eq handle THM _ => th
   424   in  CHANGED_GOAL (rtac (th' RS ssubst))
   424   in  CHANGED_GOAL (rtac (th' RS ssubst))
   425   end;
   425   end;
   426 
   426 
       
   427 (* combination of (spec RS spec RS ...(j times) ... spec RS mp *) 
       
   428 local
       
   429   fun wrong_prem (Const ("All", _) $ (Abs (_, _, t))) = wrong_prem t
       
   430   |   wrong_prem (Bound _) = true
       
   431   |   wrong_prem _ = false;
       
   432   fun wrong (Const ("==>", _) $ (Const ("Trueprop", _) $ t) $ _) = wrong_prem t
       
   433   |   wrong _ = true;
       
   434   val filter_right = filter (fn t => not (wrong (#prop (rep_thm t))));
       
   435 in
       
   436   fun smp i = funpow i (fn m => filter_right ([spec] RL m)) ([mp]);
       
   437   fun smp_tac j = EVERY'[dresolve_tac (smp j), atac]
       
   438 end;
       
   439 
       
   440 
   427 fun strip_tac i = REPEAT(resolve_tac [impI,allI] i); 
   441 fun strip_tac i = REPEAT(resolve_tac [impI,allI] i); 
   428 
       
   429 
   442 
   430 (** strip ! and --> from proved goal while preserving !-bound var names **)
   443 (** strip ! and --> from proved goal while preserving !-bound var names **)
   431 
   444 
   432 local
   445 local
   433 
   446