equal
deleted
inserted
replaced
10 |
10 |
11 (*Eliminates a commonly-occurring expression*) |
11 (*Eliminates a commonly-occurring expression*) |
12 goal HOL.thy "~ (ALL x. x~=y)"; |
12 goal HOL.thy "~ (ALL x. x~=y)"; |
13 by (Blast_tac 1); |
13 by (Blast_tac 1); |
14 Addsimps [result()]; |
14 Addsimps [result()]; |
15 |
|
16 |
|
17 (*Classical simplification*) |
|
18 val rev_conjI = conjI RS (conj_commute RS iffD1) |> standard; |
|
19 val acontr_tac = assume_tac ORELSE' contr_tac; |
|
20 fun impCE_tac i = eresolve_tac [impCE] i THEN |
|
21 (acontr_tac i ORELSE acontr_tac (i+1)); |
|
22 |
|
23 val clarify_tac = |
|
24 REPEAT_FIRST (ares_tac [impI, notI, allI] ORELSE' |
|
25 eresolve_tac [exE, conjE, conjI, rev_conjI] ORELSE' |
|
26 contr_tac ORELSE' impCE_tac ORELSE' hyp_subst_tac); |
|
27 |
|
28 |
15 |
29 open Message; |
16 open Message; |
30 |
17 |
31 AddIffs atomic.inject; |
18 AddIffs atomic.inject; |
32 AddIffs msg.inject; |
19 AddIffs msg.inject; |
545 |
532 |
546 (** A congruence rule for "analz" **) |
533 (** A congruence rule for "analz" **) |
547 |
534 |
548 goal thy "!!H. [| analz G <= analz G'; analz H <= analz H' \ |
535 goal thy "!!H. [| analz G <= analz G'; analz H <= analz H' \ |
549 \ |] ==> analz (G Un H) <= analz (G' Un H')"; |
536 \ |] ==> analz (G Un H) <= analz (G' Un H')"; |
550 by (Step_tac 1); |
537 by (Clarify_tac 1); |
551 by (etac analz.induct 1); |
538 by (etac analz.induct 1); |
552 by (ALLGOALS (best_tac (!claset addIs [analz_mono RS subsetD]))); |
539 by (ALLGOALS (best_tac (!claset addIs [analz_mono RS subsetD]))); |
553 qed "analz_subset_cong"; |
540 qed "analz_subset_cong"; |
554 |
541 |
555 goal thy "!!H. [| analz G = analz G'; analz H = analz H' \ |
542 goal thy "!!H. [| analz G = analz G'; analz H = analz H' \ |