home *** CD-ROM | disk | FTP | other *** search
/ Fresh Fish 4 / FreshFish_May-June1994.bin / useful / dist / text / tex / pastex / macros / latex / nfss2 / psextsty.dtx (.txt) < prev    next >
LaTeX Document  |  1993-08-13  |  108KB  |  2,502 lines

  1. % \iffalse
  2. % This file is part of the NFSS2 (New Font Selection Scheme) package.
  3. % ------------------------------------------------------------------
  4. % This file was contributed. In case of error please inform the
  5. % original author.
  6. % \fi
  7. % \iffalse meta-comment
  8. % Sebastian Rahtz, 7.93. spqr@minster.york.ac.uk
  9. % This file is designed to be
  10. % used with the NFSS (New Font Selection Scheme) package.
  11. % \fi
  12. \def\fileversion{4.2}
  13. \def\filedate{12.08.93}
  14. % \title{The {\tt psextsty.doc} file\thanks
  15. %         {This file has version number \fileversion, dated \filedate}.
  16. %       for use with the new font selection scheme}
  17. % \author{Sebastian Rahtz}
  18. % \maketitle
  19. % \StopEventually{}
  20. % As always we begin by identifying the latest version of this file
  21. % on the VDU and in the {\sf log} file.
  22. %    \begin{macrocode}
  23. %<*main>
  24. \newlinechar`\^^J
  25. \immediate\write\sixt@@n{File: `psstyles'  \space
  26.  \fileversion\space <\filedate> (SPQR)}
  27. \immediate\write\sixt@@n
  28.   {********************************************************************}
  29. %</main>
  30. %<*style>
  31. %  For the style file we have to make sure that it runs under NFSS
  32. % release 2, so we check for appropriate command names.
  33. %    \begin{macrocode}
  34. \@ifundefined{DeclareFontShape}
  35.      {\@ifundefined{selectfont}
  36.         {\@latexerr{This style option can only be used
  37.                     with the new^^Jfont selection scheme}\@eha}
  38.         {\@latexerr{This style option can only be used
  39.                     with the new^^Jfont selection scheme *release 2*}
  40.                    {Your format contains NFSS release 1, but this style
  41.                     option was^^Jdeveloped for release 2.}
  42.         }
  43.       \endinput}
  44.      {}
  45. \immediate\write\sixt@@n{PSNFSS2 \fileversion\space <\filedate> (SPQR)}
  46. %</style>
  47. %<*nfmtimes>
  48. \immediate\write\sixt@@n{File: `nfmtimes.sty' }
  49. \renewcommand{\sfdefault}{pun}
  50. \renewcommand{\rmdefault}{mnt}
  51. \renewcommand{\ttdefault}[T1]{cmtt}
  52. \def\bfdefault{b}
  53. %</nfmtimes>
  54. %<*nfimpri>
  55. \immediate\write\sixt@@n{File: `nfimpri.sty' }
  56. \renewcommand{\sfdefault}{mim}
  57. \renewcommand{\rmdefault}{pgs}
  58. \renewcommand{\ttdefault}{pcr}
  59. \def\bfdefault{b}
  60. %</nfimpri>
  61. %<*nfbembo>
  62. \immediate\write\sixt@@n{File: `nfbembo.sty' }
  63. \renewcommand{\sfdefault}{pop}
  64. \renewcommand{\rmdefault}{pbe}
  65. \renewcommand{\ttdefault}{pcr}
  66. \def\bfdefault{b}
  67. %</nfbembo>
  68. %<*nfgaram>
  69. \immediate\write\sixt@@n{File: `nfgaram.sty' }
  70. \renewcommand{\sfdefault}{pop}
  71. \renewcommand{\rmdefault}{pgm}
  72. \renewcommand{\ttdefault}{pcr}
  73. \def\bfdefault{b}
  74. %</nfgaram>
  75. %<*nfbaske>
  76. \immediate\write\sixt@@n{File: `nfbaske.sty' }
  77. \renewcommand{\sfdefault}{pun}
  78. \renewcommand{\rmdefault}{pnb}
  79. \renewcommand{\ttdefault}{pcr}
  80. \def\bfdefault{b}
  81. %</nfbaske>
  82. %<*nflucid>
  83. \immediate\write\sixt@@n{File: `nflucid.sty' }
  84. \renewcommand{\sfdefault}{plcs}
  85. \renewcommand{\rmdefault}{plc}
  86. \renewcommand{\ttdefault}{pcr}
  87. \def\bfdefault{b}
  88. %</nflucid>
  89. %<*nflucma>
  90. \immediate\write\sixt@@n{File: `nflucma.sty' }
  91. \DeclareSymbolFont{operators}{\encodingdefault}{\rmdefault}{m}{n}
  92. \DeclareSymbolFont{letters}{OML}{plcm}{m}{it}
  93. \DeclareSymbolFont{symbols}{OMS}{plcm}{m}{n}
  94. \DeclareSymbolFont{largesymbols}{OMX}{plcm}{m}{n}
  95. \DeclareSymbolFont{italics}{\encodingdefault}{\rmdefault}{m}{it}
  96. \SetSymbolFont{letters}{bold}{OML}{plcm}{m}{it}%
  97. \SetSymbolFont{operators}{bold}{\encodingdefault}{\rmdefault}{b}{n}%
  98. \SetSymbolFont{operators}{normal}{\encodingdefault}{\rmdefault}{m}{n}%
  99. \SetMathAlphabet{\mathbf}{normal}{\encodingdefault}{\rmdefault}{b}{n}%
  100. \SetMathAlphabet{\mathsf}{normal}{\encodingdefault}{\sfdefault}{m}{n}%
  101. \SetMathAlphabet{\mathrm}{normal}{\encodingdefault}{\rmdefault}{m}{n}%
  102. \SetMathAlphabet{\mathbf}{bold}{\encodingdefault}{\rmdefault}{m}{n}%
  103. \SetMathAlphabet{\mathsf}{bold}{\encodingdefault}{\sfdefault}{b}{n}%
  104. \SetMathAlphabet{\mathrm}{bold}{\encodingdefault}{\rmdefault}{b}{n}%
  105. %</nflucma>
  106. %<*nfoz>
  107. \def\filename{nfoz.sty}
  108. \typeout{<Style option \filename, \filedate>}
  109. %       This document is organised as follows:
  110. %       SECTION 1       Z FONTS
  111. %       SECTION 2       Z SYMBOLS
  112. %       SECTION 3       Z ENVIRONMENTS
  113. % Modification History:
  114. %               The original zed.sty file was written by Mike Spivey.
  115. %               These macros have been extensively modified to
  116. %               include extra symbols and environments for Object-Z
  117. %               and now have little resemblence to the original macros.
  118. %               Mike Spivey has also extended his macros along
  119. %               different lines for Z - the latest version of macros
  120. %               are called fuzz.sty and come with a syntax checker for Z.
  121. %               They can be purchased for a small fee from:
  122. %                       mike@prg.oxford.ac.uk
  123. %        87     original zed.sty file - Mike Spivey
  124. %        88     modified to include extra symbols and environments - Paul King
  125. %        88     modified to include macros for UQ editor - Ray Neucom
  126. %    May 89     modified to include object-oriented constructs - PK
  127. %    Jun 89     modified to automatically change Z symbol size - PK
  128. % 27 Jul 89     removed spurious space from \@setsize - PK
  129. %  3 Aug 89     adjust style of equation number field - PK
  130. % 24 Aug 89     add optional field to topline and zedline for proofs - PK
  131. % 15 Sep 89     added extra qed symbols, updated classcom and comment - PK
  132. % 25 Sep 89     renamed z@[bB]ig to z[bB]ig and changed temporal symbols - PK
  133. % 30 Sep 89     added \znewpage, \Infrule, removed space above state box - PK
  134. % 12 Mar 90     changed \@setsize to work better for double-spaced text - PK
  135. % 31 Mar 90     added definition for @ and \bool and redefined `;' - PK
  136. %  9 May 90     changed \sdef to \varsdef, \sdef & \defs to Spivey's latest - PK
  137. % 27 May 90     added \c{n}{text} - a tab like \t{n} with text at left - PK
  138. % 29 May 90     added `corners' to boxes and \zedcornerheight - PK
  139. % 11 Jul 90     added \rename*[y/x] and \zseq \zset ..., changed \zeq \zimp - PK
  140. %  2 Aug 90     added subseq - PK
  141. %  9 Nov 90     changed \M to hopefully interact better with spacing -  PK
  142. % 24 Feb 92     changed to work with NFSS - Sebastian Rahtz
  143. %               check out \@ifundefined at start to isolate
  144. %               differences
  145. % 29 Dec 92     changed to work with NFSS2 - Sebastian Rahtz
  146. %               REMOVED the old code. This is NFSS2 only!!!
  147. % Please post any updates that you may make to this file to:
  148. %       Paul King -- ACSnet: king@batserver.cs.uq.oz.au
  149. %---------------------------
  150. %       SECTION 1       Z FONTS
  151. % The AMS extra symbol fonts are loaded.
  152. %       Note: msam and msbm sometimes called euxm and euym respectively
  153. %       NOTE: the new AMSFONTS 2.0 call these fonts msam and msbm repectively
  154. %       (the fonts below need to be renamed if you want to use the new fonts)
  155. \DeclareMathVersion{oz}
  156. \SetMathAlphabet{\mathrm}{oz}{\encodingdefault}{\rmdefault}{m}{n}%
  157. \SetMathAlphabet{\mathbf}{oz}{\encodingdefault}{\rmdefault}{bx}{n}%
  158. \SetMathAlphabet{\mathsf}{oz}{\encodingdefault}{\sfdefault}{m}{n}%
  159. \DeclareSymbolFont{italics}{\encodingdefault}{\rmdefault}{m}{it}%
  160. \DeclareSymbolFontAlphabet{\mathrm}{operators}
  161. \DeclareSymbolFontAlphabet{\mathit}{letters}
  162. \DeclareSymbolFontAlphabet{\mathcal}{symbols}
  163. \DeclareSymbolFontAlphabet{\ozit}{italics}
  164. \DeclareSymbolFont{lasy}{U}{lasy}{m}{n}
  165. \DeclareSymbolFont{AMSa}{U}{msa}{m}{n}
  166. \DeclareSymbolFont{AMSb}{U}{msb}{m}{n}
  167. \let\mho\undefined
  168. \let\Join\undefined
  169. \let\Box\undefined
  170. \let\Diamond\undefined
  171. \let\leadsto\undefined
  172. \let\sqsubset\undefined
  173. \let\sqsupset\undefined
  174. \let\lhd\undefined
  175. \let\unlhd\undefined
  176. \let\rhd\undefined
  177. \let\unrhd\undefined
  178. \DeclareMathSymbol{\mho}{\mathord}{lasy}{"30}
  179. \DeclareMathSymbol{\Join}{\mathrel}{lasy}{"31}
  180. \DeclareMathSymbol{\Box}{\mathord}{lasy}{"32}
  181. \DeclareMathSymbol{\Diamond}{\mathord}{lasy}{"33}
  182. \DeclareMathSymbol{\leadsto}{\mathrel}{lasy}{"3B}
  183. \DeclareMathSymbol{\sqsubset}{\mathrel}{lasy}{"3C}
  184. \DeclareMathSymbol{\sqsupset}{\mathrel}{lasy}{"3D}
  185. \DeclareMathSymbol{\lhd}{\mathrel}{lasy}{"01}
  186. \DeclareMathSymbol{\unlhd}{\mathrel}{lasy}{"02}
  187. \DeclareMathSymbol{\rhd}{\mathrel}{lasy}{"03}
  188. \DeclareMathSymbol{\unrhd}{\mathrel}{lasy}{"04}
  189. \DeclareSymbolFontAlphabet{\bbold}{AMSb}
  190. \mathversion{oz}
  191. % allow change of size within schemas. this is a sod to get right;
  192. % my principle (eventually!) was to go out of math temporarily, change
  193. % size, go into an inner math, do the business, then get out of math
  194. % and back to outer math
  195. \newbox\strutbox@
  196. \def\strut@{\copy\strutbox@}
  197. \addto@hook\every@size{%
  198.     \setbox\strutbox@\hbox{\lower.5\normallineskiplimit
  199.          \vbox{\kern-\normallineskiplimit\copy\strutbox}}}
  200. \def\bBigg@#1#2{%
  201. \mbox{\ifcase#1\or\large\or\Large\or\LARGE\or\small\or\footnotesize\fi
  202. $#2$}\nulldelimiterspace\z@ \m@th}
  203. \addto@hook\every@size{\setbox\z@\vbox{\hbox{$($}\kern\z@}%
  204.   \big@size 1.2\ht\z@}
  205. \newdimen\big@size
  206. \def\zBIG{\bBigg@{3}}
  207. \def\zBig{\bBigg@{2}}
  208. \def\zbig{\bBigg@{1}}
  209. \def\zsmall{\bBigg@{4}}
  210. \def\zSmall{\bBigg@{5}}
  211. %       WORD STYLES
  212. % these need handling a bit differently in NFSS
  213. \def\String#1{\hbox{`{\tt #1}'}}
  214. \def\STRING#1{\hbox{``{\tt #1}''}}
  215. \def\infix#1{\z@rel{{\underline{#1}}}}
  216. \def\word#1{\z@op{#1}}
  217. \def\keyword#1{\z@op{\mbox{\mathrm{#1}}}}
  218. \def\boldword#1{\z@op{\mbox{\mathbf{#1}}}}
  219. \def\underword#1{\z@op{{\underline{#1}}}}
  220. \def\underkeyword#1{\z@op{{\underline{\mbox{\mathrm{#1}}}}}}
  221. \def\underboldword#1{\z@op{{\underline{\mbox{\mathbf{#1}}}}}}
  222. %---------------------------
  223. %       SECTION 2       Z SYMBOLS
  224. % The mathcodes for the letters A, ..., Z, a, ..., z are changed to
  225. % generate text italic rather than math italic by default. This makes
  226. % multi-letter identifiers look better. The mathcode for character c
  227. % is set to "7000 (variable family) + "400 (text italic) + c.
  228. \def\@setmcodes#1#2#3{{\count0=#1 \count1=#3
  229.         \loop \global\mathcode\count0=\count1 \ifnum \count0<#2
  230.         \advance\count0 by1 \advance\count1 by1 \repeat}}
  231. \@setmcodes{`A}{`Z}{"7441} % 74
  232. \@setmcodes{`a}{`z}{"7461} % 74
  233. %       SECTION 2       Z SYMBOLS
  234. % The mathcodes for the letters A, ..., Z, a, ..., z are changed to
  235. % generate text italic rather than math italic by default. This makes
  236. % multi-letter identifiers look better. The mathcode for character c
  237. % is set to "7000 (variable family) + "400 (text italic) + c.
  238. \def\@setmcodes#1#2#3{{\count0=#1 \count1=#3
  239.         \loop \global\mathcode\count0=\count1 \ifnum \count0<#2
  240.         \advance\count0 by1 \advance\count1 by1 \repeat}}
  241. \@setmcodes{`A}{`Z}{"7441} % 74
  242. \@setmcodes{`a}{`z}{"7461} % 74
  243. % Also, the mathcode for semicolon is set to "8000, so it behaves as an
  244. % active character in math mode; it is defined to insert a thick space.
  245. % \semicolon is a semicolon as an ordinary symbol.
  246. \let\@mc=\mathchardef
  247. \mathcode`\;="8000 % Makes ; active in math mode
  248. {\catcode`\;=\active \gdef;{\semicolon\;}}
  249. \@mc\semicolon="603B
  250. %               ------ UTILITY MACROS FOR Z SYMBOLS ------
  251. % \z@op         makes a large math operator
  252. % \z@rel        makes a math relation
  253. % \z@bin        makes a binary operator
  254. % each use a mathstrut to defeat TeX's vertical adjustment.
  255. % \z@bigXXX big version of symbol
  256. \def\z@op#1{\mathop{\mathstrut{#1}}\nolimits}
  257. \def\z@bin#1{\mathbin{\mathstrut{#1}}}
  258. \def\z@rel#1{\mathrel{\mathstrut{#1}}}
  259. \def\z@bigop#1{\z@op{\zbig{#1}}}
  260. \def\z@bigbin#1{\z@bin{\zbig{#1}}}
  261. \def\z@bigrel#1{\z@rel{\zbig{#1}}}
  262. \def\z@Bigop#1{\z@op{\zBig{#1}}}
  263. \def\z@Bigbin#1{\z@bin{\zBig{#1}}}
  264. \def\z@Bigrel#1{\z@rel{\zBig{#1}}}
  265. \def\z@smallop#1{\z@op{\zsmall{#1}}}
  266. \def\z@smallbin#1{\z@bin{\zsmall{#1}}}
  267. \def\z@smallrel#1{\z@rel{\zsmall{#1}}}
  268. % This underscore doesn't have the little kern --- you get an italic
  269. % correction anyway in math mode.
  270. \def\_{\leavevmode \vbox{\hrule width0.4em}}
  271. % Save \q as \xq for quantifiers q.
  272. \let\xforall=\forall
  273. \let\xexists=\exists
  274. \let\xlambda=\lambda
  275. \let\xmu=\mu
  276. % Save other symbols
  277. \let\xsucc\succ
  278. \let\xprec\prec
  279. \let\dotaccent=\dot
  280. \let\sectionsymbol=\S
  281. \let\integral=\int
  282. \let\product\prod
  283. % \p and \f make arrows with 1 and 2 crossings resp.
  284. \def\p#1{\mathrel{\ooalign{\hfil$\mapstochar\mkern 5mu$\hfil\cr$#1$}}}
  285. \def\f#1{\mathrel{\ooalign{\hfil
  286.         $\mapstochar\mkern 3mu\mapstochar\mkern 5mu$\hfil\cr$#1$}}}
  287. %       ------ AMSTEX SYMBOL DEFINITIONS ------
  288. % do these before Z symbols so that we can use them in our special symbols
  289. %       msam font
  290. % AMSa font
  291. \let\rightleftharpoons\undefined
  292. \let\angle\undefined
  293. \DeclareMathSymbol\boxdot{\mathbin}{AMSa}{"00}
  294. \DeclareMathSymbol\boxplus{\mathbin}{AMSa}{"01}
  295. \DeclareMathSymbol\boxtimes{\mathbin}{AMSa}{"02}
  296. \DeclareMathSymbol\square{\mathord}{AMSa}{"03}
  297. \DeclareMathSymbol\blacksquare{\mathord}{AMSa}{"04}
  298. \DeclareMathSymbol\centerdot{\mathbin}{AMSa}{"05}
  299. \DeclareMathSymbol\lozenge{\mathord}{AMSa}{"06}
  300. \DeclareMathSymbol\blacklozenge{\mathord}{AMSa}{"07}
  301. \DeclareMathSymbol\circlearrowright{\mathrel}{AMSa}{"08}
  302. \DeclareMathSymbol\circlearrowleft{\mathrel}{AMSa}{"09}
  303. \DeclareMathSymbol\rightleftharpoons{\mathrel}{AMSa}{"0A}
  304. \DeclareMathSymbol\leftrightharpoons{\mathrel}{AMSa}{"0B}
  305. \DeclareMathSymbol\boxminus{\mathbin}{AMSa}{"0C}
  306. \DeclareMathSymbol\Vdash{\mathrel}{AMSa}{"0D}
  307. \DeclareMathSymbol\Vvdash{\mathrel}{AMSa}{"0E}
  308. \DeclareMathSymbol\vDash{\mathrel}{AMSa}{"0F}
  309. \DeclareMathSymbol\twoheadrightarrow{\mathrel}{AMSa}{"10}
  310. \DeclareMathSymbol\twoheadleftarrow{\mathrel}{AMSa}{"11}
  311. \DeclareMathSymbol\leftleftarrows{\mathrel}{AMSa}{"12}
  312. \DeclareMathSymbol\rightrightarrows{\mathrel}{AMSa}{"13}
  313. \DeclareMathSymbol\upuparrows{\mathrel}{AMSa}{"14}
  314. \DeclareMathSymbol\downdownarrows{\mathrel}{AMSa}{"15}
  315. \DeclareMathSymbol\upharpoonright{\mathrel}{AMSa}{"16}
  316. \let\restriction\upharpoonright
  317. \DeclareMathSymbol\downharpoonright{\mathrel}{AMSa}{"17}
  318. \DeclareMathSymbol\upharpoonleft{\mathrel}{AMSa}{"18}
  319. \DeclareMathSymbol\downharpoonleft{\mathrel}{AMSa}{"19}
  320. \DeclareMathSymbol\rightarrowtail{\mathrel}{AMSa}{"1A}
  321. \DeclareMathSymbol\leftarrowtail{\mathrel}{AMSa}{"1B}
  322. \DeclareMathSymbol\leftrightarrows{\mathrel}{AMSa}{"1C}
  323. \DeclareMathSymbol\rightleftarrows{\mathrel}{AMSa}{"1D}
  324. \DeclareMathSymbol\Lsh{\mathrel}{AMSa}{"1E}
  325. \DeclareMathSymbol\Rsh{\mathrel}{AMSa}{"1F}
  326. \DeclareMathSymbol\rightsquigarrow{\mathrel}{AMSa}{"20}
  327. \DeclareMathSymbol\leftrightsquigarrow{\mathrel}{AMSa}{"21}
  328. \DeclareMathSymbol\looparrowleft{\mathrel}{AMSa}{"22}
  329. \DeclareMathSymbol\looparrowright{\mathrel}{AMSa}{"23}
  330. \DeclareMathSymbol\circeq{\mathrel}{AMSa}{"24}
  331. \DeclareMathSymbol\succsim{\mathrel}{AMSa}{"25}
  332. \DeclareMathSymbol\gtrsim{\mathrel}{AMSa}{"26}
  333. \DeclareMathSymbol\gtrapprox{\mathrel}{AMSa}{"27}
  334. \DeclareMathSymbol\multimap{\mathrel}{AMSa}{"28}
  335. \DeclareMathSymbol\therefore{\mathrel}{AMSa}{"29}
  336. \DeclareMathSymbol\because{\mathrel}{AMSa}{"2A}
  337. \DeclareMathSymbol\doteqdot{\mathrel}{AMSa}{"2B}
  338. \let\Doteq\doteqdot
  339. \DeclareMathSymbol\triangleq{\mathrel}{AMSa}{"2C}
  340. \DeclareMathSymbol\precsim{\mathrel}{AMSa}{"2D}
  341. \DeclareMathSymbol\lesssim{\mathrel}{AMSa}{"2E}
  342. \DeclareMathSymbol\lessapprox{\mathrel}{AMSa}{"2F}
  343. \DeclareMathSymbol\eqslantless{\mathrel}{AMSa}{"30}
  344. \DeclareMathSymbol\eqslantgtr{\mathrel}{AMSa}{"31}
  345. \DeclareMathSymbol\curlyeqprec{\mathrel}{AMSa}{"32}
  346. \DeclareMathSymbol\curlyeqsucc{\mathrel}{AMSa}{"33}
  347. \DeclareMathSymbol\preccurlyeq{\mathrel}{AMSa}{"34}
  348. \DeclareMathSymbol\leqq{\mathrel}{AMSa}{"35}
  349. \DeclareMathSymbol\leqslant{\mathrel}{AMSa}{"36}
  350. \DeclareMathSymbol\lessgtr{\mathrel}{AMSa}{"37}
  351. \DeclareMathSymbol\backprime{\mathord}{AMSa}{"38}
  352. \DeclareMathSymbol\risingdotseq{\mathrel}{AMSa}{"3A}
  353. \DeclareMathSymbol\fallingdotseq{\mathrel}{AMSa}{"3B}
  354. \DeclareMathSymbol\succcurlyeq{\mathrel}{AMSa}{"3C}
  355. \DeclareMathSymbol\geqq{\mathrel}{AMSa}{"3D}
  356. \DeclareMathSymbol\geqslant{\mathrel}{AMSa}{"3E}
  357. \DeclareMathSymbol\gtrless{\mathrel}{AMSa}{"3F}
  358. \DeclareMathSymbol\sqsubset{\mathrel}{AMSa}{"40}
  359. \DeclareMathSymbol\sqsupset{\mathrel}{AMSa}{"41}
  360. \DeclareMathSymbol\vartriangleright{\mathrel}{AMSa}{"42}
  361. \DeclareMathSymbol\vartriangleleft{\mathrel}{AMSa}{"43}
  362. \DeclareMathSymbol\trianglerighteq{\mathrel}{AMSa}{"44}
  363. \DeclareMathSymbol\trianglelefteq{\mathrel}{AMSa}{"45}
  364. \DeclareMathSymbol\bigstar{\mathord}{AMSa}{"46}
  365. \DeclareMathSymbol\between{\mathrel}{AMSa}{"47}
  366. \DeclareMathSymbol\blacktriangledown{\mathord}{AMSa}{"48}
  367. \DeclareMathSymbol\blacktriangleright{\mathrel}{AMSa}{"49}
  368. \DeclareMathSymbol\blacktriangleleft{\mathrel}{AMSa}{"4A}
  369. \DeclareMathSymbol\vartriangle{\mathord}{AMSa}{"4D}
  370. \DeclareMathSymbol\blacktriangle{\mathord}{AMSa}{"4E}
  371. \DeclareMathSymbol\triangledown{\mathord}{AMSa}{"4F}
  372. \DeclareMathSymbol\eqcirc{\mathrel}{AMSa}{"50}
  373. \DeclareMathSymbol\lesseqgtr{\mathrel}{AMSa}{"51}
  374. \DeclareMathSymbol\gtreqless{\mathrel}{AMSa}{"52}
  375. \DeclareMathSymbol\lesseqqgtr{\mathrel}{AMSa}{"53}
  376. \DeclareMathSymbol\gtreqqless{\mathrel}{AMSa}{"54}
  377. \DeclareMathSymbol\Rrightarrow{\mathrel}{AMSa}{"56}
  378. \DeclareMathSymbol\Lleftarrow{\mathrel}{AMSa}{"57}
  379. \DeclareMathSymbol\veebar{\mathbin}{AMSa}{"59}
  380. \DeclareMathSymbol\barwedge{\mathbin}{AMSa}{"5A}
  381. \DeclareMathSymbol\doublebarwedge{\mathbin}{AMSa}{"5B}
  382. \DeclareMathSymbol\angle{\mathord}{AMSa}{"5C}
  383. \DeclareMathSymbol\measuredangle{\mathord}{AMSa}{"5D}
  384. \DeclareMathSymbol\sphericalangle{\mathord}{AMSa}{"5E}
  385. \DeclareMathSymbol\varpropto{\mathrel}{AMSa}{"5F}
  386. \DeclareMathSymbol\smallsmile{\mathrel}{AMSa}{"60}
  387. \DeclareMathSymbol\smallfrown{\mathrel}{AMSa}{"61}
  388. \DeclareMathSymbol\Subset{\mathrel}{AMSa}{"62}
  389. \DeclareMathSymbol\Supset{\mathrel}{AMSa}{"63}
  390. \DeclareMathSymbol\Cup{\mathbin}{AMSa}{"64}
  391. \let\doublecup\Cup
  392. \DeclareMathSymbol\Cap{\mathbin}{AMSa}{"65}
  393. \let\doublecap\Cap
  394. \DeclareMathSymbol\curlywedge{\mathbin}{AMSa}{"66}
  395. \DeclareMathSymbol\curlyvee{\mathbin}{AMSa}{"67}
  396. \DeclareMathSymbol\leftthreetimes{\mathbin}{AMSa}{"68}
  397. \DeclareMathSymbol\rightthreetimes{\mathbin}{AMSa}{"69}
  398. \DeclareMathSymbol\subseteqq{\mathrel}{AMSa}{"6A}
  399. \DeclareMathSymbol\supseteqq{\mathrel}{AMSa}{"6B}
  400. \DeclareMathSymbol\bumpeq{\mathrel}{AMSa}{"6C}
  401. \DeclareMathSymbol\Bumpeq{\mathrel}{AMSa}{"6D}
  402. \DeclareMathSymbol\lll{\mathrel}{AMSa}{"6E}
  403. \let\llless\lll
  404. \DeclareMathSymbol\ggg{\mathrel}{AMSa}{"6F}
  405. \let\gggtr\ggg
  406. \DeclareMathDelimiter\ulcorner{4}{AMSa}{"70}{AMSa}{"70}
  407. \DeclareMathDelimiter\urcorner{5}{AMSa}{"71}{AMSa}{"71}
  408. \DeclareMathDelimiter\llcorner{4}{AMSa}{"78}{AMSa}{"78}
  409. \DeclareMathDelimiter\lrcorner{5}{AMSa}{"79}{AMSa}{"79}
  410. \xdef\yen      {\noexpand\mathhexbox\hexnumber@\symAMSa 55 }
  411. \xdef\checkmark{\noexpand\mathhexbox\hexnumber@\symAMSa 58 }
  412. \xdef\circledR {\noexpand\mathhexbox\hexnumber@\symAMSa 72 }
  413. \xdef\maltese  {\noexpand\mathhexbox\hexnumber@\symAMSa 7A }
  414. \DeclareMathSymbol\circledS{\mathord}{AMSa}{"73}
  415. \DeclareMathSymbol\pitchfork{\mathrel}{AMSa}{"74}
  416. \DeclareMathSymbol\dotplus{\mathbin}{AMSa}{"75}
  417. \DeclareMathSymbol\backsim{\mathrel}{AMSa}{"76}
  418. \DeclareMathSymbol\backsimeq{\mathrel}{AMSa}{"77}
  419. \DeclareMathSymbol\complement{\mathord}{AMSa}{"7B}
  420. \DeclareMathSymbol\intercal{\mathbin}{AMSa}{"7C}
  421. \DeclareMathSymbol\circledcirc{\mathbin}{AMSa}{"7D}
  422. \DeclareMathSymbol\circledast{\mathbin}{AMSa}{"7E}
  423. \DeclareMathSymbol\circleddash{\mathbin}{AMSa}{"7F}
  424. %AMSb font
  425. \DeclareMathSymbol\lvertneqq{\mathrel}{AMSb}{"00}
  426. \DeclareMathSymbol\gvertneqq{\mathrel}{AMSb}{"01}
  427. \DeclareMathSymbol\nleq{\mathrel}{AMSb}{"02}
  428. \DeclareMathSymbol\ngeq{\mathrel}{AMSb}{"03}
  429. \DeclareMathSymbol\nless{\mathrel}{AMSb}{"04}
  430. \DeclareMathSymbol\ngtr{\mathrel}{AMSb}{"05}
  431. \DeclareMathSymbol\nprec{\mathrel}{AMSb}{"06}
  432. \DeclareMathSymbol\nsucc{\mathrel}{AMSb}{"07}
  433. \DeclareMathSymbol\lneqq{\mathrel}{AMSb}{"08}
  434. \DeclareMathSymbol\gneqq{\mathrel}{AMSb}{"09}
  435. \DeclareMathSymbol\nleqslant{\mathrel}{AMSb}{"0A}
  436. \DeclareMathSymbol\ngeqslant{\mathrel}{AMSb}{"0B}
  437. \DeclareMathSymbol\lneq{\mathrel}{AMSb}{"0C}
  438. \DeclareMathSymbol\gneq{\mathrel}{AMSb}{"0D}
  439. \DeclareMathSymbol\npreceq{\mathrel}{AMSb}{"0E}
  440. \DeclareMathSymbol\nsucceq{\mathrel}{AMSb}{"0F}
  441. \DeclareMathSymbol\precnsim{\mathrel}{AMSb}{"10}
  442. \DeclareMathSymbol\succnsim{\mathrel}{AMSb}{"11}
  443. \DeclareMathSymbol\lnsim{\mathrel}{AMSb}{"12}
  444. \DeclareMathSymbol\gnsim{\mathrel}{AMSb}{"13}
  445. \DeclareMathSymbol\nleqq{\mathrel}{AMSb}{"14}
  446. \DeclareMathSymbol\ngeqq{\mathrel}{AMSb}{"15}
  447. \DeclareMathSymbol\precneqq{\mathrel}{AMSb}{"16}
  448. \DeclareMathSymbol\succneqq{\mathrel}{AMSb}{"17}
  449. \DeclareMathSymbol\precnapprox{\mathrel}{AMSb}{"18}
  450. \DeclareMathSymbol\succnapprox{\mathrel}{AMSb}{"19}
  451. \DeclareMathSymbol\lnapprox{\mathrel}{AMSb}{"1A}
  452. \DeclareMathSymbol\gnapprox{\mathrel}{AMSb}{"1B}
  453. \DeclareMathSymbol\nsim{\mathrel}{AMSb}{"1C}
  454. \DeclareMathSymbol\ncong{\mathrel}{AMSb}{"1D}
  455. \def\napprox{\not\approx}
  456. %\DeclareMathSymbol\varsubsetneq{\mathrel}{AMSb}{"20}
  457. %\DeclareMathSymbol\varsupsetneq{\mathrel}{AMSb}{"21}
  458. \DeclareMathSymbol\nsubseteqq{\mathrel}{AMSb}{"22}
  459. \DeclareMathSymbol\nsupseteqq{\mathrel}{AMSb}{"23}
  460. \DeclareMathSymbol\subsetneqq{\mathrel}{AMSb}{"24}
  461. \DeclareMathSymbol\supsetneqq{\mathrel}{AMSb}{"25}
  462. %\DeclareMathSymbol\varsubsetneqq{\mathrel}{AMSb}{"26}
  463. %\DeclareMathSymbol\varsupsetneqq{\mathrel}{AMSb}{"27}
  464. \DeclareMathSymbol\subsetneq{\mathrel}{AMSb}{"28}
  465. \DeclareMathSymbol\supsetneq{\mathrel}{AMSb}{"29}
  466. \DeclareMathSymbol\nsubseteq{\mathrel}{AMSb}{"2A}
  467. \DeclareMathSymbol\nsupseteq{\mathrel}{AMSb}{"2B}
  468. \DeclareMathSymbol\nparallel{\mathrel}{AMSb}{"2C}
  469. \DeclareMathSymbol\nmid{\mathrel}{AMSb}{"2D}
  470. \DeclareMathSymbol\nshortmid{\mathrel}{AMSb}{"2E}
  471. \DeclareMathSymbol\nshortparallel{\mathrel}{AMSb}{"2F}
  472. \DeclareMathSymbol\nvdash{\mathrel}{AMSb}{"30}
  473. \DeclareMathSymbol\nVdash{\mathrel}{AMSb}{"31}
  474. \DeclareMathSymbol\nvDash{\mathrel}{AMSb}{"32}
  475. \DeclareMathSymbol\nVDash{\mathrel}{AMSb}{"33}
  476. \DeclareMathSymbol\ntrianglerighteq{\mathrel}{AMSb}{"34}
  477. \DeclareMathSymbol\ntrianglelefteq{\mathrel}{AMSb}{"35}
  478. \DeclareMathSymbol\ntriangleleft{\mathrel}{AMSb}{"36}
  479. \DeclareMathSymbol\ntriangleright{\mathrel}{AMSb}{"37}
  480. \DeclareMathSymbol\nleftarrow{\mathrel}{AMSb}{"38}
  481. \DeclareMathSymbol\nrightarrow{\mathrel}{AMSb}{"39}
  482. \DeclareMathSymbol\nLeftarrow{\mathrel}{AMSb}{"3A}
  483. \DeclareMathSymbol\nRightarrow{\mathrel}{AMSb}{"3B}
  484. \DeclareMathSymbol\nLeftrightarrow{\mathrel}{AMSb}{"3C}
  485. \DeclareMathSymbol\nleftrightarrow{\mathrel}{AMSb}{"3D}
  486. \DeclareMathSymbol\divideontimes{\mathbin}{AMSb}{"3E}
  487. \DeclareMathSymbol\varnothing{\mathord}{AMSb}{"3F}
  488. \DeclareMathSymbol\mho{\mathord}{AMSb}{"66}
  489. \DeclareMathSymbol\eth{\mathord}{AMSb}{"67}
  490. \DeclareMathSymbol\eqsim{\mathrel}{AMSb}{"68}
  491. \DeclareMathSymbol\beth{\mathord}{AMSb}{"69}
  492. \DeclareMathSymbol\gimel{\mathord}{AMSb}{"6A}
  493. \DeclareMathSymbol\daleth{\mathord}{AMSb}{"6B}
  494. \DeclareMathSymbol\lessdot{\mathrel}{AMSb}{"6C}
  495. \DeclareMathSymbol\gtrdot{\mathrel}{AMSb}{"6D}
  496. \DeclareMathSymbol\ltimes{\mathbin}{AMSb}{"6E}
  497. \DeclareMathSymbol\rtimes{\mathbin}{AMSb}{"6F}
  498. \DeclareMathSymbol\shortmid{\mathrel}{AMSb}{"70}
  499. \DeclareMathSymbol\shortparallel{\mathrel}{AMSb}{"71}
  500. \def\interleave{{\parallel\!\!\vert}}
  501. \def\shortinterleave{\z@rel{\mathord\shortmid\mathord\shortparallel}}
  502. \DeclareMathSymbol\smallsetminus{\mathbin}{AMSb}{"72}
  503. \DeclareMathSymbol\thicksim{\mathrel}{AMSb}{"73}
  504. \DeclareMathSymbol\thickapprox{\mathrel}{AMSb}{"74}
  505. \DeclareMathSymbol\approxeq{\mathrel}{AMSb}{"75}
  506. \DeclareMathSymbol\succapprox{\mathrel}{AMSb}{"76}
  507. \DeclareMathSymbol\precapprox{\mathrel}{AMSb}{"77}
  508. \DeclareMathSymbol\curvearrowleft{\mathrel}{AMSb}{"78}
  509. \DeclareMathSymbol\curvearrowright{\mathrel}{AMSb}{"79}
  510. \DeclareMathSymbol\digamma{\mathord}{AMSb}{"7A}
  511. \DeclareMathSymbol\varkappa{\mathord}{AMSb}{"7B}
  512. \DeclareMathSymbol\hslash{\mathord}{AMSb}{"7D}
  513. \DeclareMathSymbol\hbar{\mathord}{AMSb}{"7E}
  514. \DeclareMathSymbol\backepsilon{\mathrel}{AMSb}{"7F}
  515. %               ------ SPECIAL Z SYMBOLS ------
  516. %       NUMBERS
  517. \def \nat       {{\bbold N}}
  518. \def \integer   {{\bbold Z}}
  519. \def \natone    {{\bbold N}_1}
  520. \def \real      {{\bbold R}}
  521. \def \bool      {{\bbold B}}
  522. \let \divides   \div
  523. \def \div       {\z@bin{\mathrm{div}}}
  524. \def \mod       {\z@bin{\mathrm{mod}}}
  525. \def \succ      {\word{succ}}
  526. \def \expon     {^}
  527. %       aliases
  528. \let \num       \integer
  529. \let \nplus     \natone
  530. %       LOGIC
  531. \def \lnot      {\neg\;}
  532. \def \land      {\z@rel{\wedge}}
  533. \def \lor       {\z@rel{\vee}}
  534. \let \imp       \Rightarrow
  535. \let \iff       \Leftrightarrow
  536. \def \all       {\z@op{\xforall}}
  537. \def \exi       {\z@op{\xexists}}
  538. \def \exione    {\exists_1}
  539. \DeclareMathSymbol{\nexi}{\mathord}{AMSb}{"40}
  540. \def \dot       {\z@rel{\bullet}}
  541. \def \true      {\keyword{true}}
  542. \def \false     {\keyword{false}}
  543. \let \cond      \rightarrow
  544. %       aliases
  545. \let \spot      \dot
  546. \mathcode`\@="8000% make @ active in mathmode
  547. {\catcode`\@=\active \gdef@{\dot}}
  548. \let \implies   \imp
  549. \let \forall    \all
  550. \let \exists    \exi
  551. \let \nexists   \nexi
  552. %       SETS
  553. \let \emptyset  \varnothing
  554. \def \varemptyset  {\{\,\}}
  555. \def \pset      {\z@op{\bbold P}}
  556. \def \psetone   {\pset_1}
  557. \def \fset      {\z@op{\bbold F}}
  558. \def \fsetone   {\fset_1}
  559. \def \sset      {\z@op{\bbold S}}
  560. \let \mem       \in
  561. \def \nem       {\not\mem}
  562. \def \uni       {\z@bin\cup}
  563. \def \int       {\z@bin\cap}
  564. \let \prod      \times
  565. \def \min       {\word{min}}
  566. \def \max       {\word{max}}
  567. \def \duni      {\z@Bigop{\lower0.25ex\hbox{$\uni$}}}
  568. \def \dint      {\z@Bigop{\lower0.25ex\hbox{$\int$}}}
  569. \def \upto      {\z@bin{\ldotp\ldotp}}
  570. \let \psubs     \subset
  571. \let \subs      \subseteq
  572. \let \psups     \supset
  573. \let \sups      \supseteq
  574. \def \diff      {\z@bin{\backslash}}
  575. %       aliases
  576. \let \cross     \prod
  577. \let \notin     \nem
  578. \let \nmem      \nem
  579. \let \union     \uni
  580. \let \inter     \int
  581. \let \power     \pset
  582. \let \finset    \fset
  583. \let \dunion    \duni
  584. \let \dinter    \dint
  585. %       RELATIONS & FUNCTIONS
  586. \def \lambda    {\z@op{\xlambda}}
  587. \def \mu        {\z@op{\xmu}}
  588. \def \dom       {\keyword{dom}}
  589. \def \ran       {\keyword{ran}}
  590. \def \id        {\keyword{id}}
  591. \DeclareMathSymbol{\dres}{\mathbin}{AMSa}{"43}
  592. \DeclareMathSymbol{\rres}{\mathbin}{AMSa}{"42}
  593. \def \dsub      {\mathbin{\rlap{\raise.05ex\hbox{$-$}}{\dres}}}
  594. \def \rsub      {\mathbin{\rlap{\raise.05ex\hbox{$-$}}{\rres}}}
  595. \let \fovr      \oplus
  596. \let \cmp       \circ
  597. \def \fcmp      {\mathbin{\raise 0.6ex\hbox{\oalign{\hfil$\scriptscriptstyle
  598.                  \mathrm{o}$\hfil\cr\hfil$\scriptscriptstyle\mathrm{9}$\hfil}}}}
  599. \def \inv       {^{-1}}
  600. \def \limg      {(\!|}
  601. \def \rimg      {|\!)}
  602. \let \map       \mapsto
  603. \let \rel       \leftrightarrow
  604. \let \tfun      \rightarrow
  605. \let \tinj      \rightarrowtail
  606. \def \tsur      {\mathrel{\ooalign{$\tfun$\hfil\cr$\mkern4mu\tfun$}}}
  607. \def \pfun      {\p\tfun}
  608. \def \pinj      {\p\tinj}
  609. \def \psur      {\p\tsur}
  610. \def \ffun      {\f\tfun}
  611. \def \finj      {\f\tinj}
  612. \def \bij       {\mathrel{\ooalign{$\tinj$\hfil\cr$\mkern5mu\tfun$}}}
  613. \def \tcl       {^+}
  614. \def \rtcl      {^*}
  615. \def \iter      {^}
  616. %       aliases
  617. \let \comp      \fcmp
  618. \let \ndres     \dsub
  619. \let \nrres     \rsub
  620. \let \fun       \tfun
  621. \let \inj       \tinj
  622. \let \surj      \tsur
  623. \let \psurj     \psur
  624. %       SEQUENCES
  625. \def \seq       {\keyword{seq}}
  626. \def \seqone    {\seq_1}
  627. \def \emptyseq  {\lseq\,\rseq}
  628. \let \lseq      \langle
  629. \let \rseq      \rangle
  630. \def \head      {\word{head}}
  631. \def \tail      {\word{tail}}
  632. \def \front     {\word{front}}
  633. \def \last      {\word{last}}
  634. \def \rev       {\word{rev}}
  635. \def \squash    {\word{squash}}
  636. \def \next      {\keyword{next}}
  637. \def \inseq     {\keyword{in}}
  638. \DeclareMathSymbol{\@@cat}{\mathbin}{AMSa}{"61}
  639. \def \cat       {\mathbin{\raise 0.8ex\hbox{$\mathchar\@@cat$}}}
  640. \DeclareMathSymbol{\sres}{\mathbin}{AMSa}{"16}
  641. \DeclareMathSymbol{\ires}{\mathbin}{AMSa}{"18}
  642. \def \ssub      {\z@bin{\rlap{$-$}{\sres}}}
  643. \def \isub      {\z@bin{\rlap{$-$}{\ires}}}
  644. \def \dcat      {\z@op{\cat/}}
  645. \def \dovr      {\z@op{\fovr/}}
  646. \def \dcmp      {\z@op{\fcmp/}}
  647. \let \prefix    \subseteq
  648. \def \suffix    {\keyword{suffix}}
  649. \def \seqi      {\keyword{seq_\infty}}
  650. \def \partitions        {\keyword{partitions}}
  651. \def \disjoint  {\keyword{disjoint}}
  652. \def \subseq    {\keyword{subseq}}
  653. %       aliases
  654. \let \filter    \sres
  655. %       SCHEMAS
  656. \def \lsch      {\z@bigop{[}}
  657. \def \rsch      {\z@bigop{]}}
  658. \def \dparallel {\z@bigop{\parallel}\limits}
  659. \def \zand      {\z@bigbin\land}
  660. \def \zor       {\z@bigbin\lor}
  661. \def \zcmp      {\z@bigbin\fcmp}
  662. \def \zexi      {\z@bigop\exists}
  663. \def \zall      {\z@bigop\forall}
  664. \def \znot      {\z@bigop\neg}
  665. \def \zbar      {\z@bigbin\cbar}
  666. \def \zfor      {/}
  667. \def \zhide     {\z@bigbin\backslash}
  668. \def \zimp      {\z@bigrel\imp}
  669. \def \zeq       {\z@bigrel\iff}
  670. \def \zovr      {\z@bigrel\oplus}
  671. \def \zpipe     {\z@bigbin{\mathord>\!\!\mathord>}}
  672. \def \pre       {\keyword{pre}}
  673. \def \pred      {\keyword{pred}}
  674. \def \post      {\keyword{post}}
  675. \def \zproject  {\z@bigbin\sres}
  676. \def\rename{\@ifnextchar*{\z@rename}{\z@@rename}}
  677. \def\z@rename*[#1/#2]{\left[#1 \over #2\right]}
  678. \def\z@@rename[#1/#2]{\left[#1 \zfor #2\right]}
  679. %       aliases
  680. \let \project   \zproject
  681. \let \import    \sres
  682. \let \semi      \zcmp
  683. \let \hide      \zhide
  684. %       BAGS
  685. \let\buni\uplus
  686. \def \emptybag  {\lbag\:\rbag}
  687. \def \lbag      {[\![}
  688. \def \rbag      {]\!]}
  689. \def \bag       {\keyword{bag}}
  690. \def \items     {\word{items}}
  691. \let \inbag     \inseq
  692. \def \bagcount  {\word{count}}
  693. %       DEFINITIONS & DECLARATIONS
  694. \def \ddef      {\z@rel{\;::=\;}}
  695. \def \bbar      {\z@bigrel{|}}
  696. \let \cbar      \mid
  697. \def \lang      {\langle\!\langle}
  698. \def \rang      {\rangle\!\rangle}
  699. \def \sdef      {\z@rel{\widehat=}}
  700. \def \defs      {\z@smallrel{==}}
  701. \def \varsdef   {\z@rel\triangleq}
  702. %       aliases
  703. \let \sdefs     \sdef
  704. \mathcode`\|=\mid
  705. \let \ldata     \lang
  706. \let \rdata     \rang
  707. %       MISCELLANEOUS
  708. \def \lblot     {\langle\!|}
  709. \def \rblot     {|\!\rangle}
  710. \def \IMP       {\boldword{Import}}
  711. \let \env       \Rrightarrow
  712. \def \zlet      {\boldword{let}}
  713. \def \zin       {\boldword{in}}
  714. \def \zwhere    {\boldword{where}}
  715. %       QZED SUPPORT
  716. \def\HOLE{\z@op{\hbox{$\lll\star\star\star\ggg$}}}
  717. \def\landd{} % to support qzed editor
  718. \def\semid{} % to support qzed editor
  719. \def\qzed{\ifz@inclass\else\zed\fi}
  720. \def\endqzed{\ifz@inclass\else\endzed\fi}
  721. %       CLASSES
  722. \def\qua{\mbox{::}}
  723. \def\redef{\mbox{\bf ~redef}}
  724. \def\Init{I\!\mbox{\footnotesize\em NIT}}
  725. \def\Exit{E\!\mbox{\footnotesize\em XIT}}
  726. \def\Internal{I\!\mbox{\em\footnotesize NTERNAL}}
  727. \def\Aux{A\!\mbox{\footnotesize\em UX}}
  728. \def\intern{\mbox{\sf i}}
  729. %               ------ OTHER SPECIAL NOTATION ------
  730. %       PROOFS
  731. \def\thrm{\z@rel\vdash}
  732. \def\qed{\zsmall\Box}
  733. \let\Qed\Box
  734. \let\QED\square
  735. \def\BLACKQED{\zsmall\blacksquare}
  736. \let\ETH\qed
  737. \def\TH{\boldword{Theorem}}
  738. \def\LE{\boldword{Lemma}}
  739. \def\PR{\boldword{Proof}}
  740. \def\refines{\z@rel\sqsupseteq}
  741. \def\defines{\z@rel\sqsubseteq}
  742. \def\weakrefine{\z@rel{\raise0.2ex\rlap{\hbox{$\sqsupset$}}\lower1ex\hbox{$\sim$}}}
  743. \def\weakdefine{\z@rel{\raise0.2ex\rlap{\hbox{$\sqsubset$}}\lower1ex\hbox{$\sim$}}}
  744. %       aliases
  745. \let\shows\thrm
  746. %       OBJECT THEORY
  747. \def\childof{\z@rel\xsucc}
  748. \def\parentof{\z@rel\xprec}
  749. \let\weaksubclass\succsim
  750. \let\weaksupclass\precsim
  751. \def\hasa{\z@rel{\mathord\xsucc\!\!\!\mathord\xsucc}}
  752. \def\instancein{\z@rel{\mathord\xprec\!\!\!\mathord\xprec}}
  753. \def\subtype{\z@rel\sqsubset}
  754. \def\subtypeeq{\z@rel\sqsubseteq}
  755. \def\suptype{\z@rel\sqsupset}
  756. \def\suptypeeq{\z@rel\sqsupseteq}
  757. %       aliases
  758. \let\inherits\childof
  759. \let\subclass\childof
  760. \let\isa\childof
  761. \let\supclass\parentof
  762. \let\instantiates\hasa
  763. \let\islikea\weaksubclass
  764. %       TEMPORAL LOGIC
  765. \def\atnext{\rlap{$\zSmall\bigcirc$}\kern0.01em\rlap{$\zSmall\bigcirc$}\kern0.01em\zSmall\bigcirc}
  766. \def\atlast{\rlap{$\zSmall\bigcirc$}\kern0.01em\rlap{$\zSmall\bigcirc$}\kern0.01em\rlap{$\kern0.01em\mathord-$}\zSmall\bigcirc}
  767. \def\always{\lower0.37ex\hbox{$\zbig\Box$}}
  768. \def\uptilnow{\rlap{$\kern0.02em\mathord-$}\lower0.37ex\hbox{$\zbig\Box$}}
  769. \def\eventually{\lower0.37ex\hbox{$\zbig\Diamond$}}
  770. \def\previously{\rlap{$\kern0.04em\mathord-$}\lower0.37ex\hbox{$\zbig\Diamond$}}
  771. %       aliases
  772. \let\henceforth\always
  773. %       ORDERS
  774. \def \mono      {\keyword{monotonic}}
  775. \def \porder    {\keyword{partial\_order}}
  776. \def \torder    {\keyword{total\_order}}
  777. \newbox\z@combox\newdimen\z@wdcalc
  778. \def\comment{\@ifnextchar*{\z@leftcomment}{\z@comment}}
  779. \def\z@comment#1{$\z@stopfield\z@addfield\z@startfield$%
  780. \global\setbox\z@combox\hbox{\quad[{\sf #1}]}\z@wdcalc=\wd\z@combox%
  781. \advance\z@wdcalc by \wd\z@curline\advance\z@wdcalc by \z@curindent%
  782. \advance\z@wdcalc by \zedleftsep\advance\z@wdcalc by \zedlinethickness%
  783. \advance\z@wdcalc by 2\zedindent\ifdim\z@wdcalc>\displaywidth\\%
  784. \fi&\box\z@combox\ignorespaces}
  785. \def\z@leftcomment*#1{\hbox{[{\sf #1}]}}
  786. %---------------------------
  787. %       SECTION 3       Z ENVIRONMENTS
  788. %               ------ MARGIN STACK ------
  789. % define a stack of dimensions (50 elements)
  790. %       can probably be made smaller when qzed filters its TeX output better
  791. \newcount\z@stackmin
  792. \newcount\z@stackmax
  793. \newcount\z@stacktop
  794. \newdimen\@gtempa \z@stackmin=\allocationnumber
  795. \newdimen\@gtempa\newdimen\@gtempa\newdimen\@gtempa\newdimen\@gtempa
  796. \newdimen\@gtempa\newdimen\@gtempa\newdimen\@gtempa\newdimen\@gtempa
  797. \newdimen\@gtempa\newdimen\@gtempa\newdimen\@gtempa\newdimen\@gtempa
  798. \newdimen\@gtempa\newdimen\@gtempa\newdimen\@gtempa\newdimen\@gtempa
  799. \newdimen\@gtempa\newdimen\@gtempa\newdimen\@gtempa\newdimen\@gtempa
  800. \newdimen\@gtempa\newdimen\@gtempa\newdimen\@gtempa\newdimen\@gtempa
  801. \newdimen\@gtempa\newdimen\@gtempa\newdimen\@gtempa\newdimen\@gtempa
  802. \newdimen\@gtempa\newdimen\@gtempa\newdimen\@gtempa\newdimen\@gtempa
  803. \newdimen\@gtempa\newdimen\@gtempa\newdimen\@gtempa\newdimen\@gtempa
  804. \newdimen\@gtempa\newdimen\@gtempa\newdimen\@gtempa\newdimen\@gtempa
  805. \newdimen\@gtempa\newdimen\@gtempa\newdimen\@gtempa\newdimen\@gtempa
  806. \newdimen\@gtempa\newdimen\@gtempa\newdimen\@gtempa\newdimen\@gtempa
  807. \newdimen\@getempa \z@stackmax=\allocationnumber
  808. \dimen\z@stackmin=0pt
  809. % define a box to contain the current line
  810. %  & a variable to contain it's indentation
  811. \newbox\z@curline
  812. \newdimen\z@curindent
  813. \dimen\z@curindent=0pt
  814. % Space between operands of a function application
  815. \def\z@space{{}\;{}}
  816. % define a box to contain the current field
  817. \newbox\z@curfield
  818. % define a mini-tabbing environment for use inside 'zed'
  819. \def\z@startline{\setbox\z@curline\hbox{}%
  820.                  \global\z@curindent\dimen\z@stacktop
  821.                  \z@startfield\ignorespaces}
  822. \def\z@stopline{\z@stopfield
  823.                 \z@addfield
  824.                 \hbox{\hskip\z@curindent \box\z@curline}}
  825. \def\z@startfield{\global\setbox\z@curfield\hbox\bgroup}
  826. \def\z@stopfield{\egroup}
  827. \def\z@addfield{\global\setbox\z@curline\hbox{\unhbox
  828.                  \z@curline\unhbox\z@curfield}}
  829. \def\z@pushmargin{\hbox{\kern0pt}$%
  830.                   \z@stopfield
  831.                   \z@addfield
  832.                   \ifnum \z@stacktop < \z@stackmax
  833.                     \global\advance\z@stacktop \@ne
  834.                   \else
  835.                     \@latexerr{Z margin stack overflow (too many \string\M's)}
  836.                     \@ehd
  837.                   \fi
  838.                   \global\dimen\z@stacktop\z@curindent
  839.                   \global\advance\dimen\z@stacktop \wd\z@curline
  840.                   \z@startfield\ignorespaces
  841.                   $\relax}
  842. \def\z@popmargin{\ifnum \z@stacktop > \z@stackmin
  843.                     \global\advance\z@stacktop \m@ne \ignorespaces
  844.                   \else
  845.                     \@latexerr{Z Margin stack underflow (too many \string\O's)}
  846.                     \@ehd
  847.                   \fi}
  848. \def\M{\z@pushmargin} \def\O{\z@popmargin} \def\S{\z@space}
  849. \z@stacktop\z@stackmin
  850. %               ------ UTILITY MACROS FOR Z ENVIRONMENTS ------
  851. % Here are environments for the various sorts of displays which occur in
  852. % Z documents. All displays are set flush left, indented by \zedindent,
  853. % by default \leftmargini.  Schemas, etc, are made just wide enough to
  854. % give equal margins left and right.
  855. % Some environments (schema, etc.) must only be split at `\zbreak',
  856. % and others (e.g. argue) may be split arbitrarily. All generate
  857. % alignment displays, and penalties are used to control page breaks.
  858. %       FORMAT and CONTROL macros
  859. \newdimen\zedindent             \zedindent=\leftmargini
  860. \newdimen\zedleftsep            \zedleftsep=1em
  861. \newdimen\zedtab                \zedtab=2em
  862. \newdimen\zedbar                \zedbar=8em
  863. \newdimen\zedlinethickness      \zedlinethickness=0.4pt
  864. \newdimen\zedcornerheight       \zedcornerheight=0pt
  865. \newcount\z@cols
  866. \newif\ifz@firstline            \z@firstlinefalse
  867. \newif\ifz@inclass              \z@inclassfalse
  868. \newif\ifz@inenv                \z@inenvfalse
  869. \newif\ifz@leftmargin           \z@leftmargintrue
  870. \newif\ifz@incols               \z@incolsfalse
  871. \newif\ifleftnames              \leftnamesfalse
  872. \def\leftschemas{\leftnamestrue}
  873. \newif\ifz@inbox                \z@inboxfalse
  874. \newskip\zedbaselineskip        \zedbaselineskip\baselineskip
  875. \newbox\zstrutbox               \setbox\zstrutbox=\copy\strutbox
  876. \def\zstrut{\relax\ifmmode\copy\zstrutbox\else\unhcopy\zstrutbox\fi}
  877. \def\zedbaselinestretch{1}
  878. % penalties
  879. \newcount\interzedlinepenalty   \interzedlinepenalty=10000      %never break
  880. \newcount\preboxpenalty         \preboxpenalty=0                %break easily
  881. \newcount\forcepagepenalty      \forcepagepenalty=-10000        %always break
  882. % also use                      \interdisplaylinepenalty=100    %break sometimes
  883. % macros for changing the size of schema text
  884. \def\zedsize#1{\def\z@size{#1}}
  885. \def\z@size{}
  886. \newskip\z@adskip\newskip\z@bdskip\newskip\z@adsskip\newskip\z@bdsskip
  887. \def\z@changesize{%
  888. \z@adskip\abovedisplayskip\z@bdskip\belowdisplayskip% save skips
  889. \z@adsskip\abovedisplayshortskip\z@bdsskip\belowdisplayshortskip
  890. \z@size % change size
  891. \abovedisplayskip\z@adskip\belowdisplayskip\z@bdskip% restore skips
  892. \abovedisplayshortskip\z@adsskip\belowdisplayshortskip\z@bdsskip}
  893. \def\z@zeroskips{\abovedisplayskip\z@\belowdisplayskip\z@
  894.         \abovedisplayshortskip\z@\belowdisplayshortskip\z@}
  895. %               ------ MACROS FOR MARGINS ------
  896. % \z@narrow, \z@wide - make the margins narrower, wider
  897. \def\z@narrow{\advance\linewidth by -\zedindent}
  898. \def\z@wide{\advance\linewidth by \zedindent}
  899. %               ------ MACROS FOR DRAWING BOXES ------
  900. % \z@hrulefill - line with correct thickness
  901. \def\z@hrulefill{\leaders\hrule height\zedlinethickness\hfill}
  902. % \z@topline draws the top horizontal line of boxed environments
  903. % \z@dbltopline draws a double ruled top line
  904. % \z@botline draws the bottom horizontal line of boxed environments
  905. % \zedline[comment] draws a long horizontal line ending in comment
  906. % \where draws a short horizontal line
  907. \def\z@topline#1{\omit\@ifnextchar[{\z@@topline{#1}}{\z@@topline{#1}[]}}
  908. \def\z@@topline#1[#2]{\hbox to\linewidth{\zstrut\ifleftnames\else
  909.         \vrule height\zedlinethickness width\zedlinethickness
  910.         \hbox to\zedleftsep{\z@hrulefill}\fi#1\z@hrulefill
  911.         \smash{\vrule height\zedlinethickness width\zedlinethickness
  912.         depth\zedcornerheight}\hbox{\sf #2}}\cr}
  913. \def\z@dbltopline#1{\omit\@ifnextchar[{\z@@dbltopline{#1}}{\z@@dbltopline{#1}[]}}
  914. \def\z@@dbltopline#1[#2]{\z@@topline{#1}[#2]%
  915. \noalign{\kern-\baselineskip
  916.         \kern-\zedlinethickness
  917.         \kern-\doublerulesep \nobreak}%
  918. \omit\z@@topline{\hphantom{#1}}[\hphantom{#2}]%
  919. \noalign{\kern\doublerulesep
  920.         \kern\zedlinethickness \nobreak}}
  921. \def\z@botline{\also\omit\hbox to\linewidth{\z@hrulefill
  922. \smash{\vrule height\zedcornerheight width\zedlinethickness
  923.         depth 0pt}}\cr}
  924. \def\z@@botline[#1]{\hbox to\linewidth{\vrule\z@hrulefill\hbox{\sf\smash{#1}}}\also}
  925. \def\zedline{\also\omit\@ifnextchar[{\z@@botline}{\z@@botline[]}}
  926. \def\where{\also \omit \hbox to\zedbar{\z@hrulefill}\cr\also}
  927. \let \ST        \where
  928. % \z@left is placed at the left of each z line:
  929. %       in non-box environments it will do nothing.
  930. %       in boxed environments it will do a vertical line with the same
  931. %               height as the maximum height of the line.
  932. \def\z@left{\ifz@inbox\vrule width\zedlinethickness\hskip\zedleftsep\fi}
  933. %               ------ MACROS FOR SETTING UP Z ENVIRONMENTS ------
  934. \def\z@env{\global\z@firstlinetrue\z@changesize
  935.         $$\z@inenvtrue\baselineskip\zedbaselineskip
  936.         \parskip=0pt\lineskip=0pt\z@narrow
  937.         \advance\displayindent by \zedindent
  938.         \def\\{\crcr}% Must have \def and not \let for nested alignments.
  939.         \everycr={\noalign{\ifz@firstline \global\z@firstlinefalse
  940.                 \else \penalty\interzedlinepenalty \fi}}
  941.         \tabskip=0pt}
  942. \def\endz@env{$$\global\@ignoretrue}
  943. % z lines are formated in two (overlaping) columns;
  944. %       the first flush left having the same width as the environment,
  945. %       and, the second flush right ending at the right end of the environment.
  946. \def\z@format{\halign to\linewidth\bgroup%
  947.         \zstrut\z@left\z@startline\ignorespaces$\@lign##$\z@stopline\hfil%
  948.         \tabskip=0pt plus1fil%
  949.         &\hbox to 0pt{\hss\@lign##}\tabskip=0pt\cr}
  950. \def\z@boxenv{\z@narrow\let\also=\als@ \let\Also=\Als@ \let\ALSO=\ALS@
  951.         \z@inboxtrue \predisplaypenalty=\preboxpenalty \z@env\z@format}
  952. \def\z@outnonbox{\z@outclasscheck\z@leavevmode\z@env}
  953. \def\z@inoutbox{\z@leavevmode\z@makeouter\z@inclassfalse\z@boxenv}
  954. %       SPACING COMMANDS
  955. % no vertical glue between abutted lines
  956. \def\@but{\noalign{\nointerlineskip}}
  957. % no \par extra vertical spacing after Z environments
  958. %\def\z@nopar{\ifz@inclass\else\vskip-\parskip\fi}
  959. %\def\z@nopar{\global\parskip0pt\global\everypar{\parskip30mm\everypar{}}}
  960. \def\z@nopar{\global\@endpetrue}
  961. % \z@leavevmode -- Enter horizontal mode, taking account of possible
  962. % interaction with lists and section heads:
  963. %       1       After a \item, use \indent to get the label (this
  964. %               fails to run in even short labels).
  965. %       2       After a run-in heading, use \indent.
  966. %       3       After an ordinary heading, throw away the \everypar
  967. %               tokens, reset \@nobreak, and use \noindent with \parskip
  968. %               zero.
  969. %       4       Otherwise, use \noindent with \parskip zero
  970. % use when entering displayed environments to get correct spacing
  971. \def\z@leavevmode{\ifvmode\if@inlabel\indent\else\if@noskipsec\indent\else
  972.         \if@nobreak\global\@nobreakfalse\everypar={}\fi
  973.         {\parskip=0pt\noindent}\fi\fi\fi}
  974. % extra vertical space in non-box environments
  975. \def\also{\crcr\noalign{\vskip\jot}}
  976. \def\Also{\crcr\noalign{\vskip2\jot}}
  977. \def\ALSO{\Also\Also}
  978. % extra vertical space in boxed environments
  979. \def\als@{\crcr\@but\omit\vrule height\jot width\zedlinethickness \cr \@but}
  980. \def\Als@{\crcr\@but\omit\vrule height2\jot width\zedlinethickness \cr \@but}
  981. \def\ALS@{\crcr\@but\omit\vrule height4\jot width\zedlinethickness \cr \@but}
  982. %       ENVIRONMENT-BREAKING COMMANDS
  983. \def\znewpage{\also\noalign{\penalty\forcepagepenalty}\also}
  984. \def\zbreak{\also\noalign{\penalty\interdisplaylinepenalty\vskip-\jot}\also}
  985. \def\Zbreak{\also\noalign{\penalty\interdisplaylinepenalty}\also}
  986. \def\ZBREAK{\Also\noalign{\penalty\interdisplaylinepenalty}\Also}
  987. \def\t#1{\hskip #1\zedtab}
  988. \def\c#1#2{\hbox to #1\zedtab{$#2$\hfil}}
  989. \def\flushr#1{\crcr\quad\cr}
  990. %               ------ UTILITY MACROS FOR OBJECT-Z ------
  991. \def\z@inclasscheck{\ifz@inclass\else
  992.         \@latexerr{This Z environment is only allowed within a class}
  993. {Perhaps you forgot to include a \string\begin\string{class\string}
  994. somewhere^^Jor you are trying to print a file that needs updating.^^J\@ehc} \fi}
  995. \def\z@outclasscheck{\ifz@inclass
  996.         \@latexerr{This Z environment is not allowed inside a class}
  997. {This environment doesn't really make sense within a class.^^J%
  998. If you really want it then I'll try my best to fit in in.^^J\@ehc}\else
  999. \ifz@inenv \@latexerr{New Z environment declared before previous
  1000. one is completed}
  1001. {I suspect that you've forgotten to finish the last environment.^^J%
  1002. You are trying to nest environments and this can only be done inside classes^^J%
  1003. besides, the environment you have started isn't valid within classes any way.^^JI suggest that you type \space X <return> \space to quit and then correct your document.}
  1004. \fi\fi}
  1005. \def\z@makeouter{\ifz@inenv\ifz@inclass\z@inenvfalse
  1006.         \hskip-\zedleftsep \advance\linewidth by -\zedlinethickness
  1007.         \zedindent=\zedleftsep \zedleftsep=0.8\zedleftsep
  1008.         \zedbar=0.8\zedbar \zedtab=0.8\zedtab
  1009.         \parbox[b]{\linewidth}\bgroup\z@zeroskips
  1010.         \else\@latexerr{Incorrect place for Z environment; nesting is
  1011. allowed only inside classes}
  1012. {You've either forgotten to finish the last environment,^^J%
  1013. you've forgotten to include a \string\begin\string{class\string} somewhere^^J%
  1014. or you are trying to print a file that needs updating.^^J%
  1015. (Then again, you might just be trying to do something^^J%
  1016. that the author of these macros didn't intend you to do)^^J\@ehc}
  1017.         \fi\else\bgroup\fi}
  1018. \def \z@makeinner{\egroup%
  1019. \global\z@curindent\z@}
  1020. \def \classbreak{\also\egroup$$\vskip -\ht\zstrutbox
  1021.         \vskip -\abovedisplayskip\vskip -\belowdisplayskip\z@wide\z@boxenv\also}
  1022. %               ------ NON-BOX ENVIRONMENTS ------
  1023. %       ZED                     for non-box multiline formulas
  1024. \def\zed{\z@outnonbox\z@inboxfalse\z@format}
  1025. \def\endzed{\crcr\egroup\endz@env}
  1026. \let\[=\zed
  1027. \def\]{\crcr\egroup$$\ignorespaces}
  1028. %       ARGUE                   for algebraic arguments
  1029. %       used for algebraic proofs expressed as extended equations.
  1030. %       like zed but with extra spacing between lines
  1031. %       Generates an alignment display, which may be split across pages.
  1032. \def\argue{\z@outnonbox\interzedlinepenalty=\interdisplaylinepenalty
  1033.         \openup 1\jot \z@format
  1034.         \noalign{\vskip-\jot}}% equal vspace above and below argue display
  1035. \let\endargue=\endzed
  1036. %       INFRULE                 for inference rules
  1037. %       used for inference rules. The horizontal line is generated by \derive:
  1038. %       an optional argument contains the side-conditions of the rule.
  1039. \def\infrule{\z@outnonbox\halign\bgroup
  1040.         \zstrut\quad$\@lign##$\quad\hfil&\quad\@lign##\hfil\cr}
  1041. \let\endinfrule=\endzed
  1042. \def\derive{\crcr\also\@but\omit\z@hrulefill%
  1043.         \@ifnextchar[{\z@sidecondition}{\cr\also\@but}}
  1044. \def\Derive{\crcr\also\@but\omit\z@hrulefill\cr\@but
  1045.         \noalign{\kern-\dp\zstrutbox
  1046.         \kern\doublerulesep \nobreak}%
  1047. \omit\derive}
  1048. \def\z@sidecondition[#1]{&$\smash{\lower 0.2ex\hbox{$[\;#1\;]$}}$\cr\also\@but}
  1049. %       SYNTAX                  for syntax rules
  1050. % `syntax' environment: used for syntax rules - even (once!) for VDM.
  1051. \def\syntax{\z@outnonbox\halign\bgroup
  1052.         \zstrut$\@lign##$\hfil &\hfil$\@lign{}##{}$\hfil
  1053.         &$\@lign##$\hfil &\qquad\@lign-- ##\hfil\cr}
  1054. \let\endsyntax=\endzed
  1055. %               ------ BOXED ENVIRONMENTS ------
  1056. %       SCHEMA                  schema definitions
  1057. \def\schema#1{\z@inoutbox\z@topline{$\,#1\,$}}
  1058. \def\endschema{\z@botline \endzed \z@makeinner \z@nopar}
  1059. %       SCHEMA*                 schema with no name
  1060. \@namedef{schema*}{\leftnamesfalse\z@inoutbox\z@topline{}}
  1061. \expandafter\let\csname endschema*\endcsname=\endschema
  1062. %       GENSCHEMA               generic schema definitions
  1063. \def\genschema#1#2{\z@inoutbox\z@topline{$\,#1\:[#2]\,$}}
  1064. \let\endgenschema=\endschema
  1065. %       AXDEF                   'liberal' axiomatic definitions
  1066. \def\axdef{\z@inoutbox}
  1067. \def\endaxdef{\endzed\z@makeinner}
  1068. %       UNIQDEF                 'unique' axiomatic definitions
  1069. \def\uniqdef{\leftnamesfalse\z@inoutbox\z@dbltopline{}}
  1070. \let\enduniqdef=\endschema
  1071. %       GENDEF                  'generic' axiomatic definitions
  1072. \def\gendef#1{\leftnamesfalse\z@inoutbox\z@dbltopline{$\,[#1]\,$}}
  1073. \let\endgendef=\endschema
  1074. %       CLASS
  1075. \def\class#1{\z@leavevmode\z@makeouter\z@inclasstrue
  1076.                 \z@boxenv\z@topline{$\,#1\,$}}
  1077. \let\endclass\endschema
  1078. %       OP
  1079. \def\op{\z@inclasscheck\schema}
  1080. \let\endop\endschema
  1081. %       STATE
  1082. \def\state{\z@inclasscheck\vbox\bgroup\vskip-\ht\zstrutbox\vbox\bgroup\hbox\bgroup\@nameuse{schema*}}
  1083. \def\endstate{\endschema\egroup\egroup\egroup}
  1084. %       INIT
  1085. \def\init{\z@inclasscheck\schema{\Init}}
  1086. \let\endinit\endschema
  1087. %               ------ OTHER ENVIRONMENTS ------
  1088. %       SIDEBYSIDE
  1089. % This should support an arbitary number of columns
  1090. %       \zedindent's proportion of \linewidth gives a practical limit
  1091. \def\sidebyside{\@ifnextchar[{\z@columns}{\z@columns[2]}}
  1092. \def\z@columns[#1]{\z@leavevmode\z@cols#1 \z@makeouter\z@narrow%
  1093.         $$\lineskip=0pt\z@incolstrue
  1094.         \predisplaysize\maxdimen
  1095.         \ifz@leftmargin\hskip-\zedindent\z@leftmarginfalse\fi
  1096.         \setbox0=\hbox to \linewidth\bgroup\z@zeroskips%
  1097.         \divide\zedbar by \z@cols \divide\zedleftsep by \z@cols
  1098.         \divide\zedtab by \z@cols \divide\linewidth by \z@cols
  1099.         \parbox[t]{\linewidth}\bgroup\z@wide}
  1100. \def\nextside{\egroup\hss\parbox[t]{\linewidth}\bgroup\z@wide}
  1101. \newdimen\z@temp
  1102. \def\endsidebyside{\egroup\egroup
  1103.         \z@temp\ht0 \advance\z@temp by \dp0\advance\z@temp by-\dp\zstrutbox
  1104.         \hbox{\raise\z@temp\box0}\endz@env\z@makeinner\z@nopar}
  1105. %       ZPAR
  1106. \def\zpar{\z@leavevmode
  1107.         \ifz@inenv\z@inclasstrue\fi% fudge to let zpar in all boxes
  1108.         \z@makeouter\z@changesize
  1109.         \advance\linewidth by -\z@curindent
  1110.         \advance\linewidth by -\wd\z@curline
  1111.         \hskip-\wd\z@curline\advance\linewidth by -\zedindent$$
  1112.         \ifz@leftmargin\hskip-\zedindent\fi% adjustment for first column
  1113.         \advance\displayindent by \zedindent
  1114.         \advance\displaywidth by -\zedindent
  1115.         \advance\displayindent by \z@curindent
  1116.         \advance\displayindent by \wd\z@curline
  1117.         \advance\displaywidth by -\z@curindent
  1118.         \advance\displaywidth by -\wd\z@curline
  1119.         \global\setbox\z@curline\hbox{}
  1120.         \z@narrow\parbox[b]{\linewidth}\bgroup\hfil\break}
  1121. \def\endzpar{\egroup$$\z@makeinner\z@nopar}
  1122. %       CLASSCOM
  1123. \def \classcom{\zpar\sf}
  1124. \let \endclasscom=\endzpar
  1125. %       PROOF
  1126. \def\proof{\zpar$\PR$\zpar}
  1127. \def\endproof{\endzpar\endzpar}
  1128. % Additional auxiliary macros
  1129. \def\zseq#1{\lseq #1 \rseq}
  1130. \def\zset#1{\{ #1 \}}
  1131. \def\zimg#1{\limg #1 \rimg}
  1132. \def\zsch#1{\lsch #1 \rsch}
  1133. \def\zimgset#1{\zimg\zset{#1}}
  1134. %</nfoz>
  1135. %<*nfloz>
  1136. % Oz with Lucida Maths
  1137. % 1. august 92
  1138. % 2. sep 92. edited after move of Greek in Lucida maths fonts
  1139. % 3. jan 93. for NFSS2
  1140. \typeout{<Style option \filename, \filedate> (Oz with Lucida Maths)}
  1141. %       This document is organised as follows:
  1142. %       SECTION 1       Z FONTS
  1143. %       SECTION 2       Z SYMBOLS
  1144. %       SECTION 3       Z ENVIRONMENTS
  1145. % Modification History:
  1146. %               The original zed.sty file was written by Mike Spivey.
  1147. %               These macros have been extensively modified to
  1148. %               include extra symbols and environments for Object-Z
  1149. %               and now have little resemblence to the original macros.
  1150. %               Mike Spivey has also extended his macros along
  1151. %               different lines for Z - the latest version of macros
  1152. %               are called fuzz.sty and come with a syntax checker for Z.
  1153. %               They can be purchased for a small fee from:
  1154. %                       mike@prg.oxford.ac.uk
  1155. %        87     original zed.sty file - Mike Spivey
  1156. %        88     modified to include extra symbols and environments - Paul King
  1157. %        88     modified to include macros for UQ editor - Ray Neucom
  1158. %    May 89     modified to include object-oriented constructs - PK
  1159. %    Jun 89     modified to automatically change Z symbol size - PK
  1160. % 27 Jul 89     removed spurious space from \@setsize - PK
  1161. %  3 Aug 89     adjust style of equation number field - PK
  1162. % 24 Aug 89     add optional field to topline and zedline for proofs - PK
  1163. % 15 Sep 89     added extra qed symbols, updated classcom and comment - PK
  1164. % 25 Sep 89     renamed z@[bB]ig to z[bB]ig and changed temporal symbols - PK
  1165. % 30 Sep 89     added \znewpage, \Infrule, removed space above state box - PK
  1166. % 12 Mar 90     changed \@setsize to work better for double-spaced text - PK
  1167. % 31 Mar 90     added definition for @ and \bool and redefined `;' - PK
  1168. %  9 May 90     changed \sdef to \varsdef, \sdef & \defs to Spivey's latest - PK
  1169. % 27 May 90     added \c{n}{text} - a tab like \t{n} with text at left - PK
  1170. % 29 May 90     added `corners' to boxes and \zedcornerheight - PK
  1171. % 11 Jul 90     added \rename*[y/x] and \zseq \zset ..., changed \zeq \zimp - PK
  1172. %  2 Aug 90     added subseq - PK
  1173. %  9 Nov 90     changed \M to hopefully interact better with spacing -  PK
  1174. % 24 Feb 92     changed to work with NFSS - SPQR
  1175. %               check out \@ifundefined at start to isolate differences
  1176. %---------------------------
  1177. % Please post any updates that you may make to this file to:
  1178. %       Paul King -- ACSnet: king@batserver.cs.uq.oz.au
  1179. %---------------------------
  1180. %       SECTION 1       Z FONTS
  1181. % allow change of size within schemas. this is a sod to get right;
  1182. % my principle (eventually!) was to go out of math temporarily, change
  1183. % size, go into an inner math, do the business, then get out of math
  1184. % and back to outer math
  1185. \newbox\strutbox@
  1186. \def\strut@{\copy\strutbox@}
  1187. \addto@hook\every@size{%
  1188.     \setbox\strutbox@\hbox{\lower.5\normallineskiplimit
  1189.          \vbox{\kern-\normallineskiplimit\copy\strutbox}}}
  1190. \def\bBigg@#1#2{%
  1191. \mbox{\ifcase#1\or\large\or\Large\or\LARGE\or\small\or\footnotesize\fi
  1192. $#2$}\nulldelimiterspace\z@ \m@th}
  1193. \addto@hook\every@size{\setbox\z@\vbox{\hbox{$($}\kern\z@}%
  1194.   \big@size 1.2\ht\z@}
  1195. \newdimen\big@size
  1196. \def\zBIG{\bBigg@{3}}
  1197. \def\zBig{\bBigg@{2}}
  1198. \def\zbig{\bBigg@{1}}
  1199. \def\zsmall{\bBigg@{4}}
  1200. \def\zSmall{\bBigg@{5}}
  1201. %       WORD STYLES
  1202. % these need handling a bit differently in NFSS
  1203. \def\String#1{\hbox{`{\tt #1}'}}
  1204. \def\STRING#1{\hbox{``{\tt #1}''}}
  1205. \def\infix#1{\z@rel{{\underline{#1}}}}
  1206. \def\word#1{\z@op{#1}}
  1207. \def\keyword#1{\z@op{\mbox{\rm #1}}}
  1208. \def\boldword#1{\z@op{\mbox{\bf #1}}}
  1209. \def\underword#1{\z@op{{\underline{#1}}}}
  1210. \def\underkeyword#1{\z@op{{\underline{\mbox{\rm #1}}}}}
  1211. \def\underboldword#1{\z@op{{\underline{\mbox{\bf #1}}}}}
  1212. %---------------------------
  1213. %       SECTION 2       Z SYMBOLS
  1214. % The mathcodes for the letters A, ..., Z, a, ..., z are changed to
  1215. % generate text italic rather than math italic by default. This makes
  1216. % multi-letter identifiers look better. The mathcode for character c
  1217. % is set to "7000 (variable family) + "400 (text italic) + c.
  1218. \def\@setmcodes#1#2#3{{\count0=#1 \count1=#3
  1219.         \loop \global\mathcode\count0=\count1 \ifnum \count0<#2
  1220.         \advance\count0 by1 \advance\count1 by1 \repeat}}
  1221. \@setmcodes{`A}{`Z}{"7441}
  1222. \@setmcodes{`a}{`z}{"7461}
  1223. % Also, the mathcode for semicolon is set to "8000, so it behaves as an
  1224. % active character in math mode; it is defined to insert a thick space.
  1225. % \semicolon is a semicolon as an ordinary symbol.
  1226. \let\@mc=\mathchardef
  1227. \mathcode`\;="8000 % Makes ; active in math mode
  1228. {\catcode`\;=\active \gdef;{\semicolon\;}}
  1229. \@mc\semicolon="603B
  1230. %               ------ UTILITY MACROS FOR Z SYMBOLS ------
  1231. % \z@op         makes a large math operator
  1232. % \z@rel        makes a math relation
  1233. % \z@bin        makes a binary operator
  1234. % each use a mathstrut to defeat TeX's vertical adjustment.
  1235. % \z@bigXXX big version of symbol
  1236. \def\z@op#1{\mathop{\mathstrut{#1}}\nolimits}
  1237. \def\z@bin#1{\mathbin{\mathstrut{#1}}}
  1238. \def\z@rel#1{\mathrel{\mathstrut{#1}}}
  1239. \def\z@bigop#1{\z@op{\zbig{#1}}}
  1240. \def\z@bigbin#1{\z@bin{\zbig{#1}}}
  1241. \def\z@bigrel#1{\z@rel{\zbig{#1}}}
  1242. \def\z@Bigop#1{\z@op{\zBig{#1}}}
  1243. \def\z@Bigbin#1{\z@bin{\zBig{#1}}}
  1244. \def\z@Bigrel#1{\z@rel{\zBig{#1}}}
  1245. \def\z@smallop#1{\z@op{\zsmall{#1}}}
  1246. \def\z@smallbin#1{\z@bin{\zsmall{#1}}}
  1247. \def\z@smallrel#1{\z@rel{\zsmall{#1}}}
  1248. % This underscore doesn't have the little kern --- you get an italic
  1249. % correction anyway in math mode.
  1250. \def\_{\leavevmode \vbox{\hrule width0.4em}}
  1251. % Save \q as \xq for quantifiers q.
  1252. \let\xforall=\forall
  1253. \let\xexists=\exists
  1254. \let\xlambda=\lambda
  1255. \let\xmu=\mu
  1256. % Save other symbols
  1257. \let\xsucc\succ
  1258. \let\xprec\prec
  1259. \let\dotaccent=\dot
  1260. \let\sectionsymbol=\S
  1261. \let\integral=\int
  1262. \let\product\prod
  1263. % \p and \f make arrows with 1 and 2 crossings resp.
  1264. \def\p#1{\mathrel{\ooalign{\hfil$\mapstochar\mkern 5mu$\hfil\cr$#1$}}}
  1265. \def\f#1{\mathrel{\ooalign{\hfil
  1266.         $\mapstochar\mkern 3mu\mapstochar\mkern 5mu$\hfil\cr$#1$}}}
  1267. %       ------ AMSTEX SYMBOL DEFINITIONS ------
  1268. % do these before Z symbols so that we can use them in our special symbols
  1269. %               ------ SPECIAL Z SYMBOLS ------
  1270. %       NUMBERS
  1271. \def \nat       {{\bbold N}}
  1272. \def \integer   {{\bbold Z}}
  1273. \def \natone    {{\bbold N}_1}
  1274. \def \real      {{\bbold R}}
  1275. \def \bool      {{\bbold B}}
  1276. \let \divides   \div
  1277. \def \div       {\z@bin{\mathrm{div}}}
  1278. \def \mod       {\z@bin{\mathrm{mod}}}
  1279. \def \succ      {\word{succ}}
  1280. \def \expon     {^}
  1281. %       aliases
  1282. \let \num       \integer
  1283. \let \nplus     \natone
  1284. %       LOGIC
  1285. \def \lnot      {\neg\;}
  1286. \def \land      {\z@rel{\wedge}}
  1287. \def \lor       {\z@rel{\vee}}
  1288. \let \imp       \Rightarrow
  1289. \DeclareMathSymbol{\iff}{3}{arrows}{"61}
  1290. \def \all       {\z@op{\xforall}}
  1291. \def \exi       {\z@op{\xexists}}
  1292. \def \exione    {\exists_1}
  1293. \DeclareMathSymbol{\nexi}{0}{arrows}{"20}
  1294. \def \dot       {\z@rel{\bullet}}
  1295. \def \true      {\keyword{true}}
  1296. \def \false     {\keyword{false}}
  1297. \let \cond      \rightarrow
  1298. %       aliases
  1299. \let \spot      \dot
  1300. \mathcode`\@="8000% make @ active in mathmode
  1301. {\catcode`\@=\active \gdef@{\dot}}
  1302. \let \implies   \imp
  1303. \let \forall    \all
  1304. \let \exists    \exi
  1305. \let \nexists   \nexi
  1306. %       SETS
  1307. \let \emptyset  \varnothing
  1308. \def \varemptyset  {\{\,\}}
  1309. \def \pset      {\z@op{\bbold P}}
  1310. \def \psetone   {\pset_1}
  1311. \def \fset      {\z@op{\bbold F}}
  1312. \def \fsetone   {\fset_1}
  1313. \def \sset      {\z@op{\bbold S}}
  1314. \let \mem       \in
  1315. \def \nem       {\not\mem}
  1316. \def \uni       {\z@bin\cup}
  1317. \def \int       {\z@bin\cap}
  1318. \let \prod      \times
  1319. \def \min       {\word{min}}
  1320. \def \max       {\word{max}}
  1321. \def \duni      {\z@Bigop{\lower0.25ex\hbox{$\uni$}}}
  1322. \def \dint      {\z@Bigop{\lower0.25ex\hbox{$\int$}}}
  1323. \def \upto      {\z@bin{\ldotp\ldotp}}
  1324. \let \psubs     \subset
  1325. \let \subs      \subseteq
  1326. \let \psups     \supset
  1327. \let \sups      \supseteq
  1328. \def \diff      {\z@bin{\backslash}}
  1329. %       aliases
  1330. \let \cross     \prod
  1331. \let \notin     \nem
  1332. \let \nmem      \nem
  1333. \let \union     \uni
  1334. \let \inter     \int
  1335. \let \power     \pset
  1336. \let \finset    \fset
  1337. \let \dunion    \duni
  1338. \let \dinter    \dint
  1339. %       RELATIONS & FUNCTIONS
  1340. \def \lambda    {\z@op{\xlambda}}
  1341. \def \mu        {\z@op{\xmu}}
  1342. \def \dom       {\keyword{dom}}
  1343. \def \ran       {\keyword{ran}}
  1344. \def \id        {\keyword{id}}
  1345. \@mc \dres      "212F
  1346. \@mc \rres      "212E
  1347. \def \dsub      {\mathbin{\rlap{\raise.05ex\hbox{$-$}}{\dres}}}
  1348. \def \rsub      {\mathbin{\rlap{\raise.05ex\hbox{$-$}}{\rres}}}
  1349. \let \fovr      \oplus
  1350. \let \cmp       \circ
  1351. \def \fcmp      {\mathbin{\raise 0.6ex\hbox{\oalign{\hfil$\scriptscriptstyle
  1352.                  \mathrm{o}$\hfil\cr\hfil$\scriptscriptstyle\mathrm{9}$\hfil}}}}
  1353. \def \inv       {^{-1}}
  1354. \def \limg      {(\!|}
  1355. \def \rimg      {|\!)}
  1356. \let \map       \mapsto
  1357. \let \rel       \leftrightarrow
  1358. \let \tfun      \rightarrow
  1359. \let \tinj      \rightarrowtail
  1360. \def \tsur      {\mathrel{\ooalign{$\tfun$\hfil\cr$\mkern4mu\tfun$}}}
  1361. \def \pfun      {\p\tfun}
  1362. \def \pinj      {\p\tinj}
  1363. \def \psur      {\p\tsur}
  1364. \def \ffun      {\f\tfun}
  1365. \def \finj      {\f\tinj}
  1366. \def \bij       {\mathrel{\ooalign{$\tinj$\hfil\cr$\mkern5mu\tfun$}}}
  1367. \def \tcl       {^+}
  1368. \def \rtcl      {^*}
  1369. \def \iter      {^}
  1370. %       aliases
  1371. \let \comp      \fcmp
  1372. \let \ndres     \dsub
  1373. \let \nrres     \rsub
  1374. \let \fun       \tfun
  1375. \let \inj       \tinj
  1376. \let \surj      \tsur
  1377. \let \psurj     \psur
  1378. \@mc \lll       "31DE
  1379. \let \llless    \lll
  1380. \@mc \ggg       "31DF
  1381. \let \gggtr     \ggg
  1382. % already in lucidab
  1383. %\def\checkmark{\mathhexbox\thearfam AC }
  1384. %\def \circledR {\mathhexbox1C9 }
  1385. %\def \maltese  {\mathhexbox1CB }
  1386. \@mc \eth       "00F0   % in Cork layout only!
  1387. \def \interleave        {{\parallel\!\!\vert}}
  1388. \def \shortinterleave   {\z@rel{\mathord\shortmid\mathord\shortparallel}}
  1389. \let \restriction       \upharpoonright
  1390. \@mc \doublebarwedge    "22D4
  1391. \def \napprox   {\not\approx}
  1392. %       SEQUENCES
  1393. \def \seq       {\keyword{seq}}
  1394. \def \seqone    {\seq_1}
  1395. \def \emptyseq  {\lseq\,\rseq}
  1396. \let \lseq      \langle
  1397. \let \rseq      \rangle
  1398. \def \head      {\word{head}}
  1399. \def \tail      {\word{tail}}
  1400. \def \front     {\word{front}}
  1401. \def \last      {\word{last}}
  1402. \def \rev       {\word{rev}}
  1403. \def \squash    {\word{squash}}
  1404. \def \next      {\keyword{next}}
  1405. \def \inseq     {\keyword{in}}
  1406. \def \cat       {\mathbin{\raise 0.8ex\hbox{$\mathchar"215F$}}}
  1407. \DeclareMathSymbol{\sres}{2}{arrows}{"75}
  1408. \def \ssub      {\z@bin{\rlap{$-$}{\sres}}}
  1409. \DeclareMathSymbol{\ires}{2}{arrows}{"76}
  1410. \def \isub      {\z@bin{\rlap{$-$}{\ires}}}
  1411. \def \dcat      {\z@op{\cat/}}
  1412. \def \dovr      {\z@op{\fovr/}}
  1413. \def \dcmp      {\z@op{\fcmp/}}
  1414. \let \prefix    \subseteq
  1415. \def \suffix    {\keyword{suffix}}
  1416. \def \seqi      {\keyword{seq_\infty}}
  1417. \def \partitions        {\keyword{partitions}}
  1418. \def \disjoint  {\keyword{disjoint}}
  1419. \def \subseq    {\keyword{subseq}}
  1420. %       aliases
  1421. \let \filter    \sres
  1422. %       SCHEMAS
  1423. \def \lsch      {\z@bigop{[}}
  1424. \def \rsch      {\z@bigop{]}}
  1425. \def \dparallel {\z@bigop{\parallel}\limits}
  1426. \def \zand      {\z@bigbin\land}
  1427. \def \zor       {\z@bigbin\lor}
  1428. \def \zcmp      {\z@bigbin\fcmp}
  1429. \def \zexi      {\z@bigop\exists}
  1430. \def \zall      {\z@bigop\forall}
  1431. \def \znot      {\z@bigop\neg}
  1432. \def \zbar      {\z@bigbin\cbar}
  1433. \def \zfor      {/}
  1434. \def \zhide     {\z@bigbin\backslash}
  1435. \def \zimp      {\z@bigrel\imp}
  1436. \def \zeq       {\z@bigrel\iff}
  1437. \def \zovr      {\z@bigrel\oplus}
  1438. \def \zpipe     {\z@bigbin{\mathord>\!\!\mathord>}}
  1439. \def \pre       {\keyword{pre}}
  1440. \def \pred      {\keyword{pred}}
  1441. \def \post      {\keyword{post}}
  1442. \def \zproject  {\z@bigbin\sres}
  1443. \def\rename{\@ifnextchar*{\z@rename}{\z@@rename}}
  1444. \def\z@rename*[#1/#2]{\left[#1 \over #2\right]}
  1445. \def\z@@rename[#1/#2]{\left[#1 \zfor #2\right]}
  1446. %       aliases
  1447. \let \project   \zproject
  1448. \let \import    \sres
  1449. \let \semi      \zcmp
  1450. \let \hide      \zhide
  1451. %       BAGS
  1452. \let\buni\uplus
  1453. \def \emptybag  {\lbag\:\rbag}
  1454. \def \lbag      {[\![}
  1455. \def \rbag      {]\!]}
  1456. \def \bag       {\keyword{bag}}
  1457. \def \items     {\word{items}}
  1458. \let \inbag     \inseq
  1459. \def \bagcount  {\word{count}}
  1460. %       DEFINITIONS & DECLARATIONS
  1461. \def \ddef      {\z@rel{\;::=\;}}
  1462. \def \bbar      {\z@bigrel{|}}
  1463. \let \cbar      \mid
  1464. \def \lang      {\langle\!\langle}
  1465. \def \rang      {\rangle\!\rangle}
  1466. \def \sdef      {\z@rel{\widehat=}}
  1467. \def \defs      {\z@smallrel{==}}
  1468. \def \varsdef   {\z@rel\triangleq}
  1469. %       aliases
  1470. \let \sdefs     \sdef
  1471. \mathcode`\|=\mid
  1472. \let \ldata     \lang
  1473. \let \rdata     \rang
  1474. %       MISCELLANEOUS
  1475. \def \lblot     {\langle\!|}
  1476. \def \rblot     {|\!\rangle}
  1477. \def \IMP       {\boldword{Import}}
  1478. \let \env       \Rrightarrow
  1479. \def \zlet      {\boldword{let}}
  1480. \def \zin       {\boldword{in}}
  1481. \def \zwhere    {\boldword{where}}
  1482. %       QZED SUPPORT
  1483. \def\HOLE{\z@op{\hbox{$\lll\star\star\star\ggg$}}}
  1484. \def\landd{} % to support qzed editor
  1485. \def\semid{} % to support qzed editor
  1486. \def\qzed{\ifz@inclass\else\zed\fi}
  1487. \def\endqzed{\ifz@inclass\else\endzed\fi}
  1488. %       CLASSES
  1489. \def\qua{\mbox{::}}
  1490. \def\redef{\mbox{\bf ~redef}}
  1491. \def\Init{I\!\mbox{\footnotesize\em NIT}}
  1492. \def\Exit{E\!\mbox{\footnotesize\em XIT}}
  1493. \def\Internal{I\!\mbox{\em\footnotesize NTERNAL}}
  1494. \def\Aux{A\!\mbox{\footnotesize\em UX}}
  1495. \def\intern{\mbox{\sf i}}
  1496. %               ------ OTHER SPECIAL NOTATION ------
  1497. %       PROOFS
  1498. \def\thrm{\z@rel\vdash}
  1499. \def\qed{\zsmall\Box}
  1500. \let\Qed\Box
  1501. \let\QED\square
  1502. \def\BLACKQED{\zsmall\blacksquare}
  1503. \let\ETH\qed
  1504. \def\TH{\boldword{Theorem}}
  1505. \def\LE{\boldword{Lemma}}
  1506. \def\PR{\boldword{Proof}}
  1507. \def\refines{\z@rel\sqsupseteq}
  1508. \def\defines{\z@rel\sqsubseteq}
  1509. \def\weakrefine{\z@rel{\raise0.2ex\rlap{\hbox{$\sqsupset$}}\lower1ex\hbox{$\sim$}}}
  1510. \def\weakdefine{\z@rel{\raise0.2ex\rlap{\hbox{$\sqsubset$}}\lower1ex\hbox{$\sim$}}}
  1511. %       aliases
  1512. \let\shows\thrm
  1513. %       OBJECT THEORY
  1514. \def\childof{\z@rel\xsucc}
  1515. \def\parentof{\z@rel\xprec}
  1516. \let\weaksubclass\succsim
  1517. \let\weaksupclass\precsim
  1518. \def\hasa{\z@rel{\mathord\xsucc\!\!\!\mathord\xsucc}}
  1519. \def\instancein{\z@rel{\mathord\xprec\!\!\!\mathord\xprec}}
  1520. \def\subtype{\z@rel\sqsubset}
  1521. \def\subtypeeq{\z@rel\sqsubseteq}
  1522. \def\suptype{\z@rel\sqsupset}
  1523. \def\suptypeeq{\z@rel\sqsupseteq}
  1524. %       aliases
  1525. \let\inherits\childof
  1526. \let\subclass\childof
  1527. \let\isa\childof
  1528. \let\supclass\parentof
  1529. \let\instantiates\hasa
  1530. \let\islikea\weaksubclass
  1531. %       TEMPORAL LOGIC
  1532. \def\atnext{\rlap{$\zSmall\bigcirc$}\kern0.01em\rlap{$\zSmall\bigcirc$}\kern0.01em\zSmall\bigcirc}
  1533. \def\atlast{\rlap{$\zSmall\bigcirc$}\kern0.01em\rlap{$\zSmall\bigcirc$}\kern0.01em\rlap{$\kern0.01em\mathord-$}\zSmall\bigcirc}
  1534. \def\always{\lower0.37ex\hbox{$\zbig\Box$}}
  1535. \def\uptilnow{\rlap{$\kern0.02em\mathord-$}\lower0.37ex\hbox{$\zbig\Box$}}
  1536. \def\eventually{\lower0.37ex\hbox{$\zbig\Diamond$}}
  1537. \def\previously{\rlap{$\kern0.04em\mathord-$}\lower0.37ex\hbox{$\zbig\Diamond$}}
  1538. %       aliases
  1539. \let\henceforth\always
  1540. %       ORDERS
  1541. \def \mono      {\keyword{monotonic}}
  1542. \def \porder    {\keyword{partial\_order}}
  1543. \def \torder    {\keyword{total\_order}}
  1544. \newbox\z@combox\newdimen\z@wdcalc
  1545. \def\comment{\@ifnextchar*{\z@leftcomment}{\z@comment}}
  1546. \def\z@comment#1{$\z@stopfield\z@addfield\z@startfield$%
  1547. \global\setbox\z@combox\hbox{\quad[{\sf #1}]}\z@wdcalc=\wd\z@combox%
  1548. \advance\z@wdcalc by \wd\z@curline\advance\z@wdcalc by \z@curindent%
  1549. \advance\z@wdcalc by \zedleftsep\advance\z@wdcalc by \zedlinethickness%
  1550. \advance\z@wdcalc by 2\zedindent\ifdim\z@wdcalc>\displaywidth\\%
  1551. \fi&\box\z@combox\ignorespaces}
  1552. \def\z@leftcomment*#1{\hbox{[{\sf #1}]}}
  1553. %---------------------------
  1554. %       SECTION 3       Z ENVIRONMENTS
  1555. %               ------ MARGIN STACK ------
  1556. % define a stack of dimensions (50 elements)
  1557. %       can probably be made smaller when qzed filters its TeX output better
  1558. \newcount\z@stackmin
  1559. \newcount\z@stackmax
  1560. \newcount\z@stacktop
  1561. \newdimen\@gtempa \z@stackmin=\allocationnumber
  1562. \newdimen\@gtempa\newdimen\@gtempa\newdimen\@gtempa\newdimen\@gtempa
  1563. \newdimen\@gtempa\newdimen\@gtempa\newdimen\@gtempa\newdimen\@gtempa
  1564. \newdimen\@gtempa\newdimen\@gtempa\newdimen\@gtempa\newdimen\@gtempa
  1565. \newdimen\@gtempa\newdimen\@gtempa\newdimen\@gtempa\newdimen\@gtempa
  1566. \newdimen\@gtempa\newdimen\@gtempa\newdimen\@gtempa\newdimen\@gtempa
  1567. \newdimen\@gtempa\newdimen\@gtempa\newdimen\@gtempa\newdimen\@gtempa
  1568. \newdimen\@gtempa\newdimen\@gtempa\newdimen\@gtempa\newdimen\@gtempa
  1569. \newdimen\@gtempa\newdimen\@gtempa\newdimen\@gtempa\newdimen\@gtempa
  1570. \newdimen\@gtempa\newdimen\@gtempa\newdimen\@gtempa\newdimen\@gtempa
  1571. \newdimen\@gtempa\newdimen\@gtempa\newdimen\@gtempa\newdimen\@gtempa
  1572. \newdimen\@gtempa\newdimen\@gtempa\newdimen\@gtempa\newdimen\@gtempa
  1573. \newdimen\@gtempa\newdimen\@gtempa\newdimen\@gtempa\newdimen\@gtempa
  1574. \newdimen\@getempa \z@stackmax=\allocationnumber
  1575. \dimen\z@stackmin=0pt
  1576. % define a box to contain the current line
  1577. %  & a variable to contain it's indentation
  1578. \newbox\z@curline
  1579. \newdimen\z@curindent
  1580. \dimen\z@curindent=0pt
  1581. % Space between operands of a function application
  1582. \def\z@space{{}\;{}}
  1583. % define a box to contain the current field
  1584. \newbox\z@curfield
  1585. % define a mini-tabbing environment for use inside 'zed'
  1586. \def\z@startline{\setbox\z@curline\hbox{}%
  1587.                  \global\z@curindent\dimen\z@stacktop
  1588.                  \z@startfield\ignorespaces}
  1589. \def\z@stopline{\z@stopfield
  1590.                 \z@addfield
  1591.                 \hbox{\hskip\z@curindent \box\z@curline}}
  1592. \def\z@startfield{\global\setbox\z@curfield\hbox\bgroup}
  1593. \def\z@stopfield{\egroup}
  1594. \def\z@addfield{\global\setbox\z@curline\hbox{\unhbox
  1595.                  \z@curline\unhbox\z@curfield}}
  1596. \def\z@pushmargin{\hbox{\kern0pt}$%
  1597.                   \z@stopfield
  1598.                   \z@addfield
  1599.                   \ifnum \z@stacktop < \z@stackmax
  1600.                     \global\advance\z@stacktop \@ne
  1601.                   \else
  1602.                     \@latexerr{Z margin stack overflow (too many \string\M's)}
  1603.                     \@ehd
  1604.                   \fi
  1605.                   \global\dimen\z@stacktop\z@curindent
  1606.                   \global\advance\dimen\z@stacktop \wd\z@curline
  1607.                   \z@startfield\ignorespaces
  1608.                   $\relax}
  1609. \def\z@popmargin{\ifnum \z@stacktop > \z@stackmin
  1610.                     \global\advance\z@stacktop \m@ne \ignorespaces
  1611.                   \else
  1612.                     \@latexerr{Z Margin stack underflow (too many \string\O's)}
  1613.                     \@ehd
  1614.                   \fi}
  1615. \def\M{\z@pushmargin} \def\O{\z@popmargin} \def\S{\z@space}
  1616. \z@stacktop\z@stackmin
  1617. %               ------ UTILITY MACROS FOR Z ENVIRONMENTS ------
  1618. % Here are environments for the various sorts of displays which occur in
  1619. % Z documents. All displays are set flush left, indented by \zedindent,
  1620. % by default \leftmargini.  Schemas, etc, are made just wide enough to
  1621. % give equal margins left and right.
  1622. % Some environments (schema, etc.) must only be split at `\zbreak',
  1623. % and others (e.g. argue) may be split arbitrarily. All generate
  1624. % alignment displays, and penalties are used to control page breaks.
  1625. %       FORMAT and CONTROL macros
  1626. \newdimen\zedindent             \zedindent=\leftmargini
  1627. \newdimen\zedleftsep            \zedleftsep=1em
  1628. \newdimen\zedtab                \zedtab=2em
  1629. \newdimen\zedbar                \zedbar=8em
  1630. \newdimen\zedlinethickness      \zedlinethickness=0.4pt
  1631. \newdimen\zedcornerheight       \zedcornerheight=0pt
  1632. \newcount\z@cols
  1633. \newif\ifz@firstline            \z@firstlinefalse
  1634. \newif\ifz@inclass              \z@inclassfalse
  1635. \newif\ifz@inenv                \z@inenvfalse
  1636. \newif\ifz@leftmargin           \z@leftmargintrue
  1637. \newif\ifz@incols               \z@incolsfalse
  1638. \newif\ifleftnames              \leftnamesfalse
  1639. \def\leftschemas{\leftnamestrue}
  1640. \newif\ifz@inbox                \z@inboxfalse
  1641. \newskip\zedbaselineskip        \zedbaselineskip\baselineskip
  1642. \newbox\zstrutbox               \setbox\zstrutbox=\copy\strutbox
  1643. \def\zstrut{\relax\ifmmode\copy\zstrutbox\else\unhcopy\zstrutbox\fi}
  1644. \def\zedbaselinestretch{1}
  1645. % penalties
  1646. \newcount\interzedlinepenalty   \interzedlinepenalty=10000      %never break
  1647. \newcount\preboxpenalty         \preboxpenalty=0                %break easily
  1648. \newcount\forcepagepenalty      \forcepagepenalty=-10000        %always break
  1649. % also use                      \interdisplaylinepenalty=100    %break sometimes
  1650. % macros for changing the size of schema text
  1651. \def\zedsize#1{\def\z@size{#1}}
  1652. \def\z@size{}
  1653. \newskip\z@adskip\newskip\z@bdskip\newskip\z@adsskip\newskip\z@bdsskip
  1654. \def\z@changesize{%
  1655. \z@adskip\abovedisplayskip\z@bdskip\belowdisplayskip% save skips
  1656. \z@adsskip\abovedisplayshortskip\z@bdsskip\belowdisplayshortskip
  1657. \z@size % change size
  1658. \abovedisplayskip\z@adskip\belowdisplayskip\z@bdskip% restore skips
  1659. \abovedisplayshortskip\z@adsskip\belowdisplayshortskip\z@bdsskip}
  1660. \def\z@zeroskips{\abovedisplayskip\z@\belowdisplayskip\z@
  1661.         \abovedisplayshortskip\z@\belowdisplayshortskip\z@}
  1662. %               ------ MACROS FOR MARGINS ------
  1663. % \z@narrow, \z@wide - make the margins narrower, wider
  1664. \def\z@narrow{\advance\linewidth by -\zedindent}
  1665. \def\z@wide{\advance\linewidth by \zedindent}
  1666. %               ------ MACROS FOR DRAWING BOXES ------
  1667. % \z@hrulefill - line with correct thickness
  1668. \def\z@hrulefill{\leaders\hrule height\zedlinethickness\hfill}
  1669. % \z@topline draws the top horizontal line of boxed environments
  1670. % \z@dbltopline draws a double ruled top line
  1671. % \z@botline draws the bottom horizontal line of boxed environments
  1672. % \zedline[comment] draws a long horizontal line ending in comment
  1673. % \where draws a short horizontal line
  1674. \def\z@topline#1{\omit\@ifnextchar[{\z@@topline{#1}}{\z@@topline{#1}[]}}
  1675. \def\z@@topline#1[#2]{\hbox to\linewidth{\zstrut\ifleftnames\else
  1676.         \vrule height\zedlinethickness width\zedlinethickness
  1677.         \hbox to\zedleftsep{\z@hrulefill}\fi#1\z@hrulefill
  1678.         \smash{\vrule height\zedlinethickness width\zedlinethickness
  1679.         depth\zedcornerheight}\hbox{\sf #2}}\cr}
  1680. \def\z@dbltopline#1{\omit\@ifnextchar[{\z@@dbltopline{#1}}{\z@@dbltopline{#1}[]}}
  1681. \def\z@@dbltopline#1[#2]{\z@@topline{#1}[#2]%
  1682. \noalign{\kern-\baselineskip
  1683.         \kern-\zedlinethickness
  1684.         \kern-\doublerulesep \nobreak}%
  1685. \omit\z@@topline{\hphantom{#1}}[\hphantom{#2}]%
  1686. \noalign{\kern\doublerulesep
  1687.         \kern\zedlinethickness \nobreak}}
  1688. \def\z@botline{\also\omit\hbox to\linewidth{\z@hrulefill
  1689. \smash{\vrule height\zedcornerheight width\zedlinethickness
  1690.         depth 0pt}}\cr}
  1691. \def\z@@botline[#1]{\hbox to\linewidth{\vrule\z@hrulefill\hbox{\sf\smash{#1}}}\also}
  1692. \def\zedline{\also\omit\@ifnextchar[{\z@@botline}{\z@@botline[]}}
  1693. \def\where{\also \omit \hbox to\zedbar{\z@hrulefill}\cr\also}
  1694. \let \ST        \where
  1695. % \z@left is placed at the left of each z line:
  1696. %       in non-box environments it will do nothing.
  1697. %       in boxed environments it will do a vertical line with the same
  1698. %               height as the maximum height of the line.
  1699. \def\z@left{\ifz@inbox\vrule width\zedlinethickness\hskip\zedleftsep\fi}
  1700. %               ------ MACROS FOR SETTING UP Z ENVIRONMENTS ------
  1701. \def\z@env{\global\z@firstlinetrue\z@changesize
  1702.         $$\z@inenvtrue\baselineskip\zedbaselineskip
  1703.         \parskip=0pt\lineskip=0pt\z@narrow
  1704.         \advance\displayindent by \zedindent
  1705.         \def\\{\crcr}% Must have \def and not \let for nested alignments.
  1706.         \everycr={\noalign{\ifz@firstline \global\z@firstlinefalse
  1707.                 \else \penalty\interzedlinepenalty \fi}}
  1708.         \tabskip=0pt}
  1709. \def\endz@env{$$\global\@ignoretrue}
  1710. % z lines are formated in two (overlaping) columns;
  1711. %       the first flush left having the same width as the environment,
  1712. %       and, the second flush right ending at the right end of the environment.
  1713. \def\z@format{\halign to\linewidth\bgroup%
  1714.         \zstrut\z@left\z@startline\ignorespaces$\@lign##$\z@stopline\hfil%
  1715.         \tabskip=0pt plus1fil%
  1716.         &\hbox to 0pt{\hss\@lign##}\tabskip=0pt\cr}
  1717. \def\z@boxenv{\z@narrow\let\also=\als@ \let\Also=\Als@ \let\ALSO=\ALS@
  1718.         \z@inboxtrue \predisplaypenalty=\preboxpenalty \z@env\z@format}
  1719. \def\z@outnonbox{\z@outclasscheck\z@leavevmode\z@env}
  1720. \def\z@inoutbox{\z@leavevmode\z@makeouter\z@inclassfalse\z@boxenv}
  1721. %       SPACING COMMANDS
  1722. % no vertical glue between abutted lines
  1723. \def\@but{\noalign{\nointerlineskip}}
  1724. % no \par extra vertical spacing after Z environments
  1725. %\def\z@nopar{\ifz@inclass\else\vskip-\parskip\fi}
  1726. %\def\z@nopar{\global\parskip0pt\global\everypar{\parskip30mm\everypar{}}}
  1727. \def\z@nopar{\global\@endpetrue}
  1728. % \z@leavevmode -- Enter horizontal mode, taking account of possible
  1729. % interaction with lists and section heads:
  1730. %       1       After a \item, use \indent to get the label (this
  1731. %               fails to run in even short labels).
  1732. %       2       After a run-in heading, use \indent.
  1733. %       3       After an ordinary heading, throw away the \everypar
  1734. %               tokens, reset \@nobreak, and use \noindent with \parskip
  1735. %               zero.
  1736. %       4       Otherwise, use \noindent with \parskip zero
  1737. % use when entering displayed environments to get correct spacing
  1738. \def\z@leavevmode{\ifvmode\if@inlabel\indent\else\if@noskipsec\indent\else
  1739.         \if@nobreak\global\@nobreakfalse\everypar={}\fi
  1740.         {\parskip=0pt\noindent}\fi\fi\fi}
  1741. % extra vertical space in non-box environments
  1742. \def\also{\crcr\noalign{\vskip\jot}}
  1743. \def\Also{\crcr\noalign{\vskip2\jot}}
  1744. \def\ALSO{\Also\Also}
  1745. % extra vertical space in boxed environments
  1746. \def\als@{\crcr\@but\omit\vrule height\jot width\zedlinethickness \cr \@but}
  1747. \def\Als@{\crcr\@but\omit\vrule height2\jot width\zedlinethickness \cr \@but}
  1748. \def\ALS@{\crcr\@but\omit\vrule height4\jot width\zedlinethickness \cr \@but}
  1749. %       ENVIRONMENT-BREAKING COMMANDS
  1750. \def\znewpage{\also\noalign{\penalty\forcepagepenalty}\also}
  1751. \def\zbreak{\also\noalign{\penalty\interdisplaylinepenalty\vskip-\jot}\also}
  1752. \def\Zbreak{\also\noalign{\penalty\interdisplaylinepenalty}\also}
  1753. \def\ZBREAK{\Also\noalign{\penalty\interdisplaylinepenalty}\Also}
  1754. \def\t#1{\hskip #1\zedtab}
  1755. \def\c#1#2{\hbox to #1\zedtab{$#2$\hfil}}
  1756. \def\flushr#1{\crcr\quad\cr}
  1757. %               ------ UTILITY MACROS FOR OBJECT-Z ------
  1758. \def\z@inclasscheck{\ifz@inclass\else
  1759.         \@latexerr{This Z environment is only allowed within a class}
  1760. {Perhaps you forgot to include a \string\begin\string{class\string}
  1761. somewhere^^Jor you are trying to print a file that needs updating.^^J\@ehc} \fi}
  1762. \def\z@outclasscheck{\ifz@inclass
  1763.         \@latexerr{This Z environment is not allowed inside a class}
  1764. {This environment doesn't really make sense within a class.^^J%
  1765. If you really want it then I'll try my best to fit in in.^^J\@ehc}\else
  1766. \ifz@inenv \@latexerr{New Z environment declared before previous
  1767. one is completed}
  1768. {I suspect that you've forgotten to finish the last environment.^^J%
  1769. You are trying to nest environments and this can only be done inside classes^^J%
  1770. besides, the environment you have started isn't valid within classes any way.^^JI suggest that you type \space X <return> \space to quit and then correct your document.}
  1771. \fi\fi}
  1772. \def\z@makeouter{\ifz@inenv\ifz@inclass\z@inenvfalse
  1773.         \hskip-\zedleftsep \advance\linewidth by -\zedlinethickness
  1774.         \zedindent=\zedleftsep \zedleftsep=0.8\zedleftsep
  1775.         \zedbar=0.8\zedbar \zedtab=0.8\zedtab
  1776.         \parbox[b]{\linewidth}\bgroup\z@zeroskips
  1777.         \else\@latexerr{Incorrect place for Z environment; nesting is
  1778. allowed only inside classes}
  1779. {You've either forgotten to finish the last environment,^^J%
  1780. you've forgotten to include a \string\begin\string{class\string} somewhere^^J%
  1781. or you are trying to print a file that needs updating.^^J%
  1782. (Then again, you might just be trying to do something^^J%
  1783. that the author of these macros didn't intend you to do)^^J\@ehc}
  1784.         \fi\else\bgroup\fi}
  1785. \def \z@makeinner{\egroup%
  1786. \global\z@curindent\z@}
  1787. \def \classbreak{\also\egroup$$\vskip -\ht\zstrutbox
  1788.         \vskip -\abovedisplayskip\vskip -\belowdisplayskip\z@wide\z@boxenv\also}
  1789. %               ------ NON-BOX ENVIRONMENTS ------
  1790. %       ZED                     for non-box multiline formulas
  1791. \def\zed{\z@outnonbox\z@inboxfalse\z@format}
  1792. \def\endzed{\crcr\egroup\endz@env}
  1793. \let\[=\zed
  1794. \def\]{\crcr\egroup$$\ignorespaces}
  1795. %       ARGUE                   for algebraic arguments
  1796. %       used for algebraic proofs expressed as extended equations.
  1797. %       like zed but with extra spacing between lines
  1798. %       Generates an alignment display, which may be split across pages.
  1799. \def\argue{\z@outnonbox\interzedlinepenalty=\interdisplaylinepenalty
  1800.         \openup 1\jot \z@format
  1801.         \noalign{\vskip-\jot}}% equal vspace above and below argue display
  1802. \let\endargue=\endzed
  1803. %       INFRULE                 for inference rules
  1804. %       used for inference rules. The horizontal line is generated by \derive:
  1805. %       an optional argument contains the side-conditions of the rule.
  1806. \def\infrule{\z@outnonbox\halign\bgroup
  1807.         \zstrut\quad$\@lign##$\quad\hfil&\quad\@lign##\hfil\cr}
  1808. \let\endinfrule=\endzed
  1809. \def\derive{\crcr\also\@but\omit\z@hrulefill%
  1810.         \@ifnextchar[{\z@sidecondition}{\cr\also\@but}}
  1811. \def\Derive{\crcr\also\@but\omit\z@hrulefill\cr\@but
  1812.         \noalign{\kern-\dp\zstrutbox
  1813.         \kern\doublerulesep \nobreak}%
  1814. \omit\derive}
  1815. \def\z@sidecondition[#1]{&$\smash{\lower 0.2ex\hbox{$[\;#1\;]$}}$\cr\also\@but}
  1816. %       SYNTAX                  for syntax rules
  1817. % `syntax' environment: used for syntax rules - even (once!) for VDM.
  1818. \def\syntax{\z@outnonbox\halign\bgroup
  1819.         \zstrut$\@lign##$\hfil &\hfil$\@lign{}##{}$\hfil
  1820.         &$\@lign##$\hfil &\qquad\@lign-- ##\hfil\cr}
  1821. \let\endsyntax=\endzed
  1822. %               ------ BOXED ENVIRONMENTS ------
  1823. %       SCHEMA                  schema definitions
  1824. \def\schema#1{\z@inoutbox\z@topline{$\,#1\,$}}
  1825. \def\endschema{\z@botline \endzed \z@makeinner \z@nopar}
  1826. %       SCHEMA*                 schema with no name
  1827. \@namedef{schema*}{\leftnamesfalse\z@inoutbox\z@topline{}}
  1828. \expandafter\let\csname endschema*\endcsname=\endschema
  1829. %       GENSCHEMA               generic schema definitions
  1830. \def\genschema#1#2{\z@inoutbox\z@topline{$\,#1\:[#2]\,$}}
  1831. \let\endgenschema=\endschema
  1832. %       AXDEF                   'liberal' axiomatic definitions
  1833. \def\axdef{\z@inoutbox}
  1834. \def\endaxdef{\endzed\z@makeinner}
  1835. %       UNIQDEF                 'unique' axiomatic definitions
  1836. \def\uniqdef{\leftnamesfalse\z@inoutbox\z@dbltopline{}}
  1837. \let\enduniqdef=\endschema
  1838. %       GENDEF                  'generic' axiomatic definitions
  1839. \def\gendef#1{\leftnamesfalse\z@inoutbox\z@dbltopline{$\,[#1]\,$}}
  1840. \let\endgendef=\endschema
  1841. %       CLASS
  1842. \def\class#1{\z@leavevmode\z@makeouter\z@inclasstrue
  1843.                 \z@boxenv\z@topline{$\,#1\,$}}
  1844. \let\endclass\endschema
  1845. %       OP
  1846. \def\op{\z@inclasscheck\schema}
  1847. \let\endop\endschema
  1848. %       STATE
  1849. \def\state{\z@inclasscheck\vbox\bgroup\vskip-\ht\zstrutbox\vbox\bgroup\hbox\bgroup\@nameuse{schema*}}
  1850. \def\endstate{\endschema\egroup\egroup\egroup}
  1851. %       INIT
  1852. \def\init{\z@inclasscheck\schema{\Init}}
  1853. \let\endinit\endschema
  1854. %               ------ OTHER ENVIRONMENTS ------
  1855. %       SIDEBYSIDE
  1856. % This should support an arbitary number of columns
  1857. %       \zedindent's proportion of \linewidth gives a practical limit
  1858. \def\sidebyside{\@ifnextchar[{\z@columns}{\z@columns[2]}}
  1859. \def\z@columns[#1]{\z@leavevmode\z@cols#1 \z@makeouter\z@narrow%
  1860.         $$\lineskip=0pt\z@incolstrue
  1861.         \predisplaysize\maxdimen
  1862.         \ifz@leftmargin\hskip-\zedindent\z@leftmarginfalse\fi
  1863.         \setbox0=\hbox to \linewidth\bgroup\z@zeroskips%
  1864.         \divide\zedbar by \z@cols \divide\zedleftsep by \z@cols
  1865.         \divide\zedtab by \z@cols \divide\linewidth by \z@cols
  1866.         \parbox[t]{\linewidth}\bgroup\z@wide}
  1867. \def\nextside{\egroup\hss\parbox[t]{\linewidth}\bgroup\z@wide}
  1868. \newdimen\z@temp
  1869. \def\endsidebyside{\egroup\egroup
  1870.         \z@temp\ht0 \advance\z@temp by \dp0\advance\z@temp by-\dp\zstrutbox
  1871.         \hbox{\raise\z@temp\box0}\endz@env\z@makeinner\z@nopar}
  1872. %       ZPAR
  1873. \def\zpar{\z@leavevmode
  1874.         \ifz@inenv\z@inclasstrue\fi% fudge to let zpar in all boxes
  1875.         \z@makeouter\z@changesize
  1876.         \advance\linewidth by -\z@curindent
  1877.         \advance\linewidth by -\wd\z@curline
  1878.         \hskip-\wd\z@curline\advance\linewidth by -\zedindent$$
  1879.         \ifz@leftmargin\hskip-\zedindent\fi% adjustment for first column
  1880.         \advance\displayindent by \zedindent
  1881.         \advance\displaywidth by -\zedindent
  1882.         \advance\displayindent by \z@curindent
  1883.         \advance\displayindent by \wd\z@curline
  1884.         \advance\displaywidth by -\z@curindent
  1885.         \advance\displaywidth by -\wd\z@curline
  1886.         \global\setbox\z@curline\hbox{}
  1887.         \z@narrow\parbox[b]{\linewidth}\bgroup\hfil\break}
  1888. \def\endzpar{\egroup$$\z@makeinner\z@nopar}
  1889. %       CLASSCOM
  1890. \def \classcom{\zpar\sf}
  1891. \let \endclasscom=\endzpar
  1892. %       PROOF
  1893. \def\proof{\zpar$\PR$\zpar}
  1894. \def\endproof{\endzpar\endzpar}
  1895. % Additional auxiliary macros
  1896. \def\zseq#1{\lseq #1 \rseq}
  1897. \def\zset#1{\{ #1 \}}
  1898. \def\zimg#1{\limg #1 \rimg}
  1899. \def\zsch#1{\lsch #1 \rsch}
  1900. \def\zimgset#1{\zimg\zset{#1}}
  1901. %</nfloz>
  1902. %<*nflucbrb>
  1903. % this is for Berry-type font names
  1904. \immediate\write\sixt@@n{File: `nflucbrb.sty'}
  1905. \renewcommand{\sfdefault}{hlcs}
  1906. \renewcommand{\rmdefault}{hlc}
  1907. \renewcommand{\ttdefault}{hlct}
  1908. \def\bfdefault{b}
  1909. \def\encodingdefault{T1}% 
  1910. \fontencoding{T1}% 
  1911. % NOTE: all depends on the character encoding used in the plain text
  1912. % fonts! Whatever you set as \defaultencoding will determine the effect.
  1913. % If you use Y&Y's example tfm files, you may wish to change
  1914. % \Encoding here to be, eg, OT1, and \input stanacce.
  1915. % If you prefer `texannew' encoding in accents.tex, better
  1916. % define a new encoding scheme for NFSS2 and switch to that.
  1917. % new encoding scheme for Math Arrows font
  1918. \DeclareFontEncoding{MR}{}{}
  1919. \DeclareFontSubstitution{MR}{hlcm}{m}{n}
  1920. \DeclareSymbolFont{letters}{OML}{hlcm}{m}{it}
  1921. \DeclareSymbolFont{symbols}{OMS}{hlcm}{m}{n}
  1922. \DeclareSymbolFont{largesymbols}{OMX}{hlcm}{m}{n}
  1923. \SetSymbolFont{letters}{bold}{OML}{hlcm}{m}{it}%
  1924. % better get the order of this right, or maths come out as all arrows..
  1925. \DeclareSymbolFont{italics}{\encodingdefault}{\rmdefault}{m}{it}
  1926. \DeclareSymbolFont{arrows}{MR}{hlcm}{m}{n}
  1927. %</nflucbrb>
  1928. %<*nflucbry>
  1929. % this is for Y&Y font names
  1930. \immediate\write\sixt@@n{File: `nflucbry.sty'}
  1931. \renewcommand{\sfdefault}{lbs}
  1932. \renewcommand{\rmdefault}{lb}
  1933. \renewcommand{\ttdefault}{lbt}
  1934. \def\bfdefault{b}
  1935. \def\encodingdefault{OT1}% 
  1936. \fontencoding{OT1}% 
  1937. % NOTE: all depends on the character encoding used in the plain text
  1938. % fonts! Whatever you set as \defaultencoding will determine the effect.
  1939. % new encoding scheme for Math Arrows font
  1940. \DeclareFontEncoding{MR}{}{}
  1941. \DeclareFontSubstitution{MR}{hlcm}{m}{n}
  1942. \DeclareSymbolFont{letters}{OML}{lbm}{m}{it}
  1943. \DeclareSymbolFont{symbols}{OMS}{lbm}{m}{n}
  1944. \DeclareSymbolFont{largesymbols}{OMX}{lbm}{m}{n}
  1945. \SetSymbolFont{letters}{bold}{OML}{lbm}{m}{it}
  1946. % better get the order of this right, or maths come out as all arrows..
  1947. \DeclareSymbolFont{italics}{\encodingdefault}{\rmdefault}{m}{it}
  1948. \DeclareSymbolFont{arrows}{MR}{lbm}{m}{n}
  1949. %</nflucbry>
  1950. %<*lucidabright>
  1951. %--------------------------------------------------------------------
  1952. % allow for scaling of Lucida Bright. Tug93 used .94 to match space
  1953. % taken by CMR
  1954. \def\LucidaScale{1}
  1955. % Adjusted for LucidaNewMath-Extension at 9.5pt and math axis at 313
  1956. % Note: delimiter increments are 5.5pt (as opposed to 6pt in CM)
  1957. \def\Lucidasizes{%
  1958.   \def\@vpt{5.2}%
  1959.   \def\@vipt{6.1}%
  1960.   \def\@viipt{6.9}%
  1961.   \def\@viiipt{7.8}%
  1962.   \def\@ixpt{8.6}%
  1963.   \def\@xpt{9.5}%
  1964.   \def\@xipt{10.4}%
  1965.   \def\@xiipt{11.2}%
  1966.   \def\@xivpt{12.9}%
  1967.   \def\@xviipt{15.5}%
  1968.   \def\@xxpt{18.1}%
  1969.   \def\@xxvpt{22.4}%
  1970.  \define@mathsizes{5.2}{5.2}{5.2}
  1971.  \define@mathsizes{6.1}{5.2}{5.2}
  1972.  \define@mathsizes{6.9}{5.2}{5.2}
  1973.  \define@mathsizes{7.8}{6.1}{5.2}
  1974.  \define@mathsizes{8.6}{6.1}{5.2}
  1975.  \define@mathsizes{9.5}{6.9}{5.2}
  1976.  \define@mathsizes{10.95}{6.9}{5.2}
  1977.  \define@mathsizes{11.2}{7.8}{6.1}
  1978.  \define@mathsizes{12.9}{9.5}{6.9}
  1979.  \define@mathsizes{15.5}{11.2}{9.5}
  1980.  \define@mathsizes{18.1}{12.9}{11.2}
  1981.  \define@mathsizes{22.4}{18.1}{15.5}
  1982. \def\CMRsizes{%
  1983.  \def\@vpt{5}%
  1984.  \def\@vipt{6}%
  1985.  \def\@viipt{7}%
  1986.  \def\@viiipt{8}%
  1987.  \def\@ixpt{9}%
  1988.  \def\@xpt{10}%
  1989.  \def\@xipt{11}%
  1990.  \def\@xiipt{12}%
  1991.  \def\@xivpt{14}%
  1992.  \def\@xviipt{17}%
  1993.  \def\@xxpt{20}%
  1994.  \def\@xxvpt{25}%
  1995. \Lucidasizes
  1996. \DeclareSymbolFont{operators}{\encodingdefault}{\rmdefault}{m}{n}
  1997. \SetSymbolFont{operators}{bold}{\encodingdefault}{\rmdefault}{b}{n}%
  1998. \SetSymbolFont{operators}{normal}{\encodingdefault}{\rmdefault}{m}{n}%
  1999. \SetMathAlphabet{\mathbf}{normal}{\encodingdefault}{\rmdefault}{b}{n}%
  2000. \SetMathAlphabet{\mathsf}{normal}{\encodingdefault}{\sfdefault}{m}{n}%
  2001. \SetMathAlphabet{\mathrm}{normal}{\encodingdefault}{\rmdefault}{m}{n}%
  2002. \SetMathAlphabet{\mathbf}{bold}{\encodingdefault}{\rmdefault}{m}{n}%
  2003. \SetMathAlphabet{\mathsf}{bold}{\encodingdefault}{\sfdefault}{b}{n}%
  2004. \SetMathAlphabet{\mathrm}{bold}{\encodingdefault}{\rmdefault}{b}{n}%
  2005. \DeclareSymbolFontAlphabet{\lbit}{italics}
  2006. \DeclareSymbolFontAlphabet{\bbold}{arrows}
  2007. \DeclareMathAccent\acute{\mathalpha}{operators}{"01}
  2008. \DeclareMathAccent\grave{\mathalpha}{operators}{"00}
  2009. \DeclareMathAccent\ddot {\mathalpha}{operators}{"04}
  2010. \DeclareMathAccent\tilde{\mathalpha}{operators}{"03}
  2011. \DeclareMathAccent\bar  {\mathalpha}{operators}{"09}
  2012. \DeclareMathAccent\breve{\mathalpha}{operators}{"08}
  2013. \DeclareMathAccent\check{\mathalpha}{operators}{"07}
  2014. \DeclareMathAccent\hat  {\mathalpha}{operators}{"02}
  2015. \DeclareMathAccent\vec  {\mathord}{letters}{"7E}
  2016. \DeclareMathAccent\dot  {\mathalpha}{operators}{"0A}
  2017. % *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** 
  2018. %       This section derives mostly from lcdmacro.tex and amssymblb.tex
  2019. %       Copyright (C) 1991, 1992 Y&Y. All Rights Reserved
  2020. %               Version 1.2             1992 June 14
  2021. % *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** 
  2022. % Some modifications due to Bram de Jager
  2023. % *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** %
  2024. \expandafter\ifx\csname amsfonts.sty\endcsname\relax %MJD%
  2025. % %MJD% Then amsfonts.sty is not in use.
  2026.   \def\big#1{{\hbox{$\left#1\vbox to8.20\p@{}\right.\n@space$}}}
  2027.   \def\Big#1{{\hbox{$\left#1\vbox to10.80\p@{}\right.\n@space$}}}
  2028.   \def\bigg#1{{\hbox{$\left#1\vbox to13.42\p@{}\right.\n@space$}}}
  2029.   \def\Bigg#1{{\hbox{$\left#1\vbox to16.03\p@{}\right.\n@space$}}}
  2030.   \def\biggg#1{{\hbox{$\left#1\vbox to17.72\p@{}\right.\n@space$}}}
  2031.   \def\Biggg#1{{\hbox{$\left#1\vbox to21.25\p@{}\right.\n@space$}}}
  2032.   \def\n@space{\nulldelimiterspace\z@ \m@th}
  2033. \else %MJD%
  2034. % %MJD% It's possible the factors 1.5, 2, 2.5, 3, 3.5 should be adjusted
  2035. % %MJD% for Lucida fonts. But that has to be determined by looking at
  2036. % %MJD% printed tests which I cannot do at the moment. [mjd,24-Jun-1993]
  2037.   \def\biggg{\bBigg@\thr@@} %MJD%
  2038.   \def\Biggg{\bBigg@{3.5}} %MJD%
  2039. \fi %MJD%
  2040. % define some extra large sizes - always done using extensible parts
  2041. \def\bigggl{\mathopen\biggg}
  2042. \def\bigggr{\mathclose\biggg}
  2043. \def\Bigggl{\mathopen\Biggg}
  2044. \def\Bigggr{\mathclose\Biggg}
  2045. %  Following is only really needed if the roman text font is NOT LucidaBright
  2046. %  Draw the small sizes of `[' and `]' from math italic instead of roman font
  2047. \mathcode`\[="4186 \delcode`\[="186302 
  2048. \mathcode`\]="5187 \delcode`\]="187303
  2049. %  Draw the small sizes of `(' and `)' from math italic instead of roman font
  2050. \mathcode`\(="4184 \delcode`\(="184300
  2051. \mathcode`\)="5185 \delcode`\)="185301
  2052. %  Draw  `=' and `+' from symbol font instead of roman
  2053. \mathcode`\=="3283 
  2054. \mathcode`\+="2282
  2055. % Draw small `/' from math italic instead of roman font
  2056. \mathcode`\/="013D \delcode`\/="13D30E
  2057. % *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** %
  2058. % Make open face brackets accessible, i.e. [[ and ]]
  2059. \def\ldbrack{\delimiter"4182382}
  2060. \def\rdbrack{\delimiter"5183383}
  2061. % Provide access to surface integral signs (linked from text to display size)
  2062. \mathchardef\surfintop="1390 
  2063. \def\surfint{\surfintop\nolimits}
  2064. % Make medium size integrals available (NOT linked to display size)
  2065. \mathchardef\midintop="1392 \def\midint{\midintop\nolimits}
  2066. \mathchardef\midointop="1393 \def\midoint{\midointop\nolimits}
  2067. \mathchardef\midsurfintop="1394 \def\midsurfint{\midsurfintop\nolimits}
  2068. % Extensible integral (use with \bigg, \Bigg, \biggg, \Biggg etc)
  2069. \def\largeint{\delimiter"135A395}
  2070. % Various types of small integrals
  2071. % \mathchardef\dblint="0188
  2072. % \mathchardef\trplint="0189
  2073. % \mathchardef\contint="018A
  2074. % \mathchardef\surfint="018B
  2075. % \mathchardef\volint="018C
  2076. % \mathchardef\clwint="018D
  2077. % \mathchardef\cclwcint="018E
  2078. % \mathchardef\clwcint="018F
  2079. % *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** %
  2080. % To close up gaps in special math characters constructed from pieces
  2081. \def\joinrel{\mathrel{\mkern-4mu}} % \def\joinrel{\mathrel{\mkern-3mu}}
  2082. % Some characters that need construction in CM exist complete in math
  2083. % italic or math symbol font
  2084. \mathchardef\bowtie="31F6
  2085. \mathchardef\models="32EE
  2086. \mathchardef\doteq="32C9
  2087. \mathchardef\cong="329B
  2088. \mathchardef\angle="028B
  2089. % these need undefining so that we can redeclare them
  2090. \let\Box\undefined
  2091. \let\Diamond\undefined
  2092. \let\leadsto\undefined
  2093. \let\neq\undefined
  2094. \let\hookleftarrow\undefined
  2095. \let\hookrightarrow\undefined
  2096. \let\mapsto\undefined
  2097. \let\notin\undefined
  2098. \let\circle\undefined
  2099. \let\iff\undefined
  2100. \let\rightleftharpoons\undefined
  2101. % Other characters may be found in LucidaNewMath-Arrows (more negated later)
  2102. \DeclareMathSymbol{\neq}{3}{arrows}{"94}
  2103. \DeclareMathSymbol{\rightleftharpoons}{3}{arrows}{"7A}
  2104. \DeclareMathSymbol{\leftrightharpoons}{3}{arrows}{"79}
  2105. \DeclareMathSymbol{\hookleftarrow}{3}{arrows}{"3C}
  2106. \DeclareMathSymbol{\hookrightarrow}{3}{arrows}{"3E}
  2107. \DeclareMathSymbol{\mapsto}{3}{arrows}{"2C}
  2108. \def\longmapsto{\mapstochar\longrightarrow}
  2109. % *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** %
  2110. % SPECIAL LaTeX character definitions (originally from LaTeX symbol font)
  2111. \mathchardef\mho"0192
  2112. \mathchardef\Join"31F6
  2113. \mathchardef\sqsubset"32E4
  2114. \mathchardef\sqsupset"32E5
  2115. \mathchardef\rhd"312E
  2116. \mathchardef\lhd"312F
  2117. \mathchardef\unlhd"32F4
  2118. \mathchardef\unrhd"32F5
  2119. \DeclareMathSymbol{\Box}{0}{arrows}{"02} 
  2120. \DeclareMathSymbol{\Diamond}{0}{arrows}{"08}
  2121. \DeclareMathSymbol{\leadsto}{3}{arrows}{"8E} 
  2122. \DeclareMathSymbol{\leadsfrom}{3}{arrows}{"8D}
  2123. \def\mathstrut{\vphantom{f}}
  2124. \expandafter\ifx\csname amstex.sty\endcsname\relax %MJD%
  2125. % %MJD% Then amstex.sty not in use: modify \matrix it to adjust the
  2126. % %MJD% first and last line vertical spacing slightly; otherwise leave
  2127. % %MJD% it alone.
  2128. % following changed because fonts (i.e. math italic) not `at full scale'
  2129.   \def\matrix#1{\null\,\vcenter{\normalbaselines\m@th
  2130.     \ialign{\hfil$##$\hfil&&\quad\hfil$##$\hfil\crcr
  2131.       \mathstrut\crcr\noalign{\kern-0.9\baselineskip}
  2132.      #1\crcr\mathstrut\crcr\noalign{\kern-0.9\baselineskip}}}\,}
  2133. \fi %MJD%
  2134. % In n-th root, don't want the `n' to come too close to the radical
  2135. \def\r@@t#1#2{\setbox\z@\hbox{$\m@th#1\sqrt{#2}$}
  2136.   \dimen@\ht\z@ \advance\dimen@-\dp\z@
  2137.   \mkern5mu\raise.6\dimen@\copy\rootbox \mkern-7.5mu \box\z@}
  2138. % The following are the standard plain TeX defaults for CM
  2139. % \delimiterfactor=901
  2140. % \delimitershortfall=5pt
  2141. % \nulldelimiterspace=1.2pt
  2142. % \scriptspace=0.5pt
  2143. % \thinmuskip=3mu
  2144. % \medmuskip=4mu plus 2mu minus 4mu
  2145. % \thickmuskip=5mu plus 5mu
  2146. % Here are some extra definitions of mathematical symbols and operators
  2147. % {\buildrel \rm def \over =}
  2148. \mathchardef\defineequal"32D6
  2149. % Here are some negated operators from LucidaNewMath-Arrows:
  2150. \DeclareMathSymbol{\notleq}{3}{arrows}{"9C}
  2151. \DeclareMathSymbol{\notgeq}{3}{arrows}{"9D}
  2152. \DeclareMathSymbol{\notequiv}{3}{arrows}{"95}
  2153. \DeclareMathSymbol{\notprec}{3}{arrows}{"E5}
  2154. \DeclareMathSymbol{\notsucc}{3}{arrows}{"E6}
  2155. \DeclareMathSymbol{\notapprox}{3}{arrows}{"98}
  2156. \DeclareMathSymbol{\notpreceq}{3}{arrows}{"E7}
  2157. \DeclareMathSymbol{\notsucceq}{3}{arrows}{"E8}
  2158. \DeclareMathSymbol{\notasymp}{3}{arrows}{"F3}
  2159. \DeclareMathSymbol{\notsubset}{3}{arrows}{"C6}
  2160. \DeclareMathSymbol{\notsupset}{3}{arrows}{"C7}
  2161. \DeclareMathSymbol{\notsim}{3}{arrows}{"96}
  2162. \DeclareMathSymbol{\notsubseteq}{3}{arrows}{"C8}
  2163. \DeclareMathSymbol{\notsupseteq}{3}{arrows}{"C9}
  2164. \DeclareMathSymbol{\notsimeq}{3}{arrows}{"97}
  2165. \DeclareMathSymbol{\notsqsubseteq}{3}{arrows}{"D4}
  2166. \DeclareMathSymbol{\notsqsupseteq}{3}{arrows}{"D5}
  2167. \DeclareMathSymbol{\notcong}{3}{arrows}{"99}
  2168. \DeclareMathSymbol{\notin}{3}{arrows}{"1D}
  2169. \DeclareMathSymbol{\notni}{3}{arrows}{"1F}
  2170. \DeclareMathSymbol{\notvdash}{3}{arrows}{"F8}
  2171. \DeclareMathSymbol{\notmodels}{3}{arrows}{"F9}
  2172. \DeclareMathSymbol{\notparallel}{3}{arrows}{"F7}
  2173. \DeclareMathSymbol{\noteq}{3}{arrows}{"94}
  2174. \DeclareMathSymbol{\notless}{3}{arrows}{"9A}
  2175. \DeclareMathSymbol{\notgreater}{3}{arrows}{"9B}
  2176. \DeclareMathSymbol{\notmid}{3}{arrows}{"F6}
  2177. % *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** %
  2178. % Now for some AMS TeX items
  2179. % Start with black-board bold (open face) characters
  2180. \expandafter\ifx\csname amsfonts.sty\endcsname\relax %MJD%
  2181. % %MJD% Then amsfonts.sty not in use.
  2182.   \def\nonmatherr@#1{\errmessage{\string#1\space allowed only in math mode}}
  2183.   \def\Bbb{\relax\ifmmode\expandafter\Bbb@\else
  2184.    \expandafter\nonmatherr@\expandafter\Bbb\fi}
  2185. \fi %MJD%
  2186. \let\Bbb@\bbold
  2187. % \DeclareMathSymbol{\Bbbk}{0}{arrows}{"6B}
  2188. % lplain.tex draws upper case (upright) greek from cmr10 ---
  2189. % when using the Cork encoding, that isn't there, so its been put
  2190. % in the extension font (largesymbols)
  2191. \DeclareMathSymbol{\Gamma}{0}{largesymbols}{'320}
  2192. \DeclareMathSymbol{\Delta}{0}{largesymbols}{'321}
  2193. \DeclareMathSymbol{\Theta}{0}{largesymbols}{'322}
  2194. \DeclareMathSymbol{\Lambda}{0}{largesymbols}{'323}
  2195. \DeclareMathSymbol{\Xi}{0}{largesymbols}{'324}
  2196. \DeclareMathSymbol{\Pi}{0}{largesymbols}{'325}
  2197. \DeclareMathSymbol{\Sigma}{0}{largesymbols}{'326}
  2198. \DeclareMathSymbol{\Upsilon}{0}{largesymbols}{'327}
  2199. \DeclareMathSymbol{\Phi}{0}{largesymbols}{'330}
  2200. \DeclareMathSymbol{\Psi}{0}{largesymbols}{'331}
  2201. \DeclareMathSymbol{\Omega}{0}{largesymbols}{'332}
  2202. \mathchardef\varGamma="0100
  2203. \mathchardef\varDelta="0101
  2204. \mathchardef\varTheta="0102
  2205. \mathchardef\varLambda="0103
  2206. \mathchardef\varXi="0104
  2207. \mathchardef\varPi="0105
  2208. \mathchardef\varSigma="0106
  2209. \mathchardef\varUpsilon="0107
  2210. \mathchardef\varPhi="0108
  2211. \mathchardef\varPsi="0109
  2212. \mathchardef\varOmega="010A
  2213. % Definitions for math symbols and operators 
  2214. %  --- normally found in the fonts MSAM* and MSBM* ---
  2215. %  using LucidaNewMath fonts 
  2216. %  Definitions followed by question marks represent less than ideal matches.
  2217. % MSAM* equivalents
  2218. \mathchardef\boxdot="22ED
  2219. \mathchardef\boxplus="22EA
  2220. \mathchardef\boxtimes="22EC
  2221. \DeclareMathSymbol{\square}{0}{arrows}{"02}
  2222. \DeclareMathSymbol{\blacksquare}{0}{arrows}{"03}
  2223. %\DeclareMathSymbol{\circle}{0}{arrows}{"00}
  2224. %\DeclareMathSymbol{\blackcircle}{0}{arrows}{"01}
  2225. \DeclareMathSymbol{\centerdot}{2}{arrows}{"E1}
  2226. \DeclareMathSymbol{\lozenge}{0}{arrows}{"08}
  2227. \DeclareMathSymbol{\blacklozenge}{0}{arrows}{"09}
  2228. \DeclareMathSymbol{\circlearrowright}{3}{arrows}{"8C}
  2229. \DeclareMathSymbol{\circlearrowleft}{3}{arrows}{"8B}
  2230. \DeclareMathSymbol{\rightleftharpoons}{3}{arrows}{"7A}
  2231. \DeclareMathSymbol{\leftrightharpoons}{3}{arrows}{"79}
  2232. \mathchardef\boxminus="22EB
  2233. \mathchardef\Vdash="32F0
  2234. \mathchardef\Vvdash="31D3
  2235. \mathchardef\vDash="32EE
  2236. \DeclareMathSymbol{\twoheadrightarrow}{3}{arrows}{"25}
  2237. \DeclareMathSymbol{\twoheadleftarrow}{3}{arrows}{"23}
  2238. \DeclareMathSymbol{\leftleftarrows}{3}{arrows}{"71}
  2239. \DeclareMathSymbol{\rightrightarrows}{3}{arrows}{"73}
  2240. \DeclareMathSymbol{\upuparrows}{3}{arrows}{"72}
  2241. \DeclareMathSymbol{\downdownarrows}{3}{arrows}{"74}
  2242. \DeclareMathSymbol{\upharpoonright}{3}{arrows}{"75}
  2243. \DeclareMathSymbol{\downharpoonright}{3}{arrows}{"77}
  2244. \DeclareMathSymbol{\upharpoonleft}{3}{arrows}{"76}
  2245. \DeclareMathSymbol{\downharpoonleft}{3}{arrows}{"78}
  2246. \DeclareMathSymbol{\rightarrowtail}{3}{arrows}{"29}
  2247. \DeclareMathSymbol{\leftarrowtail}{3}{arrows}{"28}
  2248. \DeclareMathSymbol{\leftrightarrows}{3}{arrows}{"6E}
  2249. \DeclareMathSymbol{\rightleftarrows}{3}{arrows}{"6D}
  2250. \DeclareMathSymbol{\Lsh}{3}{arrows}{"7B}
  2251. \DeclareMathSymbol{\Rsh}{3}{arrows}{"7D}
  2252. \DeclareMathSymbol{\rightsquigarrow}{3}{arrows}{"8E}
  2253. \DeclareMathSymbol{\leftsquigarrow}{3}{arrows}{"8D}
  2254. \DeclareMathSymbol{\leftrightsquigarrow}{3}{arrows}{"91}
  2255. \DeclareMathSymbol{\looparrowleft}{3}{arrows}{"3F}
  2256. \DeclareMathSymbol{\looparrowright}{3}{arrows}{"40}
  2257. \mathchardef\circeq="32D0
  2258. \mathchardef\succsim="32E1
  2259. \mathchardef\gtrsim="32DD
  2260. \mathchardef\gtrapprox="31DB
  2261. \mathchardef\multimap="31C7
  2262. \mathchardef\image="31C6
  2263. \mathchardef\original="31C5
  2264. \mathchardef\therefore="3290
  2265. \mathchardef\because="3291
  2266. \mathchardef\doteqdot="32CA
  2267. \mathchardef\triangleq="32D5
  2268. \mathchardef\precsim="32E0
  2269. \mathchardef\lesssim="32DC
  2270. \mathchardef\lessapprox="31DA
  2271. \mathchardef\eqslantless="31E2
  2272. \mathchardef\eqslantgtr="31E3
  2273. \mathchardef\curlyeqprec="31E6
  2274. \mathchardef\curlyeqsucc="31E7
  2275. \mathchardef\preccurlyeq="31E4
  2276. \mathchardef\leqq="32DA
  2277. \mathchardef\leqslant="31E0
  2278. \mathchardef\lessgtr="32DE
  2279. \mathchardef\backprime="01C8
  2280. \DeclareMathSymbol{\axisshort}{0}{arrows}{"39}
  2281. \mathchardef\risingdotseq="32CC
  2282. \mathchardef\fallingdotseq="32CB
  2283. \mathchardef\succcurlyeq="31E5
  2284. \mathchardef\geqq="32DB
  2285. \mathchardef\geqslant="31E1
  2286. \mathchardef\gtrless="32DF
  2287. \mathchardef\sqsubset="32E4
  2288. \mathchardef\sqsupset="32E5
  2289. \mathchardef\vartriangleright="312E
  2290. \mathchardef\vartriangleleft="312F
  2291. \mathchardef\trianglerighteq="32F5
  2292. \mathchardef\trianglelefteq="32F4
  2293. \DeclareMathSymbol{\bigstar}{0}{arrows}{"AB}
  2294. \mathchardef\between="31F2
  2295. \DeclareMathSymbol{\blacktriangledown}{0}{arrows}{"07}
  2296. \mathchardef\blacktriangleright="31F1
  2297. \mathchardef\blacktriangleleft="31F0
  2298. \DeclareMathSymbol{\arrowaxisright}{0}{arrows}{"37}
  2299. \DeclareMathSymbol{\arrowaxisleft}{0}{arrows}{"36}
  2300. \DeclareMathSymbol{\vartriangle}{3}{arrows}{"04}
  2301. \DeclareMathSymbol{\blacktriangle}{0}{arrows}{"05}
  2302. \DeclareMathSymbol{\triangledown}{0}{arrows}{"06}
  2303. \mathchardef\eqcirc="32CF
  2304. \mathchardef\lesseqgtr="31E8
  2305. \mathchardef\gtreqless="31E9
  2306. \mathchardef\lesseqqgtr="31EA
  2307. \mathchardef\gtreqqless="31EB
  2308. \DeclareMathSymbol{\Rrightarrow}{3}{arrows}{"6C}
  2309. \DeclareMathSymbol{\Lleftarrow}{3}{arrows}{"6A}
  2310. \mathchardef\veebar="21D2
  2311. \mathchardef\barwedge="22F6
  2312. \mathchardef\angle="028B
  2313. \mathchardef\measuredangle="028C
  2314. \mathchardef\sphericalangle="028D
  2315. \mathchardef\varpropto="322F % ?
  2316. \mathchardef\smallsmile="315E % ? 
  2317. \mathchardef\smallfrown="315F % ?       
  2318. \mathchardef\Subset="32F8
  2319. \mathchardef\Supset="32F9
  2320. \mathchardef\Cup="22FA
  2321. \mathchardef\Cap="22FB
  2322. \mathchardef\curlywedge="2284
  2323. \mathchardef\curlyvee="2285
  2324. \mathchardef\leftthreetimes="21D0
  2325. \mathchardef\rightthreetimes="21D1
  2326. \mathchardef\subseteqq="31EE
  2327. \mathchardef\supseteqq="31EF
  2328. \mathchardef\bumpeq="32C8
  2329. \mathchardef\Bumpeq="32C7
  2330. \mathchardef\lll="31DE
  2331. \mathchardef\ggg="31DF
  2332. \mathchardef\circledS="01CA
  2333. \mathchardef\pitchfork="31F3
  2334. \mathchardef\dotplus="2289
  2335. \mathchardef\backsim="31F8
  2336. \mathchardef\backsimeq="31F9
  2337. \mathchardef\complement="0194
  2338. \mathchardef\intercal="21D9
  2339. \mathchardef\circledcirc="22E6
  2340. \mathchardef\circledast="22E7
  2341. \mathchardef\circleddash="21CC
  2342. % MSBM* equivalents
  2343. \DeclareMathSymbol{\lvertneqq}{3}{arrows}{"DE}
  2344. \DeclareMathSymbol{\gvertneqq}{3}{arrows}{"DF}
  2345. \DeclareMathSymbol{\nleq}{3}{arrows}{"9C}
  2346. \DeclareMathSymbol{\ngeq}{3}{arrows}{"9D}
  2347. \DeclareMathSymbol{\nless}{3}{arrows}{"9A}
  2348. \DeclareMathSymbol{\ngtr}{3}{arrows}{"9B}
  2349. \DeclareMathSymbol{\nprec}{3}{arrows}{"E5}
  2350. \DeclareMathSymbol{\nsucc}{3}{arrows}{"E6}
  2351. \DeclareMathSymbol{\lneqq}{3}{arrows}{"DC}
  2352. \DeclareMathSymbol{\gneqq}{3}{arrows}{"DD}
  2353. \DeclareMathSymbol{\nleqslant}{3}{arrows}{"D6}
  2354. \DeclareMathSymbol{\ngeqslant}{3}{arrows}{"D7}
  2355. \DeclareMathSymbol{\lneq}{3}{arrows}{"DA}
  2356. \DeclareMathSymbol{\gneq}{3}{arrows}{"DB}
  2357. \DeclareMathSymbol{\npreceq}{3}{arrows}{"E7}
  2358. \DeclareMathSymbol{\nsucceq}{3}{arrows}{"E8}
  2359. \DeclareMathSymbol{\precnsim}{3}{arrows}{"EB}
  2360. \DeclareMathSymbol{\succnsim}{3}{arrows}{"EC}
  2361. \DeclareMathSymbol{\lnsim}{3}{arrows}{"E0}
  2362. \DeclareMathSymbol{\gnsim}{3}{arrows}{"E2}
  2363. \DeclareMathSymbol{\nleqq}{3}{arrows}{"D8}
  2364. \DeclareMathSymbol{\ngeqq}{3}{arrows}{"D9}
  2365. \DeclareMathSymbol{\precneqq}{3}{arrows}{"E9}
  2366. \DeclareMathSymbol{\succneqq}{3}{arrows}{"EA}
  2367. \DeclareMathSymbol{\precnapprox}{3}{arrows}{"ED}
  2368. \DeclareMathSymbol{\succnapprox}{3}{arrows}{"EE}
  2369. \DeclareMathSymbol{\lnapprox}{3}{arrows}{"E3}
  2370. \DeclareMathSymbol{\gnapprox}{3}{arrows}{"E4}
  2371. \DeclareMathSymbol{\nsim}{3}{arrows}{"96}
  2372. \DeclareMathSymbol{\ncong}{3}{arrows}{"99}
  2373. \DeclareMathSymbol{\diagup}{3}{arrows}{"0B}
  2374. \DeclareMathSymbol{\diagdown}{3}{arrows}{"0C}
  2375. \DeclareMathSymbol{\varsubsetneq}{3}{arrows}{"D0}
  2376. \DeclareMathSymbol{\varsupsetneq}{3}{arrows}{"D1}
  2377. \DeclareMathSymbol{\nsubseteqq}{3}{arrows}{"CA}
  2378. \DeclareMathSymbol{\nsupseteqq}{3}{arrows}{"CB}
  2379. \DeclareMathSymbol{\subsetneqq}{3}{arrows}{"CE}
  2380. \DeclareMathSymbol{\supsetneqq}{3}{arrows}{"CF}
  2381. \DeclareMathSymbol{\varsubsetneqq}{3}{arrows}{"D2}
  2382. \DeclareMathSymbol{\varsupsetneqq}{3}{arrows}{"D3}
  2383. \DeclareMathSymbol{\subsetneq}{3}{arrows}{"CC}
  2384. \DeclareMathSymbol{\supsetneq}{3}{arrows}{"CD}
  2385. \DeclareMathSymbol{\nsubseteq}{3}{arrows}{"C8}
  2386. \DeclareMathSymbol{\nsupseteq}{3}{arrows}{"C9}
  2387. \DeclareMathSymbol{\nparallel}{3}{arrows}{"F7}
  2388. \DeclareMathSymbol{\nmid}{3}{arrows}{"F6}
  2389. \DeclareMathSymbol{\nshortmid}{3}{arrows}{"F4}
  2390. \DeclareMathSymbol{\nshortparallel}{3}{arrows}{"F5}
  2391. \DeclareMathSymbol{\nvdash}{3}{arrows}{"F8}
  2392. \DeclareMathSymbol{\nVdash}{3}{arrows}{"FA}
  2393. \DeclareMathSymbol{\nvDash}{3}{arrows}{"F9}
  2394. \DeclareMathSymbol{\nVDash}{3}{arrows}{"FB}
  2395. \DeclareMathSymbol{\ntrianglerighteq}{3}{arrows}{"F2}
  2396. \DeclareMathSymbol{\ntrianglelefteq}{3}{arrows}{"F1}
  2397. \DeclareMathSymbol{\ntriangleleft}{3}{arrows}{"EF}
  2398. \DeclareMathSymbol{\ntriangleright}{3}{arrows}{"F0}
  2399. \DeclareMathSymbol{\nleftarrow}{3}{arrows}{"32}
  2400. \DeclareMathSymbol{\nrightarrow}{3}{arrows}{"33}
  2401. \DeclareMathSymbol{\nLeftarrow}{3}{arrows}{"66}
  2402. \DeclareMathSymbol{\nRightarrow}{3}{arrows}{"68}
  2403. \DeclareMathSymbol{\nLeftrightarrow}{3}{arrows}{"67}
  2404. \DeclareMathSymbol{\nleftrightarrow}{3}{arrows}{"34}
  2405. \mathchardef\divideontimes="21F7
  2406. % \mathchardef\varnothing="023B
  2407. \mathchardef\varnothing="019C
  2408. \DeclareMathSymbol{\nexists}{0}{arrows}{"20}
  2409. \mathchardef\Finv="0190
  2410. \mathchardef\Game="0191
  2411. \mathchardef\mho="0192
  2412. \mathchardef\simeq="329A
  2413. \mathchardef\eqsim="3299
  2414. \mathchardef\beth="0195
  2415. \mathchardef\gimel="0196
  2416. \mathchardef\daleth="0197
  2417. \mathchardef\lessdot="31DC
  2418. \mathchardef\gtrdot="31DD
  2419. \mathchardef\ltimes="21CE
  2420. \mathchardef\rtimes="21CF
  2421. \mathchardef\shortmid="31F4
  2422. \mathchardef\shortparallel="31F5
  2423. \mathchardef\smallsetminus="21D8 % ?
  2424. \mathchardef\thicksim="3218 % ?
  2425. \mathchardef\thickapprox="3219 % ?      
  2426. \mathchardef\approxeq="329D
  2427. \mathchardef\succapprox="31ED
  2428. \mathchardef\precapprox="31EC
  2429. \DeclareMathSymbol{\curvearrowleft}{3}{arrows}{"87}
  2430. \DeclareMathSymbol{\curvearrowright}{3}{arrows}{"88}
  2431. \mathchardef\digamma="0146 % ?
  2432. \mathchardef\varkappa="019B
  2433. \DeclareMathSymbol{\Bbbk}{0}{arrows}{"6B}
  2434. \mathchardef\hslash="019D
  2435. \DeclareMathSymbol{\hbar}{0}{arrows}{"1B}
  2436. \mathchardef\backepsilon="31FB % ?
  2437. \DeclareMathSymbol{\dashrightarrow}{0}{arrows}{"3A}
  2438. \DeclareMathSymbol{\dashleftarrow}{0}{arrows}{"38}
  2439. \DeclareMathSymbol{\dashuparrow}{0}{arrows}{"39}
  2440. \DeclareMathSymbol{\dashdownarrow}{0}{arrows}{"3B}
  2441. \DeclareMathDelimiter\ulcorner{4}{arrows}{"70}{arrows}{"70}
  2442. \DeclareMathDelimiter\urcorner{5}{arrows}{"71}{arrows}{"71}
  2443. \DeclareMathDelimiter\llcorner{4}{arrows}{"78}{arrows}{"78}
  2444. \DeclareMathDelimiter\lrcorner{5}{arrows}{"79}{arrows}{"79}
  2445. % Following only to define \mathhexbox for \checkmark, \circledR, \maltese
  2446. \expandafter\ifx\csname amstext.sty\endcsname\relax %MJD%
  2447. % %MJD% then amstext.sty not in use. OK to redefine \text.
  2448.   \def\RIfM@{\relax\ifmmode}
  2449.   \def\DN@{\def\next@}
  2450.   \def\eat@#1{}
  2451.   \newif\iffirstchoice@
  2452.   \firstchoice@true
  2453.   \def\text@#1{\mathchoice
  2454.    {\hbox{\everymath{\displaystyle}\def\textfonti{\the\textfont\@ne}%
  2455.     \def\textfontii{\the\textfont\tw@}\textdef@@ T#1}}
  2456.    {\hbox{\firstchoice@false
  2457.     \everymath{\textstyle}\def\textfonti{\the\textfont\@ne}%
  2458.     \def\textfontii{\the\textfont\tw@}\textdef@@ T#1}}
  2459.    {\hbox{\firstchoice@false
  2460.     \everymath{\scriptstyle}\def\textfonti{\the\scriptfont\@ne}%
  2461.     \def\textfontii{\the\scriptfont\tw@}\textdef@@ S\rm#1}}
  2462.    {\hbox{\firstchoice@false
  2463.     \everymath{\scriptscriptstyle}\def\textfonti
  2464.     {\the\scriptscriptfont\@ne}%
  2465.     \def\textfontii{\the\scriptscriptfont\tw@}\textdef@@ s\rm#1}}}
  2466.   \def\textdef@@#1{\textdef@#1\rm\textdef@#1\bf\textdef@#1\sl\textdef@#1\it}
  2467.   \def\text@@#1{\leavevmode\hbox{#1}}
  2468.   \def\rmfam{0}
  2469.   \def\textdef@#1#2{%
  2470.    \DN@{\csname\expandafter\eat@\string#2fam\endcsname}%
  2471.    \if S#1\edef#2{\the\scriptfont\next@\relax}%
  2472.    \else\if s#1\edef#2{\the\scriptscriptfont\next@\relax}%
  2473.    \else\edef#2{\the\textfont\next@\relax}\fi\fi}
  2474.   \def\text{\RIfM@\expandafter\text@\else\expandafter\text@@\fi}
  2475.   \def\mathhexbox@#1#2#3{\text{$\m@th\mathchar"#1#2#3$}}
  2476. \fi %MJD%
  2477. \xdef\checkmark{\noexpand\mathhexbox\hexnumber@\symarrows 58 }
  2478. \def\lmathhexbox#1#2#3{\leavevmode
  2479.   \hbox{$\m@th \mathchar"#1#2#3$}}
  2480. \def \circledR  {\lmathhexbox1C9 }
  2481. \def \maltese   {\lmathhexbox1CB }
  2482. % Note that plain TeX has the accent character positions hardwired to:
  2483. % 16 for `dotlessi', 17 for `dotlessj', 
  2484. % 18 for `grave', 19 for `acute', 20 for `caron', 
  2485. % 21 for `breve', 22 for `macron', 
  2486. % 23 for `ring', 24 for `cedilla',
  2487. % 25 for `germandbls', 26 for `ae', 27 for `oe', 
  2488. % 28 for `oslash', 29 for `AE', 30 for 'OE', 31 for `Oslash',
  2489. % 94 for `circumflex', 95 for `dotaccent', 125 for `hungarumlaut',
  2490. % 126 for `tilde', 127 for `dieresis',
  2491. % (see page 356 of the TeX book, and plain.tex for additional information)
  2492. % These may need to be adjusted - if these characters are to be used -
  2493. % AND if the text fonts are encoded to something other than TeX text.
  2494. % For an example of how to do this, see the file accents.tex.
  2495. % changes to lplain. i dont like 22C, so:
  2496. \let\Leftrightarrow\undefined
  2497. \DeclareMathSymbol{\Leftrightarrow}{3}{arrows}{"61}
  2498. %</lucidabright>
  2499. %    \end{macrocode}
  2500. % \Finale
  2501. \endinput
  2502.