| author | kuncar | 
| Wed, 02 May 2012 18:26:10 +0200 | |
| changeset 47852 | 0c3b8d036a5c | 
| parent 47005 | 421760a1efe7 | 
| child 49560 | 11430dd89e35 | 
| permissions | -rw-r--r-- | 
| 1591 
7fa0265dcd13
New module for display/printing operations, taken from drule.ML
 paulson parents: diff
changeset | 1 | (* Title: Pure/display.ML | 
| 
7fa0265dcd13
New module for display/printing operations, taken from drule.ML
 paulson parents: diff
changeset | 2 | Author: Lawrence C Paulson, Cambridge University Computer Laboratory | 
| 32089 
568a23753e3a
moved pretty_goals etc. to Display_Goal (required by tracing tacticals);
 wenzelm parents: 
30723diff
changeset | 3 | Author: Makarius | 
| 1591 
7fa0265dcd13
New module for display/printing operations, taken from drule.ML
 paulson parents: diff
changeset | 4 | |
| 32089 
568a23753e3a
moved pretty_goals etc. to Display_Goal (required by tracing tacticals);
 wenzelm parents: 
30723diff
changeset | 5 | Printing of theorems, results etc. | 
| 1591 
7fa0265dcd13
New module for display/printing operations, taken from drule.ML
 paulson parents: diff
changeset | 6 | *) | 
| 
7fa0265dcd13
New module for display/printing operations, taken from drule.ML
 paulson parents: diff
changeset | 7 | |
| 11883 | 8 | signature BASIC_DISPLAY = | 
| 9 | sig | |
| 39050 
600de0485859
turned show_consts into proper configuration option;
 wenzelm parents: 
37248diff
changeset | 10 | val show_consts_default: bool Unsynchronized.ref | 
| 
600de0485859
turned show_consts into proper configuration option;
 wenzelm parents: 
37248diff
changeset | 11 | val show_consts: bool Config.T | 
| 39166 
19efc2af3e6c
turned show_hyps and show_tags into proper configuration option;
 wenzelm parents: 
39125diff
changeset | 12 | val show_hyps_raw: Config.raw | 
| 
19efc2af3e6c
turned show_hyps and show_tags into proper configuration option;
 wenzelm parents: 
39125diff
changeset | 13 | val show_hyps: bool Config.T | 
| 
19efc2af3e6c
turned show_hyps and show_tags into proper configuration option;
 wenzelm parents: 
39125diff
changeset | 14 | val show_tags_raw: Config.raw | 
| 
19efc2af3e6c
turned show_hyps and show_tags into proper configuration option;
 wenzelm parents: 
39125diff
changeset | 15 | val show_tags: bool Config.T | 
| 11883 | 16 | end; | 
| 17 | ||
| 1591 
7fa0265dcd13
New module for display/printing operations, taken from drule.ML
 paulson parents: diff
changeset | 18 | signature DISPLAY = | 
| 4950 | 19 | sig | 
| 11883 | 20 | include BASIC_DISPLAY | 
| 32145 
220c9e439d39
clarified pretty_goals, pretty_thm_aux: plain context;
 wenzelm parents: 
32090diff
changeset | 21 |   val pretty_thm_raw: Proof.context -> {quote: bool, show_hyps: bool, show_status: bool} ->
 | 
| 
220c9e439d39
clarified pretty_goals, pretty_thm_aux: plain context;
 wenzelm parents: 
32090diff
changeset | 22 | thm -> Pretty.T | 
| 32090 
39acf19e9f3a
moved ProofContext.pretty_thm to Display.pretty_thm etc.;
 wenzelm parents: 
32089diff
changeset | 23 | val pretty_thm_aux: Proof.context -> bool -> thm -> Pretty.T | 
| 
39acf19e9f3a
moved ProofContext.pretty_thm to Display.pretty_thm etc.;
 wenzelm parents: 
32089diff
changeset | 24 | val pretty_thm: Proof.context -> thm -> Pretty.T | 
| 
39acf19e9f3a
moved ProofContext.pretty_thm to Display.pretty_thm etc.;
 wenzelm parents: 
32089diff
changeset | 25 | val pretty_thm_global: theory -> thm -> Pretty.T | 
| 
39acf19e9f3a
moved ProofContext.pretty_thm to Display.pretty_thm etc.;
 wenzelm parents: 
32089diff
changeset | 26 | val pretty_thm_without_context: thm -> Pretty.T | 
| 
39acf19e9f3a
moved ProofContext.pretty_thm to Display.pretty_thm etc.;
 wenzelm parents: 
32089diff
changeset | 27 | val string_of_thm: Proof.context -> thm -> string | 
| 
39acf19e9f3a
moved ProofContext.pretty_thm to Display.pretty_thm etc.;
 wenzelm parents: 
32089diff
changeset | 28 | val string_of_thm_global: theory -> thm -> string | 
| 
39acf19e9f3a
moved ProofContext.pretty_thm to Display.pretty_thm etc.;
 wenzelm parents: 
32089diff
changeset | 29 | val string_of_thm_without_context: thm -> string | 
| 
39acf19e9f3a
moved ProofContext.pretty_thm to Display.pretty_thm etc.;
 wenzelm parents: 
32089diff
changeset | 30 | val pretty_thms_aux: Proof.context -> bool -> thm list -> Pretty.T | 
| 
39acf19e9f3a
moved ProofContext.pretty_thm to Display.pretty_thm etc.;
 wenzelm parents: 
32089diff
changeset | 31 | val pretty_thms: Proof.context -> thm list -> Pretty.T | 
| 26928 | 32 | val print_syntax: theory -> unit | 
| 20629 
8f6cc81ba4a3
pretty_full_theory: suppress internal entities by default;
 wenzelm parents: 
20226diff
changeset | 33 | val pretty_full_theory: bool -> theory -> Pretty.T list | 
| 4950 | 34 | end; | 
| 1591 
7fa0265dcd13
New module for display/printing operations, taken from drule.ML
 paulson parents: diff
changeset | 35 | |
| 4950 | 36 | structure Display: DISPLAY = | 
| 1591 
7fa0265dcd13
New module for display/printing operations, taken from drule.ML
 paulson parents: diff
changeset | 37 | struct | 
| 
7fa0265dcd13
New module for display/printing operations, taken from drule.ML
 paulson parents: diff
changeset | 38 | |
| 32089 
568a23753e3a
moved pretty_goals etc. to Display_Goal (required by tracing tacticals);
 wenzelm parents: 
30723diff
changeset | 39 | (** options **) | 
| 
568a23753e3a
moved pretty_goals etc. to Display_Goal (required by tracing tacticals);
 wenzelm parents: 
30723diff
changeset | 40 | |
| 39050 
600de0485859
turned show_consts into proper configuration option;
 wenzelm parents: 
37248diff
changeset | 41 | val show_consts_default = Goal_Display.show_consts_default; | 
| 32187 | 42 | val show_consts = Goal_Display.show_consts; | 
| 32089 
568a23753e3a
moved pretty_goals etc. to Display_Goal (required by tracing tacticals);
 wenzelm parents: 
30723diff
changeset | 43 | |
| 39166 
19efc2af3e6c
turned show_hyps and show_tags into proper configuration option;
 wenzelm parents: 
39125diff
changeset | 44 | val show_hyps_raw = Config.declare "show_hyps" (fn _ => Config.Bool false); | 
| 
19efc2af3e6c
turned show_hyps and show_tags into proper configuration option;
 wenzelm parents: 
39125diff
changeset | 45 | val show_hyps = Config.bool show_hyps_raw; | 
| 
19efc2af3e6c
turned show_hyps and show_tags into proper configuration option;
 wenzelm parents: 
39125diff
changeset | 46 | |
| 
19efc2af3e6c
turned show_hyps and show_tags into proper configuration option;
 wenzelm parents: 
39125diff
changeset | 47 | val show_tags_raw = Config.declare "show_tags" (fn _ => Config.Bool false); | 
| 
19efc2af3e6c
turned show_hyps and show_tags into proper configuration option;
 wenzelm parents: 
39125diff
changeset | 48 | val show_tags = Config.bool show_tags_raw; | 
| 32089 
568a23753e3a
moved pretty_goals etc. to Display_Goal (required by tracing tacticals);
 wenzelm parents: 
30723diff
changeset | 49 | |
| 
568a23753e3a
moved pretty_goals etc. to Display_Goal (required by tracing tacticals);
 wenzelm parents: 
30723diff
changeset | 50 | |
| 11883 | 51 | |
| 6087 | 52 | (** print thm **) | 
| 53 | ||
| 28840 | 54 | fun pretty_tag (name, arg) = Pretty.strs [name, quote arg]; | 
| 6087 | 55 | val pretty_tags = Pretty.list "[" "]" o map pretty_tag; | 
| 1591 
7fa0265dcd13
New module for display/printing operations, taken from drule.ML
 paulson parents: diff
changeset | 56 | |
| 39166 
19efc2af3e6c
turned show_hyps and show_tags into proper configuration option;
 wenzelm parents: 
39125diff
changeset | 57 | fun display_status _ false _ = "" | 
| 
19efc2af3e6c
turned show_hyps and show_tags into proper configuration option;
 wenzelm parents: 
39125diff
changeset | 58 | | display_status show_hyps true th = | 
| 30723 | 59 | let | 
| 60 |         val {oracle = oracle0, unfinished, failed} = Thm.status_of th;
 | |
| 39166 
19efc2af3e6c
turned show_hyps and show_tags into proper configuration option;
 wenzelm parents: 
39125diff
changeset | 61 | val oracle = oracle0 andalso (not (! quick_and_dirty) orelse show_hyps); | 
| 30723 | 62 | in | 
| 63 | if failed then "!!" | |
| 64 | else if oracle andalso unfinished then "!?" | |
| 65 | else if oracle then "!" | |
| 66 | else if unfinished then "?" | |
| 67 | else "" | |
| 68 | end; | |
| 30711 | 69 | |
| 32145 
220c9e439d39
clarified pretty_goals, pretty_thm_aux: plain context;
 wenzelm parents: 
32090diff
changeset | 70 | fun pretty_thm_raw ctxt {quote, show_hyps = show_hyps', show_status} raw_th =
 | 
| 1591 
7fa0265dcd13
New module for display/printing operations, taken from drule.ML
 paulson parents: diff
changeset | 71 | let | 
| 39166 
19efc2af3e6c
turned show_hyps and show_tags into proper configuration option;
 wenzelm parents: 
39125diff
changeset | 72 | val show_tags = Config.get ctxt show_tags; | 
| 
19efc2af3e6c
turned show_hyps and show_tags into proper configuration option;
 wenzelm parents: 
39125diff
changeset | 73 | val show_hyps = Config.get ctxt show_hyps; | 
| 
19efc2af3e6c
turned show_hyps and show_tags into proper configuration option;
 wenzelm parents: 
39125diff
changeset | 74 | |
| 17447 | 75 | val th = Thm.strip_shyps raw_th; | 
| 28316 
b17d863a050f
type thm: fully internal derivation, no longer exported;
 wenzelm parents: 
28290diff
changeset | 76 |     val {hyps, tpairs, prop, ...} = Thm.rep_thm th;
 | 
| 6087 | 77 | val xshyps = Thm.extra_shyps th; | 
| 21646 
c07b5b0e8492
thm/prf: separate official name vs. additional tags;
 wenzelm parents: 
20629diff
changeset | 78 | val tags = Thm.get_tags th; | 
| 6087 | 79 | |
| 13658 
c9ad3e64ddcf
Changed handling of flex-flex constraints: now stored in separate
 berghofe parents: 
12831diff
changeset | 80 | val q = if quote then Pretty.quote else I; | 
| 32145 
220c9e439d39
clarified pretty_goals, pretty_thm_aux: plain context;
 wenzelm parents: 
32090diff
changeset | 81 | val prt_term = q o Syntax.pretty_term ctxt; | 
| 6279 | 82 | |
| 32145 
220c9e439d39
clarified pretty_goals, pretty_thm_aux: plain context;
 wenzelm parents: 
32090diff
changeset | 83 | val asms = map Thm.term_of (Assumption.all_assms_of ctxt); | 
| 39166 
19efc2af3e6c
turned show_hyps and show_tags into proper configuration option;
 wenzelm parents: 
39125diff
changeset | 84 | val hyps' = if show_hyps then hyps else subtract (op aconv) asms hyps; | 
| 
19efc2af3e6c
turned show_hyps and show_tags into proper configuration option;
 wenzelm parents: 
39125diff
changeset | 85 | val status = display_status show_hyps show_status th; | 
| 28802 
9ba30eeec7ce
pretty_thm: oracle flag is always false for now (would require detailed check wrt. promises);
 wenzelm parents: 
28316diff
changeset | 86 | |
| 17447 | 87 | val hlen = length xshyps + length hyps' + length tpairs; | 
| 1591 
7fa0265dcd13
New module for display/printing operations, taken from drule.ML
 paulson parents: diff
changeset | 88 | val hsymbs = | 
| 30711 | 89 | if hlen = 0 andalso status = "" then [] | 
| 39166 
19efc2af3e6c
turned show_hyps and show_tags into proper configuration option;
 wenzelm parents: 
39125diff
changeset | 90 | else if show_hyps orelse show_hyps' then | 
| 1591 
7fa0265dcd13
New module for display/printing operations, taken from drule.ML
 paulson parents: diff
changeset | 91 | [Pretty.brk 2, Pretty.list "[" "]" | 
| 32187 | 92 | (map (q o Goal_Display.pretty_flexpair ctxt) tpairs @ map prt_term hyps' @ | 
| 32145 
220c9e439d39
clarified pretty_goals, pretty_thm_aux: plain context;
 wenzelm parents: 
32090diff
changeset | 93 | map (Syntax.pretty_sort ctxt) xshyps @ | 
| 30711 | 94 | (if status = "" then [] else [Pretty.str status]))] | 
| 95 |       else [Pretty.brk 2, Pretty.str ("[" ^ implode (replicate hlen ".") ^ status ^ "]")];
 | |
| 6087 | 96 | val tsymbs = | 
| 39166 
19efc2af3e6c
turned show_hyps and show_tags into proper configuration option;
 wenzelm parents: 
39125diff
changeset | 97 | if null tags orelse not show_tags then [] | 
| 6087 | 98 | else [Pretty.brk 1, pretty_tags tags]; | 
| 6279 | 99 | in Pretty.block (prt_term prop :: (hsymbs @ tsymbs)) end; | 
| 1591 
7fa0265dcd13
New module for display/printing operations, taken from drule.ML
 paulson parents: diff
changeset | 100 | |
| 32145 
220c9e439d39
clarified pretty_goals, pretty_thm_aux: plain context;
 wenzelm parents: 
32090diff
changeset | 101 | fun pretty_thm_aux ctxt show_status = | 
| 
220c9e439d39
clarified pretty_goals, pretty_thm_aux: plain context;
 wenzelm parents: 
32090diff
changeset | 102 |   pretty_thm_raw ctxt {quote = false, show_hyps = true, show_status = show_status};
 | 
| 6087 | 103 | |
| 32090 
39acf19e9f3a
moved ProofContext.pretty_thm to Display.pretty_thm etc.;
 wenzelm parents: 
32089diff
changeset | 104 | fun pretty_thm ctxt = pretty_thm_aux ctxt true; | 
| 
39acf19e9f3a
moved ProofContext.pretty_thm to Display.pretty_thm etc.;
 wenzelm parents: 
32089diff
changeset | 105 | |
| 32145 
220c9e439d39
clarified pretty_goals, pretty_thm_aux: plain context;
 wenzelm parents: 
32090diff
changeset | 106 | fun pretty_thm_global thy = | 
| 
220c9e439d39
clarified pretty_goals, pretty_thm_aux: plain context;
 wenzelm parents: 
32090diff
changeset | 107 | pretty_thm_raw (Syntax.init_pretty_global thy) | 
| 
220c9e439d39
clarified pretty_goals, pretty_thm_aux: plain context;
 wenzelm parents: 
32090diff
changeset | 108 |     {quote = false, show_hyps = false, show_status = true};
 | 
| 32090 
39acf19e9f3a
moved ProofContext.pretty_thm to Display.pretty_thm etc.;
 wenzelm parents: 
32089diff
changeset | 109 | |
| 
39acf19e9f3a
moved ProofContext.pretty_thm to Display.pretty_thm etc.;
 wenzelm parents: 
32089diff
changeset | 110 | fun pretty_thm_without_context th = pretty_thm_global (Thm.theory_of_thm th) th; | 
| 6087 | 111 | |
| 32090 
39acf19e9f3a
moved ProofContext.pretty_thm to Display.pretty_thm etc.;
 wenzelm parents: 
32089diff
changeset | 112 | val string_of_thm = Pretty.string_of oo pretty_thm; | 
| 
39acf19e9f3a
moved ProofContext.pretty_thm to Display.pretty_thm etc.;
 wenzelm parents: 
32089diff
changeset | 113 | val string_of_thm_global = Pretty.string_of oo pretty_thm_global; | 
| 
39acf19e9f3a
moved ProofContext.pretty_thm to Display.pretty_thm etc.;
 wenzelm parents: 
32089diff
changeset | 114 | val string_of_thm_without_context = Pretty.string_of o pretty_thm_without_context; | 
| 
39acf19e9f3a
moved ProofContext.pretty_thm to Display.pretty_thm etc.;
 wenzelm parents: 
32089diff
changeset | 115 | |
| 1591 
7fa0265dcd13
New module for display/printing operations, taken from drule.ML
 paulson parents: diff
changeset | 116 | |
| 32090 
39acf19e9f3a
moved ProofContext.pretty_thm to Display.pretty_thm etc.;
 wenzelm parents: 
32089diff
changeset | 117 | (* multiple theorems *) | 
| 
39acf19e9f3a
moved ProofContext.pretty_thm to Display.pretty_thm etc.;
 wenzelm parents: 
32089diff
changeset | 118 | |
| 
39acf19e9f3a
moved ProofContext.pretty_thm to Display.pretty_thm etc.;
 wenzelm parents: 
32089diff
changeset | 119 | fun pretty_thms_aux ctxt flag [th] = pretty_thm_aux ctxt flag th | 
| 
39acf19e9f3a
moved ProofContext.pretty_thm to Display.pretty_thm etc.;
 wenzelm parents: 
32089diff
changeset | 120 | | pretty_thms_aux ctxt flag ths = | 
| 
39acf19e9f3a
moved ProofContext.pretty_thm to Display.pretty_thm etc.;
 wenzelm parents: 
32089diff
changeset | 121 | Pretty.blk (0, Pretty.fbreaks (map (pretty_thm_aux ctxt flag) ths)); | 
| 
39acf19e9f3a
moved ProofContext.pretty_thm to Display.pretty_thm etc.;
 wenzelm parents: 
32089diff
changeset | 122 | |
| 
39acf19e9f3a
moved ProofContext.pretty_thm to Display.pretty_thm etc.;
 wenzelm parents: 
32089diff
changeset | 123 | fun pretty_thms ctxt = pretty_thms_aux ctxt true; | 
| 1591 
7fa0265dcd13
New module for display/printing operations, taken from drule.ML
 paulson parents: diff
changeset | 124 | |
| 
7fa0265dcd13
New module for display/printing operations, taken from drule.ML
 paulson parents: diff
changeset | 125 | |
| 4250 | 126 | |
| 127 | (** print theory **) | |
| 1591 
7fa0265dcd13
New module for display/printing operations, taken from drule.ML
 paulson parents: diff
changeset | 128 | |
| 16437 
aa87badf7a3c
removed pretty_theory, pprint_theory (see context.ML or thy_info.ML);
 wenzelm parents: 
16364diff
changeset | 129 | val print_syntax = Syntax.print_syntax o Sign.syn_of; | 
| 4498 | 130 | |
| 131 | ||
| 11883 | 132 | (* pretty_full_theory *) | 
| 4250 | 133 | |
| 20629 
8f6cc81ba4a3
pretty_full_theory: suppress internal entities by default;
 wenzelm parents: 
20226diff
changeset | 134 | fun pretty_full_theory verbose thy = | 
| 4250 | 135 | let | 
| 35199 
2e37cdae7b9c
pretty_full_theory: proper Syntax.init_pretty_global;
 wenzelm parents: 
33173diff
changeset | 136 | val ctxt = Syntax.init_pretty_global thy; | 
| 24920 | 137 | |
| 138 | fun prt_cls c = Syntax.pretty_sort ctxt [c]; | |
| 139 | fun prt_sort S = Syntax.pretty_sort ctxt S; | |
| 37248 
8e8e5f9d1441
arities: no need to maintain original codomain (cf. f795c1164708) -- completion happens in axclass.ML;
 wenzelm parents: 
36328diff
changeset | 140 | fun prt_arity t (c, Ss) = Syntax.pretty_arity ctxt (t, Ss, [c]); | 
| 24920 | 141 | fun prt_typ ty = Pretty.quote (Syntax.pretty_typ ctxt ty); | 
| 35845 
e5980f0ad025
renamed varify/unvarify operations to varify_global/unvarify_global to emphasize that these only work in a global situation;
 wenzelm parents: 
35199diff
changeset | 142 | val prt_typ_no_tvars = prt_typ o Logic.unvarifyT_global; | 
| 24920 | 143 | fun prt_term t = Pretty.quote (Syntax.pretty_term ctxt t); | 
| 35845 
e5980f0ad025
renamed varify/unvarify operations to varify_global/unvarify_global to emphasize that these only work in a global situation;
 wenzelm parents: 
35199diff
changeset | 144 | val prt_term_no_vars = prt_term o Logic.unvarify_global; | 
| 19698 | 145 | fun prt_const (c, ty) = [Pretty.str c, Pretty.str " ::", Pretty.brk 1, prt_typ_no_tvars ty]; | 
| 42384 | 146 | val prt_const' = Defs.pretty_const ctxt; | 
| 4250 | 147 | |
| 14794 | 148 | fun pretty_classrel (c, []) = prt_cls c | 
| 149 | | pretty_classrel (c, cs) = Pretty.block | |
| 150 | (prt_cls c :: Pretty.str " <" :: Pretty.brk 1 :: | |
| 151 | Pretty.commas (map prt_cls cs)); | |
| 4250 | 152 | |
| 153 | fun pretty_default S = Pretty.block | |
| 14794 | 154 | [Pretty.str "default sort:", Pretty.brk 1, prt_sort S]; | 
| 4250 | 155 | |
| 14996 | 156 | val tfrees = map (fn v => TFree (v, [])); | 
| 33173 
b8ca12f6681a
eliminated obsolete tags for types/consts -- now handled via name space, in strongly typed fashion;
 wenzelm parents: 
33158diff
changeset | 157 | fun pretty_type syn (t, (Type.LogicalType n)) = | 
| 15531 | 158 | if syn then NONE | 
| 43329 
84472e198515
tuned signature: Name.invent and Name.invent_names;
 wenzelm parents: 
42384diff
changeset | 159 | else SOME (prt_typ (Type (t, tfrees (Name.invent Name.context Name.aT n)))) | 
| 33173 
b8ca12f6681a
eliminated obsolete tags for types/consts -- now handled via name space, in strongly typed fashion;
 wenzelm parents: 
33158diff
changeset | 160 | | pretty_type syn (t, (Type.Abbreviation (vs, U, syn'))) = | 
| 15531 | 161 | if syn <> syn' then NONE | 
| 162 | else SOME (Pretty.block | |
| 14996 | 163 | [prt_typ (Type (t, tfrees vs)), Pretty.str " =", Pretty.brk 1, prt_typ U]) | 
| 33173 
b8ca12f6681a
eliminated obsolete tags for types/consts -- now handled via name space, in strongly typed fashion;
 wenzelm parents: 
33158diff
changeset | 164 | | pretty_type syn (t, Type.Nonterminal) = | 
| 15531 | 165 | if not syn then NONE | 
| 166 | else SOME (prt_typ (Type (t, []))); | |
| 4250 | 167 | |
| 19482 
9f11af8f7ef9
tuned basic list operators (flat, maps, map_filter);
 wenzelm parents: 
19420diff
changeset | 168 | val pretty_arities = maps (fn (t, ars) => map (prt_arity t) ars); | 
| 14223 
0ee05eef881b
Added support for making constants final, that is, ensuring that no
 skalberg parents: 
14178diff
changeset | 169 | |
| 19698 | 170 | fun pretty_abbrev (c, (ty, t)) = Pretty.block | 
| 171 | (prt_const (c, ty) @ [Pretty.str " ==", Pretty.brk 1, prt_term_no_vars t]); | |
| 172 | ||
| 173 | fun pretty_axm (a, t) = Pretty.block [Pretty.str (a ^ ":"), Pretty.brk 1, prt_term_no_vars t]; | |
| 19365 | 174 | |
| 19702 | 175 | fun pretty_finals reds = Pretty.block | 
| 19703 | 176 | (Pretty.str "final:" :: Pretty.brk 1 :: Pretty.commas (map (prt_const' o fst) reds)); | 
| 19702 | 177 | |
| 19698 | 178 | fun pretty_reduct (lhs, rhs) = Pretty.block | 
| 19702 | 179 | ([prt_const' lhs, Pretty.str " ->", Pretty.brk 2] @ | 
| 180 | Pretty.commas (map prt_const' (sort_wrt #1 rhs))); | |
| 4250 | 181 | |
| 19698 | 182 | fun pretty_restrict (const, name) = | 
| 183 |       Pretty.block ([prt_const' const, Pretty.brk 2, Pretty.str ("(from " ^ quote name ^ ")")]);
 | |
| 8720 | 184 | |
| 24665 | 185 | val axioms = (Theory.axiom_space thy, Theory.axiom_table thy); | 
| 186 | val defs = Theory.defs_of thy; | |
| 19698 | 187 |     val {restricts, reducts} = Defs.dest defs;
 | 
| 47005 
421760a1efe7
maintain generic context naming in structure Name_Space (NB: empty = default_naming, init = local_naming);
 wenzelm parents: 
43329diff
changeset | 188 | val tsig = Sign.tsig_of thy; | 
| 
421760a1efe7
maintain generic context naming in structure Name_Space (NB: empty = default_naming, init = local_naming);
 wenzelm parents: 
43329diff
changeset | 189 | val consts = Sign.consts_of thy; | 
| 18936 | 190 |     val {constants, constraints} = Consts.dest consts;
 | 
| 42358 
b47d41d9f4b5
Name_Space: proper configuration options long_names, short_names, unique_names instead of former unsynchronized references;
 wenzelm parents: 
39166diff
changeset | 191 | val extern_const = Name_Space.extern ctxt (#1 constants); | 
| 26637 | 192 |     val {classes, default, types, ...} = Type.rep_tsig tsig;
 | 
| 19698 | 193 | val (class_space, class_algebra) = classes; | 
| 36328 
4d9deabf6474
replaced Sorts.rep_algebra by slightly more abstract selectors classes_of/arities_of;
 wenzelm parents: 
35845diff
changeset | 194 | val classes = Sorts.classes_of class_algebra; | 
| 
4d9deabf6474
replaced Sorts.rep_algebra by slightly more abstract selectors classes_of/arities_of;
 wenzelm parents: 
35845diff
changeset | 195 | val arities = Sorts.arities_of class_algebra; | 
| 14996 | 196 | |
| 42358 
b47d41d9f4b5
Name_Space: proper configuration options long_names, short_names, unique_names instead of former unsynchronized references;
 wenzelm parents: 
39166diff
changeset | 197 | val clsses = Name_Space.dest_table ctxt (class_space, Symtab.make (Graph.dest classes)); | 
| 
b47d41d9f4b5
Name_Space: proper configuration options long_names, short_names, unique_names instead of former unsynchronized references;
 wenzelm parents: 
39166diff
changeset | 198 | val tdecls = Name_Space.dest_table ctxt types; | 
| 42359 | 199 | val arties = Name_Space.dest_table ctxt (Type.type_space tsig, arities); | 
| 20629 
8f6cc81ba4a3
pretty_full_theory: suppress internal entities by default;
 wenzelm parents: 
20226diff
changeset | 200 | |
| 33158 | 201 | fun prune_const c = not verbose andalso Consts.is_concealed consts c; | 
| 42358 
b47d41d9f4b5
Name_Space: proper configuration options long_names, short_names, unique_names instead of former unsynchronized references;
 wenzelm parents: 
39166diff
changeset | 202 | val cnsts = Name_Space.extern_table ctxt (#1 constants, | 
| 24774 
bc31c318e673
print_theory: observe Markup.internal_property of consts, discontinued special treatment of internal names elsewhere;
 wenzelm parents: 
24665diff
changeset | 203 | Symtab.make (filter_out (prune_const o fst) (Symtab.dest (#2 constants)))); | 
| 
bc31c318e673
print_theory: observe Markup.internal_property of consts, discontinued special treatment of internal names elsewhere;
 wenzelm parents: 
24665diff
changeset | 204 | |
| 19482 
9f11af8f7ef9
tuned basic list operators (flat, maps, map_filter);
 wenzelm parents: 
19420diff
changeset | 205 | val log_cnsts = map_filter (fn (c, (ty, NONE)) => SOME (c, ty) | _ => NONE) cnsts; | 
| 25405 | 206 | val abbrevs = map_filter (fn (c, (ty, SOME t)) => SOME (c, (ty, t)) | _ => NONE) cnsts; | 
| 42358 
b47d41d9f4b5
Name_Space: proper configuration options long_names, short_names, unique_names instead of former unsynchronized references;
 wenzelm parents: 
39166diff
changeset | 207 | val cnstrs = Name_Space.extern_table ctxt constraints; | 
| 19698 | 208 | |
| 42358 
b47d41d9f4b5
Name_Space: proper configuration options long_names, short_names, unique_names instead of former unsynchronized references;
 wenzelm parents: 
39166diff
changeset | 209 | val axms = Name_Space.extern_table ctxt axioms; | 
| 24774 
bc31c318e673
print_theory: observe Markup.internal_property of consts, discontinued special treatment of internal names elsewhere;
 wenzelm parents: 
24665diff
changeset | 210 | |
| 
bc31c318e673
print_theory: observe Markup.internal_property of consts, discontinued special treatment of internal names elsewhere;
 wenzelm parents: 
24665diff
changeset | 211 | val (reds0, (reds1, reds2)) = filter_out (prune_const o fst o fst) reducts | 
| 
bc31c318e673
print_theory: observe Markup.internal_property of consts, discontinued special treatment of internal names elsewhere;
 wenzelm parents: 
24665diff
changeset | 212 | |> map (fn (lhs, rhs) => | 
| 
bc31c318e673
print_theory: observe Markup.internal_property of consts, discontinued special treatment of internal names elsewhere;
 wenzelm parents: 
24665diff
changeset | 213 | (apfst extern_const lhs, map (apfst extern_const) (filter_out (prune_const o fst) rhs))) | 
| 19702 | 214 | |> sort_wrt (#1 o #1) | 
| 215 | |> List.partition (null o #2) | |
| 216 | ||> List.partition (Defs.plain_args o #2 o #1); | |
| 19698 | 217 | val rests = restricts |> map (apfst (apfst extern_const)) |> sort_wrt (#1 o #1); | 
| 4250 | 218 | in | 
| 29091 | 219 |     [Pretty.strs ("names:" :: Context.display_names thy)] @
 | 
| 30409 
6037cac149a1
pretty_full_theory: no longer display name prefix -- naming is far more complex now;
 wenzelm parents: 
30186diff
changeset | 220 | [Pretty.big_list "classes:" (map pretty_classrel clsses), | 
| 8720 | 221 | pretty_default default, | 
| 19482 
9f11af8f7ef9
tuned basic list operators (flat, maps, map_filter);
 wenzelm parents: 
19420diff
changeset | 222 | Pretty.big_list "syntactic types:" (map_filter (pretty_type true) tdecls), | 
| 
9f11af8f7ef9
tuned basic list operators (flat, maps, map_filter);
 wenzelm parents: 
19420diff
changeset | 223 | Pretty.big_list "logical types:" (map_filter (pretty_type false) tdecls), | 
| 16534 | 224 | Pretty.big_list "type arities:" (pretty_arities arties), | 
| 19698 | 225 | Pretty.big_list "logical consts:" (map (Pretty.block o prt_const) log_cnsts), | 
| 19365 | 226 | Pretty.big_list "abbreviations:" (map pretty_abbrev abbrevs), | 
| 19698 | 227 | Pretty.big_list "constraints:" (map (Pretty.block o prt_const) cnstrs), | 
| 228 | Pretty.big_list "axioms:" (map pretty_axm axms), | |
| 42358 
b47d41d9f4b5
Name_Space: proper configuration options long_names, short_names, unique_names instead of former unsynchronized references;
 wenzelm parents: 
39166diff
changeset | 229 |       Pretty.strs ("oracles:" :: Thm.extern_oracles ctxt),
 | 
| 19698 | 230 | Pretty.big_list "definitions:" | 
| 19702 | 231 | [pretty_finals reds0, | 
| 232 | Pretty.big_list "non-overloaded:" (map pretty_reduct reds1), | |
| 233 | Pretty.big_list "overloaded:" (map pretty_reduct reds2), | |
| 234 | Pretty.big_list "pattern restrictions:" (map pretty_restrict rests)]] | |
| 4250 | 235 | end; | 
| 236 | ||
| 1591 
7fa0265dcd13
New module for display/printing operations, taken from drule.ML
 paulson parents: diff
changeset | 237 | end; | 
| 
7fa0265dcd13
New module for display/printing operations, taken from drule.ML
 paulson parents: diff
changeset | 238 | |
| 32089 
568a23753e3a
moved pretty_goals etc. to Display_Goal (required by tracing tacticals);
 wenzelm parents: 
30723diff
changeset | 239 | structure Basic_Display: BASIC_DISPLAY = Display; | 
| 
568a23753e3a
moved pretty_goals etc. to Display_Goal (required by tracing tacticals);
 wenzelm parents: 
30723diff
changeset | 240 | open Basic_Display; |