lcp@293: % iman.sty : Isabelle Manual Page Layout lcp@293: % lcp@293: \typeout{Document Style iman. Released 17 February 1994} lcp@110: lcp@293: \hyphenation{Isa-belle man-u-script man-u-scripts ap-pen-dix mut-u-al-ly} lcp@293: \hyphenation{data-type data-types co-data-type co-data-types } lcp@110: lcp@293: \let\ts=\thinspace lcp@110: lcp@301: %usage: \iflabelundefined{LABEL}{if not defined}{if defined} lcp@301: \newcommand{\iflabelundefined}[1]{\@ifundefined{r@#1}} lcp@301: lcp@301: lcp@110: %%%INDEXING use sedindex to process the index lcp@110: %index, putting page numbers of definitions in boldface lcp@110: \newcommand\bold[1]{{\bf#1}} lcp@293: \newcommand\fnote[1]{#1n} lcp@110: \newcommand\indexbold[1]{\index{#1|bold}} lcp@110: lcp@350: %for indexing constants, symbols, theorems, ... lcp@350: \newcommand\cdx[1]{{\tt#1}\index{#1@{\tt#1} constant}} lcp@350: \newcommand\sdx[1]{{\tt#1}\index{#1@{\tt#1} symbol}} lcp@350: lcp@350: \newcommand\tdx[1]{{\tt#1}\index{#1@{\tt#1} theorem}} lcp@350: \newcommand\tdxbold[1]{{\tt#1}\index{#1@{\tt#1} theorem|bold}} lcp@350: lcp@350: \newcommand\mltydx[1]{{\tt#1}\index{#1@{\tt#1} ML type}} lcp@350: \newcommand\xdx[1]{{\tt#1}\index{#1@{\tt#1} exception}} lcp@350: lcp@350: \newcommand\ndx[1]{{\tt#1}\index{#1@{\tt#1} nonterminal}} lcp@350: \newcommand\ndxbold[1]{{\tt#1}\index{#1@{\tt#1} nonterminal|bold}} lcp@350: lcp@350: \newcommand\cldx[1]{{\tt#1}\index{#1@{\tt#1} class}} lcp@350: \newcommand\tydx[1]{{\tt#1}\index{#1@{\tt#1} type}} lcp@350: \newcommand\thydx[1]{{\tt#1}\index{#1@{\tt#1} theory}} lcp@350: lcp@110: %for cross-references: 2nd argument (page number) is ignored lcp@110: \newcommand\see[2]{{\it see \/}{#1}} lcp@110: \newcommand\seealso[2]{{\it see also \/}{#1}} lcp@110: lcp@110: %set argument in \tt font; at the sime time, index using * prefix lcp@350: \newcommand\rmindex[1]{{#1}\index{#1}\@} lcp@110: \newcommand\ttindex[1]{{\tt#1}\index{*#1}\@} lcp@110: \newcommand\ttindexbold[1]{{\tt#1}\index{*#1|bold}\@} lcp@110: lcp@110: %set argument in \bf font and index in ROMAN font (for definitions in text!) lcp@110: \newcommand\bfindex[1]{{\bf#1}\index{#1|bold}\@} lcp@110: lcp@110: lcp@110: %%% underscores as ordinary characters, not for subscripting lcp@110: %% use @ or \sb for subscripting; use \at for @ lcp@110: %% only works in \tt font lcp@110: %% must not make _ an active char; would make \ttindex fail! lcp@110: \gdef\underscoreoff{\catcode`\@=8\catcode`\_=\other} lcp@110: \gdef\underscoreon{\catcode`\_=8\makeatother} lcp@110: \chardef\other=12 lcp@110: \chardef\at=`\@ lcp@110: lcp@110: % alternative underscore lcp@110: \def\_{\leavevmode\kern.06em\vbox{\hrule height.2ex width.3em}\hskip0.1em} lcp@110: lcp@110: %%% \dquotes permits usage of "..." for \hbox{...} -- also taken from under.sty lcp@110: {\catcode`\"=\active lcp@110: \gdef\dquotes{\catcode`\"=\active \let"=\@mathText}% lcp@110: \gdef\@mathText#1"{\hbox{\mathTextFont #1\/}}} lcp@110: \def\mathTextFont{\frenchspacing\tt} lcp@110: lcp@110: %%%% meta-logical connectives lcp@110: lcp@110: \let\Forall=\bigwedge lcp@110: \let\Imp=\Longrightarrow lcp@110: \let\To=\Rightarrow lcp@110: \newcommand\Var[1]{{?\!#1}} lcp@110: lcp@110: %%%% ``WARNING'' environment lcp@110: \def\dbend{\vtop to 0pt{\vss\hbox{\Huge\bf!}\vss}} lcp@110: \newenvironment{warn}{\medskip\medbreak\begingroup \clubpenalty=10000 lcp@293: \small %%WAS\baselineskip=0.9\baselineskip lcp@293: \noindent \hangindent\parindent \hangafter=-2 lcp@293: \hbox to0pt{\hskip-\hangindent\dbend\hfill}\ignorespaces}% lcp@293: {\par\endgroup\medbreak} lcp@110: lcp@110: lcp@110: %%%% Standard logical symbols lcp@110: \let\turn=\vdash lcp@110: \let\conj=\wedge lcp@110: \let\disj=\vee lcp@110: \let\imp=\rightarrow lcp@110: \let\bimp=\leftrightarrow lcp@293: \newcommand\all[1]{\forall#1.} %quantification lcp@110: \newcommand\ex[1]{\exists#1.} lcp@110: \newcommand{\pair}[1]{\langle#1\rangle} lcp@110: lcp@110: \newcommand\lbrakk{\mathopen{[\![}} lcp@110: \newcommand\rbrakk{\mathclose{]\!]}} lcp@110: \newcommand\List[1]{\lbrakk#1\rbrakk} %was \obj lcp@110: \newcommand\vpile[1]{\begin{array}{c}#1\end{array}} lcp@110: lcp@110: \let\int=\cap lcp@110: \let\un=\cup lcp@110: \let\inter=\bigcap lcp@110: \let\union=\bigcup lcp@110: lcp@110: \def\ML{{\sc ml}} lcp@110: \def\OBJ{{\sc obj}} lcp@350: \def\AST{{\sc ast}} lcp@110: lcp@110: \def\LCF{{\tt LCF}\@} lcp@110: \def\FOL{{\tt FOL}\@} lcp@110: \def\HOL{{\tt HOL}\@} lcp@110: \def\LK{{\tt LK}\@} lcp@110: \def\ZF{{\tt ZF}\@} lcp@110: \def\CTT{{\tt CTT}\@} lcp@110: \def\Cube{{\tt Cube}} lcp@110: \def\Modal{{\tt Modal}} lcp@110: lcp@110: %macros to change the treatment of symbols lcp@110: \def\relsemicolon{\mathcode`\;="303B} %treat ; like a relation lcp@110: \def\binperiod{\mathcode`\.="213A} %treat . like a binary operator lcp@110: \def\binvert{\mathcode`\|="226A} %treat | like a binary operator lcp@110: lcp@110: %redefinition of \sloppy and \fussy to use \emergencystretch lcp@110: \def\sloppy{\tolerance2000 \hfuzz.5pt \vfuzz.5pt \emergencystretch=15pt} lcp@110: \def\fussy{\tolerance200 \hfuzz.1pt \vfuzz.1pt \emergencystretch=0pt} lcp@110: lcp@350: %%%% \tt things lcp@350: lcp@350: \def\ttdescriptionlabel#1{\hspace\labelsep \tt #1} lcp@350: \def\ttdescription{\list{}{\labelwidth\z@ \itemindent-\leftmargin lcp@350: \let\makelabel\ttdescriptionlabel}} lcp@350: lcp@350: \let\endttdescription\endlist lcp@350: lcp@293: \chardef\ttilde=`\~ % A tilde for \tt font lcp@293: \chardef\ttback=`\\ % A backslash for \tt font lcp@293: \chardef\ttlbrace=`\{ % A left brace for \tt font lcp@293: \chardef\ttrbrace=`\} % A right brace for \tt font lcp@110: lcp@110: \newfont{\sltt}{cmsltt10} %% for output from terminal sessions lcp@110: \newcommand\out{\ \sltt} lcp@110: nipkow@140: % "itmath.sty" use cmr italic for letters in math mode and get the lcp@293: % usual letter spacing of text mode. nipkow@140: % nipkow@140: % Michael Lawley, April 1993 nipkow@140: % (lawley@cit.gu.edu.au) nipkow@140: % nipkow@140: % Derived from itma.sty (of unknown origin). lcp@110: % lcp@110: % MATHCODES lcp@110: % lcp@110: % The mathcodes for the letters A, ..., Z, a, ..., z are changed to nipkow@140: % generate text italic rather than math italic by default. This makes lcp@110: % multi-letter identifiers look better. The mathcode for character c nipkow@140: % is set to "7000 (variable class) + "400 (text italic) + c. nipkow@140: % nipkow@140: % For NFSS the mathcode is "7000 (variable class) + (hex)\itfam + c nipkow@140: % \itfam is probably equal to 7. nipkow@140: % nipkow@140: nipkow@140: \ifx\undefined\hexnumber@ nipkow@140: \def\hexnumber@#1{\ifcase#1 \z@ nipkow@140: \or \@ne \or \tw@ \or \thr@@ nipkow@140: \or 4\or 5\or 6\or 7\or 8\or nipkow@140: 9\or A\or B\or C\or D\or E\or F\fi} nipkow@140: \fi lcp@110: lcp@110: \def\@setmcodes#1#2#3{{\count0=#1 \count1=#3 nipkow@140: \loop \global\mathcode\count0=\count1 \ifnum \count0<#2 nipkow@140: \advance\count0 by1 \advance\count1 by1 \repeat}} lcp@110: nipkow@140: \edef\@tempa{\hexnumber@\itfam} nipkow@140: nipkow@140: \@setmcodes{`A}{`Z}{"7\@tempa 41} nipkow@140: \@setmcodes{`a}{`z}{"7\@tempa 61} nipkow@140: nipkow@140: \ifx\define@mathgroup\undefined\else lcp@293: \define@mathgroup\mv@normal{\itfam}{cmr}{m}{it}\fi