| author | wenzelm | 
| Fri, 27 Jul 2012 14:15:04 +0200 | |
| changeset 48549 | cc7990d6eb38 | 
| parent 46728 | 85f8e3932712 | 
| child 49860 | 9a0fe50e4534 | 
| permissions | -rw-r--r-- | 
| 17369 | 1 | (* Title: Pure/Isar/proof_display.ML | 
| 2 | Author: Makarius | |
| 3 | ||
| 19432 
cae7cc072994
added print_theorems/theory, print_theorems_diff (from pure_thy.ML);
 wenzelm parents: 
18799diff
changeset | 4 | Printing of theorems, goals, results etc. | 
| 17369 | 5 | *) | 
| 6 | ||
| 7 | signature PROOF_DISPLAY = | |
| 8 | sig | |
| 30628 | 9 | val pp_context: Proof.context -> Pretty.T | 
| 10 | val pp_thm: thm -> Pretty.T | |
| 11 | val pp_typ: theory -> typ -> Pretty.T | |
| 12 | val pp_term: theory -> term -> Pretty.T | |
| 13 | val pp_ctyp: ctyp -> Pretty.T | |
| 14 | val pp_cterm: cterm -> Pretty.T | |
| 33515 
d066e8369a33
print_theorems: suppress concealed (global) facts, unless "!" option is given;
 wenzelm parents: 
33389diff
changeset | 15 | val print_theorems_diff: bool -> theory -> theory -> unit | 
| 
d066e8369a33
print_theorems: suppress concealed (global) facts, unless "!" option is given;
 wenzelm parents: 
33389diff
changeset | 16 | val print_theorems: bool -> theory -> unit | 
| 22335 | 17 | val pretty_full_theory: bool -> theory -> Pretty.T | 
| 28092 | 18 | val print_theory: theory -> unit | 
| 20311 | 19 | val string_of_rule: Proof.context -> string -> thm -> string | 
| 46728 
85f8e3932712
display proof results as "state", to suppress odd squiggles in the Prover IDE (see also 9240be8c8c69);
 wenzelm parents: 
45269diff
changeset | 20 | val print_results: Markup.T -> bool -> Proof.context -> | 
| 
85f8e3932712
display proof results as "state", to suppress odd squiggles in the Prover IDE (see also 9240be8c8c69);
 wenzelm parents: 
45269diff
changeset | 21 | ((string * string) * (string * thm list) list) -> unit | 
| 44192 
a32ca9165928
less verbosity in batch mode -- spam reduction and notable performance improvement;
 wenzelm parents: 
42717diff
changeset | 22 | val print_consts: bool -> Proof.context -> (string * typ -> bool) -> (string * typ) list -> unit | 
| 17369 | 23 | end | 
| 24 | ||
| 33389 | 25 | structure Proof_Display: PROOF_DISPLAY = | 
| 17369 | 26 | struct | 
| 27 | ||
| 20235 | 28 | (* toplevel pretty printing *) | 
| 20211 | 29 | |
| 30628 | 30 | fun pp_context ctxt = | 
| 42717 
0bbb56867091
proper configuration options Proof_Context.debug and Proof_Context.verbose;
 wenzelm parents: 
42360diff
changeset | 31 | (if Config.get ctxt Proof_Context.debug then | 
| 42360 | 32 | Pretty.quote (Pretty.big_list "proof context:" (Proof_Context.pretty_context ctxt)) | 
| 20211 | 33 | else Pretty.str "<context>"); | 
| 34 | ||
| 45269 
6f8949e6c71a
more robust ML pretty printing (cf. b6c527c64789);
 wenzelm parents: 
44240diff
changeset | 35 | fun default_context thy0 = | 
| 
6f8949e6c71a
more robust ML pretty printing (cf. b6c527c64789);
 wenzelm parents: 
44240diff
changeset | 36 | (case Context.thread_data () of | 
| 
6f8949e6c71a
more robust ML pretty printing (cf. b6c527c64789);
 wenzelm parents: 
44240diff
changeset | 37 | SOME (Context.Proof ctxt) => ctxt | 
| 
6f8949e6c71a
more robust ML pretty printing (cf. b6c527c64789);
 wenzelm parents: 
44240diff
changeset | 38 | | SOME (Context.Theory thy) => | 
| 
6f8949e6c71a
more robust ML pretty printing (cf. b6c527c64789);
 wenzelm parents: 
44240diff
changeset | 39 | (case try Syntax.init_pretty_global thy of | 
| 
6f8949e6c71a
more robust ML pretty printing (cf. b6c527c64789);
 wenzelm parents: 
44240diff
changeset | 40 | SOME ctxt => ctxt | 
| 
6f8949e6c71a
more robust ML pretty printing (cf. b6c527c64789);
 wenzelm parents: 
44240diff
changeset | 41 | | NONE => Syntax.init_pretty_global thy0) | 
| 
6f8949e6c71a
more robust ML pretty printing (cf. b6c527c64789);
 wenzelm parents: 
44240diff
changeset | 42 | | NONE => Syntax.init_pretty_global thy0); | 
| 44240 
4b1a63678839
improved default context for ML toplevel pretty-printing;
 wenzelm parents: 
44192diff
changeset | 43 | |
| 30628 | 44 | fun pp_thm th = | 
| 30724 
2e54e89bcce7
pretty_rule/print_results: no thm status here -- it is potentially slow and mostly uninformative/confusing as long as proofs are still unfinished;
 wenzelm parents: 
30628diff
changeset | 45 | let | 
| 44240 
4b1a63678839
improved default context for ML toplevel pretty-printing;
 wenzelm parents: 
44192diff
changeset | 46 | val ctxt = default_context (Thm.theory_of_thm th); | 
| 30724 
2e54e89bcce7
pretty_rule/print_results: no thm status here -- it is potentially slow and mostly uninformative/confusing as long as proofs are still unfinished;
 wenzelm parents: 
30628diff
changeset | 47 |     val flags = {quote = true, show_hyps = false, show_status = true};
 | 
| 44240 
4b1a63678839
improved default context for ML toplevel pretty-printing;
 wenzelm parents: 
44192diff
changeset | 48 | in Display.pretty_thm_raw ctxt flags th end; | 
| 20211 | 49 | |
| 44240 
4b1a63678839
improved default context for ML toplevel pretty-printing;
 wenzelm parents: 
44192diff
changeset | 50 | fun pp_typ thy T = Pretty.quote (Syntax.pretty_typ (default_context thy) T); | 
| 
4b1a63678839
improved default context for ML toplevel pretty-printing;
 wenzelm parents: 
44192diff
changeset | 51 | fun pp_term thy t = Pretty.quote (Syntax.pretty_term (default_context thy) t); | 
| 30628 | 52 | |
| 53 | fun pp_ctyp cT = pp_typ (Thm.theory_of_ctyp cT) (Thm.typ_of cT); | |
| 54 | fun pp_cterm ct = pp_term (Thm.theory_of_cterm ct) (Thm.term_of ct); | |
| 20211 | 55 | |
| 19432 
cae7cc072994
added print_theorems/theory, print_theorems_diff (from pure_thy.ML);
 wenzelm parents: 
18799diff
changeset | 56 | |
| 
cae7cc072994
added print_theorems/theory, print_theorems_diff (from pure_thy.ML);
 wenzelm parents: 
18799diff
changeset | 57 | (* theorems and theory *) | 
| 
cae7cc072994
added print_theorems/theory, print_theorems_diff (from pure_thy.ML);
 wenzelm parents: 
18799diff
changeset | 58 | |
| 33515 
d066e8369a33
print_theorems: suppress concealed (global) facts, unless "!" option is given;
 wenzelm parents: 
33389diff
changeset | 59 | fun pretty_theorems_diff verbose prev_thys thy = | 
| 19432 
cae7cc072994
added print_theorems/theory, print_theorems_diff (from pure_thy.ML);
 wenzelm parents: 
18799diff
changeset | 60 | let | 
| 42360 | 61 | val pretty_fact = Proof_Context.pretty_fact (Proof_Context.init_global thy); | 
| 39557 
fe5722fce758
renamed structure PureThy to Pure_Thy and moved most content to Global_Theory, to emphasize that this is global-only;
 wenzelm parents: 
39284diff
changeset | 62 | val facts = Global_Theory.facts_of thy; | 
| 33515 
d066e8369a33
print_theorems: suppress concealed (global) facts, unless "!" option is given;
 wenzelm parents: 
33389diff
changeset | 63 | val thmss = | 
| 39557 
fe5722fce758
renamed structure PureThy to Pure_Thy and moved most content to Global_Theory, to emphasize that this is global-only;
 wenzelm parents: 
39284diff
changeset | 64 | Facts.dest_static (map Global_Theory.facts_of prev_thys) facts | 
| 33515 
d066e8369a33
print_theorems: suppress concealed (global) facts, unless "!" option is given;
 wenzelm parents: 
33389diff
changeset | 65 | |> not verbose ? filter_out (Facts.is_concealed facts o #1); | 
| 28210 | 66 | in Pretty.big_list "theorems:" (map #1 (sort_wrt (#1 o #2) (map (`pretty_fact) thmss))) end; | 
| 19432 
cae7cc072994
added print_theorems/theory, print_theorems_diff (from pure_thy.ML);
 wenzelm parents: 
18799diff
changeset | 67 | |
| 33515 
d066e8369a33
print_theorems: suppress concealed (global) facts, unless "!" option is given;
 wenzelm parents: 
33389diff
changeset | 68 | fun print_theorems_diff verbose prev_thy thy = | 
| 
d066e8369a33
print_theorems: suppress concealed (global) facts, unless "!" option is given;
 wenzelm parents: 
33389diff
changeset | 69 | Pretty.writeln (pretty_theorems_diff verbose [prev_thy] thy); | 
| 19432 
cae7cc072994
added print_theorems/theory, print_theorems_diff (from pure_thy.ML);
 wenzelm parents: 
18799diff
changeset | 70 | |
| 33515 
d066e8369a33
print_theorems: suppress concealed (global) facts, unless "!" option is given;
 wenzelm parents: 
33389diff
changeset | 71 | fun pretty_theorems verbose thy = pretty_theorems_diff verbose (Theory.parents_of thy) thy; | 
| 
d066e8369a33
print_theorems: suppress concealed (global) facts, unless "!" option is given;
 wenzelm parents: 
33389diff
changeset | 72 | val print_theorems = Pretty.writeln oo pretty_theorems; | 
| 19432 
cae7cc072994
added print_theorems/theory, print_theorems_diff (from pure_thy.ML);
 wenzelm parents: 
18799diff
changeset | 73 | |
| 22872 | 74 | fun pretty_full_theory verbose thy = | 
| 33515 
d066e8369a33
print_theorems: suppress concealed (global) facts, unless "!" option is given;
 wenzelm parents: 
33389diff
changeset | 75 | Pretty.chunks (Display.pretty_full_theory verbose thy @ [pretty_theorems verbose thy]); | 
| 20621 | 76 | |
| 22872 | 77 | val print_theory = Pretty.writeln o pretty_full_theory false; | 
| 22335 | 78 | |
| 19432 
cae7cc072994
added print_theorems/theory, print_theorems_diff (from pure_thy.ML);
 wenzelm parents: 
18799diff
changeset | 79 | |
| 17369 | 80 | (* refinement rule *) | 
| 81 | ||
| 82 | fun pretty_rule ctxt s thm = | |
| 83 | Pretty.block [Pretty.str (s ^ " attempt to solve goal by exported rule:"), | |
| 32091 
30e2ffbba718
proper context for Display.pretty_thm etc. or old-style versions Display.pretty_thm_global, Display.pretty_thm_without_context etc.;
 wenzelm parents: 
30724diff
changeset | 84 | Pretty.fbrk, Display.pretty_thm_aux ctxt false thm]; | 
| 17369 | 85 | |
| 86 | val string_of_rule = Pretty.string_of ooo pretty_rule; | |
| 87 | ||
| 88 | ||
| 89 | (* results *) | |
| 90 | ||
| 28092 | 91 | local | 
| 92 | ||
| 41551 | 93 | fun pretty_fact_name (kind, "") = Pretty.command kind | 
| 94 | | pretty_fact_name (kind, name) = | |
| 95 | Pretty.block [Pretty.command kind, Pretty.brk 1, | |
| 96 | Pretty.str (Long_Name.base_name name), Pretty.str ":"]; | |
| 28087 
a9cccdd9d521
pretty_fact/results: display base only, since results now come with full names (note that Facts.extern is not really well-defined unless we present the real target context);
 wenzelm parents: 
27857diff
changeset | 97 | |
| 17369 | 98 | fun pretty_facts ctxt = | 
| 41551 | 99 | flat o (separate [Pretty.fbrk, Pretty.keyword "and", Pretty.str " "]) o | 
| 42360 | 100 | map (single o Proof_Context.pretty_fact_aux ctxt false); | 
| 17369 | 101 | |
| 27857 | 102 | in | 
| 103 | ||
| 46728 
85f8e3932712
display proof results as "state", to suppress odd squiggles in the Prover IDE (see also 9240be8c8c69);
 wenzelm parents: 
45269diff
changeset | 104 | fun print_results markup do_print ctxt ((kind, name), facts) = | 
| 33643 
b275f26a638b
eliminated obsolete "internal" kind -- collapsed to unspecific "";
 wenzelm parents: 
33515diff
changeset | 105 | if not do_print orelse kind = "" then () | 
| 28092 | 106 | else if name = "" then | 
| 46728 
85f8e3932712
display proof results as "state", to suppress odd squiggles in the Prover IDE (see also 9240be8c8c69);
 wenzelm parents: 
45269diff
changeset | 107 | (Pretty.writeln o Pretty.mark markup) | 
| 
85f8e3932712
display proof results as "state", to suppress odd squiggles in the Prover IDE (see also 9240be8c8c69);
 wenzelm parents: 
45269diff
changeset | 108 | (Pretty.block (Pretty.command kind :: Pretty.brk 1 :: pretty_facts ctxt facts)) | 
| 
85f8e3932712
display proof results as "state", to suppress odd squiggles in the Prover IDE (see also 9240be8c8c69);
 wenzelm parents: 
45269diff
changeset | 109 | else | 
| 
85f8e3932712
display proof results as "state", to suppress odd squiggles in the Prover IDE (see also 9240be8c8c69);
 wenzelm parents: 
45269diff
changeset | 110 | (Pretty.writeln o Pretty.mark markup) | 
| 
85f8e3932712
display proof results as "state", to suppress odd squiggles in the Prover IDE (see also 9240be8c8c69);
 wenzelm parents: 
45269diff
changeset | 111 | (case facts of | 
| 
85f8e3932712
display proof results as "state", to suppress odd squiggles in the Prover IDE (see also 9240be8c8c69);
 wenzelm parents: 
45269diff
changeset | 112 | [fact] => Pretty.blk (1, [pretty_fact_name (kind, name), Pretty.fbrk, | 
| 
85f8e3932712
display proof results as "state", to suppress odd squiggles in the Prover IDE (see also 9240be8c8c69);
 wenzelm parents: 
45269diff
changeset | 113 | Proof_Context.pretty_fact_aux ctxt false fact]) | 
| 
85f8e3932712
display proof results as "state", to suppress odd squiggles in the Prover IDE (see also 9240be8c8c69);
 wenzelm parents: 
45269diff
changeset | 114 | | _ => Pretty.blk (1, [pretty_fact_name (kind, name), Pretty.fbrk, | 
| 
85f8e3932712
display proof results as "state", to suppress odd squiggles in the Prover IDE (see also 9240be8c8c69);
 wenzelm parents: 
45269diff
changeset | 115 |           Pretty.blk (1, Pretty.str "(" :: pretty_facts ctxt facts @ [Pretty.str ")"])]));
 | 
| 17369 | 116 | |
| 117 | end; | |
| 118 | ||
| 20889 | 119 | |
| 120 | (* consts *) | |
| 121 | ||
| 122 | local | |
| 123 | ||
| 124 | fun pretty_var ctxt (x, T) = | |
| 125 | Pretty.block [Pretty.str x, Pretty.str " ::", Pretty.brk 1, | |
| 24920 | 126 | Pretty.quote (Syntax.pretty_typ ctxt T)]; | 
| 20889 | 127 | |
| 128 | fun pretty_vars ctxt kind vs = Pretty.big_list kind (map (pretty_var ctxt) vs); | |
| 129 | ||
| 130 | fun pretty_consts ctxt pred cs = | |
| 42360 | 131 | (case filter pred (#1 (Proof_Context.inferred_fixes ctxt)) of | 
| 20889 | 132 | [] => pretty_vars ctxt "constants" cs | 
| 133 | | ps => Pretty.chunks [pretty_vars ctxt "parameters" ps, pretty_vars ctxt "constants" cs]); | |
| 134 | ||
| 44192 
a32ca9165928
less verbosity in batch mode -- spam reduction and notable performance improvement;
 wenzelm parents: 
42717diff
changeset | 135 | in | 
| 
a32ca9165928
less verbosity in batch mode -- spam reduction and notable performance improvement;
 wenzelm parents: 
42717diff
changeset | 136 | |
| 
a32ca9165928
less verbosity in batch mode -- spam reduction and notable performance improvement;
 wenzelm parents: 
42717diff
changeset | 137 | fun print_consts do_print ctxt pred cs = | 
| 
a32ca9165928
less verbosity in batch mode -- spam reduction and notable performance improvement;
 wenzelm parents: 
42717diff
changeset | 138 | if not do_print orelse null cs then () | 
| 
a32ca9165928
less verbosity in batch mode -- spam reduction and notable performance improvement;
 wenzelm parents: 
42717diff
changeset | 139 | else Pretty.writeln (pretty_consts ctxt pred cs); | 
| 
a32ca9165928
less verbosity in batch mode -- spam reduction and notable performance improvement;
 wenzelm parents: 
42717diff
changeset | 140 | |
| 20889 | 141 | end; | 
| 142 | ||
| 17369 | 143 | end; |