src/Pure/Isar/proof_context.ML
changeset 9515 e6dfc9c9bf89
parent 9504 8168600e88a5
child 9540 02c51ca9c531
equal deleted inserted replaced
9514:8cd9cfc22dd7 9515:e6dfc9c9bf89
    15   val sign_of: context -> Sign.sg
    15   val sign_of: context -> Sign.sg
    16   val prems_of: context -> thm list
    16   val prems_of: context -> thm list
    17   val show_hyps: bool ref
    17   val show_hyps: bool ref
    18   val pretty_thm: thm -> Pretty.T
    18   val pretty_thm: thm -> Pretty.T
    19   val verbose: bool ref
    19   val verbose: bool ref
       
    20   val setmp_verbose: ('a -> 'b) -> 'a -> 'b
    20   val print_binds: context -> unit
    21   val print_binds: context -> unit
    21   val print_thms: context -> unit
    22   val print_thms: context -> unit
    22   val print_cases: context -> unit
    23   val print_cases: context -> unit
    23   val pretty_prems: context -> Pretty.T list
    24   val pretty_prems: context -> Pretty.T list
    24   val pretty_context: context -> Pretty.T list
    25   val pretty_context: context -> Pretty.T list
   149 
   150 
   150 val verbose = ref false;
   151 val verbose = ref false;
   151 fun verb f x = if ! verbose then f (x ()) else [];
   152 fun verb f x = if ! verbose then f (x ()) else [];
   152 fun verb_single x = verb Library.single x;
   153 fun verb_single x = verb Library.single x;
   153 
   154 
       
   155 fun setmp_verbose f x = Library.setmp verbose true f x;
       
   156 
   154 fun pretty_items prt name items =
   157 fun pretty_items prt name items =
   155   let
   158   let
   156     fun prt_itms (name, [x]) = Pretty.block [Pretty.str (name ^ ":"), Pretty.brk 1, prt x]
   159     fun prt_itms (name, [x]) = Pretty.block [Pretty.str (name ^ ":"), Pretty.brk 1, prt x]
   157       | prt_itms (name, xs) = Pretty.big_list (name ^ ":") (map prt xs);
   160       | prt_itms (name, xs) = Pretty.big_list (name ^ ":") (map prt xs);
   158   in
   161   in
   230 
   233 
   231     (*fixes*)
   234     (*fixes*)
   232     fun prt_fix (x, x') = Pretty.block
   235     fun prt_fix (x, x') = Pretty.block
   233       [prt_term (Syntax.free x), Pretty.str " =", Pretty.brk 1, prt_term (Syntax.free x')];
   236       [prt_term (Syntax.free x), Pretty.str " =", Pretty.brk 1, prt_term (Syntax.free x')];
   234 
   237 
   235     fun prt_fixes xs = Pretty.block (Pretty.str "fixed variables:" :: Pretty.brk 1 ::
   238     fun prt_fixes [] = []
   236       Pretty.commas (map prt_fix xs));
   239       | prt_fixes xs = [Pretty.block (Pretty.str "fixed variables:" :: Pretty.brk 1 ::
       
   240           Pretty.commas (map prt_fix xs))];
   237 
   241 
   238     (*defaults*)
   242     (*defaults*)
   239     fun prt_atom prt prtT (x, X) = Pretty.block
   243     fun prt_atom prt prtT (x, X) = Pretty.block
   240       [prt x, Pretty.str " ::", Pretty.brk 1, prtT X];
   244       [prt x, Pretty.str " ::", Pretty.brk 1, prtT X];
   241 
   245 
   247 
   251 
   248     val prt_defT = prt_atom prt_var prt_typ;
   252     val prt_defT = prt_atom prt_var prt_typ;
   249     val prt_defS = prt_atom prt_varT prt_sort;
   253     val prt_defS = prt_atom prt_varT prt_sort;
   250   in
   254   in
   251     verb_single (K pretty_thy) @
   255     verb_single (K pretty_thy) @
   252     (if null fixes then [] else [prt_fixes (rev fixes)]) @
   256     prt_fixes (rev (filter_out (can Syntax.dest_internal o #1) fixes)) @
   253     pretty_prems ctxt @
   257     pretty_prems ctxt @
   254     verb pretty_binds (K ctxt) @
   258     verb pretty_binds (K ctxt) @
   255     verb pretty_thms (K ctxt) @
   259     verb pretty_thms (K ctxt) @
   256     verb pretty_cases (K ctxt) @
   260     verb pretty_cases (K ctxt) @
   257     verb_single (fn () => Pretty.big_list "type constraints:" (map prt_defT (Vartab.dest types))) @
   261     verb_single (fn () => Pretty.big_list "type constraints:" (map prt_defT (Vartab.dest types))) @