src/Pure/Isar/proof_display.ML
changeset 61257 d4af13517fd6
parent 61256 9ce5de06cd3b
child 61258 2be9ea29f9ec
equal deleted inserted replaced
61256:9ce5de06cd3b 61257:d4af13517fd6
   100         val prt_args = Defs.pretty_args ctxt args;
   100         val prt_args = Defs.pretty_args ctxt args;
   101       in Pretty.block (prt_prefix @ [prt_item] @ prt_args) end;
   101       in Pretty.block (prt_prefix @ [prt_item] @ prt_args) end;
   102 
   102 
   103     fun sort_items f = sort (Defs.item_ord o apply2 (snd o f));
   103     fun sort_items f = sort (Defs.item_ord o apply2 (snd o f));
   104 
   104 
   105     fun pretty_finals reds = Pretty.block
       
   106       (Pretty.str "final:" :: Pretty.brk 1 :: Pretty.commas (map (pretty_entry o fst) reds));
       
   107 
       
   108     fun pretty_reduct (lhs, rhs) = Pretty.block
   105     fun pretty_reduct (lhs, rhs) = Pretty.block
   109       ([pretty_entry lhs, Pretty.str "  ->", Pretty.brk 2] @
   106       ([pretty_entry lhs, Pretty.str "  ->", Pretty.brk 2] @
   110         Pretty.commas (map pretty_entry (sort_items fst rhs)));
   107         Pretty.commas (map pretty_entry (sort_items fst rhs)));
   111 
   108 
   112     fun pretty_restrict (entry, name) =
   109     fun pretty_restrict (entry, name) =
   113       Pretty.block ([pretty_entry entry, Pretty.brk 2, Pretty.str ("(from " ^ quote name ^ ")")]);
   110       Pretty.block ([pretty_entry entry, Pretty.brk 2, Pretty.str ("(from " ^ quote name ^ ")")]);
   114 
   111 
   115     val defs = Theory.defs_of thy;
   112     val defs = Theory.defs_of thy;
   116     val {restricts, reducts} = Defs.dest defs;
   113     val {restricts, reducts} = Defs.dest defs;
   117 
   114 
   118     val (reds0, (reds1, reds2)) =
   115     val (reds1, reds2) =
   119       filter_out (prune_item o #1 o #1) reducts
   116       filter_out (prune_item o #1 o #1) reducts
   120       |> map (fn (lhs, rhs) =>
   117       |> map (fn (lhs, rhs) =>
   121         (apfst markup_extern_item lhs, map (apfst markup_extern_item) (filter_out (prune_item o fst) rhs)))
   118         (apfst markup_extern_item lhs, map (apfst markup_extern_item) (filter_out (prune_item o fst) rhs)))
   122       |> sort_items (#1 o #1)
   119       |> sort_items (#1 o #1)
   123       |> List.partition (null o #2)
   120       |> filter_out (null o #2)
   124       ||> List.partition (Defs.plain_args o #2 o #1);
   121       |> List.partition (Defs.plain_args o #2 o #1);
   125 
   122 
   126     val rests = restricts |> map (apfst (apfst markup_extern_item)) |> sort_items (#1 o #1);
   123     val rests = restricts |> map (apfst (apfst markup_extern_item)) |> sort_items (#1 o #1);
   127   in
   124   in
   128     Pretty.big_list "definitions:"
   125     Pretty.big_list "definitions:"
   129       [pretty_finals reds0,
   126       [Pretty.big_list "non-overloaded LHS:" (map pretty_reduct reds1),
   130        Pretty.big_list "non-overloaded:" (map pretty_reduct reds1),
   127        Pretty.big_list "overloaded LHS:" (map pretty_reduct reds2),
   131        Pretty.big_list "overloaded:" (map pretty_reduct reds2),
   128        Pretty.big_list "pattern restrictions due to incomplete LHS:" (map pretty_restrict rests)]
   132        Pretty.big_list "pattern restrictions:" (map pretty_restrict rests)]
       
   133   end;
   129   end;
   134 
   130 
   135 
   131 
   136 
   132 
   137 (** proof items **)
   133 (** proof items **)