src/Pure/Isar/method.ML
changeset 30540 5e2d9604a3d3
parent 30515 bca05b17b618
child 30544 0ed8fe16331a
equal deleted inserted replaced
30539:c96c72709a20 30540:5e2d9604a3d3
    82   val setup: binding -> (Proof.context -> method) context_parser -> string -> theory -> theory
    82   val setup: binding -> (Proof.context -> method) context_parser -> string -> theory -> theory
    83   val method_setup: bstring -> string * Position.T -> string -> theory -> theory
    83   val method_setup: bstring -> string * Position.T -> string -> theory -> theory
    84   val simple_args: 'a parser -> ('a -> Proof.context -> method) -> src -> Proof.context -> method
    84   val simple_args: 'a parser -> ('a -> Proof.context -> method) -> src -> Proof.context -> method
    85   val ctxt_args: (Proof.context -> method) -> src -> Proof.context -> method
    85   val ctxt_args: (Proof.context -> method) -> src -> Proof.context -> method
    86   val no_args: method -> src -> Proof.context -> method
    86   val no_args: method -> src -> Proof.context -> method
    87   type modifier
    87   type modifier = (Proof.context -> Proof.context) * attribute
       
    88   val section: modifier parser list -> thm list context_parser
       
    89   val sections: modifier parser list -> thm list list context_parser
    88   val sectioned_args: 'a context_parser -> modifier parser list ->
    90   val sectioned_args: 'a context_parser -> modifier parser list ->
    89     ('a -> Proof.context -> 'b) -> src -> Proof.context -> 'b
    91     ('a -> Proof.context -> 'b) -> src -> Proof.context -> 'b
    90   val bang_sectioned_args: modifier parser list ->
    92   val bang_sectioned_args: modifier parser list ->
    91     (thm list -> Proof.context -> 'a) -> src -> Proof.context -> 'a
    93     (thm list -> Proof.context -> 'a) -> src -> Proof.context -> 'a
    92   val bang_sectioned_args': modifier parser list -> 'a context_parser ->
    94   val bang_sectioned_args': modifier parser list -> 'a context_parser ->
   431 local
   433 local
   432 
   434 
   433 fun thms ss = Scan.repeat (Scan.unless (Scan.lift (Scan.first ss)) Attrib.multi_thm) >> flat;
   435 fun thms ss = Scan.repeat (Scan.unless (Scan.lift (Scan.first ss)) Attrib.multi_thm) >> flat;
   434 fun app (f, att) (context, ths) = Library.foldl_map att (Context.map_proof f context, ths);
   436 fun app (f, att) (context, ths) = Library.foldl_map att (Context.map_proof f context, ths);
   435 
   437 
       
   438 in
       
   439 
   436 fun section ss = Scan.depend (fn context => (Scan.first ss -- Scan.pass context (thms ss)) :|--
   440 fun section ss = Scan.depend (fn context => (Scan.first ss -- Scan.pass context (thms ss)) :|--
   437   (fn (m, ths) => Scan.succeed (app m (context, ths))));
   441   (fn (m, ths) => Scan.succeed (app m (context, ths))));
   438 
   442 
   439 fun sectioned args ss = args -- Scan.repeat (section ss);
   443 fun sections ss = Scan.repeat (section ss);
   440 
       
   441 in
       
   442 
   444 
   443 fun sectioned_args args ss f src ctxt =
   445 fun sectioned_args args ss f src ctxt =
   444   let val ((x, _), ctxt') = syntax (sectioned args ss) src ctxt
   446   let val ((x, _), ctxt') = syntax (args -- sections ss) src ctxt
   445   in f x ctxt' end;
   447   in f x ctxt' end;
   446 
   448 
   447 fun bang_sectioned_args ss f = sectioned_args Args.bang_facts ss f;
   449 fun bang_sectioned_args ss f = sectioned_args Args.bang_facts ss f;
   448 fun bang_sectioned_args' ss scan f =
   450 fun bang_sectioned_args' ss scan f =
   449   sectioned_args (Args.bang_facts -- scan >> swap) ss (uncurry f);
   451   sectioned_args (Args.bang_facts -- scan >> swap) ss (uncurry f);