doc-src/TutorialI/Datatype/document/Nested.tex
changeset 13778 61272514e3b5
parent 13758 ee898d32de21
child 15481 fc075ae929e4
equal deleted inserted replaced
13777:23e743ac9cec 13778:61272514e3b5
    11 datatype occurs nested in some other datatype (but not inside itself!).
    11 datatype occurs nested in some other datatype (but not inside itself!).
    12 Consider the following model of terms
    12 Consider the following model of terms
    13 where function symbols can be applied to a list of arguments:%
    13 where function symbols can be applied to a list of arguments:%
    14 \end{isamarkuptext}%
    14 \end{isamarkuptext}%
    15 \isamarkuptrue%
    15 \isamarkuptrue%
    16 \isanewline
       
    17 \isamarkupfalse%
    16 \isamarkupfalse%
    18 \isacommand{datatype}\ {\isacharparenleft}{\isacharprime}v{\isacharcomma}{\isacharprime}f{\isacharparenright}{\isachardoublequote}term{\isachardoublequote}\ {\isacharequal}\ Var\ {\isacharprime}v\ {\isacharbar}\ App\ {\isacharprime}f\ {\isachardoublequote}{\isacharparenleft}{\isacharprime}v{\isacharcomma}{\isacharprime}f{\isacharparenright}term\ list{\isachardoublequote}\isamarkupfalse%
    17 \isacommand{datatype}\ {\isacharparenleft}{\isacharprime}v{\isacharcomma}{\isacharprime}f{\isacharparenright}{\isachardoublequote}term{\isachardoublequote}\ {\isacharequal}\ Var\ {\isacharprime}v\ {\isacharbar}\ App\ {\isacharprime}f\ {\isachardoublequote}{\isacharparenleft}{\isacharprime}v{\isacharcomma}{\isacharprime}f{\isacharparenright}term\ list{\isachardoublequote}\isamarkupfalse%
    19 %
    18 %
    20 \begin{isamarkuptext}%
    19 \begin{isamarkuptext}%
    21 \noindent
    20 \noindent
   125 \isamarkupfalse%
   124 \isamarkupfalse%
   126 \isamarkupfalse%
   125 \isamarkupfalse%
   127 \isamarkupfalse%
   126 \isamarkupfalse%
   128 \isamarkupfalse%
   127 \isamarkupfalse%
   129 \isanewline
   128 \isanewline
   130 \isanewline
       
   131 \isamarkupfalse%
   129 \isamarkupfalse%
   132 \isacommand{lemma}\ {\isacharbrackleft}simp{\isacharbrackright}{\isacharcolon}\ {\isachardoublequote}subst\ s\ {\isacharparenleft}App\ f\ ts{\isacharparenright}\ {\isacharequal}\ App\ f\ {\isacharparenleft}map\ {\isacharparenleft}subst\ s{\isacharparenright}\ ts{\isacharparenright}{\isachardoublequote}\isanewline
   130 \isacommand{lemma}\ {\isacharbrackleft}simp{\isacharbrackright}{\isacharcolon}\ {\isachardoublequote}subst\ s\ {\isacharparenleft}App\ f\ ts{\isacharparenright}\ {\isacharequal}\ App\ f\ {\isacharparenleft}map\ {\isacharparenleft}subst\ s{\isacharparenright}\ ts{\isacharparenright}{\isachardoublequote}\isanewline
   133 \isamarkupfalse%
   131 \isamarkupfalse%
   134 \isacommand{apply}{\isacharparenleft}induct{\isacharunderscore}tac\ ts{\isacharcomma}\ simp{\isacharunderscore}all{\isacharparenright}\isanewline
   132 \isacommand{apply}{\isacharparenleft}induct{\isacharunderscore}tac\ ts{\isacharcomma}\ simp{\isacharunderscore}all{\isacharparenright}\isanewline
   135 \isamarkupfalse%
   133 \isamarkupfalse%
   159 Of course, you may also combine mutual and nested recursion of datatypes. For example,
   157 Of course, you may also combine mutual and nested recursion of datatypes. For example,
   160 constructor \isa{Sum} in \S\ref{sec:datatype-mut-rec} could take a list of
   158 constructor \isa{Sum} in \S\ref{sec:datatype-mut-rec} could take a list of
   161 expressions as its argument: \isa{Sum}~\isa{{\isachardoublequote}{\isacharprime}a\ aexp\ list{\isachardoublequote}}.%
   159 expressions as its argument: \isa{Sum}~\isa{{\isachardoublequote}{\isacharprime}a\ aexp\ list{\isachardoublequote}}.%
   162 \end{isamarkuptext}%
   160 \end{isamarkuptext}%
   163 \isamarkuptrue%
   161 \isamarkuptrue%
   164 \isanewline
       
   165 \isamarkupfalse%
   162 \isamarkupfalse%
   166 \end{isabellebody}%
   163 \end{isabellebody}%
   167 %%% Local Variables:
   164 %%% Local Variables:
   168 %%% mode: latex
   165 %%% mode: latex
   169 %%% TeX-master: "root"
   166 %%% TeX-master: "root"