equal
deleted
inserted
replaced
15 val all_dupE: thm |
15 val all_dupE: thm |
16 val allI: thm |
16 val allI: thm |
17 val arg_cong: thm |
17 val arg_cong: thm |
18 val fun_cong: thm |
18 val fun_cong: thm |
19 val box_equals: thm |
19 val box_equals: thm |
|
20 val case_tac: string -> int -> tactic |
20 val ccontr: thm |
21 val ccontr: thm |
21 val classical: thm |
22 val classical: thm |
22 val cong: thm |
23 val cong: thm |
23 val conjunct1: thm |
24 val conjunct1: thm |
24 val conjunct2: thm |
25 val conjunct2: thm |
320 (*Required by the "classical" module*) |
321 (*Required by the "classical" module*) |
321 val swap = prove_goal HOL.thy "~P ==> (~Q ==> P) ==> Q" |
322 val swap = prove_goal HOL.thy "~P ==> (~Q ==> P) ==> Q" |
322 (fn major::prems=> |
323 (fn major::prems=> |
323 [ rtac ccontr 1, rtac (major RS notE) 1, REPEAT (ares_tac prems 1)]); |
324 [ rtac ccontr 1, rtac (major RS notE) 1, REPEAT (ares_tac prems 1)]); |
324 |
325 |
|
326 (* case distinction *) |
|
327 |
|
328 val case_split_thm = prove_goal HOL.thy "[| P ==> Q; ~P ==> Q |] ==> Q" |
|
329 (fn [p1,p2] => [cut_facts_tac [excluded_middle] 1, etac disjE 1, |
|
330 etac p2 1, etac p1 1]); |
|
331 |
|
332 fun case_tac a = res_inst_tac [("P",a)] case_split_thm; |
|
333 |
325 (** Standard abbreviations **) |
334 (** Standard abbreviations **) |
326 |
335 |
327 fun stac th = rtac(th RS ssubst); |
336 fun stac th = rtac(th RS ssubst); |
328 fun sstac ths = EVERY' (map stac ths); |
337 fun sstac ths = EVERY' (map stac ths); |
329 fun strip_tac i = REPEAT(resolve_tac [impI,allI] i); |
338 fun strip_tac i = REPEAT(resolve_tac [impI,allI] i); |
330 |
339 |
331 end; |
340 end; |
332 |
341 |
333 open HOL_Lemmas; |
342 open HOL_Lemmas; |
334 |
|