doc-src/TutorialI/Misc/document/simp.tex
changeset 13778 61272514e3b5
parent 13758 ee898d32de21
child 13791 3b6ff7ceaf27
equal deleted inserted replaced
13777:23e743ac9cec 13778:61272514e3b5
   215 \end{isabelle}
   215 \end{isabelle}
   216 can be proved by simplification. Thus we could have proved the lemma outright by%
   216 can be proved by simplification. Thus we could have proved the lemma outright by%
   217 \end{isamarkuptxt}%
   217 \end{isamarkuptxt}%
   218 \isamarkuptrue%
   218 \isamarkuptrue%
   219 \isamarkupfalse%
   219 \isamarkupfalse%
   220 \isanewline
   220 \isamarkupfalse%
   221 \isamarkupfalse%
   221 \isacommand{apply}{\isacharparenleft}simp\ add{\isacharcolon}\ xor{\isacharunderscore}def{\isacharparenright}\isanewline
   222 \isacommand{apply}{\isacharparenleft}simp\ add{\isacharcolon}\ xor{\isacharunderscore}def{\isacharparenright}\isamarkupfalse%
   222 \isamarkupfalse%
   223 \isamarkupfalse%
   223 \isamarkupfalse%
   224 %
   224 %
   225 \begin{isamarkuptext}%
   225 \begin{isamarkuptext}%
   226 \noindent
   226 \noindent
   227 Of course we can also unfold definitions in the middle of a proof.
   227 Of course we can also unfold definitions in the middle of a proof.
   291 \isa{{\isacharparenleft}rev\ xs\ {\isacharequal}\ {\isacharbrackleft}{\isacharbrackright}{\isacharparenright}\ {\isacharequal}\ {\isacharparenleft}xs\ {\isacharequal}\ {\isacharbrackleft}{\isacharbrackright}{\isacharparenright}}
   291 \isa{{\isacharparenleft}rev\ xs\ {\isacharequal}\ {\isacharbrackleft}{\isacharbrackright}{\isacharparenright}\ {\isacharequal}\ {\isacharparenleft}xs\ {\isacharequal}\ {\isacharbrackleft}{\isacharbrackright}{\isacharparenright}}
   292 is present as well,
   292 is present as well,
   293 the lemma below is proved by plain simplification:%
   293 the lemma below is proved by plain simplification:%
   294 \end{isamarkuptext}%
   294 \end{isamarkuptext}%
   295 \isamarkuptrue%
   295 \isamarkuptrue%
   296 \isacommand{lemma}\ {\isachardoublequote}xs\ {\isasymnoteq}\ {\isacharbrackleft}{\isacharbrackright}\ {\isasymLongrightarrow}\ hd{\isacharparenleft}rev\ xs{\isacharparenright}\ {\isacharhash}\ tl{\isacharparenleft}rev\ xs{\isacharparenright}\ {\isacharequal}\ rev\ xs{\isachardoublequote}\isamarkupfalse%
   296 \isacommand{lemma}\ {\isachardoublequote}xs\ {\isasymnoteq}\ {\isacharbrackleft}{\isacharbrackright}\ {\isasymLongrightarrow}\ hd{\isacharparenleft}rev\ xs{\isacharparenright}\ {\isacharhash}\ tl{\isacharparenleft}rev\ xs{\isacharparenright}\ {\isacharequal}\ rev\ xs{\isachardoublequote}\isanewline
       
   297 \isamarkupfalse%
   297 \isamarkupfalse%
   298 \isamarkupfalse%
   298 %
   299 %
   299 \begin{isamarkuptext}%
   300 \begin{isamarkuptext}%
   300 \noindent
   301 \noindent
   301 The conditional equation \isa{hd{\isacharunderscore}Cons{\isacharunderscore}tl} above
   302 The conditional equation \isa{hd{\isacharunderscore}Cons{\isacharunderscore}tl} above
   339 
   340 
   340 This splitting idea generalizes from \isa{if} to \sdx{case}.
   341 This splitting idea generalizes from \isa{if} to \sdx{case}.
   341 Let us simplify a case analysis over lists:\index{*list.split (theorem)}%
   342 Let us simplify a case analysis over lists:\index{*list.split (theorem)}%
   342 \end{isamarkuptxt}%
   343 \end{isamarkuptxt}%
   343 \isamarkuptrue%
   344 \isamarkuptrue%
   344 \isanewline
       
   345 \isamarkupfalse%
   345 \isamarkupfalse%
   346 \isacommand{lemma}\ {\isachardoublequote}{\isacharparenleft}case\ xs\ of\ {\isacharbrackleft}{\isacharbrackright}\ {\isasymRightarrow}\ zs\ {\isacharbar}\ y{\isacharhash}ys\ {\isasymRightarrow}\ y{\isacharhash}{\isacharparenleft}ys{\isacharat}zs{\isacharparenright}{\isacharparenright}\ {\isacharequal}\ xs{\isacharat}zs{\isachardoublequote}\isanewline
   346 \isacommand{lemma}\ {\isachardoublequote}{\isacharparenleft}case\ xs\ of\ {\isacharbrackleft}{\isacharbrackright}\ {\isasymRightarrow}\ zs\ {\isacharbar}\ y{\isacharhash}ys\ {\isasymRightarrow}\ y{\isacharhash}{\isacharparenleft}ys{\isacharat}zs{\isacharparenright}{\isacharparenright}\ {\isacharequal}\ xs{\isacharat}zs{\isachardoublequote}\isanewline
   347 \isamarkupfalse%
   347 \isamarkupfalse%
   348 \isacommand{apply}{\isacharparenleft}split\ list{\isachardot}split{\isacharparenright}\isamarkupfalse%
   348 \isacommand{apply}{\isacharparenleft}split\ list{\isachardot}split{\isacharparenright}\isamarkupfalse%
   349 %
   349 %
   360 for adding splitting rules explicitly.  The
   360 for adding splitting rules explicitly.  The
   361 lemma above can be proved in one step by%
   361 lemma above can be proved in one step by%
   362 \end{isamarkuptxt}%
   362 \end{isamarkuptxt}%
   363 \isamarkuptrue%
   363 \isamarkuptrue%
   364 \isamarkupfalse%
   364 \isamarkupfalse%
   365 \isanewline
   365 \isamarkupfalse%
   366 \isamarkupfalse%
   366 \isacommand{apply}{\isacharparenleft}simp\ split{\isacharcolon}\ list{\isachardot}split{\isacharparenright}\isanewline
   367 \isacommand{apply}{\isacharparenleft}simp\ split{\isacharcolon}\ list{\isachardot}split{\isacharparenright}\isamarkupfalse%
   367 \isamarkupfalse%
   368 \isamarkupfalse%
   368 \isamarkupfalse%
   369 %
   369 %
   370 \begin{isamarkuptext}%
   370 \begin{isamarkuptext}%
   371 \noindent
   371 \noindent
   372 whereas \isacommand{apply}\isa{{\isacharparenleft}simp{\isacharparenright}} alone will not succeed.
   372 whereas \isacommand{apply}\isa{{\isacharparenleft}simp{\isacharparenright}} alone will not succeed.
   382 \noindent
   382 \noindent
   383 The \isa{split} attribute can be removed with the \isa{del} modifier,
   383 The \isa{split} attribute can be removed with the \isa{del} modifier,
   384 either locally%
   384 either locally%
   385 \end{isamarkuptext}%
   385 \end{isamarkuptext}%
   386 \isamarkuptrue%
   386 \isamarkuptrue%
   387 \isanewline
   387 \isamarkupfalse%
   388 \isamarkupfalse%
   388 \isacommand{apply}{\isacharparenleft}simp\ split\ del{\isacharcolon}\ split{\isacharunderscore}if{\isacharparenright}\isanewline
   389 \isacommand{apply}{\isacharparenleft}simp\ split\ del{\isacharcolon}\ split{\isacharunderscore}if{\isacharparenright}\isamarkupfalse%
   389 \isamarkupfalse%
   390 \isamarkupfalse%
   390 \isamarkupfalse%
   391 %
   391 %
   392 \begin{isamarkuptext}%
   392 \begin{isamarkuptext}%
   393 \noindent
   393 \noindent
   394 or globally:%
   394 or globally:%
   452 \isamarkuptrue%
   452 \isamarkuptrue%
   453 \isacommand{ML}\ {\isachardoublequote}set\ trace{\isacharunderscore}simp{\isachardoublequote}\isanewline
   453 \isacommand{ML}\ {\isachardoublequote}set\ trace{\isacharunderscore}simp{\isachardoublequote}\isanewline
   454 \isamarkupfalse%
   454 \isamarkupfalse%
   455 \isacommand{lemma}\ {\isachardoublequote}rev\ {\isacharbrackleft}a{\isacharbrackright}\ {\isacharequal}\ {\isacharbrackleft}{\isacharbrackright}{\isachardoublequote}\isanewline
   455 \isacommand{lemma}\ {\isachardoublequote}rev\ {\isacharbrackleft}a{\isacharbrackright}\ {\isacharequal}\ {\isacharbrackleft}{\isacharbrackright}{\isachardoublequote}\isanewline
   456 \isamarkupfalse%
   456 \isamarkupfalse%
   457 \isacommand{apply}{\isacharparenleft}simp{\isacharparenright}\isamarkupfalse%
   457 \isacommand{apply}{\isacharparenleft}simp{\isacharparenright}\isanewline
       
   458 \isamarkupfalse%
   458 \isamarkupfalse%
   459 \isamarkupfalse%
   459 %
   460 %
   460 \begin{isamarkuptext}%
   461 \begin{isamarkuptext}%
   461 \noindent
   462 \noindent
   462 produces the trace
   463 produces the trace
   490 simplifier are often nested, for instance when solving conditions of rewrite
   491 simplifier are often nested, for instance when solving conditions of rewrite
   491 rules.  Thus it is advisable to reset it:%
   492 rules.  Thus it is advisable to reset it:%
   492 \end{isamarkuptext}%
   493 \end{isamarkuptext}%
   493 \isamarkuptrue%
   494 \isamarkuptrue%
   494 \isacommand{ML}\ {\isachardoublequote}reset\ trace{\isacharunderscore}simp{\isachardoublequote}\isanewline
   495 \isacommand{ML}\ {\isachardoublequote}reset\ trace{\isacharunderscore}simp{\isachardoublequote}\isanewline
   495 \isamarkupfalse%
       
   496 \isanewline
   496 \isanewline
       
   497 \isamarkupfalse%
   497 \isamarkupfalse%
   498 \isamarkupfalse%
   498 \end{isabellebody}%
   499 \end{isabellebody}%
   499 %%% Local Variables:
   500 %%% Local Variables:
   500 %%% mode: latex
   501 %%% mode: latex
   501 %%% TeX-master: "root"
   502 %%% TeX-master: "root"