| author | wenzelm | 
| Sat, 23 Apr 2005 19:51:54 +0200 | |
| changeset 15836 | b805d85909c7 | 
| parent 15799 | 50989ffdcdda | 
| child 15964 | f2074e12d1d4 | 
| permissions | -rw-r--r-- | 
| 5831 | 1 | (* Title: Pure/Isar/isar_cmd.ML | 
| 2 | ID: $Id$ | |
| 3 | Author: Markus Wenzel, TU Muenchen | |
| 4 | ||
| 5 | Non-logical toplevel commands. | |
| 6 | *) | |
| 7 | ||
| 8 | signature ISAR_CMD = | |
| 9 | sig | |
| 7462 | 10 | val welcome: Toplevel.transition -> Toplevel.transition | 
| 11 | val init_toplevel: Toplevel.transition -> Toplevel.transition | |
| 5831 | 12 | val exit: Toplevel.transition -> Toplevel.transition | 
| 13 | val quit: Toplevel.transition -> Toplevel.transition | |
| 7908 | 14 | val touch_child_thys: string -> Toplevel.transition -> Toplevel.transition | 
| 7101 | 15 | val touch_all_thys: Toplevel.transition -> Toplevel.transition | 
| 16 | val touch_thy: string -> Toplevel.transition -> Toplevel.transition | |
| 17 | val remove_thy: string -> Toplevel.transition -> Toplevel.transition | |
| 7931 | 18 | val kill_thy: string -> Toplevel.transition -> Toplevel.transition | 
| 9731 | 19 | val pr: string list * (int option * int option) -> Toplevel.transition -> Toplevel.transition | 
| 8453 | 20 | val disable_pr: Toplevel.transition -> Toplevel.transition | 
| 21 | val enable_pr: Toplevel.transition -> Toplevel.transition | |
| 6734 | 22 | val cannot_undo: string -> Toplevel.transition -> Toplevel.transition | 
| 7729 | 23 | val clear_undos_theory: int -> Toplevel.transition -> Toplevel.transition | 
| 6742 | 24 | val redo: Toplevel.transition -> Toplevel.transition | 
| 25 | val undos_proof: int -> Toplevel.transition -> Toplevel.transition | |
| 7936 | 26 | val kill_proof_notify: (unit -> unit) -> Toplevel.transition -> Toplevel.transition | 
| 6742 | 27 | val kill_proof: Toplevel.transition -> Toplevel.transition | 
| 28 | val undo_theory: Toplevel.transition -> Toplevel.transition | |
| 6686 | 29 | val undo: Toplevel.transition -> Toplevel.transition | 
| 8498 | 30 | val kill: Toplevel.transition -> Toplevel.transition | 
| 12876 
a70df1e5bf10
got rid of explicit marginal comments (now stripped earlier from input);
 wenzelm parents: 
12758diff
changeset | 31 | val back: bool -> Toplevel.transition -> Toplevel.transition | 
| 14950 | 32 | val use: Path.T -> Toplevel.transition -> Toplevel.transition | 
| 12876 
a70df1e5bf10
got rid of explicit marginal comments (now stripped earlier from input);
 wenzelm parents: 
12758diff
changeset | 33 | val use_mltext_theory: string -> Toplevel.transition -> Toplevel.transition | 
| 
a70df1e5bf10
got rid of explicit marginal comments (now stripped earlier from input);
 wenzelm parents: 
12758diff
changeset | 34 | val use_mltext: bool -> string -> Toplevel.transition -> Toplevel.transition | 
| 5831 | 35 | val use_commit: Toplevel.transition -> Toplevel.transition | 
| 14950 | 36 | val cd: Path.T -> Toplevel.transition -> Toplevel.transition | 
| 5831 | 37 | val pwd: Toplevel.transition -> Toplevel.transition | 
| 38 | val use_thy: string -> Toplevel.transition -> Toplevel.transition | |
| 6694 | 39 | val use_thy_only: string -> Toplevel.transition -> Toplevel.transition | 
| 6195 | 40 | val update_thy: string -> Toplevel.transition -> Toplevel.transition | 
| 7101 | 41 | val update_thy_only: string -> Toplevel.transition -> Toplevel.transition | 
| 14950 | 42 | val display_drafts: Path.T list -> Toplevel.transition -> Toplevel.transition | 
| 43 | val print_drafts: Path.T list -> Toplevel.transition -> Toplevel.transition | |
| 7124 | 44 | val pretty_setmargin: int -> Toplevel.transition -> Toplevel.transition | 
| 7308 | 45 | val print_context: Toplevel.transition -> Toplevel.transition | 
| 5831 | 46 | val print_theory: Toplevel.transition -> Toplevel.transition | 
| 47 | val print_syntax: Toplevel.transition -> Toplevel.transition | |
| 5880 | 48 | val print_theorems: Toplevel.transition -> Toplevel.transition | 
| 12060 | 49 | val print_locales: Toplevel.transition -> Toplevel.transition | 
| 15703 | 50 | val print_locale: Locale.expr * Locale.element list | 
| 12758 | 51 | -> Toplevel.transition -> Toplevel.transition | 
| 15596 | 52 | val print_registrations: string -> Toplevel.transition -> Toplevel.transition | 
| 5831 | 53 | val print_attributes: Toplevel.transition -> Toplevel.transition | 
| 12382 | 54 | val print_rules: Toplevel.transition -> Toplevel.transition | 
| 11666 | 55 | val print_induct_rules: Toplevel.transition -> Toplevel.transition | 
| 9219 | 56 | val print_trans_rules: Toplevel.transition -> Toplevel.transition | 
| 5831 | 57 | val print_methods: Toplevel.transition -> Toplevel.transition | 
| 9219 | 58 | val print_antiquotations: Toplevel.transition -> Toplevel.transition | 
| 13284 | 59 | val print_thms_containing: int option * string list | 
| 60 | -> Toplevel.transition -> Toplevel.transition | |
| 15703 | 61 | val thm_deps: (thmref * Attrib.src list) list -> Toplevel.transition -> Toplevel.transition | 
| 5831 | 62 | val print_binds: Toplevel.transition -> Toplevel.transition | 
| 63 | val print_lthms: Toplevel.transition -> Toplevel.transition | |
| 8369 | 64 | val print_cases: Toplevel.transition -> Toplevel.transition | 
| 13801 
6c5c5bdfae84
Moved print_intros from proof_general.ML to Isar/isar_cmd.ML
 berghofe parents: 
13284diff
changeset | 65 | val print_intros: Toplevel.transition -> Toplevel.transition | 
| 15703 | 66 | val print_thms: string list * (thmref * Attrib.src list) list | 
| 10581 | 67 | -> Toplevel.transition -> Toplevel.transition | 
| 15703 | 68 | val print_prfs: bool -> string list * (thmref * Attrib.src list) list option | 
| 11524 
197f2e14a714
Added functions for printing primitive proof terms.
 berghofe parents: 
11017diff
changeset | 69 | -> Toplevel.transition -> Toplevel.transition | 
| 12876 
a70df1e5bf10
got rid of explicit marginal comments (now stripped earlier from input);
 wenzelm parents: 
12758diff
changeset | 70 | val print_prop: (string list * string) -> Toplevel.transition -> Toplevel.transition | 
| 
a70df1e5bf10
got rid of explicit marginal comments (now stripped earlier from input);
 wenzelm parents: 
12758diff
changeset | 71 | val print_term: (string list * string) -> Toplevel.transition -> Toplevel.transition | 
| 
a70df1e5bf10
got rid of explicit marginal comments (now stripped earlier from input);
 wenzelm parents: 
12758diff
changeset | 72 | val print_type: (string list * string) -> Toplevel.transition -> Toplevel.transition | 
| 12938 
a646d0467d81
markup commands (from isar_thy.ML) with proper check of antiquotations;
 wenzelm parents: 
12876diff
changeset | 73 | val add_header: string * Position.T -> Toplevel.transition -> Toplevel.transition | 
| 
a646d0467d81
markup commands (from isar_thy.ML) with proper check of antiquotations;
 wenzelm parents: 
12876diff
changeset | 74 | val add_chapter: string * Position.T -> Toplevel.transition -> Toplevel.transition | 
| 
a646d0467d81
markup commands (from isar_thy.ML) with proper check of antiquotations;
 wenzelm parents: 
12876diff
changeset | 75 | val add_section: string * Position.T -> Toplevel.transition -> Toplevel.transition | 
| 
a646d0467d81
markup commands (from isar_thy.ML) with proper check of antiquotations;
 wenzelm parents: 
12876diff
changeset | 76 | val add_subsection: string * Position.T -> Toplevel.transition -> Toplevel.transition | 
| 
a646d0467d81
markup commands (from isar_thy.ML) with proper check of antiquotations;
 wenzelm parents: 
12876diff
changeset | 77 | val add_subsubsection: string * Position.T -> Toplevel.transition -> Toplevel.transition | 
| 
a646d0467d81
markup commands (from isar_thy.ML) with proper check of antiquotations;
 wenzelm parents: 
12876diff
changeset | 78 | val add_text: string * Position.T -> Toplevel.transition -> Toplevel.transition | 
| 
a646d0467d81
markup commands (from isar_thy.ML) with proper check of antiquotations;
 wenzelm parents: 
12876diff
changeset | 79 | val add_text_raw: string * Position.T -> Toplevel.transition -> Toplevel.transition | 
| 
a646d0467d81
markup commands (from isar_thy.ML) with proper check of antiquotations;
 wenzelm parents: 
12876diff
changeset | 80 | val add_sect: string * Position.T -> Toplevel.transition -> Toplevel.transition | 
| 
a646d0467d81
markup commands (from isar_thy.ML) with proper check of antiquotations;
 wenzelm parents: 
12876diff
changeset | 81 | val add_subsect: string * Position.T -> Toplevel.transition -> Toplevel.transition | 
| 
a646d0467d81
markup commands (from isar_thy.ML) with proper check of antiquotations;
 wenzelm parents: 
12876diff
changeset | 82 | val add_subsubsect: string * Position.T -> Toplevel.transition -> Toplevel.transition | 
| 
a646d0467d81
markup commands (from isar_thy.ML) with proper check of antiquotations;
 wenzelm parents: 
12876diff
changeset | 83 | val add_txt: string * Position.T -> Toplevel.transition -> Toplevel.transition | 
| 
a646d0467d81
markup commands (from isar_thy.ML) with proper check of antiquotations;
 wenzelm parents: 
12876diff
changeset | 84 | val add_txt_raw: string * Position.T -> Toplevel.transition -> Toplevel.transition | 
| 5831 | 85 | end; | 
| 86 | ||
| 87 | structure IsarCmd: ISAR_CMD = | |
| 88 | struct | |
| 89 | ||
| 90 | ||
| 7462 | 91 | (* variations on init / exit *) | 
| 92 | ||
| 93 | val init_toplevel = Toplevel.imperative (fn () => raise Toplevel.RESTART); | |
| 94 | val welcome = Toplevel.imperative (writeln o Session.welcome); | |
| 5831 | 95 | |
| 96 | val exit = Toplevel.keep (fn state => | |
| 97 | (Context.set_context (try Toplevel.theory_of state); | |
| 6635 | 98 | writeln "Leaving the Isar loop. Invoke 'loop();' to restart."; | 
| 5831 | 99 | raise Toplevel.TERMINATE)); | 
| 100 | ||
| 101 | val quit = Toplevel.imperative quit; | |
| 102 | ||
| 7101 | 103 | |
| 104 | (* touch theories *) | |
| 105 | ||
| 7908 | 106 | fun touch_child_thys name = Toplevel.imperative (fn () => ThyInfo.touch_child_thys name); | 
| 7101 | 107 | val touch_all_thys = Toplevel.imperative ThyInfo.touch_all_thys; | 
| 108 | fun touch_thy name = Toplevel.imperative (fn () => ThyInfo.touch_thy name); | |
| 109 | fun remove_thy name = Toplevel.imperative (fn () => ThyInfo.remove_thy name); | |
| 7931 | 110 | fun kill_thy name = Toplevel.imperative (fn () => IsarThy.kill_theory name); | 
| 7101 | 111 | |
| 5831 | 112 | |
| 8453 | 113 | (* print state *) | 
| 114 | ||
| 8463 | 115 | fun with_modes modes e = | 
| 116 | Library.setmp print_mode (modes @ ! print_mode) e (); | |
| 117 | ||
| 15531 | 118 | fun set_limit _ NONE = () | 
| 119 | | set_limit r (SOME n) = r := n; | |
| 9731 | 120 | |
| 121 | fun pr (ms, (lim1, lim2)) = Toplevel.keep (fn state => | |
| 122 | (set_limit goals_limit lim1; set_limit ProofContext.prems_limit lim2; Toplevel.quiet := false; | |
| 8886 | 123 | with_modes ms (fn () => Toplevel.print_state true state))); | 
| 8453 | 124 | |
| 125 | val disable_pr = Toplevel.imperative (fn () => Toplevel.quiet := true); | |
| 126 | val enable_pr = Toplevel.imperative (fn () => Toplevel.quiet := false); | |
| 127 | ||
| 128 | ||
| 6686 | 129 | (* history commands *) | 
| 130 | ||
| 6734 | 131 | fun cannot_undo txt = Toplevel.imperative (fn () => error ("Cannot undo " ^ quote txt));
 | 
| 7729 | 132 | val clear_undos_theory = Toplevel.history o History.clear; | 
| 15237 
250e9be7a09d
Some changes to allow skipping of proof scripts.
 berghofe parents: 
15222diff
changeset | 133 | val redo = Toplevel.history History.redo o Toplevel.proof'' ProofHistory.redo o | 
| 
250e9be7a09d
Some changes to allow skipping of proof scripts.
 berghofe parents: 
15222diff
changeset | 134 | Toplevel.skip_proof History.redo; | 
| 6686 | 135 | |
| 15237 
250e9be7a09d
Some changes to allow skipping of proof scripts.
 berghofe parents: 
15222diff
changeset | 136 | fun undos_proof n = Toplevel.proof'' (fn prf => | 
| 
250e9be7a09d
Some changes to allow skipping of proof scripts.
 berghofe parents: 
15222diff
changeset | 137 | if ProofHistory.is_initial prf then raise Toplevel.UNDEF else funpow n ProofHistory.undo prf) o | 
| 
250e9be7a09d
Some changes to allow skipping of proof scripts.
 berghofe parents: 
15222diff
changeset | 138 | Toplevel.skip_proof (fn h => | 
| 
250e9be7a09d
Some changes to allow skipping of proof scripts.
 berghofe parents: 
15222diff
changeset | 139 | if History.is_initial h then raise Toplevel.UNDEF else funpow n History.undo h); | 
| 6686 | 140 | |
| 7936 | 141 | fun kill_proof_notify (f: unit -> unit) = Toplevel.history (fn hist => | 
| 6742 | 142 | (case History.current hist of | 
| 143 | Toplevel.Theory _ => raise Toplevel.UNDEF | |
| 15237 
250e9be7a09d
Some changes to allow skipping of proof scripts.
 berghofe parents: 
15222diff
changeset | 144 | | _ => (f (); History.undo hist))); | 
| 7936 | 145 | |
| 146 | val kill_proof = kill_proof_notify (K ()); | |
| 6686 | 147 | |
| 6742 | 148 | val undo_theory = Toplevel.history (fn hist => | 
| 149 | if History.is_initial hist then raise Toplevel.UNDEF else History.undo hist); | |
| 6686 | 150 | |
| 7413 | 151 | val undo = Toplevel.kill o undo_theory o undos_proof 1; | 
| 8498 | 152 | val kill = Toplevel.kill o kill_proof; | 
| 12876 
a70df1e5bf10
got rid of explicit marginal comments (now stripped earlier from input);
 wenzelm parents: 
12758diff
changeset | 153 | val back = Toplevel.proof o ProofHistory.back; | 
| 9273 | 154 | |
| 6686 | 155 | |
| 5831 | 156 | (* use ML text *) | 
| 157 | ||
| 15799 
50989ffdcdda
Adapted use command to new behaviour of Toplevel.node_trans
 berghofe parents: 
15711diff
changeset | 158 | fun use path = Toplevel.keep (fn state => ThyInfo.load_file false path) o | 
| 
50989ffdcdda
Adapted use command to new behaviour of Toplevel.node_trans
 berghofe parents: 
15711diff
changeset | 159 | Toplevel.theory (fn thy => (Context.setmp (SOME thy) (ThyInfo.load_file false) path; thy)); | 
| 5831 | 160 | |
| 161 | (*passes changes of theory context*) | |
| 12876 
a70df1e5bf10
got rid of explicit marginal comments (now stripped earlier from input);
 wenzelm parents: 
12758diff
changeset | 162 | val use_mltext_theory = Toplevel.theory' o Context.use_mltext_theory; | 
| 5831 | 163 | |
| 164 | (*ignore result theory context*) | |
| 12876 
a70df1e5bf10
got rid of explicit marginal comments (now stripped earlier from input);
 wenzelm parents: 
12758diff
changeset | 165 | fun use_mltext v txt = Toplevel.keep' (fn verb => fn state => | 
| 8349 
611342539639
moved use_mltext, use_mltext_theory, use_let, use_setup to context.ML;
 wenzelm parents: 
7936diff
changeset | 166 | (Context.use_mltext txt (v andalso verb) (try Toplevel.theory_of state))); | 
| 5831 | 167 | |
| 168 | (*Note: commit is dynamically bound*) | |
| 12876 
a70df1e5bf10
got rid of explicit marginal comments (now stripped earlier from input);
 wenzelm parents: 
12758diff
changeset | 169 | val use_commit = use_mltext false "commit();"; | 
| 5831 | 170 | |
| 171 | ||
| 172 | (* current working directory *) | |
| 173 | ||
| 14950 | 174 | fun cd path = Toplevel.imperative (fn () => (File.cd path)); | 
| 7790 | 175 | val pwd = Toplevel.imperative (fn () => writeln (Path.pack (File.pwd ()))); | 
| 5831 | 176 | |
| 177 | ||
| 178 | (* load theory files *) | |
| 179 | ||
| 6243 | 180 | fun use_thy name = Toplevel.imperative (fn () => Context.save ThyInfo.use_thy name); | 
| 6694 | 181 | fun use_thy_only name = Toplevel.imperative (fn () => Context.save ThyInfo.use_thy_only name); | 
| 6243 | 182 | fun update_thy name = Toplevel.imperative (fn () => Context.save ThyInfo.update_thy name); | 
| 7124 | 183 | fun update_thy_only name = | 
| 184 | Toplevel.imperative (fn () => Context.save ThyInfo.update_thy_only name); | |
| 185 | ||
| 186 | ||
| 14934 | 187 | (* present draft files *) | 
| 188 | ||
| 189 | fun display_drafts files = Toplevel.imperative (fn () => | |
| 15703 | 190 | let val outfile = File.quote_sysify_path (Present.drafts (getenv "ISABELLE_DOC_FORMAT") files) | 
| 14934 | 191 |   in system ("\"$ISATOOL\" display -c " ^ outfile ^ " &"); () end);
 | 
| 192 | ||
| 193 | fun print_drafts files = Toplevel.imperative (fn () => | |
| 14950 | 194 | let val outfile = File.quote_sysify_path (Present.drafts "ps" files) | 
| 14934 | 195 |   in system ("\"$ISATOOL\" print -c " ^ outfile); () end);
 | 
| 196 | ||
| 197 | ||
| 7124 | 198 | (* pretty_setmargin *) | 
| 199 | ||
| 200 | fun pretty_setmargin n = Toplevel.imperative (fn () => Pretty.setmargin n); | |
| 5831 | 201 | |
| 202 | ||
| 9513 | 203 | (* print parts of theory and proof context *) | 
| 5831 | 204 | |
| 7308 | 205 | val print_context = Toplevel.keep Toplevel.print_state_context; | 
| 9513 | 206 | |
| 207 | val print_theory = Toplevel.unknown_theory o | |
| 208 | Toplevel.keep (PureThy.print_theory o Toplevel.theory_of); | |
| 209 | ||
| 210 | val print_syntax = Toplevel.unknown_theory o | |
| 12069 | 211 | Toplevel.keep (Display.print_syntax o Toplevel.theory_of) o | 
| 212 | Toplevel.keep (ProofContext.print_syntax o Proof.context_of o Toplevel.proof_of); | |
| 9513 | 213 | |
| 214 | val print_theorems = Toplevel.unknown_theory o | |
| 215 | Toplevel.keep (PureThy.print_theorems o Toplevel.theory_of); | |
| 216 | ||
| 12060 | 217 | val print_locales = Toplevel.unknown_theory o | 
| 218 | Toplevel.keep (Locale.print_locales o Toplevel.theory_of); | |
| 219 | ||
| 12758 | 220 | fun print_locale (import, body) = Toplevel.unknown_theory o Toplevel.keep (fn state => | 
| 15703 | 221 | Locale.print_locale (Toplevel.theory_of state) import body); | 
| 15596 | 222 | |
| 15624 
484178635bd8
Further work on interpretation commands.  New command `interpret' for
 ballarin parents: 
15596diff
changeset | 223 | fun print_registrations name = Toplevel.unknown_context o | 
| 
484178635bd8
Further work on interpretation commands.  New command `interpret' for
 ballarin parents: 
15596diff
changeset | 224 | Toplevel.keep (Toplevel.node_case (Locale.print_global_registrations name) | 
| 
484178635bd8
Further work on interpretation commands.  New command `interpret' for
 ballarin parents: 
15596diff
changeset | 225 | (Locale.print_local_registrations name o Proof.context_of)); | 
| 12060 | 226 | |
| 9513 | 227 | val print_attributes = Toplevel.unknown_theory o | 
| 228 | Toplevel.keep (Attrib.print_attributes o Toplevel.theory_of); | |
| 229 | ||
| 12382 | 230 | val print_rules = Toplevel.unknown_context o | 
| 231 | Toplevel.keep (Toplevel.node_case ContextRules.print_global_rules | |
| 232 | (ContextRules.print_local_rules o Proof.context_of)); | |
| 233 | ||
| 11666 | 234 | val print_induct_rules = Toplevel.unknown_context o | 
| 235 | Toplevel.keep (Toplevel.node_case InductAttrib.print_global_rules | |
| 236 | (InductAttrib.print_local_rules o Proof.context_of)); | |
| 237 | ||
| 9513 | 238 | val print_trans_rules = Toplevel.unknown_context o | 
| 239 | Toplevel.keep (Toplevel.node_case Calculation.print_global_rules | |
| 240 | (Calculation.print_local_rules o Proof.context_of)); | |
| 241 | ||
| 242 | val print_methods = Toplevel.unknown_theory o | |
| 243 | Toplevel.keep (Method.print_methods o Toplevel.theory_of); | |
| 244 | ||
| 9219 | 245 | val print_antiquotations = Toplevel.imperative IsarOutput.print_antiquotations; | 
| 5831 | 246 | |
| 13284 | 247 | fun print_thms_containing (lim, spec) = Toplevel.unknown_theory o Toplevel.keep (fn state => | 
| 13273 | 248 | ProofContext.print_thms_containing | 
| 13284 | 249 | (Toplevel.node_case ProofContext.init Proof.context_of state) lim spec); | 
| 7615 | 250 | |
| 9513 | 251 | fun thm_deps args = Toplevel.unknown_theory o Toplevel.keep (fn state => | 
| 9454 | 252 | ThmDeps.thm_deps (IsarThy.get_thmss args (Toplevel.enter_forward_proof state))); | 
| 253 | ||
| 5831 | 254 | |
| 255 | (* print proof context contents *) | |
| 256 | ||
| 9513 | 257 | val print_binds = Toplevel.unknown_proof o Toplevel.keep (fn state => | 
| 258 | ProofContext.setmp_verbose | |
| 259 | ProofContext.print_binds (Proof.context_of (Toplevel.proof_of state))); | |
| 260 | ||
| 261 | val print_lthms = Toplevel.unknown_proof o Toplevel.keep (fn state => | |
| 262 | ProofContext.setmp_verbose | |
| 12055 | 263 | ProofContext.print_lthms (Proof.context_of (Toplevel.proof_of state))); | 
| 9513 | 264 | |
| 265 | val print_cases = Toplevel.unknown_proof o Toplevel.keep (fn state => | |
| 266 | ProofContext.setmp_verbose | |
| 267 | ProofContext.print_cases (Proof.context_of (Toplevel.proof_of state))); | |
| 5831 | 268 | |
| 13801 
6c5c5bdfae84
Moved print_intros from proof_general.ML to Isar/isar_cmd.ML
 berghofe parents: 
13284diff
changeset | 269 | val print_intros = Toplevel.unknown_proof o Toplevel.keep (fn state => | 
| 
6c5c5bdfae84
Moved print_intros from proof_general.ML to Isar/isar_cmd.ML
 berghofe parents: 
13284diff
changeset | 270 | let | 
| 
6c5c5bdfae84
Moved print_intros from proof_general.ML to Isar/isar_cmd.ML
 berghofe parents: 
13284diff
changeset | 271 | val (ctxt, (_, st)) = Proof.get_goal (Toplevel.proof_of state) | 
| 
6c5c5bdfae84
Moved print_intros from proof_general.ML to Isar/isar_cmd.ML
 berghofe parents: 
13284diff
changeset | 272 | val prt_fact = ProofContext.pretty_fact ctxt | 
| 
6c5c5bdfae84
Moved print_intros from proof_general.ML to Isar/isar_cmd.ML
 berghofe parents: 
13284diff
changeset | 273 | val thy = ProofContext.theory_of ctxt | 
| 
6c5c5bdfae84
Moved print_intros from proof_general.ML to Isar/isar_cmd.ML
 berghofe parents: 
13284diff
changeset | 274 | val facts = map (apsnd single) (PureThy.find_intros_goal thy st 1) | 
| 
6c5c5bdfae84
Moved print_intros from proof_general.ML to Isar/isar_cmd.ML
 berghofe parents: 
13284diff
changeset | 275 | in map prt_fact (rev facts) |> Pretty.chunks |> Pretty.writeln end); | 
| 
6c5c5bdfae84
Moved print_intros from proof_general.ML to Isar/isar_cmd.ML
 berghofe parents: 
13284diff
changeset | 276 | |
| 5831 | 277 | |
| 7012 | 278 | (* print theorems / types / terms / props *) | 
| 5880 | 279 | |
| 9128 | 280 | fun string_of_thms state ms args = with_modes ms (fn () => | 
| 12055 | 281 | Pretty.string_of (ProofContext.pretty_thms (Proof.context_of state) | 
| 282 | (IsarThy.get_thmss args state))); | |
| 5895 | 283 | |
| 12125 
316d11f760f7
Commands prf and full_prf can now also be used to display proof term
 berghofe parents: 
12069diff
changeset | 284 | fun string_of_prfs full state ms arg = with_modes ms (fn () => | 
| 
316d11f760f7
Commands prf and full_prf can now also be used to display proof term
 berghofe parents: 
12069diff
changeset | 285 | Pretty.string_of (case arg of (* FIXME context syntax!? *) | 
| 15531 | 286 | NONE => | 
| 12125 
316d11f760f7
Commands prf and full_prf can now also be used to display proof term
 berghofe parents: 
12069diff
changeset | 287 | let | 
| 
316d11f760f7
Commands prf and full_prf can now also be used to display proof term
 berghofe parents: 
12069diff
changeset | 288 | val (_, (_, thm)) = Proof.get_goal state; | 
| 
316d11f760f7
Commands prf and full_prf can now also be used to display proof term
 berghofe parents: 
12069diff
changeset | 289 |           val {sign, prop, der = (_, prf), ...} = rep_thm thm;
 | 
| 
316d11f760f7
Commands prf and full_prf can now also be used to display proof term
 berghofe parents: 
12069diff
changeset | 290 | val prf' = Proofterm.rewrite_proof_notypes ([], []) prf | 
| 
316d11f760f7
Commands prf and full_prf can now also be used to display proof term
 berghofe parents: 
12069diff
changeset | 291 | in | 
| 
316d11f760f7
Commands prf and full_prf can now also be used to display proof term
 berghofe parents: 
12069diff
changeset | 292 | ProofSyntax.pretty_proof sign | 
| 
316d11f760f7
Commands prf and full_prf can now also be used to display proof term
 berghofe parents: 
12069diff
changeset | 293 | (if full then Reconstruct.reconstruct_proof sign prop prf' else prf') | 
| 
316d11f760f7
Commands prf and full_prf can now also be used to display proof term
 berghofe parents: 
12069diff
changeset | 294 | end | 
| 15531 | 295 | | SOME args => Pretty.chunks | 
| 12125 
316d11f760f7
Commands prf and full_prf can now also be used to display proof term
 berghofe parents: 
12069diff
changeset | 296 | (map (ProofSyntax.pretty_proof_of full) (IsarThy.get_thmss args state)))); | 
| 11524 
197f2e14a714
Added functions for printing primitive proof terms.
 berghofe parents: 
11017diff
changeset | 297 | |
| 9128 | 298 | fun string_of_prop state ms s = | 
| 5831 | 299 | let | 
| 12055 | 300 | val ctxt = Proof.context_of state; | 
| 301 | val prop = ProofContext.read_prop ctxt s; | |
| 302 | in | |
| 303 | with_modes ms (fn () => Pretty.string_of (Pretty.quote (ProofContext.pretty_term ctxt prop))) | |
| 304 | end; | |
| 5831 | 305 | |
| 9128 | 306 | fun string_of_term state ms s = | 
| 5831 | 307 | let | 
| 12055 | 308 | val ctxt = Proof.context_of state; | 
| 309 | val t = ProofContext.read_term ctxt s; | |
| 5831 | 310 | val T = Term.type_of t; | 
| 311 | in | |
| 9128 | 312 | with_modes ms (fn () => Pretty.string_of | 
| 12055 | 313 | (Pretty.block [Pretty.quote (ProofContext.pretty_term ctxt t), Pretty.fbrk, | 
| 314 | Pretty.str "::", Pretty.brk 1, Pretty.quote (ProofContext.pretty_typ ctxt T)])) | |
| 9128 | 315 | end; | 
| 5831 | 316 | |
| 9128 | 317 | fun string_of_type state ms s = | 
| 5831 | 318 | let | 
| 12055 | 319 | val ctxt = Proof.context_of state; | 
| 320 | val T = ProofContext.read_typ ctxt s; | |
| 321 | in with_modes ms (fn () => Pretty.string_of (Pretty.quote (ProofContext.pretty_typ ctxt T))) end; | |
| 9128 | 322 | |
| 323 | fun print_item string_of (x, y) = Toplevel.keep (fn state => | |
| 9454 | 324 | writeln (string_of (Toplevel.enter_forward_proof state) x y)); | 
| 9128 | 325 | |
| 12876 
a70df1e5bf10
got rid of explicit marginal comments (now stripped earlier from input);
 wenzelm parents: 
12758diff
changeset | 326 | val print_thms = print_item string_of_thms; | 
| 
a70df1e5bf10
got rid of explicit marginal comments (now stripped earlier from input);
 wenzelm parents: 
12758diff
changeset | 327 | fun print_prfs full = print_item (string_of_prfs full); | 
| 
a70df1e5bf10
got rid of explicit marginal comments (now stripped earlier from input);
 wenzelm parents: 
12758diff
changeset | 328 | val print_prop = print_item string_of_prop; | 
| 
a70df1e5bf10
got rid of explicit marginal comments (now stripped earlier from input);
 wenzelm parents: 
12758diff
changeset | 329 | val print_term = print_item string_of_term; | 
| 
a70df1e5bf10
got rid of explicit marginal comments (now stripped earlier from input);
 wenzelm parents: 
12758diff
changeset | 330 | val print_type = print_item string_of_type; | 
| 5831 | 331 | |
| 12938 
a646d0467d81
markup commands (from isar_thy.ML) with proper check of antiquotations;
 wenzelm parents: 
12876diff
changeset | 332 | |
| 
a646d0467d81
markup commands (from isar_thy.ML) with proper check of antiquotations;
 wenzelm parents: 
12876diff
changeset | 333 | (* markup commands *) | 
| 
a646d0467d81
markup commands (from isar_thy.ML) with proper check of antiquotations;
 wenzelm parents: 
12876diff
changeset | 334 | |
| 
a646d0467d81
markup commands (from isar_thy.ML) with proper check of antiquotations;
 wenzelm parents: 
12876diff
changeset | 335 | fun add_header s = Toplevel.keep' (fn int => fn state => | 
| 
a646d0467d81
markup commands (from isar_thy.ML) with proper check of antiquotations;
 wenzelm parents: 
12876diff
changeset | 336 | (if Toplevel.is_toplevel state then () else raise Toplevel.UNDEF; | 
| 
a646d0467d81
markup commands (from isar_thy.ML) with proper check of antiquotations;
 wenzelm parents: 
12876diff
changeset | 337 | OuterSyntax.check_text s int state)); | 
| 
a646d0467d81
markup commands (from isar_thy.ML) with proper check of antiquotations;
 wenzelm parents: 
12876diff
changeset | 338 | |
| 12953 
7d5bd53555d8
markup commands: proper theory/proof transactions!
 wenzelm parents: 
12938diff
changeset | 339 | local | 
| 
7d5bd53555d8
markup commands: proper theory/proof transactions!
 wenzelm parents: 
12938diff
changeset | 340 | |
| 12938 
a646d0467d81
markup commands (from isar_thy.ML) with proper check of antiquotations;
 wenzelm parents: 
12876diff
changeset | 341 | fun present_text assert_proof present (s, pos) = Toplevel.keep' (fn int => fn state => | 
| 
a646d0467d81
markup commands (from isar_thy.ML) with proper check of antiquotations;
 wenzelm parents: 
12876diff
changeset | 342 | (if can Toplevel.proof_of state = assert_proof then () else raise Toplevel.UNDEF; | 
| 15531 | 343 | Context.setmp (SOME (Toplevel.theory_of state)) present s; | 
| 12938 
a646d0467d81
markup commands (from isar_thy.ML) with proper check of antiquotations;
 wenzelm parents: 
12876diff
changeset | 344 | OuterSyntax.check_text (s, pos) int state; | 
| 12953 
7d5bd53555d8
markup commands: proper theory/proof transactions!
 wenzelm parents: 
12938diff
changeset | 345 | raise Toplevel.UNDEF)); | 
| 
7d5bd53555d8
markup commands: proper theory/proof transactions!
 wenzelm parents: 
12938diff
changeset | 346 | |
| 
7d5bd53555d8
markup commands: proper theory/proof transactions!
 wenzelm parents: 
12938diff
changeset | 347 | fun theory f x = Toplevel.theory I o present_text false f x; | 
| 
7d5bd53555d8
markup commands: proper theory/proof transactions!
 wenzelm parents: 
12938diff
changeset | 348 | fun proof f x = Toplevel.print o Toplevel.proof (ProofHistory.apply I) o present_text true f x; | 
| 12938 
a646d0467d81
markup commands (from isar_thy.ML) with proper check of antiquotations;
 wenzelm parents: 
12876diff
changeset | 349 | |
| 12953 
7d5bd53555d8
markup commands: proper theory/proof transactions!
 wenzelm parents: 
12938diff
changeset | 350 | in | 
| 
7d5bd53555d8
markup commands: proper theory/proof transactions!
 wenzelm parents: 
12938diff
changeset | 351 | |
| 
7d5bd53555d8
markup commands: proper theory/proof transactions!
 wenzelm parents: 
12938diff
changeset | 352 | val add_chapter = theory Present.section; | 
| 
7d5bd53555d8
markup commands: proper theory/proof transactions!
 wenzelm parents: 
12938diff
changeset | 353 | val add_section = theory Present.section; | 
| 
7d5bd53555d8
markup commands: proper theory/proof transactions!
 wenzelm parents: 
12938diff
changeset | 354 | val add_subsection = theory Present.subsection; | 
| 
7d5bd53555d8
markup commands: proper theory/proof transactions!
 wenzelm parents: 
12938diff
changeset | 355 | val add_subsubsection = theory Present.subsubsection; | 
| 
7d5bd53555d8
markup commands: proper theory/proof transactions!
 wenzelm parents: 
12938diff
changeset | 356 | val add_text = theory (K ()); | 
| 12938 
a646d0467d81
markup commands (from isar_thy.ML) with proper check of antiquotations;
 wenzelm parents: 
12876diff
changeset | 357 | val add_text_raw = add_text; | 
| 12953 
7d5bd53555d8
markup commands: proper theory/proof transactions!
 wenzelm parents: 
12938diff
changeset | 358 | val add_txt = proof (K ()); | 
| 12938 
a646d0467d81
markup commands (from isar_thy.ML) with proper check of antiquotations;
 wenzelm parents: 
12876diff
changeset | 359 | val add_txt_raw = add_txt; | 
| 
a646d0467d81
markup commands (from isar_thy.ML) with proper check of antiquotations;
 wenzelm parents: 
12876diff
changeset | 360 | val add_sect = add_txt; | 
| 
a646d0467d81
markup commands (from isar_thy.ML) with proper check of antiquotations;
 wenzelm parents: 
12876diff
changeset | 361 | val add_subsect = add_txt; | 
| 
a646d0467d81
markup commands (from isar_thy.ML) with proper check of antiquotations;
 wenzelm parents: 
12876diff
changeset | 362 | val add_subsubsect = add_txt; | 
| 
a646d0467d81
markup commands (from isar_thy.ML) with proper check of antiquotations;
 wenzelm parents: 
12876diff
changeset | 363 | |
| 5831 | 364 | end; | 
| 12953 
7d5bd53555d8
markup commands: proper theory/proof transactions!
 wenzelm parents: 
12938diff
changeset | 365 | |
| 
7d5bd53555d8
markup commands: proper theory/proof transactions!
 wenzelm parents: 
12938diff
changeset | 366 | end; | 
| 15711 | 367 |