src/Pure/Isar/isar_cmd.ML
changeset 30240 5b25fee0362c
parent 29882 29154e67731d
child 30242 aea5d7fa7ef5
equal deleted inserted replaced
30239:179ff9cb160b 30240:5b25fee0362c
    30   val immediate_proof: Toplevel.transition -> Toplevel.transition
    30   val immediate_proof: Toplevel.transition -> Toplevel.transition
    31   val done_proof: Toplevel.transition -> Toplevel.transition
    31   val done_proof: Toplevel.transition -> Toplevel.transition
    32   val skip_proof: Toplevel.transition -> Toplevel.transition
    32   val skip_proof: Toplevel.transition -> Toplevel.transition
    33   val init_theory: string * string list * (string * bool) list ->
    33   val init_theory: string * string list * (string * bool) list ->
    34     Toplevel.transition -> Toplevel.transition
    34     Toplevel.transition -> Toplevel.transition
    35   val welcome: Toplevel.transition -> Toplevel.transition
       
    36   val exit: Toplevel.transition -> Toplevel.transition
    35   val exit: Toplevel.transition -> Toplevel.transition
    37   val quit: Toplevel.transition -> Toplevel.transition
    36   val quit: Toplevel.transition -> Toplevel.transition
    38   val pr: string list * (int option * int option) -> Toplevel.transition -> Toplevel.transition
    37   val pr: string list * (int option * int option) -> Toplevel.transition -> Toplevel.transition
    39   val disable_pr: Toplevel.transition -> Toplevel.transition
    38   val disable_pr: Toplevel.transition -> Toplevel.transition
    40   val enable_pr: Toplevel.transition -> Toplevel.transition
    39   val enable_pr: Toplevel.transition -> Toplevel.transition
    60   val print_methods: Toplevel.transition -> Toplevel.transition
    59   val print_methods: Toplevel.transition -> Toplevel.transition
    61   val print_antiquotations: Toplevel.transition -> Toplevel.transition
    60   val print_antiquotations: Toplevel.transition -> Toplevel.transition
    62   val class_deps: Toplevel.transition -> Toplevel.transition
    61   val class_deps: Toplevel.transition -> Toplevel.transition
    63   val thy_deps: Toplevel.transition -> Toplevel.transition
    62   val thy_deps: Toplevel.transition -> Toplevel.transition
    64   val thm_deps: (Facts.ref * Attrib.src list) list -> Toplevel.transition -> Toplevel.transition
    63   val thm_deps: (Facts.ref * Attrib.src list) list -> Toplevel.transition -> Toplevel.transition
    65   val find_theorems: (int option * bool) * (bool * string FindTheorems.criterion) list
       
    66     -> Toplevel.transition -> Toplevel.transition
       
    67   val find_consts: (bool * FindConsts.criterion) list ->
       
    68                    Toplevel.transition -> Toplevel.transition
       
    69   val unused_thms: (string list * string list option) option ->
    64   val unused_thms: (string list * string list option) option ->
    70     Toplevel.transition -> Toplevel.transition
    65     Toplevel.transition -> Toplevel.transition
    71   val print_binds: Toplevel.transition -> Toplevel.transition
    66   val print_binds: Toplevel.transition -> Toplevel.transition
    72   val print_cases: Toplevel.transition -> Toplevel.transition
    67   val print_cases: Toplevel.transition -> Toplevel.transition
    73   val print_stmts: string list * (Facts.ref * Attrib.src list) list
    68   val print_stmts: string list * (Facts.ref * Attrib.src list) list
   164 
   159 
   165 
   160 
   166 (* axioms *)
   161 (* axioms *)
   167 
   162 
   168 fun add_axms f args thy =
   163 fun add_axms f args thy =
   169   f (map (fn ((b, ax), srcs) => ((Binding.base_name b, ax), map (Attrib.attribute thy) srcs)) args) thy;
   164   f (map (fn ((b, ax), srcs) => ((Binding.name_of b, ax), map (Attrib.attribute thy) srcs)) args) thy;
   170 
   165 
   171 val add_axioms = add_axms (snd oo PureThy.add_axioms_cmd);
   166 val add_axioms = add_axms (snd oo PureThy.add_axioms_cmd);
   172 
   167 
   173 fun add_defs ((unchecked, overloaded), args) =
   168 fun add_defs ((unchecked, overloaded), args) =
   174   add_axms
   169   add_axms
   267   Toplevel.init_theory name (ThyInfo.begin_theory name imports (map (apfst Path.explode) uses))
   262   Toplevel.init_theory name (ThyInfo.begin_theory name imports (map (apfst Path.explode) uses))
   268     (fn thy =>
   263     (fn thy =>
   269       if ThyInfo.check_known_thy (Context.theory_name thy)
   264       if ThyInfo.check_known_thy (Context.theory_name thy)
   270       then ThyInfo.end_theory thy else ());
   265       then ThyInfo.end_theory thy else ());
   271 
   266 
   272 val welcome = Toplevel.imperative (writeln o Session.welcome);
       
   273 
       
   274 val exit = Toplevel.keep (fn state =>
   267 val exit = Toplevel.keep (fn state =>
   275  (Context.set_thread_data (try Toplevel.generic_theory_of state);
   268  (Context.set_thread_data (try Toplevel.generic_theory_of state);
   276   raise Toplevel.TERMINATE));
   269   raise Toplevel.TERMINATE));
   277 
   270 
   278 val quit = Toplevel.imperative quit;
   271 val quit = Toplevel.imperative quit;
   401     val gr =
   394     val gr =
   402       Graph.fold (cons o entry) classes []
   395       Graph.fold (cons o entry) classes []
   403       |> sort (int_ord o pairself #1) |> map #2;
   396       |> sort (int_ord o pairself #1) |> map #2;
   404   in Present.display_graph gr end);
   397   in Present.display_graph gr end);
   405 
   398 
   406 
       
   407 (* retrieve theorems *)
       
   408 
       
   409 fun thm_deps args = Toplevel.unknown_theory o Toplevel.keep (fn state =>
   399 fun thm_deps args = Toplevel.unknown_theory o Toplevel.keep (fn state =>
   410   ThmDeps.thm_deps (Proof.get_thmss (Toplevel.enter_proof_body state) args));
   400   ThmDeps.thm_deps (Proof.get_thmss (Toplevel.enter_proof_body state) args));
   411 
       
   412 fun find_theorems ((opt_lim, rem_dups), spec) =
       
   413   Toplevel.unknown_theory o Toplevel.keep (fn state =>
       
   414   let
       
   415     val proof_state = Toplevel.enter_proof_body state;
       
   416     val ctxt = Proof.context_of proof_state;
       
   417     val opt_goal = try Proof.get_goal proof_state |> Option.map (#2 o #2);
       
   418   in FindTheorems.print_theorems ctxt opt_goal opt_lim rem_dups spec end);
       
   419 
   401 
   420 
   402 
   421 (* find unused theorems *)
   403 (* find unused theorems *)
   422 
   404 
   423 fun unused_thms opt_range = Toplevel.keep (fn state =>
   405 fun unused_thms opt_range = Toplevel.keep (fn state =>
   432       | SOME (xs, NONE) => (map ThyInfo.get_theory xs, [thy])
   414       | SOME (xs, NONE) => (map ThyInfo.get_theory xs, [thy])
   433       | SOME (xs, SOME ys) => (map ThyInfo.get_theory xs, map ThyInfo.get_theory ys))
   415       | SOME (xs, SOME ys) => (map ThyInfo.get_theory xs, map ThyInfo.get_theory ys))
   434     |> map pretty_thm |> Pretty.chunks |> Pretty.writeln
   416     |> map pretty_thm |> Pretty.chunks |> Pretty.writeln
   435   end);
   417   end);
   436 
   418 
   437 (* retrieve constants *)
       
   438 
       
   439 fun find_consts spec =
       
   440   Toplevel.unknown_theory o Toplevel.keep (fn state =>
       
   441   let val ctxt = (Proof.context_of o Toplevel.enter_proof_body) state
       
   442   in FindConsts.find_consts ctxt spec end);
       
   443 
   419 
   444 (* print proof context contents *)
   420 (* print proof context contents *)
   445 
   421 
   446 val print_binds = Toplevel.unknown_context o Toplevel.keep (fn state =>
   422 val print_binds = Toplevel.unknown_context o Toplevel.keep (fn state =>
   447   ProofContext.setmp_verbose ProofContext.print_binds (Toplevel.context_of state));
   423   ProofContext.setmp_verbose ProofContext.print_binds (Toplevel.context_of state));