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