533 The syntactic entity \synt{name} denotes an identifier, \synt{mixfix} denotes |
533 The syntactic entity \synt{name} denotes an identifier, \synt{mixfix} denotes |
534 the usual parenthesized mixfix notation, and \synt{typefree} denotes fixed type |
534 the usual parenthesized mixfix notation, and \synt{typefree} denotes fixed type |
535 variable (@{typ 'a}, @{typ 'b}, \ldots) \cite{isabelle-isar-ref}. |
535 variable (@{typ 'a}, @{typ 'b}, \ldots) \cite{isabelle-isar-ref}. |
536 |
536 |
537 The optional names preceding the type variables allow to override the default |
537 The optional names preceding the type variables allow to override the default |
538 names of the set functions (@{text set1_t}, \ldots, @{text setM_t}). Type |
538 names of the set functions (@{text set\<^sub>1_t}, \ldots, @{text set\<^sub>m_t}). Type |
539 arguments can be marked as dead by entering ``@{text dead}'' in front of the |
539 arguments can be marked as dead by entering ``@{text dead}'' in front of the |
540 type variable (e.g., ``@{text "(dead 'a)"}''); otherwise, they are live or dead |
540 type variable (e.g., ``@{text "(dead 'a)"}''); otherwise, they are live or dead |
541 (and a set function is generated or not) depending on where they occur in the |
541 (and a set function is generated or not) depending on where they occur in the |
542 right-hand sides of the definition. Declaring a type argument as dead can speed |
542 right-hand sides of the definition. Declaring a type argument as dead can speed |
543 up the type definition but will prevent any later (co)recursion through that |
543 up the type definition but will prevent any later (co)recursion through that |
645 |
645 |
646 \begin{tabular}{@ {}ll@ {}} |
646 \begin{tabular}{@ {}ll@ {}} |
647 Case combinator: & |
647 Case combinator: & |
648 @{text t.case_t} (rendered using the familiar @{text case}--@{text of} syntax) \\ |
648 @{text t.case_t} (rendered using the familiar @{text case}--@{text of} syntax) \\ |
649 Discriminators: & |
649 Discriminators: & |
650 @{text "t.is_C\<^sub>1"}$, \ldots, $@{text "t.is_C\<^sub>n"} \\ |
650 @{text t.is_C\<^sub>1}$, \ldots, $@{text t.is_C\<^sub>n} \\ |
651 Selectors: & |
651 Selectors: & |
652 @{text t.un_C\<^sub>11}$, \ldots, $@{text t.un_C\<^sub>1k\<^sub>1} \\ |
652 @{text t.un_C\<^sub>11}$, \ldots, $@{text t.un_C\<^sub>1k\<^sub>1} \\ |
653 & \quad\vdots \\ |
653 & \quad\vdots \\ |
654 & @{text t.un_C\<^sub>n1}$, \ldots, $@{text t.un_C\<^sub>nk\<^sub>n} \\ |
654 & @{text t.un_C\<^sub>n1}$, \ldots, $@{text t.un_C\<^sub>nk\<^sub>n} \\ |
655 Set functions: & |
655 Set functions: & |
656 @{text t.set1_t}, \ldots, @{text t.setm_t} \\ |
656 @{text t.set\<^sub>1_t}, \ldots, @{text t.set\<^sub>m_t} \\ |
657 Map function: & |
657 Map function: & |
658 @{text t.map_t} \\ |
658 @{text t.map_t} \\ |
659 Relator: & |
659 Relator: & |
660 @{text t.rel_t} \\ |
660 @{text t.rel_t} \\ |
661 Recursor: & |
661 Recursor: & |
858 |
858 |
859 \item[@{text "t."}\hthm{set} @{text "[simp, code]"}\rm:] ~ \\ |
859 \item[@{text "t."}\hthm{set} @{text "[simp, code]"}\rm:] ~ \\ |
860 @{thm list.set(1)[no_vars]} \\ |
860 @{thm list.set(1)[no_vars]} \\ |
861 @{thm list.set(2)[no_vars]} |
861 @{thm list.set(2)[no_vars]} |
862 |
862 |
863 \item[@{text "t."}\hthm{set_cases}\rm:] ~ \\ |
863 \item[@{text "t."}\hthm{set_cases} @{text "[consumes 1, cases set: set\<^sub>i_t]"}\rm:] ~ \\ |
864 @{thm list.set_cases[no_vars]} |
864 @{thm list.set_cases[no_vars]} |
865 |
865 |
866 \item[@{text "t."}\hthm{set_empty}\rm:] ~ \\ |
866 \item[@{text "t."}\hthm{set_empty}\rm:] ~ \\ |
867 @{thm list.set_empty[no_vars]} |
867 @{thm list.set_empty[no_vars]} |
868 |
868 |