src/Provers/splitter.ML
changeset 8634 3f34637cb9c0
parent 8476 07d3e6383822
child 8815 187547eae4c5
equal deleted inserted replaced
8633:427ead639d8a 8634:3f34637cb9c0
   396 
   396 
   397 
   397 
   398 (* attributes *)
   398 (* attributes *)
   399 
   399 
   400 val splitN = "split";
   400 val splitN = "split";
   401 val addN = "add";
       
   402 val delN = "del";
       
   403 
       
   404 fun split_att change =
       
   405   (Args.$$$ addN >> K (op addsplits) ||
       
   406     Args.$$$ delN >> K (op delsplits) ||
       
   407     Scan.succeed (op addsplits))
       
   408   >> change
       
   409   |> Scan.lift
       
   410   |> Attrib.syntax;
       
   411 
       
   412 val setup_attrs = Attrib.add_attributes
       
   413  [(splitN, (split_att Simplifier.change_global_ss, split_att Simplifier.change_local_ss),
       
   414     "declare splitter rule")];
       
   415 
   401 
   416 val split_add_global = Simplifier.change_global_ss (op addsplits);
   402 val split_add_global = Simplifier.change_global_ss (op addsplits);
   417 val split_del_global = Simplifier.change_global_ss (op delsplits);
   403 val split_del_global = Simplifier.change_global_ss (op delsplits);
   418 val split_add_local = Simplifier.change_local_ss (op addsplits);
   404 val split_add_local = Simplifier.change_local_ss (op addsplits);
   419 val split_del_local = Simplifier.change_local_ss (op delsplits);
   405 val split_del_local = Simplifier.change_local_ss (op delsplits);
   420 
   406 
       
   407 val split_attr =
       
   408  (Attrib.add_del_args split_add_global split_del_global,
       
   409   Attrib.add_del_args split_add_local split_del_local);
       
   410 
       
   411 val setup_attrs =
       
   412   Attrib.add_attributes [(splitN, split_attr, "declare splitter rule")];
       
   413 
   421 
   414 
   422 (* method modifiers *)
   415 (* method modifiers *)
   423 
   416 
   424 val split_modifiers =
   417 val split_modifiers =
   425  [Args.$$$ splitN -- Args.$$$ ":" >> K ((I, split_add_local): Method.modifier),
   418  [Args.$$$ splitN -- Args.$$$ ":" >> K ((I, split_add_local): Method.modifier),
   426   Args.$$$ splitN -- Args.$$$ addN -- Args.$$$ ":" >> K (I, split_add_local),
   419   Args.$$$ splitN -- Args.$$$ "add" -- Args.$$$ ":" >> K (I, split_add_local),
   427   Args.$$$ splitN -- Args.$$$ delN -- Args.$$$ ":" >> K (I, split_del_local)];
   420   Args.$$$ splitN -- Args.$$$ "del" -- Args.$$$ ":" >> K (I, split_del_local)];
   428 
   421 
   429 
   422 
   430 
   423 
   431 (** theory setup **)
   424 (** theory setup **)
   432 
   425