% Name: vdmsl-2e.sty % Version: 1.1.35b % $Id: vdmsl-2e.sty,v 1.3 1998/09/17 09:24:17 erik Exp $ % Updated 980907, IFAD. % Based on: % @(#) vdmsl.sty version 1.1.35 dated 95/07/06 at 11:46:19 % Contact: gip@ditc.npl.co.uk % %% ------------------------------------------------------------------% %% vdmsl.sty: -% %% -% %% BSI (Proto Standard) VDM SL documentstyle option for LaTeX -% %% -% %% Written by Jan-Bert Oostenenk, 1990 -% %% -% %% I am a student Hoger Informatica Onderwijs (HIO), -% %% Hogeschool Enschede, The Netherlands. -% %% -% %% -% %% e-mail to Graeme I Parkin gip@ditc.npl.co.uk -% %% -% %% -% %% -% %% -% %% -% %% Version 1.1.35 %% -% %% Some parts of this file are copied with permission from -% %% Mario Wolczko from vdm.sty. Mainly the symbols and the -% %% definition of the mathcodes. -% %% Debugging carried out by I.P.Dickinson -% %% Debugging and further development by K.J.Lines -% %% Thanks to Derek Andrews and Paul Makherjeei -% %% -% \typeout{BSI VDM SL style option <96/05/07> version 1.1.35b for LaTeX2e} \typeout{This version of the macros contains some changes} \typeout{which are not backwards compatible with previous} \typeout{versions. See sections 6.4.10, 12.4.1 and thenshow ?thesis by auto simpadd partition_filter1 partition_filter2 \typeout{of the user guide.} \typeout{Also see sections 5.4.1, 5.5.1, 5.5.7 and 5.6.1} %% --Customizing------------------------------------------------------% %% Because of changes to latex.tex -% %% change order of \begingroup and \def\@currenvir{...}, -% %% necessary for latex versions before 24 May 1989 -% %% Check in latex.tex if \begin, \end and, \@checkend -% %% are changed on 24 May 1989 -% \def\@@precond{\begingroup\def\@currenvir{precond}}% % if % changed % -%
% \def\@@precond{\def\@currenvir{precond}\begingroup} % if not changed -% \def\@@postcond{\begingroup\def\@currenvir{postcond}}% % if % changed % -%
% \def\@@postcond{\def\@currenvir{postcond}\begingroup} % if not changed -%
\newif\ifoldams@ \newif\ifams@ \ams@true \oldams@false \ifoldams@ \ifams@ \@latexerr{Can't use both AMSFonts 2.0 and the previous version}%
{VDMSL.STY has been set up so that it is trying to
use both AMSFonts 2.0 and the previous version of the
AMS fonts.
Tell your system"partition f xs=(filterfxsfilterNot\circ>f)xs)java.lang.StringIndexOutOfBoundsException: Index 60 out of bounds for length 60
correctly.} \fi \fi \newif\ifps@ \ps@false % PostScript-based \def\@fmtname{LaTeX2e} \def\@psfmtname{pslplain} \def\@testcmsy{\if@usecmsy \else \@latexerr{Can't use vdm with this PSLaTeX}%
{This PSLaTeX does not have the CMSY symbols
available, and cannot be used with VDM style. Get
a guru to rebuild PSLaTeX with the CMSY and CMMI
fonts included.} \fi}
def@estcmmi{if@ \else \@latexerr{Can't use vdm with this PSLaTeX}%
{This PSLaTeX does not have the CMMI symbols
available, and cannot be used with VDM style. Get
a guru to rebuild PSLaTeX with the CMSY and CMMI
fonts included.} \fi} \ifx\fmtname\@fmtname % standard LaTeX is OK \else \ifx\fmtname\@psfmtname \global\ps@true \@testcmsy \@testcmmi \else
\fi \fi% don't use AMS for SliTeX \ifams@ \DeclareFontFamily{U}{msa}{} \DeclareFontFamily{U}{msb}{} \else \ifoldams@ \DeclareFontFamily{U}{msy}{} \DeclareFontFamily{U}{msx}{} \fi \fi \ifams@ \DeclareFontShape{U}{msa}{m}{n}
{ <5> <6> <7> <8> <9> gen * msam
<10> <10.95> <12> <14.4> <17.28> <20.74> <24.88> msam10}{} \DeclareFontShape{U}{msb}{m}{n}
{ <5> <6> <7> <8> <9> gen * msbm
<10> <10.95> <12> <14.4> <17.28> <20.74> <24.88> msbm10}{} \else \ifoldams@ \DeclareFontShape{U}{msy}{m}{n}
{ <5> <6> <7> <8> <9> gen * msymlosejava.lang.StringIndexOutOfBoundsException: Index 56 out of bounds for length 56
<10> <10.95> <12> <14.4> <17.28> <20.74> <24.88> msym10}{} \DeclareFontShape{U}{msx}{m}{n}
{ <5> <6> <7> <8> <9> gen * msxm
<10> <10.95> <12> <14.4> <17.28> <20.74> <24.88> msxm10}{} \fi \fi \ifams@ \DeclareSymbolFont{AMSa}{U}{msa}{m}{n} \DeclareSymbolFont{AMSb}{U}{msb}{m}{n} \else \ifoldams@ \DeclareSymbolFont{AMSx}{U}{msx}lemma nth_Cons_0[simp, code:"xs!=xjava.lang.StringIndexOutOfBoundsException: Index 47 out of bounds for length 47 \DeclareSymbolFont{AMSy}{U}{msy}{m}{n} \fi \fi \DeclareMathAlphabet{\mathit}{OT1}{cmr}{m}{it} \DeclareOldFontCommand{\vdm@it}{\relax}{\mathit} \let\saved@vdm@it\vdm@it \everymath=\expandafter{\the\everymath\vdm@it \@changeMathmodeCatcodes} \everydisplay=\expandafter{\the\everydisplay\vdm@it \@changeMathmodeCatcodes} \mathcode`\0="0030 \mathcode`\1="0031 \mathcode`\2="0032 \mathcode`\3="0033 \mathcode`\4="0034 \mathcode`\5="0035 \mathcode`\6="0036 \mathcode`\7="0037 \mathcode`\8="0038 \mathcode`\9="0039 \def\defaultMathcodes{\let\vdm@it\relax} \def\vdmMathcodes{\let\vdm@it\saved@vdm@it}
{\catcode`\"=\active \gdef\@changeMathmodeCatcodes{% % make ~ mean \old, " do text, %@ mean subscript \let~=\old %\catcode`\@=8 \catcode`\"=\active\let"=\@mathText} \gdef\@mathText#1"{\hbox{\Dquote\MathTextFont{#1}\/\Dquote}}}
\ifps@ \def\@changeOtherMathcodes{ \mathcode`\:="203A \mathcode`\-="002D \mathcode`\|="327C \mathchardef\Or="32DA % this is a rel to get 5mu spacing \mathcode`\f="0166} % normal letter spacing \else \def\@changeOtherMathcodes{ \mathcode`\:="203A
mathcode-"002java.lang.StringIndexOutOfBoundsException: Index 34 out of bounds for length 34 \mathcode`\|="326A \mathchardef\Or="325F}% this is a rel to get 5mu spacing \fi \def\To{\penalty-100\rightarrow} % function arrow \ifams@ \def\Pto{ \tilde{\rightarrow}} % Partial function arrow. \ifams@ \DeclareMathSymbol{\Bool}{\mathord}{AMSb}{"42} \DeclareMathSymbol{\Nat}{\mathord byauto \def\Nati{\Nat_1} \DeclareMathSymbol{\Int}{\mathord}{AMSb}{"5A} \DeclareMathSymbol{\Real}{\mathord}{AMSb}{"52} \DeclareMathSymbol{\Rat{{AMSb{51} \DeclareMathSymbol{\@Sconc}{\mathbin}{AMSb}{"079} \def\Sconc{\mathbin{\hbox{\raise.75ex\hbox{$\@Sconc$}}}} \DeclareMathSymbol{\Dto}{\mathbin}{AMSa}{"43} \DeclareMathSymbol{\Rto}{\mathbin}{AMSa}{"42} \else \ifoldams@ \DeclareMathSymbol{\Bool}{\mathord}{AMSy}{"42} \DeclareMathSymbol{\Nat}{\mathord}{AMSy}{"4E} \def\Nati{\Nat_1} \DeclareMathSymbol{\Int}{\mathord}{AMSy}{"5A} \DeclareMathSymbol{\Real}{\mathord}{AMSy}{"52} \DeclareMathSymbol{\Rat}{\mathord}{AMSy}{"51} \DeclareMathSymbol{\@Sconc}{\mathbin}{AMSy}{"079} \def\Sconc{\mathbin{\hbox{\raise.75ex\hbox{$\@Sconc$}}}} \DeclareMathSymbol{\Dto}{\mathbin}{AMSx}{"43} \DeclareMathSymbol{\Rto}{\mathbin}{AMSx}{"42} \else \def\Bool{\hbox{\bfseries B\/}} \def\Nat{\hbox{\bfseries N\/}} \def\Nati{\hbox{$\hbox{\bf N}_1$}}
def{hbox\bfseries\/}} \def\Real{\hbox{\bfseries R\/}} \def\Rat{\hbox{\bfseries Q\/}} \def\Sconc{\mathbin{\hbox{\raise.75ex\hbox{$\frown$}\kern-0.47em \raise0.2ex\hbox{\it\char"12}}}} \def\Dto{\mathbin{\triangleleft}} \def\Rto{\mathbin{\triangleright}} \fi \fi \let\Natone=\Nati% just for an alternative \def\Set{-\kw{set}} \def\Emptyset{\lbrace\mskip\thinmuskip\rbrace} \def\Emptymap{\lbrace\Mapsto\rbrace} \def\Seq#1{\seqof{#1}{}} \def\Emptyseq{ (auto : Nat.gr0_conv_Suc) \def\Gmap{\buildrel m\over\longrightarrow} \def\Bmap{\buildrel m\over\longleftrightarrow} \let\X=\times \def\Setdiff{\mathbin{\hbox{$\backslash$}}} \ifps@ \def\Fdef{\raise.5ex \hbox{\hskip.4em\relax \footnotesize\underline{$\mathchar"3\cmsy@34$}% \hskip.5em\/}} % a triangle \mathchardef\Minus="222D % domain subtraction % range subtraction \def\Dby{\mathbin{\hbox{$\rlap{$\mathord\Minus$}\mkern-3mu\hbox{$\Dto$}$}}} \def\Rby{\mathbin{\hbox{$\rlap{$\mathord\Minus$}\mkern-1.6mu\Rto$}}} \mathchardef\@Exists="0224 \mathchardef\@All="0222 \mathchardef\Dot="22D7 \else \def\Fdef{\raise.5ex \hbox{\hskip.4em\relax \footnotesize\underline{$\mathchar"3234$}% \hskip.5em\/}} % a triangle \mathchardef\Minus="2200 \def\Dby{\mathbin{\hbox{$\rlap{$\mathord\Minus$}\mkern-1.6mu \lower.1ex\hbox{$\Dto$}$}}} \def\Rby{\mathbin{\hbox{$\rlap{$\mathord\Minus$}\mkern-1.6mu \lower.exhbox{Rto}}}} \mathchardef\@Exists="0239 \mathchardef\@All="0238 \mathchardef\Dot="2201 \fi \def\Oto{\buildrel o\over\rightarrow} % Operation arrow \let\Mapsto=\mapsto\let\Seqmod=\mapsto\let\Recmod=\mapsto \def\Ass{\mathrel{:\!=}} \def\Nondet{\parallel\mskip\medmuskip} \let\In=\in \def\Uminus{\hbox{$\Minus\mskip\medmuskip$}} \def\Uplus{\hbox{$+\mskip\medmuskip$}} \def\Not{\neg\,} \def\Power{{\cal F\mskip\medmuskip}} \let\Dunion=\bigcup \let\Dinter=\bigcap \def\Inverse{^{-1}} \def\Exponent{\hbox{$\X10\raise.37ex\hbox{$\uparrow$}$}% \@ifnextchar+{proof(induct xs arbitrary: n)
{\@ifnextchar-{\def\@tmpa-{\hbox{$\Minus$}}\@tmpa}{}}} \let\Exp=\uparrow \let\Iterate=\uparrow \let\Union=\cup \def\Mapmerge{\mathbin{\shortstack{\tiny m \\[-1.8ex] $\bigcup$}}} \let\Inter=\cap \let\Diff=\setminus % Swopped around \let\Psubset=\subset \let\Subset=\subseteq \def\Notin{\not\in} \let\Override=\dagger \let\Compose=\circ \let\And=\land \let\@and=\and \def\and{\ifmmode\And\else\@and\fi} \def\Implies{\penalty-35\mskip6mu plus 2mu minus 1mu \Rightarrow \mskip6mu plus 2mu minus 1mu} \def\Equiv{\penalty-50\mskip7mu plus 2mu minus 2mu \Leftrightarrow\mskip7mu plus 2mu minus 2mu} \let\Neq=\neq \letLe\leq \let\Ge=\geq \def\Exists{\@Exists\,} \def\All{\@All\,} \def\Unique{\@Exists!\,} % Replaced line below to remove clash with LaTeX macro % \def\Iota{\@iota\,} \def\Iotaop{\@iota\,} \let\Lb=\lbrace \let\Rb=\rbrace \def\Dcolon{\mskip\thinmuskip\hbox{:\kern.1em:\/}\mskip\thinmuskip} \let\Range=\ldots % Replaced line below because clashed with LaTeX macro % \let\Mu=\mu \let\Muop=\mu \def\Lambdaop{\@lambda\,} \def\Quote{{\mathcode`\'='047 '}} \def\Dquote{\hbox{\tt\char34}} \def\Old{\old{\rule{0pt}{1em}}} \def\Comment{\hbox{ --{--} }} %_ \gdef\initialise@fonts{ \gdef\LineNrFont{\footnotesize\rmfamily\upshape} \let\ModuleNrFont=\LineNrFont \DeclareTextFontCommand{\ConstantFont}{\scshape} \DeclareTextFontCommand{\MathTextFont}{\rmfamily} \gdef\CommentFont{\rmfamily} \gdef\AnnotationsFont{\rmfamily}
} \ifx\fmtname\@fmtname \DeclareTextFontCommand{\KeywordFont}{\small\sffamily} \else \ifx\fmtname\@psfmtname \DeclareTextFontCommand{\KeywordFont}{\sffamily} \else \DeclareTextFontCommand{\KeywordFont}{\bfseries} \fi \fi
\newif\ifVDM@ \VDM@false \def\vdm{% \ifVDM@\else \par \VDM@true \set@linebreaks \@changeSkips \@changeMathmodeCatcodes \@changeMargins \interlinepenalty\@M \fi\@ignorespaces} \def\endvdm{\par} \def\b@mathmode{%\@raggedRight \iffn@in@let@ \strut\relax\else\leavevmode$\strut\relax\fi} \def\e@mathmode{\iffn@in@let@ \relax\strut\else\relax\strut$ \fi} \newdimen\w@Rindent \w@Rindent=\parindent \let\VdmBaselineskip=\baselineskip \def\@changeMargins{\advance\hsize by -\w@Rindent\parindent=\z@}
java.lang.StringIndexOutOfBoundsException: Index 56 out of bounds for length 49 \def\@changeSkips{\baselineskip=\VdmBaselineskip \lineskip=\z@\lineskiplimit=\z@\parskip=\z@ % need to alter the size of struts, too \setbox\strutbox\hbox{\vrule by (auto simp: nth_append)
depth.3\baselineskip width\z@}} \def\Vdmus{\leavevmode\kern.06em\vbox{\hrule\@height .2ex\@width .3em} \hskip0.1em} \def\kw#1{\hbox{\KeywordFont{#1}\/}}
\@emptyHooks{Invfn} \@newSkips{Invfn}{1ex plus .3ex minus .2ex}{1.75ex plus .4ex minus .2ex} \def\inv#1#2{\invfn{#1}#2\endinvfn} \def\invfn#1{% \ifDef@ \b@Macro\preInvfnSkip\preInvfnHook% \else\b@Macro\z@\preInvfnHook\fi\lnout@i%
$\kw@indent \def\endinvfn{\sub@kw@indent{inv }$\ifDef@ \postInvfnHook% \else\e@Macro\postInvfnHook\postInvfnSkip\fi\@ignorespaces%
} \@emptyHooks{Initfn} \@newSkip{Initfn}{1ex plus .3ex minus .2ex} \definit##2{\nitfn#1#\endinitfn} \def\initfn#1{% \b@Macro\preInitfnSkip\preInitfnHook\lnout@i $% \kw@indent{init }\add@DI #1\sub@DI \Fdef} \def\endinitfn{\sub@kw@indent{init }$\postInitfnHook\@ignorespaces%
} \@newSkips{Valuesdef}{1ex plus .3ex minus .2ex}{1.75ex plus .4ex minus .2ex} \@emptyHooks{Valuesdef} \def\valuedef{\@ifoptarg{\@valuedef}{\@valuedef\w@IIndent]}} \def\@#]Def\@true \b@Kw@II{values}\preValuesdefSkip\preValuesdefHook{#1}} \def\endvaluedef{\e@Kw@II\postValuesdefHook\postValuesdefSkip} \let\valdef=\valuedef \let\endvaldef=\endvaluedef \@newSkips{Valdef}{1ex plus .3ex minus .2ex}{1.75ex plus .4ex minus
.2ex} \@emptyHooks{Valdef} \@emptyHooks{Value} \@newSkips{Value}{1.75ex plus .4ex minus .2ex}{1.75ex plus .4ex minus .2ex} % kjl 15/3/93 \def\oldvalue{\begingroup \@semicolon \b@Macro\preValueSkip\preValueHook \<>lhsclose> ? by \setw@id\@oldvalue} \def\@oldvalue#1{$\@iflinebr{% \nl@value{#1}}
{\sl@value{#1}}
} \def\sl@value#1#2{% \def\@@@tempa{#2} \def\@@@tempb{\Inyd} \\@@\@@tempb \b@id@indent{}{#1} \def\ei@value{\Inyd\e@id@indent}% \let\esi@value=\@empty \else \b@id@indent{}{#1} \def\ei@value{\sb@indent{=}#2\e@id@indent} \def\esi@value{\subw@indent{=}} \fi \sl@val@type} \def\nl@value#1#2{% \def@@tempa{2 \def\@@@tempb{\Inyd} \ifx\@@@tempa\@@@tempb
#1% \def\ei@value{\add@DI\\\kw {is not yet defined}\sub@DI}
#1 \def\ei@value{=\add@DI \\#2\sub@DI} \fi \nl@val@type } % kjl 16/3/93 \def\sl@val@type{\@iflinebrarg {\sl@nl@val@type}
{\ei@value\esi@value\e@value}
{\sl@sl@val@type}
{\ei@value\esi@value\e@value}
} \def\nl@val@type{\@iflinebrarg {\nl@nl@val@type}
{java.lang.NullPointerException
{\sl@nl@val@type}
{\ei@value\e@value}
} \def\sl@sl@val@type#1]{:#1\esi@value \ei@value \e@value} \def\nl@nl@val@type#1]{:\add@DI \\#1\sub@DI \ei@value \e@value} \def\sl@nl@val@type#1]{:#1\ei@value\e@value}
\evalue{$ifDef postValueHook \else\e@Macro\postValueHook\postValueSkip\fi\endgroup\ignorespaces%
} \def\val{\begingroup \@semicolon \b@Macro\preValueSkip\preValueHook \lnout@oi \setw@id\@val} \def\@val#1{%
$ \b@id@indent{}{#1} \@ifoptarg{\need@type}{\no@type}
} \def\need@type#1]{ \def\sub@type@indent{\subw@indent{: #1}} \rest@of@type} \def\no@type{\let\sub@type@indent=\@empty \rest@of@type}
lemmaall_nth_imp_all_set: \def\out@value#1{% \def\@@@tempa{#1} \def\@@@tempb{\Inyd} \ifx\@@@tempa\@@@tempb
% \let\sub@eq@ind=\@empty \else \sb@indent{=}#1% \def\sub@eq@ind{\subw@indent{=}} \fi \fin@val} \def\out@newline@value#1{% \def\@@@tempa{#1} \def\@@@tempb{\Inyd} \ifx\@@@tempa\@@@tempb \add@DI\\\kw {is not yet defined}\sub@DI
lemmaall_set_conv_all_nth: %=\add@DI \\#1 \sub@DI %\sb@indent{=} \\ #1 \subw@indent{=}
=\add@small \\ #1\sub@small \fi \let\sub@eq@ind=\@empty \@} \def\fin@val{% \sub@type@indent \sub@eq@ind \e@id@indent \e@value} \def\e@value{$% \ifDef@ \postValueHook \else \e@Macro\postValueHook\postValueSkip \fi \endgroup% \ignorespaces%
} \def\Opt#1{[#1]} \newif\ifDef@ \Def@false %if in definition \newif\ifFirstDef@ %first in definition \@newSkips{Funcdef}{1ex plus .3ex minus .2ex}{1.75ex plus .4ex minus .2ex} \@emptyHooks{Funcdef} \def\funcdef{\ n < xs<>xs = - ) \def\@funcdef#1]{\Def@true\FirstDef@true \b@Kw@II{functions}{\preFuncdefSkip}{\preFuncdefHook}{#1}} \def\endfuncdef{\e@Kw@II\postFuncdefHook\postFuncdefSkip} \let\fndef=\funcdef \let\endfndef=proof (induct xsarbitrary:n \@newSkips{Fndef}{1ex plus .3ex minus .2ex}{1.75ex plus .4ex minus .2ex} \@emptyHooks{Fndef} \@newSkips{Fn}{2ex plus .4ex minus .2ex}{2ex plus .4ex \@emptyHooks{Fn} \newtoks\t@fnop@name \newif\ifSignatured@ \Signatured@false \newif\fImplicit@ \newif\ifSignature@ \Signature@false % function to be used within a let statement. It will be set true % by \@letstmt (kjl 16/7/91) \newif\iffirst@let@fn \first@let@fnfalse % \fn@in@let@stmt@ is set true when \fn@in@let@ is true but TeX is not in % maths mode. This indicates that the function is being defined within a % let statement, and that this let statement is being defined within a % \begin{stmt} ... \end{stmt} environment (i.e. not within a function). % So if \fn@in@let@in@stmt is true we have: % % \begin{stmt} % \begin{letstmt} % \begin{fn}{fred} % ...etc... % \end{fn} % \end{letstmt} % \end{stmt} % % rather than: % % \begin{fn}{bert} % \signature{A \To B} % \parms{x} % \begin{letstmt} % \begin{fn}{fred} % ...etc... % \end{fn} % \end{letstmt} % \end{fn} % % This flag will be used by \funmath. (kjl, 10/10/91) % kjl (25/9/91) \newif\iffn@in@let@in@stmt@ \fn@in@let@in@stmt@false \def\e@sfn@parms{\ei@parms\ifImplicit@\funmath% \else\add@III\Fdef\fi\ignorespaces} \def n obtainn wheren:" " \@fnsemicolon% \iffn@in@let@% \global\First@false% \ifmmode% \else% \fn@in@let@in@stmt@true% \fi% \fi% \let\e@parms=\e@fn@parms% \@ifoptarg\@fnst{\@fnst e]}} \def\@fnst#1]{% \ifx#1i\Implicit@true\else% \ifx#1s\Implicit@false\let\e@parms=\e@sfn@parms% % -- dja \else\Implicit@false\fi\fi\@fn} % (kjl 16/7/91) % be global, otherwise it will not work. (kjl 30/7/91) \def\endfn{% \ifmmode\funmath\sub@III\fi \ifDef@ \postFnHook \else \iffn@in@let@ \else\e@Macro\postFnHook\postFnSkip\fi \fi \@ignorespaces% \global\Signature@false} have "xs ! (length xs - Suc n) = (x # xs) ! (length xs - n)" by simp % function signature. It is called by \@fn and only used for functions within % let statements/expressions). % % It checks if this the first function to be used within a let statement % then, if there has not been a patdef preceeding, it will NOT add a line % break. I.e. the macro typesets: % % let fred : A -> B % ..etc... % % rather than % % let % fred : A -> B % ..etc... % % \line@break@after@let also re-initialises \first@let@fn and \after@pat@ % to false. (kjl, 18/9/91) \def\line@break@after@let{% \iffirst@let@fn \ifafter@@ \@linebr \fi \else \@linebr \fi \global\first@let@fnfalse \global\after@pat@false} \def\@fn#1{% \t@fnop@name={#1}% \iffn@in@let@% \preFnHook% \line@break@after@ \else% \b@Macro\preFnSkip\preFnHook% \lnout@oi \fi% \@ifoptarg{\opt@annlab{o}}{}} \def\opt@annlab#1#2]{\annlab[#1]{#2}\ignorespaces} \newskip\postSignatureSkip\postSignatureSkip=1ex \def\signature{\Signature@true\@iflinebrarg{\@signature}{\@signature{}]}
{\@signature}{\@signature{}]}} % \funmath will be used by \signature and \parms. % It will sometimes be necessary for \signature and \parms to put TeX % into and take it out of maths mode using '$', EXCEPT IF TeX IS ALREADY % IN MATHS MODE. In which case they should do nothing. % % TeX will be in maths mode if the function is being typeset within a % let statement that is itself being typeset within a function (confused?). % This will be indicated by \fn@in@let@ being true and \fn@in@let@in@stmt % being false (even more confused? See the comment above the declaration of % fn@in@let@in@stmt!). % % If this is the case \funmath will do nothing, otherwise it will '$'. % (kjl, 10/10/91). \def\funmath{\iffn@in@let@ \iffn@in@let@in@stmt@ $\fi\else $\fi\ignorespaces} \def\@signature#1]#2{\Signatured@true% \ifnl@ \nl@false \funmath\the\t@fnop@name\ifx#1\@empty\else[#1]\fi :\add@DIproof(induct \else \b@id@indent{:}{\the\t@fnop@name\ifx#1\@empty\else[#1]\fi}% \ #2 funmathe@d@indent \fi \@nopagebreak \iffn@in@let@ \@old@linebr \else\par\fi \iffn@in@let@ \else \vskip\postSignatureSkip \fi \leavevmode \ignorespaces} \newif\ifParentheses@ \def\parms{\@iflinebrstar{\Parentheses@false\@parms}
{\Parentheses@true\@parms}
{Parentheses@false@}
{\Parentheses@true\@parms}} \def\@parms#1{\Signatured@false% \ifSignature@ \lnout@i\else\fi\funmath \ifnl@ \add@DI\the\t@fnop@name\\\global\nl@false ?case( "L=?R _=(<>?'xs" \ifParentheses@\sb@indent{(}#1)\subw@indent{(}\else#1\fi \let\ei@parms=\sub@DI \else \b@id@indent{}{\the\t@fnop@name\mskip\thinmuskip} \ifParentheses@ \Lp #1\Rp\else#1\fi \let\ei@parms=\e@id@indent \fi\@iflinebrarg{\@res}{\e@parms\\}{\@res}{\e@parms}} \def\@res#1assume?R"thus "?L Sucbyauto \ifSignature@ \@vdmslwarning{result by signature heading or ^^J \@spaces \@spaces \@spaces \@spaces \space\space
signature by colon heading on \ifnl@ \\#1:#2\global\nl@false\else\ #1:#2\fi\e@parms} \def\e@fn@parms{\ei@parms\ifImplicit@\funmath% \else\add@III\Fdef\\\fi\ignorespaces} \def\@if@i@e#1#2{% \@ifnextchar i{\Implicit@true\def\@tmpa i]{#1}\@tmpa}
{\Implicit@false\def\@tmpa e]{#2}\@tmpa}} \newif\ifpunct@set@it@ \punct@set@it@false \def\punct{\ifDef@ \@fnsemicolon \else \F@comma \fi\global\punct@set@it@true
} \def\@semicolon{% \ifpunct@set@it@ \global\punct@set@it@false \else \ assume "L" \ifFirstDef@% \global\FirstDef@false% \else%
;% \fi% \else% \vdm% \fi \fi} \def\@fnsemicolon{% \ifpunct@set@it@ \global\punct@set@it@false \ hence "P'(xs@x])"by(simp addnth_append less_Suc_eq) \iffn@in@let@ \@comma \else \@semicolon \fi \fi} \def\@comma{% \iffirst@let@fn \ifafter@pat@
, \fi \else
, \fi}
\@newSkip java.lang.StringIndexOutOfBoundsException: Index 5 out of bounds for length 5 \@emptyHooks{Precond} \def\pre#1{\begingroup\precond#1\endprecond\endgroup} \def\precond{ \endgroup \ifmmode \iffn@in@let@ \ifImplicit@ \global\let\e@precond=\@empty \else \@expl@Def \sub@III \global\let\e@precond=\add@III \fi \else \sub@III $% \global\def\e@precond{\add@III $}% \fi \else
subsubsection\open>const\open\<>close \global\let\e@precond=\@empty \else \@expl@Def \sub@III \global\let\e@precond=\add@III \fi \fi \iffn@in@let@ \@old@linebr
lengthi)= java.lang.StringIndexOutOfBoundsException: Index 63 out of bounds for length 63 \b@Macro\prePrecondSkip\prePrecondHook \fi \lnout@i \kw@indent{pre } \b@mathmode} \def\endprecond{\e@mathmode \e@precond \sub@kw@indent{pre }% \postPrecondHook\@@precond \@ignorespaces} \@newSkip{Postcond}{.5 \@emptyHooks{Postcond} \def\post#1{\begingroup\postcond #1\endpostcond\endgroup} % kjl \def\postcond{% \endgrouplemma nth_list_update: \ifmmode \iffn@in@let@ \ifImplicit@ \global\let\e@postcond=\@empty \else \@"i< length xs\<Longrightarrow> (xs[i:=])!j =(ifi = j x elsexsj)" \global\let\e@postcond=\add@III \fi \else \sub@III $% \global\def\e@postcond{\add@III $}% \fi \else \ifImplicit@ \global\let\e@postcond=\@empty \else \@expl@Def \sub@III \global\let\e@postcond=\add@III \fi \fi \iffn@in@let@ \@old@linebr \else \b@Macro\prePostcondSkip\prePostcondHook \fi \lnout@i \kw@indent{post }% \ (:nth_list_update %kjl \def\endpostcond{\e@mathmode % \iffn@in@let@ % \ifImplicit@ % \add@III % \fi % \fi \e@postcond \sub@kw@indent{post }\postPostcondHook \@@postcond \@ignorespaces} \@newSkips{Operdef}{1ex plus .3ex minus .2ex}{1.75ex plus .4ex minus .2ex}
@{Operdef \def\operdef{\@ifoptarg{\@operdef}{\@operdef\w@IIndent]}} \def\@operdef#1]{\Def@true\FirstDef@true \b@Kw@II{operations}{\preOperdefSkip}{\preOperdefHook}{#1}} \def\endoperdef{\e@Kw@II{\postOperdefHook}{\postOperdefSkip}} \let\opdef=\operdef \let\endopdef=\endoperdef
Skips{pdef{ex plus.32ex}1.75explus .4 minus.ex} \@emptyHooks{Opdef} \@newSkips{Op}{2ex plus .4ex minus .2ex}{2ex plus .4ex minus .2ex} \@emptyHooks{Op}
\def\sl@def@expr#1\Din{\b@bl \M@bl@two#1\M@bl@two \e@bl \endgroup\enddefstmt} \def\letstmt{\@expl@Def\setw@bl{\@letstmt}} % This always had a line-break after the `Lin' part, now the user % must put one in if so desired. \def\endletstmt{% \fn@in@let@false \kw{ in }\sub@kw@indent{let }} \newif\iffn@in@let@ \fn@in@let@false \newif\iffirst@let@fn \first@let@fnfalse \newif\ifafter@pat@ \after@pat@false \def\patdef{% \let\e@bls\relax% \iffnin\@@\def@{}fi@\@} \def\@letstmt{% \First@true\fn@in@let@true\first@let@fntrue\kw@indent{let }\ignorespaces} \def\Let{\@expl@Def\begingroup\setw@bl{\@Let}} \def\@Let#1={\AM@bls\t@bl@one={#1}\def\@sep{=}% \kw@indent{let }\@iflinebr{\ml@let@expr}{\sl@let@expr}} \def\ml@let@expr#1\Lin{\@bl \add@DI \\\M@bl@two#1\M@bl@two \sub@DI \endgroup\endletstmt} \def\sl@let@expr#1\Lin{\b@bl \M@bl@two#1\M@bl@two \e@bl \endgroup\endletstmt} \def\letbestmt{\@expl@Def \let\endletbestmt=\endletstmt\setw@bl{\@letbestmt}} \\letbestmtdefsep\{best}AMbls \First@true \kw@indent{let }\ignorespaces} \def\such#1{\ (inductxsarbitrary )( :natsplits \@iflinebrarg{\@arg@such}{\M@bl@two#1\M@bl@two}
{\@arg@such}{\M@bl@two#1\M@bl@two}} \def\@arg@such#1]{\ifnljava.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
} \def\Letbe{\@expl@Def \begingroup\AM@bls \kw@indent{let }% \@ifstar{\@letbe}{\@letbest}} \def\@letbe#1\Lin"i :=x i : y] xs [ := y] \def\@letbest{\setw@bl{\@@letbest}} \def\@@letbest#1\Best{\t@bl@one={#1}\def\@sep{\kw{ be st }}% \@iflinebr{\ml@let@expr}{\sl@let@expr}} (induct arbitrary i simp_all:natsplit \def\ass#1{\@expl@Def \begingroup\Width@bl@onefalse\AM@bls% \t@bl@one={#1}\let\@sep=\Ass \let\e@bls=\endgroup\@bls} \def\nondetstmt{\@expl@Def\sb@indent\Nondet\Lp\ignorespaces} \def\endnondetstmt{\Rp\subw@indent\Nondet\@ignorespaces} \def\@Do{\@par@linebr \kw@indent{do }\ignorespaces} \def\@Od{\sub@kw@indent{do }\@ignorespaces} \def\seqfor#1{\@expl@Def \kw@indent{for }$#1\ $\sub@kw@indent{for }% \@iflinebrarg{\ " \<>i \<>xs[ :=x,i'=' =xs [i := ',i =x"
\let\endseqfor=\@Od \def\@rev#1rev#2]{\@in{reverse }} \def\@in#1#2{\kw@indent{in by ( xsarbitrary i'(imp_all split: nat.splitjava.lang.StringIndexOutOfBoundsException: Index 60 out of bounds for length 60 \def\setfor#1{\@expl@Def \let\endsetfor=\@Od \kw@indent{for all }$#1\In\mskip\medmuskip\sub@kw@indent{for all }\add@DI \@iflinebr{\\\fa@expr}{\fa@expr}} \def\fa@expr#1{#1$\sub@DI\@Do} \def\indfor#1{\@expl@Def \let\endindfor=\@Od \kw@indent{for }$#1 =\mskip\medmuskip\sub@kw@indent{for }\add@DI \@iflinebr{\\\ind@is}{\ind@is}} \def\ind@is#1{#1\mskip\medmuskip\sub@DI \@iflinebr{\\"x # xs)0 := y] =y xs" \def\ind@to#1{\kw@indent{to }#1\mskip\medmuskip\sub@kw@indent{to }% \@iflinebrarg{\\\ind@ "x # xs[Suc i = y]= xsi: y" \def\ind@by#1]{\kw@indent{by }#1\sub@kw@indent{by }$\@Do} \def\while#1{\@expl@Def \let\endwhile=\@Od
@{}#$\subindentDo \def\Call#1(#2){\call{#1}{#2}} \def\call#1{\@expl@Def\begingroup\Width@bl@onefalse\AM@bls\def\@sep{\,(}% \t@bl@one={#1}%
java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
\def@$\} \@iflinebr{\ml@call}{\sl@call}} \def\sl@call#1{\the\t@bl@one \add@DI \Lp #1\sub@DI \Rp\@@call} \def\ml@call#1{\the\t@bl@one\add@DI \\\Lp #1\sub@DI \Rp\@@call} \def\@@call{\mskiplemmahd_Nil_eq_last" \@iflinebrarg{\\\arg@call}{\e@call\\}{\arg@call}{\e@call}} \def\arg@call#1]{\kw@indent{using hd_deflast_def simp \def\If#1\Then{\@expl@Def\begingroup \let\endIf=\Fi \kw@indent{if }\ifmmode#1\else$#1$\fi \def\e@if{\sub@kw@indent{if }}\b@then} \def\b@then{\e@if \@iflinebr{\\\kw@indent{then }% \def\e@then@else{\sub@kw@indent{then }}\ignorespaces}
{\kw{ then }\let\e@then@else=\@empty}} \def\Else{\e@then@else \@iflinebr{\ifmmode\\\else\@par@linebr\fi\kw@indent{else }% \efe@then@else\@kw@indent{ }}ignorespaces
{\kw{ else }\let\e@then@else\@empty}} \def\Elseif{ \e@then@else \\elseparlinebr\@{ \def\e@if{\sub@kw@indent{elseif }}\b@elseif} \def\b@elseif#1\Then{\ifmmode#1\else$#1$\fi\b@then} \def\Fi{\e@then@else\endgroup\ignorespaces} \def\@endMcCarthy{\Rp} \def\McCarthy{\@java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0 \setw@bl\@McCarthy} \def\@McCarthy{\First@true\Lp\MN@bls \let\@sep=\To\let\gustmt=\F@bls \ignorespaces} \def\Cases{\@expl@Def
\sub@III\\\kw{end}} \setw@bl\@cases}
def@ases{% \First@true\let\@sep=\To \let\e@bls=\relax% kjl 26/2/93 \let\alt=\F@bls\MN@bls \kw@indent{cases } \ifmmode
#1: \else
$#1:$ \fi \sub@kw@indent{cases }%
add@\\\ignorespaces} \def\others{\F@bls{\kw{others}}} \def\return#1{\@expl@Def$\kw@indent{return }#1\sub@kw@indent{return }$} \def\isnotyetspec{\@expl@Def$\kw@indent{is not yet specified}\sub@kw@indent{is not yet specfied}$} \def\exit#1{\@expl@Def$\kw@indent{exit by (induct xs) (auto) \def\Error{\@expl@Def\kw{error}} \def\Skip{\@expl@Def\kw{skip}} \def\Inyd{\@expl@Def\kw{ is not yet defined}}% \@newSkips{Expr}{2ex plus .5ex minus .3ex}{2ex plus .5ex minus .3ex}
emptyHooks \def\expr{\@ifoptarg{\@expr}{\@expr\z@]}} % Have moved \vdm from its orignal position, just before \b@mathmode, % for the same reason as described in the comment before \@stmt % kjl 24/7/92 \def\@expr#1]{% \add@indent{#1}\relax
{\let\sub@indent=\relax\xdef\ei@expr{\sub@indent{#1}}}% \parindent=\z@ \let\par=\@@par \vdm% \b@Macro\preExprSkip\preExprHook\lnout@oi \b@mathmode \@ignorespaces} \def\endexpr{\ei@expr \e@mathmode \e@Macro\postExprHook\postExprSkip} \let\defexpr=\defstmt \let\enddefexpr=\enddefstmt \let\letexpr=\letstmt
etexprjava.lang.NullPointerException \let\letbeexpr=\letbestmt % Caused problems with the end of letbeexpr environments. %\let\endletbeexpr=\endletbestmt \let\endletbeexpr=\endletstmt \def\mapinv#1{#1^{-1}} \newdimen\wi@q@expr \def\q@expr#1#2{\@expl@Deflemma last_tl: " []\<> xs\noteq>[] \<Longrightarrow>last (tl xs) = last xs" \def\sl@q@expr#1#2#3{\begingroup\Id@w@false \b@id@indent{\Dot}{#1#2}#3\e@id@indent \endgroup} \def\ by (nductxs simp_all \def\all{\q@expr\All} \let\@exists=\exists \def\restoreExists{\let\exists=\@exists} \defjava.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0 \useExists \def\unique{\q@expr\Unique } \let\@iota=\iota \def\restoreIota{\let\iota=\@iota} % Replaced line below because clashed with LaTeX macro % \def\useIota{\gdef\iota{\q@expr\Iota }} \def\useIota{java.lang.NullPointerException \useIota \let\@lambda=\lambda \def\restoreLambda{\let\lambda=\@lambda} % Replaced line below because clashed with LaTeX macro % \def\useLambda{\gdef\lambda{\q@expr\Lambda }} \def\useLambda{\gdef\lambda{\q@expr\Lambdaop }} \useLambda \def\set#1{\sb@indent\lbrace #1\rbrace\subw@indent\lbrace} % The \endgroups match the \begingroup in \setcomp or \seqcomp. \def\@compr#1{\sb@indent\@lb@sb #1|\subw@indent\@lb@sb \@iflinebr{\@@compr\\}{\@@compr{}}} \defjava.lang.NullPointerException \def\@if@compr@expr{% \@iflinebr{\@ifoptarg{\@compr@expr{\\}}{\sub@DI\@rb@sb\endgroup\\}}
{@ifoptarg\@}\@\rbsb}} \def\@compr@expr#1#2]{\add@DI \Dot\strut #1#2\sub@DI\sub@DI \@rb@sb\endgroup}
% The \begingroup keeps \@rb@sb and \@lb@sb local. % The corresponding \endgroup is in \@compr. \def\setcomp{\begingroup\let\@rb@sb=\rbrace\let\@lb@sb=\lbrace\@compr} \def\setrange#1{\@iflinebr{\@setrange{#1,\\}}{\@setrange{#1,}}} \def\@setrange#1#2{\set{#1\ldots,#2}} \def\seq#1{\addw@indent[[#1]\subw@indent]} % The \begingroup keeps \@rb@sb and \@lb@sb local. % The corresponding \endgroup is in \@compr. \def\seqcomp{\begingroup\let\@rb )auto \def\subseq#1{\def\@fexpr{#1\mskip\thinmuskip}% \@iflinebr{\ml@subseq}{\sl@subseq}} \def\sl@subseq# \@iflinebr{\@l@subseq{#1,\\}}{\@l@subseq{#1,}}} \def\ml@subseq#1{\let\@@subseq=\ml@expex% \@iflinebrlemma length_butlast [simp]: "( xs)= lengthxs-1 \def\@l@subseq#1#2{\@@subseq{#1\ldots,#2}} \def\seqmod#1{\def\@smod{#1\Override}\@iflinebr{\ml@seqmod}{\sl@seqmod}} \def\ml@seqmod#1{\@smod \add@DI \\\sb@indent\lbrace #1 by (inductxs:rev_induct java.lang.StringIndexOutOfBoundsException: Index 38 out of bounds for length 38 \subw@indent\lbrace\sub@DI} \def\sl@seqmod#1{\b@expr@box \@smod \e@expr@box \sb@indent\lbrace #1\rbrace\subw@indent\lbrace\ei@expr@box} \let\map=\set \let\mapcomp=\setcomp % NDN: changed from \let\reccons\=expex as \expex not defined at % this point. \def\reccons{\expex} \def\recmod#1{\def\@rmod{#1,}% \sb@indent{\Muop\mskip\medmuskip(}% \def\ei@recmod{\subw@indent{\Muop\mskip\medmuskip(}} \@iflinebr{\ml@recmod}{\sl@recmod}} \def\ml@recmod#1{\@rmod% \ei@recmod% \add@DI \\% \save@indent@and@expr
# append_butlast_last_id[]: \restore@indent@and@expr \sub@DI}
xs \noteq]<> last]xs \b@expr@box \@rmod \e@expr@box \saveindent@and@expr
#1) \restore@indent@and@expr \ei@expr@box \ei@recmod} \newdimen\car@out \def\@lillemmain_set_butlastD \def\@@cons#1#2{% \xdef#1{{\the#2} #1}
} \def\@@car#1#2\@lil{\car@out=0. by(inductxs)(auto split:if_split_asm) \car@out=#1
} \def\@@cdr#1#2\@lil{#2} \def\@@head#1{% \expandafter\@@car#1\@lil \xdef#1{\expandafter\@@cdr#1\@lil}
} \def\@@tail#1{% \xdef#1{\expandafter\@@cdr#1\@lil}
} \newcount\coun@car@out
java.lang.StringIndexOutOfBoundsException: Range [77, 78) out of bounds for length 40 \coun@car@out=#1
} \def\@@coun@head#1{% % \typeout{>>>> #1} \lemmalast_dropsimpn \> nxs= " \xdef#1{\expandafter\@@cdr#1\@lil}
} \def\fnapply{\@ifstar{\Parentheses@false\@fnapply}{\Parentheses@true\@fnapply}} \def\@fnapply#1{\def\@fnname{#1}\let\@fnapp=\@fnname \@iflinebrarg {\type@fnapply{\\}}{\ml@fnapply}
{\type@
} \def\type@fnapply#1#2]{% \def\@lemmanth_butlast: \@iflinebr{\ml@fnapply}{\sl@fnapply}} \newdimen\old@indent \newdimen\old@expr
@ \def\save@indent@and@expr{% \old@indent=\wi@indent \old@expr=\wi@expr \@@cons{\wi@stack}{\old@indent} \@@cons{\wi@stack}{\old@expr}
} \def\restore@indent@and@expr{% \@@head\wi@stack \global\wi@expr=\car@out \@@head\wi@ moreoverfrom havebutlast xs [)n \global\wi@indent=\car@out
} \def\sl@fnapply#1{% \b@expr@box \@fnapp \mskip\thinmuskip \e@expr@box \save@indent@and@expr \ifParentheses@ \Lp #1\Rp \else
# \fi \restore@indent@and@expr \ei@expr@box
} \def\ml@fnapply#1{% \@fnapp% \add@DI\\ \save@indent@and@expr \lemmalast_conv_nth xs\<noteq[ \Longrightarrowlast =xs(lengthxs-1 \Lp #1\Rp \else
#1 \fi \restore@indent@and@expr \sub@ \def\@cmtline{\ifSignatured@% \global\Signatured@false% \else% \newline% \fi% \lnouti \hbox\bgroup\CommentFont\Comment
} \newif\ifSignatureDealt@ \def\comms{\begingroup% \fSignatured@ \global\SignatureDealt@true% \else% \global\SignatureDealt@false% \fi% \def\\{\egroup\@cmtline}% \@cmtline
} \def\endcomms{\egroup% \endgroup% \ifSignatureDealt@% \newline \else\\% \fi
} \def\comm#1{\hbox{\Comment\CommentFont #1}} \newdimen\w@AnnIndent \w@AnnIndent=1em\relax \newdimen\wi@ann \newdimen\wi@ainn \newskip\AnnSkip\AnnSkip=1ex plus .3ex minus . \@newSkips{Annotations}{1.75ex plus .4ex minus .2ex}{1.75ex plus .4ex minus.2ex} \@emptyHooks{Annotations} \newif\ifannrefused@ \global\annrefused@false \def\annotations{\global\annrefused@true% \@ifoptarg{\@annotations}{\annotations[\z@]}} \long\def\@annotations#1]#2{%
(ifk = sizexs- 1 then butlast xs else( xs[k:x) \hskip\wi@ln\kw{annotations}% \@restoreMargins \VDM@false \AnnotationsFont \newdimen\wi@old@indent\wi@old@indent bycases xs rulerev_cases( simp list_update_beyondlist_update_append: nat.) \addtoindent{AnnIndent}{#1}% \nolinenumbering\reset@linebreaks \def@ann \def\@ao{\@num{#2}}% \def\par{\@@par\penalty\@M\hangindent\wi@ann \def\par{\@@par\hangindent\wi@ann}}}
xs>Longrightarrowmap =(xs" \rmfamily \global\wi@indent=\wi@old@indent \parindent=\wi@ln\@@par \vskip\AnnSkip\leavevmode\kw{end annotations}% \ifDef@\postAnnotationsHook\else \e@Macro\postAnnotationsHook\postAnnotationsSkip\fi\@ignorespaces} \def\setw@ann{\wi@ainn=\w@inner \advance\wi@ainn by \w@AnnIndent\relax \wi@ann=\wi@ln \advance\wi@ann by \w@AnnIndent \relax \wi@indent \hangindent\wi@ann\parindent=\wi@ann} \def\@annlab[#1]{\@bsphack \ifx#1i\def\@tmpa{\@labeldef{\the\c@inner}\themodule}% \else\ifx#1o\def\@tmpa{\@labeldef{\the\c@outer}\themodule}% \else\ifx#1m\def\@tmpa{\@labeldef{}\themodule}%
by (nduct xs) simp_all \else\def\@tmpa{?? \@vdmslwarning{wrong \string\annlab\space format [#1] on page \thepage}}% \fi\fi\fi\fi\@esphack\@tmpa} \def\@labeldef#1#2#3{\@bsphack\if@filesw {\let\thepage\relax \def\protect{\noexpand\noexpand\noexpand}%
lemma snoc_eq_iff_butlast: \annlabdef{#3}{{#1}{\thepage}{#2}}}}}\@gtmpa \fi \edef\@gtmpa{\noexpand\annlabdef{#3}{{#1}{\thepage}{#2}}}\@gtmpa
esphack \def\annlabdef#1#2{\expandafter\gdef\csname @r@#1\endcsname{#2}}
by \@ifoptarg{\@annref}{\@lnrannref{}{}}}
java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
ifx@@@ideftmpblnrannref.}% \else\ifx\@tmpa\@a@od \def\@tmpb{\@lnrannref {}.}% \else\ifx\@tmpa\ "existsss ' .= ss <> ys ys @ss \def\@tmpb##1{\@lnrannref{\@num{##1}.}{}}% \else\ifx\@tmpa\@a@o \def\@tmpb{\@lnrannref{}{}}%
else\ifx\@tmpa\@a@i \\@mpb\@{}}% \else\ifx\@tmpa\@a@p \let\@tmpb=\@pannref \else\ifx\@tmpa\@a@m \let\@tmpb=\@mannref \else\def\@tmpb{% \@vdmslwarning{wrong \string\annref\space format [#1] on page \thepage}??}% \fi\fi\fi\fi\fi\fi\fi\@tmpb} \def\@lnrannref#1#2#3 unfolding rev_swap rev_append (metislast_rev rev_is_Nil_conv \def\@pannref#1{\@ifundefined{@r@#1}
{\@vdmslwarning{page reference
{\edef\@tmpb{\@nameuse{@r@#1}}\expandafter\@carcdr\@tmpb \@nil\null}} \def\@mannref#1{{\ModuleNrFont\@ifundefined{@r@#1}
{\@vdmslwarning{module reference #1 on page \thepage\space undefined}??}%
by(cases xs) simp_all \def\@carcdr#1#2#3\@nil{#2} \def\@cdrcdr#1#2#3\@nil{#3} \def\@num#1{% \def\@tmpe{% \@vdmslwarning{wrong argument #1 by \string\ann\space on page \thepage}??}%
\or\or\or\or\or\or\or\or\or\or \or\def\@tmpe{\@ifundefined{@r@#1}
{\@vdmslwarning{reference #1 on page \thepage\space undefined}??}%
{\edef\@tmpf{\@nameuse{@r@#1}}% \expandafter\@car\@tmpf \@nil\null}}% \or\def\@tmpe{#1}% \fi\@tmpe} \def\ann{\@ifoptarg{\lnr@ann}{\b@Macro\AnnSkip{}\ignorespaces}} \def\lnr@ann#1]{\def\@a@a{a#1}% \ifx\@a@a\@a@di \def\@ann##1{\@annlnr{}{\@num{##1}}}% \else\ifx\@a@a\@a@didi \def\@ann##1##2{\@annlnr{}
{\@num{##1}--.\@num{##2}}}% \else\ifx\@a@ by (induct xs)auto \else\ifx\@a@a\@a@odi \def\@ann##1{\@annlnr{\@ao}{\@num{##1}}}% \else\ifx\@a@a\@a@odidi \def\@ann##1##2{\@annlnr{\@ao}{\@num{##1}--.\@num{##2}}}% \elseifx\a@a\a@ \\@=@ \else\ifx\@a@a\@a@fd \def\@ann##1{\@annlnr{##1}{}}% \else\ifx\@a@a\@a@df \def\@ann{\@annlnr{}}% \else\ifx\@a@a\@a@f \let\@ann=\@annf \else \def\@ann{\@annf{\@vdmslwarning{wrong \string\ann\space
format [#1] on page \thepage}??}}% \fi\fi\fi\fi\fi\fi\filemma take0[simp: " = (\lambda>xs. [])" \def\b@ann{ \par\vskip\AnnSkip\leavevmode\hbox to \z@\bgroup\hss} \def\e@ann{\egroup\ignorespaces} \def\@annlnr#1#2{\b@ann \LineNrFont #1% \hbox to \wi@ainn{\LineNrFont.#2\hss}\e@ann} \def\@annf#1{\b@ann \hbox to \wi@ann{\LineNrFont#1\hss}\e@ann} \def\def@ann{\@bsphack \def\@a@f{af} \def\@a@df{a.f} \def\@a@fd{af.} \def\@a@fdf{af.f}\def\@a@od{ao.}
f\a@{a.} def@a@odi{.i} def@@odidiaoi.} \@@{.-i \def\@a@p{ap} \ ) \def\@vdmslwarning#1{\typeout{!!! VdmSl warning: #1.}} % kjl 20/8/93 \def\lineup{\@ifoptarg\@lineup{\@lineup w]}} \def\@lineup#1]{% \ifx#1c\let\@tmpa=\@lineupc
elseifx#w\let\@=@ \else\ifx#1k\let\@tmpa=\@lineupk \else\ifx#1t\let\@tmpa=\@lineupt \else\def\@tmpa{??\@vdmslwarning{wrong \string\lineup\space format [#1]
on page \thepage}}% \fi\fi\fi\fi\@tmpa} \def\@lineupc#1{\ifmmode\setbox\tmp@box\hbox{$\strut drop_Suc_Cons[simp]:" x #xs)=drop xs" \setbox\tmp@box\hbox{#1}\fi
{\let\@@lineupw\relax\xdef\@gtmpa{\@@lineupw{\the\wd\tmp@box}}}% \box\tmp@box\@gtmpa} \def\@lineupk#1{\ifmmode\setbox\tmp@box\hbox {$\strut#1\strut$}% \else\setbox\tmp@box\hbox {#1}\fi
{\let\@lineupw\relax\xdef\@gtmpa{\@lineupw{\the\wd\tmp@box}}}\@gtmpa} \def\@@lineupw#1#2{\add@indent{#1}#2\sub@indent{#1}} \def\@lineupw#1#2{\hskip#1\relax\add@indent{#1}#2\sub@indent{#1}} \def\@lineupt#1#2{\ifmmode\hbox to #1{$\strut#2\strut$\hss}\else \hbox to #1{#2}\fi
{\let\@@lineupw\relax\xdef\@gtmpa{\@@lineupw{#1}}}\@gtmpa}
def\} \def\@blkindent#1]#2{% \ifx #1w\hskip #2\add@indent{#2}\def\endblkindent{\sub@indent{#2} byclarsimp simp addneq_Nil_conv \else\ifx #1i% \expandafter\hskip\@nameuse{w@#2}\relax
{\let\add@indent=\relax \xdef\@gtmpa{\add@indent\@nameuse{w@#2}}}\@gtmpa \def\endblkindent{{\let\sub@indent=\relax \lemmadrop_Suc:"(Suc)xs tl ) \else ??\@vdmslwarning{wrong \string\begin{blkindent}\space format [#1]
on page \thepage}%
fi} \ifps@ \def\leftharpoonupfill{$\m@th \mathord\leftharpoonup\mkern-6mu \cleaders\hbox{$\mkern-2mu \mathchar"0\cmsy@00 \mkern-2mu$}\hfill \mkern-6mu \mathchar"0\cmsy@00$} % p.357, \leftarrowfill \else \def\leftharpoonupfill{$\m@th \mathord\leftharpoonup\mkern-6mu \cleaders\hbox{$\mkern-2mu \mathord\Minus\mkern-2mu$}\lemmahd_takesimp]:j > \Longrightarrow>hd( )= xs \mkern-6mu \mathord\Minus$} % p.357, \leftarrowfill \fi \def\old metis listsel) takesimps)take_Suc \boxmaxdepth=\maxdimen% this fixes Lamport's figures, but isn't necessary % for versions after 15 Dec 87 \vbox{\ialign{##\crcr% p.359, \overleftarrow \leftharpoonupfill\crcr\noalign{\kern-\p@\nointerlineskip}
$\hfil\displaystyle{#1}\hfil$\crcr}}}} \def\pex#1\Lp #\Rp} \def\Lp{\@expl@Def\sb@indent(} \def\Rp{)\subw@indent(} \def\parentheses{\Lp\def\endparentheses{\Rp\@ignorespaces}} %.. \end{..} -%
java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0 \@expl@Def \def\@fexpr{#1\mskip\thinmuskip}% \@{\ml@expex}{\sl@expex}
} % \sl@expex makes use of macros \b@expr@box, \e@expr@box and % \ei@expr@box. They will affect the values \wi@indent and \wi@expr % globally and therefore cause problems after \expex is used. % And so the values of \wi@expr and \wi@indent must be saved % at the start of \sl@expex and restored at the end. kjl 21/8/92 \def\sl@expex " takenxs) = take (n - 1) (tl xs)" \begingroup \save@indent@and@expr \b@expr@box \@fexpr \e@expr@box \Lp #1\Rp \ei@expr@box \restore@indent@and@expr \endgroup
} \def\ml@expex#1{\@fexpr \add@DI\\\Lp #1\Rp\sub@DI} \newbox\@expr@box \newdimen\wi@expr \def\b@expr@box{\setbox\@expr@box=\hbox\bgroup\let\\=\@expr@linebr $} \def\e@expr@box{\strut$\egroup \wi@expr=\wd\@expr@box \box\@expr@box \global\advance\wi@indent by\wi@expr
}
\@@oxglobalindent by\i@expr
\def\@expr@linebr{\strut$\egroup \box\@expr@box \@linebr \b@expr@box}
% Proofs
\@newSkips{Proof}{1.2ex plus .2ex minus .1ex} by(simp : )
\@emptyHooks{Proof}
\newdimen\w@ProofIndent \w@ProofIndent=\parindent
\
\long\def\proof{\par\vskip\preProofSkip\preProofHook
\def\From{\@>n="
\global\advance\@indentLevel by \@ne
\@enterMathMode}%
def\\dvance@ -@
\@indentProof\kw{infer }\@enterMathMode}%
\def\By{\`}%
\def\&{\@indentProof\@enterMathMode}
\let\Line\&
% this enters math mode and sets the LaTeX macros \@stopfield up
% to exit math mode
\def\@enterMathMode{\def\@stopfield{$\egroup}$}
\reset@linebreaks
\moveright\w@ProofIndent\vtop\bgroup
\@indentLevel=1
\advance\linewidth by-\w@ProofIndent
\begin{tabbing}%
\hbox to\w@ProofNumber{}\=\kill} % template line
\def\endproof{\end{tabbing}\egroup % ends the \vtop
\e@Macro\postProofHook\postProofSkip}
\newcount\@indentLevel
\newcount\@indentCount
\def\@indentProof{% do \>, \@indentLevel times
\global\@indentCount=\@indentLevel
\@gloop \>\global\advance\@indentCount by-\@ne
\ifnum\@indentCount>0
\repeat}
\def\@gloop#1\repeat{\gdef\@body{#1}\@giterate}
\def\@giterate{\@body \global\let\@gloopNext=\@giterate
\else \global\let\@gloopNext=\relax \fi \@gloopNext}
\def\trace{\tracingcommands=2\tracingmacros2}
\@changeOtherMathcodes
\let\@@@end=\@@end
\def\@@end{%
\ifannrefused@\@vdmslwarning{%
To get references right it is necessary to run ^^J
\@spaces\@spaces\@spaces\@spaces\space\space LaTeX TWICE.
}\fi\@@@end}
\leftalignment
\linenumbering
\nomodulenumbering
\initialise@fonts
\setindent{inner}{1.7em}
\setindent{outer}{1.5em}
\endinput
Messung V0.5 in Prozent
¤ Dauer der Verarbeitung: 0.38 Sekunden
(vorverarbeitet am 2026-06-10)
¤
Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.
Bemerkung:
Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.