iff?: refer to Pure/ContextRules;
authorwenzelm
Wed, 05 Dec 2001 03:11:05 +0100
changeset 12375539a32568db3
parent 12374 59874c94d0aa
child 12376 480303e3fa08
iff?: refer to Pure/ContextRules;
src/Provers/clasimp.ML
     1.1 --- a/src/Provers/clasimp.ML	Wed Dec 05 03:10:06 2001 +0100
     1.2 +++ b/src/Provers/clasimp.ML	Wed Dec 05 03:11:05 2001 +0100
     1.3 @@ -1,6 +1,7 @@
     1.4  (*  Title:      Provers/clasimp.ML
     1.5      ID:         $Id$
     1.6      Author:     David von Oheimb, TU Muenchen
     1.7 +    License:    GPL (GNU GENERAL PUBLIC LICENSE)
     1.8  
     1.9  Combination of classical reasoner and simplifier (depends on
    1.10  simplifier.ML, splitter.ML classical.ML, blast.ML).
    1.11 @@ -128,13 +129,13 @@
    1.12       simp (ss, [th]))
    1.13    end;
    1.14  
    1.15 -fun delIff ((cs, ss), th) =
    1.16 +fun delIff delcs delss ((cs, ss), th) =
    1.17    let val zero_rotate = zero_var_indexes o rotate_prems (nprems_of th) in
    1.18 -    (Classical.delrules (cs, [zero_rotate (th RS Data.iffD2),
    1.19 +    (delcs (cs, [zero_rotate (th RS Data.iffD2),
    1.20          Data.cla_make_elim (zero_rotate (th RS Data.iffD1))])
    1.21 -      handle THM _ => (Classical.delrules (cs, [zero_rotate (th RS Data.notE)])
    1.22 -        handle THM _ => Classical.delrules (cs, [th])),
    1.23 -     Simplifier.delsimps (ss, [th]))
    1.24 +      handle THM _ => (delcs (cs, [zero_rotate (th RS Data.notE)])
    1.25 +        handle THM _ => delcs (cs, [th])),
    1.26 +     delss (ss, [th]))
    1.27    end;
    1.28  
    1.29  fun store_clasimp (cs, ss) =
    1.30 @@ -144,14 +145,25 @@
    1.31  
    1.32  val op addIffs =
    1.33    foldl (addIff Classical.addSDs Classical.addSEs Classical.addSIs Simplifier.addsimps);
    1.34 -val addIffs' =
    1.35 -  foldl (addIff Classical.addXDs Classical.addXEs Classical.addXIs
    1.36 -    ((fn (ss, _) => ss): Simplifier.simpset * thm list -> Simplifier.simpset));
    1.37 -val op delIffs = foldl delIff;
    1.38 +val op delIffs = foldl (delIff Classical.delrules Simplifier.delsimps);
    1.39  
    1.40  fun AddIffs thms = store_clasimp (clasimpset () addIffs thms);
    1.41  fun DelIffs thms = store_clasimp (clasimpset () delIffs thms);
    1.42  
    1.43 +fun addIffs_global (thy, ths) =
    1.44 +  foldl (addIff ContextRules.addXDs_global ContextRules.addXEs_global
    1.45 +    ContextRules.addXIs_global #1) ((thy, ()), ths) |> #1;
    1.46 +
    1.47 +fun addIffs_local (ctxt, ths) =
    1.48 +  foldl (addIff ContextRules.addXDs_local ContextRules.addXEs_local
    1.49 +    ContextRules.addXIs_local #1) ((ctxt, ()), ths) |> #1;
    1.50 +
    1.51 +fun delIffs_global (thy, ths) =
    1.52 +  foldl (delIff ContextRules.delrules_global #1) ((thy, ()), ths) |> #1;
    1.53 +
    1.54 +fun delIffs_local (ctxt, ths) =
    1.55 +  foldl (delIff ContextRules.delrules_local #1) ((ctxt, ()), ths) |> #1;
    1.56 +
    1.57  end;
    1.58  
    1.59  
    1.60 @@ -164,8 +176,10 @@
    1.61    Classical.CLASET (fn cs => Simplifier.SIMPSET (fn ss => tacf (cs, ss) i)) state;
    1.62  
    1.63  
    1.64 -fun clarsimp_tac (cs, ss) = safe_asm_full_simp_tac ss THEN_ALL_NEW
    1.65 -                            Classical.clarify_tac (cs addSss ss);
    1.66 +fun clarsimp_tac (cs, ss) =
    1.67 +  safe_asm_full_simp_tac ss THEN_ALL_NEW
    1.68 +  Classical.clarify_tac (cs addSss ss);
    1.69 +
    1.70  fun Clarsimp_tac i = clarsimp_tac (clasimpset ()) i;
    1.71  
    1.72  
    1.73 @@ -204,9 +218,7 @@
    1.74      end;
    1.75  
    1.76  fun auto_tac css = mk_auto_tac css 4 2;
    1.77 -
    1.78  fun Auto_tac st = auto_tac (clasimpset ()) st;
    1.79 -
    1.80  fun auto () = by Auto_tac;
    1.81  
    1.82  
    1.83 @@ -256,12 +268,14 @@
    1.84  
    1.85  (* attributes *)
    1.86  
    1.87 +fun change_rules f (x, th) = (f (x, [th]), th);
    1.88 +
    1.89  val iff_add_global = change_global_css (op addIffs);
    1.90 -val iff_add_global' = change_global_css (op addIffs');
    1.91 -val iff_del_global = change_global_css (op delIffs);
    1.92 +val iff_add_global' = change_rules addIffs_global;
    1.93 +val iff_del_global = change_global_css (op delIffs) o change_rules delIffs_global;
    1.94  val iff_add_local = change_local_css (op addIffs);
    1.95 -val iff_add_local' = change_local_css (op addIffs');
    1.96 -val iff_del_local = change_local_css (op delIffs);
    1.97 +val iff_add_local' = change_rules addIffs_local;
    1.98 +val iff_del_local = change_local_css (op delIffs) o change_rules delIffs_local;
    1.99  
   1.100  fun iff_att add add' del = Attrib.syntax (Scan.lift
   1.101   (Args.del >> K del ||