equal
deleted
inserted
replaced
713 (#1 (split_last alphas)); |
713 (#1 (split_last alphas)); |
714 |
714 |
715 val more' = mk_ext rest; |
715 val more' = mk_ext rest; |
716 in |
716 in |
717 list_comb |
717 list_comb |
718 (Syntax.const (Syntax.mark_type (suffix ext_typeN ext)), alphas' @ [more']) |
718 (Syntax.const (Lexicon.mark_type (suffix ext_typeN ext)), alphas' @ [more']) |
719 end |
719 end |
720 | NONE => err ("no fields defined for " ^ ext)) |
720 | NONE => err ("no fields defined for " ^ ext)) |
721 | NONE => err (name ^ " is no proper field")) |
721 | NONE => err (name ^ " is no proper field")) |
722 | mk_ext [] = more; |
722 | mk_ext [] = more; |
723 in |
723 in |
758 (case get_extfields thy ext of |
758 (case get_extfields thy ext of |
759 SOME fields => |
759 SOME fields => |
760 let |
760 let |
761 val (args, rest) = split_args (map fst (fst (split_last fields))) fargs; |
761 val (args, rest) = split_args (map fst (fst (split_last fields))) fargs; |
762 val more' = mk_ext rest; |
762 val more' = mk_ext rest; |
763 in list_comb (Syntax.const (Syntax.mark_const (ext ^ extN)), args @ [more']) end |
763 in list_comb (Syntax.const (Lexicon.mark_const (ext ^ extN)), args @ [more']) end |
764 | NONE => err ("no fields defined for " ^ ext)) |
764 | NONE => err ("no fields defined for " ^ ext)) |
765 | NONE => err (name ^ " is no proper field")) |
765 | NONE => err (name ^ " is no proper field")) |
766 | mk_ext [] = more; |
766 | mk_ext [] = more; |
767 in mk_ext (fields_tr t) end; |
767 in mk_ext (fields_tr t) end; |
768 |
768 |
887 |
887 |
888 in |
888 in |
889 |
889 |
890 fun record_ext_type_tr' name = |
890 fun record_ext_type_tr' name = |
891 let |
891 let |
892 val ext_type_name = Syntax.mark_type (suffix ext_typeN name); |
892 val ext_type_name = Lexicon.mark_type (suffix ext_typeN name); |
893 fun tr' ctxt ts = |
893 fun tr' ctxt ts = |
894 record_type_tr' ctxt (list_comb (Syntax.const ext_type_name, ts)); |
894 record_type_tr' ctxt (list_comb (Syntax.const ext_type_name, ts)); |
895 in (ext_type_name, tr') end; |
895 in (ext_type_name, tr') end; |
896 |
896 |
897 fun record_ext_type_abbr_tr' abbr alphas zeta last_ext schemeT name = |
897 fun record_ext_type_abbr_tr' abbr alphas zeta last_ext schemeT name = |
898 let |
898 let |
899 val ext_type_name = Syntax.mark_type (suffix ext_typeN name); |
899 val ext_type_name = Lexicon.mark_type (suffix ext_typeN name); |
900 fun tr' ctxt ts = |
900 fun tr' ctxt ts = |
901 record_type_abbr_tr' abbr alphas zeta last_ext schemeT ctxt |
901 record_type_abbr_tr' abbr alphas zeta last_ext schemeT ctxt |
902 (list_comb (Syntax.const ext_type_name, ts)); |
902 (list_comb (Syntax.const ext_type_name, ts)); |
903 in (ext_type_name, tr') end; |
903 in (ext_type_name, tr') end; |
904 |
904 |
917 val extern = Consts.extern (ProofContext.consts_of ctxt); |
917 val extern = Consts.extern (ProofContext.consts_of ctxt); |
918 |
918 |
919 fun strip_fields t = |
919 fun strip_fields t = |
920 (case strip_comb t of |
920 (case strip_comb t of |
921 (Const (ext, _), args as (_ :: _)) => |
921 (Const (ext, _), args as (_ :: _)) => |
922 (case try (Syntax.unmark_const o unsuffix extN) ext of |
922 (case try (Lexicon.unmark_const o unsuffix extN) ext of |
923 SOME ext' => |
923 SOME ext' => |
924 (case get_extfields thy ext' of |
924 (case get_extfields thy ext' of |
925 SOME fields => |
925 SOME fields => |
926 (let |
926 (let |
927 val (f :: fs, _) = split_last (map fst fields); |
927 val (f :: fs, _) = split_last (map fst fields); |
944 |
944 |
945 in |
945 in |
946 |
946 |
947 fun record_ext_tr' name = |
947 fun record_ext_tr' name = |
948 let |
948 let |
949 val ext_name = Syntax.mark_const (name ^ extN); |
949 val ext_name = Lexicon.mark_const (name ^ extN); |
950 fun tr' ctxt ts = record_tr' ctxt (list_comb (Syntax.const ext_name, ts)); |
950 fun tr' ctxt ts = record_tr' ctxt (list_comb (Syntax.const ext_name, ts)); |
951 in (ext_name, tr') end; |
951 in (ext_name, tr') end; |
952 |
952 |
953 end; |
953 end; |
954 |
954 |
955 |
955 |
956 local |
956 local |
957 |
957 |
958 fun dest_update ctxt c = |
958 fun dest_update ctxt c = |
959 (case try Syntax.unmark_const c of |
959 (case try Lexicon.unmark_const c of |
960 SOME d => try (unsuffix updateN) (Consts.extern (ProofContext.consts_of ctxt) d) |
960 SOME d => try (unsuffix updateN) (Consts.extern (ProofContext.consts_of ctxt) d) |
961 | NONE => NONE); |
961 | NONE => NONE); |
962 |
962 |
963 fun field_updates_tr' ctxt (tm as Const (c, _) $ k $ u) = |
963 fun field_updates_tr' ctxt (tm as Const (c, _) $ k $ u) = |
964 (case dest_update ctxt c of |
964 (case dest_update ctxt c of |
980 |
980 |
981 in |
981 in |
982 |
982 |
983 fun field_update_tr' name = |
983 fun field_update_tr' name = |
984 let |
984 let |
985 val update_name = Syntax.mark_const (name ^ updateN); |
985 val update_name = Lexicon.mark_const (name ^ updateN); |
986 fun tr' ctxt [t, u] = record_update_tr' ctxt (Syntax.const update_name $ t $ u) |
986 fun tr' ctxt [t, u] = record_update_tr' ctxt (Syntax.const update_name $ t $ u) |
987 | tr' _ _ = raise Match; |
987 | tr' _ _ = raise Match; |
988 in (update_name, tr') end; |
988 in (update_name, tr') end; |
989 |
989 |
990 end; |
990 end; |