| 
0
 | 
     1  | 
(** Generalized elimination rules **)
  | 
| 
 | 
     2  | 
  | 
| 
 | 
     3  | 
(*Generalized elimination for two conclusions*)
  | 
| 
927
 | 
     4  | 
val prems = goal proto_pure_thy 
  | 
| 
0
 | 
     5  | 
     "[| PROP U ==> PROP VA;  \
  | 
| 
 | 
     6  | 
\        PROP U ==> PROP VB;  \
  | 
| 
 | 
     7  | 
\        PROP U;              \
  | 
| 
 | 
     8  | 
\        [| PROP VA; PROP VB |] ==> PROP W    \
  | 
| 
 | 
     9  | 
\     |] ==> PROP W";
  | 
| 
 | 
    10  | 
by (REPEAT (resolve_tac prems 1));
  | 
| 
 | 
    11  | 
val general_elim2_rl = result();
  | 
| 
 | 
    12  | 
  | 
| 
 | 
    13  | 
fun make_elim2 (rl1,rl2) = standard (rl2 COMP rl1 COMP general_elim2_rl);
  | 
| 
 | 
    14  | 
fun elim2_tac (rl1,rl2) = eresolve_tac [rl2 COMP rl1 COMP general_elim2_rl];
  | 
| 
 | 
    15  | 
  | 
| 
 | 
    16  | 
  | 
| 
 | 
    17  | 
(*For example,  make_elim2(conjunct1,conjunct2)  
  | 
| 
 | 
    18  | 
  yields conjunction elimination *)
  |