equal
deleted
inserted
replaced
491 |
491 |
492 (** record simproc **) |
492 (** record simproc **) |
493 |
493 |
494 local |
494 local |
495 |
495 |
496 val sel_upd_pat = [Thm.read_cterm (Theory.sign_of HOL.thy) ("s (u k r)", HOLogic.termT)]; |
496 val sel_upd_pat = [HOLogic.read_cterm (Theory.sign_of HOL.thy) "s (u k r)"]; |
497 |
497 |
498 fun proc sg _ t = |
498 fun proc sg _ t = |
499 (case t of (sel as Const (s, _)) $ ((upd as Const (u, _)) $ k $ r) => |
499 (case t of (sel as Const (s, _)) $ ((upd as Const (u, _)) $ k $ r) => |
500 (case get_selectors sg s of Some () => |
500 (case get_selectors sg s of Some () => |
501 (case get_updates sg u of Some u_name => |
501 (case get_updates sg u of Some u_name => |
558 (* field_typedefs *) |
558 (* field_typedefs *) |
559 |
559 |
560 fun field_typedefs zeta moreT names theory = |
560 fun field_typedefs zeta moreT names theory = |
561 let |
561 let |
562 val alpha = "'a"; |
562 val alpha = "'a"; |
563 val aT = TFree (alpha, HOLogic.termS); |
563 val aT = TFree (alpha, HOLogic.typeS); |
564 val UNIV = HOLogic.mk_UNIV (HOLogic.mk_prodT (aT, moreT)); |
564 val UNIV = HOLogic.mk_UNIV (HOLogic.mk_prodT (aT, moreT)); |
565 |
565 |
566 fun type_def (thy, name) = |
566 fun type_def (thy, name) = |
567 let val (thy', {type_definition, set_def = Some def, ...}) = |
567 let val (thy', {type_definition, set_def = Some def, ...}) = |
568 thy |> setmp TypedefPackage.quiet_mode true |
568 thy |> setmp TypedefPackage.quiet_mode true |
579 let |
579 let |
580 val sign = Theory.sign_of thy; |
580 val sign = Theory.sign_of thy; |
581 val base = Sign.base_name; |
581 val base = Sign.base_name; |
582 val full_path = Sign.full_name_path sign; |
582 val full_path = Sign.full_name_path sign; |
583 |
583 |
584 val xT = TFree (variant alphas "'x", HOLogic.termS); |
584 val xT = TFree (variant alphas "'x", HOLogic.typeS); |
585 |
585 |
586 |
586 |
587 (* prepare declarations and definitions *) |
587 (* prepare declarations and definitions *) |
588 |
588 |
589 (*field constructors*) |
589 (*field constructors*) |
681 val all_xs = parent_xs @ xs; |
681 val all_xs = parent_xs @ xs; |
682 val all_vars = parent_vars @ vars; |
682 val all_vars = parent_vars @ vars; |
683 val all_named_vars = parent_named_vars @ named_vars; |
683 val all_named_vars = parent_named_vars @ named_vars; |
684 |
684 |
685 val zeta = variant alphas "'z"; |
685 val zeta = variant alphas "'z"; |
686 val moreT = TFree (zeta, HOLogic.termS); |
686 val moreT = TFree (zeta, HOLogic.typeS); |
687 val more = Free (moreN, moreT); |
687 val more = Free (moreN, moreT); |
688 val full_moreN = full moreN; |
688 val full_moreN = full moreN; |
689 fun more_part t = mk_more t full_moreN; |
689 fun more_part t = mk_more t full_moreN; |
690 fun more_part_update t x = mk_more_update t (full_moreN, x); |
690 fun more_part_update t x = mk_more_update t (full_moreN, x); |
691 val all_types_more = all_types @ [moreT]; |
691 val all_types_more = all_types @ [moreT]; |