# HG changeset patch # User paulson # Date 983360268 -3600 # Node ID c6e49929e544ebac1c03d31ba537fb216bbf06bb # Parent 63f3e98df2a46656e27bfc8e7f74a8445f0fb52b auto-update diff -r 63f3e98df2a4 -r c6e49929e544 doc-src/TutorialI/Advanced/document/WFrec.tex --- a/doc-src/TutorialI/Advanced/document/WFrec.tex Tue Feb 27 23:25:47 2001 +0100 +++ b/doc-src/TutorialI/Advanced/document/WFrec.tex Wed Feb 28 12:37:48 2001 +0100 @@ -90,7 +90,7 @@ \isacommand{apply}\ {\isacharparenleft}clarify{\isacharcomma}\ simp\ add{\isacharcolon}\ measure{\isacharunderscore}def\ inv{\isacharunderscore}image{\isacharunderscore}def{\isacharparenright}% \begin{isamarkuptxt}% \begin{isabelle}% -\ {\isadigit{1}}{\isachardot}\ {\isasymAnd}x\ y{\isachardot}\ {\isasymlbrakk}y\ {\isacharless}\ x{\isacharsemicolon}\ x\ {\isasymle}\ N{\isasymrbrakk}\ {\isasymLongrightarrow}\ N\ {\isacharminus}\ x\ {\isacharless}\ N\ {\isacharminus}\ y% +\ {\isadigit{1}}{\isachardot}\ {\isasymAnd}a\ b{\isachardot}\ {\isasymlbrakk}b\ {\isacharless}\ a{\isacharsemicolon}\ a\ {\isasymle}\ N{\isasymrbrakk}\ {\isasymLongrightarrow}\ N\ {\isacharminus}\ a\ {\isacharless}\ N\ {\isacharminus}\ b% \end{isabelle} \noindent diff -r 63f3e98df2a4 -r c6e49929e544 doc-src/TutorialI/Inductive/document/Advanced.tex --- a/doc-src/TutorialI/Inductive/document/Advanced.tex Tue Feb 27 23:25:47 2001 +0100 +++ b/doc-src/TutorialI/Inductive/document/Advanced.tex Wed Feb 28 12:37:48 2001 +0100 @@ -1,218 +1,218 @@ % -\begin{isabelle} -\def\isabellecontext{Advanced} +\begin{isabellebody}% +\def\isabellecontext{Advanced}% \isanewline -\isacommand{theory}\ Advanced\ =\ Even:\isanewline +\isacommand{theory}\ Advanced\ {\isacharequal}\ Even{\isacharcolon}\isanewline \isanewline \isanewline -\isacommand{datatype}\ 'f\ gterm\ =\ Apply\ 'f\ "'f\ gterm\ list"\isanewline +\isacommand{datatype}\ {\isacharprime}f\ gterm\ {\isacharequal}\ Apply\ {\isacharprime}f\ {\isachardoublequote}{\isacharprime}f\ gterm\ list{\isachardoublequote}\isanewline \isanewline -\isacommand{datatype}\ integer_op\ =\ Number\ int\ |\ UnaryMinus\ |\ Plus\isanewline +\isacommand{datatype}\ integer{\isacharunderscore}op\ {\isacharequal}\ Number\ int\ {\isacharbar}\ UnaryMinus\ {\isacharbar}\ Plus\isanewline \isanewline -\isacommand{consts}\ gterms\ ::\ "'f\ set\ \isasymRightarrow \ 'f\ gterm\ set"\isanewline -\isacommand{inductive}\ "gterms\ F"\isanewline +\isacommand{consts}\ gterms\ {\isacharcolon}{\isacharcolon}\ {\isachardoublequote}{\isacharprime}f\ set\ {\isasymRightarrow}\ {\isacharprime}f\ gterm\ set{\isachardoublequote}\isanewline +\isacommand{inductive}\ {\isachardoublequote}gterms\ F{\isachardoublequote}\isanewline \isakeyword{intros}\isanewline -step[intro!]:\ "\isasymlbrakk \isasymforall t\ \isasymin \ set\ args.\ t\ \isasymin \ gterms\ F;\ \ f\ \isasymin \ F\isasymrbrakk \isanewline -\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \isasymLongrightarrow \ (Apply\ f\ args)\ \isasymin \ gterms\ F"\isanewline +step{\isacharbrackleft}intro{\isacharbang}{\isacharbrackright}{\isacharcolon}\ {\isachardoublequote}{\isasymlbrakk}{\isasymforall}t\ {\isasymin}\ set\ args{\isachardot}\ t\ {\isasymin}\ gterms\ F{\isacharsemicolon}\ \ f\ {\isasymin}\ F{\isasymrbrakk}\isanewline +\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ {\isasymLongrightarrow}\ {\isacharparenleft}Apply\ f\ args{\isacharparenright}\ {\isasymin}\ gterms\ F{\isachardoublequote}\isanewline \isanewline -\isacommand{lemma}\ gterms_mono:\ "F\isasymsubseteq G\ \isasymLongrightarrow \ gterms\ F\ \isasymsubseteq \ gterms\ G"\isanewline +\isacommand{lemma}\ gterms{\isacharunderscore}mono{\isacharcolon}\ {\isachardoublequote}F{\isasymsubseteq}G\ {\isasymLongrightarrow}\ gterms\ F\ {\isasymsubseteq}\ gterms\ G{\isachardoublequote}\isanewline \isacommand{apply}\ clarify\isanewline -\isacommand{apply}\ (erule\ gterms.induct) -\begin{isamarkuptxt} -\begin{isabelle} -\ 1.\ \isasymAnd x\ args\ f.\isanewline -\isaindent{\ 1.\ \ \ \ }\isasymlbrakk F\ \isasymsubseteq \ G;\ \isasymforall t\isasymin set\ args.\ t\ \isasymin \ gterms\ F\ \isasymand \ t\ \isasymin \ gterms\ G;\ f\ \isasymin \ F\isasymrbrakk \isanewline -\isaindent{\ 1.\ \ \ \ }\isasymLongrightarrow \ Apply\ f\ args\ \isasymin \ gterms\ G% +\isacommand{apply}\ {\isacharparenleft}erule\ gterms{\isachardot}induct{\isacharparenright}% +\begin{isamarkuptxt}% +\begin{isabelle}% +\ {\isadigit{1}}{\isachardot}\ {\isasymAnd}x\ args\ f{\isachardot}\isanewline +\isaindent{\ {\isadigit{1}}{\isachardot}\ \ \ \ }{\isasymlbrakk}F\ {\isasymsubseteq}\ G{\isacharsemicolon}\ {\isasymforall}t{\isasymin}set\ args{\isachardot}\ t\ {\isasymin}\ gterms\ F\ {\isasymand}\ t\ {\isasymin}\ gterms\ G{\isacharsemicolon}\ f\ {\isasymin}\ F{\isasymrbrakk}\isanewline +\isaindent{\ {\isadigit{1}}{\isachardot}\ \ \ \ }{\isasymLongrightarrow}\ Apply\ f\ args\ {\isasymin}\ gterms\ G% +\end{isabelle}% +\end{isamarkuptxt}% +\isacommand{apply}\ blast\isanewline +\isacommand{done}% +\begin{isamarkuptext}% +\begin{isabelle}% +\ \ \ \ \ {\isasymlbrakk}a\ {\isasymin}\ even{\isacharsemicolon}\ a\ {\isacharequal}\ {\isadigit{0}}\ {\isasymLongrightarrow}\ P{\isacharsemicolon}\ {\isasymAnd}n{\isachardot}\ {\isasymlbrakk}a\ {\isacharequal}\ Suc\ {\isacharparenleft}Suc\ n{\isacharparenright}{\isacharsemicolon}\ n\ {\isasymin}\ even{\isasymrbrakk}\ {\isasymLongrightarrow}\ P{\isasymrbrakk}\ {\isasymLongrightarrow}\ P% \end{isabelle} -\end{isamarkuptxt} -\isacommand{apply}\ blast\isanewline -\isacommand{done} -\begin{isamarkuptext} -\begin{isabelle} -\ \ \ \ \ \isasymlbrakk a\ \isasymin \ even;\ a\ =\ 0\ \isasymLongrightarrow \ P;\ \isasymAnd n.\ \isasymlbrakk a\ =\ Suc\ (Suc\ n);\ n\ \isasymin \ even\isasymrbrakk \ \isasymLongrightarrow \ P\isasymrbrakk \ \isasymLongrightarrow \ P% \rulename{even.cases} -\end{isabelle} Just as a demo I include the two forms that Markus has made available. First the one for binding the result to a name% -\end{isamarkuptext} -\isacommand{inductive_cases}\ Suc_Suc_cases\ [elim!]:\isanewline -\ \ "Suc(Suc\ n)\ \isasymin \ even"\isanewline +\end{isamarkuptext}% +\isacommand{inductive{\isacharunderscore}cases}\ Suc{\isacharunderscore}Suc{\isacharunderscore}cases\ {\isacharbrackleft}elim{\isacharbang}{\isacharbrackright}{\isacharcolon}\isanewline +\ \ {\isachardoublequote}Suc{\isacharparenleft}Suc\ n{\isacharparenright}\ {\isasymin}\ even{\isachardoublequote}\isanewline \isanewline -\isacommand{thm}\ Suc_Suc_cases% -\begin{isamarkuptext} -\begin{isabelle} -\ \ \ \ \ \isasymlbrakk Suc\ (Suc\ n)\ \isasymin \ even;\ n\ \isasymin \ even\ \isasymLongrightarrow \ P\isasymrbrakk \ \isasymLongrightarrow \ P% +\isacommand{thm}\ Suc{\isacharunderscore}Suc{\isacharunderscore}cases% +\begin{isamarkuptext}% +\begin{isabelle}% +\ \ \ \ \ {\isasymlbrakk}Suc\ {\isacharparenleft}Suc\ n{\isacharparenright}\ {\isasymin}\ even{\isacharsemicolon}\ n\ {\isasymin}\ even\ {\isasymLongrightarrow}\ P{\isasymrbrakk}\ {\isasymLongrightarrow}\ P% +\end{isabelle} \rulename{Suc_Suc_cases} -\end{isabelle} and now the one for local usage:% -\end{isamarkuptext} -\isacommand{lemma}\ "Suc(Suc\ n)\ \isasymin \ even\ \isasymLongrightarrow \ P\ n"\isanewline -\isacommand{apply}\ (ind_cases\ "Suc(Suc\ n)\ \isasymin \ even")\isanewline +\end{isamarkuptext}% +\isacommand{lemma}\ {\isachardoublequote}Suc{\isacharparenleft}Suc\ n{\isacharparenright}\ {\isasymin}\ even\ {\isasymLongrightarrow}\ P\ n{\isachardoublequote}\isanewline +\isacommand{apply}\ {\isacharparenleft}ind{\isacharunderscore}cases\ {\isachardoublequote}Suc{\isacharparenleft}Suc\ n{\isacharparenright}\ {\isasymin}\ even{\isachardoublequote}{\isacharparenright}\isanewline \isacommand{oops}\isanewline \isanewline -\isacommand{inductive_cases}\ gterm_Apply_elim\ [elim!]:\ "Apply\ f\ args\ \isasymin \ gterms\ F" -\begin{isamarkuptext} +\isacommand{inductive{\isacharunderscore}cases}\ gterm{\isacharunderscore}Apply{\isacharunderscore}elim\ {\isacharbrackleft}elim{\isacharbang}{\isacharbrackright}{\isacharcolon}\ {\isachardoublequote}Apply\ f\ args\ {\isasymin}\ gterms\ F{\isachardoublequote}% +\begin{isamarkuptext}% this is what we get: -\begin{isabelle} -\ \ \ \ \ \isasymlbrakk Apply\ f\ args\ \isasymin \ gterms\ F;\ \isasymlbrakk \isasymforall t\isasymin set\ args.\ t\ \isasymin \ gterms\ F;\ f\ \isasymin \ F\isasymrbrakk \ \isasymLongrightarrow \ P\isasymrbrakk \ \isasymLongrightarrow \ P% -\rulename{gterm_Apply_elim} +\begin{isabelle}% +\ \ \ \ \ {\isasymlbrakk}Apply\ f\ args\ {\isasymin}\ gterms\ F{\isacharsemicolon}\ {\isasymlbrakk}{\isasymforall}t{\isasymin}set\ args{\isachardot}\ t\ {\isasymin}\ gterms\ F{\isacharsemicolon}\ f\ {\isasymin}\ F{\isasymrbrakk}\ {\isasymLongrightarrow}\ P{\isasymrbrakk}\ {\isasymLongrightarrow}\ P% \end{isabelle} -\end{isamarkuptext} -\isacommand{lemma}\ gterms_IntI\ [rule_format,\ intro!]:\isanewline -\ \ \ \ \ "t\ \isasymin \ gterms\ F\ \isasymLongrightarrow \ t\ \isasymin \ gterms\ G\ \isasymlongrightarrow \ t\ \isasymin \ gterms\ (F\isasyminter G)"\isanewline -\isacommand{apply}\ (erule\ gterms.induct) -\begin{isamarkuptxt} -\begin{isabelle} -\ 1.\ \isasymAnd args\ f.\isanewline -\isaindent{\ 1.\ \ \ \ }\isasymlbrakk \isasymforall t\isasymin set\ args.\isanewline -\isaindent{\ 1.\ \ \ \ \isasymlbrakk \ \ \ }t\ \isasymin \ gterms\ F\ \isasymand \ (t\ \isasymin \ gterms\ G\ \isasymlongrightarrow \ t\ \isasymin \ gterms\ (F\ \isasyminter \ G));\isanewline -\isaindent{\ 1.\ \ \ \ \ \ \ }f\ \isasymin \ F\isasymrbrakk \isanewline -\isaindent{\ 1.\ \ \ \ }\isasymLongrightarrow \ Apply\ f\ args\ \isasymin \ gterms\ G\ \isasymlongrightarrow \isanewline -\isaindent{\ 1.\ \ \ \ \isasymLongrightarrow \ }Apply\ f\ args\ \isasymin \ gterms\ (F\ \isasyminter \ G) +\rulename{gterm_Apply_elim}% +\end{isamarkuptext}% +\isacommand{lemma}\ gterms{\isacharunderscore}IntI\ {\isacharbrackleft}rule{\isacharunderscore}format{\isacharcomma}\ intro{\isacharbang}{\isacharbrackright}{\isacharcolon}\isanewline +\ \ \ \ \ {\isachardoublequote}t\ {\isasymin}\ gterms\ F\ {\isasymLongrightarrow}\ t\ {\isasymin}\ gterms\ G\ {\isasymlongrightarrow}\ t\ {\isasymin}\ gterms\ {\isacharparenleft}F{\isasyminter}G{\isacharparenright}{\isachardoublequote}\isanewline +\isacommand{apply}\ {\isacharparenleft}erule\ gterms{\isachardot}induct{\isacharparenright}% +\begin{isamarkuptxt}% +\begin{isabelle}% +\ {\isadigit{1}}{\isachardot}\ {\isasymAnd}args\ f{\isachardot}\isanewline +\isaindent{\ {\isadigit{1}}{\isachardot}\ \ \ \ }{\isasymlbrakk}{\isasymforall}t{\isasymin}set\ args{\isachardot}\isanewline +\isaindent{\ {\isadigit{1}}{\isachardot}\ \ \ \ {\isasymlbrakk}\ \ \ }t\ {\isasymin}\ gterms\ F\ {\isasymand}\ {\isacharparenleft}t\ {\isasymin}\ gterms\ G\ {\isasymlongrightarrow}\ t\ {\isasymin}\ gterms\ {\isacharparenleft}F\ {\isasyminter}\ G{\isacharparenright}{\isacharparenright}{\isacharsemicolon}\isanewline +\isaindent{\ {\isadigit{1}}{\isachardot}\ \ \ \ \ \ \ }f\ {\isasymin}\ F{\isasymrbrakk}\isanewline +\isaindent{\ {\isadigit{1}}{\isachardot}\ \ \ \ }{\isasymLongrightarrow}\ Apply\ f\ args\ {\isasymin}\ gterms\ G\ {\isasymlongrightarrow}\isanewline +\isaindent{\ {\isadigit{1}}{\isachardot}\ \ \ \ {\isasymLongrightarrow}\ }Apply\ f\ args\ {\isasymin}\ gterms\ {\isacharparenleft}F\ {\isasyminter}\ G{\isacharparenright}% +\end{isabelle}% +\end{isamarkuptxt}% +\isacommand{apply}\ blast\isanewline +\isacommand{done}% +\begin{isamarkuptext}% +\begin{isabelle}% +\ \ \ \ \ mono\ f\ {\isasymLongrightarrow}\ f\ {\isacharparenleft}A\ {\isasyminter}\ B{\isacharparenright}\ {\isasymsubseteq}\ f\ A\ {\isasyminter}\ f\ B% \end{isabelle} -\end{isamarkuptxt} -\isacommand{apply}\ blast\isanewline -\isacommand{done} -\begin{isamarkuptext} -\begin{isabelle} -\ \ \ \ \ mono\ f\ \isasymLongrightarrow \ f\ (A\ \isasyminter \ B)\ \isasymsubseteq \ f\ A\ \isasyminter \ f\ B% -\rulename{mono_Int} -\end{isabelle} -\end{isamarkuptext} -\isacommand{lemma}\ gterms_Int_eq\ [simp]:\isanewline -\ \ \ \ \ "gterms\ (F\isasyminter G)\ =\ gterms\ F\ \isasyminter \ gterms\ G"\isanewline -\isacommand{by}\ (blast\ intro!:\ mono_Int\ monoI\ gterms_mono)\isanewline +\rulename{mono_Int}% +\end{isamarkuptext}% +\isacommand{lemma}\ gterms{\isacharunderscore}Int{\isacharunderscore}eq\ {\isacharbrackleft}simp{\isacharbrackright}{\isacharcolon}\isanewline +\ \ \ \ \ {\isachardoublequote}gterms\ {\isacharparenleft}F{\isasyminter}G{\isacharparenright}\ {\isacharequal}\ gterms\ F\ {\isasyminter}\ gterms\ G{\isachardoublequote}\isanewline +\isacommand{by}\ {\isacharparenleft}blast\ intro{\isacharbang}{\isacharcolon}\ mono{\isacharunderscore}Int\ monoI\ gterms{\isacharunderscore}mono{\isacharparenright}\isanewline \isanewline \isanewline -\isacommand{consts}\ integer_arity\ ::\ "integer_op\ \isasymRightarrow \ nat"\isanewline +\isacommand{consts}\ integer{\isacharunderscore}arity\ {\isacharcolon}{\isacharcolon}\ {\isachardoublequote}integer{\isacharunderscore}op\ {\isasymRightarrow}\ nat{\isachardoublequote}\isanewline \isacommand{primrec}\isanewline -"integer_arity\ (Number\ n)\ \ \ \ \ \ \ \ =\ \#0"\isanewline -"integer_arity\ UnaryMinus\ \ \ \ \ \ \ \ =\ \#1"\isanewline -"integer_arity\ Plus\ \ \ \ \ \ \ \ \ \ \ \ \ \ =\ \#2"\isanewline +{\isachardoublequote}integer{\isacharunderscore}arity\ {\isacharparenleft}Number\ n{\isacharparenright}\ \ \ \ \ \ \ \ {\isacharequal}\ {\isacharhash}{\isadigit{0}}{\isachardoublequote}\isanewline +{\isachardoublequote}integer{\isacharunderscore}arity\ UnaryMinus\ \ \ \ \ \ \ \ {\isacharequal}\ {\isacharhash}{\isadigit{1}}{\isachardoublequote}\isanewline +{\isachardoublequote}integer{\isacharunderscore}arity\ Plus\ \ \ \ \ \ \ \ \ \ \ \ \ \ {\isacharequal}\ {\isacharhash}{\isadigit{2}}{\isachardoublequote}\isanewline \isanewline -\isacommand{consts}\ well_formed_gterm\ ::\ "('f\ \isasymRightarrow \ nat)\ \isasymRightarrow \ 'f\ gterm\ set"\isanewline -\isacommand{inductive}\ "well_formed_gterm\ arity"\isanewline +\isacommand{consts}\ well{\isacharunderscore}formed{\isacharunderscore}gterm\ {\isacharcolon}{\isacharcolon}\ {\isachardoublequote}{\isacharparenleft}{\isacharprime}f\ {\isasymRightarrow}\ nat{\isacharparenright}\ {\isasymRightarrow}\ {\isacharprime}f\ gterm\ set{\isachardoublequote}\isanewline +\isacommand{inductive}\ {\isachardoublequote}well{\isacharunderscore}formed{\isacharunderscore}gterm\ arity{\isachardoublequote}\isanewline \isakeyword{intros}\isanewline -step[intro!]:\ "\isasymlbrakk \isasymforall t\ \isasymin \ set\ args.\ t\ \isasymin \ well_formed_gterm\ arity;\ \ \isanewline -\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ length\ args\ =\ arity\ f\isasymrbrakk \isanewline -\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \isasymLongrightarrow \ (Apply\ f\ args)\ \isasymin \ well_formed_gterm\ arity"\isanewline +step{\isacharbrackleft}intro{\isacharbang}{\isacharbrackright}{\isacharcolon}\ {\isachardoublequote}{\isasymlbrakk}{\isasymforall}t\ {\isasymin}\ set\ args{\isachardot}\ t\ {\isasymin}\ well{\isacharunderscore}formed{\isacharunderscore}gterm\ arity{\isacharsemicolon}\ \ \isanewline +\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ length\ args\ {\isacharequal}\ arity\ f{\isasymrbrakk}\isanewline +\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ {\isasymLongrightarrow}\ {\isacharparenleft}Apply\ f\ args{\isacharparenright}\ {\isasymin}\ well{\isacharunderscore}formed{\isacharunderscore}gterm\ arity{\isachardoublequote}\isanewline \isanewline \isanewline -\isacommand{consts}\ well_formed_gterm'\ ::\ "('f\ \isasymRightarrow \ nat)\ \isasymRightarrow \ 'f\ gterm\ set"\isanewline -\isacommand{inductive}\ "well_formed_gterm'\ arity"\isanewline +\isacommand{consts}\ well{\isacharunderscore}formed{\isacharunderscore}gterm{\isacharprime}\ {\isacharcolon}{\isacharcolon}\ {\isachardoublequote}{\isacharparenleft}{\isacharprime}f\ {\isasymRightarrow}\ nat{\isacharparenright}\ {\isasymRightarrow}\ {\isacharprime}f\ gterm\ set{\isachardoublequote}\isanewline +\isacommand{inductive}\ {\isachardoublequote}well{\isacharunderscore}formed{\isacharunderscore}gterm{\isacharprime}\ arity{\isachardoublequote}\isanewline \isakeyword{intros}\isanewline -step[intro!]:\ "\isasymlbrakk args\ \isasymin \ lists\ (well_formed_gterm'\ arity);\ \ \isanewline -\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ length\ args\ =\ arity\ f\isasymrbrakk \isanewline -\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \isasymLongrightarrow \ (Apply\ f\ args)\ \isasymin \ well_formed_gterm'\ arity"\isanewline -\isakeyword{monos}\ lists_mono\isanewline +step{\isacharbrackleft}intro{\isacharbang}{\isacharbrackright}{\isacharcolon}\ {\isachardoublequote}{\isasymlbrakk}args\ {\isasymin}\ lists\ {\isacharparenleft}well{\isacharunderscore}formed{\isacharunderscore}gterm{\isacharprime}\ arity{\isacharparenright}{\isacharsemicolon}\ \ \isanewline +\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ length\ args\ {\isacharequal}\ arity\ f{\isasymrbrakk}\isanewline +\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ {\isasymLongrightarrow}\ {\isacharparenleft}Apply\ f\ args{\isacharparenright}\ {\isasymin}\ well{\isacharunderscore}formed{\isacharunderscore}gterm{\isacharprime}\ arity{\isachardoublequote}\isanewline +\isakeyword{monos}\ lists{\isacharunderscore}mono\isanewline \isanewline -\isacommand{lemma}\ "well_formed_gterm\ arity\ \isasymsubseteq \ well_formed_gterm'\ arity"\isanewline +\isacommand{lemma}\ {\isachardoublequote}well{\isacharunderscore}formed{\isacharunderscore}gterm\ arity\ {\isasymsubseteq}\ well{\isacharunderscore}formed{\isacharunderscore}gterm{\isacharprime}\ arity{\isachardoublequote}\isanewline \isacommand{apply}\ clarify% -\begin{isamarkuptxt} +\begin{isamarkuptxt}% The situation after clarify -\begin{isabelle} -\ 1.\ \isasymAnd x.\ x\ \isasymin \ well_formed_gterm\ arity\ \isasymLongrightarrow \isanewline -\isaindent{\ 1.\ \isasymAnd x.\ }x\ \isasymin \ well_formed_gterm'\ arity% -\end{isabelle} -\end{isamarkuptxt} -\isacommand{apply}\ (erule\ well_formed_gterm.induct) -\begin{isamarkuptxt} +\begin{isabelle}% +\ {\isadigit{1}}{\isachardot}\ {\isasymAnd}x{\isachardot}\ x\ {\isasymin}\ well{\isacharunderscore}formed{\isacharunderscore}gterm\ arity\ {\isasymLongrightarrow}\isanewline +\isaindent{\ {\isadigit{1}}{\isachardot}\ {\isasymAnd}x{\isachardot}\ }x\ {\isasymin}\ well{\isacharunderscore}formed{\isacharunderscore}gterm{\isacharprime}\ arity% +\end{isabelle}% +\end{isamarkuptxt}% +\isacommand{apply}\ {\isacharparenleft}erule\ well{\isacharunderscore}formed{\isacharunderscore}gterm{\isachardot}induct{\isacharparenright}% +\begin{isamarkuptxt}% note the induction hypothesis! -\begin{isabelle} -\ 1.\ \isasymAnd x\ args\ f.\isanewline -\isaindent{\ 1.\ \ \ \ }\isasymlbrakk \isasymforall t\isasymin set\ args.\isanewline -\isaindent{\ 1.\ \ \ \ \isasymlbrakk \ \ \ }t\ \isasymin \ well_formed_gterm\ arity\ \isasymand \isanewline -\isaindent{\ 1.\ \ \ \ \isasymlbrakk \ \ \ }t\ \isasymin \ well_formed_gterm'\ arity;\isanewline -\isaindent{\ 1.\ \ \ \ \ \ \ }length\ args\ =\ arity\ f\isasymrbrakk \isanewline -\isaindent{\ 1.\ \ \ \ }\isasymLongrightarrow \ Apply\ f\ args\ \isasymin \ well_formed_gterm'\ arity% -\end{isabelle} -\end{isamarkuptxt} +\begin{isabelle}% +\ {\isadigit{1}}{\isachardot}\ {\isasymAnd}x\ args\ f{\isachardot}\isanewline +\isaindent{\ {\isadigit{1}}{\isachardot}\ \ \ \ }{\isasymlbrakk}{\isasymforall}t{\isasymin}set\ args{\isachardot}\isanewline +\isaindent{\ {\isadigit{1}}{\isachardot}\ \ \ \ {\isasymlbrakk}\ \ \ }t\ {\isasymin}\ well{\isacharunderscore}formed{\isacharunderscore}gterm\ arity\ {\isasymand}\isanewline +\isaindent{\ {\isadigit{1}}{\isachardot}\ \ \ \ {\isasymlbrakk}\ \ \ }t\ {\isasymin}\ well{\isacharunderscore}formed{\isacharunderscore}gterm{\isacharprime}\ arity{\isacharsemicolon}\isanewline +\isaindent{\ {\isadigit{1}}{\isachardot}\ \ \ \ \ \ \ }length\ args\ {\isacharequal}\ arity\ f{\isasymrbrakk}\isanewline +\isaindent{\ {\isadigit{1}}{\isachardot}\ \ \ \ }{\isasymLongrightarrow}\ Apply\ f\ args\ {\isasymin}\ well{\isacharunderscore}formed{\isacharunderscore}gterm{\isacharprime}\ arity% +\end{isabelle}% +\end{isamarkuptxt}% \isacommand{apply}\ auto\isanewline \isacommand{done}\isanewline \isanewline \isanewline \isanewline -\isacommand{lemma}\ "well_formed_gterm'\ arity\ \isasymsubseteq \ well_formed_gterm\ arity"\isanewline +\isacommand{lemma}\ {\isachardoublequote}well{\isacharunderscore}formed{\isacharunderscore}gterm{\isacharprime}\ arity\ {\isasymsubseteq}\ well{\isacharunderscore}formed{\isacharunderscore}gterm\ arity{\isachardoublequote}\isanewline \isacommand{apply}\ clarify% -\begin{isamarkuptxt} +\begin{isamarkuptxt}% The situation after clarify -\begin{isabelle} -\ 1.\ \isasymAnd x.\ x\ \isasymin \ well_formed_gterm'\ arity\ \isasymLongrightarrow \isanewline -\isaindent{\ 1.\ \isasymAnd x.\ }x\ \isasymin \ well_formed_gterm\ arity% -\end{isabelle} -\end{isamarkuptxt} -\isacommand{apply}\ (erule\ well_formed_gterm'.induct) -\begin{isamarkuptxt} +\begin{isabelle}% +\ {\isadigit{1}}{\isachardot}\ {\isasymAnd}x{\isachardot}\ x\ {\isasymin}\ well{\isacharunderscore}formed{\isacharunderscore}gterm{\isacharprime}\ arity\ {\isasymLongrightarrow}\isanewline +\isaindent{\ {\isadigit{1}}{\isachardot}\ {\isasymAnd}x{\isachardot}\ }x\ {\isasymin}\ well{\isacharunderscore}formed{\isacharunderscore}gterm\ arity% +\end{isabelle}% +\end{isamarkuptxt}% +\isacommand{apply}\ {\isacharparenleft}erule\ well{\isacharunderscore}formed{\isacharunderscore}gterm{\isacharprime}{\isachardot}induct{\isacharparenright}% +\begin{isamarkuptxt}% note the induction hypothesis! -\begin{isabelle} -\ 1.\ \isasymAnd x\ args\ f.\isanewline -\isaindent{\ 1.\ \ \ \ }\isasymlbrakk args\isanewline -\isaindent{\ 1.\ \ \ \ \isasymlbrakk }\isasymin \ lists\isanewline -\isaindent{\ 1.\ \ \ \ \isasymlbrakk \isasymin \ \ }(well_formed_gterm'\ arity\ \isasyminter \isanewline -\isaindent{\ 1.\ \ \ \ \isasymlbrakk \isasymin \ \ (}\isacharbraceleft x.\ x\ \isasymin \ well_formed_gterm\ arity\isacharbraceright );\isanewline -\isaindent{\ 1.\ \ \ \ \ \ \ }length\ args\ =\ arity\ f\isasymrbrakk \isanewline -\isaindent{\ 1.\ \ \ \ }\isasymLongrightarrow \ Apply\ f\ args\ \isasymin \ well_formed_gterm\ arity% -\end{isabelle} -\end{isamarkuptxt} +\begin{isabelle}% +\ {\isadigit{1}}{\isachardot}\ {\isasymAnd}x\ args\ f{\isachardot}\isanewline +\isaindent{\ {\isadigit{1}}{\isachardot}\ \ \ \ }{\isasymlbrakk}args\isanewline +\isaindent{\ {\isadigit{1}}{\isachardot}\ \ \ \ {\isasymlbrakk}}{\isasymin}\ lists\isanewline +\isaindent{\ {\isadigit{1}}{\isachardot}\ \ \ \ {\isasymlbrakk}{\isasymin}\ \ }{\isacharparenleft}well{\isacharunderscore}formed{\isacharunderscore}gterm{\isacharprime}\ arity\ {\isasyminter}\isanewline +\isaindent{\ {\isadigit{1}}{\isachardot}\ \ \ \ {\isasymlbrakk}{\isasymin}\ \ {\isacharparenleft}}{\isacharbraceleft}x{\isachardot}\ x\ {\isasymin}\ well{\isacharunderscore}formed{\isacharunderscore}gterm\ arity{\isacharbraceright}{\isacharparenright}{\isacharsemicolon}\isanewline +\isaindent{\ {\isadigit{1}}{\isachardot}\ \ \ \ \ \ \ }length\ args\ {\isacharequal}\ arity\ f{\isasymrbrakk}\isanewline +\isaindent{\ {\isadigit{1}}{\isachardot}\ \ \ \ }{\isasymLongrightarrow}\ Apply\ f\ args\ {\isasymin}\ well{\isacharunderscore}formed{\isacharunderscore}gterm\ arity% +\end{isabelle}% +\end{isamarkuptxt}% \isacommand{apply}\ auto\isanewline -\isacommand{done} -\begin{isamarkuptext} -\begin{isabelle} -\ \ \ \ \ lists\ (A\ \isasyminter \ B)\ =\ lists\ A\ \isasyminter \ lists\ B% -\end{isabelle} -\end{isamarkuptext} +\isacommand{done}% +\begin{isamarkuptext}% +\begin{isabelle}% +\ \ \ \ \ lists\ {\isacharparenleft}A\ {\isasyminter}\ B{\isacharparenright}\ {\isacharequal}\ lists\ A\ {\isasyminter}\ lists\ B% +\end{isabelle}% +\end{isamarkuptext}% % -\begin{isamarkuptext} +\begin{isamarkuptext}% the rest isn't used: too complicated. OK for an exercise though.% -\end{isamarkuptext} -\isacommand{consts}\ integer_signature\ ::\ "(integer_op\ *\ (unit\ list\ *\ unit))\ set"\isanewline -\isacommand{inductive}\ "integer_signature"\isanewline +\end{isamarkuptext}% +\isacommand{consts}\ integer{\isacharunderscore}signature\ {\isacharcolon}{\isacharcolon}\ {\isachardoublequote}{\isacharparenleft}integer{\isacharunderscore}op\ {\isacharasterisk}\ {\isacharparenleft}unit\ list\ {\isacharasterisk}\ unit{\isacharparenright}{\isacharparenright}\ set{\isachardoublequote}\isanewline +\isacommand{inductive}\ {\isachardoublequote}integer{\isacharunderscore}signature{\isachardoublequote}\isanewline \isakeyword{intros}\isanewline -Number:\ \ \ \ \ "(Number\ n,\ \ \ ([],\ ()))\ \isasymin \ integer_signature"\isanewline -UnaryMinus:\ "(UnaryMinus,\ ([()],\ ()))\ \isasymin \ integer_signature"\isanewline -Plus:\ \ \ \ \ \ \ "(Plus,\ \ \ \ \ \ \ ([(),()],\ ()))\ \isasymin \ integer_signature"\isanewline +Number{\isacharcolon}\ \ \ \ \ {\isachardoublequote}{\isacharparenleft}Number\ n{\isacharcomma}\ \ \ {\isacharparenleft}{\isacharbrackleft}{\isacharbrackright}{\isacharcomma}\ {\isacharparenleft}{\isacharparenright}{\isacharparenright}{\isacharparenright}\ {\isasymin}\ integer{\isacharunderscore}signature{\isachardoublequote}\isanewline +UnaryMinus{\isacharcolon}\ {\isachardoublequote}{\isacharparenleft}UnaryMinus{\isacharcomma}\ {\isacharparenleft}{\isacharbrackleft}{\isacharparenleft}{\isacharparenright}{\isacharbrackright}{\isacharcomma}\ {\isacharparenleft}{\isacharparenright}{\isacharparenright}{\isacharparenright}\ {\isasymin}\ integer{\isacharunderscore}signature{\isachardoublequote}\isanewline +Plus{\isacharcolon}\ \ \ \ \ \ \ {\isachardoublequote}{\isacharparenleft}Plus{\isacharcomma}\ \ \ \ \ \ \ {\isacharparenleft}{\isacharbrackleft}{\isacharparenleft}{\isacharparenright}{\isacharcomma}{\isacharparenleft}{\isacharparenright}{\isacharbrackright}{\isacharcomma}\ {\isacharparenleft}{\isacharparenright}{\isacharparenright}{\isacharparenright}\ {\isasymin}\ integer{\isacharunderscore}signature{\isachardoublequote}\isanewline \isanewline \isanewline -\isacommand{consts}\ well_typed_gterm\ ::\ "('f\ \isasymRightarrow \ 't\ list\ *\ 't)\ \isasymRightarrow \ ('f\ gterm\ *\ 't)set"\isanewline -\isacommand{inductive}\ "well_typed_gterm\ sig"\isanewline +\isacommand{consts}\ well{\isacharunderscore}typed{\isacharunderscore}gterm\ {\isacharcolon}{\isacharcolon}\ {\isachardoublequote}{\isacharparenleft}{\isacharprime}f\ {\isasymRightarrow}\ {\isacharprime}t\ list\ {\isacharasterisk}\ {\isacharprime}t{\isacharparenright}\ {\isasymRightarrow}\ {\isacharparenleft}{\isacharprime}f\ gterm\ {\isacharasterisk}\ {\isacharprime}t{\isacharparenright}set{\isachardoublequote}\isanewline +\isacommand{inductive}\ {\isachardoublequote}well{\isacharunderscore}typed{\isacharunderscore}gterm\ sig{\isachardoublequote}\isanewline \isakeyword{intros}\isanewline -step[intro!]:\ \isanewline -\ \ \ \ "\isasymlbrakk \isasymforall pair\ \isasymin \ set\ args.\ pair\ \isasymin \ well_typed_gterm\ sig;\ \isanewline -\ \ \ \ \ \ sig\ f\ =\ (map\ snd\ args,\ rtype)\isasymrbrakk \isanewline -\ \ \ \ \ \isasymLongrightarrow \ (Apply\ f\ (map\ fst\ args),\ rtype)\ \isanewline -\ \ \ \ \ \ \ \ \ \isasymin \ well_typed_gterm\ sig"\isanewline +step{\isacharbrackleft}intro{\isacharbang}{\isacharbrackright}{\isacharcolon}\ \isanewline +\ \ \ \ {\isachardoublequote}{\isasymlbrakk}{\isasymforall}pair\ {\isasymin}\ set\ args{\isachardot}\ pair\ {\isasymin}\ well{\isacharunderscore}typed{\isacharunderscore}gterm\ sig{\isacharsemicolon}\ \isanewline +\ \ \ \ \ \ sig\ f\ {\isacharequal}\ {\isacharparenleft}map\ snd\ args{\isacharcomma}\ rtype{\isacharparenright}{\isasymrbrakk}\isanewline +\ \ \ \ \ {\isasymLongrightarrow}\ {\isacharparenleft}Apply\ f\ {\isacharparenleft}map\ fst\ args{\isacharparenright}{\isacharcomma}\ rtype{\isacharparenright}\ \isanewline +\ \ \ \ \ \ \ \ \ {\isasymin}\ well{\isacharunderscore}typed{\isacharunderscore}gterm\ sig{\isachardoublequote}\isanewline \isanewline -\isacommand{consts}\ well_typed_gterm'\ ::\ "('f\ \isasymRightarrow \ 't\ list\ *\ 't)\ \isasymRightarrow \ ('f\ gterm\ *\ 't)set"\isanewline -\isacommand{inductive}\ "well_typed_gterm'\ sig"\isanewline +\isacommand{consts}\ well{\isacharunderscore}typed{\isacharunderscore}gterm{\isacharprime}\ {\isacharcolon}{\isacharcolon}\ {\isachardoublequote}{\isacharparenleft}{\isacharprime}f\ {\isasymRightarrow}\ {\isacharprime}t\ list\ {\isacharasterisk}\ {\isacharprime}t{\isacharparenright}\ {\isasymRightarrow}\ {\isacharparenleft}{\isacharprime}f\ gterm\ {\isacharasterisk}\ {\isacharprime}t{\isacharparenright}set{\isachardoublequote}\isanewline +\isacommand{inductive}\ {\isachardoublequote}well{\isacharunderscore}typed{\isacharunderscore}gterm{\isacharprime}\ sig{\isachardoublequote}\isanewline \isakeyword{intros}\isanewline -step[intro!]:\ \isanewline -\ \ \ \ "\isasymlbrakk args\ \isasymin \ lists(well_typed_gterm'\ sig);\ \isanewline -\ \ \ \ \ \ sig\ f\ =\ (map\ snd\ args,\ rtype)\isasymrbrakk \isanewline -\ \ \ \ \ \isasymLongrightarrow \ (Apply\ f\ (map\ fst\ args),\ rtype)\ \isanewline -\ \ \ \ \ \ \ \ \ \isasymin \ well_typed_gterm'\ sig"\isanewline -\isakeyword{monos}\ lists_mono\isanewline +step{\isacharbrackleft}intro{\isacharbang}{\isacharbrackright}{\isacharcolon}\ \isanewline +\ \ \ \ {\isachardoublequote}{\isasymlbrakk}args\ {\isasymin}\ lists{\isacharparenleft}well{\isacharunderscore}typed{\isacharunderscore}gterm{\isacharprime}\ sig{\isacharparenright}{\isacharsemicolon}\ \isanewline +\ \ \ \ \ \ sig\ f\ {\isacharequal}\ {\isacharparenleft}map\ snd\ args{\isacharcomma}\ rtype{\isacharparenright}{\isasymrbrakk}\isanewline +\ \ \ \ \ {\isasymLongrightarrow}\ {\isacharparenleft}Apply\ f\ {\isacharparenleft}map\ fst\ args{\isacharparenright}{\isacharcomma}\ rtype{\isacharparenright}\ \isanewline +\ \ \ \ \ \ \ \ \ {\isasymin}\ well{\isacharunderscore}typed{\isacharunderscore}gterm{\isacharprime}\ sig{\isachardoublequote}\isanewline +\isakeyword{monos}\ lists{\isacharunderscore}mono\isanewline \isanewline \isanewline -\isacommand{lemma}\ "well_typed_gterm\ sig\ \isasymsubseteq \ well_typed_gterm'\ sig"\isanewline +\isacommand{lemma}\ {\isachardoublequote}well{\isacharunderscore}typed{\isacharunderscore}gterm\ sig\ {\isasymsubseteq}\ well{\isacharunderscore}typed{\isacharunderscore}gterm{\isacharprime}\ sig{\isachardoublequote}\isanewline \isacommand{apply}\ clarify\isanewline -\isacommand{apply}\ (erule\ well_typed_gterm.induct)\isanewline +\isacommand{apply}\ {\isacharparenleft}erule\ well{\isacharunderscore}typed{\isacharunderscore}gterm{\isachardot}induct{\isacharparenright}\isanewline \isacommand{apply}\ auto\isanewline \isacommand{done}\isanewline \isanewline -\isacommand{lemma}\ "well_typed_gterm'\ sig\ \isasymsubseteq \ well_typed_gterm\ sig"\isanewline +\isacommand{lemma}\ {\isachardoublequote}well{\isacharunderscore}typed{\isacharunderscore}gterm{\isacharprime}\ sig\ {\isasymsubseteq}\ well{\isacharunderscore}typed{\isacharunderscore}gterm\ sig{\isachardoublequote}\isanewline \isacommand{apply}\ clarify\isanewline -\isacommand{apply}\ (erule\ well_typed_gterm'.induct)\isanewline +\isacommand{apply}\ {\isacharparenleft}erule\ well{\isacharunderscore}typed{\isacharunderscore}gterm{\isacharprime}{\isachardot}induct{\isacharparenright}\isanewline \isacommand{apply}\ auto\isanewline \isacommand{done}\isanewline \isanewline \isanewline \isacommand{end}\isanewline \isanewline -\end{isabelle} +\end{isabellebody}% %%% Local Variables: %%% mode: latex %%% TeX-master: "root" diff -r 63f3e98df2a4 -r c6e49929e544 doc-src/TutorialI/Types/document/Numbers.tex --- a/doc-src/TutorialI/Types/document/Numbers.tex Tue Feb 27 23:25:47 2001 +0100 +++ b/doc-src/TutorialI/Types/document/Numbers.tex Wed Feb 28 12:37:48 2001 +0100 @@ -1,177 +1,177 @@ % -\begin{isabelle} -\def\isabellecontext{Numbers} +\begin{isabellebody}% +\def\isabellecontext{Numbers}% \isanewline -\isacommand{theory}\ Numbers\ =\ Real:\isanewline +\isacommand{theory}\ Numbers\ {\isacharequal}\ Real{\isacharcolon}\isanewline \isanewline -\isacommand{ML}\ "Pretty.setmargin\ 64"\isanewline -\isacommand{ML}\ "IsarOutput.indent\ :=\ 0" -\begin{isamarkuptext} +\isacommand{ML}\ {\isachardoublequote}Pretty{\isachardot}setmargin\ {\isadigit{6}}{\isadigit{4}}{\isachardoublequote}\isanewline +\isacommand{ML}\ {\isachardoublequote}IsarOutput{\isachardot}indent\ {\isacharcolon}{\isacharequal}\ {\isadigit{0}}{\isachardoublequote}% +\begin{isamarkuptext}% numeric literals; default simprules; can re-orient% -\end{isamarkuptext} -\isacommand{lemma}\ "\#2\ *\ m\ =\ m\ +\ m" -\begin{isamarkuptxt} -\begin{isabelle} -\ 1.\ (\#2::'a)\ *\ m\ =\ m\ +\ m% -\end{isabelle} -\end{isamarkuptxt} +\end{isamarkuptext}% +\isacommand{lemma}\ {\isachardoublequote}{\isacharhash}{\isadigit{2}}\ {\isacharasterisk}\ m\ {\isacharequal}\ m\ {\isacharplus}\ m{\isachardoublequote}% +\begin{isamarkuptxt}% +\begin{isabelle}% +\ {\isadigit{1}}{\isachardot}\ {\isacharparenleft}{\isacharhash}{\isadigit{2}}{\isasymColon}{\isacharprime}a{\isacharparenright}\ {\isacharasterisk}\ m\ {\isacharequal}\ m\ {\isacharplus}\ m% +\end{isabelle}% +\end{isamarkuptxt}% \isacommand{oops}\isanewline \isanewline -\isacommand{consts}\ h\ ::\ "nat\ \isasymRightarrow \ nat"\isanewline -\isacommand{recdef}\ h\ "\isacharbraceleft \isacharbraceright "\isanewline -"h\ i\ =\ (if\ i\ =\ \#3\ then\ \#2\ else\ i)" -\begin{isamarkuptext} -\isa{h\ \#3\ =\ \#2} -\isa{h\ i\ =\ i} -\end{isamarkuptext} +\isacommand{consts}\ h\ {\isacharcolon}{\isacharcolon}\ {\isachardoublequote}nat\ {\isasymRightarrow}\ nat{\isachardoublequote}\isanewline +\isacommand{recdef}\ h\ {\isachardoublequote}{\isacharbraceleft}{\isacharbraceright}{\isachardoublequote}\isanewline +{\isachardoublequote}h\ i\ {\isacharequal}\ {\isacharparenleft}if\ i\ {\isacharequal}\ {\isacharhash}{\isadigit{3}}\ then\ {\isacharhash}{\isadigit{2}}\ else\ i{\isacharparenright}{\isachardoublequote}% +\begin{isamarkuptext}% +\isa{h\ {\isacharhash}{\isadigit{3}}\ {\isacharequal}\ {\isacharhash}{\isadigit{2}}} +\isa{h\ i\ {\isacharequal}\ i}% +\end{isamarkuptext}% % -\begin{isamarkuptext} -\begin{isabelle} -\#0\ =\ 0 +\begin{isamarkuptext}% +\begin{isabelle}% +{\isacharhash}{\isadigit{0}}\ {\isacharequal}\ {\isadigit{0}}% +\end{isabelle} \rulename{numeral_0_eq_0} -\end{isabelle} -\begin{isabelle} -\#1\ =\ 1 -\rulename{numeral_1_eq_1} +\begin{isabelle}% +{\isacharhash}{\isadigit{1}}\ {\isacharequal}\ {\isadigit{1}}% \end{isabelle} +\rulename{numeral_1_eq_1} -\begin{isabelle} -\#2\ +\ n\ =\ Suc\ (Suc\ n) +\begin{isabelle}% +{\isacharhash}{\isadigit{2}}\ {\isacharplus}\ n\ {\isacharequal}\ Suc\ {\isacharparenleft}Suc\ n{\isacharparenright}% +\end{isabelle} \rulename{add_2_eq_Suc} + +\begin{isabelle}% +n\ {\isacharplus}\ {\isacharhash}{\isadigit{2}}\ {\isacharequal}\ Suc\ {\isacharparenleft}Suc\ n{\isacharparenright}% \end{isabelle} - -\begin{isabelle} -n\ +\ \#2\ =\ Suc\ (Suc\ n) \rulename{add_2_eq_Suc'} -\end{isabelle} -\begin{isabelle} -m\ +\ n\ +\ k\ =\ m\ +\ (n\ +\ k) -\rulename{add_assoc} +\begin{isabelle}% +m\ {\isacharplus}\ n\ {\isacharplus}\ k\ {\isacharequal}\ m\ {\isacharplus}\ {\isacharparenleft}n\ {\isacharplus}\ k{\isacharparenright}% \end{isabelle} +\rulename{add_assoc} -\begin{isabelle} -m\ +\ n\ =\ n\ +\ m% -\rulename{add_commute} +\begin{isabelle}% +m\ {\isacharplus}\ n\ {\isacharequal}\ n\ {\isacharplus}\ m% \end{isabelle} +\rulename{add_commute} -\begin{isabelle} -x\ +\ (y\ +\ z)\ =\ y\ +\ (x\ +\ z) +\begin{isabelle}% +x\ {\isacharplus}\ {\isacharparenleft}y\ {\isacharplus}\ z{\isacharparenright}\ {\isacharequal}\ y\ {\isacharplus}\ {\isacharparenleft}x\ {\isacharplus}\ z{\isacharparenright}% +\end{isabelle} \rulename{add_left_commute} -\end{isabelle} these form add_ac; similarly there is mult_ac% -\end{isamarkuptext} -\isacommand{lemma}\ "Suc(i\ +\ j*l*k\ +\ m*n)\ =\ f\ (n*m\ +\ i\ +\ k*j*l)" -\begin{isamarkuptxt} -\begin{isabelle} -\ 1.\ Suc\ (i\ +\ j\ *\ l\ *\ k\ +\ m\ *\ n)\ =\ f\ (n\ *\ m\ +\ i\ +\ k\ *\ j\ *\ l) -\end{isabelle} -\end{isamarkuptxt} -\isacommand{apply}\ (simp\ add:\ add_ac\ mult_ac) -\begin{isamarkuptxt} -\begin{isabelle} -\ 1.\ Suc\ (i\ +\ (m\ *\ n\ +\ j\ *\ (k\ *\ l)))\ =\isanewline -\isaindent{\ 1.\ }f\ (i\ +\ (m\ *\ n\ +\ j\ *\ (k\ *\ l))) +\end{isamarkuptext}% +\isacommand{lemma}\ {\isachardoublequote}Suc{\isacharparenleft}i\ {\isacharplus}\ j{\isacharasterisk}l{\isacharasterisk}k\ {\isacharplus}\ m{\isacharasterisk}n{\isacharparenright}\ {\isacharequal}\ f\ {\isacharparenleft}n{\isacharasterisk}m\ {\isacharplus}\ i\ {\isacharplus}\ k{\isacharasterisk}j{\isacharasterisk}l{\isacharparenright}{\isachardoublequote}% +\begin{isamarkuptxt}% +\begin{isabelle}% +\ {\isadigit{1}}{\isachardot}\ Suc\ {\isacharparenleft}i\ {\isacharplus}\ j\ {\isacharasterisk}\ l\ {\isacharasterisk}\ k\ {\isacharplus}\ m\ {\isacharasterisk}\ n{\isacharparenright}\ {\isacharequal}\ f\ {\isacharparenleft}n\ {\isacharasterisk}\ m\ {\isacharplus}\ i\ {\isacharplus}\ k\ {\isacharasterisk}\ j\ {\isacharasterisk}\ l{\isacharparenright}% +\end{isabelle}% +\end{isamarkuptxt}% +\isacommand{apply}\ {\isacharparenleft}simp\ add{\isacharcolon}\ add{\isacharunderscore}ac\ mult{\isacharunderscore}ac{\isacharparenright}% +\begin{isamarkuptxt}% +\begin{isabelle}% +\ {\isadigit{1}}{\isachardot}\ Suc\ {\isacharparenleft}i\ {\isacharplus}\ {\isacharparenleft}m\ {\isacharasterisk}\ n\ {\isacharplus}\ j\ {\isacharasterisk}\ {\isacharparenleft}k\ {\isacharasterisk}\ l{\isacharparenright}{\isacharparenright}{\isacharparenright}\ {\isacharequal}\isanewline +\isaindent{\ {\isadigit{1}}{\isachardot}\ }f\ {\isacharparenleft}i\ {\isacharplus}\ {\isacharparenleft}m\ {\isacharasterisk}\ n\ {\isacharplus}\ j\ {\isacharasterisk}\ {\isacharparenleft}k\ {\isacharasterisk}\ l{\isacharparenright}{\isacharparenright}{\isacharparenright}% +\end{isabelle}% +\end{isamarkuptxt}% +\isacommand{oops}% +\begin{isamarkuptext}% +\begin{isabelle}% +{\isasymlbrakk}i\ {\isasymle}\ j{\isacharsemicolon}\ k\ {\isasymle}\ l{\isasymrbrakk}\ {\isasymLongrightarrow}\ i\ {\isacharasterisk}\ k\ {\isasymle}\ j\ {\isacharasterisk}\ l% \end{isabelle} -\end{isamarkuptxt} -\isacommand{oops} -\begin{isamarkuptext} -\begin{isabelle} -\isasymlbrakk i\ \isasymle \ j;\ k\ \isasymle \ l\isasymrbrakk \ \isasymLongrightarrow \ i\ *\ k\ \isasymle \ j\ *\ l% \rulename{mult_le_mono} -\end{isabelle} -\begin{isabelle} -\isasymlbrakk i\ <\ j;\ 0\ <\ k\isasymrbrakk \ \isasymLongrightarrow \ i\ *\ k\ <\ j\ *\ k% +\begin{isabelle}% +{\isasymlbrakk}i\ {\isacharless}\ j{\isacharsemicolon}\ {\isadigit{0}}\ {\isacharless}\ k{\isasymrbrakk}\ {\isasymLongrightarrow}\ i\ {\isacharasterisk}\ k\ {\isacharless}\ j\ {\isacharasterisk}\ k% +\end{isabelle} \rulename{mult_less_mono1} -\end{isabelle} -\begin{isabelle} -m\ \isasymle \ n\ \isasymLongrightarrow \ m\ div\ k\ \isasymle \ n\ div\ k% +\begin{isabelle}% +m\ {\isasymle}\ n\ {\isasymLongrightarrow}\ m\ div\ k\ {\isasymle}\ n\ div\ k% +\end{isabelle} \rulename{div_le_mono} -\end{isabelle} -\begin{isabelle} -(m\ +\ n)\ *\ k\ =\ m\ *\ k\ +\ n\ *\ k% +\begin{isabelle}% +{\isacharparenleft}m\ {\isacharplus}\ n{\isacharparenright}\ {\isacharasterisk}\ k\ {\isacharequal}\ m\ {\isacharasterisk}\ k\ {\isacharplus}\ n\ {\isacharasterisk}\ k% +\end{isabelle} \rulename{add_mult_distrib} -\end{isabelle} -\begin{isabelle} -(m\ -\ n)\ *\ k\ =\ m\ *\ k\ -\ n\ *\ k% +\begin{isabelle}% +{\isacharparenleft}m\ {\isacharminus}\ n{\isacharparenright}\ {\isacharasterisk}\ k\ {\isacharequal}\ m\ {\isacharasterisk}\ k\ {\isacharminus}\ n\ {\isacharasterisk}\ k% +\end{isabelle} \rulename{diff_mult_distrib} -\end{isabelle} -\begin{isabelle} -m\ mod\ n\ *\ k\ =\ m\ *\ k\ mod\ (n\ *\ k) +\begin{isabelle}% +m\ mod\ n\ {\isacharasterisk}\ k\ {\isacharequal}\ m\ {\isacharasterisk}\ k\ mod\ {\isacharparenleft}n\ {\isacharasterisk}\ k{\isacharparenright}% +\end{isabelle} \rulename{mod_mult_distrib} -\end{isabelle} -\begin{isabelle} -P\ (a\ -\ b)\ =\ ((a\ <\ b\ \isasymlongrightarrow \ P\ 0)\ \isasymand \ (\isasymforall d.\ a\ =\ b\ +\ d\ \isasymlongrightarrow \ P\ d)) -\rulename{nat_diff_split} +\begin{isabelle}% +P\ {\isacharparenleft}a\ {\isacharminus}\ b{\isacharparenright}\ {\isacharequal}\ {\isacharparenleft}{\isacharparenleft}a\ {\isacharless}\ b\ {\isasymlongrightarrow}\ P\ {\isadigit{0}}{\isacharparenright}\ {\isasymand}\ {\isacharparenleft}{\isasymforall}d{\isachardot}\ a\ {\isacharequal}\ b\ {\isacharplus}\ d\ {\isasymlongrightarrow}\ P\ d{\isacharparenright}{\isacharparenright}% \end{isabelle} -\end{isamarkuptext} -\isacommand{lemma}\ "(n-1)*(n+1)\ =\ n*n\ -\ 1"\isanewline -\isacommand{apply}\ (simp\ split:\ nat_diff_split)\isanewline -\isacommand{done} -\begin{isamarkuptext} -\begin{isabelle} -m\ mod\ n\ =\ (if\ m\ <\ n\ then\ m\ else\ (m\ -\ n)\ mod\ n) +\rulename{nat_diff_split}% +\end{isamarkuptext}% +\isacommand{lemma}\ {\isachardoublequote}{\isacharparenleft}n{\isacharminus}{\isadigit{1}}{\isacharparenright}{\isacharasterisk}{\isacharparenleft}n{\isacharplus}{\isadigit{1}}{\isacharparenright}\ {\isacharequal}\ n{\isacharasterisk}n\ {\isacharminus}\ {\isadigit{1}}{\isachardoublequote}\isanewline +\isacommand{apply}\ {\isacharparenleft}simp\ split{\isacharcolon}\ nat{\isacharunderscore}diff{\isacharunderscore}split{\isacharparenright}\isanewline +\isacommand{done}% +\begin{isamarkuptext}% +\begin{isabelle}% +m\ mod\ n\ {\isacharequal}\ {\isacharparenleft}if\ m\ {\isacharless}\ n\ then\ m\ else\ {\isacharparenleft}m\ {\isacharminus}\ n{\isacharparenright}\ mod\ n{\isacharparenright}% +\end{isabelle} \rulename{mod_if} + +\begin{isabelle}% +m\ div\ n\ {\isacharasterisk}\ n\ {\isacharplus}\ m\ mod\ n\ {\isacharequal}\ m% \end{isabelle} - -\begin{isabelle} -m\ div\ n\ *\ n\ +\ m\ mod\ n\ =\ m% \rulename{mod_div_equality} -\end{isabelle} -\begin{isabelle} -a\ *\ b\ div\ c\ =\ a\ *\ (b\ div\ c)\ +\ a\ *\ (b\ mod\ c)\ div\ c% +\begin{isabelle}% +a\ {\isacharasterisk}\ b\ div\ c\ {\isacharequal}\ a\ {\isacharasterisk}\ {\isacharparenleft}b\ div\ c{\isacharparenright}\ {\isacharplus}\ a\ {\isacharasterisk}\ {\isacharparenleft}b\ mod\ c{\isacharparenright}\ div\ c% +\end{isabelle} \rulename{div_mult1_eq} -\end{isabelle} -\begin{isabelle} -a\ *\ b\ mod\ c\ =\ a\ *\ (b\ mod\ c)\ mod\ c% +\begin{isabelle}% +a\ {\isacharasterisk}\ b\ mod\ c\ {\isacharequal}\ a\ {\isacharasterisk}\ {\isacharparenleft}b\ mod\ c{\isacharparenright}\ mod\ c% +\end{isabelle} \rulename{mod_mult1_eq} -\end{isabelle} -\begin{isabelle} -a\ div\ (b\ *\ c)\ =\ a\ div\ b\ div\ c% +\begin{isabelle}% +a\ div\ {\isacharparenleft}b\ {\isacharasterisk}\ c{\isacharparenright}\ {\isacharequal}\ a\ div\ b\ div\ c% +\end{isabelle} \rulename{div_mult2_eq} -\end{isabelle} -\begin{isabelle} -a\ mod\ (b\ *\ c)\ =\ b\ *\ (a\ div\ b\ mod\ c)\ +\ a\ mod\ b% +\begin{isabelle}% +a\ mod\ {\isacharparenleft}b\ {\isacharasterisk}\ c{\isacharparenright}\ {\isacharequal}\ b\ {\isacharasterisk}\ {\isacharparenleft}a\ div\ b\ mod\ c{\isacharparenright}\ {\isacharplus}\ a\ mod\ b% +\end{isabelle} \rulename{mod_mult2_eq} -\end{isabelle} -\begin{isabelle} -0\ <\ c\ \isasymLongrightarrow \ c\ *\ a\ div\ (c\ *\ b)\ =\ a\ div\ b% +\begin{isabelle}% +{\isadigit{0}}\ {\isacharless}\ c\ {\isasymLongrightarrow}\ c\ {\isacharasterisk}\ a\ div\ {\isacharparenleft}c\ {\isacharasterisk}\ b{\isacharparenright}\ {\isacharequal}\ a\ div\ b% +\end{isabelle} \rulename{div_mult_mult1} -\end{isabelle} -\begin{isabelle} -a\ div\ 0\ =\ 0 +\begin{isabelle}% +a\ div\ {\isadigit{0}}\ {\isacharequal}\ {\isadigit{0}}% +\end{isabelle} \rulename{DIVISION_BY_ZERO_DIV} -\end{isabelle} -\begin{isabelle} -a\ mod\ 0\ =\ a% +\begin{isabelle}% +a\ mod\ {\isadigit{0}}\ {\isacharequal}\ a% +\end{isabelle} \rulename{DIVISION_BY_ZERO_MOD} -\end{isabelle} -\begin{isabelle} -\isasymlbrakk m\ dvd\ n;\ n\ dvd\ m\isasymrbrakk \ \isasymLongrightarrow \ m\ =\ n% +\begin{isabelle}% +{\isasymlbrakk}m\ dvd\ n{\isacharsemicolon}\ n\ dvd\ m{\isasymrbrakk}\ {\isasymLongrightarrow}\ m\ {\isacharequal}\ n% +\end{isabelle} \rulename{dvd_anti_sym} -\end{isabelle} -\begin{isabelle} -\isasymlbrakk k\ dvd\ m;\ k\ dvd\ n\isasymrbrakk \ \isasymLongrightarrow \ k\ dvd\ m\ +\ n% +\begin{isabelle}% +{\isasymlbrakk}k\ dvd\ m{\isacharsemicolon}\ k\ dvd\ n{\isasymrbrakk}\ {\isasymLongrightarrow}\ k\ dvd\ m\ {\isacharplus}\ n% +\end{isabelle} \rulename{dvd_add} -\end{isabelle} For the integers, I'd list a few theorems that somehow involve negative numbers. @@ -179,156 +179,160 @@ Division, remainder of negatives -\begin{isabelle} -\#0\ <\ b\ \isasymLongrightarrow \ \#0\ \isasymle \ a\ mod\ b% +\begin{isabelle}% +{\isacharhash}{\isadigit{0}}\ {\isacharless}\ b\ {\isasymLongrightarrow}\ {\isacharhash}{\isadigit{0}}\ {\isasymle}\ a\ mod\ b% +\end{isabelle} \rulename{pos_mod_sign} -\end{isabelle} -\begin{isabelle} -\#0\ <\ b\ \isasymLongrightarrow \ a\ mod\ b\ <\ b% -\rulename{pos_mod_bound} +\begin{isabelle}% +{\isacharhash}{\isadigit{0}}\ {\isacharless}\ b\ {\isasymLongrightarrow}\ a\ mod\ b\ {\isacharless}\ b% \end{isabelle} +\rulename{pos_mod_bound} -\begin{isabelle} -b\ <\ \#0\ \isasymLongrightarrow \ a\ mod\ b\ \isasymle \ \#0 -\rulename{neg_mod_sign} +\begin{isabelle}% +b\ {\isacharless}\ {\isacharhash}{\isadigit{0}}\ {\isasymLongrightarrow}\ a\ mod\ b\ {\isasymle}\ {\isacharhash}{\isadigit{0}}% \end{isabelle} +\rulename{neg_mod_sign} -\begin{isabelle} -b\ <\ \#0\ \isasymLongrightarrow \ b\ <\ a\ mod\ b% +\begin{isabelle}% +b\ {\isacharless}\ {\isacharhash}{\isadigit{0}}\ {\isasymLongrightarrow}\ b\ {\isacharless}\ a\ mod\ b% +\end{isabelle} \rulename{neg_mod_bound} -\end{isabelle} -\begin{isabelle} -(a\ +\ b)\ div\ c\ =\ a\ div\ c\ +\ b\ div\ c\ +\ (a\ mod\ c\ +\ b\ mod\ c)\ div\ c% -\rulename{zdiv_zadd1_eq} +\begin{isabelle}% +{\isacharparenleft}a\ {\isacharplus}\ b{\isacharparenright}\ div\ c\ {\isacharequal}\ a\ div\ c\ {\isacharplus}\ b\ div\ c\ {\isacharplus}\ {\isacharparenleft}a\ mod\ c\ {\isacharplus}\ b\ mod\ c{\isacharparenright}\ div\ c% \end{isabelle} +\rulename{zdiv_zadd1_eq} -\begin{isabelle} -(a\ +\ b)\ mod\ c\ =\ (a\ mod\ c\ +\ b\ mod\ c)\ mod\ c% +\begin{isabelle}% +{\isacharparenleft}a\ {\isacharplus}\ b{\isacharparenright}\ mod\ c\ {\isacharequal}\ {\isacharparenleft}a\ mod\ c\ {\isacharplus}\ b\ mod\ c{\isacharparenright}\ mod\ c% +\end{isabelle} \rulename{zmod_zadd1_eq} -\end{isabelle} -\begin{isabelle} -a\ *\ b\ div\ c\ =\ a\ *\ (b\ div\ c)\ +\ a\ *\ (b\ mod\ c)\ div\ c% -\rulename{zdiv_zmult1_eq} +\begin{isabelle}% +a\ {\isacharasterisk}\ b\ div\ c\ {\isacharequal}\ a\ {\isacharasterisk}\ {\isacharparenleft}b\ div\ c{\isacharparenright}\ {\isacharplus}\ a\ {\isacharasterisk}\ {\isacharparenleft}b\ mod\ c{\isacharparenright}\ div\ c% \end{isabelle} +\rulename{zdiv_zmult1_eq} -\begin{isabelle} -a\ *\ b\ mod\ c\ =\ a\ *\ (b\ mod\ c)\ mod\ c% +\begin{isabelle}% +a\ {\isacharasterisk}\ b\ mod\ c\ {\isacharequal}\ a\ {\isacharasterisk}\ {\isacharparenleft}b\ mod\ c{\isacharparenright}\ mod\ c% +\end{isabelle} \rulename{zmod_zmult1_eq} -\end{isabelle} -\begin{isabelle} -\#0\ <\ c\ \isasymLongrightarrow \ a\ div\ (b\ *\ c)\ =\ a\ div\ b\ div\ c% -\rulename{zdiv_zmult2_eq} +\begin{isabelle}% +{\isacharhash}{\isadigit{0}}\ {\isacharless}\ c\ {\isasymLongrightarrow}\ a\ div\ {\isacharparenleft}b\ {\isacharasterisk}\ c{\isacharparenright}\ {\isacharequal}\ a\ div\ b\ div\ c% \end{isabelle} +\rulename{zdiv_zmult2_eq} -\begin{isabelle} -\#0\ <\ c\ \isasymLongrightarrow \ a\ mod\ (b\ *\ c)\ =\ b\ *\ (a\ div\ b\ mod\ c)\ +\ a\ mod\ b% +\begin{isabelle}% +{\isacharhash}{\isadigit{0}}\ {\isacharless}\ c\ {\isasymLongrightarrow}\ a\ mod\ {\isacharparenleft}b\ {\isacharasterisk}\ c{\isacharparenright}\ {\isacharequal}\ b\ {\isacharasterisk}\ {\isacharparenleft}a\ div\ b\ mod\ c{\isacharparenright}\ {\isacharplus}\ a\ mod\ b% +\end{isabelle} \rulename{zmod_zmult2_eq} + +\begin{isabelle}% +{\isasymbar}x\ {\isacharasterisk}\ y{\isasymbar}\ {\isacharequal}\ {\isasymbar}x{\isasymbar}\ {\isacharasterisk}\ {\isasymbar}y{\isasymbar}% \end{isabelle} - -\begin{isabelle} -\isasymbar x\ *\ y\isasymbar \ =\ \isasymbar x\isasymbar \ *\ \isasymbar y\isasymbar -\rulename{abs_mult} -\end{isabelle} -\end{isamarkuptext} -\isacommand{lemma}\ "abs\ (x+y)\ \isasymle \ abs\ x\ +\ abs\ (y\ ::\ int)"\isanewline +\rulename{abs_mult}% +\end{isamarkuptext}% +\isacommand{lemma}\ {\isachardoublequote}abs\ {\isacharparenleft}x{\isacharplus}y{\isacharparenright}\ {\isasymle}\ abs\ x\ {\isacharplus}\ abs\ {\isacharparenleft}y\ {\isacharcolon}{\isacharcolon}\ int{\isacharparenright}{\isachardoublequote}\isanewline \isacommand{by}\ arith\isanewline \isanewline -\isacommand{lemma}\ "abs\ (\#2*x)\ =\ \#2\ *\ abs\ (x\ ::\ int)"\isanewline -\isacommand{by}\ (simp\ add:\ zabs_def) -\begin{isamarkuptext} +\isacommand{lemma}\ {\isachardoublequote}abs\ {\isacharparenleft}{\isacharhash}{\isadigit{2}}{\isacharasterisk}x{\isacharparenright}\ {\isacharequal}\ {\isacharhash}{\isadigit{2}}\ {\isacharasterisk}\ abs\ {\isacharparenleft}x\ {\isacharcolon}{\isacharcolon}\ int{\isacharparenright}{\isachardoublequote}\isanewline +\isacommand{by}\ {\isacharparenleft}simp\ add{\isacharcolon}\ zabs{\isacharunderscore}def{\isacharparenright}% +\begin{isamarkuptext}% REALS -\begin{isabelle} -\isasymbar r\isasymbar \ \isacharcircum \ n\ =\ \isasymbar r\ \isacharcircum \ n\isasymbar +\begin{isabelle}% +{\isasymbar}r{\isasymbar}\ {\isacharcircum}\ n\ {\isacharequal}\ {\isasymbar}r\ {\isacharcircum}\ n{\isasymbar}% +\end{isabelle} \rulename{realpow_abs} -\end{isabelle} -\begin{isabelle} -x\ <\ y\ \isasymLongrightarrow \ \isasymexists r.\ x\ <\ r\ \isasymand \ r\ <\ y% +\begin{isabelle}% +x\ {\isacharless}\ y\ {\isasymLongrightarrow}\ {\isasymexists}r{\isachardot}\ x\ {\isacharless}\ r\ {\isasymand}\ r\ {\isacharless}\ y% +\end{isabelle} \rulename{real_dense} -\end{isabelle} -\begin{isabelle} -\isasymbar r\isasymbar \ \isacharcircum \ n\ =\ \isasymbar r\ \isacharcircum \ n\isasymbar +\begin{isabelle}% +{\isasymbar}r{\isasymbar}\ {\isacharcircum}\ n\ {\isacharequal}\ {\isasymbar}r\ {\isacharcircum}\ n{\isasymbar}% +\end{isabelle} \rulename{realpow_abs} -\end{isabelle} -\begin{isabelle} -x\ *\ (y\ /\ z)\ =\ x\ *\ y\ /\ z% +\begin{isabelle}% +x\ {\isacharasterisk}\ {\isacharparenleft}y\ {\isacharslash}\ z{\isacharparenright}\ {\isacharequal}\ x\ {\isacharasterisk}\ y\ {\isacharslash}\ z% +\end{isabelle} \rulename{real_times_divide1_eq} -\end{isabelle} -\begin{isabelle} -y\ /\ z\ *\ x\ =\ y\ *\ x\ /\ z% +\begin{isabelle}% +y\ {\isacharslash}\ z\ {\isacharasterisk}\ x\ {\isacharequal}\ y\ {\isacharasterisk}\ x\ {\isacharslash}\ z% +\end{isabelle} \rulename{real_times_divide2_eq} -\end{isabelle} -\begin{isabelle} -x\ /\ (y\ /\ z)\ =\ x\ *\ z\ /\ y% +\begin{isabelle}% +x\ {\isacharslash}\ {\isacharparenleft}y\ {\isacharslash}\ z{\isacharparenright}\ {\isacharequal}\ x\ {\isacharasterisk}\ z\ {\isacharslash}\ y% +\end{isabelle} \rulename{real_divide_divide1_eq} -\end{isabelle} -\begin{isabelle} -x\ /\ y\ /\ z\ =\ x\ /\ (y\ *\ z) +\begin{isabelle}% +x\ {\isacharslash}\ y\ {\isacharslash}\ z\ {\isacharequal}\ x\ {\isacharslash}\ {\isacharparenleft}y\ {\isacharasterisk}\ z{\isacharparenright}% +\end{isabelle} \rulename{real_divide_divide2_eq} -\end{isabelle} -\begin{isabelle} --\ x\ /\ y\ =\ -\ (x\ /\ y) +\begin{isabelle}% +{\isacharminus}\ x\ {\isacharslash}\ y\ {\isacharequal}\ {\isacharminus}\ {\isacharparenleft}x\ {\isacharslash}\ y{\isacharparenright}% +\end{isabelle} \rulename{real_minus_divide_eq} -\end{isabelle} -\begin{isabelle} -x\ /\ -\ y\ =\ -\ (x\ /\ y) +\begin{isabelle}% +x\ {\isacharslash}\ {\isacharminus}\ y\ {\isacharequal}\ {\isacharminus}\ {\isacharparenleft}x\ {\isacharslash}\ y{\isacharparenright}% +\end{isabelle} \rulename{real_divide_minus_eq} -\end{isabelle} This last NOT a simprule -\begin{isabelle} -(x\ +\ y)\ /\ z\ =\ x\ /\ z\ +\ y\ /\ z% -\rulename{real_add_divide_distrib} +\begin{isabelle}% +{\isacharparenleft}x\ {\isacharplus}\ y{\isacharparenright}\ {\isacharslash}\ z\ {\isacharequal}\ x\ {\isacharslash}\ z\ {\isacharplus}\ y\ {\isacharslash}\ z% \end{isabelle} -\end{isamarkuptext} -\isacommand{lemma}\ "\#3/\#4\ <\ (\#7/\#8\ ::\ real)"\isanewline -\isacommand{by}\ (simp)\ \isanewline +\rulename{real_add_divide_distrib}% +\end{isamarkuptext}% +\isacommand{lemma}\ {\isachardoublequote}{\isacharhash}{\isadigit{3}}{\isacharslash}{\isacharhash}{\isadigit{4}}\ {\isacharless}\ {\isacharparenleft}{\isacharhash}{\isadigit{7}}{\isacharslash}{\isacharhash}{\isadigit{8}}\ {\isacharcolon}{\isacharcolon}\ real{\isacharparenright}{\isachardoublequote}\isanewline +\isacommand{by}\ simp\ \isanewline \isanewline -\isacommand{lemma}\ "P\ ((\#3/\#4)\ *\ (\#8/\#15\ ::\ real))" -\begin{isamarkuptxt} -\begin{isabelle} -\ 1.\ P\ (\#3\ /\ \#4\ *\ (\#8\ /\ \#15)) -\end{isabelle} -\end{isamarkuptxt} -\isacommand{apply}(simp) -\begin{isamarkuptxt} -\begin{isabelle} -\ 1.\ P\ (\#2\ /\ \#5) -\end{isabelle} -\end{isamarkuptxt} +\isacommand{lemma}\ {\isachardoublequote}P\ {\isacharparenleft}{\isacharparenleft}{\isacharhash}{\isadigit{3}}{\isacharslash}{\isacharhash}{\isadigit{4}}{\isacharparenright}\ {\isacharasterisk}\ {\isacharparenleft}{\isacharhash}{\isadigit{8}}{\isacharslash}{\isacharhash}{\isadigit{1}}{\isadigit{5}}\ {\isacharcolon}{\isacharcolon}\ real{\isacharparenright}{\isacharparenright}{\isachardoublequote}% +\begin{isamarkuptxt}% +\begin{isabelle}% +\ {\isadigit{1}}{\isachardot}\ P\ {\isacharparenleft}{\isacharhash}{\isadigit{3}}\ {\isacharslash}\ {\isacharhash}{\isadigit{4}}\ {\isacharasterisk}\ {\isacharparenleft}{\isacharhash}{\isadigit{8}}\ {\isacharslash}\ {\isacharhash}{\isadigit{1}}{\isadigit{5}}{\isacharparenright}{\isacharparenright}% +\end{isabelle}% +\end{isamarkuptxt}% +\isacommand{apply}\ simp% +\begin{isamarkuptxt}% +\begin{isabelle}% +\ {\isadigit{1}}{\isachardot}\ P\ {\isacharparenleft}{\isacharhash}{\isadigit{2}}\ {\isacharslash}\ {\isacharhash}{\isadigit{5}}{\isacharparenright}% +\end{isabelle}% +\end{isamarkuptxt}% \isacommand{oops}\isanewline \isanewline -\isacommand{lemma}\ "(\#3/\#4)\ *\ (\#8/\#15)\ <\ (x\ ::\ real)" -\begin{isamarkuptxt} -\begin{isabelle} -\ 1.\ \#3\ /\ \#4\ *\ (\#8\ /\ \#15)\ <\ x% -\end{isabelle} -\end{isamarkuptxt} -\isacommand{apply}(simp) -\begin{isamarkuptxt} -\begin{isabelle} -\ 1.\ \#2\ <\ x\ *\ \#5 -\end{isabelle} -\end{isamarkuptxt} +\isacommand{lemma}\ {\isachardoublequote}{\isacharparenleft}{\isacharhash}{\isadigit{3}}{\isacharslash}{\isacharhash}{\isadigit{4}}{\isacharparenright}\ {\isacharasterisk}\ {\isacharparenleft}{\isacharhash}{\isadigit{8}}{\isacharslash}{\isacharhash}{\isadigit{1}}{\isadigit{5}}{\isacharparenright}\ {\isacharless}\ {\isacharparenleft}x\ {\isacharcolon}{\isacharcolon}\ real{\isacharparenright}{\isachardoublequote}% +\begin{isamarkuptxt}% +\begin{isabelle}% +\ {\isadigit{1}}{\isachardot}\ {\isacharhash}{\isadigit{3}}\ {\isacharslash}\ {\isacharhash}{\isadigit{4}}\ {\isacharasterisk}\ {\isacharparenleft}{\isacharhash}{\isadigit{8}}\ {\isacharslash}\ {\isacharhash}{\isadigit{1}}{\isadigit{5}}{\isacharparenright}\ {\isacharless}\ x% +\end{isabelle}% +\end{isamarkuptxt}% +\isacommand{apply}\ simp% +\begin{isamarkuptxt}% +\begin{isabelle}% +\ {\isadigit{1}}{\isachardot}\ {\isacharhash}{\isadigit{2}}\ {\isacharless}\ x\ {\isacharasterisk}\ {\isacharhash}{\isadigit{5}}% +\end{isabelle}% +\end{isamarkuptxt}% +\isacommand{oops}\isanewline +\isanewline +\isacommand{lemma}\ {\isachardoublequote}{\isacharparenleft}{\isacharhash}{\isadigit{3}}{\isacharslash}{\isacharhash}{\isadigit{4}}{\isacharparenright}\ {\isacharasterisk}\ {\isacharparenleft}{\isacharhash}{\isadigit{1}}{\isadigit{0}}{\isacharcircum}{\isacharhash}{\isadigit{1}}{\isadigit{5}}{\isacharparenright}\ {\isacharless}\ {\isacharparenleft}x\ {\isacharcolon}{\isacharcolon}\ real{\isacharparenright}{\isachardoublequote}\isanewline +\isacommand{apply}\ simp\ \isanewline \isacommand{oops}\isanewline \isanewline \isanewline \isanewline \isacommand{end}\isanewline -\end{isabelle} +\end{isabellebody}% %%% Local Variables: %%% mode: latex %%% TeX-master: "root"