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 |