src/HOL/Auth/Message.ML
changeset 3714 ab3b4ceb61dc
parent 3702 0fc9bf467f95
child 3730 6933d20f335f
equal deleted inserted replaced
3713:8a1f7d5b1eff 3714:ab3b4ceb61dc
    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' \