src/Pure/Tools/find_theorems.ML
changeset 43068 ac769b5edd1d
parent 43067 76e1d25c6357
child 43069 88e45168272c
equal deleted inserted replaced
43067:76e1d25c6357 43068:ac769b5edd1d
    15 
    15 
    16   val tac_limit: int Unsynchronized.ref
    16   val tac_limit: int Unsynchronized.ref
    17   val limit: int Unsynchronized.ref
    17   val limit: int Unsynchronized.ref
    18 
    18 
    19   val read_criterion: Proof.context -> string criterion -> term criterion
    19   val read_criterion: Proof.context -> string criterion -> term criterion
       
    20   val query_parser: (bool * string criterion) list parser
    20 
    21 
    21   val find_theorems: Proof.context -> thm option -> int option -> bool ->
    22   val find_theorems: Proof.context -> thm option -> int option -> bool ->
    22     (bool * term criterion) list -> int option * (Facts.ref * thm) list
    23     (bool * term criterion) list -> int option * (Facts.ref * thm) list
    23   val find_theorems_cmd: Proof.context -> thm option -> int option -> bool ->
    24   val find_theorems_cmd: Proof.context -> thm option -> int option -> bool ->
    24     (bool * string criterion) list -> int option * (Facts.ref * thm) list
    25     (bool * string criterion) list -> int option * (Facts.ref * thm) list
   528     (Parse.$$$ "(" |--
   529     (Parse.$$$ "(" |--
   529       Parse.!!! (Scan.option Parse.nat -- Scan.optional (Parse.reserved "with_dups" >> K false) true
   530       Parse.!!! (Scan.option Parse.nat -- Scan.optional (Parse.reserved "with_dups" >> K false) true
   530         --| Parse.$$$ ")")) (NONE, true);
   531         --| Parse.$$$ ")")) (NONE, true);
   531 in
   532 in
   532 
   533 
       
   534 val query_parser = Scan.repeat (((Scan.option Parse.minus >> is_none) -- criterion));
       
   535 
   533 val _ =
   536 val _ =
   534   Outer_Syntax.improper_command "find_theorems" "print theorems meeting specified criteria"
   537   Outer_Syntax.improper_command "find_theorems" "print theorems meeting specified criteria"
   535     Keyword.diag
   538     Keyword.diag
   536     (options -- Scan.repeat (((Scan.option Parse.minus >> is_none) -- criterion))
   539     (options -- query_parser
   537       >> (fn ((opt_lim, rem_dups), spec) =>
   540       >> (fn ((opt_lim, rem_dups), spec) =>
   538         Toplevel.no_timing o
   541         Toplevel.no_timing o
   539         Toplevel.keep (fn state =>
   542         Toplevel.keep (fn state =>
   540           let
   543           let
   541             val ctxt = Toplevel.context_of state;
   544             val ctxt = Toplevel.context_of state;