src/Pure/display.ML
author obua
Mon, 01 Aug 2005 11:39:33 +0200
changeset 16966 37e34f315057
parent 16937 0822bbdd6769
child 17447 3a23acfdf5ba
permissions -rw-r--r--
1. changed configuration variables for linear programming (Cplex_tools): LP_SOLVER is either CPLEX or GLPK CPLEX_PATH is the path to the cplex binary GLPK_PATH is the path to the glpk binary The change makes it possible to switch between glpk and cplex at runtime. 2. moved conflicting list theories out of Library.thy into ROOT.ML
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
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
    ID:         $Id$
7fa0265dcd13 New module for display/printing operations, taken from drule.ML
paulson
parents:
diff changeset
     3
    Author:     Lawrence C Paulson, Cambridge University Computer Laboratory
7fa0265dcd13 New module for display/printing operations, taken from drule.ML
paulson
parents:
diff changeset
     4
    Copyright   1993  University of Cambridge
7fa0265dcd13 New module for display/printing operations, taken from drule.ML
paulson
parents:
diff changeset
     5
7fa0265dcd13 New module for display/printing operations, taken from drule.ML
paulson
parents:
diff changeset
     6
Printing of theories, theorems, etc.
7fa0265dcd13 New module for display/printing operations, taken from drule.ML
paulson
parents:
diff changeset
     7
*)
7fa0265dcd13 New module for display/printing operations, taken from drule.ML
paulson
parents:
diff changeset
     8
11883
7b9522995a78 print_goals stuff is back (from locale.ML);
wenzelm
parents: 11501
diff changeset
     9
signature BASIC_DISPLAY =
7b9522995a78 print_goals stuff is back (from locale.ML);
wenzelm
parents: 11501
diff changeset
    10
sig
12081
f9735aad76dc added goals_limit (from tctical.ML);
wenzelm
parents: 12067
diff changeset
    11
  val goals_limit: int ref
11883
7b9522995a78 print_goals stuff is back (from locale.ML);
wenzelm
parents: 11501
diff changeset
    12
  val show_hyps: bool ref
7b9522995a78 print_goals stuff is back (from locale.ML);
wenzelm
parents: 11501
diff changeset
    13
  val show_tags: bool ref
7b9522995a78 print_goals stuff is back (from locale.ML);
wenzelm
parents: 11501
diff changeset
    14
  val string_of_thm: thm -> string
7b9522995a78 print_goals stuff is back (from locale.ML);
wenzelm
parents: 11501
diff changeset
    15
  val print_thm: thm -> unit
7b9522995a78 print_goals stuff is back (from locale.ML);
wenzelm
parents: 11501
diff changeset
    16
  val print_thms: thm list -> unit
7b9522995a78 print_goals stuff is back (from locale.ML);
wenzelm
parents: 11501
diff changeset
    17
  val prth: thm -> thm
7b9522995a78 print_goals stuff is back (from locale.ML);
wenzelm
parents: 11501
diff changeset
    18
  val prthq: thm Seq.seq -> thm Seq.seq
7b9522995a78 print_goals stuff is back (from locale.ML);
wenzelm
parents: 11501
diff changeset
    19
  val prths: thm list -> thm list
7b9522995a78 print_goals stuff is back (from locale.ML);
wenzelm
parents: 11501
diff changeset
    20
  val string_of_ctyp: ctyp -> string
7b9522995a78 print_goals stuff is back (from locale.ML);
wenzelm
parents: 11501
diff changeset
    21
  val print_ctyp: ctyp -> unit
7b9522995a78 print_goals stuff is back (from locale.ML);
wenzelm
parents: 11501
diff changeset
    22
  val string_of_cterm: cterm -> string
7b9522995a78 print_goals stuff is back (from locale.ML);
wenzelm
parents: 11501
diff changeset
    23
  val print_cterm: cterm -> unit
7b9522995a78 print_goals stuff is back (from locale.ML);
wenzelm
parents: 11501
diff changeset
    24
  val print_syntax: theory -> unit
7b9522995a78 print_goals stuff is back (from locale.ML);
wenzelm
parents: 11501
diff changeset
    25
  val show_consts: bool ref
7b9522995a78 print_goals stuff is back (from locale.ML);
wenzelm
parents: 11501
diff changeset
    26
end;
7b9522995a78 print_goals stuff is back (from locale.ML);
wenzelm
parents: 11501
diff changeset
    27
1591
7fa0265dcd13 New module for display/printing operations, taken from drule.ML
paulson
parents:
diff changeset
    28
signature DISPLAY =
4950
226f2cde9f4d tuned signature;
wenzelm
parents: 4782
diff changeset
    29
sig
11883
7b9522995a78 print_goals stuff is back (from locale.ML);
wenzelm
parents: 11501
diff changeset
    30
  include BASIC_DISPLAY
14876
477c414000f8 pretty_thm/goals_aux, pretty_flexpair: pp;
wenzelm
parents: 14794
diff changeset
    31
  val pretty_flexpair: Pretty.pp -> term * term -> Pretty.T
477c414000f8 pretty_thm/goals_aux, pretty_flexpair: pp;
wenzelm
parents: 14794
diff changeset
    32
  val pretty_thm_aux: Pretty.pp -> bool -> thm -> Pretty.T
6976
3895ba31db71 removed pretty_thm_no_hyps (again);
wenzelm
parents: 6926
diff changeset
    33
  val pretty_thm_no_quote: thm -> Pretty.T
11883
7b9522995a78 print_goals stuff is back (from locale.ML);
wenzelm
parents: 11501
diff changeset
    34
  val pretty_thm: thm -> Pretty.T
7b9522995a78 print_goals stuff is back (from locale.ML);
wenzelm
parents: 11501
diff changeset
    35
  val pretty_thms: thm list -> Pretty.T
16437
aa87badf7a3c removed pretty_theory, pprint_theory (see context.ML or thy_info.ML);
wenzelm
parents: 16364
diff changeset
    36
  val pretty_thm_sg: theory -> thm -> Pretty.T
aa87badf7a3c removed pretty_theory, pprint_theory (see context.ML or thy_info.ML);
wenzelm
parents: 16364
diff changeset
    37
  val pretty_thms_sg: theory -> thm list -> Pretty.T
11883
7b9522995a78 print_goals stuff is back (from locale.ML);
wenzelm
parents: 11501
diff changeset
    38
  val pprint_thm: thm -> pprint_args -> unit
7b9522995a78 print_goals stuff is back (from locale.ML);
wenzelm
parents: 11501
diff changeset
    39
  val pretty_ctyp: ctyp -> Pretty.T
7b9522995a78 print_goals stuff is back (from locale.ML);
wenzelm
parents: 11501
diff changeset
    40
  val pprint_ctyp: ctyp -> pprint_args -> unit
7b9522995a78 print_goals stuff is back (from locale.ML);
wenzelm
parents: 11501
diff changeset
    41
  val pretty_cterm: cterm -> Pretty.T
7b9522995a78 print_goals stuff is back (from locale.ML);
wenzelm
parents: 11501
diff changeset
    42
  val pprint_cterm: cterm -> pprint_args -> unit
8720
840c75ab2a7f Pretty.chunks;
wenzelm
parents: 8458
diff changeset
    43
  val pretty_full_theory: theory -> Pretty.T list
14876
477c414000f8 pretty_thm/goals_aux, pretty_flexpair: pp;
wenzelm
parents: 14794
diff changeset
    44
  val pretty_goals_aux: Pretty.pp -> string -> bool * bool -> int -> thm -> Pretty.T list
11883
7b9522995a78 print_goals stuff is back (from locale.ML);
wenzelm
parents: 11501
diff changeset
    45
  val pretty_goals: int -> thm -> Pretty.T list
7b9522995a78 print_goals stuff is back (from locale.ML);
wenzelm
parents: 11501
diff changeset
    46
  val print_goals: int -> thm -> unit
7b9522995a78 print_goals stuff is back (from locale.ML);
wenzelm
parents: 11501
diff changeset
    47
  val current_goals_markers: (string * string * string) ref
12418
753054ec8e88 tuned print_goals interfaces;
wenzelm
parents: 12081
diff changeset
    48
  val pretty_current_goals: int -> int -> thm -> Pretty.T list
753054ec8e88 tuned print_goals interfaces;
wenzelm
parents: 12081
diff changeset
    49
  val print_current_goals_default: int -> int -> thm -> unit
753054ec8e88 tuned print_goals interfaces;
wenzelm
parents: 12081
diff changeset
    50
  val print_current_goals_fn: (int -> int -> thm -> unit) ref
4950
226f2cde9f4d tuned signature;
wenzelm
parents: 4782
diff changeset
    51
end;
1591
7fa0265dcd13 New module for display/printing operations, taken from drule.ML
paulson
parents:
diff changeset
    52
4950
226f2cde9f4d tuned signature;
wenzelm
parents: 4782
diff changeset
    53
structure Display: DISPLAY =
1591
7fa0265dcd13 New module for display/printing operations, taken from drule.ML
paulson
parents:
diff changeset
    54
struct
7fa0265dcd13 New module for display/printing operations, taken from drule.ML
paulson
parents:
diff changeset
    55
11883
7b9522995a78 print_goals stuff is back (from locale.ML);
wenzelm
parents: 11501
diff changeset
    56
6087
c8ec08fced15 show_tags;
wenzelm
parents: 5902
diff changeset
    57
(** print thm **)
c8ec08fced15 show_tags;
wenzelm
parents: 5902
diff changeset
    58
16534
wenzelm
parents: 16490
diff changeset
    59
val goals_limit = ref 10;       (*max number of goals to print*)
12831
a2a3896f9c48 reset show_hyps by default (in accordance to existing Isar practice);
wenzelm
parents: 12418
diff changeset
    60
val show_hyps = ref false;      (*false: print meta-hypotheses as dots*)
11883
7b9522995a78 print_goals stuff is back (from locale.ML);
wenzelm
parents: 11501
diff changeset
    61
val show_tags = ref false;      (*false: suppress tags*)
6087
c8ec08fced15 show_tags;
wenzelm
parents: 5902
diff changeset
    62
14598
7009f59711e3 Replaced quote by Library.quote, since quote now refers to Symbol.quote
berghofe
parents: 14472
diff changeset
    63
fun pretty_tag (name, args) = Pretty.strs (name :: map Library.quote args);
6087
c8ec08fced15 show_tags;
wenzelm
parents: 5902
diff changeset
    64
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
    65
14876
477c414000f8 pretty_thm/goals_aux, pretty_flexpair: pp;
wenzelm
parents: 14794
diff changeset
    66
fun pretty_flexpair pp (t, u) = Pretty.block
477c414000f8 pretty_thm/goals_aux, pretty_flexpair: pp;
wenzelm
parents: 14794
diff changeset
    67
  [Pretty.term pp t, Pretty.str " =?=", Pretty.brk 1, Pretty.term pp u];
13658
c9ad3e64ddcf Changed handling of flex-flex constraints: now stored in separate
berghofe
parents: 12831
diff changeset
    68
14876
477c414000f8 pretty_thm/goals_aux, pretty_flexpair: pp;
wenzelm
parents: 14794
diff changeset
    69
fun pretty_thm_aux pp quote th =
1591
7fa0265dcd13 New module for display/printing operations, taken from drule.ML
paulson
parents:
diff changeset
    70
  let
16290
e661e37a4d50 renamed const_deps to defs;
wenzelm
parents: 16158
diff changeset
    71
    val {hyps, tpairs, prop, der = (ora, _), ...} = Thm.rep_thm th;
6087
c8ec08fced15 show_tags;
wenzelm
parents: 5902
diff changeset
    72
    val xshyps = Thm.extra_shyps th;
c8ec08fced15 show_tags;
wenzelm
parents: 5902
diff changeset
    73
    val (_, tags) = Thm.get_name_tags th;
c8ec08fced15 show_tags;
wenzelm
parents: 5902
diff changeset
    74
13658
c9ad3e64ddcf Changed handling of flex-flex constraints: now stored in separate
berghofe
parents: 12831
diff changeset
    75
    val q = if quote then Pretty.quote else I;
14876
477c414000f8 pretty_thm/goals_aux, pretty_flexpair: pp;
wenzelm
parents: 14794
diff changeset
    76
    val prt_term = q o (Pretty.term pp);
6279
eb4dc43023af pretty_thm: quote terms (separately);
wenzelm
parents: 6087
diff changeset
    77
13658
c9ad3e64ddcf Changed handling of flex-flex constraints: now stored in separate
berghofe
parents: 12831
diff changeset
    78
    val hlen = length xshyps + length hyps + length tpairs;
1591
7fa0265dcd13 New module for display/printing operations, taken from drule.ML
paulson
parents:
diff changeset
    79
    val hsymbs =
9500
e21a76142269 use oracle flag from derivation;
wenzelm
parents: 8908
diff changeset
    80
      if hlen = 0 andalso not ora then []
1591
7fa0265dcd13 New module for display/printing operations, taken from drule.ML
paulson
parents:
diff changeset
    81
      else if ! show_hyps then
7fa0265dcd13 New module for display/printing operations, taken from drule.ML
paulson
parents:
diff changeset
    82
        [Pretty.brk 2, Pretty.list "[" "]"
14876
477c414000f8 pretty_thm/goals_aux, pretty_flexpair: pp;
wenzelm
parents: 14794
diff changeset
    83
          (map (q o pretty_flexpair pp) tpairs @ map prt_term hyps @
477c414000f8 pretty_thm/goals_aux, pretty_flexpair: pp;
wenzelm
parents: 14794
diff changeset
    84
           map (Pretty.sort pp) xshyps @
9500
e21a76142269 use oracle flag from derivation;
wenzelm
parents: 8908
diff changeset
    85
            (if ora then [Pretty.str "!"] else []))]
6889
adcf91ad5add pretty_thm: include oracles (!) in hyps;
wenzelm
parents: 6846
diff changeset
    86
      else [Pretty.brk 2, Pretty.str ("[" ^ implode (replicate hlen ".") ^
9500
e21a76142269 use oracle flag from derivation;
wenzelm
parents: 8908
diff changeset
    87
        (if ora then "!" else "") ^ "]")];
6087
c8ec08fced15 show_tags;
wenzelm
parents: 5902
diff changeset
    88
    val tsymbs =
c8ec08fced15 show_tags;
wenzelm
parents: 5902
diff changeset
    89
      if null tags orelse not (! show_tags) then []
c8ec08fced15 show_tags;
wenzelm
parents: 5902
diff changeset
    90
      else [Pretty.brk 1, pretty_tags tags];
6279
eb4dc43023af pretty_thm: quote terms (separately);
wenzelm
parents: 6087
diff changeset
    91
  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
    92
12067
b2f5fbb39f14 export pretty_thm_aux;
wenzelm
parents: 11883
diff changeset
    93
fun gen_pretty_thm quote th =
16437
aa87badf7a3c removed pretty_theory, pprint_theory (see context.ML or thy_info.ML);
wenzelm
parents: 16364
diff changeset
    94
  pretty_thm_aux (Sign.pp (Thm.theory_of_thm th)) quote th;
6889
adcf91ad5add pretty_thm: include oracles (!) in hyps;
wenzelm
parents: 6846
diff changeset
    95
12067
b2f5fbb39f14 export pretty_thm_aux;
wenzelm
parents: 11883
diff changeset
    96
val pretty_thm = gen_pretty_thm true;
b2f5fbb39f14 export pretty_thm_aux;
wenzelm
parents: 11883
diff changeset
    97
val pretty_thm_no_quote = gen_pretty_thm false;
6889
adcf91ad5add pretty_thm: include oracles (!) in hyps;
wenzelm
parents: 6846
diff changeset
    98
adcf91ad5add pretty_thm: include oracles (!) in hyps;
wenzelm
parents: 6846
diff changeset
    99
1591
7fa0265dcd13 New module for display/printing operations, taken from drule.ML
paulson
parents:
diff changeset
   100
val string_of_thm = Pretty.string_of o pretty_thm;
6279
eb4dc43023af pretty_thm: quote terms (separately);
wenzelm
parents: 6087
diff changeset
   101
val pprint_thm = Pretty.pprint o pretty_thm;
1591
7fa0265dcd13 New module for display/printing operations, taken from drule.ML
paulson
parents:
diff changeset
   102
6087
c8ec08fced15 show_tags;
wenzelm
parents: 5902
diff changeset
   103
fun pretty_thms [th] = pretty_thm th
c8ec08fced15 show_tags;
wenzelm
parents: 5902
diff changeset
   104
  | pretty_thms ths = Pretty.block (Pretty.fbreaks (map pretty_thm ths));
1591
7fa0265dcd13 New module for display/printing operations, taken from drule.ML
paulson
parents:
diff changeset
   105
16437
aa87badf7a3c removed pretty_theory, pprint_theory (see context.ML or thy_info.ML);
wenzelm
parents: 16364
diff changeset
   106
val pretty_thm_sg = pretty_thm oo Thm.transfer;
aa87badf7a3c removed pretty_theory, pprint_theory (see context.ML or thy_info.ML);
wenzelm
parents: 16364
diff changeset
   107
val pretty_thms_sg = pretty_thms oo (map o Thm.transfer);
10010
f6ccb6df9cb9 added print_thm(s)_sg;
wenzelm
parents: 9500
diff changeset
   108
6087
c8ec08fced15 show_tags;
wenzelm
parents: 5902
diff changeset
   109
c8ec08fced15 show_tags;
wenzelm
parents: 5902
diff changeset
   110
(* top-level commands for printing theorems *)
c8ec08fced15 show_tags;
wenzelm
parents: 5902
diff changeset
   111
c8ec08fced15 show_tags;
wenzelm
parents: 5902
diff changeset
   112
val print_thm = Pretty.writeln o pretty_thm;
c8ec08fced15 show_tags;
wenzelm
parents: 5902
diff changeset
   113
val print_thms = Pretty.writeln o pretty_thms;
1591
7fa0265dcd13 New module for display/printing operations, taken from drule.ML
paulson
parents:
diff changeset
   114
7fa0265dcd13 New module for display/printing operations, taken from drule.ML
paulson
parents:
diff changeset
   115
fun prth th = (print_thm th; th);
16534
wenzelm
parents: 16490
diff changeset
   116
fun prthq thq = (Seq.print (K print_thm) 100000 thq; thq);
wenzelm
parents: 16490
diff changeset
   117
fun prths ths = (prthq (Seq.of_list ths); ths);
1591
7fa0265dcd13 New module for display/printing operations, taken from drule.ML
paulson
parents:
diff changeset
   118
7fa0265dcd13 New module for display/printing operations, taken from drule.ML
paulson
parents:
diff changeset
   119
7fa0265dcd13 New module for display/printing operations, taken from drule.ML
paulson
parents:
diff changeset
   120
(* other printing commands *)
7fa0265dcd13 New module for display/printing operations, taken from drule.ML
paulson
parents:
diff changeset
   121
4126
c41846a38e20 added pretty_ctyp;
wenzelm
parents: 3990
diff changeset
   122
fun pretty_ctyp cT =
16437
aa87badf7a3c removed pretty_theory, pprint_theory (see context.ML or thy_info.ML);
wenzelm
parents: 16364
diff changeset
   123
  let val {thy, T, ...} = rep_ctyp cT in Sign.pretty_typ thy T end;
4126
c41846a38e20 added pretty_ctyp;
wenzelm
parents: 3990
diff changeset
   124
1591
7fa0265dcd13 New module for display/printing operations, taken from drule.ML
paulson
parents:
diff changeset
   125
fun pprint_ctyp cT =
16437
aa87badf7a3c removed pretty_theory, pprint_theory (see context.ML or thy_info.ML);
wenzelm
parents: 16364
diff changeset
   126
  let val {thy, T, ...} = rep_ctyp cT in Sign.pprint_typ thy T end;
1591
7fa0265dcd13 New module for display/printing operations, taken from drule.ML
paulson
parents:
diff changeset
   127
7fa0265dcd13 New module for display/printing operations, taken from drule.ML
paulson
parents:
diff changeset
   128
fun string_of_ctyp cT =
16437
aa87badf7a3c removed pretty_theory, pprint_theory (see context.ML or thy_info.ML);
wenzelm
parents: 16364
diff changeset
   129
  let val {thy, T, ...} = rep_ctyp cT in Sign.string_of_typ thy T end;
1591
7fa0265dcd13 New module for display/printing operations, taken from drule.ML
paulson
parents:
diff changeset
   130
7fa0265dcd13 New module for display/printing operations, taken from drule.ML
paulson
parents:
diff changeset
   131
val print_ctyp = writeln o string_of_ctyp;
7fa0265dcd13 New module for display/printing operations, taken from drule.ML
paulson
parents:
diff changeset
   132
3547
977d58464d7f added pretty_cterm;
wenzelm
parents: 3531
diff changeset
   133
fun pretty_cterm ct =
16437
aa87badf7a3c removed pretty_theory, pprint_theory (see context.ML or thy_info.ML);
wenzelm
parents: 16364
diff changeset
   134
  let val {thy, t, ...} = rep_cterm ct in Sign.pretty_term thy t end;
3547
977d58464d7f added pretty_cterm;
wenzelm
parents: 3531
diff changeset
   135
1591
7fa0265dcd13 New module for display/printing operations, taken from drule.ML
paulson
parents:
diff changeset
   136
fun pprint_cterm ct =
16437
aa87badf7a3c removed pretty_theory, pprint_theory (see context.ML or thy_info.ML);
wenzelm
parents: 16364
diff changeset
   137
  let val {thy, t, ...} = rep_cterm ct in Sign.pprint_term thy t end;
1591
7fa0265dcd13 New module for display/printing operations, taken from drule.ML
paulson
parents:
diff changeset
   138
7fa0265dcd13 New module for display/printing operations, taken from drule.ML
paulson
parents:
diff changeset
   139
fun string_of_cterm ct =
16437
aa87badf7a3c removed pretty_theory, pprint_theory (see context.ML or thy_info.ML);
wenzelm
parents: 16364
diff changeset
   140
  let val {thy, t, ...} = rep_cterm ct in Sign.string_of_term thy t end;
1591
7fa0265dcd13 New module for display/printing operations, taken from drule.ML
paulson
parents:
diff changeset
   141
7fa0265dcd13 New module for display/printing operations, taken from drule.ML
paulson
parents:
diff changeset
   142
val print_cterm = writeln o string_of_cterm;
7fa0265dcd13 New module for display/printing operations, taken from drule.ML
paulson
parents:
diff changeset
   143
7fa0265dcd13 New module for display/printing operations, taken from drule.ML
paulson
parents:
diff changeset
   144
4250
3806a00677ff moved Sign.print_sg to display.ML;
wenzelm
parents: 4210
diff changeset
   145
3806a00677ff moved Sign.print_sg to display.ML;
wenzelm
parents: 4210
diff changeset
   146
(** print theory **)
1591
7fa0265dcd13 New module for display/printing operations, taken from drule.ML
paulson
parents:
diff changeset
   147
16437
aa87badf7a3c removed pretty_theory, pprint_theory (see context.ML or thy_info.ML);
wenzelm
parents: 16364
diff changeset
   148
val print_syntax = Syntax.print_syntax o Sign.syn_of;
4498
a088ec3e4f5e pretty_name_space;
wenzelm
parents: 4440
diff changeset
   149
a088ec3e4f5e pretty_name_space;
wenzelm
parents: 4440
diff changeset
   150
11883
7b9522995a78 print_goals stuff is back (from locale.ML);
wenzelm
parents: 11501
diff changeset
   151
(* pretty_full_theory *)
4250
3806a00677ff moved Sign.print_sg to display.ML;
wenzelm
parents: 4210
diff changeset
   152
8720
840c75ab2a7f Pretty.chunks;
wenzelm
parents: 8458
diff changeset
   153
fun pretty_full_theory thy =
4250
3806a00677ff moved Sign.print_sg to display.ML;
wenzelm
parents: 4210
diff changeset
   154
  let
16437
aa87badf7a3c removed pretty_theory, pprint_theory (see context.ML or thy_info.ML);
wenzelm
parents: 16364
diff changeset
   155
    fun prt_cls c = Sign.pretty_sort thy [c];
aa87badf7a3c removed pretty_theory, pprint_theory (see context.ML or thy_info.ML);
wenzelm
parents: 16364
diff changeset
   156
    fun prt_sort S = Sign.pretty_sort thy S;
aa87badf7a3c removed pretty_theory, pprint_theory (see context.ML or thy_info.ML);
wenzelm
parents: 16364
diff changeset
   157
    fun prt_arity t (c, Ss) = Sign.pretty_arity thy (t, Ss, [c]);
aa87badf7a3c removed pretty_theory, pprint_theory (see context.ML or thy_info.ML);
wenzelm
parents: 16364
diff changeset
   158
    fun prt_typ ty = Pretty.quote (Sign.pretty_typ thy ty);
16290
e661e37a4d50 renamed const_deps to defs;
wenzelm
parents: 16158
diff changeset
   159
    val prt_typ_no_tvars = prt_typ o Type.freeze_type;
16437
aa87badf7a3c removed pretty_theory, pprint_theory (see context.ML or thy_info.ML);
wenzelm
parents: 16364
diff changeset
   160
    fun prt_term t = Pretty.quote (Sign.pretty_term thy t);
4250
3806a00677ff moved Sign.print_sg to display.ML;
wenzelm
parents: 4210
diff changeset
   161
14794
751d5af6d91e adapted tsig/sg interface;
wenzelm
parents: 14644
diff changeset
   162
    fun pretty_classrel (c, []) = prt_cls c
751d5af6d91e adapted tsig/sg interface;
wenzelm
parents: 14644
diff changeset
   163
      | pretty_classrel (c, cs) = Pretty.block
751d5af6d91e adapted tsig/sg interface;
wenzelm
parents: 14644
diff changeset
   164
          (prt_cls c :: Pretty.str " <" :: Pretty.brk 1 ::
751d5af6d91e adapted tsig/sg interface;
wenzelm
parents: 14644
diff changeset
   165
            Pretty.commas (map prt_cls cs));
4250
3806a00677ff moved Sign.print_sg to display.ML;
wenzelm
parents: 4210
diff changeset
   166
3806a00677ff moved Sign.print_sg to display.ML;
wenzelm
parents: 4210
diff changeset
   167
    fun pretty_default S = Pretty.block
14794
751d5af6d91e adapted tsig/sg interface;
wenzelm
parents: 14644
diff changeset
   168
      [Pretty.str "default sort:", Pretty.brk 1, prt_sort S];
4250
3806a00677ff moved Sign.print_sg to display.ML;
wenzelm
parents: 4210
diff changeset
   169
15531
08c8dad8e399 Deleted Library.option type.
skalberg
parents: 15000
diff changeset
   170
    fun pretty_witness NONE = Pretty.str "universal non-emptiness witness: -"
08c8dad8e399 Deleted Library.option type.
skalberg
parents: 15000
diff changeset
   171
      | pretty_witness (SOME (T, S)) = Pretty.block
14794
751d5af6d91e adapted tsig/sg interface;
wenzelm
parents: 14644
diff changeset
   172
          [Pretty.str "universal non-emptiness witness:", Pretty.brk 1,
751d5af6d91e adapted tsig/sg interface;
wenzelm
parents: 14644
diff changeset
   173
            prt_typ_no_tvars T, Pretty.str " ::", Pretty.brk 1, prt_sort S];
751d5af6d91e adapted tsig/sg interface;
wenzelm
parents: 14644
diff changeset
   174
14996
2571227f3fcc improved print_theory;
wenzelm
parents: 14990
diff changeset
   175
    val tfrees = map (fn v => TFree (v, []));
16364
dc9f7066d80a refer to name spaces values instead of names;
wenzelm
parents: 16334
diff changeset
   176
    fun pretty_type syn (t, (Type.LogicalType n, _)) =
15531
08c8dad8e399 Deleted Library.option type.
skalberg
parents: 15000
diff changeset
   177
          if syn then NONE
08c8dad8e399 Deleted Library.option type.
skalberg
parents: 15000
diff changeset
   178
          else SOME (prt_typ (Type (t, tfrees (Term.invent_names [] "'a" n))))
16364
dc9f7066d80a refer to name spaces values instead of names;
wenzelm
parents: 16334
diff changeset
   179
      | pretty_type syn (t, (Type.Abbreviation (vs, U, syn'), _)) =
15531
08c8dad8e399 Deleted Library.option type.
skalberg
parents: 15000
diff changeset
   180
          if syn <> syn' then NONE
08c8dad8e399 Deleted Library.option type.
skalberg
parents: 15000
diff changeset
   181
          else SOME (Pretty.block
14996
2571227f3fcc improved print_theory;
wenzelm
parents: 14990
diff changeset
   182
            [prt_typ (Type (t, tfrees vs)), Pretty.str " =", Pretty.brk 1, prt_typ U])
16364
dc9f7066d80a refer to name spaces values instead of names;
wenzelm
parents: 16334
diff changeset
   183
      | pretty_type syn (t, (Type.Nonterminal, _)) =
15531
08c8dad8e399 Deleted Library.option type.
skalberg
parents: 15000
diff changeset
   184
          if not syn then NONE
08c8dad8e399 Deleted Library.option type.
skalberg
parents: 15000
diff changeset
   185
          else SOME (prt_typ (Type (t, [])));
4250
3806a00677ff moved Sign.print_sg to display.ML;
wenzelm
parents: 4210
diff changeset
   186
15570
8d8c70b41bab Move towards standard functions.
skalberg
parents: 15531
diff changeset
   187
    val pretty_arities = List.concat o map (fn (t, ars) => map (prt_arity t) ars);
14223
0ee05eef881b Added support for making constants final, that is, ensuring that no
skalberg
parents: 14178
diff changeset
   188
16937
0822bbdd6769 print_theory: const constraints;
wenzelm
parents: 16845
diff changeset
   189
    fun pretty_const (c, ty) = Pretty.block
10737
c130eb1e863f tuned output;
wenzelm
parents: 10010
diff changeset
   190
      [Pretty.str c, Pretty.str " ::", Pretty.brk 1, prt_typ_no_tvars ty];
4250
3806a00677ff moved Sign.print_sg to display.ML;
wenzelm
parents: 4210
diff changeset
   191
14996
2571227f3fcc improved print_theory;
wenzelm
parents: 14990
diff changeset
   192
    fun pretty_final (c, []) = Pretty.str c
2571227f3fcc improved print_theory;
wenzelm
parents: 14990
diff changeset
   193
      | pretty_final (c, tys) = Pretty.block
2571227f3fcc improved print_theory;
wenzelm
parents: 14990
diff changeset
   194
          (Pretty.str c :: Pretty.str " ::" :: Pretty.brk 1 ::
2571227f3fcc improved print_theory;
wenzelm
parents: 14990
diff changeset
   195
             Pretty.commas (map prt_typ_no_tvars tys));
2571227f3fcc improved print_theory;
wenzelm
parents: 14990
diff changeset
   196
8720
840c75ab2a7f Pretty.chunks;
wenzelm
parents: 8458
diff changeset
   197
    fun prt_axm (a, t) = Pretty.block [Pretty.str (a ^ ":"), Pretty.brk 1, prt_term t];
840c75ab2a7f Pretty.chunks;
wenzelm
parents: 8458
diff changeset
   198
16437
aa87badf7a3c removed pretty_theory, pprint_theory (see context.ML or thy_info.ML);
wenzelm
parents: 16364
diff changeset
   199
    val {axioms, defs, oracles} = Theory.rep_theory thy;
16937
0822bbdd6769 print_theory: const constraints;
wenzelm
parents: 16845
diff changeset
   200
    val {naming, syn = _, tsig, consts = (consts, constraints)} = Sign.rep_sg thy;
14794
751d5af6d91e adapted tsig/sg interface;
wenzelm
parents: 14644
diff changeset
   201
    val {classes, default, types, arities, log_types = _, witness} = Type.rep_tsig tsig;
14996
2571227f3fcc improved print_theory;
wenzelm
parents: 14990
diff changeset
   202
16845
bedf7b5fb781 NameSpace.dest_table avoids duplicated extern;
wenzelm
parents: 16534
diff changeset
   203
    val clsses = NameSpace.dest_table (apsnd (Symtab.make o Graph.dest) classes);
bedf7b5fb781 NameSpace.dest_table avoids duplicated extern;
wenzelm
parents: 16534
diff changeset
   204
    val tdecls = NameSpace.dest_table types;
bedf7b5fb781 NameSpace.dest_table avoids duplicated extern;
wenzelm
parents: 16534
diff changeset
   205
    val arties = NameSpace.dest_table (Sign.type_space thy, arities);
16937
0822bbdd6769 print_theory: const constraints;
wenzelm
parents: 16845
diff changeset
   206
    val cnsts = NameSpace.extern_table consts |> map (apsnd fst);
0822bbdd6769 print_theory: const constraints;
wenzelm
parents: 16845
diff changeset
   207
    val cnsts' = NameSpace.extern_table (#1 consts, constraints);
16364
dc9f7066d80a refer to name spaces values instead of names;
wenzelm
parents: 16334
diff changeset
   208
    val finals = NameSpace.extern_table (#1 consts, Defs.finals defs);
16334
b773132e3715 print_theory: omit name spaces; NameSpace.extern_table;
wenzelm
parents: 16290
diff changeset
   209
    val axms = NameSpace.extern_table axioms;
b773132e3715 print_theory: omit name spaces; NameSpace.extern_table;
wenzelm
parents: 16290
diff changeset
   210
    val oras = NameSpace.extern_table oracles;
4250
3806a00677ff moved Sign.print_sg to display.ML;
wenzelm
parents: 4210
diff changeset
   211
  in
16437
aa87badf7a3c removed pretty_theory, pprint_theory (see context.ML or thy_info.ML);
wenzelm
parents: 16364
diff changeset
   212
    [Pretty.strs ("names:" :: Context.names_of thy),
16534
wenzelm
parents: 16490
diff changeset
   213
      Pretty.strs ("theory data:" :: Context.theory_data_of thy),
wenzelm
parents: 16490
diff changeset
   214
      Pretty.strs ("proof data:" :: Context.proof_data_of thy),
16127
549fff1d0fc6 renamed cond_extern to extern;
wenzelm
parents: 15574
diff changeset
   215
      Pretty.strs ["name prefix:", NameSpace.path_of naming],
16364
dc9f7066d80a refer to name spaces values instead of names;
wenzelm
parents: 16334
diff changeset
   216
      Pretty.big_list "classes:" (map pretty_classrel clsses),
8720
840c75ab2a7f Pretty.chunks;
wenzelm
parents: 8458
diff changeset
   217
      pretty_default default,
14794
751d5af6d91e adapted tsig/sg interface;
wenzelm
parents: 14644
diff changeset
   218
      pretty_witness witness,
15570
8d8c70b41bab Move towards standard functions.
skalberg
parents: 15531
diff changeset
   219
      Pretty.big_list "syntactic types:" (List.mapPartial (pretty_type true) tdecls),
8d8c70b41bab Move towards standard functions.
skalberg
parents: 15531
diff changeset
   220
      Pretty.big_list "logical types:" (List.mapPartial (pretty_type false) tdecls),
16534
wenzelm
parents: 16490
diff changeset
   221
      Pretty.big_list "type arities:" (pretty_arities arties),
14794
751d5af6d91e adapted tsig/sg interface;
wenzelm
parents: 14644
diff changeset
   222
      Pretty.big_list "consts:" (map pretty_const cnsts),
16937
0822bbdd6769 print_theory: const constraints;
wenzelm
parents: 16845
diff changeset
   223
      Pretty.big_list "const constraints:" (map pretty_const cnsts'),
14996
2571227f3fcc improved print_theory;
wenzelm
parents: 14990
diff changeset
   224
      Pretty.big_list "finals consts:" (map pretty_final finals),
8720
840c75ab2a7f Pretty.chunks;
wenzelm
parents: 8458
diff changeset
   225
      Pretty.big_list "axioms:" (map prt_axm axms),
840c75ab2a7f Pretty.chunks;
wenzelm
parents: 8458
diff changeset
   226
      Pretty.strs ("oracles:" :: (map #1 oras))]
4250
3806a00677ff moved Sign.print_sg to display.ML;
wenzelm
parents: 4210
diff changeset
   227
  end;
3806a00677ff moved Sign.print_sg to display.ML;
wenzelm
parents: 4210
diff changeset
   228
3806a00677ff moved Sign.print_sg to display.ML;
wenzelm
parents: 4210
diff changeset
   229
11883
7b9522995a78 print_goals stuff is back (from locale.ML);
wenzelm
parents: 11501
diff changeset
   230
7b9522995a78 print_goals stuff is back (from locale.ML);
wenzelm
parents: 11501
diff changeset
   231
(** print_goals **)
7b9522995a78 print_goals stuff is back (from locale.ML);
wenzelm
parents: 11501
diff changeset
   232
7b9522995a78 print_goals stuff is back (from locale.ML);
wenzelm
parents: 11501
diff changeset
   233
(* print_goals etc. *)
7b9522995a78 print_goals stuff is back (from locale.ML);
wenzelm
parents: 11501
diff changeset
   234
16534
wenzelm
parents: 16490
diff changeset
   235
val show_consts = ref false;  (*true: show consts with types in proof state output*)
3851
fe9932a7cd46 print_goals: optional output of const types (set show_consts);
wenzelm
parents: 3811
diff changeset
   236
1591
7fa0265dcd13 New module for display/printing operations, taken from drule.ML
paulson
parents:
diff changeset
   237
11883
7b9522995a78 print_goals stuff is back (from locale.ML);
wenzelm
parents: 11501
diff changeset
   238
(*print thm A1,...,An/B in "goal style" -- premises as numbered subgoals*)
7b9522995a78 print_goals stuff is back (from locale.ML);
wenzelm
parents: 11501
diff changeset
   239
7b9522995a78 print_goals stuff is back (from locale.ML);
wenzelm
parents: 11501
diff changeset
   240
local
7b9522995a78 print_goals stuff is back (from locale.ML);
wenzelm
parents: 11501
diff changeset
   241
12081
f9735aad76dc added goals_limit (from tctical.ML);
wenzelm
parents: 12067
diff changeset
   242
fun ins_entry (x, y) [] = [(x, [y])]
f9735aad76dc added goals_limit (from tctical.ML);
wenzelm
parents: 12067
diff changeset
   243
  | ins_entry (x, y) ((pair as (x', ys')) :: pairs) =
f9735aad76dc added goals_limit (from tctical.ML);
wenzelm
parents: 12067
diff changeset
   244
      if x = x' then (x', y ins ys') :: pairs
f9735aad76dc added goals_limit (from tctical.ML);
wenzelm
parents: 12067
diff changeset
   245
      else pair :: ins_entry (x, y) pairs;
f9735aad76dc added goals_limit (from tctical.ML);
wenzelm
parents: 12067
diff changeset
   246
f9735aad76dc added goals_limit (from tctical.ML);
wenzelm
parents: 12067
diff changeset
   247
fun add_consts (Const (c, T), env) = ins_entry (T, (c, T)) env
f9735aad76dc added goals_limit (from tctical.ML);
wenzelm
parents: 12067
diff changeset
   248
  | add_consts (t $ u, env) = add_consts (u, add_consts (t, env))
f9735aad76dc added goals_limit (from tctical.ML);
wenzelm
parents: 12067
diff changeset
   249
  | add_consts (Abs (_, _, t), env) = add_consts (t, env)
f9735aad76dc added goals_limit (from tctical.ML);
wenzelm
parents: 12067
diff changeset
   250
  | add_consts (_, env) = env;
11883
7b9522995a78 print_goals stuff is back (from locale.ML);
wenzelm
parents: 11501
diff changeset
   251
12081
f9735aad76dc added goals_limit (from tctical.ML);
wenzelm
parents: 12067
diff changeset
   252
fun add_vars (Free (x, T), env) = ins_entry (T, (x, ~1)) env
f9735aad76dc added goals_limit (from tctical.ML);
wenzelm
parents: 12067
diff changeset
   253
  | add_vars (Var (xi, T), env) = ins_entry (T, xi) env
f9735aad76dc added goals_limit (from tctical.ML);
wenzelm
parents: 12067
diff changeset
   254
  | add_vars (Abs (_, _, t), env) = add_vars (t, env)
f9735aad76dc added goals_limit (from tctical.ML);
wenzelm
parents: 12067
diff changeset
   255
  | add_vars (t $ u, env) = add_vars (u, add_vars (t, env))
f9735aad76dc added goals_limit (from tctical.ML);
wenzelm
parents: 12067
diff changeset
   256
  | add_vars (_, env) = env;
11883
7b9522995a78 print_goals stuff is back (from locale.ML);
wenzelm
parents: 11501
diff changeset
   257
15574
b1d1b5bfc464 Removed practically all references to Library.foldr.
skalberg
parents: 15570
diff changeset
   258
fun add_varsT (Type (_, Ts), env) = foldr add_varsT env Ts
12081
f9735aad76dc added goals_limit (from tctical.ML);
wenzelm
parents: 12067
diff changeset
   259
  | add_varsT (TFree (x, S), env) = ins_entry (S, (x, ~1)) env
f9735aad76dc added goals_limit (from tctical.ML);
wenzelm
parents: 12067
diff changeset
   260
  | add_varsT (TVar (xi, S), env) = ins_entry (S, xi) env;
11883
7b9522995a78 print_goals stuff is back (from locale.ML);
wenzelm
parents: 11501
diff changeset
   261
16490
wenzelm
parents: 16437
diff changeset
   262
fun sort_idxs vs = map (apsnd (sort (prod_ord string_ord int_ord))) vs;
12081
f9735aad76dc added goals_limit (from tctical.ML);
wenzelm
parents: 12067
diff changeset
   263
fun sort_cnsts cs = map (apsnd (sort_wrt fst)) cs;
f9735aad76dc added goals_limit (from tctical.ML);
wenzelm
parents: 12067
diff changeset
   264
f9735aad76dc added goals_limit (from tctical.ML);
wenzelm
parents: 12067
diff changeset
   265
fun consts_of t = sort_cnsts (add_consts (t, []));
f9735aad76dc added goals_limit (from tctical.ML);
wenzelm
parents: 12067
diff changeset
   266
fun vars_of t = sort_idxs (add_vars (t, []));
f9735aad76dc added goals_limit (from tctical.ML);
wenzelm
parents: 12067
diff changeset
   267
fun varsT_of t = rev (sort_idxs (it_term_types add_varsT (t, [])));
f9735aad76dc added goals_limit (from tctical.ML);
wenzelm
parents: 12067
diff changeset
   268
f9735aad76dc added goals_limit (from tctical.ML);
wenzelm
parents: 12067
diff changeset
   269
in
11883
7b9522995a78 print_goals stuff is back (from locale.ML);
wenzelm
parents: 11501
diff changeset
   270
14876
477c414000f8 pretty_thm/goals_aux, pretty_flexpair: pp;
wenzelm
parents: 14794
diff changeset
   271
fun pretty_goals_aux pp begin_goal (msg, main) maxgoals state =
12081
f9735aad76dc added goals_limit (from tctical.ML);
wenzelm
parents: 12067
diff changeset
   272
  let
f9735aad76dc added goals_limit (from tctical.ML);
wenzelm
parents: 12067
diff changeset
   273
    fun prt_atoms prt prtT (X, xs) = Pretty.block
f9735aad76dc added goals_limit (from tctical.ML);
wenzelm
parents: 12067
diff changeset
   274
      [Pretty.block (Pretty.commas (map prt xs)), Pretty.str " ::",
f9735aad76dc added goals_limit (from tctical.ML);
wenzelm
parents: 12067
diff changeset
   275
        Pretty.brk 1, prtT X];
11883
7b9522995a78 print_goals stuff is back (from locale.ML);
wenzelm
parents: 11501
diff changeset
   276
14876
477c414000f8 pretty_thm/goals_aux, pretty_flexpair: pp;
wenzelm
parents: 14794
diff changeset
   277
    fun prt_var (x, ~1) = Pretty.term pp (Syntax.free x)
477c414000f8 pretty_thm/goals_aux, pretty_flexpair: pp;
wenzelm
parents: 14794
diff changeset
   278
      | prt_var xi = Pretty.term pp (Syntax.var xi);
12081
f9735aad76dc added goals_limit (from tctical.ML);
wenzelm
parents: 12067
diff changeset
   279
14876
477c414000f8 pretty_thm/goals_aux, pretty_flexpair: pp;
wenzelm
parents: 14794
diff changeset
   280
    fun prt_varT (x, ~1) = Pretty.typ pp (TFree (x, []))
477c414000f8 pretty_thm/goals_aux, pretty_flexpair: pp;
wenzelm
parents: 14794
diff changeset
   281
      | prt_varT xi = Pretty.typ pp (TVar (xi, []));
12081
f9735aad76dc added goals_limit (from tctical.ML);
wenzelm
parents: 12067
diff changeset
   282
14876
477c414000f8 pretty_thm/goals_aux, pretty_flexpair: pp;
wenzelm
parents: 14794
diff changeset
   283
    val prt_consts = prt_atoms (Pretty.term pp o Const) (Pretty.typ pp);
477c414000f8 pretty_thm/goals_aux, pretty_flexpair: pp;
wenzelm
parents: 14794
diff changeset
   284
    val prt_vars = prt_atoms prt_var (Pretty.typ pp);
477c414000f8 pretty_thm/goals_aux, pretty_flexpair: pp;
wenzelm
parents: 14794
diff changeset
   285
    val prt_varsT = prt_atoms prt_varT (Pretty.sort pp);
11883
7b9522995a78 print_goals stuff is back (from locale.ML);
wenzelm
parents: 11501
diff changeset
   286
7b9522995a78 print_goals stuff is back (from locale.ML);
wenzelm
parents: 11501
diff changeset
   287
12081
f9735aad76dc added goals_limit (from tctical.ML);
wenzelm
parents: 12067
diff changeset
   288
    fun pretty_list _ _ [] = []
f9735aad76dc added goals_limit (from tctical.ML);
wenzelm
parents: 12067
diff changeset
   289
      | pretty_list name prt lst = [Pretty.big_list name (map prt lst)];
11883
7b9522995a78 print_goals stuff is back (from locale.ML);
wenzelm
parents: 11501
diff changeset
   290
14876
477c414000f8 pretty_thm/goals_aux, pretty_flexpair: pp;
wenzelm
parents: 14794
diff changeset
   291
    fun pretty_subgoal (n, A) = Pretty.blk (0,
477c414000f8 pretty_thm/goals_aux, pretty_flexpair: pp;
wenzelm
parents: 14794
diff changeset
   292
     [Pretty.str (begin_goal ^ " " ^ string_of_int n ^ ". "), Pretty.term pp A]);
12081
f9735aad76dc added goals_limit (from tctical.ML);
wenzelm
parents: 12067
diff changeset
   293
    fun pretty_subgoals As = map pretty_subgoal (1 upto length As ~~ As);
11883
7b9522995a78 print_goals stuff is back (from locale.ML);
wenzelm
parents: 11501
diff changeset
   294
14876
477c414000f8 pretty_thm/goals_aux, pretty_flexpair: pp;
wenzelm
parents: 14794
diff changeset
   295
    val pretty_ffpairs = pretty_list "flex-flex pairs:" (pretty_flexpair pp);
11883
7b9522995a78 print_goals stuff is back (from locale.ML);
wenzelm
parents: 11501
diff changeset
   296
12081
f9735aad76dc added goals_limit (from tctical.ML);
wenzelm
parents: 12067
diff changeset
   297
    val pretty_consts = pretty_list "constants:" prt_consts o consts_of;
f9735aad76dc added goals_limit (from tctical.ML);
wenzelm
parents: 12067
diff changeset
   298
    val pretty_vars = pretty_list "variables:" prt_vars o vars_of;
f9735aad76dc added goals_limit (from tctical.ML);
wenzelm
parents: 12067
diff changeset
   299
    val pretty_varsT = pretty_list "type variables:" prt_varsT o varsT_of;
11883
7b9522995a78 print_goals stuff is back (from locale.ML);
wenzelm
parents: 11501
diff changeset
   300
7b9522995a78 print_goals stuff is back (from locale.ML);
wenzelm
parents: 11501
diff changeset
   301
16290
e661e37a4d50 renamed const_deps to defs;
wenzelm
parents: 16158
diff changeset
   302
    val {prop, tpairs, ...} = Thm.rep_thm state;
13658
c9ad3e64ddcf Changed handling of flex-flex constraints: now stored in separate
berghofe
parents: 12831
diff changeset
   303
    val (As, B) = Logic.strip_horn prop;
12081
f9735aad76dc added goals_limit (from tctical.ML);
wenzelm
parents: 12067
diff changeset
   304
    val ngoals = length As;
11883
7b9522995a78 print_goals stuff is back (from locale.ML);
wenzelm
parents: 11501
diff changeset
   305
12081
f9735aad76dc added goals_limit (from tctical.ML);
wenzelm
parents: 12067
diff changeset
   306
    fun pretty_gs (types, sorts) =
14876
477c414000f8 pretty_thm/goals_aux, pretty_flexpair: pp;
wenzelm
parents: 14794
diff changeset
   307
      (if main then [Pretty.term pp B] else []) @
12081
f9735aad76dc added goals_limit (from tctical.ML);
wenzelm
parents: 12067
diff changeset
   308
       (if ngoals = 0 then [Pretty.str "No subgoals!"]
f9735aad76dc added goals_limit (from tctical.ML);
wenzelm
parents: 12067
diff changeset
   309
        else if ngoals > maxgoals then
15570
8d8c70b41bab Move towards standard functions.
skalberg
parents: 15531
diff changeset
   310
          pretty_subgoals (Library.take (maxgoals, As)) @
12081
f9735aad76dc added goals_limit (from tctical.ML);
wenzelm
parents: 12067
diff changeset
   311
          (if msg then [Pretty.str ("A total of " ^ string_of_int ngoals ^ " subgoals...")]
f9735aad76dc added goals_limit (from tctical.ML);
wenzelm
parents: 12067
diff changeset
   312
           else [])
f9735aad76dc added goals_limit (from tctical.ML);
wenzelm
parents: 12067
diff changeset
   313
        else pretty_subgoals As) @
f9735aad76dc added goals_limit (from tctical.ML);
wenzelm
parents: 12067
diff changeset
   314
      pretty_ffpairs tpairs @
f9735aad76dc added goals_limit (from tctical.ML);
wenzelm
parents: 12067
diff changeset
   315
      (if ! show_consts then pretty_consts prop else []) @
f9735aad76dc added goals_limit (from tctical.ML);
wenzelm
parents: 12067
diff changeset
   316
      (if types then pretty_vars prop else []) @
f9735aad76dc added goals_limit (from tctical.ML);
wenzelm
parents: 12067
diff changeset
   317
      (if sorts then pretty_varsT prop else []);
f9735aad76dc added goals_limit (from tctical.ML);
wenzelm
parents: 12067
diff changeset
   318
  in
f9735aad76dc added goals_limit (from tctical.ML);
wenzelm
parents: 12067
diff changeset
   319
    setmp show_no_free_types true
14178
14a12da7288e Makes interactive proof scripting recognize the show_all_types flag.
skalberg
parents: 13658
diff changeset
   320
      (setmp show_types (! show_types orelse ! show_sorts orelse ! show_all_types)
12081
f9735aad76dc added goals_limit (from tctical.ML);
wenzelm
parents: 12067
diff changeset
   321
        (setmp show_sorts false pretty_gs))
14178
14a12da7288e Makes interactive proof scripting recognize the show_all_types flag.
skalberg
parents: 13658
diff changeset
   322
   (! show_types orelse ! show_sorts orelse ! show_all_types, ! show_sorts)
11883
7b9522995a78 print_goals stuff is back (from locale.ML);
wenzelm
parents: 11501
diff changeset
   323
  end;
7b9522995a78 print_goals stuff is back (from locale.ML);
wenzelm
parents: 11501
diff changeset
   324
12081
f9735aad76dc added goals_limit (from tctical.ML);
wenzelm
parents: 12067
diff changeset
   325
fun pretty_goals_marker bg n th =
16437
aa87badf7a3c removed pretty_theory, pprint_theory (see context.ML or thy_info.ML);
wenzelm
parents: 16364
diff changeset
   326
  pretty_goals_aux (Sign.pp (Thm.theory_of_thm th)) bg (true, true) n th;
12081
f9735aad76dc added goals_limit (from tctical.ML);
wenzelm
parents: 12067
diff changeset
   327
f9735aad76dc added goals_limit (from tctical.ML);
wenzelm
parents: 12067
diff changeset
   328
val pretty_goals = pretty_goals_marker "";
12418
753054ec8e88 tuned print_goals interfaces;
wenzelm
parents: 12081
diff changeset
   329
val print_goals = (Pretty.writeln o Pretty.chunks) oo pretty_goals_marker "";
12081
f9735aad76dc added goals_limit (from tctical.ML);
wenzelm
parents: 12067
diff changeset
   330
1591
7fa0265dcd13 New module for display/printing operations, taken from drule.ML
paulson
parents:
diff changeset
   331
end;
7fa0265dcd13 New module for display/printing operations, taken from drule.ML
paulson
parents:
diff changeset
   332
11883
7b9522995a78 print_goals stuff is back (from locale.ML);
wenzelm
parents: 11501
diff changeset
   333
7b9522995a78 print_goals stuff is back (from locale.ML);
wenzelm
parents: 11501
diff changeset
   334
(* print_current_goals *)
7b9522995a78 print_goals stuff is back (from locale.ML);
wenzelm
parents: 11501
diff changeset
   335
7b9522995a78 print_goals stuff is back (from locale.ML);
wenzelm
parents: 11501
diff changeset
   336
val current_goals_markers = ref ("", "", "");
7b9522995a78 print_goals stuff is back (from locale.ML);
wenzelm
parents: 11501
diff changeset
   337
12418
753054ec8e88 tuned print_goals interfaces;
wenzelm
parents: 12081
diff changeset
   338
fun pretty_current_goals n m th =
11883
7b9522995a78 print_goals stuff is back (from locale.ML);
wenzelm
parents: 11501
diff changeset
   339
  let
7b9522995a78 print_goals stuff is back (from locale.ML);
wenzelm
parents: 11501
diff changeset
   340
    val ref (begin_state, end_state, begin_goal) = current_goals_markers;
7b9522995a78 print_goals stuff is back (from locale.ML);
wenzelm
parents: 11501
diff changeset
   341
    val ngoals = nprems_of th;
7b9522995a78 print_goals stuff is back (from locale.ML);
wenzelm
parents: 11501
diff changeset
   342
  in
12418
753054ec8e88 tuned print_goals interfaces;
wenzelm
parents: 12081
diff changeset
   343
    (if begin_state = "" then [] else [Pretty.str begin_state]) @
753054ec8e88 tuned print_goals interfaces;
wenzelm
parents: 12081
diff changeset
   344
    [Pretty.str ("Level " ^ string_of_int n ^
11883
7b9522995a78 print_goals stuff is back (from locale.ML);
wenzelm
parents: 11501
diff changeset
   345
      (if ngoals > 0 then " (" ^ string_of_int ngoals ^ " subgoal" ^
7b9522995a78 print_goals stuff is back (from locale.ML);
wenzelm
parents: 11501
diff changeset
   346
        (if ngoals <> 1 then "s" else "") ^ ")"
12418
753054ec8e88 tuned print_goals interfaces;
wenzelm
parents: 12081
diff changeset
   347
      else ""))] @
753054ec8e88 tuned print_goals interfaces;
wenzelm
parents: 12081
diff changeset
   348
    pretty_goals_marker begin_goal m th @
753054ec8e88 tuned print_goals interfaces;
wenzelm
parents: 12081
diff changeset
   349
    (if end_state = "" then [] else [Pretty.str end_state])
11883
7b9522995a78 print_goals stuff is back (from locale.ML);
wenzelm
parents: 11501
diff changeset
   350
  end;
7b9522995a78 print_goals stuff is back (from locale.ML);
wenzelm
parents: 11501
diff changeset
   351
12418
753054ec8e88 tuned print_goals interfaces;
wenzelm
parents: 12081
diff changeset
   352
fun print_current_goals_default n m th =
753054ec8e88 tuned print_goals interfaces;
wenzelm
parents: 12081
diff changeset
   353
  Pretty.writeln (Pretty.chunks (pretty_current_goals n m th));
753054ec8e88 tuned print_goals interfaces;
wenzelm
parents: 12081
diff changeset
   354
11883
7b9522995a78 print_goals stuff is back (from locale.ML);
wenzelm
parents: 11501
diff changeset
   355
val print_current_goals_fn = ref print_current_goals_default;
7b9522995a78 print_goals stuff is back (from locale.ML);
wenzelm
parents: 11501
diff changeset
   356
7b9522995a78 print_goals stuff is back (from locale.ML);
wenzelm
parents: 11501
diff changeset
   357
end;
7b9522995a78 print_goals stuff is back (from locale.ML);
wenzelm
parents: 11501
diff changeset
   358
7b9522995a78 print_goals stuff is back (from locale.ML);
wenzelm
parents: 11501
diff changeset
   359
structure BasicDisplay: BASIC_DISPLAY = Display;
7b9522995a78 print_goals stuff is back (from locale.ML);
wenzelm
parents: 11501
diff changeset
   360
open BasicDisplay;