equal
deleted
inserted
replaced
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" |