on master help sign in
Set up .bib
bbb978bEdwin Brady
impl-paper/Makefile+5−2
@@ -1,6 +1,6 @@
1PAPER = impldtp
1PAPER = impldtp
2
2
3−all: ${PAPER}.pdf
3+all: ${PAPER}.pdf .PHONY
4
4
5TEXFILES = ${PAPER}.tex intro.tex conclusions.tex overview.tex hll.tex\
5TEXFILES = ${PAPER}.tex intro.tex conclusions.tex overview.tex hll.tex\
6 typechecking.tex proofstate.tex elaboration.tex compiling.tex\
6 typechecking.tex proofstate.tex elaboration.tex compiling.tex\
@@ -8,7 +8,10 @@ TEXFILES = ${PAPER}.tex intro.tex conclusions.tex overview.tex hll.tex\
8
8
9DIAGS =
9DIAGS =
10
10
11−SOURCES = ${TEXFILES} ${DIAGS} macros.ltx literature.bib
11+SOURCES = ${TEXFILES} ${DIAGS} macros.ltx library.bib
12+
13+library.bib: .PHONY
14+ cp ~/Research/Papers/library.bib .
12
15
13DITAA = java -jar ~/Downloads/ditaa.jar
16DITAA = java -jar ~/Downloads/ditaa.jar
14
17
impl-paper/conclusions.tex+3−3
@@ -1,8 +1,8 @@
1\section{Related Work}
1\section{Related Work}
2
2
3−Oleg~\cite{mcbride-thesis} as inspiration. \Epigram{}~\cite{view-left}.
3+Oleg~\cite{McBride1999} as inspiration. \Epigram{}~\cite{McBride2004a}.
4−How does Agda~\cite{norell-thesis} work?
4+How does Agda~\cite{norell2007thesis} work?
5−Earlier \Idris{}, with \Ivor{}~\cite{ivor}.
5+Earlier \Idris{}, with \Ivor{}~\cite{Brady2006b}.
6
6
7Comparison with GHC's type system and type checker.
7Comparison with GHC's type system and type checker.
8
8
impl-paper/impldtp.tex+28−22
@@ -1,5 +1,5 @@
1−%\documentclass{llncs}
1+\documentclass{jfp1}
2−\documentclass[acmtoplas]{acmtrans2m}
2+%\documentclass[acmtoplas]{acmtrans2m}
3
3
4\usepackage[draft]{comments}
4\usepackage[draft]{comments}
5%\usepackage[final]{comments}
5%\usepackage[final]{comments}
@@ -8,9 +8,9 @@
8\newcommand{\ebcomment}[1]{\comment{EB}{#1}}
8\newcommand{\ebcomment}[1]{\comment{EB}{#1}}
9
9
10\usepackage{epsfig}
10\usepackage{epsfig}
11−\usepackage{path}
11+%\usepackage{path}
12\usepackage{url}
12\usepackage{url}
13−\usepackage{amsmath,amssymb}
13+%\usepackage{amsmath,amssymb}
14\usepackage{fancyvrb}
14\usepackage{fancyvrb}
15
15
16\newenvironment{template}{\sffamily}
16\newenvironment{template}{\sffamily}
@@ -48,11 +48,19 @@
48}
48}
49\newcommand{\hdecl}[1]{\texttt{#1}}
49\newcommand{\hdecl}[1]{\texttt{#1}}
50
50
51−\markboth{Edwin C. Brady}{Implementation of a Practical Dependently
51+
52− Typed Functional Programming Language}
52+\title[Implementation of a Practical Functional Language with Dependent Types]
53−\title{Implementation of a Practical Dependently Typed Functional
53+ {Implementation of a Practical Functional Programming Language with Dependent Types}
54− Programming Language}
54+%\subtitle{Implementing Domain Specific Languages by Overloading}
55+
56+\author[Edwin Brady]
57+{EDWIN BRADY\\
55−\author{EDWIN C. BRADY\\ University of St Andrews}
58+School of Computer Science, University of St Andrews, St Andrews,
59+KY16 9SX, UK}
60+
61+\begin{document}
62+
63+\maketitle
56
64
57\begin{abstract}
65\begin{abstract}
58I describe the implementation of a dependently typed functional
66I describe the implementation of a dependently typed functional
@@ -65,19 +73,17 @@ concrete syntax with implicit arguments into fully elaborated type
65theory, using unification and a tactic engine.
73theory, using unification and a tactic engine.
66\end{abstract}
74\end{abstract}
67
75
68−\category{D.3.2}{Programming Languages}{Language
76+%\category{D.3.2}{Programming Languages}{Language
69− Classifications}[Applicative (functional) Languages]
77+% Classifications}[Applicative (functional) Languages]
70−\category{D.3.4}{Programming Languages}{Processors}[Compilers]
78+%\category{D.3.4}{Programming Languages}{Processors}[Compilers]
71−\terms{Languages, Verification, Performance}
79+%\terms{Languages, Verification, Performance}
72−\keywords{Dependent Types, Typechecking}
80+%\keywords{Dependent Types, Typechecking}
73
81
74−\begin{document}
75
82
76−\begin{bottomstuff}
83+%\begin{bottomstuff}
77−Author's address: Edwin Brady, School of Computer Science, North Haugh, St Andrews,
84+%Author's address: Edwin Brady, School of Computer Science, North Haugh, St Andrews,
78−KY16 9SX
85+%KY16 9SX
79−\end{bottomstuff}
86+%\end{bottomstuff}
80−\maketitle
81
87
82\input{intro.tex}
88\input{intro.tex}
83
89
@@ -97,8 +103,8 @@ KY16 9SX
97
103
98\input{conclusions.tex}
104\input{conclusions.tex}
99
105
100−\bibliographystyle{acmtrans}
106+\bibliographystyle{jfp}
101−\bibliography{literature.bib}
107+\bibliography{library.bib}
102
108
103\appendix
109\appendix
104
110
impl-paper/intro.tex+4−4
@@ -1,20 +1,20 @@
1\section{Introduction}
1\section{Introduction}
2
2
3−This paper documents a new implementation of \Idris{}~\cite{plpv11}, in which
3+This paper documents a new implementation of \Idris{}~\cite{Brady2011a}, in which
4I attempt to learn from the mistakes of the previous implementation and make
4I attempt to learn from the mistakes of the previous implementation and make
5it nice and clean and solid. Maybe I'll keep it up to date as I write the
5it nice and clean and solid. Maybe I'll keep it up to date as I write the
6code.
6code.
7
7
8The title is deliberately a reordering of the words in my thesis
8The title is deliberately a reordering of the words in my thesis
9−title~\cite{brady-thesis}. Whereas that was about taking elaborated programs
9+title~\cite{Brady2005}. Whereas that was about taking elaborated programs
10−in the core type theory of \Epigram{}~\cite{view-left} and compiling them
10+in the core type theory of \Epigram{}~\cite{McBride2004a} and compiling them
11efficiently (i.e. making the language implementation practical) this paper is
11efficiently (i.e. making the language implementation practical) this paper is
12about making the language itself practical.
12about making the language itself practical.
13
13
14\subsection{Some Goals}
14\subsection{Some Goals}
15
15
16\begin{itemize}
16\begin{itemize}
17−\item Type checking dependent types~\cite{epireloaded,lambdapi} is just one component
17+\item Type checking dependent types~\cite{Chapman2005epigram,loh2010tutorial} is just one component
18 of a language. There is folklore about what to do to turn it into a language. This
18 of a language. There is folklore about what to do to turn it into a language. This
19 paper aims to help language implementers avoid working things out for themselves.
19 paper aims to help language implementers avoid working things out for themselves.
20\item What's the difference between a theorem prover and a practical systems programming
20\item What's the difference between a theorem prover and a practical systems programming
impl-paper/jfp.bstnew file+1316
@@ -0,0 +1,1316 @@
1+% CUP Journal of Functional Programming bibliography style
2+% v1.0, released 22nd May 1995
3+% Copyright 1994,1995 Cambridge University Press
4+
5+% This BibTeX 0.99 style file is intended for documents that use the
6+% author-date citation system. It should be used in conjunction with the
7+% authordate1-4.sty (or equivalent) LaTeX style-option.
8+%
9+% In deciding on the bibliography layout to be implemented, the following
10+% works have been consulted:
11+% 1. British Standard 5605: "Citing publications by bibliographic
12+% references", 1978.
13+% 2. British Standard 1629: "Bibliographic references", 1976.
14+% (Note: There is now a 1989 edition.)
15+% 3. "Copy-editing" by Judith Butcher, Cambridge University Press, 1981.
16+% 4. "The Oxford Dictionary for Writers and Editors", Oxford University
17+% Press, 1981 (for abbreviations).
18+% 5. "The Chicago Manual of Style", Chicago University Press, 1982.
19+%
20+% Discretion has been used in certain matters. In particular:
21+% - Titles are italic except when there is a "contribution title" and
22+% a "main publication title", in which case the "contribution title"
23+% is roman while the "main publication title" is italic.
24+% - When there is a PUBLISHER, it is assumed that ADDRESS contains "place of
25+% publication"; output is of the form "place-of-publication: publisher".
26+% When there is an ORGANIZATION as well as a PUBLISHER, output is of the
27+% form "place-of-publication: publisher, for organization". Otherwise,
28+% it is assumed that ADDRESS is a postal address, and output is of the
29+% form "institution, address", "organization, address", "school, address"
30+% or "howpublished, address".
31+% - If there is a MONTH but no VOLUME or NUMBER for a journal-article, the
32+% MONTH is used on the assumption that it contains information that is
33+% equivalent to VOLUME or NUMBER. MONTH is ignored for other documents
34+% that have a PUBLISHER, but output after YEAR for anything else.
35+% - When CHAPTER and/or PAGES are specified with INBOOK, it is assumed that
36+% these fields are being used to pick out particular pages of interest
37+% (as an alternative to using the optional [...] argument of \cite);
38+% the information is put at the very end of the entry, in line with BS 1629.
39+% When CHAPTER and/or PAGES are specified for INCOLLECTION or INPROCEEDINGS,
40+% it is assumed that the fields are being used to specify the location of
41+% the part/article of interest; the information is put before the
42+% BOOKTITLE, in line with Chicago's treatment of "parts" and "chapters".
43+% - Since "volume" can be used in various ways (see page 219 of Butcher),
44+% this file assumes that, when there is a SERIES, any VOLUME and NUMBER
45+% refer to position in the SERIES (i.e. Butcher's meaning 4).
46+% If there is a VOLUME but no SERIES, it is assumed that VOLUME refers
47+% to a volume within a particular work (i.e. Butcher's meaning 1, 2 or 3).
48+% For INPROCEEDINGS and INCOLLECTION, this information goes after the
49+% BOOKTITLE. (If you prefer to have volume information before EDITOR,
50+% as on page 449 of Chicago, you can set TYPE = "Vol." with INCOLLECTION.)
51+%
52+% This file differs from authordate1.bst, authordate3.bst and
53+% authordate4.bst in that:
54+% - Titles of journals, articles and boooks are "downstyle". Apart from the
55+% first character, and the first character following : and white space,
56+% uppercase letters are converted to lowercase unless protected by {}.
57+% - Author's and editor's names are in roman.
58+%
59+% The combination of authordate2.bst and authordate1-4.sty allows citations
60+% of the form \shortcite{bloggs-60} as well as the usual \cite{bloggs-60}.
61+% When
62+% ... \cite{bloggs-60} ... \shortcite{bloggs-60} ...
63+% appears in the input file,
64+% ... (Bloggs, 1960) ... (1960) ...
65+% appears in the final document.
66+%
67+% This file was developed from apalike.bst. It also uses code taken from
68+% acm.bst, aaai-named.bst, btxbst.doc, ieeetr.bst and siam.bst.
69+%
70+% David Rhead
71+% Cripps Computing Centre
72+% Nottingham University
73+% March 1990
74+%
75+
76+ENTRY
77+ { address
78+ author
79+ booktitle
80+ chapter
81+ edition
82+ editor
83+ howpublished
84+ institution
85+ journal
86+ key
87+ month
88+ note
89+ number
90+ organization
91+ pages
92+ publisher
93+ school
94+ series
95+ title
96+ type
97+ volume
98+ year
99+ }
100+ {}
101+ { label extra.label sort.label }
102+
103+INTEGERS { output.state before.all mid.sentence after.sentence after.block }
104+
105+FUNCTION {init.state.consts}
106+{ #0 'before.all :=
107+ #1 'mid.sentence :=
108+ #2 'after.sentence :=
109+ #3 'after.block :=
110+}
111+
112+STRINGS { s t }
113+
114+FUNCTION {output.nonnull}
115+{ 's :=
116+ output.state mid.sentence =
117+ { ", " * write$ }
118+ { output.state after.block =
119+ { add.period$ write$
120+ newline$
121+ "\newblock " write$
122+ }
123+ { output.state before.all =
124+ 'write$
125+ { add.period$ " " * write$ }
126+ if$
127+ }
128+ if$
129+ mid.sentence 'output.state :=
130+ }
131+ if$
132+ s
133+}
134+
135+FUNCTION {output}
136+{ duplicate$ empty$
137+ 'pop$
138+ 'output.nonnull
139+ if$
140+}
141+
142+FUNCTION {output.check}
143+{ 't :=
144+ duplicate$ empty$
145+ { pop$ "empty " t * " in " * cite$ * warning$ }
146+ 'output.nonnull
147+ if$
148+}
149+
150+FUNCTION {output.year.month.check}
151+{ year empty$
152+ { "empty year in " cite$ * warning$ }
153+ { add.period$ write$
154+ month empty$
155+ { " (" year * extra.label * ")" * % ajw
156+ after.sentence 'output.state :=
157+ }
158+ { " " year * extra.label * " (" * month * ")." *
159+ after.sentence 'output.state :=
160+ }
161+ if$
162+ }
163+ if$
164+}
165+
166+FUNCTION {output.year.check}
167+{ year empty$
168+ { "empty year in " cite$ * warning$ }
169+ { add.period$ write$
170+ " (" year * extra.label * ")" * % ajw
171+ after.sentence 'output.state :=
172+ }
173+ if$
174+}
175+
176+FUNCTION {output.bibitem}
177+{ newline$
178+ "\bibitem[" write$
179+ label write$
180+ "]{" write$
181+ cite$ write$
182+ "}" write$
183+ newline$
184+ ""
185+ before.all 'output.state :=
186+}
187+
188+FUNCTION {fin.entry}
189+{ add.period$
190+ write$
191+ newline$
192+}
193+
194+FUNCTION {new.block}
195+{ output.state before.all =
196+ 'skip$
197+ { after.block 'output.state := }
198+ if$
199+}
200+
201+FUNCTION {new.sentence}
202+{ output.state after.block =
203+ 'skip$
204+ { output.state before.all =
205+ 'skip$
206+ { after.sentence 'output.state := }
207+ if$
208+ }
209+ if$
210+}
211+
212+FUNCTION {not}
213+{ { #0 }
214+ { #1 }
215+ if$
216+}
217+
218+FUNCTION {and}
219+{ 'skip$
220+ { pop$ #0 }
221+ if$
222+}
223+
224+FUNCTION {or}
225+{ { pop$ #1 }
226+ 'skip$
227+ if$
228+}
229+
230+FUNCTION {new.block.checkb}
231+{ empty$
232+ swap$ empty$
233+ and
234+ 'skip$
235+ 'new.block
236+ if$
237+}
238+
239+FUNCTION {field.or.null}
240+{ duplicate$ empty$
241+ { pop$ "" }
242+ 'skip$
243+ if$
244+}
245+
246+FUNCTION {boldface}
247+{ duplicate$ empty$
248+ { pop$ "" }
249+ { "{\bf " swap$ * "}" * }
250+ if$
251+}
252+
253+FUNCTION {emphasize}
254+{ duplicate$ empty$
255+ { pop$ "" }
256+ { "{\em " swap$ * "}" * }
257+ if$
258+}
259+
260+INTEGERS { nameptr namesleft numnames }
261+
262+
263+FUNCTION {format.names}
264+{ 's :=
265+ #1 'nameptr :=
266+ s num.names$ 'numnames :=
267+ numnames 'namesleft :=
268+ { namesleft #0 > }
269+ { s nameptr "{vv~}{ll}{, jj}{, ff}" format.name$ 't :=
270+ nameptr #1 >
271+ { namesleft #1 >
272+ { ", " * t * }
273+ { t "others" =
274+ { ", {\em et~al.\ }\relax" * }
275+ { ", \& " * t * } % Butcher, pages
276+ if$ % 186-189.
277+ }
278+ if$
279+ }
280+ 't
281+ if$
282+ nameptr #1 + 'nameptr :=
283+ namesleft #1 - 'namesleft :=
284+ }
285+ while$
286+}
287+
288+FUNCTION {format.authors}
289+{ author empty$
290+ { "" }
291+ { author format.names }
292+ if$
293+}
294+
295+FUNCTION {format.key}
296+{ empty$
297+ { key field.or.null }
298+ { "" }
299+ if$
300+}
301+
302+FUNCTION {format.editors}
303+{ editor empty$
304+ { "" }
305+ { editor format.names
306+ editor num.names$ #1 > % Use ODWE abbrevs.
307+ { " (eds)" * } % to avoid
308+ { " (ed)" * } % ambiguity between
309+ if$ % "editor" and
310+ } % "edition".
311+ if$
312+}
313+
314+FUNCTION {format.title} % Howells example
315+{ title empty$ % in BS 5605 comes
316+ { "" } % out wrong because
317+ { title "t" change.case$ } % Patashnik
318+ if$ % capitalizes
319+} % after a colon.
320+
321+FUNCTION {n.dashify}
322+{ 't :=
323+ ""
324+ { t empty$ not }
325+ { t #1 #1 substring$ "-" =
326+ { t #1 #2 substring$ "--" = not
327+ { "--" *
328+ t #2 global.max$ substring$ 't :=
329+ }
330+ { { t #1 #1 substring$ "-" = }
331+ { "-" *
332+ t #2 global.max$ substring$ 't :=
333+ }
334+ while$
335+ }
336+ if$
337+ }
338+ { t #1 #1 substring$ *
339+ t #2 global.max$ substring$ 't :=
340+ }
341+ if$
342+ }
343+ while$
344+}
345+
346+FUNCTION {format.btitle}
347+{ title empty$
348+ { "" }
349+ { title "t" change.case$ emphasize }
350+ if$
351+}
352+
353+FUNCTION {tie.or.space.connect}
354+{ duplicate$ text.length$ #3 <
355+ { "~" }
356+ { " " }
357+ if$
358+ swap$ * *
359+}
360+
361+FUNCTION {either.or.check}
362+{ empty$
363+ 'pop$
364+ { "can't use both " swap$ * " fields in " * cite$ * warning$ }
365+ if$
366+}
367+
368+INTEGERS { multiresult }
369+
370+FUNCTION {multi.page.check}
371+{ 't :=
372+ #0 'multiresult :=
373+ { multiresult not
374+ t empty$ not
375+ and
376+ }
377+ { t #1 #1 substring$
378+ duplicate$ "-" =
379+ swap$ duplicate$ "," =
380+ swap$ "+" =
381+ or or
382+ { #1 'multiresult := }
383+ { t #2 global.max$ substring$ 't := }
384+ if$
385+ }
386+ while$
387+ multiresult
388+}
389+
390+FUNCTION {format.numberinseries}
391+{ number empty$
392+ { "" }
393+ { number multi.page.check
394+ { ", nos. " number n.dashify tie.or.space.connect }
395+ { ", no. " number tie.or.space.connect }
396+ if$
397+ }
398+ if$
399+}
400+
401+FUNCTION {booklike.series.volume.number} % Chicago, pages
402+{ series empty$ % 450-451.
403+ { volume empty$
404+ { " " }
405+ { " Vol. " volume * }
406+ if$
407+ }
408+ {
409+ volume empty$
410+ { number empty$
411+ { series }
412+ { series format.numberinseries * }
413+ if$
414+ }
415+ { number empty$
416+ { series ", vol. " volume * * }
417+ { series ", vol. " * volume * format.numberinseries * }
418+ if$
419+ }
420+ if$
421+ }
422+ if$
423+}
424+
425+FUNCTION {incollectionlike.series.volume.number}
426+{ series empty$
427+ { volume empty$
428+ { " " }
429+ { " vol. " volume * }
430+ if$
431+ }
432+ { new.block
433+ volume empty$
434+ { number empty$
435+ { series }
436+ { series format.numberinseries * }
437+ if$
438+ }
439+ { number empty$
440+ { series ", vol. " volume * * }
441+ { series ", vol. " * volume * format.numberinseries * }
442+ if$
443+ }
444+ if$
445+ }
446+ if$
447+}
448+
449+FUNCTION {format.edition}
450+{ edition empty$
451+ { "" }
452+ { output.state mid.sentence =
453+ { edition "l" change.case$ " edn." * }
454+ { edition "t" change.case$ " edn." * }
455+ if$
456+ }
457+ if$
458+}
459+
460+FUNCTION {format.pages}
461+{ pages empty$
462+ { "" }
463+ { pages multi.page.check
464+ { "" pages n.dashify tie.or.space.connect }
465+ { "" pages tie.or.space.connect }
466+ if$
467+ }
468+ if$
469+}
470+
471+FUNCTION {format.pagesinbook} % By the time the
472+{ pages empty$ % reader has read
473+ { "" } % address, pub'r,
474+ { pages multi.page.check % note (where the
475+ { "Pages " pages n.dashify tie.or.space.connect } % note may end with
476+ { "Page " pages tie.or.space.connect } % numbers), s/he
477+ if$ % may not recognise
478+ } % a number-range as
479+ if$ % meaning pages.
480+} % Avoid ambiguity
481+ % (Butcher, p.181).
482+
483+FUNCTION {format.vol.num.date.pages}
484+{ volume empty$
485+ { month empty$
486+ { "" }
487+ { month }
488+ if$
489+ }
490+ { volume boldface field.or.null
491+ number empty$
492+ { month empty$
493+ 'skip$
494+ { "(" month * ")" * * }
495+ if$
496+ }
497+ { "(" number * ")" * *
498+ volume empty$
499+ { "there's a number but no volume in " cite$ * warning$ }
500+ 'skip$
501+ if$
502+ }
503+ if$
504+ }
505+ if$
506+ pages empty$
507+ 'skip$
508+ { duplicate$ empty$
509+ { pop$ format.pages }
510+ { ", " * pages n.dashify * }
511+ if$
512+ }
513+ if$
514+}
515+
516+FUNCTION {format.chapter.pages.inbook}
517+{ chapter empty$
518+ 'format.pagesinbook
519+ { type empty$
520+ { "Chap." }
521+ { type }
522+ if$
523+ chapter tie.or.space.connect
524+ pages empty$
525+ 'skip$
526+ { ", " * format.pagesinbook "l" change.case$ * }
527+ if$
528+ }
529+ if$
530+}
531+
532+FUNCTION {format.chapter.pages.incoll}
533+{ chapter empty$
534+ { pages empty$
535+ { " " } % ajw
536+ { "{\em " format.pagesinbook " of:} " * * }
537+ if$
538+ }
539+ { type empty$
540+ { "{\em Chap. " chapter * }
541+ { "{\em " type * " " * chapter * }
542+ if$
543+ pages empty$
544+ { " of:} " * }
545+ { ", " * format.pagesinbook "l" change.case$ " of:} " * * }
546+ if$
547+ }
548+ if$
549+}
550+
551+FUNCTION {format.in.ed.booktitle} % Achieves effect
552+{ booktitle empty$ % shown in 16.51
553+ { "" } % of Chicago, at
554+ { editor empty$ % expense of not
555+ { format.chapter.pages.incoll % achieving effects
556+ booktitle "t" change.case$ emphasize * } % shown in 16.50
557+ { format.chapter.pages.incoll % of Chicago, on
558+ format.editors * ", " * % page 189 of
559+ booktitle "t" change.case$ emphasize * } % Butcher and in
560+ if$ % 4.4 of BS 1629.
561+ }
562+ if$
563+}
564+
565+FUNCTION {format.thesis.type}
566+{ type empty$
567+ 'skip$
568+ { pop$
569+ type "t" change.case$
570+ }
571+ if$
572+}
573+
574+FUNCTION {format.tr.number}
575+{ type empty$
576+ { "Tech. rept." } % ODWE abbrevs.
577+ 'type
578+ if$
579+ number empty$
580+ { "t" change.case$ }
581+ { number tie.or.space.connect }
582+ if$
583+}
584+
585+FUNCTION {format.addr.pub}
586+{ publisher empty$
587+ { "" }
588+ { address empty$
589+ { "" }
590+ { address ": " * }
591+ if$
592+ publisher *
593+ }
594+ if$
595+}
596+
597+FUNCTION {format.addr.pub.org} % If there's an
598+{ address empty$ % an organization
599+ { publisher * ", for " * organization * } % and a publisher
600+ { address ": " * publisher * ", for " * organization * } % too.
601+ if$
602+}
603+
604+FUNCTION {format.addr.inst}
605+{ address empty$
606+ { institution empty$
607+ { "" }
608+ { institution }
609+ if$
610+ }
611+ { institution empty$
612+ { "" }
613+ { institution ", " * }
614+ if$
615+ address *
616+ }
617+ if$
618+}
619+
620+FUNCTION {format.addr.org}
621+{ address empty$
622+ { organization empty$
623+ { "" }
624+ { organization }
625+ if$
626+ }
627+ { organization empty$
628+ { "" }
629+ { organization ", " * }
630+ if$
631+ address *
632+ }
633+ if$
634+}
635+
636+FUNCTION {format.article.crossref}
637+{ "{\em In:}"
638+ " \cite{" * crossref * "}" *
639+}
640+
641+FUNCTION {format.book.crossref}
642+{ volume empty$
643+ { "empty volume in " cite$ * "'s crossref of " * crossref * warning$
644+ "{\em In:}"
645+ }
646+ { " Vol." volume tie.or.space.connect
647+ " of " *
648+ }
649+ if$
650+ "\cite{" * crossref * "}" *
651+}
652+
653+FUNCTION {format.incoll.inproc.crossref}
654+{ "{\em In:}"
655+ " \cite{" * crossref * "}" *
656+}
657+
658+FUNCTION {article}
659+{ output.bibitem
660+ format.authors "author" output.check
661+ author format.key output
662+ output.year.check
663+ new.block
664+ format.title "title" output.check
665+ new.block
666+ crossref missing$
667+ { journal "t" change.case$ emphasize
668+ "journal" output.check
669+ format.vol.num.date.pages output
670+ }
671+ { format.article.crossref output.nonnull
672+ format.pages output
673+ }
674+ if$
675+ new.block
676+ note output
677+ fin.entry
678+}
679+
680+FUNCTION {book}
681+{ output.bibitem
682+ author empty$
683+ { format.editors "author and editor" output.check
684+ editor format.key output
685+ }
686+ { format.authors output.nonnull
687+ crossref missing$
688+ { "author and editor" editor either.or.check }
689+ 'skip$
690+ if$
691+ }
692+ if$
693+ output.year.check
694+ new.block
695+ format.btitle "title" output.check
696+ crossref missing$
697+ { new.sentence
698+ format.edition output
699+ new.block
700+ booklike.series.volume.number output
701+ new.block
702+ format.addr.pub "publisher" output.check
703+ }
704+ { new.block
705+ format.book.crossref output.nonnull
706+ }
707+ if$
708+ new.block
709+ note output
710+ fin.entry
711+}
712+
713+FUNCTION {booklet}
714+{ output.bibitem
715+ format.authors output
716+ author format.key output
717+ output.year.month.check
718+ new.block
719+ format.btitle "title" output.check
720+ new.block
721+ howpublished output
722+ address output
723+ new.block
724+ note output
725+ fin.entry
726+}
727+
728+FUNCTION {inbook}
729+{ output.bibitem
730+ author empty$
731+ { format.editors "author and editor" output.check
732+ editor format.key output
733+ }
734+ { format.authors output.nonnull
735+ crossref missing$
736+ { "author and editor" editor either.or.check }
737+ 'skip$
738+ if$
739+ }
740+ if$
741+ output.year.check
742+ new.block
743+ format.btitle "title" output.check
744+ crossref missing$
745+ { new.sentence
746+ format.edition output
747+ new.block
748+ booklike.series.volume.number output
749+ new.block
750+ format.addr.pub "publisher" output.check
751+ }
752+ { new.block
753+ format.book.crossref output.nonnull
754+ }
755+ if$
756+ new.block
757+ note output
758+ new.block % BS 1629 (rather
759+ format.chapter.pages.inbook "chapter and pages" output.check
760+ fin.entry % than Chicago,
761+} % p. 451)
762+
763+FUNCTION {incollection}
764+{ output.bibitem
765+ author empty$
766+ { format.editors "editor" output.check
767+ editor format.key output }
768+ { format.authors "author" output.check
769+ author format.key output }
770+ if$
771+ output.year.check
772+ new.block
773+ format.title "title" output.check
774+ new.block
775+ crossref missing$ % Chapter and/or
776+ { format.in.ed.booktitle output % page numbers can
777+ format.edition output % come out via this
778+ incollectionlike.series.volume.number output % route, too.
779+ new.block
780+ format.addr.pub "publisher" output.check
781+ }
782+ { format.incoll.inproc.crossref output.nonnull
783+ new.block
784+ }
785+ if$
786+ new.block
787+ note output
788+ fin.entry
789+}
790+
791+FUNCTION {inproceedings}
792+{ output.bibitem
793+ format.authors "author" output.check
794+ author format.key output
795+ publisher empty$
796+ { output.year.month.check }
797+ { output.year.check }
798+ if$
799+ new.block
800+ format.title "title" output.check
801+ new.block
802+ crossref missing$
803+ { format.in.ed.booktitle "booktitle" output.check
804+ incollectionlike.series.volume.number output
805+ new.block
806+ publisher empty$
807+ {
808+ organization empty$
809+ 'skip$
810+ { format.addr.org output }
811+ if$
812+ }
813+ {
814+ organization empty$
815+ { format.addr.pub output }
816+ { format.addr.pub.org output }
817+ if$
818+ }
819+ if$
820+ }
821+ { format.incoll.inproc.crossref output.nonnull
822+ }
823+ if$
824+ new.block
825+ note output
826+ fin.entry
827+}
828+
829+FUNCTION {conference} { inproceedings }
830+
831+FUNCTION {manual}
832+{ output.bibitem
833+ format.authors output
834+ author format.key output
835+ output.year.month.check
836+ new.block
837+ format.btitle "title" output.check
838+ new.sentence
839+ format.edition output
840+ new.block
841+ organization address new.block.checkb
842+ format.addr.org output
843+ new.block
844+ note output
845+ fin.entry
846+}
847+
848+FUNCTION {mastersthesis}
849+{ output.bibitem
850+ format.authors "author" output.check
851+ author format.key output
852+ output.year.month.check
853+ new.block
854+ format.btitle "title" output.check
855+ new.block
856+ "M.Phil. thesis" format.thesis.type output.nonnull % ODWE abbrev.
857+ school "school" output.check
858+ address output
859+ new.block
860+ note output
861+ fin.entry
862+}
863+
864+FUNCTION {misc}
865+{ output.bibitem
866+ format.authors output
867+ author format.key output
868+ output.year.month.check
869+ new.block
870+ format.btitle output
871+ new.block
872+ howpublished output
873+ new.block
874+ note output
875+ fin.entry
876+}
877+
878+FUNCTION {phdthesis}
879+{ output.bibitem
880+ format.authors "author" output.check
881+ author format.key output
882+ output.year.month.check
883+ new.block
884+ format.btitle "title" output.check
885+ new.block
886+ "Ph.D. thesis" format.thesis.type output.nonnull % Butcher,
887+ school "school" output.check % page 174.
888+ address output
889+ new.block
890+ note output
891+ fin.entry
892+}
893+
894+FUNCTION {proceedings}
895+{ output.bibitem
896+ format.editors "author and editor" output.check
897+ editor format.key output
898+ publisher empty$
899+ { output.year.month.check }
900+ { output.year.check }
901+ if$
902+ new.block
903+ format.btitle "title" output.check
904+ new.block
905+ booklike.series.volume.number output
906+ new.block
907+ publisher empty$
908+ {
909+ organization empty$
910+ 'skip$
911+ { format.addr.org output }
912+ if$
913+ }
914+ {
915+ organization empty$
916+ { format.addr.pub output }
917+ { format.addr.pub.org output }
918+ if$
919+ }
920+ if$
921+ new.block
922+ note output
923+ fin.entry
924+}
925+
926+FUNCTION {techreport}
927+{ output.bibitem
928+ format.authors "author" output.check
929+ author format.key output
930+ output.year.month.check
931+ new.block
932+ format.btitle "title" output.check
933+ new.block
934+ format.tr.number output.nonnull
935+ new.sentence
936+ format.addr.inst "institution" output.check
937+ new.block
938+ note output
939+ fin.entry
940+}
941+
942+FUNCTION {unpublished}
943+{ output.bibitem
944+ format.authors "author" output.check
945+ author format.key output
946+ output.year.month.check
947+ new.block
948+ format.btitle "title" output.check
949+ new.block
950+ note "note" output.check
951+ fin.entry
952+}
953+
954+FUNCTION {default.type} { misc }
955+
956+MACRO {jan} {"Jan."} % ODWE, "months", &
957+ % Chicago, p. 383.
958+MACRO {feb} {"Feb."}
959+
960+MACRO {mar} {"Mar."}
961+
962+MACRO {apr} {"Apr."}
963+
964+MACRO {may} {"May"}
965+
966+MACRO {jun} {"June"}
967+
968+MACRO {jul} {"July"}
969+
970+MACRO {aug} {"Aug."}
971+
972+MACRO {sep} {"Sept."}
973+
974+MACRO {oct} {"Oct."}
975+
976+MACRO {nov} {"Nov."}
977+
978+MACRO {dec} {"Dec."}
979+
980+MACRO {acmcs} {"ACM Computing Surveys"}
981+
982+MACRO {acta} {"Acta Informatica"}
983+
984+MACRO {cacm} {"Communications of the ACM"}
985+
986+MACRO {ibmjrd} {"IBM Journal of Research and Development"}
987+
988+MACRO {ibmsj} {"IBM Systems Journal"}
989+
990+MACRO {ieeese} {"IEEE Transactions on Software Engineering"}
991+
992+MACRO {ieeetc} {"IEEE Transactions on Computers"}
993+
994+MACRO {ieeetcad}
995+ {"IEEE Transactions on Computer-Aided Design of Integrated Circuits"}
996+
997+MACRO {ipl} {"Information Processing Letters"}
998+
999+MACRO {jacm} {"Journal of the ACM"}
1000+
1001+MACRO {jcss} {"Journal of Computer and System Sciences"}
1002+
1003+MACRO {scp} {"Science of Computer Programming"}
1004+
1005+MACRO {sicomp} {"SIAM Journal on Computing"}
1006+
1007+MACRO {tocs} {"ACM Transactions on Computer Systems"}
1008+
1009+MACRO {tods} {"ACM Transactions on Database Systems"}
1010+
1011+MACRO {tog} {"ACM Transactions on Graphics"}
1012+
1013+MACRO {toms} {"ACM Transactions on Mathematical Software"}
1014+
1015+MACRO {toois} {"ACM Transactions on Office Information Systems"}
1016+
1017+MACRO {toplas} {"ACM Transactions on Programming Languages and Systems"}
1018+
1019+MACRO {tcs} {"Theoretical Computer Science"}
1020+
1021+READ
1022+
1023+FUNCTION {sortify}
1024+{ purify$
1025+ "l" change.case$
1026+}
1027+
1028+INTEGERS { len }
1029+
1030+FUNCTION {chop.word}
1031+{ 's :=
1032+ 'len :=
1033+ s #1 len substring$ =
1034+ { s len #1 + global.max$ substring$ }
1035+ 's
1036+ if$
1037+}
1038+
1039+FUNCTION {format.lab.names}
1040+{ 's :=
1041+ s #1 "{vv~}{ll}" format.name$
1042+ s num.names$ duplicate$
1043+ #2 >
1044+%%%%% { pop$ " {\em et~al.\ }\relax" * }
1045+ { pop$ " {\em et~al.}\relax" * }
1046+ { #2 <
1047+ 'skip$
1048+ { s #2 "{ff }{vv }{ll}{ jj}" format.name$ "others" =
1049+ { " {\em et~al.\ }\relax" * }
1050+ { " \& " * s #2 "{vv~}{ll}" format.name$ * }
1051+ if$
1052+ }
1053+ if$
1054+ }
1055+ if$
1056+}
1057+
1058+FUNCTION {author.key.label}
1059+{ author empty$
1060+ { key empty$
1061+ { cite$ #1 #3 substring$ }
1062+ 'key
1063+ if$
1064+ }
1065+ { author format.lab.names }
1066+ if$
1067+}
1068+
1069+FUNCTION {author.editor.key.label}
1070+{ author empty$
1071+ { editor empty$
1072+ { key empty$
1073+ { cite$ #1 #3 substring$ }
1074+ 'key
1075+ if$
1076+ }
1077+ { editor format.lab.names }
1078+ if$
1079+ }
1080+ { author format.lab.names }
1081+ if$
1082+}
1083+
1084+FUNCTION {editor.key.label}
1085+{ editor empty$
1086+ { key empty$
1087+ { cite$ #1 #3 substring$ }
1088+ 'key
1089+ if$
1090+ }
1091+ { editor format.lab.names }
1092+ if$
1093+}
1094+
1095+FUNCTION {calc.label}
1096+ { type$ "book" =
1097+ type$ "inbook" =
1098+ type$ "incollection" = % For sensible
1099+ or or % treatment of
1100+ 'author.editor.key.label % Singer in
1101+ { type$ "proceedings" = % BS 1629.
1102+ 'editor.key.label
1103+ 'author.key.label
1104+ if$
1105+ }
1106+ if$
1107+ duplicate$
1108+ year empty$
1109+ {
1110+ "\protect\citename{" swap$ * ", }" *
1111+ "n.d." * 'label := % Chicago,
1112+ } % page 457.
1113+ {
1114+ "\protect\citename{" swap$ * ", }" *
1115+ year
1116+ *
1117+ 'label :=
1118+ }
1119+ if$
1120+ year field.or.null purify$ *
1121+ sortify 'sort.label :=
1122+}
1123+
1124+
1125+FUNCTION {sort.format.names} % To produce the
1126+{ 's := % order of entries
1127+ #1 'nameptr := % specified in item
1128+ "" % (3) on page 187
1129+ s num.names$ 'numnames := % of Butcher.
1130+ numnames 'namesleft :=
1131+ { namesleft #0 > nameptr #3 < and } % Only 1st 2 names
1132+ { nameptr #1 > % matter for
1133+ { " " * } % sorting.
1134+ 'skip$
1135+ if$ % Anything that's
1136+ nameptr #2 = numnames #2 > and % "et al" goes
1137+ { "zzzzz" * } % after works by 2
1138+ { % authors.
1139+ s nameptr "{vv{ } }{ll{ }}{ ff{ }}{ jj{ }}" format.name$ 't :=
1140+ nameptr numnames = t "others" = and
1141+ { "zzzzz" * }
1142+ { t sortify * }
1143+ if$
1144+ }
1145+ if$
1146+ nameptr #1 + 'nameptr :=
1147+ namesleft #1 - 'namesleft :=
1148+ }
1149+ while$
1150+}
1151+
1152+FUNCTION {sort.format.title}
1153+{ 't :=
1154+ "A " #2
1155+ "An " #3
1156+ "The " #4 t chop.word
1157+ chop.word
1158+ chop.word
1159+ sortify
1160+ #1 global.max$ substring$
1161+}
1162+
1163+FUNCTION {author.sort}
1164+{ author empty$
1165+ { key empty$
1166+ { "to sort, need author or key in " cite$ * warning$
1167+ ""
1168+ }
1169+ { key sortify }
1170+ if$
1171+ }
1172+ { author sort.format.names }
1173+ if$
1174+}
1175+
1176+FUNCTION {author.editor.sort}
1177+{ author empty$
1178+ { editor empty$
1179+ { key empty$
1180+ { "to sort, need author, editor, or key in " cite$ * warning$
1181+ ""
1182+ }
1183+ { key sortify }
1184+ if$
1185+ }
1186+ { editor sort.format.names }
1187+ if$
1188+ }
1189+ { author sort.format.names }
1190+ if$
1191+}
1192+
1193+FUNCTION {editor.sort}
1194+{ editor empty$
1195+ { key empty$
1196+ { "to sort, need editor or key in " cite$ * warning$
1197+ ""
1198+ }
1199+ { key sortify }
1200+ if$
1201+ }
1202+ { editor sort.format.names }
1203+ if$
1204+}
1205+
1206+FUNCTION {presort} % Two sorting
1207+{ calc.label % passes, from
1208+ label sortify % apalike.bst.
1209+ " "
1210+ *
1211+ type$ "book" =
1212+ type$ "inbook" =
1213+ type$ "incollection" = % For Singer
1214+ or or % in BS 1629.
1215+ 'author.editor.sort
1216+ { type$ "proceedings" =
1217+ 'editor.sort
1218+ 'author.sort
1219+ if$
1220+ }
1221+ if$
1222+ #1 entry.max$ substring$
1223+ 'sort.label :=
1224+ sort.label
1225+ *
1226+ " "
1227+ *
1228+ title field.or.null
1229+ sort.format.title
1230+ *
1231+ #1 entry.max$ substring$
1232+ 'sort.key$ :=
1233+}
1234+
1235+ITERATE {presort}
1236+
1237+SORT
1238+
1239+STRINGS { last.label next.extra }
1240+
1241+INTEGERS { last.extra.num }
1242+
1243+FUNCTION {initialize.extra.label.stuff}
1244+{ #0 int.to.chr$ 'last.label :=
1245+ "" 'next.extra :=
1246+ #0 'last.extra.num :=
1247+}
1248+
1249+FUNCTION {forward.pass}
1250+{ last.label label =
1251+ { last.extra.num #1 + 'last.extra.num :=
1252+ last.extra.num int.to.chr$ 'extra.label :=
1253+ }
1254+ { "a" chr.to.int$ 'last.extra.num :=
1255+ "" 'extra.label :=
1256+ label 'last.label :=
1257+ }
1258+ if$
1259+}
1260+
1261+FUNCTION {reverse.pass}
1262+{ next.extra "b" =
1263+ { "a" 'extra.label := }
1264+ 'skip$
1265+ if$ % Code needed here
1266+ % if \citeauthor
1267+ % and \citeyear
1268+ label extra.label * 'label := % were supported.
1269+ extra.label 'next.extra :=
1270+}
1271+
1272+EXECUTE {initialize.extra.label.stuff}
1273+
1274+ITERATE {forward.pass}
1275+
1276+REVERSE {reverse.pass}
1277+
1278+FUNCTION {bib.sort.order}
1279+{ sort.label
1280+ " "
1281+ *
1282+ year field.or.null sortify
1283+ *
1284+ " "
1285+ *
1286+ title field.or.null
1287+ sort.format.title
1288+ *
1289+ #1 entry.max$ substring$
1290+ 'sort.key$ :=
1291+}
1292+
1293+ITERATE {bib.sort.order}
1294+
1295+SORT
1296+
1297+FUNCTION {begin.bib}
1298+{ preamble$ empty$
1299+ 'skip$
1300+ { preamble$ write$ newline$ }
1301+ if$
1302+ "\begin{thebibliography}{}" write$ newline$
1303+}
1304+
1305+EXECUTE {begin.bib}
1306+
1307+EXECUTE {init.state.consts}
1308+
1309+ITERATE {call.type$}
1310+
1311+FUNCTION {end.bib}
1312+{ newline$
1313+ "\end{thebibliography}" write$ newline$
1314+}
1315+
1316+EXECUTE {end.bib}
impl-paper/jfp1.clsnew file+1894
@@ -0,0 +1,1894 @@
1+%%
2+%% This is file `jfp.cls'
3+%%
4+%% CUP Journal of Functional Programming document class
5+%% Copyright 2001 Cambridge University Press
6+%%
7+%% by Mark A. Reed
8+%% based on JFP.STY v1.24.
9+%%
10+%% Incorporating parts of authordate.sty
11+%% by David Rhead, Cripps Computing Centre (Feb 1990).
12+%%
13+%% Bugs (in the case of unchanged files) should be reported to
14+%% texline@cambridge.org
15+%%
16+%% This software may only be used in the preparation of journal articles
17+%% or books or parts of books to be published by Cambridge University Press.
18+%% Any other use constitutes an infringement of copyright.
19+%%
20+%% \CharacterTable
21+%% {Upper-case \A\B\C\D\E\F\G\H\I\J\K\L\M\N\O\P\Q\R\S\T\U\V\W\X\Y\Z
22+%% Lower-case \a\b\c\d\e\f\g\h\i\j\k\l\m\n\o\p\q\r\s\t\u\v\w\x\y\z
23+%% Digits \0\1\2\3\4\5\6\7\8\9
24+%% Exclamation \! Double quote \" Hash (number) \#
25+%% Dollar \$ Percent \% Ampersand \&
26+%% Acute accent \' Left paren \( Right paren \)
27+%% Asterisk \* Plus \+ Comma \,
28+%% Minus \- Point \. Solidus \/
29+%% Colon \: Semicolon \; Less than \<
30+%% Equals \= Greater than \> Question mark \?
31+%% Commercial at \@ Left bracket \[ Backslash \\
32+%% Right bracket \] Circumflex \^ Underscore \_
33+%% Grave accent \` Left brace \{ Vertical bar \|
34+%% Right brace \} Tilde \~}
35+%%
36+
37+\NeedsTeXFormat{LaTeX2e}[1997/12/01]
38+\ProvidesClass{jfp}[2001/09/27 v1.02 Journal of Functional Programming
39+ ^^Jdocument class]
40+
41+\newif\ifprodtf
42+\newif\ifonepage\global\onepagefalse%
43+\newif\ifonline
44+\onlinefalse
45+%
46+\newif\ifcompmod\global\compmodfalse
47+%
48+\newif\ifincremental\incrementalfalse
49+%%
50+\newif\ifindex
51+\newif\ifdraft
52+\newif\ifnoquery
53+\newif\ifbookreview
54+\newif\ifsptitle
55+%
56+\newif\ifsplissue
57+\global\splissuefalse
58+%
59+\newif\ifprinter
60+\newdimen\draftrule
61+\newdimen\trimrule
62+\global\draftrule0pt
63+\trimrule.1pt
64+%
65+\newdimen\trimwidth
66+\newdimen\trimheight
67+\newdimen\typewidth
68+\newdimen\typeheight
69+
70+\newdimen\tempdimen
71+\newdimen\normaltextheight
72+\newskip\normalbaselineskip
73+\newdimen\blindfoliodrop
74+\newif\ifprinter
75+\global\printerfalse
76+%%
77+\DeclareOption{compmod}{\compmodtrue}
78+%
79+\DeclareOption{splissue}{\splissuetrue}
80+%
81+%
82+\DeclareOption{incremental}{\incrementaltrue}
83+\DeclareOption{index}{\indextrue}
84+\DeclareOption{bookreview}{\bookreviewtrue}
85+\DeclareOption{noquery}{\noquerytrue}
86+\DeclareOption{oneside}{\relax}
87+\DeclareOption{twoside}{\@twosidetrue \@mparswitchtrue}
88+\DeclareOption{draft}{\draftrule.5pt\setlength\overfullrule{5\p@}}
89+\DeclareOption{final}{\setlength\overfullrule{\z@}}
90+\DeclareOption{onecolumn}{\@twocolumnfalse}
91+\DeclareOption{onepage}{\global\onepagetrue}
92+\DeclareOption{twocolumn}{\relax}
93+\DeclareOption{titlepage}{\relax}
94+\DeclareOption{notitlepage}{\relax}
95+\DeclareOption{leqno}{\relax}
96+\DeclareOption{fleqn}{\relax}
97+\DeclareOption{prodtf}{\prodtftrue}
98+\DeclareOption{sptitle}{\sptitletrue}
99+\DeclareOption{printer}{\printertrue}
100+\DeclareOption{online}{\onlinetrue}
101+%
102+\ExecuteOptions{twoside,final,onecolumn}
103+\ProcessOptions\relax
104+
105+\newif\ifCUPmtlplainloaded
106+%% \ifprodtf
107+%% \CUPmtlplainloadedtrue
108+%% \RequirePackage{CUPTimes,jfp2esym}
109+%% % \RequirePackage{Times,jfp2esym} %%% TB
110+%% \fi
111+%%%%%%%%%%%%%%%%
112+%
113+\def\trkdefault{trk}% All trk
114+\DeclareRobustCommand\trkshape
115+ {\not@math@alphabet\trkshape\mathrm
116+ \fontshape\trkdefault\selectfont}
117+%
118+\def\spchapterfont{\fontsize{18}{21}\selectfont}%\trkshape}
119+\def\subtitlefont{\normalfont\fontsize{12}{14}\selectfont\itshape}%
120+%
121+\def\splissuefont{\fontsize{12}{14}\itshape\selectfont}%\trkshape}
122+%
123+\DeclareFontFamily{OT1}{mtr}{}
124+\DeclareFontShape{OT1}{mtr}{m}{n}{<->mtr10}{}
125+\DeclareFontShape{OT1}{mtr}{m}{trk}{<->mtr10[track+140]}{}
126+\DeclareFontShape{OT1}{mtr}{m}{sl}{<->mtsl10}{}
127+\DeclareFontShape{OT1}{mtr}{m}{it}{<->mtti10}{}
128+\DeclareFontShape{OT1}{mtr}{m}{sc}{<->mtcsc10}{}
129+%
130+% Warning: please note that the upright shape below is
131+% used for the \pounds symbol of LaTeX. So this
132+% font definition shouldn't be removed.
133+%
134+\DeclareFontShape{OT1}{mtr}{m}{ui}{<->mtu10}{}
135+%
136+%%%%%%% bold series
137+\DeclareFontShape{OT1}{mtr}{b}{n}{<->sub * cmr/b/n}{}
138+%
139+%%%%%%%% bold extended series
140+\DeclareFontShape{OT1}{mtr}{bx}{n}{<->mtbx10}{}
141+\DeclareFontShape{OT1}{mtr}{bx}{sl}{<->mtbxsl10}{}
142+\DeclareFontShape{OT1}{mtr}{bx}{it}{<->mtbxti10}{}
143+%
144+% Again this is necessary for a correct \pounds symbol in
145+% the cmr fonts Hopefully the dc/ec font layout will take
146+% over soon.
147+%
148+\DeclareFontShape{OT1}{mtr}{bx}{ui}{<->ssub * mtr/m/ui}{}
149+%
150+%%%%% For mathfrak ... updated on 26th of April 2006
151+%
152+\DeclareFontFamily{U}{eufa}{}%
153+\DeclareFontShape{U}{eufa}{m}{n}{<-6>eufm5<6-8>eufm7<8->eufm10}{}%
154+\DeclareFontShape{U}{eufa}{b}{n}{<-6>eufb5<6-8>eufb7<8->eufb10}{}%
155+%
156+%%\newcommand{\mathfrak}[1]{{\protect\pmathfrak#1}}
157+%%\newcommand{\pmathfrak}{\@fontswitch{\relax}{\mfraknew}}
158+\DeclareMathAlphabet\mfraknew{U}{eufa}{m}{n}
159+\SetMathAlphabet\mfraknew{normal}{U}{eufa}{m}{n}
160+\SetMathAlphabet\mfraknew{bold}{U}{eufa}{b}{n}
161+%%%%
162+
163+%%%%%%%%%%%%%%%%
164+\setlength\lineskip{1\p@}
165+\setlength\normallineskip{1\p@}
166+\renewcommand\baselinestretch{}
167+
168+\renewcommand\normalsize{%
169+\ifbookreview
170+\@setfontsize\small\@ixpt{11}%
171+\else
172+\@setfontsize\normalsize\@xpt{13}%
173+\fi
174+ \abovedisplayskip 6.5\p@ \@plus 1\p@ \@minus 1\p@
175+ \belowdisplayskip \abovedisplayskip
176+ \abovedisplayshortskip 3\p@ \@plus 1\p@
177+ \belowdisplayshortskip \abovedisplayshortskip
178+ \let\@listi\@listI}
179+
180+\normalsize
181+
182+\newcommand\small{%
183+ \@setfontsize\small\@ixpt{11}%
184+ \abovedisplayskip 6\p@ \@plus 1\p@ \@minus 1\p@
185+ \belowdisplayskip \abovedisplayskip
186+ \abovedisplayshortskip 3\p@ \@plus 1\p@
187+ \belowdisplayshortskip \abovedisplayshortskip
188+ \def\@listi{\leftmargin\leftmargini
189+ \topsep 6\p@ \@plus 1\p@ \@minus 1\p@
190+ \parsep \z@ \itemsep \parsep}%
191+}
192+
193+\newcommand\footnotesize{%
194+ \@setfontsize\footnotesize\@ixpt\@xpt
195+ \abovedisplayskip 5\p@ \@plus 1\p@ \@minus 1\p@
196+ \belowdisplayskip \abovedisplayskip
197+ \abovedisplayshortskip \z@ \@plus 1\p@
198+ \belowdisplayshortskip \abovedisplayshortskip
199+ \def\@listi{\leftmargin\leftmargini
200+ \topsep 4.5\p@ \@plus 1\p@ \@minus 1\p@
201+ \parsep \z@ \itemsep \parsep}%
202+}
203+
204+\newcommand\scriptsize{\@setfontsize\scriptsize\@viiipt\@ixpt}
205+\newcommand\tiny{\@setfontsize\tiny\@vpt\@vipt}
206+\newcommand\large{\@setfontsize\large\@xiipt{14}}
207+\newcommand\Large{\@setfontsize\Large\@xvpt{18}}
208+\ifprodtf
209+ \newcommand\LARGE{\@setfontsize\LARGE{19}{21}}%
210+\else
211+ \newcommand\LARGE{\@setfontsize\LARGE{18}{21}}%
212+\fi
213+\newcommand\huge{\@setfontsize\huge\@xxpt{25}}
214+\newcommand\Huge{\@setfontsize\Huge\@xxvpt{30}}
215+%
216+\def\sluglinefont{\fontsize{7.5}{10}\selectfont}
217+%
218+\newcommand\affilsize{\@setfontsize\affilsize\@viiipt\@xpt}
219+\newcommand\onlineaffilsize{\@setfontsize\affilsize\@viipt\@ixpt}
220+\let\authorsize\normalsize
221+
222+\DeclareOldFontCommand{\rm}{\normalfont\rmfamily}{\mathrm}
223+\DeclareOldFontCommand{\sf}{\normalfont\sffamily}{\mathsf}
224+\DeclareOldFontCommand{\tt}{\normalfont\ttfamily}{\mathtt}
225+\DeclareOldFontCommand{\bf}{\normalfont\bfseries}{\mathbf}
226+\DeclareOldFontCommand{\it}{\normalfont\itshape}{\mathit}
227+\DeclareOldFontCommand{\sl}{\normalfont\slshape}{\@nomath\sl}
228+\DeclareOldFontCommand{\sc}{\normalfont\scshape}{\@nomath\sc}
229+\DeclareRobustCommand*\cal{\@fontswitch\relax\mathcal}
230+\DeclareRobustCommand*\mit{\@fontswitch\relax\mathnormal}
231+
232+ \setlength\topmargin{11mm}
233+\setlength\trimheight{247mm}
234+\setlength\trimwidth{174mm}
235+%
236+\setlength\typeheight{50.5pc}
237+\setlength\typewidth{30pc}
238+
239+\setlength\marginparwidth{2.0cm}
240+\setlength\marginparsep{10\p@}
241+
242+\setlength\headheight{6\p@}
243+\setlength\headsep{18\p@}
244+\setlength\topskip{6\p@}
245+\setlength\footskip{26\p@}
246+
247+\setlength\textheight{48.5pc}
248+\addtolength\textheight{-8.8pt}
249+\addtolength\textheight{\topskip}
250+\setlength\normaltextheight{\textheight}
251+
252+\setlength\textwidth{30pc}
253+\setlength\columnsep{10\p@}
254+\setlength\columnseprule{\z@}
255+
256+\setlength\oddsidemargin{21mm}%5pc}
257+\setlength\evensidemargin\trimwidth
258+\addtolength\evensidemargin{-\textwidth}
259+\addtolength\evensidemargin{-\oddsidemargin}
260+
261+\setlength\footnotesep{\z@}
262+\setlength{\skip\footins}{19.5\p@ \@plus 12\p@ \@minus 1\p@}
263+
264+\setlength\floatsep{13\p@ \@plus 6.5\p@ \@minus 1\p@}
265+\setlength\textfloatsep{15\p@ \@plus 4.5\p@ \@minus 3\p@}
266+\setlength\intextsep{13\p@ \@plus 6.5\p@ \@minus 2\p@}
267+\setlength\dblfloatsep{13\p@ \@plus 6.5\p@ \@minus 2\p@}
268+\setlength\dbltextfloatsep{15\p@ \@plus 4.5\p@ \@minus 3\p@}
269+\setlength\@fptop{\z@ \@plus 0fil}
270+\setlength\@fpsep{13\p@ \@plus 0fil}
271+\setlength\@fpbot{\z@ \@plus 3fil}
272+\setlength\@dblfptop{\z@ \@plus 0fil}
273+\setlength\@dblfpsep{13\p@ \@plus 0fil}
274+\setlength\@dblfpbot{\z@ \@plus 3fil}
275+\setlength\marginparpush{5\p@}
276+
277+\setlength\parskip{\z@}% \@plus .3\p@}
278+\setlength\parindent{10pt}
279+\setlength\partopsep{\z@ \@plus 1\p@}
280+\@lowpenalty 51
281+\@medpenalty 151
282+\@highpenalty 301
283+\@beginparpenalty -\@lowpenalty
284+\@endparpenalty -\@lowpenalty
285+\@itempenalty -\@lowpenalty
286+\clubpenalty\@M%z@
287+\widowpenalty\@M
288+\hyphenpenalty8000
289+
290+%
291+\def\cleardoublepage{\clearpage\if@twoside \ifodd\c@page\else
292+ \hbox{}\thispagestyle{empty}\newpage\if@twocolumn\hbox{}\newpage\fi\fi\fi}
293+%
294+\newcommand\partname{Part}
295+\newcommand\part{\par\addvspace{4ex}\@afterindentfalse \secdef\@part\@spart}
296+
297+\def\@part[#1]#2{%
298+ \ifnum \c@secnumdepth >\m@ne
299+ \refstepcounter{part}%
300+ \addcontentsline{toc}{part}{\partname\ \thepart: #1}%
301+ \else
302+ \addcontentsline{toc}{part}{#1}%
303+ \fi
304+ {\parindent \z@ \centering
305+ \ifnum \c@secnumdepth >\m@ne
306+ \normalfont\large\rmfamily \MakeUppercase{\partname}\ %
307+ \ifcase\thepart \or ONE \or TWO \or THREE \or FOUR \or FIVE
308+ \or SIX \or SEVEN \or EIGHT \or NINE \or TEN \else \fi
309+ \par \nobreak
310+ \fi
311+ \normalfont\LARGE\rmfamily #2 \markboth{}{}\par}%
312+ \nobreak \vskip 3ex \@afterheading
313+}
314+
315+\def\@spart#1{%
316+ {\parindent \z@ \centering\normalfont\LARGE\rmfamily #1\par}%
317+ \nobreak \vskip 3ex \@afterheading
318+}
319+
320+\newcommand\section{%
321+ \@startsection {section}{1}{\z@}%
322+ {-19.5\p@ \@plus -6.5\p@ \@minus -3.25\p@}%
323+ {6.5\p@ \@plus \z@ \@minus 1\p@}
324+ {\normalfont\normalsize\bfseries\centering}%
325+}
326+
327+\newcommand\subsection{%
328+ \@startsection{subsection}{2}{\z@}
329+ {-19.5\p@ \@plus -3.25\p@ \@minus -3.25\p@}
330+ {6.5\p@ \@plus \z@ \@minus 1\p@}
331+ {\normalfont\normalsize\bfseries\itshape\centering}%
332+}
333+
334+\newcommand\subsubsection{%
335+ \@startsection{subsubsection}{3}{\z@}
336+ {-19.5\p@ \@plus -3.25\p@ \@minus -3.25\p@}
337+ {6.5\p@ \@plus \z@ \@minus 1\p@}
338+ {\normalfont\normalsize\itshape\centering}%
339+}
340+
341+\newcommand\paragraph{%
342+ \@startsection{paragraph}{4}{\z@}
343+ {-13\p@ \@plus -1.5\p@ \@minus -1.5\p@}
344+ {-0.5em}
345+ {\normalfont\normalsize\bfseries\raggedright}%
346+}
347+
348+\newcommand\subparagraph{%
349+ \@startsection{subparagraph}{4}{\parindent}
350+ {-13\p@ \@plus -3.25\p@ \@minus -3.25\p@}
351+ {-0.5em}
352+ {\normalfont\normalsize\rmfamily\raggedright}%
353+}
354+
355+\def\@seccntformat#1{\csname the#1\endcsname\hskip5pt}%
356+
357+\newcommand\appendixname{Appendix}
358+
359+\newcommand\appendix{\par
360+ \@addtoreset{equation}{section}%
361+ \@addtoreset{figure}{section}%
362+ \@addtoreset{table}{section}%
363+ \setcounter{section}\z@
364+ \renewcommand\thesection{\@Alph\c@section}%
365+ \renewcommand\theequation{\thesection\,\@arabic\c@equation}%
366+ \renewcommand\thefigure{\thesection\,\@arabic\c@figure}%
367+ \renewcommand\thetable{\thesection\,\@arabic\c@table}%
368+}
369+
370+\setcounter{secnumdepth}{3}
371+
372+\newcounter{part}
373+\newcounter{section}
374+\newcounter{subsection}[section]
375+\newcounter{subsubsection}[subsection]
376+\newcounter{paragraph}[subsubsection]
377+\newcounter{subparagraph}[paragraph]
378+\renewcommand\thepart {\@arabic\c@part}
379+\renewcommand\thesection {\@arabic\c@section}
380+\renewcommand\thesubsection {\thesection.\@arabic\c@subsection}
381+\renewcommand\thesubsubsection {\thesubsection.\@arabic\c@subsubsection}
382+\renewcommand\theparagraph {\thesubsubsection.\@arabic\c@paragraph}
383+\renewcommand\thesubparagraph {\theparagraph.\@arabic\c@subparagraph}
384+
385+\newskip\@leftskip \@leftskip=\z@
386+
387+\setlength\leftmargini {13pt}
388+\setlength\leftmarginii {15.2pt}
389+\setlength\leftmarginiii {1.5em}
390+\setlength\leftmarginiv {1.5em}
391+\setlength\leftmarginv {1em}
392+\setlength\leftmarginvi {1em}
393+\setlength\leftmargin {\leftmargini}
394+\setlength\labelsep {5\p@}
395+\setlength\labelwidth {\leftmargini}
396+\addtolength\labelwidth {-\labelsep}
397+
398+\newcommand\makeRLlabel[1]{\rlap{#1}\hss}
399+\newcommand\makeRRlabel[1]{\hss\llap{#1}}
400+
401+\def\@listI{\leftmargin\leftmargini\advance\leftmargin11.5pt
402+ \parsep \z@ \topsep 6.5\p@ \@plus 3\p@ \@minus 3\p@
403+ \itemsep \z@ \@plus 1\p@ \@minus 1\p@
404+ \let\makelabel\makeRLlabel}
405+
406+\def\@listii{\leftmargin\leftmarginii
407+ \labelwidth\leftmarginii
408+ \advance\labelwidth-\labelsep
409+ \topsep 3\p@ \@plus 1\p@ \@minus 1\p@
410+ \parsep \z@ \itemsep \parsep
411+ \let\makelabel\makeRLlabel}
412+
413+\def\@listiii{\leftmargin\leftmarginiii
414+ \labelwidth\leftmarginiii
415+ \advance\labelwidth-\labelsep
416+ \topsep 3\p@ \@plus 1\p@ \@minus 1\p@
417+ \parsep \z@ \partopsep \z@
418+ \itemsep \topsep
419+ \let\makelabel\makeRLlabel}
420+
421+\def\@listiv{\leftmargin\leftmarginiv
422+ \labelwidth\leftmarginiv
423+ \advance\labelwidth-\labelsep
424+ \let\makelabel\makeRLlabel}
425+
426+\def\@listv{\leftmargin\leftmarginv
427+ \labelwidth\leftmarginv
428+ \advance\labelwidth-\labelsep
429+ \let\makelabel\makeRLlabel}
430+
431+\def\@listvi{\leftmargin\leftmarginvi
432+ \labelwidth\leftmarginvi
433+ \advance\labelwidth-\labelsep
434+ \let\makelabel\makeRLlabel}
435+
436+\let\@listi\@listI
437+\@listi
438+
439+\def\itemize{% FROM LATEX.LTX
440+ \ifnum \@itemdepth >\thr@@ \@toodeep\else
441+ \advance\@itemdepth \@ne
442+ \edef\@itemitem{labelitem\romannumeral\the\@itemdepth}%
443+ \expandafter
444+ \list
445+ \csname\@itemitem\endcsname
446+ {\let\makelabel\makeRRlabel\advance\itemindent0pt\advance\leftmargin.5pt}%
447+ \fi
448+}
449+
450+\newif\ifhyphen\global\hyphenfalse
451+
452+\newcommand\labelitemi{\ifhyphen \normalfont\bfseries ---\else
453+$\m@th\bullet$\fi}
454+
455+%\newcommand\labelitemi{$\m@th\bullet$}
456+\newcommand\labelitemii{\normalfont\bfseries ---}
457+\newcommand\labelitemiii{\normalfont\bfseries --}
458+\newcommand\labelitemiv{$\m@th\cdot$}
459+
460+%%%%%%%%%%%%%%%%%%%%%%%%%%%%% unnumlist %%%%%%%%%%%%%%%%%%%%%%%%%%%%% TB
461+%
462+\def\unnumlistfont{\fontsize{10}{13}\selectfont}
463+
464+\newenvironment{unnumlist}{\par%
465+ \unnumlistfont%
466+ \list{}{%
467+ \topsep6pt plus2pt
468+ \itemindent-10pt
469+ \leftmargin10pt
470+ \parsep0pt
471+ \itemsep0pt
472+ \partopsep0pt}
473+ \def\makelable##1{##1}%
474+}{%
475+ \endlist%
476+}%
477+%
478+%%%%%%%%%%%%%%%%%%%%%%%%%%%%% unnumlist %%%%%%%%%%%%%%%%%%%%%%%%%%%%%
479+
480+\def\enumerate{% FROM LATEX.LTX
481+ \ifnum \@enumdepth >\thr@@ \@toodeep\else
482+ \advance\@enumdepth \@ne
483+ \edef\@enumctr{enum\romannumeral\the\@enumdepth}%
484+ \fi
485+ \@ifnextchar [{\@enumeratetwo}{\@enumerateone}%
486+}
487+
488+\def\@enumerateone{%
489+ \expandafter
490+ \list
491+ \csname label\@enumctr\endcsname
492+ {\usecounter{\@enumctr}%
493+ \let\makelabel\makeRRlabel}%
494+}
495+
496+\def\@enumeratetwo[#1]{%
497+ \expandafter
498+ \list
499+ \csname label\@enumctr\endcsname
500+ {\usecounter{\@enumctr}%
501+ \settowidth\labelwidth{\normalfont\rmfamily #1}%
502+ \itemindent0pt\leftmargin\labelwidth\advance\leftmargin\labelsep\advance\leftmargin13pt
503+ \let\makelabel\makeRRlabel}%
504+}
505+
506+\newcommand\labelenumi {{\normalfont\rmfamily\theenumi.}}
507+\newcommand\labelenumii {{\normalfont\rmfamily(\theenumii)}}
508+\newcommand\labelenumiii{{\normalfont\rmfamily\theenumiii}}
509+\newcommand\labelenumiv {{\normalfont\rmfamily\theenumiv}}
510+
511+\renewcommand\theenumi{\@arabic\c@enumi}
512+\renewcommand\theenumii{\@alph\c@enumii}
513+\renewcommand\theenumiii{\@roman\c@enumiii}
514+\renewcommand\theenumiv{\@Alph\c@enumiv}
515+
516+\renewcommand\p@enumii{\theenumi}
517+\renewcommand\p@enumiii{\theenumi(\theenumii)}
518+\renewcommand\p@enumiv{\p@enumiii\theenumiii}
519+
520+\newcommand*\descriptionlabel[1]{\hspace\labelsep \normalfont\bfseries #1}
521+
522+\newenvironment{description}
523+ {\list{}{\leftmargin 1em \labelwidth\z@ \itemindent-\leftmargin
524+ \let\makelabel\descriptionlabel}}
525+ {\endlist}
526+
527+\newenvironment{verse}
528+ {\let\\=\@centercr
529+ \list{}{\itemsep\z@
530+ \itemindent -2.5em%
531+ \listparindent \itemindent
532+ \rightmargin\leftmargin
533+ \advance\leftmargin 2.5em}\item[]}
534+ {\endlist}
535+
536+\newenvironment{extract} %quotation
537+ {\list{}{\vskip6pt\listparindent\parindent
538+ \topsep6pt\itemindent\listparindent
539+ \leftmargin\z@ \rightmargin\leftmargin
540+ \parsep \z@ \@plus 1\p@}\item[]%
541+ \normalfont\small\rmfamily}
542+ {\endlist}
543+
544+
545+\newenvironment{quote} %quotation
546+ {\par\vskip5pt\itshape\leftskip0pt plus1fill\rightskip0pt plus 0fill}
547+ {\par}
548+
549+\newenvironment{qtsource} %quotation source
550+ {\par\leftskip0pt plus1fill\rightskip0pt plus 0fill}
551+ {\par}
552+
553+\def\quotespace{\vspace*{6.5pt}}
554+
555+\newenvironment{letter} %quotation
556+ {\list{}{\listparindent\z@
557+ \topsep6pt\itemindent\listparindent
558+ \leftmargin24pt \rightmargin\z@
559+ \parsep \z@ \@plus 1\p@}\item[]%
560+ \normalfont\itshape}
561+ {\endlist}
562+
563+
564+\newif\ifrembrks
565+\newcommand\removebrackets{\rembrkstrue}
566+
567+\def\@begintheorem#1#2{% FROM LATEX.LTX
568+ \normalfont\rmfamily
569+ \trivlist
570+ \item[\hskip \labelsep{\normalfont\itshape #1\ #2}]%
571+ \item[]%
572+}
573+
574+\def\@opargbegintheorem#1#2#3{% FROM LATEX.LTX
575+ \normalfont\rmfamily
576+ \trivlist
577+ \item[\hskip \labelsep{\normalfont\itshape #1\ #2\ %
578+ \ifrembrks #3\/\global\rembrksfalse\else {\upshape(}#3\/{\upshape)}\fi}]%
579+ \item[]%
580+}
581+
582+\newsavebox{\proofsavebox}
583+
584+
585+%% \newtheorem{lemma}{Lemma}[section]
586+%% \newtheorem{example}{Example}[section]
587+%% \newtheorem{theorem}{Theorem}[section]
588+%% \newtheorem{definition}{Definition}[section]
589+%% \newtheorem{corollary}{Corollary}[section]
590+
591+
592+ \sbox{\proofsavebox}
593+ {\unitlength 1pt\begin{picture}(6.5,6.5)%
594+ \put(0,0){\framebox(6.5,6.5){}}\end{picture}}
595+ \newcommand\proofbox{\usebox{\proofsavebox}\relax}
596+
597+\newcommand\mathproofbox{\rlap{\quad\proofbox}}
598+
599+\def\@nprf{\normalfont\rmfamily \trivlist
600+ \item[\hskip \labelsep {\normalfont\itshape Proof}]%
601+ \item[]}
602+
603+\def\@oprf[#1]{\normalfont\rmfamily \trivlist
604+ \item[\hskip \labelsep {\normalfont\itshape #1\ }]%
605+ \item[]}
606+
607+\newenvironment{proof}
608+ {\@ifnextchar[{\@oprf}{\@nprf}}
609+ {\hspace*{15pt}\hbox{\proofbox}\endtrivlist}
610+
611+\newenvironment{proof*}
612+ {\proof}
613+ {\endtrivlist}
614+
615+\renewcommand\theequation{\@arabic\c@equation}
616+
617+\setlength\arraycolsep{5\p@}
618+\setlength\tabcolsep{0\p@}
619+\setlength\arrayrulewidth{.5\p@}
620+\setlength\doublerulesep{1.5\p@}
621+\setlength\tabbingsep{\labelsep}
622+\setlength{\skip\@mpfootins}{\skip\footins}
623+\setlength\fboxsep{3\p@}
624+\setlength\fboxrule{.5\p@}
625+
626+\newcommand\maketitle{\@ifnextchar [{\m@ketitleone}{\m@ketitleone[n]}}
627+
628+\def\m@ketitleone[#1]{\par
629+ \begingroup
630+ \newpage
631+ \global\@topnum\z@
632+ \titlefntrue
633+ \def\thefootnote{\@fnsymbol\c@footnote}%
634+ \def\@makefnmark{\hbox{$\@thefnmark$}}%
635+ \@maketitle{#1}%
636+ \thispagestyle{titlepage}\@thanks
637+ \endgroup
638+ \global\let\@maketitle\relax
639+ \global\let\@thanks\@empty
640+ \global\let\@title\@empty
641+ \global\let\@author\@empty
642+ \global\let\maketitle\relax
643+ \global\let\thanks\relax
644+ \setcounter{footnote}\z@
645+}
646+
647+\def\pe@rl#1{%
648+ \if t#1 {\tpe@rl}\else
649+ \if T#1 {\Tpe@rl}\else
650+ \if f#1 {\fpe@rl}\else
651+ \if F#1 {\Fpe@rl}\else
652+ \if e#1 {\edpe@rl}\else
653+ \if E#1 {\Edpe@rl}\else
654+ \if o#1 {\otherpearl}\else
655+ \vspace*{32\p@}%
656+ \fi
657+ \fi
658+ \fi
659+ \fi
660+ \fi
661+ \fi
662+ \fi
663+}
664+%
665+\newenvironment{bookrevauthor}{\par\vskip5pt\noindent\ignorespaces}{\par}
666+
667+\def\bookreventryfont{\fontsize{10}{13}\selectfont}
668+\newenvironment{bookreventry}{\par\bookreventryfont\noindent\leftskip18pt\rightskip18pt\ignorespaces}{\vskip7pt\@endparenv\@ignoretrue}
669+\newenvironment{question}{\par\vskip6.5pt\tablefont\noindent\ignorespaces}{\vskip6.5pt\@endparenv\@ignoretrue}
670+%
671+\def\spe@rl{\vspace*{32\p@}\normalfont\LARGE\rmfamily}
672+\def\epe@rl#1{\par\vspace*{6.5\p@}\xdef\@shorttitle{#1}}
673+
674+\def\tpe@rl{\spe@rl T\ls H\ls E\ls O\ls R\ls E\ls T\ls
675+ I\ls C\ls A\ls L\ns P\ls E\ls A\ls R\ls L\ls S%
676+ \epe@rl{Theoretical pearls}%
677+}
678+
679+\def\Tpe@rl{\spe@rl T\ls H\ls E\ls O\ls R\ls E\ls T\ls
680+ I\ls C\ls A\ls L\ns P\ls E\ls A\ls R\ls L%
681+ \epe@rl{Theoretical pearl}%
682+}
683+
684+\def\fpe@rl{\spe@rl F\ls U\ls N\ls C\ls T\ls I\ls O\ls
685+ N\ls A\ls L\ns P\ls E\ls A\ls R\ls L\ls S%
686+ \epe@rl{Functional pearls}%
687+}
688+
689+\def\Fpe@rl{\spe@rl F\ls U\ls N\ls C\ls T\ls I\ls O\ls
690+ N\ls A\ls L\ns P\ls E\ls A\ls R\ls L%
691+ \epe@rl{Functional pearl}%
692+}
693+
694+\def\edpe@rl{\spe@rl E\ls D\ls U\ls C\ls A\ls T\ls I\ls O\ls N\ls A\ls L\ns
695+ P\ls E\ls A\ls R\ls L\ls S%
696+ \epe@rl{Educational pearls}%
697+}
698+
699+\def\Edpe@rl{\spe@rl E\ls D\ls U\ls C\ls A\ls T\ls I\ls O\ls N\ls A\ls L\ns
700+ P\ls E\ls A\ls R\ls L%
701+ \epe@rl{Educational pearl}%
702+}
703+
704+\def\otherpearl{\spe@rl
705+ \@ifundefined{othrpearl}
706+ {Please define {\normalfont\ttfamily\char92 othrpearl} to obtain\\ the correct title!}
707+ {\othrpearl}%
708+ \epe@rl{Short title--please redefine with {\normalfont\ttfamily\char92 shorttitle}}%
709+}
710+
711+\def\authormark#1{\xdef\@authormark{#1}}
712+
713+\def\author{\@ifnextchar [{\@authortwo}{\@authorone}}
714+\def\@authortwo[#1]#2{\@author{#2}\xdef\@authormark{#1}}
715+\def\@authorone#1{\@author{#1}\xdef\@authormark{#1}}
716+%
717+%\def\@author#1{\global\advance\authorcount by 1
718+% \expandafter\xdef\csname author\romannumeral\the\authorcount\endcsname{#1}\affil{}}
719+%
720+\def\@author#1{\global\advance\authorcount by 1
721+ \expandafter\gdef\csname author\romannumeral\the\authorcount\endcsname{#1}}
722+%
723+\def\affil#1{\expandafter\gdef\csname affil\romannumeral\the\authorcount\endcsname{#1}}
724+\def\email#1{\expandafter\gdef\csname email\romannumeral\the\authorcount\endcsname{\normalfont\rmfamily
725+ \itshape\textup{(}e-mail: \textup{\texttt{#1})}}}
726+%
727+\def\and{{\reset@font and}}
728+%
729+\def\authorsep{\unskip, }
730+\newcount\authorcount\authorcount=0
731+\newcount\tempcount
732+\newcount\authortempcount
733+%
734+\def\@authors{%
735+ \ifnum\authorcount>0% %%%% Authors available
736+ \tempcount=1%
737+ \loop%
738+ \ifnum\authorcount>0%
739+ \noindent{\reset@font\authorsize\csname author\romannumeral\the\tempcount \endcsname}\par\vskip3pt%
740+ \noindent{\baselineskip10pt\normalfont\reset@font\affilsize\itshape\csname affil\romannumeral\the\tempcount \endcsname\par}%
741+ \noindent{\baselineskip10pt\normalfont\affilsize\itshape\csname email\romannumeral\the\tempcount \endcsname\par}%
742+% \ifnum\authorcount>1\ifnum\authorcount>2\ \else \ \and\ \fi\fi%
743+ \global\advance\authorcount by -1%
744+ \advance\tempcount by 1 %
745+ \vskip7pt
746+ \repeat
747+ \global\authortempcount\tempcount
748+ \fi}%
749+%
750+\def\spchapter{\@ifnextchar[{\@@spchapter}{\@@spchapter[]}}
751+
752+\def\@@spchapter[#1]#2{\gdef\@spchapter{#2}}
753+\spchapter{}
754+%
755+\ifindex
756+ \def\@maketitle#1{\cleardoublepage\bgroup%
757+ {\vspace*{18pt}\indexheadfont
758+\indexname\par}\vskip43pt
759+ \egroup
760+ }%
761+\else
762+\def\@maketitle#1{%
763+ \newpage\null
764+ \ifbookreview\vskip-29pt\else\vskip-25\p@\fi%
765+ {\centering \sloppy
766+ \pe@rl{#1}%
767+ \ifsptitle
768+ \ifx\@spchapetr\@empty\else{\spchapterfont\@spchapter}\par\vskip7pt\fi%
769+ \else
770+ \ifsplissue
771+ \ifx\@spchapetr\@empty\else{\splissuefont\@spchapter}\par\fi%
772+ \else
773+ \fi
774+ \fi
775+ {\normalfont\LARGE\itshape \@title\par}%
776+ \ifx\@subtitle\@empty%
777+ \else%
778+ \vskip8pt%
779+ {\subtitlefont \@subtitle\par}%
780+% \vskip4pt%
781+ \fi%
782+ \vskip 16\p@
783+ {%
784+ \@authors
785+ \par}%
786+ }%
787+ \ifsptitle\vspace*{-4\p@}\else\vskip 13.5\p@ \fi\ifbookreview\vskip26.5pt\fi%\@plus 2\p@ \@minus 1\p@
788+}
789+\fi
790+\def\abs@header#1{%
791+ \vbox{\hrule \@height .25pt \@width30.05pc
792+ \vskip 8\p@ \@plus 3\p@ \@minus 1\p@
793+ \centerline{\normalfont\normalsize\bfseries #1}}%
794+}
795+
796+\def\abs@body{%
797+ \list{}{\leftmargin\z@ \rightmargin\leftmargin
798+ \listparindent 1em \parsep \z@ \@plus 1\p@
799+ \topsep 8\p@ %\@plus 3\p@ \@minus 1\p@
800+ }%
801+ \item[]\normalfont\small\rmfamily
802+}
803+
804+\newcommand\abstractname{Abstract}
805+\newenvironment{abstract}
806+ {\ifsptitle\vspace*{17.3\p@}\else\fi\abs@header{\abstractname}\abs@body}
807+ {\endlist\vbox{\hrule \@height .25pt \@width 30.05pc}%
808+ \gdef\abs@header##1{\vskip 2\p@
809+ \centerline{\normalfont\normalsize\bfseries ##1}}}
810+
811+\newcommand\capsulename{Capsule Review}
812+\newenvironment{capsule}
813+ {\abs@header{\capsulename}\abs@body}
814+ {\endabstract}
815+
816+
817+\mark{{}{}}
818+
819+\newcommand\shortauthor[1]{\gdef\@shortauthor{#1}}
820+\gdef\@shortauthor{}
821+
822+\renewcommand\title{\@ifnextchar [{\@titletwo}{\@titleone}}
823+\def\@titleone#1{\gdef\@title{#1}\xdef\@shorttitle{#1}}
824+\def\@titletwo[#1]#2{\gdef\@title{#2}\xdef\@shorttitle{#1}}
825+\gdef\@title{\mbox{}}
826+
827+\newcommand\subtitle[1]{\xdef\@subtitle{#1}}
828+\subtitle{}
829+
830+\newcommand\shorttitle[1]{\xdef\@shorttitle{#1}}
831+
832+\newcommand\volume[1]{\gdef\@volume{#1}}
833+\gdef\@volume{{\normalfont\bfseries 1} (1):}
834+
835+\newcommand\pagerange[1]{\gdef\@pagerange{#1}}
836+\gdef\@pagerange{1--000}
837+
838+\newcommand\pubyear[1]{\gdef\@year{#1}}
839+\gdef\@year{19XX}
840+
841+\newcommand\jdate[1]{\gdef\@jdate{#1}}
842+\gdef\@jdate{January \@year}
843+
844+\newcommand\doi[1]{\gdef\@doi{10.1017/#1}}
845+\gdef\@doi{10.1017/S0000000000000000}
846+
847+%% TB
848+
849+\def\Copyright{\raise.2pt\hbox{\fontsize{8}{8}\selectfont\ooalign{\hfil\raise.9pt\hbox{\hskip-.3pt{\normalfont\fontsize{7.5}{7.5}\selectfont
850+c}}%
851+ \hfil\crcr\mathhexbox20D}}}
852+
853+\newcommand\journal[1]{\gdef\@journal{#1}}
854+%
855+\def\pubonline#1{\gdef\@pubonline{#1}}
856+\def\@pubonline{}
857+%
858+\ifonline
859+ \def\@journal{%
860+ \vbox to 8.6\p@{\noindent\parbox[t]{4.8in}{\normalfont\onlineaffilsize\rmfamily
861+ {\itshape JFP\/}\ {\bf \@volume}\ (\@issue):\ \ifonepage\thepage\else\thepage--\pageref{lastpage}\fi* %
862+ (First pubd online \@cpyyear)\hskip5pt \Copyright\
863+ \@cpyyear\ Cambridge University Press\ doi:\@doi\\[2\p@]
864+ *Provisional -- final page numbers to be inserted when paper edition is published}% published
865+ \vss}}
866+\else
867+ \ifincremental
868+ \def\@journal{%
869+ \vbox to 8.6\p@{\noindent\parbox[t]{4.8in}{\sluglinefont%
870+ {\it JFP\kern-1pt{:}\/}\ page \ifonepage\thepage\else\thepage\ of\ \pageref{lastpage}\fi.\hskip7.5pt %
871+ \Copyright\ \@cpyyear\ Cambridge University Press\\[2\p@]
872+ doi:\@doi}%
873+ \vss}}%
874+\else
875+ \def\@journal{%
876+ \vbox to 8.6\p@{\noindent\parbox[t]{4.8in}{\sluglinefont%
877+ {\itshape JFP\/}\ {\bf \@volume}\ (\@issue):\ \ifonepage\thepage\else\thepage--\pageref{lastpage}\fi, %
878+ \@pubyear.\hskip7.5pt \Copyright\
879+ \@cpyyear\ Cambridge University Press\\[2\p@]
880+ doi:\@doi\hskip5pt \ifx\@pubonline\empty\else First published online \@pubonline\fi\hskip5pt {Printed in the United Kingdom}}%{Printed in the United Kingdom}}%
881+ \vss}%
882+}
883+\fi\fi
884+
885+\def\@underjournal{%
886+ \vbox to 5.6\p@{\noindent\parbox[t]{4.8in}{\normalfont\affilsize\rmfamily
887+ {\itshape Under consideration for publication in
888+ J.\ Functional Programming\/}\\[2.5\p@]
889+ \ }%
890+ \vss}%
891+}
892+%%
893+\def\bookrevmark#1{\gdef\@bookrevmark{#1}}
894+\bookrevmark{Book review}
895+%
896+\def\rhfont{\fontsize{11}{11}\selectfont}
897+%%
898+\def\ps@headings{\let\@mkboth\markboth
899+ \def\@oddhead{\hfil{\ifbookreview\fontsize{10}{13}\selectfont\fi\itshape\@shorttitle}\hfil \llap{\rhfont\thepage}}%
900+ \def\@evenhead{\rlap{\rhfont\thepage}\hfil\ifbookreview{\fontsize{10}{13}\selectfont\itshape\@bookrevmark}\else\itshape\@authormark\fi\hfil}%
901+ \let\@oddfoot\@empty
902+ \let\@evenfoot\@oddfoot
903+ \def\sectionmark##1{\markboth{##1}{}}%
904+ \def\subsectionmark##1{\markright{##1}}%
905+}
906+
907+\def\ps@Empty{%
908+ \def\@oddfoot{}%
909+ \let\@evenfoot\@oddfoot
910+ \def\@evenhead{}%
911+ \def\@oddhead{}%
912+ \let\@mkboth\markboth
913+ \let\chaptermark\@gobble
914+ \let\sectionmark\@gobble%
915+}
916+
917+\def\ps@myheadings{\let\@mkboth\@gobbletwo
918+ \def\@oddhead{\hfil{\itshape\rightmark}\hfil \llap{\rhfont\thepage}}%
919+ \def\@evenhead{\rlap{\rhfont\thepage}\hfil\itshape\leftmark\hfil}%
920+ \let\@oddfoot\@empty
921+ \let\@evenfoot\@oddfoot
922+ \let\sectionmark\@gobble
923+ \let\subsectionmark\@gobble
924+}
925+
926+\def\@indjournal{%
927+ \vbox to 6.5\p@{\noindent\parbox[t]{4.8in}{\normalfont\affilsize\rmfamily
928+ {\itshape J. Functional Programming\/}\ {\bf \@volume}\ (\@issue):\
929+\thepage--\pageref{lastpage}, \@pubyear\hskip7.5pt {Printed in
930+United Kingdom}}%
931+ \vss}%
932+}
933+
934+\ifprodtf
935+ \let\@j@urnal\@journal
936+\else
937+ \let\@j@urnal\@underjournal
938+\fi
939+
940+\def\ps@titlepage{\leftskip\z@ \let\@mkboth\@gobbletwo
941+ \def\@oddhead{\ifindex\@indjournal
942+\hfil\hbox{\llap{\rhfont\thepage}}\else\@j@urnal \hfil\raise1.6pt\hbox{\llap{\rhfont\thepage}}\fi}%
943+ \let\@evenhead\@oddhead
944+ \let\@oddfoot\@empty
945+ \let\@evenfoot\@oddfoot
946+ \let\sectionmark\@gobble
947+ \let\subsectionmark\@gobble
948+}
949+
950+\def\@pnumwidth{1.55em}
951+\def\@tocrmarg {2.55em}
952+\def\@dotsep{4.5}
953+\setcounter{tocdepth}{2}
954+
955+\def\@dottedtocline#1#2#3#4#5{% FROM LATEX.LTX
956+ \ifnum #1>\c@tocdepth \else
957+ \vskip \z@ \@plus.2\p@
958+ {\leftskip #2\relax \rightskip \@tocrmarg \parfillskip -\rightskip
959+ \parindent #2\relax\@afterindenttrue
960+ \interlinepenalty\@M
961+ \leavevmode
962+ \@tempdima #3\relax
963+ \advance\leftskip \@tempdima \null\hskip -\leftskip
964+ {#4}\nobreak
965+ \leaders\hbox{$\m@th
966+ \mkern \@dotsep mu\hbox{\phantom{.}}\mkern \@dotsep
967+ mu$}\hfill
968+ \nobreak
969+ \hb@xt@\@pnumwidth{\hfil\normalfont \normalcolor #5}%
970+ \par}%
971+ \fi}
972+
973+\newcommand\contentsname{Contents}
974+
975+\newcommand\tableofcontents{%
976+ \section*{\contentsname}%
977+ \@starttoc{toc}\par
978+ \vspace{13\p@}%
979+}
980+
981+\newcommand*\l@part[2]{%
982+ \ifnum \c@tocdepth >-2\relax
983+ \addpenalty{-\@highpenalty}%
984+ \addvspace{.5\baselineskip \@plus 1\p@}%
985+ \begingroup
986+ \parindent \z@ \rightskip \@pnumwidth
987+ \parfillskip -\@pnumwidth
988+ {\leavevmode
989+ \normalfont\rmfamily
990+ #1\hfil \hb@xt@\@pnumwidth{\hfil}}\par
991+ \nobreak
992+ \if@compatibility
993+ \global\@nobreaktrue
994+ \everypar{\global\@nobreakfalse\everypar{}}%
995+ \fi
996+ \endgroup
997+ \vskip .25\baselineskip \@plus 1\p@
998+ \fi
999+}
1000+
1001+\newcommand*\l@section[2]{%
1002+ \ifnum \c@tocdepth >\z@
1003+ \addpenalty\@secpenalty
1004+ \setlength\@tempdima{1.5em}%
1005+ \begingroup
1006+ \parindent \z@ \rightskip \@pnumwidth
1007+ \parfillskip -\@pnumwidth
1008+ \leavevmode \normalfont\rmfamily
1009+ \advance\leftskip\@tempdima
1010+ \hskip -\leftskip
1011+ {\bfseries #1}\nobreak\hfil \nobreak\hb@xt@\@pnumwidth{\hss #2}\par
1012+ \endgroup
1013+ \fi}
1014+
1015+\newcommand*\l@subsection{\@dottedtocline{2}{1.5em}{2.3em}}
1016+\newcommand*\l@subsubsection{\@dottedtocline{3}{3.8em}{3.2em}}
1017+\newcommand*\l@paragraph{\@dottedtocline{4}{7.0em}{4.1em}}
1018+\newcommand*\l@subparagraph{\@dottedtocline{5}{10em}{5em}}
1019+
1020+\newcommand\listfigurename{List of Figures}
1021+\newcommand\listoffigures{%
1022+ \section*{\listfigurename}%
1023+ \@starttoc{lof}\par
1024+ \vskip 13\p@
1025+}
1026+
1027+\newcommand*\l@figure{\@dottedtocline{1}{1.5em}{2.3em}}
1028+
1029+\newcommand\listtablename{List of Tables}
1030+\newcommand\listoftables{%
1031+ \section*{\listtablename}%
1032+ \@starttoc{lot}\par
1033+ \vskip 13\p@
1034+}
1035+
1036+\let\l@table\l@figure
1037+
1038+\renewcommand\footnoterule{%
1039+ \kern-3\p@
1040+ \hrule \@width .4\columnwidth height \z@
1041+ \kern 3\p@}
1042+
1043+\newif\iftitlefn
1044+
1045+%%
1046+\newbox\tempbox
1047+\newdimen\@footmax
1048+\def\footmax#1{%
1049+ \setbox\tempbox\hbox{\footnotesize$^{#1}$}%
1050+ \global\@footmax\wd\tempbox\global\advance\@footmax.5em}
1051+%
1052+\footmax{0}
1053+%%
1054+\newcommand\@makefntext[1]{%
1055+ \leavevmode\@hangfrom{\hb@xt@ \@footmax{\hss$\iftitlefn\else^\fi{\@thefnmark}\hskip.5em$}}#1}
1056+%%
1057+
1058+\ifprodtf \else \let\highast\ast\fi
1059+
1060+\def\@fnsymbol#1{\ensuremath{% FROM LATEX.LTX
1061+ \ifcase#1\or \hbox{$\highast$}\or \dagger\or \ddagger\or
1062+ \mathchar "278\or \mathchar "27B\or \|\or \hbox{$\highast\highast$}\or
1063+ \dagger\dagger\or \ddagger\ddagger\or \mathchar "278\mathchar "278\or
1064+ \mathchar "27B\mathchar "27B\or \|\|\or \else\@ctrerr\fi}%
1065+}
1066+
1067+\renewcommand\@makefnmark{\hbox{$^{\@thefnmark}$}}% FROM LATEX.LTX
1068+\renewcommand\thefootnote{\@arabic\c@footnote}% FROM LATEX.LTX
1069+\renewcommand\thempfootnote{\mathit{\@alph\c@mpfootnote}}% FROM LATEX.LTX
1070+
1071+\setcounter{topnumber}{2}
1072+\renewcommand\topfraction{.9}
1073+\setcounter{bottomnumber}{1}
1074+\renewcommand\bottomfraction{.9}
1075+\setcounter{totalnumber}{3}
1076+\renewcommand\textfraction{.1}
1077+\renewcommand\floatpagefraction{.9}
1078+\setcounter{dbltopnumber}{2}
1079+\renewcommand\dbltopfraction{.9}
1080+\renewcommand\dblfloatpagefraction{.5}
1081+
1082+\newcounter{table}
1083+\renewcommand\thetable{\@arabic\c@table}
1084+\def\fps@table{tbp}
1085+\def\ftype@table{1}
1086+\def\ext@table{lot}
1087+\newcommand\tablename{Table}
1088+\def\fnum@table{\tablename\ \thetable}
1089+
1090+\newenvironment{table}
1091+ {\@float{table}}
1092+ {\end@float}
1093+
1094+\newenvironment{table*}
1095+ {\@dblfloat{table}}
1096+ {\end@dblfloat}
1097+
1098+\def\fstyle@table{\normalfont\small\rmfamily}
1099+\def\fjust@table{\centering}
1100+\def\fcapjust@table{\centering}
1101+\def\fcapsize@table{\normalfont\normalsize\rmfamily}
1102+\def\fcapstyle@table{\normalfont\normalsize\itshape}
1103+
1104+\newcommand\contname{(cont.)}
1105+\newcommand\continuedfigure{%
1106+ \addtocounter{figure}\m@ne
1107+ \let\curr@thefigure\thefigure
1108+ \def\thefigure{\curr@thefigure\ \contname}%
1109+}
1110+
1111+\newcommand\continuedtable{%
1112+ \addtocounter{table}\m@ne
1113+ \let\curr@thetable\thetable
1114+ \def\thetable{\curr@thetable\ \contname}%
1115+}
1116+
1117+\newif\ifrem@fullpt
1118+\newcommand\removefullpoint{\global\rem@fullpttrue}
1119+
1120+\newif\ifbot@fig
1121+\newenvironment{bottomfigure}{\def\fps@figure{b}%
1122+ \setcounter{bottomnumber}{1}%
1123+ \global\bot@figtrue
1124+ \@float{figure}\fstyle@figure}
1125+ {\end@float}
1126+
1127+\newbox\@tempboxb
1128+
1129+\def\enskip{\hskip4.5pt}
1130+\long\def\@makecaption#1#2{%
1131+ \ifbot@fig \rule{30.05pc}{.25\p@}\fi
1132+ \vskip 0\p@ %\@plus .4\p@ \@minus .4\p@
1133+ \begingroup
1134+ \setbox\@tempboxb\hbox{#2}%
1135+ \def\@xtra{\ifdim\wd\@tempboxb>\z@ \ifrem@fullpt\else .\enskip\fi\fi}%
1136+ \setbox\@tempboxa\hbox{#1\@xtra #2}%
1137+ \ifdim\wd\@tempboxa>\tw@\textwidth
1138+ {\let\centering\relax #1\@xtra #2\par}%
1139+ \else
1140+ #1\@xtra #2\par
1141+ \fi
1142+ \endgroup
1143+ \global\bot@figfalse
1144+ \global\rem@fullptfalse
1145+}
1146+
1147+\newcounter{figure}
1148+\renewcommand\thefigure{\@arabic\c@figure}
1149+\def\fps@figure{tbp}
1150+\def\ftype@figure{2}
1151+\def\ext@figure{lof}
1152+\newcommand\figurename{Fig.}
1153+\def\fnum@figure{\figurename\ \thefigure}
1154+
1155+\newenvironment{figure}
1156+ {\@float{figure}}
1157+ {\end@float}
1158+
1159+\newenvironment{figure*}
1160+ {\@dblfloat{figure}}
1161+ {\end@dblfloat}
1162+
1163+\def\fstyle@figure{\normalfont\small\rmfamily}
1164+\def\fjust@figure{\centering}
1165+\def\fcapjust@figure{\centering}
1166+\def\fcapsize@figure{\normalfont\small\rmfamily}
1167+\def\fcapstyle@figure{\normalfont\small\rmfamily}
1168+
1169+\long\def\@caption#1[#2]#3{% FROM LATEX.LTX
1170+ \par
1171+ \addcontentsline{\csname ext@#1\endcsname}{#1}%
1172+ {\protect\numberline{\csname the#1\endcsname}{\ignorespaces #2}}%
1173+ \begingroup
1174+ \@parboxrestore
1175+ \if@minipage
1176+ \@setminipage
1177+ \fi
1178+ \normalsize
1179+ \@makecaption{\csname fcapjust@#1\endcsname
1180+ \csname fcapsize@#1\endcsname
1181+ \csname fnum@#1\endcsname}%
1182+ {\csname fcapstyle@#1\endcsname \ignorespaces #3}\par
1183+ \endgroup
1184+}
1185+
1186+\def\@xfloat #1[#2]{% FROM LATEX.LTX
1187+ \@nodocument
1188+ \def\@captype {#1}%
1189+ \def\@fps {#2}%
1190+ \@onelevel@sanitize \@fps
1191+ \def \reserved@b {!}%
1192+ \ifx \reserved@b \@fps
1193+ \@fpsadddefault
1194+ \else
1195+ \ifx \@fps \@empty
1196+ \@fpsadddefault
1197+ \fi
1198+ \fi
1199+ \ifhmode
1200+ \@bsphack
1201+ \@floatpenalty-\@Mii
1202+ \else
1203+ \@floatpenalty-\@Miii
1204+ \fi
1205+ \ifinner
1206+ \@parmoderr\@floatpenalty\z@
1207+ \else
1208+ \@next\@currbox\@freelist
1209+ {%
1210+ \@tempcnta \sixt@@n
1211+ \expandafter \@tfor \expandafter \reserved@a
1212+ \expandafter :\expandafter =\@fps
1213+ \do
1214+ {%
1215+ \if \reserved@a h%
1216+ \ifodd \@tempcnta
1217+ \else
1218+ \advance \@tempcnta \@ne
1219+ \fi
1220+ \fi
1221+ \if \reserved@a t%
1222+ \@setfpsbit \tw@
1223+ \fi
1224+ \if \reserved@a b%
1225+ \@setfpsbit 4%
1226+ \fi
1227+ \if \reserved@a p%
1228+ \@setfpsbit 8%
1229+ \fi
1230+ \if \reserved@a !%
1231+ \ifnum \@tempcnta>15
1232+ \advance\@tempcnta -\sixt@@n\relax
1233+ \fi
1234+ \fi
1235+ }%
1236+ \@tempcntb \csname ftype@\@captype \endcsname
1237+ \multiply \@tempcntb \@xxxii
1238+ \advance \@tempcnta \@tempcntb
1239+ \global \count\@currbox \@tempcnta
1240+ }%
1241+ \@fltovf
1242+ \fi
1243+ \global \setbox\@currbox
1244+ \color@vbox
1245+ \normalcolor
1246+ \vbox \bgroup
1247+ \hsize\columnwidth
1248+ \@parboxrestore
1249+ \@floatboxreset
1250+ \csname fstyle@\@captype\endcsname
1251+ \csname fjust@\@captype\endcsname
1252+}
1253+
1254+\let\oldtabular\tabular
1255+\let\endoldtabular\endtabular
1256+
1257+\def\tabular{% FROM LATEX.LTX
1258+ \def\@halignto{to \textwidth}\tabskip\tabcolsep \@plus 1fil\@ttabular
1259+}
1260+
1261+\def\@ttabular{\leavevmode \hbox \bgroup $\let\@acol\@tabacol
1262+ \let\@classz\@tabclassz
1263+ \let\@classiv\@tabclassiv \let\\\@tabularcr\@ttabarray}
1264+
1265+\def\@ttabarray{\m@th\@ifnextchar[\@tarray{\@ttarray}}
1266+
1267+\def\@tarray[#1]#2{\t@barray[#1]{@{\tabskip\tw@\tabcolsep \@plus 3\p@}#2}}
1268+\def\@ttarray#1{\t@barray[c]{@{\tabskip\tw@\tabcolsep \@plus 3\p@}#1}}
1269+
1270+\def\t@barray[#1]#2{%
1271+ \if #1t\vtop \else \if#1b\vbox \else \vcenter \fi\fi
1272+ \bgroup
1273+ \setbox\@arstrutbox\hbox{%
1274+ \vrule \@height\arraystretch\ht\strutbox
1275+ \@depth\arraystretch \dp\strutbox
1276+ \@width\z@}%
1277+ \@mkpream{#2}%
1278+ \edef\@preamble{%
1279+ \halign \noexpand\@halignto
1280+ \bgroup \tabskip\z@skip \@arstrut \@preamble \tabskip\tabcolsep \@plus 1fil\cr}%
1281+ \let\@startpbox\@@startpbox \let\@endpbox\@@endpbox
1282+ \let\tabularnewline\\%
1283+ \let\par\@empty
1284+ \let\@sharp##%
1285+ \set@typeset@protect
1286+ \lineskip\z@skip\baselineskip\z@skip
1287+ \@preamble}
1288+
1289+\newcommand\ls{\kern.15em\relax}
1290+\newcommand\ns{\kern.55em\relax}
1291+
1292+\def\hline{% FROM LATEX.LTX
1293+ \noalign{\ifnum0=`}\fi \vskip 6\p@
1294+ \hrule \@height \arrayrulewidth \vskip 6\p@
1295+ \futurelet \reserved@a\@xhline}
1296+
1297+\def\@xhline{% FROM LATEX.LTX
1298+ \ifx\reserved@a\hline
1299+ \vskip -12\p@
1300+ \vskip\doublerulesep
1301+ \fi
1302+ \ifnum0=`{\fi}}
1303+
1304+\newcommand\today{}
1305+\edef\today{\number\day\ \ifcase\month\or
1306+ January\or February\or March\or April\or May\or June\or
1307+ July\or August\or September\or October\or November\or December
1308+ \fi \ \number\year}
1309+
1310+\renewcommand\@biblabel[1]{}% FROM LATEX.LTX
1311+\newcommand\newblock{\hskip .11em \@plus .33em \@minus .07em}
1312+
1313+\newcommand\refname{References}
1314+\newenvironment{thebibliography}[1]
1315+ {\section*{\refname}%
1316+ \normalfont\small\rmfamily
1317+ \addcontentsline{toc}{section}{\refname}%
1318+ \list{}{\usecounter{enumiv}\labelwidth\z@ \leftmargin 9pt \itemindent -9pt}%
1319+ \parindent\z@
1320+ \parskip 2\p@ \@plus .1\p@
1321+ \sloppy\clubpenalty\z@ \widowpenalty\@M
1322+ \sfcode`\.\@m\relax}
1323+ {\def\@noitemerr
1324+ {\@latex@warning{Empty `thebibliography' environment}}%
1325+ \endlist}
1326+%
1327+%
1328+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% End Bibliography Section %%%%%%%%%%%%%%%%
1329+\def\@citex[#1]#2{% FROM LATEX.LTX
1330+ \let\@citea\@empty
1331+ \@cite{\@for\@citeb:=#2\do
1332+ {\@citea\def\@citea{; }%
1333+ \edef\@citeb{\expandafter\@firstofone\@citeb}%
1334+ \if@filesw\immediate\write\@auxout{\string\citation{\@citeb}}\fi
1335+ \@ifundefined{b@\@citeb}{\mbox{\reset@font\bfseries ?}%
1336+ \G@refundefinedtrue
1337+ \@latex@warning
1338+ {Citation `\@citeb' on page \thepage \space undefined}}%
1339+ {\csname b@\@citeb\endcsname}}}{#1}}
1340+
1341+\def\@cite#1#2{{\if@tempswa #2\else (#1)\fi}}% FROM LATEX.LTX
1342+
1343+\let\@internalcite\cite
1344+\def\cite{\def\citename##1{##1}\@internalcite}
1345+\DeclareRobustCommand\shortcite{\def\citename##1{}\@internalcite}
1346+
1347+\newif\iffontfound
1348+\newcommand\checkfont[1]{%
1349+ \batchmode
1350+ \font\test=#1\relax
1351+ \errorstopmode
1352+ \fontfoundfalse
1353+ \ifx\test\nullfont \else \fontfoundtrue\fi
1354+}
1355+%%%%%%%%%%%
1356+%
1357+\def\ct@indenttext#1{\parindent24pt{\par\hangindent48pt #1\par}}
1358+\def\ct@Indenttext#1{\parindent48pt{\par\hangindent48pt #1\par}}
1359+%
1360+%
1361+%
1362+\newcount\minute
1363+\newcount\hour
1364+\def\currenttime{%
1365+ \minute\time
1366+ \hour\minute
1367+ \divide\hour60
1368+ \the\hour:\multiply\hour60\advance\minute-\hour\the\minute}
1369+%%%%%
1370+\def\gray{\special{color CMYK 0 0 0 0.5}}
1371+\def\@questionmark{\vbox to 0pt{\vskip13pc\hskip-5pc
1372+ \hbox to \textwidth{\special{color push}\gray\fontsize{270}{270}\selectfont ?
1373+ \special{color pop}\hss}}}
1374+\def\questionmark#1{\xdef\@questionmark{#1}}%
1375+%
1376+\def\@TotalChars{}
1377+\def\TotalChars#1{\xdef\@TotalChars{#1}}%
1378+%%
1379+\def\document{\endgroup
1380+ \ifx\@unusedoptionlist\@empty\else
1381+ \@latex@warning@no@line{Unused global option(s):^^J%
1382+ \@spaces[\@unusedoptionlist]}%
1383+ \fi
1384+ \@colht\textheight
1385+ \@colroom\textheight \vsize\textheight
1386+ \columnwidth\textwidth
1387+ \@clubpenalty\clubpenalty
1388+ \if@twocolumn
1389+ \advance\columnwidth -\columnsep
1390+ \divide\columnwidth\tw@ \hsize\columnwidth \@firstcolumntrue
1391+ \fi
1392+ \hsize\columnwidth \linewidth\hsize
1393+ \begingroup\@floatplacement\@dblfloatplacement
1394+ \makeatletter\let\@writefile\@gobbletwo
1395+ \global \let \@multiplelabels \relax
1396+ \@input{\jobname.aux}%
1397+ \endgroup
1398+ \if@filesw
1399+ \immediate\openout\@mainaux=\jobname.aux
1400+ \immediate\write\@mainaux{\relax}
1401+ \fi
1402+ \process@table
1403+ \let\glb@currsize\@empty %% Force math initialization.
1404+ \normalsize
1405+ \everypar{}%
1406+ \ifx\normalsfcodes\@empty
1407+ \ifnum\sfcode`\.=\@m
1408+ \let\normalsfcodes\frenchspacing
1409+ \else
1410+ \let\normalsfcodes\nonfrenchspacing
1411+ \fi
1412+ \fi
1413+ \@noskipsecfalse
1414+ \let \@refundefined \relax
1415+ \let\AtBeginDocument\@firstofone
1416+ \@begindocumenthook
1417+ \ifdim\topskip<1sp\global\topskip 1sp\relax\fi
1418+ \global\@maxdepth\maxdepth
1419+ \global\let\@begindocumenthook\@undefined
1420+ \ifx\@listfiles\@undefined
1421+ \global\let\@filelist\relax
1422+ \global\let\@addtofilelist\@gobble
1423+ \fi
1424+ \gdef\do##1{\global\let ##1\@notprerr}%
1425+ \@preamblecmds
1426+ \global\let \@nodocument \relax
1427+ \global\let\do\noexpand
1428+ \ignorespaces}
1429+%
1430+%%
1431+\def\enddocument{\label{lastpage}%
1432+ \@checkend{document}%
1433+ \@enddocumenthook
1434+ \ifodd\c@page\cleardoublepage\else\clearpage\fi
1435+ \begingroup
1436+ \if@filesw
1437+ \immediate\write\@mainaux{\string\questionmark{}}%
1438+ \immediate\closeout\@mainaux
1439+ \let\@setckpt\@gobbletwo
1440+ \let\@newl@bel\@testdef
1441+ \@tempswafalse
1442+ \makeatletter
1443+ \catcode`\\0
1444+ \catcode`\{1
1445+ \catcode`\}2
1446+ \catcode`\^=7
1447+ \catcode`\_=8
1448+ \catcode`\&=4
1449+ \catcode`\$=3
1450+ \catcode`\@11
1451+ \catcode`\#6
1452+ \catcode`\"=12
1453+ \input\jobname.aux
1454+ \fi
1455+ \@dofilelist
1456+ \ifdim \font@submax >\fontsubfuzz\relax
1457+ \@font@warning{Size substitutions with differences\MessageBreak
1458+ up to \font@submax\space have occured.\@gobbletwo}%
1459+ \fi
1460+ \@defaultsubs
1461+ \@refundefined
1462+ \if@filesw
1463+ \ifx \@multiplelabels \relax
1464+ \if@tempswa
1465+ \@latex@warning@no@line{Label(s) may have changed.
1466+ Rerun to get cross-references right}%
1467+ \fi
1468+ \else
1469+ \@multiplelabels
1470+ \fi
1471+ \fi
1472+ \endgroup
1473+ \deadcycles\z@\@@end}
1474+%%
1475+\def\@outputpage{%
1476+\begingroup % the \endgroup is put in by \aftergroup
1477+ \let \protect \noexpand
1478+ \@resetactivechars
1479+ \@parboxrestore
1480+ \shipout \vbox{%
1481+ \set@typeset@protect
1482+ \aftergroup \endgroup
1483+ \aftergroup \set@typeset@protect
1484+ % correct? or just restore by ending
1485+ % the group?
1486+ \if@specialpage
1487+ \global\@specialpagefalse\@nameuse{ps@\@specialstyle}%
1488+ \fi
1489+ \if@twoside
1490+ \ifodd\count\z@ \let\@thehead\@oddhead \let\@thefoot\@oddfoot
1491+ \let\@themargin\oddsidemargin
1492+ \else \let\@thehead\@evenhead
1493+ \let\@thefoot\@evenfoot \let\@themargin\evensidemargin
1494+ \fi
1495+ \fi
1496+ \reset@font
1497+ \normalsize
1498+ \normalsfcodes
1499+ \let\label\@gobble
1500+ \let\index\@gobble
1501+ \let\glossary\@gobble
1502+ \baselineskip\z@skip \lineskip\z@skip \lineskiplimit\z@
1503+ \@begindvi\trimmarks
1504+ \vskip \topmargin
1505+ \moveright\@themargin \vbox {%
1506+ \setbox\@tempboxa \vbox to\headheight{%
1507+ \vfil
1508+ \color@hbox
1509+ \normalcolor
1510+ \hb@xt@\textwidth{\@thehead}%
1511+ \color@endbox
1512+ }% %% 22 Feb 87
1513+ \dp\@tempboxa \z@
1514+ \box\@tempboxa
1515+ \vskip \headsep
1516+ \box\@outputbox
1517+ \baselineskip \footskip
1518+ \color@hbox
1519+ \normalcolor
1520+ \hb@xt@\textwidth{\@thefoot}%
1521+ \color@endbox
1522+ }%
1523+ }%
1524+ \global \@colht \textheight
1525+ \stepcounter{page}%
1526+ \let\firstmark\botmark
1527+ \ifodd\c@page
1528+ \ifspreadlong\global\spreadlongfalse
1529+ \enlargethispage{\@spreadlong}\fi
1530+ \fi
1531+}
1532+%%%%%
1533+\newif\ifspreadlong
1534+\def\spreadlong#1{\ifodd\c@page\wlog{Ignoring spreadlong}
1535+ \else
1536+ \spreadlongtrue\gdef\@spreadlong{#1}%
1537+ \enlargethispage{#1}%
1538+ \fi}
1539+% check specs and enable one or both of these commands
1540+\def\leaflong#1{\enlargethispage{#1}}
1541+%%%%%
1542+\def\trimmarks{%
1543+ \vbox to 0pt{%
1544+ \vskip-25pt\parindent0pt
1545+ \draftnote\offinterlineskip}%
1546+ \ifdraft
1547+ \vbox to 0pt{\hsize\trimwidth\offinterlineskip
1548+ \parindent0pt\leftskip0pt\rightskip0pt
1549+ \fboxsep0pt\fboxrule\draftrule
1550+ \fbox{\vbox{\vskip\trimheight\hskip\trimwidth}}}%
1551+%
1552+ \vbox to 0pt{\hsize\trimwidth\offinterlineskip
1553+ \parindent0pt\leftskip0pt\rightskip0pt
1554+ \vbox to \trimheight{\offinterlineskip\parindent0pt
1555+ \hbox to \trimwidth{\vbox to 2pc{\vskip-3.5pc\hbox{\vrule height2pc width\trimrule}}\raisebox{2pc}{\hbox{\hskip-3.5pc\vrule width2pc height\trimrule}}\hfill
1556+ \raisebox{2pc}{\vrule width2pc height\trimrule\hskip-3.75pc}
1557+ \vbox to 2pc{\vskip-3.5pc\hbox{\vrule height2pc width\trimrule}}%
1558+ }\vfill
1559+ \hbox to \trimwidth{\hbox{\hskip-3.5pc\vrule height\trimrule width2pc}\vbox to 3pc{\vspace*{4.5pc}\hbox{\hskip1.5pc\vrule width\trimrule height2pc}}\hfill
1560+ \vbox to 3.5pc{\vskip5pc\hbox{\vrule height2pc width\trimrule}}\rlap{\hskip1.5pc\vrule width2pc height\trimrule}}}}%
1561+%
1562+ \else
1563+ \vbox to 0pt{\hsize\trimwidth\offinterlineskip
1564+ \parindent0pt\leftskip0pt\rightskip0pt
1565+ \vbox to \trimheight{\offinterlineskip\parindent0pt
1566+ \hbox to \trimwidth{\vbox to 2pc{\vskip-3.5pc\hbox{\vrule height2pc width\trimrule}}\raisebox{2pc}{\hbox{\hskip-3.5pc\vrule width2pc height\trimrule}}\hfill
1567+ \raisebox{2pc}{\vrule width2pc height\trimrule\hskip-3.75pc}
1568+ \vbox to 2pc{\vskip-3.5pc\hbox{\vrule height2pc width\trimrule}}%
1569+ }\vfill
1570+ \hbox to \trimwidth{\hbox{\hskip-3.5pc\vrule height\trimrule width2pc}\vbox to 3pc{\vspace*{4.5pc}\hbox{\hskip1.5pc\vrule width\trimrule height2pc}}\hfill
1571+ \vbox to 3.5pc{\vskip5pc\hbox{\vrule height2pc width\trimrule}}\rlap{\hskip1.5pc\vrule width2pc height\trimrule}}}}
1572+\fi
1573+\insidedraftrules}
1574+%
1575+\def\insidedraftrules{\overfullrule0pt\leftskip0pt\rightskip0pt\vbox to 0pt{%
1576+ \offinterlineskip\parindent0pt
1577+ \vskip \topmargin
1578+ \tempdimen\normaltextheight
1579+ \advance\tempdimen\headheight
1580+ \advance\tempdimen\headsep
1581+ \moveright\@themargin
1582+ \vbox{\vbox to 0pt{\vskip\headheight\vskip\headsep\vskip.2pt
1583+ \vrule height\draftrule width\textwidth
1584+ }
1585+ \hbox{\fboxsep0pt\fboxrule\draftrule
1586+ \fbox{\vbox to \tempdimen
1587+ {\hsize\textwidth\hskip\textwidth}}}}}}%
1588+%
1589+
1590+%%
1591+%%
1592+\usepackage{rotating}
1593+%%
1594+\ifprinter
1595+ \def\draftnote{}
1596+ \def\Qauthor{}
1597+\else
1598+\def\draftnote{\vbox to 0pt{\vskip-12pt
1599+ \hbox{\ \footnotesize}}%\TeXversion
1600+ \hbox{\ \footnotesize ZU064-05-FPR\qquad\jobname\qquad\today\qquad\currenttime\qquad %Char Count= \@TotalChars
1601+ \@questionmark\hfil}}%
1602+ \def\Qauthor#1{\marginpar{{\raggedright\footnotesize\bf #1\endgraf}}}
1603+\fi
1604+%%
1605+\newdimen\figheight
1606+\newdimen\figwidth
1607+%
1608+\def\ArtDir{art/}%
1609+\input epsf.sty
1610+%
1611+\newbox\figtempbox
1612+\def\ArtPiece#1{\epsfbox{\ArtDir#1}}%
1613+%
1614+\def\figurebox#1#2{%
1615+ \@ifnextchar[{\@figurebox{#1}{#2}}{\@figurebox{#1}{#2}[]}}
1616+%
1617+\def\@figurebox#1#2[#3]{%
1618+ \gdef\@thirdarg{#3}%
1619+ \ifx\@thirdarg\empty
1620+ \global\figheight=#1
1621+ \global\figwidth=#2
1622+ \else
1623+ \setbox\figtempbox=\hbox{\epsfbox{\ArtDir\@thirdarg}}%
1624+ \global\figwidth=\wd\figtempbox
1625+ \global\figheight=\ht\figtempbox
1626+ \fi
1627+ \centerline{\figbox}
1628+ \vskip7pt}%
1629+%
1630+\def\figbox{%
1631+ \ifx\@thirdarg\empty
1632+ \vbox{\vskip.3pt\hsize\figwidth
1633+ \hrule\hbox to\figwidth{\vrule\hfill\vbox to\figheight{%
1634+ \hsize\figwidth\vfill}\vrule}\hrule}%
1635+ \else
1636+ \vbox{\hsize\figwidth
1637+ \hbox to\figwidth{\vbox to\figheight{\hsize\figwidth\box\figtempbox}}}%
1638+ \fi}
1639+%
1640+%
1641+%
1642+\newdimen\tabledim
1643+\newskip\tableleftskip
1644+\newskip\tablerightskip
1645+\newskip\tabnoteleftskip
1646+\newskip\tabnoterightskip
1647+\newdimen\tablewidth
1648+%
1649+
1650+%
1651+\def\tbl#1#2{%
1652+ \setbox\tempbox\hbox{\tablefont#2}%
1653+ \tabledim\hsize
1654+ \advance\tabledim-\wd\tempbox
1655+ \ifdim\tabledim>0pt
1656+ \divide\tabledim2
1657+ \else
1658+ \global\tabledim0pt
1659+ \fi
1660+ \global\tableleftskip\tabledim
1661+ \global\tablerightskip\tabledim plus.5fill
1662+ \global\tabnoteleftskip\tabledim
1663+ \global\tabnoterightskip\tabledim
1664+ \caption{\tablefont #1}%
1665+ {\centerline{\box\tempbox}}}%
1666+%
1667+\let\bulletlist\itemize
1668+\let\endbulletlist\enditemize
1669+\let\arabiclist\enumerate
1670+\let\endarabiclist\endenumerate
1671+\let\ulist\unnumlist
1672+\let\endulist\endunnumlist
1673+\def\bibauthor#1{{#1}}
1674+\def\x{@{\extracolsep{\fill}}}
1675+\def\tablefont{\fontsize{9}{11}\selectfont}%\leftskip\tableleftskip\rightskip\tablerightskip\mathversion{normal}}% use plus 1fill if needed
1676+\def\tablecaptionfont{\fontsize{10}{12}\selectfont\itshape\leftskip\tableleftskip\rightskip\tablerightskip}%\itshape
1677+\def\tablecaptionnumfont{\reset@font\fontsize{10}{12}\selectfont}%
1678+\def\TCHfont{\fontsize{9}{13}\selectfont}%
1679+\def\TSCHfont{}%
1680+\def\tabnotefont{\fontsize{9}{11}\selectfont\leftskip\tabnoteleftskip\rightskip\tabnoterightskip}% use plus 1fill if needed
1681+\def\toprule{\\[-5pt]\Hline\\[-9pt]\Hline\\[-7.1pt]}
1682+\def\colrule{\\[-7.8pt]\HHline\\[-7pt]}
1683+\def\Colrule{\\[-8.6pt]\HHline\\[-5.2pt]}
1684+\def\botrule{\\[-8.3pt]\Hline\\[-9pt]\Hline}
1685+\def\crule#1{\\[-10.9pt]#1\\[-21.4pt]}
1686+%
1687+\def\Hline{%
1688+ \noalign{\ifnum0=`}\fi\hrule \@height .5pt \futurelet%\@height \arrayrulewidth
1689+ \@tempa\@xhline}
1690+%
1691+\def\HHline{%
1692+ \noalign{\ifnum0=`}\fi\hrule \@height .5pt \futurelet%\@height \arrayrulewidth
1693+ \@tempa\@xhline}
1694+%
1695+%
1696+%
1697+\def\pubDate#1{(#1)}
1698+%
1699+\newenvironment{ack}{\par\addvspace{\baselineskip}}{\par}
1700+%
1701+\def\@Afterheading{%
1702+ \global\@nobreaktrue
1703+ \everypar{%
1704+ \if@nobreak
1705+ \global\@nobreakfalse
1706+ \clubpenalty \@M
1707+ \if@afterindent \else
1708+ {\setbox\z@\lastbox}%
1709+ \fi
1710+ \else
1711+ \clubpenalty \@clubpenalty
1712+ \everypar{}%
1713+ \fi}}
1714+%
1715+\def\getBIBNUM#1{%
1716+ \expandafter\getstring#1\@}
1717+%
1718+\def\getstring #1#2#3#4\@{\gdef\@@getstr{#1#2#3}}
1719+%
1720+\let\summary\abstract
1721+\let\endsummary\endabstract
1722+\let\makechaptertitle\relax
1723+%
1724+\@namedef{equation*}{$$}
1725+\@namedef{endequation*}{$$}
1726+%
1727+\gdef\zero@{0}
1728+\gdef\REF{ref}
1729+\gdef\removedash#1-#2-#3#4#5#6#7#8#9{%
1730+\gdef\tempa{#2}%
1731+\gdef\tempb{#3}%
1732+\ifx\tempa\REF%
1733+\else%
1734+\ifx\tempb\N%
1735+\expandafter\removezeros#7#8#9%
1736+\else%
1737+\fi%
1738+\fi%
1739+\gdef\tempa{}\gdef\tempb{}}
1740+%
1741+\gdef\N{n}
1742+%
1743+\gdef\removezeros#1#2#3{%
1744+\gdef\tempd{#1}%
1745+\gdef\tempe{#2}%
1746+\gdef\tempf{#3}%
1747+\ifnum\tempd=\zero@%
1748+ \ifnum\tempe=\zero@%
1749+ $^\tempf$%
1750+ \else%
1751+ $^{\tempe\tempf}$%
1752+ \fi%
1753+\else%
1754+ $^{\tempd\tempe\tempf}$%
1755+\fi
1756+\gdef\tempd{}\gdef\tempe{}\gdef\tempf{}}
1757+\newcount\colcount
1758+\newcount\firstcol
1759+\newcount\lastcol
1760+\def\getCOLNUM#1#2{
1761+\global\colcount\expandafter\getnumber#2
1762+\global\advance\colcount-\expandafter\getnumber#1
1763+\global\advance\colcount1
1764+\global\firstcol\expandafter\getnumber#1
1765+\global\lastcol\expandafter\getnumber#2}
1766+%
1767+%\def\getnumber col#1{#1}
1768+\def\getnumber #1{#1}
1769+%
1770+\gdef\removexref#1-#2-#3#4#5#6#7#8{%
1771+\thechapter.\expandafter\removexzeros#6#7#8}
1772+%
1773+\gdef\removehash#1#2{#2}
1774+\gdef\removexzeros#1#2#3{%
1775+\gdef\tempd{#1}%
1776+\gdef\tempe{#2}%
1777+\gdef\tempf{#3}%
1778+\ifnum\tempd=\zero@%
1779+ \ifnum\tempe=\zero@%
1780+{\tempf}%
1781+ \else%
1782+{\tempe\tempf}%
1783+ \fi%
1784+\else%
1785+{\tempd\tempe\tempf}%
1786+\fi
1787+\gdef\tempd{}\gdef\tempe{}\gdef\tempf{}}
1788+%
1789+\newif\ifframed
1790+\newif\ifnotablenum
1791+%
1792+\renewcommand{\textellipsis}{%
1793+ .\kern\fontdimen3\font
1794+ .\kern\fontdimen3\font
1795+ .\kern\fontdimen3\font}
1796+%
1797+%
1798+\let\thenotes\Notes
1799+\let\endthenotes\endNotes
1800+\let\endnote\Enote
1801+\def\listhead#1{}
1802+\let\parahead\prhead
1803+%
1804+\let\@chaptertitle\@chaptitle
1805+%
1806+\def\Pound{\hbox{\char'243}}%
1807+%
1808+\newbox\tempbox
1809+%
1810+\def\pubyear#1{\gdef\@pubyear{#1}}%\pubyear{2002}
1811+\def\cpyyear#1{\gdef\@cpyyear{#1}}%\pubyear{2002}
1812+\cpyyear{}
1813+%\def\volume#1{\gdef\@volume{#1}}%\volume{xxx}
1814+\def\issue#1{\gdef\@issue{#1}}%\volume{xxx}
1815+\issue{}
1816+\def\doi#1{\gdef\@doi{#1}}%\doi{10.1017$/$S002211200100622X}
1817+%
1818+\let\chapter\title
1819+%
1820+\def\indexfont{\fontsize{9}{10}\selectfont}
1821+%
1822+\def\alphabet#1{{\bf#1}\par\vskip.5\baselineskip}
1823+
1824+%
1825+\def\indexheadfont{\fontsize{18.5}{20.5}\selectfont\bfseries\centering}
1826+\newcommand\indexname{Author index}
1827+\newenvironment{theindex}[2][\relax]{\thispagestyle{empty}\authormark{\indexname}%\global\indextrue%%
1828+ \ifx#2\relax\else\gdef\indexname{#2}\fi%
1829+ \ifx#1\relax\else\gdef\indexhead{#1}\fi%
1830+ \maketitle\indexfont%
1831+ \parindent\z@
1832+ \let\item\@idxitem
1833+}{%
1834+ \par%\global\indexfalse
1835+}
1836+\newcommand\@idxitem {\par\hangindent9pt}
1837+\newcommand\subitem {\par\hangindent2em\hspace*{1em}}
1838+\newcommand\subsubitem{\par\hangindent2em\hspace*{2em}}
1839+\newcommand\indexspace{\par \vskip\baselineskip}
1840+%
1841+\newenvironment{indexpara}{\setbox\tempbox\hbox\bgroup}{\egroup}
1842+\def\au#1{{\indexfont\scshape#1}}
1843+\def\ttl#1{{\indexfont#1}}
1844+%
1845+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
1846+
1847+%\newcommand\email[1]{\par{\normalfont\rmfamily
1848+% \itshape\textup{(}e-mail: \textup{\texttt{#1})}}\par}
1849+
1850+\edef\r@{\ifprodtf mtr\else cmr\fi}
1851+%\edef\s@{\ifprodtf mtss\else cmr\fi}
1852+
1853+\let\real@font@warning\@font@warning
1854+\DeclareMathVersion{program}
1855+\let\@font@warning\@gobble
1856+\SetSymbolFont{letters}{program}{OT1}{\r@}{m}{sl}
1857+\let\@font@warning\real@font@warning
1858+\SetMathAlphabet{\mathnormal}{program}{OT1}{\r@}{m}{sl}
1859+
1860+
1861+\newcommand{\programmath}{\mathversion{program}}
1862+\newcommand{\unprogrammath}{\mathversion{normal}}
1863+\newcommand{\figrule}{\begin{center}\hrule\end{center}}
1864+
1865+\DeclareRobustCommand\dplus{\mathbin{+\!\!+}}
1866+\DeclareRobustCommand\dequals{\mathbin{==}}
1867+\DeclareRobustCommand\dcolon{\mathbin{::}}
1868+\DeclareRobustCommand\dcolonequals{\mathbin{::=}}
1869+
1870+\pagestyle{headings}
1871+\pagenumbering{arabic}
1872+\frenchspacing
1873+\flushbottom
1874+
1875+\def\parahead#1{}
1876+
1877+\ifprinter
1878+\voffset-18.4mm
1879+\hoffset-25.4mm
1880+\else
1881+\voffset2.3pc
1882+\hoffset-1pc
1883+\fi
1884+%%
1885+\ifcompmod
1886+\else
1887+ \usepackage{mathptmx,bm}
1888+ \DeclareMathVersion{bold}
1889+ \usepackage{amsfonts}
1890+\fi
1891+%%
1892+\endinput
1893+
1894+% end of file jfp.cls
impl-paper/library.bibnew file+992
@@ -0,0 +1,992 @@
1+Automatically generated by Mendeley 1.3.1
2+Any changes to this file will be lost if it is regenerated by Mendeley.
3+
4+@inproceedings{Levitation2010,
5+author = {Chapman, James and Dagand, Pierre-Evariste and McBride, Conor and Morris, Peter},
6+booktitle = {ICFP15th ACM SIGPLAN International Conference on Functional programming (ICFP '10)},
7+doi = {10.1145/1932681.1863547},
8+file = {:Users/edwin/Library/Application Support/Mendeley Desktop/Downloaded/Chapman et al. - 2010 - The gentle art of levitation.pdf:pdf},
9+isbn = {978-1-60558-794-3},
10+issn = {03621340},
11+keywords = {Dependent Types,data structure,metaprogramming,monads,proof assistants,type systems},
12+mendeley-tags = {Dependent Types},
13+month = sep,
14+number = {9},
15+pages = {3},
16+title = {{The gentle art of levitation}},
17+url = {http://dl.acm.org/citation.cfm?id=1932681.1863547},
18+volume = {45},
19+year = {2010}
20+}
21+@article{Brady2006a,
22+author = {Brady, E and Hammond, K},
23+file = {:Users/edwin/Library/Application Support/Mendeley Desktop/Downloaded/Brady, Hammond - 2006 - A verified staged interpreter is a verified compiler.pdf:pdf},
24+journal = {\ldots of the 5th international conference on \ldots},
25+keywords = {Dependent Types},
26+mendeley-tags = {Dependent Types},
27+title = {{A verified staged interpreter is a verified compiler}},
28+url = {http://portal.acm.org/citation.cfm?id=1173706.1173724},
29+year = {2006}
30+}
31+@article{Chapman2005epigram,
32+author = {Chapman, James and Altenkirch, Thorsten and McBride, Conor},
33+file = {:Users/edwin/Documents/Papers/Chapman/2005 Chapman-Epigram reloaded a standalone typechecker.pdf:pdf},
34+journal = {Trends in Functional Programming},
35+publisher = {Intellect Books},
36+title = {{Epigram Reloaded: A Standalone Typechecker for {ETT}}},
37+url = {http://books.google.co.uk/books?hl=en&amp;lr=&amp;id=p0yV1sHLubcC&amp;oi=fnd&amp;pg=PA79&amp;dq=epigram+reloaded&amp;ots=x50ou0VMsm&amp;sig=7TjAGohIatNLTWsHcuNcK5hEGGY},
38+year = {2005}
39+}
40+@article{McBride2007,
41+author = {McBride, Conor and Paterson, Ross},
42+file = {:Users/edwin/Library/Application Support/Mendeley Desktop/Downloaded/McBride, Paterson - 2007 - Applicative programming with effects.pdf:pdf},
43+journal = {Journal of functional programming},
44+title = {{Applicative programming with effects}},
45+url = {http://journals.cambridge.org/abstract_S0956796807006326},
46+year = {2007}
47+}
48+@misc{dagand2011transporting,
49+author = {Dagand, Pierre-Evariste and McBride, Conor},
50+file = {:Users/edwin/Library/Application Support/Mendeley Desktop/Downloaded/Dagand, McBride - 2011 - Transporting Functions across Ornaments.pdf:pdf},
51+title = {{Transporting Functions across Ornaments}},
52+url = {http://personal.cis.strath.ac.uk/$\sim$dagand/stuffs/paper-2011-patch/paper.pdf},
53+year = {2011}
54+}
55+@inproceedings{Brady2003,
56+author = {Brady, Edwin and McBride, Conor and McKinna, James},
57+booktitle = {Types for Proofs and Programs},
58+file = {:Users/edwin/Library/Application Support/Mendeley Desktop/Downloaded/Brady, McBride, McKinna - 2003 - Inductive families need not store their indices.pdf:pdf},
59+keywords = {Dependent Types},
60+mendeley-tags = {Dependent Types},
61+title = {{Inductive families need not store their indices}},
62+url = {http://www.springerlink.com/index/WBXJJG717N2W3NU2.pdf},
63+year = {2003}
64+}
65+@inproceedings{norell2009dependently,
66+author = {Norell, Ulf},
67+booktitle = {Advanced Functional Programming},
68+file = {:Users/edwin/Library/Application Support/Mendeley Desktop/Downloaded/Norell - 2009 - Dependently typed programming in Agda.pdf:pdf},
69+keywords = {Dependent Types},
70+mendeley-tags = {Dependent Types},
71+pages = {230--266},
72+publisher = {Springer},
73+title = {{Dependently typed programming in Agda}},
74+url = {http://www.springerlink.com/index/8X0H38858233VN26.pdf},
75+year = {2009}
76+}
77+@article{mcbride2010ornamental,
78+author = {McBride, Conor},
79+file = {:Users/edwin/Library/Application Support/Mendeley Desktop/Downloaded/McBride - 2010 - Ornamental algebras, algebraic ornaments.pdf:pdf},
80+journal = {Journal of Functional Programming},
81+title = {{Ornamental algebras, algebraic ornaments}},
82+url = {http://personal.cis.strath.ac.uk/$\sim$conor/pub/OAAO/Ornament.pdf},
83+year = {2010}
84+}
85+@misc{Brady2012c,
86+author = {Brooks, Fred},
87+doi = {10.1093/epirev/mxr031},
88+file = {:Users/edwin/Library/Application Support/Mendeley Desktop/Downloaded/Brooks - Unknown - The Design of Design Chapter 5.pdf:pdf},
89+isbn = {9780321702081},
90+issn = {1478-6729},
91+number = {1},
92+pages = {NP},
93+pmid = {22215642},
94+title = {{The Design of Design Chapter 5}},
95+volume = {34}
96+}
97+@inproceedings{brady2011epic,
98+author = {Brady, Edwin},
99+booktitle = {Trends in Functional Programming ({TFP}’11)},
100+file = {:Users/edwin/Library/Application Support/Mendeley Desktop/Downloaded/Brady - 2011 - Epic—A Library for Generating Compilers.pdf:pdf},
101+title = {{Epic --- A Library for Generating Compilers}},
102+url = {http://scholar.google.co.uk/scholar?cites=2588300990390214449&as_sdt=2005&sciodt=0,5&hl=en#1},
103+year = {2011}
104+}
105+@inproceedings{chlipala2010ur,
106+author = {Chlipala, Adam},
107+booktitle = {ACM SIGPLAN Notices},
108+file = {:Users/edwin/Library/Application Support/Mendeley Desktop/Downloaded/Chlipala - 2010 - Ur statically-typed metaprogramming with type-level record computation.pdf:pdf},
109+number = {6},
110+pages = {122--133},
111+publisher = {ACM},
112+title = {{Ur: statically-typed metaprogramming with type-level record computation}},
113+url = {http://dl.acm.org/citation.cfm?id=1806612},
114+volume = {45},
115+year = {2010}
116+}
117+@article{loh2010tutorial,
118+author = {L\"{o}h, A. and McBride, C. and Swierstra, W.},
119+file = {:Users/edwin/Library/Application Support/Mendeley Desktop/Downloaded/L\"{o}h, McBride, Swierstra - 2010 - A tutorial implementation of a dependently typed lambda calculus.pdf:pdf},
120+journal = {Fundamenta Informaticae},
121+number = {2},
122+pages = {177--207},
123+publisher = {IOS Press},
124+title = {{A tutorial implementation of a dependently typed lambda calculus}},
125+url = {http://iospress.metapress.com/index/976W4716TM79M6U8.pdf},
126+volume = {102},
127+year = {2010}
128+}
129+@inproceedings{Brady2010,
130+author = {Brady, Edwin and Hammond, Kevin},
131+booktitle = {Proceedings of the 15th ACM SIGPLAN international conference on Functional programming},
132+file = {:Users/edwin/Library/Application Support/Mendeley Desktop/Downloaded/Brady, Hammond - 2010 - Scrapping your inefficient engine using partial evaluation to improve domain-specific language implementation.pdf:pdf},
133+isbn = {9781605587943},
134+keywords = {Dependent Types,code generation gives,contrast,dependent types,efficient,harder,however,implementation,likely efficient,ness interpreter,partial evaluation,resulting implementation,un,verify its correctness},
135+mendeley-tags = {Dependent Types},
136+pages = {297--308},
137+publisher = {ACM},
138+title = {{Scrapping your inefficient engine: using partial evaluation to improve domain-specific language implementation}},
139+url = {http://portal.acm.org/citation.cfm?id=1863587},
140+year = {2010}
141+}
142+@misc{The2012c,
143+author = {Robbins, A and Hannah, E and Lamb, L},
144+doi = {10.1093/epirev/mxr031},
145+file = {:Users/edwin/Library/Application Support/Mendeley Desktop/Downloaded/Robbins, Hannah, Lamb - Unknown - Learning the vi and Vim Editors.pdf:pdf},
146+isbn = {9780596529833},
147+issn = {1478-6729},
148+pmid = {22215642},
149+title = {{Learning the vi and Vim Editors}}
150+}
151+@article{Haskell2012a,
152+author = {Biancuzzi, F and Warden, S},
153+doi = {10.1093/epirev/mxr031},
154+file = {:Users/edwin/Library/Application Support/Mendeley Desktop/Downloaded/Biancuzzi, Warden - Unknown - Masterminds of Programming Chapter 8.pdf:pdf},
155+isbn = {9780596801670},
156+issn = {1478-6729},
157+pmid = {22215642},
158+title = {{Masterminds of Programming Chapter 8}}
159+}
160+@inproceedings{Brady2006b,
161+author = {Brady, Edwin},
162+booktitle = {Implementation and Application of Functional Languages ({IFL}'06)},
163+file = {:Users/edwin/Library/Application Support/Mendeley Desktop/Downloaded/Brady - 2006 - Ivor, a proof engine.pdf:pdf},
164+isbn = {978-3-540-74129-9},
165+month = sep,
166+pages = {145----162},
167+title = {{Ivor, a proof engine}},
168+url = {http://dl.acm.org/citation.cfm?id=1757028.1757037},
169+year = {2006}
170+}
171+@article{Hoare1978,
172+abstract = {This paper suggests that input and output are basic primitives of programming and that parallel composition of communicating sequential processes is a fundamental program structuring method. When combined with a development of Dijkstra's guarded command, these concepts are surprisingly versatile. Their use is illustrated by sample solutions of a variety of a familiar programming exercises.},
173+author = {Hoare, C A R},
174+doi = {10.1016/0167-6423(87)90028-1},
175+editor = {McKeag, R M and Macnaghten, A M},
176+file = {:Users/edwin/Library/Application Support/Mendeley Desktop/Downloaded/Hoare - 1978 - Communicating sequential processes.pdf:pdf},
177+isbn = {0131532715},
178+issn = {01676423},
179+journal = {Communications of the ACM},
180+number = {8},
181+pages = {666--677},
182+pmid = {2142694823583477576},
183+publisher = {ACM},
184+series = {International Series in Computer Science},
185+title = {{Communicating sequential processes}},
186+url = {http://linkinghub.elsevier.com/retrieve/pii/0167642387900281},
187+volume = {21},
188+year = {1978}
189+}
190+@inproceedings{Sheard2005,
191+address = {New York, New York, USA},
192+author = {Sheard, Tim},
193+booktitle = {Proceedings of the 2005 ACM SIGPLAN workshop on Haskell - Haskell '05},
194+doi = {10.1145/1088348.1088356},
195+file = {:Users/edwin/Library/Application Support/Mendeley Desktop/Downloaded/Sheard - 2005 - Putting curry-howard to work.pdf:pdf},
196+isbn = {159593071X},
197+keywords = {GADT,curry-howard isomorphism,extensional kind system,haskell,logic},
198+month = sep,
199+pages = {74--85},
200+publisher = {ACM Press},
201+title = {{Putting curry-howard to work}},
202+url = {http://dl.acm.org/citation.cfm?id=1088348.1088356},
203+year = {2005}
204+}
205+@inproceedings{Pasalic2002,
206+author = {Pa\v{s}alic, Emir and Taha, Walid and Sheard, Tim},
207+booktitle = {International Conference on Functional Programming},
208+doi = {10.1145/583852.581499},
209+file = {:Users/edwin/Library/Application Support/Mendeley Desktop/Downloaded/Pa\v{s}alic, Taha, Sheard - 2002 - Tagless staged interpreters for typed languages.pdf:pdf},
210+isbn = {1-58113-487-8},
211+issn = {03621340},
212+keywords = {calculus of constructions,definitional interpreters,domain-specific languages,multi-stage programming},
213+month = sep,
214+number = {9},
215+pages = {218--229},
216+title = {{Tagless staged interpreters for typed languages}},
217+url = {http://dl.acm.org/citation.cfm?id=583852.581499},
218+volume = {37},
219+year = {2002}
220+}
221+@inproceedings{gibbons2011modularising,
222+author = {Gibbons, J. and Ko, H.S. and Others},
223+file = {:Users/edwin/Library/Application Support/Mendeley Desktop/Downloaded/Ko, Gibbons - 2011 - Modularising inductive families.pdf:pdf},
224+title = {{Modularising inductive families}},
225+url = {http://www.cs.ox.ac.uk/publications/publication5008-abstract.html},
226+year = {2011}
227+}
228+@inproceedings{NanevskiAAMorrisett2008,
229+abstract = {We describe an axiomatic extension to the Coq proof assistant, that supports writing, reasoning about, and extracting higher-order, dependently-typed programs with side-effects. Coq already includes a powerful functional language that supports dependent types, but that language is limited to pure, total functions. The key contribution of our extension, which we call Ynot, is the added support for computations that may have effects such as non-termination, accessing a mutable store, and throwing/catching exceptions. The axioms of Ynot form a small trusted computing base which has been formally justified in our previous work on Hoare Type Theory (HTT). We show how these axioms can be combined with the powerful type and abstraction mechanisms of Coq to build higher-level reasoning mechanisms which in turn can be used to build realistic, verified software components. To substantiate this claim, we describe here a representative series of modules that implement imperative finite maps, including support for a higher-order (effectful) iterator. The implementations range from simple (e.g., association lists) to complex (e.g., hash tables) but share a common interface which, abstracts the implementation details and ensures that the modules properly implement the finite map abstraction. Copyright 2008 ACM.},
230+author = {{Nanevski A A Morrisett}, G B Shinnar A B Govereau P B Birkedal L C},
231+booktitle = {International Conference on Functional Programming},
232+doi = {10.1145/1411204.1411237},
233+file = {:Users/edwin/Library/Application Support/Mendeley Desktop/Downloaded/Nanevski A A Morrisett - 2008 - Ynot Dependent types for imperative programs.pdf:pdf},
234+isbn = {9781595939197},
235+issn = {15232867},
236+keywords = {Dependent Types},
237+mendeley-tags = {Dependent Types},
238+number = {9},
239+pages = {229--240},
240+title = {{Ynot: Dependent types for imperative programs}},
241+url = {http://www.scopus.com/inward/record.url?eid=2-s2.0-67650032847&partnerID=40&md5=7a5be3083878399cebafda33b1affa6b},
242+volume = {43},
243+year = {2008}
244+}
245+@article{mccann2000packet,
246+author = {McCann, P.J. and Chandra, S.},
247+journal = {ACM SIGCOMM Computer Communication Review},
248+number = {4},
249+pages = {321--333},
250+publisher = {ACM},
251+title = {{Packet types: abstract specification of network protocol messages}},
252+url = {http://dl.acm.org/citation.cfm?id=347563},
253+volume = {30},
254+year = {2000}
255+}
256+@inproceedings{lempsink2009type,
257+author = {Lempsink, E. and Leather, S. and L\"{o}h, A.},
258+booktitle = {Proceedings of the 2009 ACM SIGPLAN workshop on Generic programming},
259+file = {:Users/edwin/Library/Application Support/Mendeley Desktop/Downloaded/Lempsink, Leather, L\"{o}h - 2009 - Type-safe diff for families of datatypes.pdf:pdf},
260+pages = {61--72},
261+publisher = {ACM},
262+title = {{Type-safe diff for families of datatypes}},
263+url = {http://dl.acm.org/citation.cfm?id=1596624},
264+year = {2009}
265+}
266+@inproceedings{augustsson1999exercise,
267+author = {Augustsson, L. and Carlsson, M.},
268+booktitle = {In Workshop on Dependent Types in Programming, Gothenburg},
269+keywords = {Depe},
270+mendeley-tags = {Depe},
271+publisher = {Citeseer},
272+title = {{An exercise in dependent types: A well-typed interpreter}},
273+url = {http://citeseerx.ist.psu.edu/viewdoc/summary?doi=10.1.1.39.2895},
274+year = {1999}
275+}
276+@article{McBride2005,
277+author = {McBride, Conor},
278+editor = {Vene, Varmo and Uustalu, Tarmo},
279+isbn = {3540285407},
280+journal = {Advanced Functional Programming},
281+keywords = {Dependent Types},
282+mendeley-tags = {Dependent Types},
283+pages = {130--170},
284+publisher = {Springer},
285+series = {Lecture Notes in Computer Science},
286+title = {{Epigram: Practical programming with dependent types}},
287+url = {http://www.springerlink.com/index/96j7v5vn8tyebeky.pdf},
288+volume = {3622},
289+year = {2005}
290+}
291+@book{peyton1987implementation,
292+author = {{Peyton Jones}, S.L.},
293+publisher = {Prentice-Hall, Inc.},
294+title = {{The implementation of functional programming languages (prentice-hall international series in computer science)}},
295+url = {http://dl.acm.org/citation.cfm?id=1096899},
296+year = {1987}
297+}
298+@article{Jones1999,
299+abstract = {Haskell benefits from a sophisticated type system, but implementors, programmers, and researchers suffer because it has no formal description. To remedy this shortcoming, we present a Haskell program that implements a Haskell typechecker, thus providing a mathematically rigorous specification in a notation that is familiar to Haskell users. We expect this program to fill a serious gap in current descriptions of Haskell, both as a starting point for discussions about existing features of the type system, and as a platform from which to explore new proposals.},
300+author = {Jones, Mark P},
301+journal = {October},
302+publisher = {Citeseer},
303+title = {{Typing Haskell in Haskell}},
304+url = {http://citeseerx.ist.psu.edu/viewdoc/download?doi=10.1.1.134.7274&amp;rep=rep1&amp;type=pdf},
305+year = {1999}
306+}
307+@misc{Bove2008,
308+abstract = {In these lecture notes we give an introduction to functional programming with dependent types. We use the dependently typed programming language Agda which is based on ideas in Martin-L\"{o}f type theory and Martin-L\"{o}fs logical framework. We begin by showing how to do simply typed functional programming, and discuss the differences between Agdas type system and the Hindley-Milner type system, which underlies mainstream typed functional programming languages like Haskell and ML. We then show how to employ dependent types for programming with functional data structures such as vectors and binary search trees. We go on to explain the Curry-Howard identification of propositions and types, and how it makes Agda not only a programming language but also a programming logic. According to Curry-Howard, we also identify programs and proofs, something which is possible only by requiring that all program terminate. However, we show in the final section a method for encoding general and possibly partial recursive functions as total functions using dependent types.},
309+author = {Bove, Ana and Dybjer, Peter},
310+booktitle = {Notes},
311+doi = {10.1007/978-3-642-03153-3_2},
312+file = {:Users/edwin/Library/Application Support/Mendeley Desktop/Downloaded/Bove, Dybjer - 2008 - Dependent Types at Work.pdf:pdf},
313+number = {February},
314+pages = {57--99},
315+publisher = {Springer},
316+title = {{Dependent Types at Work}},
317+url = {http://www.springerlink.com/index/1039q8qk71257677.pdf},
318+volume = {5520},
319+year = {2008}
320+}
321+@inproceedings{madhavapeddy2010turning,
322+author = {Madhavapeddy, A. and Mortier, R. and Sohan, R. and Gazagnaire, T. and Hand, S. and Deegan, T. and McAuley, D. and Crowcroft, J.},
323+booktitle = {Proceedings of the 2nd USENIX conference on Hot topics in cloud computing},
324+file = {:Users/edwin/Library/Application Support/Mendeley Desktop/Downloaded/Madhavapeddy et al. - 2010 - Turning down the LAMP software specialisation for the cloud.pdf:pdf},
325+publisher = {USENIX Association},
326+title = {{Turning down the LAMP: software specialisation for the cloud}},
327+url = {http://dl.acm.org/citation.cfm?id=1863114},
328+year = {2010}
329+}
330+@article{gordon2003authenticity,
331+author = {Gordon, A.D. and Jeffrey, A.},
332+file = {:Users/edwin/Library/Application Support/Mendeley Desktop/Downloaded/Gordon, Jeffrey - 2003 - Authenticity by typing for security protocols.pdf:pdf},
333+journal = {Journal of computer security},
334+number = {4},
335+pages = {451--520},
336+publisher = {IOS Press},
337+title = {{Authenticity by typing for security protocols}},
338+url = {http://iospress.metapress.com/index/BHQQUFRA1C7W8TLY.pdf},
339+volume = {11},
340+year = {2003}
341+}
342+@inproceedings{ko2011modularising,
343+author = {Ko, H.S. and Gibbons, J.},
344+booktitle = {Proceedings of the seventh ACM SIGPLAN workshop on Generic programming},
345+pages = {13--24},
346+publisher = {ACM},
347+title = {{Modularising inductive families}},
348+url = {http://dl.acm.org/citation.cfm?id=2036921},
349+year = {2011}
350+}
351+@inproceedings{l,
352+author = {L\"{a}mmel, R. and Jones, S.P.},
353+booktitle = {ACM SIGPLAN Notices},
354+file = {:Users/edwin/Library/Application Support/Mendeley Desktop/Downloaded/L\"{a}mmel, Jones - 2003 - Scrap your boilerplate a practical design pattern for generic programming.pdf:pdf},
355+number = {3},
356+pages = {26--37},
357+publisher = {ACM},
358+title = {{Scrap your boilerplate: a practical design pattern for generic programming}},
359+url = {http://dl.acm.org/citation.cfm?id=640136.604179},
360+volume = {38},
361+year = {2003}
362+}
363+@inproceedings{bhargavan2010modular,
364+author = {Bhargavan, K. and Fournet, C. and Gordon, A.D.},
365+booktitle = {ACM Sigplan Notices},
366+number = {1},
367+pages = {445--456},
368+publisher = {ACM},
369+title = {{Modular verification of security protocol code by typing}},
370+url = {http://dl.acm.org/citation.cfm?id=1707801.1706350},
371+volume = {45},
372+year = {2010}
373+}
374+@inproceedings{stump2010resource,
375+author = {Stump, A. and Austin, E.},
376+booktitle = {Proceedings of the 4th ACM SIGPLAN workshop on Programming languages meets program verification},
377+file = {:Users/edwin/Library/Application Support/Mendeley Desktop/Downloaded/Stump, Austin - 2010 - Resource typing in Guru.pdf:pdf},
378+pages = {27--38},
379+publisher = {ACM},
380+title = {{Resource typing in Guru}},
381+url = {http://dl.acm.org/citation.cfm?id=1707796},
382+year = {2010}
383+}
384+@phdthesis{norell2007thesis,
385+author = {Norell, Ulf},
386+file = {:Users/edwin/Library/Application Support/Mendeley Desktop/Downloaded/Norell - 2007 - Towards a practical programming language based on dependent type theory.pdf:pdf},
387+keywords = {Dependent Types},
388+mendeley-tags = {Dependent Types},
389+publisher = {Citeseer},
390+school = {Chalmers University of Technology},
391+title = {{Towards a practical programming language based on dependent type theory}},
392+url = {http://citeseerx.ist.psu.edu/viewdoc/download?doi=10.1.1.65.7934&amp;rep=rep1&amp;type=pdf},
393+year = {2007}
394+}
395+@article{Epstein2011,
396+author = {Epstein, Jeff and Black, Andrew P and Peyton-jones, Simon},
397+institution = {Microsoft Research},
398+journal = {researchmicrosoftcom},
399+number = {Section 8},
400+pages = {1--12},
401+title = {{Haskell for the cloud}},
402+url = {http://research.microsoft.com/en-us/um/people/simonpj/papers/parallel/remote.pdf},
403+year = {2011}
404+}
405+@inproceedings{Visser2008,
406+author = {Visser, E},
407+booktitle = {Generative and Transformational Techniques in Software Engineering},
408+title = {{WebDSL: A case study in domain-specific language engineering}},
409+url = {http://www.springerlink.com/index/A3213003X6268032.pdf},
410+year = {2008}
411+}
412+@inproceedings{taha1997multi,
413+author = {Taha, W. and Sheard, T.},
414+booktitle = {ACM SIGPLAN Notices},
415+number = {12},
416+pages = {203--217},
417+publisher = {ACM},
418+title = {{Multi-stage programming with explicit annotations}},
419+url = {http://dl.acm.org/citation.cfm?id=259019},
420+volume = {32},
421+year = {1997}
422+}
423+@article{Hughes1989,
424+abstract = {As software becomes more and more complex, it is more and more important to structure it well. Well-structured software is easy to write, easy to debug, and provides a collection of modules that can be re-used to reduce future programming costs. Conventional languages place conceptual limits on the way problems can be modularised. Functional languages push those limits back. In this paper we show that two features of functional languages in particular, higher-order functions and lazy evaluation, can contribute greatly to modularity. As examples, we manipulate lists and trees, program several numerical algorithms, and implement the alpha-beta heuristic (an algorithm from Artificial Intelligence used in game-playing programs). Since modularity is the key to successful programming, functional languages are vitally important to the real world.},
425+author = {Hughes, J},
426+chapter = {2},
427+doi = {10.1093/comjnl/32.2.98},
428+editor = {Turner, David A},
429+file = {:Users/edwin/Library/Application Support/Mendeley Desktop/Downloaded/Hughes - 1989 - Why Functional Programming Matters.pdf:pdf},
430+institution = {Programming Methodology Group, University of {G\"{o}teborg} and Chalmers Institute of Technology, Sweden},
431+isbn = {0201172364},
432+issn = {00104620},
433+journal = {The Computer Journal},
434+number = {2},
435+pages = {98--107},
436+publisher = {Br Computer Soc},
437+title = {{Why Functional Programming Matters}},
438+url = {http://comjnl.oupjournals.org/cgi/doi/10.1093/comjnl/32.2.98},
439+volume = {32},
440+year = {1989}
441+}
442+@article{marlow2006making,
443+author = {Marlow, S. and {Peyton Jones}, S.},
444+file = {:Users/edwin/Library/Application Support/Mendeley Desktop/Downloaded/Marlow, Peyton Jones - 2006 - Making a fast curry pushenter vs. evalapply for higher-order languages.pdf:pdf},
445+journal = {Journal of Functional Programming},
446+number = {4-5},
447+pages = {415--449},
448+publisher = {Cambridge University Press},
449+title = {{Making a fast curry: push/enter vs. eval/apply for higher-order languages}},
450+url = {http://dl.acm.org/citation.cfm?id=1166018},
451+volume = {16},
452+year = {2006}
453+}
454+@article{Mandelbaum2007,
455+abstract = {Massive amounts of useful data are stored and processed in ad hoc formats for which common tools like parsers, printers, query engines and format converters are not readily available. In this paper, we explain the design and implementation of PADS/ML , a new language and system that facilitates the generation of data processing tools for ad hoc formats. The PADS/ML design includes features such as dependent, polymorphic and recursive datatypes, which allow programmers to describe the syntax and semantics of ad hoc data in a concise, easy-to-read notation. The PADS/ML implementation compiles these descriptions into ml structures and functors that include types for parsed data, functions for parsing and printing, and auxiliary support for user-specified, format-dependent and format-independent tool generation.},
456+author = {Mandelbaum, Yitzhak and Fisher, Kathleen and Walker, David and Fernandez, Mary and Gleyzer, Artem},
457+doi = {10.1145/1190215.1190231},
458+isbn = {1595935754},
459+issn = {03621340},
460+journal = {SIGPLAN Not},
461+number = {1},
462+pages = {77--83},
463+publisher = {ACM},
464+series = {POPL '07},
465+title = {{PADS/ML: a functional data description language}},
466+url = {http://doi.acm.org/10.1145/1190216.1190231},
467+volume = {42},
468+year = {2007}
469+}
470+@phdthesis{McBride1999,
471+author = {McBride, Conor},
472+file = {:Users/edwin/Library/Application Support/Mendeley Desktop/Downloaded/McBride - 1999 - Dependently typed functional programs and their proofs.pdf:pdf},
473+keywords = {Dependent Types},
474+mendeley-tags = {Dependent Types},
475+school = {University of Edinburgh},
476+title = {{Dependently typed functional programs and their proofs}},
477+url = {http://citeseerx.ist.psu.edu/viewdoc/download?doi=10.1.1.26.4785&rep=rep1&type=pdf},
478+year = {1999}
479+}
480+@inproceedings{oury2008power,
481+author = {Oury, N. and Swierstra, W.},
482+booktitle = {International Conference on Functional Programming},
483+file = {:Users/edwin/Library/Application Support/Mendeley Desktop/Downloaded/Oury, Swierstra - 2008 - The power of Pi.pdf:pdf},
484+keywords = {Dependent Types},
485+mendeley-tags = {Dependent Types},
486+number = {9},
487+pages = {39--50},
488+publisher = {ACM},
489+title = {{The power of Pi}},
490+url = {http://dl.acm.org/citation.cfm?id=1411213},
491+volume = {43},
492+year = {2008}
493+}
494+@inproceedings{atkey2009unembedding,
495+author = {Atkey, R. and Lindley, S. and Yallop, J.},
496+booktitle = {Proceedings of the 2nd ACM SIGPLAN symposium on Haskell},
497+pages = {37--48},
498+publisher = {ACM},
499+title = {{Unembedding domain-specific languages}},
500+url = {http://dl.acm.org/citation.cfm?id=1596644},
501+year = {2009}
502+}
503+@misc{Abel1998,
504+author = {Abel, Andreas},
505+booktitle = {Language},
506+file = {:Users/edwin/Downloads/10.1.1.44.3494.pdf:pdf},
507+title = {{foetus - Termination Checker for Simple Functional Programs}},
508+year = {1998}
509+}
510+@inproceedings{Brady2005a,
511+author = {Brady, E and Hammond, K},
512+booktitle = {Implementation and Application of Functional \ldots},
513+file = {:Users/edwin/Library/Application Support/Mendeley Desktop/Downloaded/Brady, Hammond - 2005 - A dependently typed framework for static analysis of program execution costs.pdf:pdf},
514+keywords = {Dependent Types},
515+mendeley-tags = {Dependent Types},
516+title = {{A dependently typed framework for static analysis of program execution costs}},
517+url = {http://www.springerlink.com/index/P446P2HH70107759.pdf},
518+year = {2005}
519+}
520+@misc{altenkirch2005dependent,
521+author = {Altenkirch, T. and McBride, C. and McKinna, J.},
522+booktitle = {Manuscript, available online},
523+file = {:Users/edwin/Library/Application Support/Mendeley Desktop/Downloaded/Altenkirch, McBride, McKinna - 2005 - Why dependent types matter.pdf:pdf},
524+title = {{Why dependent types matter}},
525+url = {http://www.cs.nott.ac.uk/$\sim$txa/talks/splst11.pdf},
526+year = {2005}
527+}
528+@misc{Resolution2012a,
529+author = {Fall, Kevin R and Stevens, W. Richard},
530+doi = {10.1093/epirev/mxr031},
531+file = {:Users/edwin/Library/Application Support/Mendeley Desktop/Downloaded/Fall, Stevens - Unknown - TCPIP Illustrated Volume 1 Chapter 11.pdf:pdf},
532+issn = {1478-6729},
533+pmid = {22215642},
534+title = {{TCP/IP Illustrated Volume 1 Chapter 11}}
535+}
536+@inproceedings{madhavapeddy2007melange,
537+author = {Madhavapeddy, A. and Ho, A. and Deegan, T. and Scott, D. and Sohan, R.},
538+booktitle = {ACM SIGOPS Operating Systems Review},
539+file = {:Users/edwin/Library/Application Support/Mendeley Desktop/Downloaded/Madhavapeddy et al. - 2007 - Melange creating a functional internet.pdf:pdf},
540+number = {3},
541+pages = {101--114},
542+publisher = {ACM},
543+title = {{Melange: creating a functional internet}},
544+url = {http://dl.acm.org/citation.cfm?id=1273009},
545+volume = {41},
546+year = {2007}
547+}
548+@misc{The2012b,
549+author = {Brooks, Fred},
550+doi = {10.1093/epirev/mxr031},
551+file = {:Users/edwin/Library/Application Support/Mendeley Desktop/Downloaded/Brooks - Unknown - The Design of Design Chapter 1.pdf:pdf},
552+isbn = {9780321702081},
553+issn = {1478-6729},
554+pmid = {22215642},
555+title = {{The Design of Design Chapter 1}}
556+}
557+@phdthesis{Brady2005,
558+author = {Brady, Edwin},
559+file = {:Users/edwin/Library/Application Support/Mendeley Desktop/Downloaded/Brady - 2005 - Practical Implementation of a Dependently Typed Functional Programming \ldots.pdf:pdf},
560+keywords = {Dependent Types},
561+mendeley-tags = {Dependent Types},
562+school = {University of Durham},
563+title = {{Practical Implementation of a Dependently Typed Functional Programming Language}},
564+url = {http://citeseerx.ist.psu.edu/viewdoc/download?doi=10.1.1.150.8284&rep=rep1&type=pdf},
565+year = {2005}
566+}
567+@inproceedings{swierstra2007beauty,
568+author = {Swierstra, W. and Altenkirch, T.},
569+booktitle = {Proceedings of the ACM SIGPLAN workshop on Haskell workshop},
570+file = {:Users/edwin/Library/Application Support/Mendeley Desktop/Downloaded/Swierstra, Altenkirch - 2007 - Beauty in the beast.pdf:pdf},
571+pages = {25--36},
572+publisher = {ACM},
573+title = {{Beauty in the beast}},
574+url = {http://dl.acm.org/citation.cfm?id=1291206},
575+year = {2007}
576+}
577+@article{McBride2004a,
578+abstract = {ABSTRACT Pattern matching has proved an extremely powerful and durable notion in functional programming. This paper contributes a new programming notation for type theory which elaborates the notion in various ways. First, as is by now quite well-known in the type theory community, definition by pattern matching becomes a more discriminating tool in the presence of dependent types, since it refines the explanation of types as well as values. This becomes all the more true in the presence of the rich class of datatypes known as inductive families (Dybjer, 1991). Secondly, as proposed by Peyton Jones (1997) for Haskell, and independently rediscovered by us, subsidiary case analyses on the results of intermediate computations, which commonly take place on the right-hand side of definitions by pattern matching, should rather be handled on the left. In simply-typed languages, this subsumes the trivial case of Boolean guards; in our setting it becomes yet more powerful. Thirdly, elementary pattern matching decompositions have a well-defined interface given by a dependent type; they correspond to the statement of an induction principle for the datatype. More general, user-definable decompositions may be defined which also have types of the same general form. Elementary pattern matching may therefore be recast in abstract form, with a semantics given by translation. Such abstract decompositions of data generalize Wadler&apos;s (1987) notion of &lsquo;view&rsquo;. The programmer wishing to introduce a new view of a type mathitT, and exploit it directly in pattern matching, may do so via a standard programming idiom. The type theorist, looking through the Curry&ndash;Howard lens, may see this as proving a theorem, one which establishes the validity of a new induction principle for mathitT. We develop enough syntax and semantics to account for this high-level style of programming in dependent type theory. We close with the development of a typechecker for the simply-typed lambda calculus, which furnishes a view of raw terms as either being well-typed, or containing an error. The implementation of this view is ipso facto a proof that typechecking is decidable.},
579+author = {McBride, Conor and McKinna, James},
580+doi = {10.1017/S0956796803004829},
581+file = {:Users/edwin/Library/Application Support/Mendeley Desktop/Downloaded/McBride, McKinna - 2004 - The view from the left.pdf:pdf},
582+issn = {09567968},
583+journal = {Journal of Functional Programming},
584+keywords = {Dependent Types},
585+mendeley-tags = {Dependent Types},
586+number = {1},
587+pages = {69--111},
588+publisher = {Cambridge University Press},
589+title = {{The view from the left}},
590+url = {http://www.journals.cambridge.org/abstract_S0956796803004829},
591+volume = {14},
592+year = {2004}
593+}
594+@inproceedings{Augustsson1998,
595+abstract = {Cayenne is a Haskell-like language. The main difference between Haskell and Cayenne is that Cayenne has dependent types, i.e., the result type of a function may depend on the argument value , and types of record components (which can be types or values) may depend on other components. Cayenne also combines the syntactic categories for value expressions and type expressions; thus reducing the number of language concepts. Having dependent types and combined type and value expressions makes the language very powerful. It is powerful enough that a special module concept is unnecessary; ordinary records suffice. It is also powerful enough to encode predicate logic at the type level, allowing types to be used as specifications of programs. However, this power comes at a cost: type checking of Cayenne is undecidable. While this may appear to be a steep price to pay, it seems to work well in practice.},
596+author = {Augustsson, Lennart},
597+booktitle = {International Conference on Functional Programming},
598+doi = {10.1097/MEG.0b013e328342f213},
599+file = {:Users/edwin/Library/Application Support/Mendeley Desktop/Downloaded/Augustsson - 1998 - Cayenne - a language with dependent types.pdf:pdf},
600+issn = {14735687},
601+keywords = {Depe,Dependent Types},
602+mendeley-tags = {Depe,Dependent Types},
603+number = {1},
604+pages = {239--250},
605+pmid = {21139473},
606+publisher = {ACM Press},
607+title = {{Cayenne - a language with dependent types}},
608+url = {http://www.cs.chalmers.se/$\sim$augustss/cayenne/paper.ps},
609+volume = {23},
610+year = {1998}
611+}
612+@article{fisher2006next,
613+author = {Fisher, K. and Mandelbaum, Y. and Walker, D.},
614+file = {:Users/edwin/Library/Application Support/Mendeley Desktop/Downloaded/Fisher, Mandelbaum, Walker - 2010 - The next 700 data description languages.pdf:pdf},
615+journal = {Journal of the ACM},
616+number = {2},
617+pages = {1--51},
618+publisher = {ACM},
619+title = {{The next 700 data description languages}},
620+url = {http://dl.acm.org/citation.cfm?id=1111039},
621+volume = {15},
622+year = {2010}
623+}
624+@inproceedings{Wadler1989,
625+abstract = {From the type of a polymorphic function we can derive a theorem that it satisfies. Every function of the same type satisfies the same theorem. This provides a free source of useful theorems, courtesy of Reynolds' abstraction theorem for the polymorphic lambda calculus.},
626+author = {Wadler, Philip},
627+booktitle = {Proceedings of the fourth international conference on Functional programming languages and computer architecture},
628+doi = {10.1145/99370.99404},
629+file = {:Users/edwin/Library/Application Support/Mendeley Desktop/Downloaded/Wadler - 1989 - Theorems for free!.pdf:pdf},
630+isbn = {0897913280},
631+number = {June},
632+pages = {347--359},
633+publisher = {ACM},
634+series = {FPCA '89},
635+title = {{Theorems for free!}},
636+url = {http://portal.acm.org/citation.cfm?id=99404},
637+year = {1989}
638+}
639+@misc{Protocols2012a,
640+author = {Anderson, Ross},
641+doi = {10.1093/epirev/mxr031},
642+file = {:Users/edwin/Library/Application Support/Mendeley Desktop/Downloaded/Anderson - Unknown - Security Engineering Chapter 3.pdf:pdf},
643+isbn = {9780470068526},
644+issn = {1478-6729},
645+pmid = {22215642},
646+title = {{Security Engineering Chapter 3}}
647+}
648+@inproceedings{barras2008implicit,
649+author = {Barras, B. and Bernardo, B.},
650+booktitle = {Foundations of Software Science and Computational Structures},
651+file = {:Users/edwin/Library/Application Support/Mendeley Desktop/Downloaded/Barras, Bernardo - 2008 - The implicit calculus of constructions as a programming language with dependent types.pdf:pdf},
652+pages = {365--379},
653+publisher = {Springer},
654+title = {{The implicit calculus of constructions as a programming language with dependent types}},
655+url = {http://www.springerlink.com/index/m84h82904546l265.pdf},
656+year = {2008}
657+}
658+@article{landin1966next,
659+author = {Landin, P.J.},
660+file = {:Users/edwin/Library/Application Support/Mendeley Desktop/Downloaded/Landin - 1966 - The next 700 programming languages.pdf:pdf},
661+journal = {Communications of the ACM},
662+number = {3},
663+pages = {157--166},
664+publisher = {ACM},
665+title = {{The next 700 programming languages}},
666+url = {http://dl.acm.org/citation.cfm?id=365257 )},
667+volume = {9},
668+year = {1966}
669+}
670+@misc{Brady2012b,
671+author = {Brooks, Fred},
672+doi = {10.1093/epirev/mxr031},
673+file = {:Users/edwin/Library/Application Support/Mendeley Desktop/Downloaded/Brooks - Unknown - The Design of Design Chapter 2.pdf:pdf},
674+isbn = {9780321702081},
675+issn = {1478-6729},
676+pmid = {22215642},
677+title = {{The Design of Design Chapter 2}}
678+}
679+@misc{Nodes2012a,
680+author = {Brooks, Fred},
681+doi = {10.1093/epirev/mxr031},
682+file = {:Users/edwin/Library/Application Support/Mendeley Desktop/Downloaded/Brooks - Unknown - The Design of Design Chapter 3.pdf:pdf},
683+isbn = {9780321702081},
684+issn = {1478-6729},
685+pmid = {22215642},
686+title = {{The Design of Design Chapter 3}}
687+}
688+@article{Abel2010,
689+abstract = {Sized types are a modular and theoretically well-understood tool for checking termination of recursive and productivity of corecursive definitions. The essential idea is to track structural descent and guardedness in the type system to make termination checking robust and suitable for strong abstractions like higher-order functions and polymorphism. To study the application of sized types to proof assistants and programming languages based on dependent type theory, we have implemented a core language, MiniAgda, with explicit handling of sizes. New considerations were necessary to soundly integrate sized types with dependencies and pattern matching, which was made possible by concepts such as inaccessible patterns and parametric function spaces. This paper provides an introduction to MiniAgda by example and informal explanations of the underlying principles.},
690+author = {Abel, Andreas},
691+file = {:Users/edwin/Library/Application Support/Mendeley Desktop/Downloaded/Abel - 2010 - MiniAgda Integrating Sized and Dependent Types.pdf:pdf},
692+journal = {EPTCS},
693+pages = {1--15},
694+title = {{MiniAgda: Integrating Sized and Dependent Types}},
695+url = {http://arxiv.org/abs/1012.4896},
696+volume = {43},
697+year = {2010}
698+}
699+@book{Bird2010,
700+author = {Bird, Richard},
701+file = {:Users/edwin/Library/Application Support/Mendeley Desktop/Downloaded/Bird - 2010 - Pearls of Functional Algorithm Design.pdf:pdf},
702+isbn = {9780521513388},
703+title = {{Pearls of Functional Algorithm Design}},
704+year = {2010}
705+}
706+@inproceedings{czarnecki2004dsl,
707+author = {Czarnecki, K. and O’Donnell, J. and Striegnitz, J. and Taha, W.},
708+booktitle = {Domain-Specific Program Generation},
709+file = {:Users/edwin/Library/Application Support/Mendeley Desktop/Downloaded/Czarnecki et al. - 2004 - DSL implementation in MetaOCaml, Template Haskell, and C.pdf:pdf},
710+pages = {51--72},
711+publisher = {Springer},
712+title = {{DSL implementation in MetaOCaml, Template Haskell, and C++}},
713+url = {http://www.springerlink.com/index/NL620EL7N94M161H.pdf},
714+year = {2004}
715+}
716+@article{danielsson2011parsing,
717+author = {Danielsson, N. and Norell, U.},
718+journal = {Implementation and Application of Functional Languages},
719+pages = {80--99},
720+publisher = {Springer},
721+title = {{Parsing mixfix operators}},
722+url = {http://www.springerlink.com/index/386243257W504252.pdf},
723+year = {2011}
724+}
725+@article{Jones2003,
726+abstract = {Haskell is the world's leading lazy functional programming language and is widely used in teaching, research, and applications. The language continues to develop rapidly, but in 1998 the programming community decided to capture a stable snapshot of the language by introducing Haskell 98. This book constitutes the agreed definition of Haskell 98, the language itself as well as its supporting libraries, and should be a standard reference work for anyone involved in research, teaching, or applications. All Haskell compilers support Haskell 98, so professioanls and educators have a stable base for their work.},
727+author = {Jones, Simon Peyton},
728+editor = {Jones, Simon Peyton},
729+isbn = {0521826144},
730+journal = {Language},
731+number = {1},
732+publisher = {Cambridge University Press},
733+title = {{Haskell 98 Language and Libraries The Revised Report}},
734+url = {http://www.amazon.ca/exec/obidos/redirect?tag=citeulike09-20&amp;path=ASIN/0521826144},
735+volume = {13},
736+year = {2003}
737+}
738+@article{Altenkirch2010a,
739+abstract = {We begin by revisiting the idea of using a universe of types to write generic programs in a dependently typed setting by constructing a universe for Strictly Positive Types (SPTs). Here we extend this construction to cover dependent types, i.e. Strictly Positive Families (SPFs), thereby fixing a gap left open in previous work. Using the approach presented here we are able to represent all of Epigrams datatypes within Epigram including the universe of datatypes itself.},
740+author = {Altenkirch, Thorsten and Mcbride, Conor and Morris, Peter},
741+file = {:Users/edwin/Library/Application Support/Mendeley Desktop/Downloaded/Altenkirch, Mcbride, Morris - 2010 - Generic Programming with Dependent Types.pdf:pdf},
742+journal = {Citeseer},
743+publisher = {Citeseer},
744+title = {{Generic Programming with Dependent Types}},
745+url = {http://citeseerx.ist.psu.edu/viewdoc/download?doi=10.1.1.129.2926&amp;rep=rep1&amp;type=pdf},
746+year = {2010}
747+}
748+@phdthesis{Okasaki1996,
749+author = {Okasaki, Chris},
750+file = {:Users/edwin/Library/Application Support/Mendeley Desktop/Downloaded/Okasaki - 1996 - Purely Functional Data Structures.pdf:pdf},
751+school = {Carnegie Mellon University},
752+title = {{Purely Functional Data Structures}},
753+year = {1996}
754+}
755+@misc{altenkirch2008nσ,
756+author = {Altenkirch, T. and Oury, N.},
757+file = {:Users/edwin/Library/Application Support/Mendeley Desktop/Downloaded/Altenkirch, Oury - 2008 - $Pi$$Sigma$ A Core Language for Dependently Typed Programming.pdf:pdf},
758+title = {{$\Pi$$\Sigma$: A Core Language for Dependently Typed Programming}},
759+url = {http://verse.aasemoon.com/images/6/6f/PiSigma.pdf},
760+year = {2008}
761+}
762+@inproceedings{Brady2011a,
763+address = {New York, New York, USA},
764+author = {Brady, Edwin},
765+booktitle = {Proceedings of the 5th {ACM} workshop on Programming languages meets program verification - {PLPV} '11},
766+doi = {10.1145/1929529.1929536},
767+file = {:Users/edwin/Library/Application Support/Mendeley Desktop/Downloaded/Brady - 2011 - Idris --- Systems Programming Meets Full Dependent Types.pdf:pdf},
768+isbn = {9781450304870},
769+keywords = {Dependent Types,data description,dependent types},
770+mendeley-tags = {Dependent Types},
771+month = jan,
772+publisher = {ACM Press},
773+title = {{Idris --- Systems Programming Meets Full Dependent Types}},
774+url = {http://dl.acm.org/citation.cfm?id=1929529.1929536},
775+year = {2011}
776+}
777+@article{Steiner1988,
778+author = {Steiner, JG},
779+file = {:Users/edwin/Library/Application Support/Mendeley Desktop/Downloaded/Steiner - 1988 - Kerberos An authentication service for open network systems.pdf:pdf},
780+journal = {Proc. Winter USENIX Conference},
781+title = {{Kerberos: An authentication service for open network systems}},
782+url = {http://www.cse.nd.edu/$\sim$dthain/courses/cse598z/fall2004/papers/kerberos.pdf},
783+year = {1988}
784+}
785+@inproceedings{augustsson2008paradise,
786+author = {Augustsson, L. and Mansell, H. and Sittampalam, G.},
787+booktitle = {International Conference on Functional Programming},
788+file = {:Users/edwin/Library/Application Support/Mendeley Desktop/Downloaded/Augustsson, Mansell, Sittampalam - 2008 - Paradise a two-stage DSL embedded in Haskell.pdf:pdf},
789+number = {9},
790+pages = {225--228},
791+publisher = {ACM},
792+title = {{Paradise: a two-stage DSL embedded in Haskell}},
793+url = {http://dl.acm.org/citation.cfm?id=1411203.1411236},
794+volume = {43},
795+year = {2008}
796+}
797+@misc{Bloat,
798+author = {Brooks, Fred},
799+file = {:Users/edwin/Library/Application Support/Mendeley Desktop/Downloaded/Brooks - Unknown - The Design of Design Chapter 4.pdf:pdf},
800+isbn = {9780321702081},
801+title = {{The Design of Design Chapter 4}}
802+}
803+@article{burrows1990,
804+author = {Burrows, Michael and Abadi, Martin and Needham, Roger},
805+file = {:Users/edwin/Library/Application Support/Mendeley Desktop/Downloaded/Burrows, Abadi, Needham - 1990 - A logic of authentication.pdf:pdf},
806+journal = {ACM Transactions on Computer Systems},
807+pages = {18----36},
808+title = {{A logic of authentication}},
809+url = {http://citeseerx.ist.psu.edu/viewdoc/summary?doi=10.1.1.115.3569},
810+volume = {8},
811+year = {1990}
812+}
813+@misc{TheMendeleySupportTeam2011,
814+abstract = {A quick introduction to Mendeley. Learn how Mendeley creates your personal digital library, how to organize and annotate documents, how to collaborate and share with colleagues, and how to generate citations and bibliographies.},
815+address = {London},
816+author = {{The Mendeley Support Team}},
817+booktitle = {Mendeley Desktop},
818+file = {:Applications/Mendeley Desktop.app/Contents/Resources/FAQ.pdf:pdf},
819+keywords = {Mendeley,how-to,user manual},
820+pages = {1--16},
821+publisher = {Mendeley Ltd.},
822+title = {{Getting Started with Mendeley}},
823+url = {http://www.mendeley.com},
824+year = {2011}
825+}
826+@misc{Interface2012a,
827+author = {Kreibich, Jay A.},
828+doi = {10.1093/epirev/mxr031},
829+file = {:Users/edwin/Library/Application Support/Mendeley Desktop/Downloaded/Kreibich - Unknown - Using SQLite Chapter 7.pdf:pdf},
830+isbn = {9781449394592},
831+issn = {1478-6729},
832+pmid = {22215642},
833+title = {{Using SQLite Chapter 7}}
834+}
835+@misc{pollack1997believe,
836+author = {Pollack, R.},
837+file = {:Users/edwin/Documents/Papers/Pollack/1997 Pollack-How to Believe a Machine-Checked.pdf:pdf},
838+title = {{How to believe a machine-checked proof}},
839+url = {http://books.google.co.uk/books?hl=en&amp;lr=&amp;id=pLnKggT_In4C&amp;oi=fnd&amp;pg=PA205&amp;dq=how+to+believe+a+machine+checked+proof&amp;ots=c2OI8krqqA&amp;sig=EF3QonGFVdOpYdKO1KmW6ljCkjY},
840+year = {1997}
841+}
842+@inproceedings{ko2011modularising,
843+author = {Ko, H.S. and Gibbons, J.},
844+booktitle = {Proceedings of the seventh ACM SIGPLAN workshop on Generic programming},
845+file = {:Users/edwin/Library/Application Support/Mendeley Desktop/Downloaded/Ko, Gibbons - 2011 - Modularising inductive families.pdf:pdf},
846+pages = {13--24},
847+publisher = {ACM},
848+title = {{Modularising inductive families}},
849+url = {http://www.cs.ox.ac.uk/publications/publication5008-abstract.html http://dl.acm.org/citation.cfm?id=2036921},
850+year = {2011}
851+}
852+@article{mcbride2008functional,
853+author = {McBride, C. and Paterson, R.},
854+file = {:Users/edwin/Library/Application Support/Mendeley Desktop/Downloaded/McBride, Paterson - 2008 - Functional pearl Applicative programming with effects.pdf:pdf},
855+journal = {Journal of functional programming},
856+number = {1},
857+pages = {1--13},
858+publisher = {Cambridge Univ Press},
859+title = {{Functional pearl: Applicative programming with effects}},
860+url = {http://journals.cambridge.org/production/action/cjoGetFulltext?fulltextid=1457860},
861+volume = {18},
862+year = {2008}
863+}
864+@article{Altenkirch2010,
865+abstract = {The recent success of languages like Agda and Coq demonstrates the potential of using dependent types for programming. These systems rely on many high-level features like datatype definitions, pattern matching and implicit arguments to facilitate the use of the languages. However, these features complicate the metatheoretical study and are a potential source of bugs. To address these issues we introduce $\Pi$$\Sigma$, a dependently typed core language. It is small enough for metatheoretical study and the type checker is small enough to be formally verified. In this language there is only one mechanism for recursionused for types, functions and infinite objectsand an explicit mechanism to control unfolding, based on lifted types. Furthermore structural equality is used consistently for values and types; this is achieved by a new notion of $\alpha$-equality for recursive definitions. We show, by translating several high-level constructions, that $\Pi$$\Sigma$ is suitable as a core language for dependently typed programming.},
866+author = {Altenkirch, Thorsten and Danielsson, Nils Anders and L, Andres and Oury, Nicolas},
867+doi = {10.1007/978-3-642-12251-4_5},
868+editor = {Blume, Matthias and Kobayashi, Naoki and Vidal, Germ\'{a}n},
869+file = {:Users/edwin/Library/Application Support/Mendeley Desktop/Downloaded/Altenkirch et al. - 2010 - Dependent Types without the Sugar.pdf:pdf},
870+isbn = {9783642122507},
871+journal = {Computing},
872+number = {Sheard 2005},
873+pages = {40--55},
874+publisher = {Springer Berlin Heidelberg},
875+series = {Lecture Notes in Computer Science},
876+title = {{Dependent Types without the Sugar}},
877+url = {http://www.springerlink.com/index/91W712G2806R575H.pdf},
878+volume = {6009},
879+year = {2010}
880+}
881+@inproceedings{morris2006exploring,
882+author = {Morris, P. and Altenkirch, T. and McBride, C.},
883+booktitle = {Types for Proofs and Programs},
884+file = {:Users/edwin/Library/Application Support/Mendeley Desktop/Downloaded/Morris, Altenkirch, McBride - 2006 - Exploring the regular tree types.pdf:pdf},
885+pages = {252--267},
886+publisher = {Springer},
887+title = {{Exploring the regular tree types}},
888+url = {http://www.springerlink.com/index/f9p1317716614834.pdf},
889+year = {2006}
890+}
891+@inproceedings{Xi1999,
892+abstract = {Note: OCR errors may be found in this Reference List extracted from the full text article. ACM has opted to expose the complete List rather than only correct and linked references.},
893+author = {Xi, Hongwei and Pfenning, Frank},
894+booktitle = {Proceedings of the 26th ACM SIGPLANSIGACT symposium on Principles of programming languages POPL 99},
895+doi = {10.1145/292540.292560},
896+file = {:Users/edwin/Library/Application Support/Mendeley Desktop/Downloaded/Xi, Pfenning - 1999 - Dependent types in practical programming.pdf:pdf},
897+isbn = {1581130953},
898+issn = {07439016},
899+keywords = {Dependent Types},
900+mendeley-tags = {Dependent Types},
901+organization = {Carnegie Mellon University},
902+pages = {214--227},
903+publisher = {ACM Press},
904+series = {POPL '99},
905+title = {{Dependent types in practical programming}},
906+url = {http://portal.acm.org/citation.cfm?doid=292540.292560},
907+volume = {26},
908+year = {1999}
909+}
910+@article{Wadler2001,
911+abstract = {The use of monads to structure functional programs is described. Monads provide a convenient framework for simulating effects found in other languages, such as global state, exception handling, output, or non-determinism. Three case studies are looked at in detail: how monads ease the modification of a simple evaluator; how monads act as the basis of a datatype of arrays subject to in-place update; and how monads can be used to build parsers.},
912+author = {Wadler, Philip},
913+doi = {10.1007/3-540-59451-5_2},
914+editor = {Jeuring, Johan and Meijer, Erik},
915+file = {:Users/edwin/Library/Application Support/Mendeley Desktop/Downloaded/Wadler - 2001 - Monads for functional programming.pdf:pdf},
916+isbn = {3540594515},
917+issn = {03029743},
918+journal = {Advanced Functional Programming},
919+number = {August 1992},
920+pages = {24--52},
921+publisher = {Springer},
922+series = {Lecture Notes in Computer Science},
923+title = {{Monads for functional programming}},
924+url = {http://www.springerlink.com/index/715264614rh13340.pdf},
925+volume = {925},
926+year = {2001}
927+}
928+@inproceedings{taha2004gentle,
929+author = {Taha, W.},
930+booktitle = {Domain-Specific Program Generation},
931+pages = {30--50},
932+publisher = {Springer},
933+title = {{A gentle introduction to multi-stage programming}},
934+url = {http://www.springerlink.com/index/JEMT0D8VYN5JB2L8.pdf},
935+year = {2004}
936+}
937+@inproceedings{McBride2004b,
938+author = {McBride, Conor and McKinna, James},
939+booktitle = {Haskell Workshop},
940+file = {:Users/edwin/Library/Application Support/Mendeley Desktop/Downloaded/McBride, McKinna - 2004 - I am not a number I am a free variable.pdf:pdf},
941+title = {{I am not a number : I am a free variable}},
942+year = {2004}
943+}
944+@inproceedings{fisher2005pads,
945+author = {Fisher, K. and Gruber, R.},
946+booktitle = {ACM SIGPLAN Notices},
947+number = {6},
948+pages = {295--304},
949+publisher = {ACM},
950+title = {{PADS: a domain-specific language for processing ad hoc data}},
951+url = {http://dl.acm.org/citation.cfm?id=1065046},
952+volume = {40},
953+year = {2005}
954+}
955+@article{Okasaki1993,
956+author = {Okasaki, Chris},
957+file = {:Users/edwin/Library/Application Support/Mendeley Desktop/Downloaded/Okasaki - 1993 - Red-Black Trees in A Functional Setting.pdf:pdf},
958+journal = {Journal of functional programming},
959+title = {{Red-Black Trees in A Functional Setting}},
960+year = {1993}
961+}
962+@misc{Attacks2012a,
963+author = {Anderson, Ross},
964+doi = {10.1093/epirev/mxr031},
965+file = {:Users/edwin/Library/Application Support/Mendeley Desktop/Downloaded/Anderson - Unknown - Security Engineering Chapter 18.pdf:pdf},
966+isbn = {9780470068526},
967+issn = {1478-6729},
968+number = {1},
969+pages = {NP},
970+pmid = {22215642},
971+title = {{Security Engineering Chapter 18}},
972+volume = {34}
973+}
974+@article{Xi1998,
975+abstract = {We present a type-based approach to eliminating array bound checking and list tag checking by conservatively extending Standard ML with a restricted form of dependent types. This enables the programmer to capture more invariants through types while type-checking remains decidable in theory and can still be performed efficiently in practice. We illustrate our approach through concrete examples and present the result of our preliminary experiments which support support the feasibility and effectiveness of our approach.},
976+author = {Xi, Hongwei and Pfenning, Frank},
977+doi = {10.1145/277652.277732},
978+file = {:Users/edwin/Library/Application Support/Mendeley Desktop/Downloaded/Xi, Pfenning - 1998 - Eliminating array bound checking through dependent types.pdf:pdf},
979+isbn = {0897919874},
980+issn = {03621340},
981+journal = {ACM Sigplan Notices},
982+keywords = {Dependent Types},
983+mendeley-tags = {Dependent Types},
984+number = {5},
985+pages = {249--257},
986+publisher = {ACM},
987+series = {PLDI '98},
988+title = {{Eliminating array bound checking through dependent types}},
989+url = {http://portal.acm.org/citation.cfm?doid=277652.277732},
990+volume = {33},
991+year = {1998}
992+}
impl-paper/macros.ltx+2−2
@@ -242,7 +242,7 @@
242\newcommand{\MyWith}[1]{\multicolumn{2}{l}{|\;#1}}
242\newcommand{\MyWith}[1]{\multicolumn{2}{l}{|\;#1}}
243\newcommand{\Byr}[1]{\;\RW{by}\; #1}
243\newcommand{\Byr}[1]{\;\RW{by}\; #1}
244
244
245−\renewcommand{\Bar}{|}
245+\newcommand{\Bar}{|}
246\newcommand{\Bart}{\settowidth{\GapLength}{$\Bar$}%
246\newcommand{\Bart}{\settowidth{\GapLength}{$\Bar$}%
247 \raisebox{6pt}[0pt][0pt]{$\Bar$}%
247 \raisebox{6pt}[0pt][0pt]{$\Bar$}%
248 \hspace*{-1\GapLength}%
248 \hspace*{-1\GapLength}%
@@ -272,7 +272,7 @@
272\newcommand{\As}[2]{#1 \:\RW{as}\: #2}
272\newcommand{\As}[2]{#1 \:\RW{as}\: #2}
273\newcommand{\nhole}{\Box}
273\newcommand{\nhole}{\Box}
274\newcommand{\turq}{\:\vdash_?\:}
274\newcommand{\turq}{\:\vdash_?\:}
275−\renewcommand{\split}{\;\lhd\;}
275+\newcommand{\split}{\;\lhd\;}
276\newcommand{\CType}[2]{\{#1 \split\; #2\}}
276\newcommand{\CType}[2]{\{#1 \split\; #2\}}
277\newcommand{\CC}[2]{(#1)\:#2}
277\newcommand{\CC}[2]{(#1)\:#2}
278\newcommand{\UP}[2]{#1 | \{#2\}}
278\newcommand{\UP}[2]{#1 | \{#2\}}
impl-paper/overview.tex+3−3
@@ -1,4 +1,4 @@
1−\section{overview}
1+\section{Overview}
2
2
3High level view of steps we've taken to implement this new version:
3High level view of steps we've taken to implement this new version:
4
4
@@ -12,7 +12,7 @@ High level view of steps we've taken to implement this new version:
12 type checker. This is what I did in the first Idris prototype: I learned
12 type checker. This is what I did in the first Idris prototype: I learned
13 that it was a bad idea! Scope is a big problem.
13 that it was a bad idea! Scope is a big problem.
14\end{itemize}
14\end{itemize}
15−\item The proof state and a tactic engine (Oleg style~\cite{mcbride-thesis}).
15+\item The proof state and a tactic engine (Oleg style~\cite{McBride1999}).
16\begin{itemize}
16\begin{itemize}
17 \item Dealing with names: typechecking and evaluation in a context, managing de Bruijn
17 \item Dealing with names: typechecking and evaluation in a context, managing de Bruijn
18 indices becomes tricky. Instead: global names, local names during construction,
18 indices becomes tricky. Instead: global names, local names during construction,
@@ -25,7 +25,7 @@ High level view of steps we've taken to implement this new version:
25\end{itemize}
25\end{itemize}
26\item An Elaborator, as an EDSL, which is a language for applying primitive tactics and
26\item An Elaborator, as an EDSL, which is a language for applying primitive tactics and
27 constructing derived tactics, from a high level syntax withe implicit arguments.
27 constructing derived tactics, from a high level syntax withe implicit arguments.
28−\item Adding primitive operators and a link to Epic~\cite{epic-tfp}.
28+\item Adding primitive operators and a link to Epic~\cite{brady2011epic}.
29\item Advanced elaborations: using declarations, where clauses, type classes.
29\item Advanced elaborations: using declarations, where clauses, type classes.
30\end{itemize}
30\end{itemize}
31
31