doc-src/TutorialI/Datatype/document/Nested.tex
changeset 13758 ee898d32de21
parent 12334 60bf75e157e4
child 13778 61272514e3b5
equal deleted inserted replaced
13757:33b84d172c97 13758:ee898d32de21
    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
    16 \isamarkupfalse%
    17 \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%
    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%
    18 %
    19 %
    19 \begin{isamarkuptext}%
    20 \begin{isamarkuptext}%
    20 \noindent
    21 \noindent
   124 \isamarkupfalse%
   125 \isamarkupfalse%
   125 \isamarkupfalse%
   126 \isamarkupfalse%
   126 \isamarkupfalse%
   127 \isamarkupfalse%
   127 \isamarkupfalse%
   128 \isamarkupfalse%
   128 \isanewline
   129 \isanewline
       
   130 \isanewline
   129 \isamarkupfalse%
   131 \isamarkupfalse%
   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
   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
   131 \isamarkupfalse%
   133 \isamarkupfalse%
   132 \isacommand{apply}{\isacharparenleft}induct{\isacharunderscore}tac\ ts{\isacharcomma}\ simp{\isacharunderscore}all{\isacharparenright}\isanewline
   134 \isacommand{apply}{\isacharparenleft}induct{\isacharunderscore}tac\ ts{\isacharcomma}\ simp{\isacharunderscore}all{\isacharparenright}\isanewline
   133 \isamarkupfalse%
   135 \isamarkupfalse%
   157 Of course, you may also combine mutual and nested recursion of datatypes. For example,
   159 Of course, you may also combine mutual and nested recursion of datatypes. For example,
   158 constructor \isa{Sum} in \S\ref{sec:datatype-mut-rec} could take a list of
   160 constructor \isa{Sum} in \S\ref{sec:datatype-mut-rec} could take a list of
   159 expressions as its argument: \isa{Sum}~\isa{{\isachardoublequote}{\isacharprime}a\ aexp\ list{\isachardoublequote}}.%
   161 expressions as its argument: \isa{Sum}~\isa{{\isachardoublequote}{\isacharprime}a\ aexp\ list{\isachardoublequote}}.%
   160 \end{isamarkuptext}%
   162 \end{isamarkuptext}%
   161 \isamarkuptrue%
   163 \isamarkuptrue%
       
   164 \isanewline
   162 \isamarkupfalse%
   165 \isamarkupfalse%
   163 \end{isabellebody}%
   166 \end{isabellebody}%
   164 %%% Local Variables:
   167 %%% Local Variables:
   165 %%% mode: latex
   168 %%% mode: latex
   166 %%% TeX-master: "root"
   169 %%% TeX-master: "root"