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 **) |