1150 |
1150 |
1151 |
1151 |
1152 (** cases **) |
1152 (** cases **) |
1153 |
1153 |
1154 fun dest_cases ctxt = |
1154 fun dest_cases ctxt = |
1155 Symtab.fold (fn (a, (c, i)) => cons (i, (a, c))) (#2 (cases_of ctxt)) [] |
1155 Name_Space.fold_table (fn (a, (c, i)) => cons (i, (a, c))) (cases_of ctxt) [] |
1156 |> sort (int_ord o pairself #1) |> map #2; |
1156 |> sort (int_ord o pairself #1) |> map #2; |
1157 |
1157 |
1158 local |
1158 local |
1159 |
1159 |
1160 fun update_case _ _ ("", _) res = res |
1160 fun update_case _ _ ("", _) res = res |
1161 | update_case _ _ (name, NONE) ((space, tab), index) = |
1161 | update_case _ _ (name, NONE) (cases, index) = |
1162 let |
1162 (Name_Space.del_table name cases, index) |
1163 val tab' = Symtab.delete_safe name tab; |
|
1164 in ((space, tab'), index) end |
|
1165 | update_case context is_proper (name, SOME c) (cases, index) = |
1163 | update_case context is_proper (name, SOME c) (cases, index) = |
1166 let |
1164 let |
1167 val (_, cases') = cases |> Name_Space.define context false |
1165 val (_, cases') = cases |> Name_Space.define context false |
1168 (Binding.make (name, Position.none), ((c, is_proper), index)); |
1166 (Binding.make (name, Position.none), ((c, is_proper), index)); |
1169 val index' = index + 1; |
1167 val index' = index + 1; |
1177 |
1175 |
1178 fun update_cases is_proper args ctxt = |
1176 fun update_cases is_proper args ctxt = |
1179 let |
1177 let |
1180 val context = Context.Proof ctxt |> Name_Space.map_naming (K Name_Space.default_naming); |
1178 val context = Context.Proof ctxt |> Name_Space.map_naming (K Name_Space.default_naming); |
1181 val cases = cases_of ctxt; |
1179 val cases = cases_of ctxt; |
1182 val index = Symtab.fold (fn _ => Integer.add 1) (#2 cases) 0; |
1180 val index = Name_Space.fold_table (fn _ => Integer.add 1) cases 0; |
1183 val (cases', _) = fold (update_case context is_proper) args (cases, index); |
1181 val (cases', _) = fold (update_case context is_proper) args (cases, index); |
1184 in map_cases (K cases') ctxt end; |
1182 in map_cases (K cases') ctxt end; |
1185 |
1183 |
1186 fun case_result c ctxt = |
1184 fun case_result c ctxt = |
1187 let |
1185 let |
1228 |
1226 |
1229 (* abbreviations *) |
1227 (* abbreviations *) |
1230 |
1228 |
1231 fun pretty_abbrevs show_globals ctxt = |
1229 fun pretty_abbrevs show_globals ctxt = |
1232 let |
1230 let |
1233 val ((space, consts), (_, globals)) = |
1231 val space = const_space ctxt; |
|
1232 val (constants, globals) = |
1234 pairself (#constants o Consts.dest) (#consts (rep_data ctxt)); |
1233 pairself (#constants o Consts.dest) (#consts (rep_data ctxt)); |
1235 fun add_abbr (_, (_, NONE)) = I |
1234 fun add_abbr (_, (_, NONE)) = I |
1236 | add_abbr (c, (T, SOME t)) = |
1235 | add_abbr (c, (T, SOME t)) = |
1237 if not show_globals andalso Symtab.defined globals c then I |
1236 if not show_globals andalso Symtab.defined globals c then I |
1238 else cons (c, Logic.mk_equals (Const (c, T), t)); |
1237 else cons (c, Logic.mk_equals (Const (c, T), t)); |
1239 val abbrevs = |
1238 val abbrevs = |
1240 Name_Space.extern_table ctxt (space, Symtab.make (Symtab.fold add_abbr consts [])); |
1239 Name_Space.extern_table' ctxt space (Symtab.make (Symtab.fold add_abbr constants [])); |
1241 in |
1240 in |
1242 if null abbrevs then [] |
1241 if null abbrevs then [] |
1243 else [Pretty.big_list "abbreviations:" (map (pretty_term_abbrev ctxt o #2) abbrevs)] |
1242 else [Pretty.big_list "abbreviations:" (map (pretty_term_abbrev ctxt o #2) abbrevs)] |
1244 end; |
1243 end; |
1245 |
1244 |