summaryrefslogtreecommitdiff
path: root/docs/opt-coercion
diff options
context:
space:
mode:
authorSimon Peyton Jones <simonpj@microsoft.com>2018-07-31 13:17:58 +0100
committerSimon Peyton Jones <simonpj@microsoft.com>2018-07-31 13:19:43 +0100
commit3a065617b168813ec7e356ddd4eb25d125e9ff59 (patch)
treeb2ccf085c14a9a3a803de0dac29567d633ece0df /docs/opt-coercion
parent2110738b280543698407924a16ac92b6d804dc36 (diff)
downloadhaskell-3a065617b168813ec7e356ddd4eb25d125e9ff59.tar.gz
Add the paper "Evidence normalisation in System FC"
https://www.microsoft.com/en-us/research/publication/evidence-normalization-system-fc-2/ This is with a view to editing it to include new developments in the coerion infrastructure.
Diffstat (limited to 'docs/opt-coercion')
-rw-r--r--docs/opt-coercion/Makefile9
-rw-r--r--docs/opt-coercion/code.sty85
-rw-r--r--docs/opt-coercion/denot.sty120
-rw-r--r--docs/opt-coercion/fc-normalization-rta.bib7157
-rwxr-xr-xdocs/opt-coercion/fc-normalization-rta.tex1627
-rwxr-xr-xdocs/opt-coercion/lipics.cls647
-rw-r--r--docs/opt-coercion/prooftree.sty347
7 files changed, 9992 insertions, 0 deletions
diff --git a/docs/opt-coercion/Makefile b/docs/opt-coercion/Makefile
new file mode 100644
index 0000000000..300561132f
--- /dev/null
+++ b/docs/opt-coercion/Makefile
@@ -0,0 +1,9 @@
+TARGET = fc-normalization-rta
+
+$(TARGET).pdf: $(TARGET).tex $(OTT_TEX)
+ latex -output-format=pdf $<
+ latex -output-format=pdf $<
+
+.PHONY: clean
+clean:
+ rm -f $(TARGET).pdf $(TARGET).tex $(OTT_TEX) *.aux *.fdb_latexmk *.log *.fls
diff --git a/docs/opt-coercion/code.sty b/docs/opt-coercion/code.sty
new file mode 100644
index 0000000000..fe5b38c35c
--- /dev/null
+++ b/docs/opt-coercion/code.sty
@@ -0,0 +1,85 @@
+
+% I have enclosed code.sty, which achieves 99% of what you want without
+% the need for a separate preprocessor. At the start of your document
+% you write "\makeatactive". From then on, inline code is written as @\x
+% -> x_1 & y@. The only difference with what you are used to, is that
+% instead of
+%
+% @
+% foo :: Int -> Int
+% foo = \n -> n+1
+% @
+%
+% you have to write
+%
+% \begin{code}
+% foo :: Int -> Int
+% foo = \n -> n+1
+% \end{code}
+%
+% and that you cannot use @ in \section{} and \caption{}. For the paper that occured twice, in which case I had to replace @...@ b y \texttt{...}.
+%
+%
+% code.sty --- nice verbatim mode for code
+
+% To get '@' use \verb+@+
+
+\def\icode{%
+ \relax\ifmmode\hbox\else\leavevmode\null\fi
+ \bgroup
+ %\begingroup
+ \@noligs
+ \verbatim@font
+ \verb@eol@error
+ \let\do\@makeother \dospecials
+ \@vobeyspaces
+ \frenchspacing
+ \@icode}
+\def\@icode#1{%
+ \catcode`#1\active
+ \lccode`\~`#1%
+ \lowercase{\let~\icode@egroup}}
+\def\icode@egroup{%
+ %\endgroup}
+ \egroup}
+
+% The \makeatactive command:
+% makes @ active, in such a way that @...@ behaves as \icode@...@:
+{
+\catcode`@=\active
+\gdef\makeatactive{
+ \catcode`@=\active \def@{\icode@}
+ % Since @ becomes active, it has to be taken care of in verbatim-modes:
+ \let\olddospecials\dospecials \def\dospecials{\do\@\olddospecials}}
+}
+% \gdef\makeatother{\g@remfrom@specials{\@}\@makeother\@}
+\gdef\makeatother{\@makeother\@}
+
+\newcommand\codetabwidth{42pt}
+{\catcode`\^^I=\active%
+\gdef\@vobeytab{\catcode`\^^I\active\let^^I\@xobeytab}}
+\def\@xobeytab{\leavevmode\penalty10000\hskip\codetabwidth}
+
+\begingroup \catcode `|=0 \catcode `[= 1
+\catcode`]=2 \catcode `\{=12 \catcode `\}=12
+\catcode`\\=12 |gdef|@xcode#1\end{code}[#1|end[code]]
+|endgroup
+\def\@code{\trivlist \item\relax
+ \if@minipage\else\vskip\parskip\fi
+ \leftskip\@totalleftmargin\rightskip\z@skip
+ \parindent\z@\parfillskip\@flushglue\parskip\z@skip
+ \@@par
+ \@tempswafalse
+ \def\par{%
+ \if@tempswa
+ \leavevmode \null \@@par\penalty\interlinepenalty
+ \else
+ \@tempswatrue
+ \ifhmode\@@par\penalty\interlinepenalty\fi
+ \fi}%
+ \obeylines \verbatim@font \@noligs
+ \let\do\@makeother \dospecials
+ \everypar \expandafter{\the\everypar \unpenalty}%
+}
+\def\code{\@code \frenchspacing\@vobeytab\@vobeyspaces \@xcode}
+\def\endcode{\if@newlist \leavevmode\fi\endtrivlist}
diff --git a/docs/opt-coercion/denot.sty b/docs/opt-coercion/denot.sty
new file mode 100644
index 0000000000..93e8a49a6e
--- /dev/null
+++ b/docs/opt-coercion/denot.sty
@@ -0,0 +1,120 @@
+% $Id: denot.sty,v 1.2 2005/05/18 08:31:50 simonpj Exp $
+%
+% denot.tex - symbols for denotational semantics
+%
+% Last updated: <mbs@cse.ogi.edu 15-Mar-2001 15:56:35>
+%
+
+% Use plain italics instead of math italics in math mode
+\DeclareSymbolFont{plainletters}{OT1}{cmr}{m}{it}
+\DeclareMathSymbol{a}{\mathalpha}{plainletters}{"61}
+\DeclareMathSymbol{b}{\mathalpha}{plainletters}{"62}
+\DeclareMathSymbol{c}{\mathalpha}{plainletters}{"63}
+\DeclareMathSymbol{d}{\mathalpha}{plainletters}{"64}
+\DeclareMathSymbol{e}{\mathalpha}{plainletters}{"65}
+\DeclareMathSymbol{f}{\mathalpha}{plainletters}{"66}
+\DeclareMathSymbol{g}{\mathalpha}{plainletters}{"67}
+\DeclareMathSymbol{h}{\mathalpha}{plainletters}{"68}
+\DeclareMathSymbol{i}{\mathalpha}{plainletters}{"69}
+\DeclareMathSymbol{j}{\mathalpha}{plainletters}{"6A}
+\DeclareMathSymbol{k}{\mathalpha}{plainletters}{"6B}
+\DeclareMathSymbol{l}{\mathalpha}{plainletters}{"6C}
+\DeclareMathSymbol{m}{\mathalpha}{plainletters}{"6D}
+\DeclareMathSymbol{n}{\mathalpha}{plainletters}{"6E}
+\DeclareMathSymbol{o}{\mathalpha}{plainletters}{"6F}
+\DeclareMathSymbol{p}{\mathalpha}{plainletters}{"70}
+\DeclareMathSymbol{q}{\mathalpha}{plainletters}{"71}
+\DeclareMathSymbol{r}{\mathalpha}{plainletters}{"72}
+\DeclareMathSymbol{s}{\mathalpha}{plainletters}{"73}
+\DeclareMathSymbol{t}{\mathalpha}{plainletters}{"74}
+\DeclareMathSymbol{u}{\mathalpha}{plainletters}{"75}
+\DeclareMathSymbol{v}{\mathalpha}{plainletters}{"76}
+\DeclareMathSymbol{w}{\mathalpha}{plainletters}{"77}
+\DeclareMathSymbol{x}{\mathalpha}{plainletters}{"78}
+\DeclareMathSymbol{y}{\mathalpha}{plainletters}{"79}
+\DeclareMathSymbol{z}{\mathalpha}{plainletters}{"7A}
+\DeclareMathSymbol{A}{\mathalpha}{plainletters}{"41}
+\DeclareMathSymbol{B}{\mathalpha}{plainletters}{"42}
+\DeclareMathSymbol{C}{\mathalpha}{plainletters}{"43}
+\DeclareMathSymbol{D}{\mathalpha}{plainletters}{"44}
+\DeclareMathSymbol{E}{\mathalpha}{plainletters}{"45}
+\DeclareMathSymbol{F}{\mathalpha}{plainletters}{"46}
+\DeclareMathSymbol{G}{\mathalpha}{plainletters}{"47}
+\DeclareMathSymbol{H}{\mathalpha}{plainletters}{"48}
+\DeclareMathSymbol{I}{\mathalpha}{plainletters}{"49}
+\DeclareMathSymbol{J}{\mathalpha}{plainletters}{"4A}
+\DeclareMathSymbol{K}{\mathalpha}{plainletters}{"4B}
+\DeclareMathSymbol{L}{\mathalpha}{plainletters}{"4C}
+\DeclareMathSymbol{M}{\mathalpha}{plainletters}{"4D}
+\DeclareMathSymbol{N}{\mathalpha}{plainletters}{"4E}
+\DeclareMathSymbol{O}{\mathalpha}{plainletters}{"4F}
+\DeclareMathSymbol{P}{\mathalpha}{plainletters}{"50}
+\DeclareMathSymbol{Q}{\mathalpha}{plainletters}{"51}
+\DeclareMathSymbol{R}{\mathalpha}{plainletters}{"52}
+\DeclareMathSymbol{S}{\mathalpha}{plainletters}{"53}
+\DeclareMathSymbol{T}{\mathalpha}{plainletters}{"54}
+\DeclareMathSymbol{U}{\mathalpha}{plainletters}{"55}
+\DeclareMathSymbol{V}{\mathalpha}{plainletters}{"56}
+\DeclareMathSymbol{W}{\mathalpha}{plainletters}{"57}
+\DeclareMathSymbol{X}{\mathalpha}{plainletters}{"58}
+\DeclareMathSymbol{Y}{\mathalpha}{plainletters}{"59}
+\DeclareMathSymbol{Z}{\mathalpha}{plainletters}{"5A}
+
+\def\@myop#1{\mathop{\mathstrut{#1}}\nolimits}
+
+% \def\pset {\@myop{\bbold P}}
+% \def\pset {\@myop{\wp}}
+\def\pset {\@myop{\cal P}}
+
+\def\lquote {[\![}
+\def\rquote {]\!]}
+\let\approx= \cong
+\def\lnot {\neg\;}
+\def\land {\mathrel{\wedge}}
+\def\lor {\mathrel{\vee}}
+\def\lxor {\mathrel{\oplus}}
+\let\implies= \Rightarrow
+\let\infers= \Leftarrow
+\let\iff= \Leftrightarrow
+\let\biim= \leftrightarrow
+\let\fun= \rightarrow
+%\def\sum {\mathbin{+}}
+%\let\prod= \times
+%\let\cross= \times
+\let\bottom= \perp
+
+\def\biglub {\@myop{\bigsqcup}}
+\def\bigglb {\mathop{\lower.1ex\hbox{\Large$\sqcap$}}}
+\def\join {\mathbin{\sqcup}}
+\def\meet {\mathbin{\sqcap}}
+\def\lub {\mathop{\sqcup}}
+\def\glb {\mathop{\sqcap}}
+\def\union {\mathbin{\cup}}
+\def\inter {\mathbin{\cap}}
+\def\bigunion {\@myop{\bigcup}}
+\def\biginter {\@myop{\bigcap}}
+\def\bigconcat {\mathop{\text{\bf\large +\hspace*{-0.42em}+}}}
+\def\bigbigconcat{\mathop{\text{\bf\LARGE +\hspace*{-0.38em}+}}}
+
+\def\lset {\mathopen{\{}}
+\def\rset {\mathclose{\}}}
+\def\biglset {\mathopen{\Bigl\}}}
+\def\bigrset {\mathclose{\Bigr\}}}
+\def\power {\mathbin{\uparrow}}
+\def\relset {\@myop{\Re}}
+\def\entails {\mathrel{\vdash}}
+\def\comp {\mathbin{\circ}}
+\def\ccomp {\mathbin{\bullet}}
+\def\seq {\mathclose{\ast}}
+
+\def\eqdef {\overset{\text{\tiny def}}{=}}
+\def\eqq {\overset{?}{=}}
+
+\def\set#1{\lset #1 \rset}
+\def\denot#1{[\![ #1 ]\!]}
+% \def\state#1#2{\langle #1 \mid #2 \rangle}
+
+% eof
+
+
+
diff --git a/docs/opt-coercion/fc-normalization-rta.bib b/docs/opt-coercion/fc-normalization-rta.bib
new file mode 100644
index 0000000000..f98ff15970
--- /dev/null
+++ b/docs/opt-coercion/fc-normalization-rta.bib
@@ -0,0 +1,7157 @@
+@string{proc = "Proceedings of the\ "}
+
+@string{cmu-cs = "Carnegie Mellon University, School of Computer Science"}
+@string{cornell-cs = "Department of Computer Science, Cornell University"}
+@string{dec-src = "Digital Equipment Corporation, Systems Research Center"}
+@string{edin-cs = "Department of Computer Science, University of Edinburgh"}
+@string{inria = "Institut National de Recherche en Informatique et Automatique (INRIA)"}
+@string{yale-cs = "Yale University, Department of Computer Science"}
+
+
+%% Conferences
+@string{cade = "International Conference on Automated Deduction"}
+@string{csl = "International Workshop on Computer Science Logic"}
+@string{esop = "European Symposium on Programming"}
+@string{fool = "Foundations of Object-Oriented Languages Workshop"}
+@string{fpca = "Conference on Functional Programming Languages and Computer Architecture"}
+@string{icalp = "International Colloquium on Automata, Languages, and Programming"}
+@string{icfp = "{ACM SIGPLAN} International Conference on Functional Programming"}
+@string{lfp = "{ACM} Conference on {Lisp} and Functional Programming"}
+@string{lics = "{IEEE} Symposium on Logic in Computer Science"}
+@string{mfps = "Mathematical Foundations of Programming Semantics"}
+@string{osdi = "Symposium on Operating Systems Design and Implementation"}
+@string{pldi = "{ACM SIGPLAN} Conference on Programming Language Design and Implementation"}
+@string{popl = "{ACM} {SIGPLAN}-{SIGACT} Symposium on Principles of Programming Languages"}
+@string{sosp = "{ACM} Symposium on Operating Systems Principles"}
+@string{tacs = "Theoretical Aspects of Computer Software"}
+@string{tlca = "International Conference on Typed Lambda Calculi and Applications"}
+@string{tldi = "{ACM SIGPLAN} Workshop in Types in Language Design and Implementation"}
+@string{sigmod = "Proc. {ACM} {SIGMOD} International
+ Conference on Management of Data"}
+@string{oopsla = "{ACM} {SIGPLAN} Conference on Object-Oriented
+ Programming, Systems, Languages and Applications"}
+@string{sigcomm = "Proc. {SIGCOMM} Symposium on Communications
+ Architectures and Protocols"}
+@string{ieeesp = "IEEE Symposium on Research in Security and Privacy"}
+@string{rtss = "Real-Time Systems Symposium"}
+
+%% Workshops
+@string{tic = "{ACM} {SIGPLAN} Workshop on Types in Compilation"}
+@string{wcsss = "{ACM} {SIGPLAN} Workshop on Compiler Support for System Software"}
+@string{hotos = "Workshop on Hot Topis in Operating Systems"}
+@string{lctes = "Proceedings of the {ACM} {SIGPLAN} Workshop on Languages,
+ Compilers, and Tools for Embedded Systems"}
+@string{pepm = "{ACM} {SIGPLAN} Workshop on Partial Evaluation and
+ Semantics-Based Program Manipulation"}
+@string{hoots = "International Workshop on Higher Order Operational Techniques in Semantics"}
+
+%% Journals
+@string{iandc = "Information and Computation"}
+@string{jacm = "Journal of the {ACM}"}
+@string{jfp = "Journal of Functional Programming"}
+@string{mscs = "Mathematical Structures in Computer Science"}
+@string{tcs = "Theoretical Computer Science"}
+@string{toplas = "{ACM} Transactions on Programming Languages and Systems"}
+@string{tse = "{IEEE} Transactions on Software Engineering"}
+@String{j-LISP-SYMB-COMPUT = "Lisp and Symbolic Computation"}
+@string{hosc = "Higher-Order and Symbolic Computation"}
+
+
+@string{lncs = "Lecture Notes in Computer Science"}
+
+@string{academic = "Academic Press"}
+@string{addison = "Addison-Wesley"}
+@string{cambridge-press = "Cambridge University Press"}
+@string{chapman = "Chapman \& Hall"}
+@string{elsevier = "Elsevier"}
+@string{mit-press = "The MIT Press"}
+@string{noholland = "North-Holland"}
+@string{springer = "Springer-Verlag"}
+@string{sigplan-notices = "{SIGPLAN} Notices"}
+@string{cam-ma = "Cambridge, Massachusetts"}
+@string{ith-ny = "Ithaca, New York"}
+@string{pgh-pa = "Pittsburgh, Pennsylvania"}
+
+@string{o1="First "}
+@string{o2="Second "}
+@string{o3="Third "}
+@string{o4="Fourth "}
+@string{o5="Fifth "}
+@string{o6="Sixth "}
+@string{o7="Seventh "}
+@string{o8="Eighth "}
+@string{o9="Ninth "}
+@string{o10="Tenth "}
+@string{o11="Eleventh "}
+@string{o12="Twelfth "}
+@string{o13="Thirteenth "}
+@string{o14="Fourteenth "}
+@string{o15="Fifteenth "}
+@string{o16="Sixteenth "}
+@string{o17="Seventeenth "}
+@string{o18="Eighteenth "}
+@string{o19="Nineteenth "}
+@string{o20="Twentieth "}
+@string{o21="Twenty-First "}
+@string{o22="Twenty-Second "}
+@string{o23="Twenty-Third "}
+@string{o24="Twenty-Fourth "}
+@string{o25="Twenty-Fifth "}
+@string{o26="Twenty-Sixth "}
+@string{o27="Twenty-Seventh "}
+@string{o28="Twenty-Eighth "}
+@string{o29="Twenty-Ninth "}
+@string{o30="Thirtieth "}
+
+
+%% Ack for downloaded bib entry
+
+@String{ack-nhfb = "Nelson H. F. Beebe,
+ Center for Scientific Computing,
+ University of Utah,
+ Department of Mathematics, 322 INSCC,
+ 155 S 1400 E RM 233,
+ Salt Lake City, UT 84112-0090, USA,
+ Tel: +1 801 581 5254,
+ FAX: +1 801 585 1640, +1 801 581 4148,
+ e-mail: \path|beebe@math.utah.edu|,
+ \path|beebe@acm.org|,
+ \path|beebe@ieee.org| (Internet),
+ URL: \path|http://www.math.utah.edu/~beebe/|"}
+
+
+
+
+
+
+@inproceedings{deferred-type-errors,
+ author = "Dimitrios Vytiniotis and Simon {Peyton Jones} and Pedro Magalhaes",
+ title = "Equality proofs and deferred type errors",
+ booktitle = {Proceedings of {ACM SIGPLAN} International Conference on Functional Programming (ICFP '12)},
+ pages = "341-352",
+ year = 2012
+}
+
+@inproceedings{ductilej,
+ author = "Michael Bayne and Richard Cook and Michael Ernst",
+ title = "Always-available static and dynamic feedback",
+ booktitle = "Proceedings of 33rd International Conference on Software Engineering (ICSE'11)",
+ year = 2011,
+ pages = "521-530",
+ address = "Hawaii"
+}
+
+@INCOLLECTION{pottier:pierce-chapter,
+ AUTHOR = {Fran\c{c}ois Pottier and Didier R{\'{e}}my},
+ TITLE = {The Essence of {ML} Type Inference},
+ BOOKTITLE = {Advanced Topics in Types and Programming Languages},
+ PAGES = {389--489},
+ PUBLISHER = {MIT Press},
+ YEAR = {2005},
+ EDITOR = {Benjamin C. Pierce},
+ CHAPTER = {10},
+ html = {http://cristal.inria.fr/attapl/}
+}
+
+@article{gill-hutton:worker-wrapper,
+ author = "Andy Gill and Graham Hutton",
+ title = "The worker/wrapper transformation",
+ journal = {Journal of Functional Programming},
+ volume = {19},
+ issue = {2},
+ page = {227-251},
+ year = 2009
+}
+
+@article{pjv:modular,
+ author = {Dimitrios Vytiniotis and Simon {Peyton Jones} and Tom Schrijvers and Martin Sulzmann},
+ title = "OutsideIn(X): modular type inference with local assumptions",
+ journal = {Journal of Functional Programming},
+ volume = {21},
+ issue = {4-5},
+ page = {333-412},
+ year = 2011
+}
+
+
+
+@article{rossberg08,
+ author = {Andreas Rossberg},
+ title = {Dynamic Translucency with Abstraction Kinds and Higher-Order
+ Coercions},
+ journal = {Electr. Notes Theor. Comput. Sci.},
+ volume = {218},
+ year = {2008},
+ pages = {313-336},
+ bibsource = {DBLP, http://dblp.uni-trier.de}
+}
+
+
+@InProceedings{mcbride:levitation,
+ author = {James Chapman and Pierre-\'{E}variste Dagand and Conor McBride and Peter Morris},
+ title = {The Gentle Art of Levitation},
+ booktitle = {Proceedings of the Fifteenth {ACM SIGPLAN} International Conference on Functional Programming (ICFP '10)},
+ year = 2010,
+ address = {Baltimore, MD, USA},
+ month = {September},
+ note = {To appear.}}
+
+# doi = {http://dx.doi.org/10.1016/0890-5401(91)90066-B},
+@article{deBruijn:telescopes,
+ author = {de Bruijn, N. G.},
+ title = {Telescopic mappings in typed lambda calculus},
+ journal = {Inf. Comput.},
+ volume = {91},
+ number = {2},
+ year = {1991},
+ issn = {0890-5401},
+ pages = {189--204},
+ publisher = {Academic Press, Inc.},
+ address = {Duluth, MN, USA},
+ }
+
+
+
+@inproceedings{johann:gadt,
+ author = {Patricia Johann and
+ Neil Ghani},
+ title = {Foundations for structured programming with GADTs},
+ booktitle = {POPL},
+ year = {2008},
+ pages = {297-308},
+ ee = {http://doi.acm.org/10.1145/1328438.1328475},
+ crossref = {DBLP:conf/popl/2008},
+ bibsource = {DBLP, http://dblp.uni-trier.de}
+}
+
+@proceedings{DBLP:conf/popl/2008,
+ editor = {George C. Necula and
+ Philip Wadler},
+ title = {Proceedings of the 35th ACM SIGPLAN-SIGACT Symposium on
+ Principles of Programming Languages, POPL 2008, San Francisco,
+ California, USA, January 7-12, 2008},
+ booktitle = {POPL},
+ publisher = {ACM},
+ year = {2008},
+ isbn = {978-1-59593-689-9},
+ bibsource = {DBLP, http://dblp.uni-trier.de}
+}
+
+
+@inproceedings{xi:grdt,
+ author = {Hongwei Xi and
+ Chiyan Chen and
+ Gang Chen},
+ title = {Guarded recursive datatype constructors},
+ booktitle = {POPL},
+ year = {2003},
+ pages = {224-235},
+ ee = {http://doi.acm.org/10.1145/640128.604150},
+ bibsource = {DBLP, http://dblp.uni-trier.de}
+}
+
+
+@article{crary:syntactic-recursive,
+ author = {Karl Crary and
+ Robert Harper},
+ title = {Syntactic Logical Relations for Polymorphic and Recursive
+ Types},
+ journal = {Electr. Notes Theor. Comput. Sci.},
+ volume = {172},
+ year = {2007},
+ pages = {259-299},
+ note = {Computation, Meaning, and Logic: Articles dedicated to Gordon Plotkin},
+ ee = {http://dx.doi.org/10.1016/j.entcs.2007.02.010},
+ bibsource = {DBLP, http://dblp.uni-trier.de}
+}
+
+
+@inproceedings{ahmed:step-indexed,
+ author = {Amal J. Ahmed},
+ title = {Step-Indexed Syntactic Logical Relations for Recursive and
+ Quantified Types},
+ booktitle = {ESOP},
+ year = {2006},
+ pages = {69-83},
+ ee = {http://dx.doi.org/10.1007/11693024_6},
+ crossref = {DBLP:conf/esop/2006},
+ bibsource = {DBLP, http://dblp.uni-trier.de}
+}
+
+
+@Book{kleene:mathematical-logic,
+ author = {Stephen Cole Kleene},
+ title = {Mathematical Logic},
+ publisher = {Wiley},
+ year = 1967
+}
+
+@inproceedings{Swamy:2009:TTC:1596550.1596598,
+ author = {Swamy, Nikhil and Hicks, Michael and Bierman, Gavin M.},
+ title = {A theory of typed coercions and its applications},
+ booktitle = {Proceedings of the 14th ACM SIGPLAN International Conference on Functional Programming},
+ series = {ICFP '09},
+ year = {2009},
+ isbn = {978-1-60558-332-7},
+ location = {Edinburgh, Scotland},
+ pages = {329--340},
+ numpages = {12},
+ publisher = {ACM},
+ address = {New York, NY, USA},
+ keywords = {coercion insertion, gradual typing, nonambiguity, provenance, type-directed translation},
+}
+
+
+
+@incollection{Remy-Yakobowski:xmlf,
+ author = {R\'{e}my, Didier and Yakobowski, Boris},
+ affiliation = {INRIA Paris - Rocquencourt},
+ title = {A {Church}-Style Intermediate Language for {MLF}},
+ booktitle = {Functional and Logic Programming},
+ series = {Lecture Notes in Computer Science},
+ editor = {Blume, Matthias and Kobayashi, Naoki and Vidal, German},
+ publisher = {Springer Berlin / Heidelberg},
+ pages = {24-39},
+ volume = {6009},
+ also = {http://gallium.inria.fr/~remy/mlf/},
+ abstract = {MLF is a type system that seamlessly merges ML-style implicit but
+ second-class polymorphism with System-F explicit first-class
+ polymorphism. We present xMLF, a Church-style version of MLF with full type
+ information that can easily be maintained during reduction. All parameters
+ of functions are explicitly typed and both type abstraction and type
+ instantiation are explicit. However, type instantiation in xMLF is more
+ general than type application in System F. We equip xMLF with a small-step
+ reduction semantics that allows reduction in any context and show that this
+ relation is confluent and type preserving. We also show that both subject
+ reduction and progress hold for weak-reduction strategies, including
+ call-by-value with the value-restriction.},
+ year = {2010}
+}
+
+@InProceedings{Remy-Yakobowski:mlf-type-inference,
+AUTHOR = {Didier Remy and Boris Yakobowski},
+TITLE = {{E}fficient {T}ype {I}nference for the {MLF} Language:
+ a graphical and constraints-based approach},
+BOOKTITLE = {The 13th ACM SIGPLAN
+ International Conference on Functional Programming (ICFP'08)},
+YEAR = 2008,
+ADDRESS = {Victoria, BC, Canada},
+MONTH = Sep,
+ALSO = {http://gallium.inria.fr/~remy/mlf/},
+PDF = {http://gallium.inria.fr/~remy/mlf/Remy-Yakobowski@icfp08:mlf-type-inference.pdf},
+pages = {63--74},
+doi = {http://doi.acm.org/10.1145/1411203.1411216},
+ABSTRACT = {
+MLF is a type system that seamlessly merges ML-style type inference with
+System-F polymorphism. We propose a system of graphic (type) constraints
+that can be used to perform type inference in both ML or MLF. We show
+that this constraint system is a small extension of the formalism of
+graphic types, originally introduced to represent MLF types. We give a
+few semantic preserving transformations on constraints and propose a
+strategy for applying them to solve constraints. We show that the
+resulting algorithm has optimal complexity for MLF type inference, and
+argue that, as for ML, this complexity is linear under reasonable
+assumptions.
+}
+}
+
+
+
+
+@inproceedings{xi:cut-elimination,
+author = "Chiyan Chen and Dengping Zhu and Hongwei Xi",
+title = {{Implementing Cut Elimination: A Case Study of Simulating Dependent Types in Haskell}},
+booktitle = "Proceedings of the 6th International Symposium on Practical Aspects of Declarative Languages",
+publisher = "Springer-Verlag LNCS vol. 3057",
+year = "2004",
+month = "June",
+pages = "239--254",
+address = "Dallas, TX",
+abstract = {{
+Gentzen's Hauptsatz -- cut elimination theorem -- in sequent calculi
+reveals a fundamental property on logic connectives in various logics such
+as classical logic and intuitionistic logic. In this paper, we implement a
+procedure in Haskell to perform cut elimination for intuitionistic sequent
+calculus, where we use types to guarantee that the procedure can only
+return a cut-free proof of the same sequent when given a proof of a sequent
+that may contain cuts. The contribution of the paper is two-fold. On
+the one hand, we present an interesting (and somewhat unexpected) application
+of the current type system of Haskell, illustrating through a concrete
+example how some typical use of dependent types can be simulated in
+Haskell. On the other hand, we identify several problematic issues with
+such a simulation technique and then suggest some approaches to addressing
+these issues in Haskell.
+}}
+}
+
+
+
+@inproceedings{HList-HW04,
+ author = {Oleg Kiselyov and Ralf L\"{a}mmel and Keean Schupke},
+ title = "{Strongly typed heterogeneous collections}",
+ booktitle = "{Haskell '04: Proceedings of the ACM SIGPLAN workshop on Haskell}",
+ year = {2004},
+ isbn = {1-58113-850-4},
+ pages = {96--107},
+ location = {Snowbird, Utah, USA},
+ doi = {http://doi.acm.org/10.1145/1017472.1017488},
+ publisher = {ACM Press},
+}
+
+
+@Unpublished{augustsson:silly,
+ author = {Lennart Augustsson and Kent Petersson},
+ title = {Silly Type Families},
+ note = {Available from \url{http://www.cs.pdx.edu/~sheard/papers/silly.pdf}},
+ month = sep,
+ year = 1994,
+ annote = {GADTs}
+}
+
+@inproceedings{sheard:omega,
+ title = "Meta-programming with built-in type equality",
+ author = "Tim Sheard and Emir Pasalic",
+ booktitle = "Proc 4th International Workshop on Logical Frameworks and Meta-languages (LFM'04), Cork",
+ month = jul,
+ year = 2004,
+ pages = "106--124",
+ keywords = "phantom types, type indexed data types"
+}
+
+
+
+@TechReport{cheney-hinze:phantom-types,
+ author = {James Cheney and Ralf Hinze},
+ title = {First-Class Phantom Types},
+ institution = {Cornell University},
+ year = 2003,
+ type = {CUCIS},
+ number = {TR2003-1901}
+}
+
+
+@InCollection{Remy!records,
+author = "Didier R\'{e}my",
+title = "Type Inference for Records in a Natural Extension of {ML}",
+booktitle = "Theoretical Aspects Of Object-Oriented Programming.
+ Types, Semantics and Language Design",
+publisher = "MIT Press",
+year = 1993,
+editor = "Carl A. Gunter and John C. Mitchell"
+}
+
+
+%% A %%
+
+@article{abadi+:dynamic,
+ author = "Mart\'{\i}n Abadi and Luca Cardelli and Benjamin
+ Pierce and Gordon Plotkin",
+ title = "Dynamic typing in a statically-typed language",
+ journal = toplas,
+ year = 1991,
+ volume = 13,
+ number = 2,
+ month = "April",
+ pages = "237--268",
+}
+
+@article{ Abadi92,
+author = "Mart\'{\i}n Abadi and Luca Cardelli and Benjamin Pierce
+ and Didier R\'{e}my",
+title = "Dynamic Typing in Polymorphic Languages",
+journal = "Journal of Functional Programming",
+volume = "5",
+number = "1",
+pages = "111--130",
+month = jan,
+annnote = "Summary in \bgroup \em ACM SIGPLAN Workshop on ML and its
+ Applications\egroup, June 1992",
+year = 1995,
+bcp = yes
+}
+
+
+
+@article{abadi+:explicit-subs,
+ author = "Mart\'{\i}n Abadi and Luca Cardelli and Pierre-Louis
+ Curien and Jean-Jacques L\'{e}vy",
+ title = "Explicit Substitutions",
+ journal = jfp,
+ year = 1991,
+ volume = 1,
+ number = 4,
+ pages = "375--416",
+}
+
+@inproceedings{abadi+:object-interp,
+ author = "Mart\'{\i}n Abadi and Luca Cardelli and Ramesh
+ Viswanathan",
+ title = "An Interpretation of Objects and Object Types",
+ booktitle = o23 # " " # popl,
+ year = 1996,
+ month = jan,
+ address = "St.\ Petersburg, Florida",
+ pages = "296--409",
+}
+
+@inproceedings{abadi+:prim-objects,
+ author = "Mart\'{\i}n Abadi and Luca Cardelli",
+ title = "A Theory of Primitive Objects: Untyped and
+ First-Order Systems",
+ booktitle = tacs,
+ year = 1994,
+ month = apr,
+ pages = "296--320",
+ series = lncs,
+ volume = 789,
+ publisher = springer,
+}
+
+@book{abadi+:thy-objects,
+ author = "Mart\'{\i}n Abadi and Luca Cardelli",
+ title = "A Theory of Objects",
+ publisher = springer,
+ year = 1996,
+}
+
+@inproceedings{abadi:protection-in-trans,
+ author = "Mart\'{\i}n Abadi",
+ title = "Protection in Programming-Language Translations",
+ booktitle = o25 # " " # icalp,
+ month = jul,
+ year = 1998,
+}
+
+@InProceedings{abadi+:dcc,
+ author = {Mart\'{\i}n Abadi and Anindya Banerjee and Nevin Heintze and Jon G. Riecke},
+ title = {A Core Calculus of Dependency},
+ booktitle = o26 # " " # popl,
+ pages = {147--160},
+ year = 1999,
+ address = {San Antonio, Texas},
+ month = jan
+}
+
+
+@inproceedings{aczel:frege-revisit,
+ author = "Peter Aczel",
+ title = "{F}rege Structures Revisited",
+ booktitle = "Proceedings of the 1983 Marstrand Workshop",
+ editor = "B. {Nordstr\"{o}m} and J. Smith",
+ year = 1983,
+}
+
+
+@manual{ada:manual,
+ key = {ISOA},
+ edition = {6.0},
+ month = dec,
+ organization = {International Organisation for Standardisation and
+ International Electrotechnical Commission},
+ title = {International Standard ISO/IEC 8652:1995 Ada Reference Manual:
+ Language and Standard Libraries },
+ year = 1994,
+ url = "http://www.adahome.com/rm95/"
+}
+
+@Manual{c:standard,
+ title = {ISO/IEC 9899:1999 Programming Languages--{C}},
+ key = {ISOC},
+ organization = {International Organisation for Standardization
+ and International Electrotechnical Commission},
+ month = dec,
+ year = 1999
+}
+
+@Manual{c++:standard,
+ title = {ISO/IEC 14882:1998 Information Technology--Programming Languages--{C++}},
+ key = {ISOCP},
+ organization = {International Organisation for Standardization
+ and International Electrotechnical Commission},
+ month = sep,
+ year = 1998
+}
+
+
+
+@inproceedings{aditya+:gc,
+ author = "Shail Aditya and Christine Flood and James Hicks",
+ title = "Garbage Collection for Strongly-Typed Languages
+ using Run-Time Type Reconstruction",
+ booktitle = 1994 # " " # lfp,
+ month = jun,
+ pages = "12--23",
+ year = 1994,
+ address = "Orlando"
+}
+
+@inproceedings{ agesen97adding,
+ author = "Ole Agesen and Stephen N. Freund and John C. Mitchell",
+ title = "Adding Type Parameterization to the {Java} Language",
+ booktitle = "{ACM} {S}ymposium on {O}bject {O}riented {P}rogramming: {S}ystems, {L}anguages, and {A}pplications ({OOPSLA})",
+ address = "Atlanta, GA",
+ pages = "49--65",
+ year = "1997",
+ url = "citeseer.nj.nec.com/agesen97adding.html" }
+
+
+@inproceedings{aiken+:type-inclusion,
+ author = "Alexander Aiken and Edward L. Wimmers",
+ title = "Type Inclusion Constraints and Type Inference",
+ booktitle = "FPCA93: " # fpca,
+ year = 1993,
+ pages = "31--41",
+}
+
+@inproceedings{allen+:reflection,
+ author = "Stuart F. Allen and Robert L. Constable and Douglas
+ J. Howe and William E. Aitken",
+ title = "The Semantics of Reflected Proof",
+ booktitle = o5 # " " # lics,
+ year = 1990,
+ month = jun,
+ pages = {95--105},
+ address = {Philadelphia, Pennsylvania},
+ publisher = {IEEE Computer Society Press}
+}
+
+@phdthesis{allen:phd,
+ author = "Stuart Allen",
+ title = "A Non-Type-Theoretic Semantics for Type-Theoretic
+ Language",
+ school = cornell-cs,
+ year = 1987,
+ address = ith-ny,
+}
+
+@inproceedings{allen:tt-semant,
+ author = "Stuart Allen",
+ title = "A Non-Type-Theoretic Definition of
+ {Martin-L\"{o}f}'s Types",
+ booktitle = o2 # " " # lics,
+ year = 1987,
+ month = jun,
+ pages = "215--221",
+ address = ith-ny,
+}
+
+@article{amadio+:subtyping-rectypes,
+ author = "Roberto Amadio and Luca Cardelli",
+ title = "Subtyping Recursive Types",
+ journal = toplas,
+ year = 1993,
+ volume = 15,
+ number = 4,
+ pages = "575--631",
+}
+
+@inproceedings{appel+:cont-close,
+ author = "Andrew W. Appel and Trevor Jim",
+ title = "Continuation-Passing, Closure-Passing Style",
+ bookTitle = o16 # " " # popl,
+ year = 1989,
+ month = jan,
+ pages = "293--302",
+ address = "Austin",
+}
+
+@inproceedings{appel+:smlnj,
+ title = "{S}tandard {ML} of {N}ew {J}ersey",
+ author = "Andrew W. Appel and David B. MacQueen",
+ booktitle = "Third International Symposium on Programming
+ Language Implementation and Logic Programming",
+ publisher = springer,
+ month = aug,
+ year = "1991",
+ pages = "1--13",
+ volume = 528,
+ series = lncs,
+}
+
+@book{appel:cont-compiling,
+ author = "Andrew W. Appel",
+ title = "Compiling with Continuations",
+ publisher = cambridge-press,
+ year = 1992,
+}
+
+
+@inproceedings{appel+:pcc,
+ author = {Andrew W. Appel and Amy P. Felty},
+ title = {A Semantic Model of Types and Machine Instructions for Proof-Carrying Code},
+ booktitle = o27 # " " # popl,
+ month = jan,
+ year = 2000,
+ address = "Boston",
+ pages = "243--253"
+}
+
+@inproceedings{ armstrong97development,
+ author = "Joe Armstrong",
+ title = "The development of {Erlang}",
+ booktitle = "Proceedings of the {ACM} {SIGPLAN} International
+ Conference on Functional Programming ({ICFP} '97)",
+ pages = "196--203",
+ year = "1997",
+ url = "citeseer.nj.nec.com/37831.html" }
+
+@inproceedings{aspinall:subtype-singleton,
+ author = "David Aspinall",
+ title = "Subtyping with Singleton Types",
+ booktitle = o8 # " " # csl,
+ year = 1994,
+ month = sep,
+ address = "Kazimierz, Poland",
+ series = lncs,
+ volume = 933,
+ publisher = springer,
+ pages = "1--15",
+}
+
+
+@inproceedings{audebaud:partial-coq,
+ title = "Partial Objects in the Calculus of Constructions",
+ author = "Philippe Audebaud",
+ booktitle = o6 # " " # lics,
+ year = 1991,
+ month = jul,
+ pages = "86--95",
+ address = "Amsterdam",
+}
+
+@InProceedings{augustsson:cayenne,
+ author = {Lennart Augustsson},
+ title = {Cayenne--a language with dependent types},
+ booktitle = o3 # " " # icfp,
+ pages = {239--250},
+ year = 1998,
+ month = sep,
+}
+
+%% B %%
+
+@Article{barendregt:impact,
+ author = {Henk P. Barendregt},
+ title = { The impact of the lambda calculus },
+ journal = {Bulletin of Symbolic Logic},
+ year = 1997,
+ volume = 3,
+ number = 2
+}
+
+
+
+
+
+@InCollection{barendregt:pts,
+ author = {Henk P. Barendregt },
+ editor = {Samson Abramsky and Dov M. Gabbay and Thomas S. E. Maibaum},
+ booktitle = {Handbook of Logic in Computer Science},
+ title = {Lambda Calculi with Types},
+ publisher = {Clarendon Press},
+ year = 1992,
+ volume = 2,
+ pages = {117--309},
+ address = {Oxford}
+}
+
+@Book{barendregt:book,
+ author = {Hendrik P. Barendregt},
+ title = {The Lambda Calculus, its Syntax and Semantics},
+ publisher = {North Holland},
+ year = 1984,
+ edition = {Second}
+}
+
+@inproceedings{basin:automated-partial-fns,
+ author = "David A. Basin",
+ title = "An Environment for Automated Reasoning about Partial
+ Functions",
+ booktitle = o9 # " " # cade,
+ series = lncs,
+ volume = 310,
+ publisher = springer,
+ year = 1988,
+}
+
+@article{bates+:proofs-as-programs,
+ author = "Joseph L. Bates and Robert L. Constable",
+ title = "Proofs as Programs",
+ journal = toplas,
+ year = 1985,
+ volume = 7,
+ number = 1,
+ pages = "113--136",
+ month = jan,
+}
+
+@phdthesis{bates:phd,
+ author = "Joseph L. Bates",
+ title = "A Logic for Correct Program Development",
+ year = 1979,
+ school = cornell-cs,
+ address = ith-ny,
+}
+
+@article{beeson:recursive-models,
+ author = "Michael Beeson",
+ title = "Recursive Models for Constructive Set Theories",
+ journal = "Annals of Mathematical Logic",
+ volume = 23,
+ pages = "127--178",
+ year = 1982,
+}
+
+
+@InProceedings{berger91nbe,
+ author = {Ulrich Berger and Helmut Schwichtenberg},
+ title = {An inverse of the evaluation functional for typed $lambda$-calculus},
+ booktitle = { Proceedings of the Sixth Annual IEEE Symposium on Logic in Computer Science},
+ pages = {203--211},
+ year = {1991 },
+ editor = { R. Vemuri},
+ address = {Los Alamitos},
+ publisher = {IEEE Computer Society Press}
+}
+
+@inproceedings{benton+:sml-to-jvm,
+ author = "Nick Benton and Andrew Kennedy and George Russell",
+ title = "Compiling {Standard} {ML} to {Java} Bytecodes",
+ booktitle = 1998 # " " # icfp,
+ year = 1998,
+ month = sep,
+ address = "Baltimore",
+ pages = "129--140",
+}
+
+@inproceedings{bershad+:spin,
+ title = "Extensibility, Safety and Performance in the {SPIN}
+ Operating System",
+ author = "Brain Bershad and Stefan Savage and Przemyslaw
+ Pardyak and Emin Sirer and Marc Fiuczynski and David
+ Becker and Craig Chambers and Susan Eggers",
+ booktitle = o15 # " " # sosp,
+ year = 1995,
+ month = dec,
+ pages = "267--284",
+ address = "{C}opper {M}ountain",
+}
+
+
+
+
+@Article{bird+:debruijn,
+ author = {Richard S. Bird and Ross Paterson},
+ title = {De {B}ruijn Notation as a Nested Datatype},
+ journal = jfp,
+ year = 1999,
+ volume = 9,
+ number = 1,
+ pages = "77--91",
+}
+
+@InProceedings{bird+:nested,
+ author = {Richard Bird and Lambert Meertens},
+ title = {Nested Datatypes},
+ booktitle = "Proceedings 4th Int.\ Conf.\ on
+ Mathematics of Program Construction, {MPC}'98,
+ Marstrand, Sweden, 15--17 June 1998",
+ year = 1998,
+ volume = 1422,
+ series = lncs,
+ pages = "52--67"
+}
+
+@article{ bird99generalised,
+ author = "Richard Bird and Ross Paterson",
+ title = "Generalised Folds for Nested Datatypes",
+ journal = "Formal Aspects of Computing",
+ volume = "11",
+ number = "2",
+ pages = "200--222",
+ year = "1999",
+ editor = "Johan Juering",
+ url = "citeseer.nj.nec.com/bird99generalised.html"
+}
+
+
+
+@techreport{birkedal+:kit,
+ title = "The {ML} {K}it (Version 1)",
+ author = "Lars Birkedal and Nick Rothwell and Mads Tofte and
+ David N. Turner",
+ year = "1993",
+ institution = "{D}epartment of {C}omputer {S}cience, {U}niversity
+ of {C}openhagen",
+ number = "93/14"
+}
+
+@inproceedings{birkedal+:rec-type-interp,
+ author = "Lars Birkedal and Robert Harper",
+ title = "Relational Interpretations of Recursive
+ Types in an Operational Setting",
+ pages = "458-490",
+ booktitle = tacs,
+ year = 1997
+}
+
+@inproceedings{birkedal+:regions,
+ title = "From Region Inference to {v}on {N}eumann Machines
+ via Region Representation Inference",
+ author = "Lars Birkedal and Mads Tofte and Magnus Vejlstrup",
+ booktitle = o23 # " " # popl,
+ year = "1996",
+ month = jan,
+ pages = "171--183",
+ address = "St.\ Petersburg, Florida"
+}
+
+@phdthesis{blume:phd,
+ author = "Matthias Blume",
+ title = "Hierarchical Modularity and Intermodule
+ Optimization",
+ month = nov,
+ year = 1997,
+ school = "Princeton University, Department of Computer
+ Science",
+ address = "Princeton, New Jersey",
+}
+
+@article{boehm+:gc,
+ author = "Hans-J. Boehm and Mark Weiser",
+ title = "Garbage Collection in an uncooperative environment",
+ journal = "Software Practice and Experience",
+ volume = 18,
+ number = 9,
+ year = 1988,
+ month = sep,
+ pages = "807--820",
+}
+
+@inproceedings{boehm:infer-undecidable,
+ author = "Hans-J. Boehm",
+ title = "Partial Polymorphic Type Inference is Undecidable",
+ booktitle = o26 # " Annual Symposium on Foundations of Computer
+ Science",
+ year = 1985,
+ month = oct,
+ pages = "339--345",
+}
+
+
+
+@Article{bohm+:algebras,
+ author = {Corrado B\"ohm and Allessandro Berarducci},
+ title = {Automatic synthesis of typed {$\Lambda$}-programs on
+ term algebras},
+ journal = tcs,
+ year = 1985,
+ volume = 39,
+ pages = {135-154}
+}
+
+@inproceedings{ bracha98making,
+ author = "Gilad Bracha and Martin Odersky and David Stoutamire and Philip Wadler",
+ title = "Making the Future Safe for the Past: Adding Genericity to the {Java} Programming Language",
+ booktitle = "Object Oriented Programming: Systems, Languages, and Applications ({OOPSLA})",
+ address = "Vancouver, BC",
+ editor = "Craig Chambers",
+ pages = "183--200",
+ year = "1998",
+ url = "citeseer.nj.nec.com/bracha98making.html" }
+
+@inproceedings{ bracha93strongtalk,
+ author = "Gibblad Bracha and David Griswold",
+ title = "{Strongtalk: Typechecking Smalltalk in a Production Environment}",
+ booktitle = "Proceedings of the \mbox{OOPSLA}~'93 Conference on Object-oriented Programming Systems, Languages and Applications",
+ pages = "215--230",
+ year = "1993",
+ url = "citeseer.nj.nec.com/bracha93strongtalk.html" }
+
+
+@inproceedings{ brandt97coinductive,
+ author = "Michael Brandt and Fritz Henglein",
+ title = "Coinductive axiomatization of recursive type equality and subtyping",
+ booktitle = "Proc.\ 3d Int'l Conf. on Typed Lambda Calculi and Applications ({TLCA}), Nancy, France, April 2-4, 1997",
+ volume = "1210",
+ publisher = "Springer-Verlag",
+ editor = "Roger Hindley",
+ pages = "63--81",
+ year = "1997",
+ url = "citeseer.nj.nec.com/brandt98coinductive.html" }
+
+
+@inproceedings{breazu-tannen+:computing-w-coercions,
+ author = "Val Breazu-Tannen and Carl A. Gunter and Andre
+ Scedrov",
+ title = "Computing with Coercions",
+ booktitle = 1990 # " " # lfp,
+ year = 1990,
+ pages = "44--60",
+}
+
+@article{breazu-tannen+:implicit-coercion,
+ author = "Val Breazu-Tannen and Thierry Coquand and Carl
+ A. Gunter and Andre Scedrov",
+ title = "Inheritance as Implicit Coercion",
+ journal = iandc,
+ year = 1991,
+ volume = 93,
+ pages = "172--221",
+}
+
+@Article{Bobrow:1988:CLOa,
+ author = "Daniel G. Bobrow and Linda G. Demichiel and Richard P.
+ Gabriel and Sonya E. Keene and Gregor Kiczales And
+ David A. Moon",
+ title = "{Common Lisp Object System} Specification 1.
+ Programmer Interface Concepts",
+ journal = j-LISP-SYMB-COMPUT,
+ volume = "1",
+ number = "2",
+ pages = "245--298",
+ month = sep,
+ year = "1988",
+ CODEN = "LSCOEX",
+ ISSN = "0892-4635",
+ bibdate = "Fri Feb 12 06:09:25 1999",
+ acknowledgement = ack-nhfb,
+}
+
+@Article{Bobrow:1988:CLOb,
+ author = "Daniel G. Bobrow and Linda G. Demichiel and Richard P.
+ Gabriel and Sonya E. Keene and Gregor Kiczales And
+ David A. Moon",
+ title = "{Common Lisp Object System} Specification 2. Functions
+ in the Programmer Interface",
+ journal = j-LISP-SYMB-COMPUT,
+ volume = "1",
+ number = "2",
+ pages = "299--394",
+ month = sep,
+ year = "1988",
+ CODEN = "LSCOEX",
+ ISSN = "0892-4635",
+ bibdate = "Fri Feb 12 06:09:25 1999",
+ acknowledgement = ack-nhfb,
+}
+
+@article{bruce+:binary-methods,
+ author = "Kim B. Bruce and Luca Cardelli and Giuseppe Castagna
+ and The Hopkins Objects Group and Gary T. Leavens
+ and Benjamin C. Pierce",
+ title = "On Binary Methods",
+ journal = "Theory and Practice of Object Systems",
+ volume = 1,
+ number = 3,
+ pages = "221--242",
+ year = 1996,
+}
+
+@inproceedings{bruce+:comp-obj-encodings,
+ author = "Kim B. Bruce and Luca Cardelli and Benjamin
+ C. Pierce",
+ title = "Comparing Object Encodings",
+ booktitle = "Theoretical Aspects of Computer Software",
+ address = "Sendai, Japan",
+ year = 1997,
+ month = sep,
+}
+
+@article{bruce+:modest-model,
+ author = "Kim B. Bruce and Giuseppe Longo",
+ title = "A Modest Model of Records, Inheritance, and Bounded
+ Quantification",
+ journal = iandc,
+ year = 1991,
+ volume = 87,
+ pages = "196--240",
+}
+
+
+@article{bruce:paradigm-oop,
+ author = "Kim B. Bruce",
+ title = "A Paradigmatic Object-Oriented Programming Language:
+ Design, Static Typing and Semantics",
+ journal = jfp,
+ year = 1994,
+ month = apr,
+ volume = 4,
+ number = 2,
+ pages = "127--206",
+}
+
+%% C %%
+
+
+
+@inproceedings{canning+:f-bound-oop,
+ author = "Peter Canning and William Cook and Walter Hill and
+ John Mitchell and Walter Olthoff",
+ title = "F-Bounded Quantification for Object-Oriented
+ Programming",
+ booktitle = "FPCA89: " # fpca,
+ year = 1989,
+ month = sep,
+ pages = "273--280",
+}
+
+@inproceedings{cardelli+:fsub,
+ author = "Luca Cardelli and Simone Martini and John
+ C. Mitchell and Andre Scedrov",
+ title = "An Extension of System {F} With Subtyping",
+ booktitle = tacs # " 1991",
+ address = "Sendai, Japan",
+ year = 1991,
+ pages = "750--770",
+ series = lncs,
+ volume = 526,
+ publisher = springer,
+}
+
+@article{cardelli+:fun,
+ author = "Luca Cardelli and Peter Wegner",
+ title = "On Understanding Types, Data Abstraction, and
+ Polymorphism",
+ journal = "Computing Surveys",
+ volume = 17,
+ number = 4,
+ year = 1985,
+ month = dec,
+ pages = "471--522",
+}
+
+@techreport{cardelli+:modula3,
+ title = "Modula-3 Report (Revised)",
+ author = "Luca Cardelli and James Donahue and Lucille Glassman
+ and Mick Jordan and Bill Kalsow and Greg Nelson",
+ month = nov,
+ year = 1989,
+ number = 52,
+ institution = dec-src,
+}
+
+@incollection{cardelli:amber,
+ author = "Luca Cardelli",
+ title = "Amber",
+ booktitle = "Combinators and Functional Programming Languages",
+ publisher = springer,
+ editor = "Guy Coisineau and Pierre-Louis Curien and Bernard Robinet",
+ series = lncs,
+ volume = 242,
+ pages = "48--70",
+ year = 1986
+}
+
+@techreport{cardelli:extensible-records,
+ author = "Luca Cardelli",
+ title = "Extensible Records in a Pure Calculus of Subtyping",
+ institution = dec-src,
+ year = 1993,
+ type = "SRC Research Report",
+ number = "81",
+ month = jan,
+}
+
+@unpublished{cardelli:f-omega-sub,
+ author = "Luca Cardelli",
+ title = "Notes about {F$^\omega_{<:}$}",
+ note = "Unpublished manuscript",
+ year = 1990,
+}
+
+@techreport{cardelli:fsub-impl,
+ author = "Luca Cardelli",
+ title = "An Implementation of ${F}_{<:}$",
+ institution = dec-src,
+ year = 1993,
+ month = feb,
+ type = "SRC Research Report",
+ number = "97",
+}
+
+@article{cardelli:inherit-semantics,
+ author = "Luca Cardelli",
+ title = "A semantics of multiple inheritance",
+ journal = iandc,
+ volume = 76,
+ pages = "138--164",
+ year = 1988,
+}
+
+@unpublished{cardelli:phase,
+ author = "Luca Cardelli",
+ title = "Phase Distinctions in Type Theory",
+ note = "Unpublished manuscript",
+ year = 1988,
+ month = jan,
+}
+
+@inproceedings{cardelli:power-type,
+ author = "Luca Cardelli",
+ title = "Structural Subtyping and the Notion of Power Type",
+ booktitle = o15 # " " # popl,
+ year = 1988,
+ month = jan,
+ pages = "70--79",
+ address = "San Diego",
+}
+
+@incollection{cardelli:typeful,
+ author = "Luca Cardelli",
+ title = "Typeful Programming",
+ booktitle = "Formal Description of Programming Concepts",
+ year = 1991,
+ publisher = "Springer-Verlag",
+}
+
+@inproceedings{ cartwright98compatible,
+ author = "Robert Cartwright and Guy L. {Steele, Jr.}",
+ title = "Compatible Genericity with Run-time Types for the {Java} Programming Language",
+ booktitle = "{ACM} {S}ymposium on {O}bject {O}riented {P}rogramming: {S}ystems, {L}anguages, and {A}pplications ({OOPSLA}), Vancouver, British Columbia",
+ publisher = "ACM",
+ editor = "Craig Chambers",
+ pages = "201--215",
+ year = "1998",
+ url = "citeseer.nj.nec.com/cartwright98compatible.html" }
+
+
+@Manual{mlton,
+ title = {MLton User Guide},
+ author = {Henry Cejtin and Matthew Fluet and Suresh Jagannathan and Stephen Weeks},
+ month = apr,
+ year = 2000,
+ note = {\url{http://www.mlton.org/HTML/main.html}}
+}
+
+@Misc{cert:denial,
+ key = {CERT00},
+ author = {CERT Coordination Center and the Federal Computer
+ Incident Response Capability (FedCIRC)},
+ title = {{CERT} Advisory CA-2000-01 Denial-of-Service
+ Developments},
+ howpublished = {http://www.cert.org/advisories/CA-2000-01.html},
+ month = jan,
+ year = 2000
+}
+
+@inproceedings{ chak-keller:more-types,
+ author = {Manuel M. T. Chakravarty and Gabriele Keller},
+ title = {More Types for Nested Data Parallel Programming},
+ editor = {Philip Wadler},
+ booktitle = {Proceedings of the Fifth ACM SIGPLAN International
+ Conference on Functional Programming (ICFP'00)},
+ year = 2000,
+ publisher = {ACM Press},
+ pages = {94--105},
+ url = {citeseer.nj.nec.com/chakravarty00more.html} }
+
+
+
+ @InProceedings{chak:array-fusion,
+ author = {Manuel M. T. Chakravarty and Gabriele Keller},
+ title = {Functional Array Fusion},
+ booktitle = {Proceedings of the Sixth ACM SIGPLAN International
+ Conference on Functional Programming},
+ pages = {205--216},
+ year = 2002,
+ address = {Florence, Italy},
+ month = sep,
+ publisher = {{ACM} Press}
+}
+
+@InProceedings{cheung+:routing,
+ author = {Steven Cheung and Karl N. Levitt},
+ title = {Protecting routing infrastructures from denial of
+ service using cooperative intrusion detection },
+ booktitle = {Proceedings of the Workshop on New Paradigms},
+ year = 1998,
+ address = {Charlottesville, VA},
+ month = sep
+}
+
+@InProceedings{chin00sized,
+ author = {Wei-Ngan Chin and Siau-Cheng Khoo},
+ title = {Calculating Sized Types},
+ booktitle = pepm,
+ pages = "62--72",
+ year = 2000,
+ address = {Boston,USA},
+ month = jan
+}
+
+
+@Article{church:simple-types,
+ author = {Alonzo Church},
+ title = {A Formulation of the Simple Theory of Types},
+ journal = {Journal of Symbolic Logic},
+ year = 1940,
+ volume = 5,
+ pages = {56--68}
+}
+
+@InProceedings{clark90:_archit_consid,
+ author = {D. Clark and D. Tennenhouse},
+ title = {Architectural Considerations for a new generation of
+ protocols},
+ booktitle = sigcomm,
+ year = 1990,
+ address = {Philadelphia, Pennsylvania},
+ month = sep
+}
+
+
+
+@TechReport{generic-haskell,
+ author = {Dave Clarke and Ralf Hinze and Johan Jeuring and Andres L\"{o}h and Jan de Wit},
+ title = {The {G}eneric {H}askell user's guide},
+ institution = {Utrecht University },
+ year = 2001,
+ number = {UU-CS-2001-26}
+}
+
+
+@techreport{CoFu92,
+ author = "Robin Cockett and Tom Fukushima",
+ title = "About {C}harity",
+ institution = "Department of Computer Science, The University of Calgary",
+ month = jun,
+ year = 1992,
+ type = "Yellow Series Report",
+ number = "No.\ 92/480/18"
+}
+
+@InProceedings{cointe:meta-classes,
+ author = {Pierre Cointe},
+ title = {Metaclasses are first class: The {ObjVlisp} model},
+ booktitle = {Proceedings of the ACM Conference on Object-Oriented Programming Systems,
+ Languages, and Applications (OOPSLA)},
+ pages = {156--167},
+ year = 1987,
+ address = { Orlando, FL}
+}
+
+@MISC{COM,
+ KEY = {COM},
+ TITLE = {{M}icrosoft {COM} Technologies},
+ month = jan,
+ year = 2002,
+ NOTE = {\url{http://www.microsoft.com/com/default.asp}}
+}
+
+
+@article{compagnoni+:intersect-mult-inherit,
+ author = "Adriana B. Compagnoni and Benjamin C. Pierce",
+ title = "Higher-Order Intersection Types and Multiple
+ Inheritance",
+ journal = mscs,
+ pages = "469--501",
+ month = oct,
+ year = 1996,
+ volume = 6,
+ number = 5,
+}
+
+
+
+@inproceedings{constable+:comp-founds-fn-thy,
+ author = "Robert L. Constable and Scott Fraser Smith",
+ title = "Computational Foundations of Basic Recursive
+ Function Theory",
+ booktitle = o3 # " " # lics,
+ year = 1988,
+ address = "Edinburgh, Scotland",
+ pages = "360--371",
+ month = jul,
+}
+
+@inproceedings{constable+:intensional-analysis,
+ author = "Robert L. Constable and Karl Crary",
+ title = "Computational Complexity and Induction for Partial
+ Computable Functions in Type Theory",
+ booktitle = "Feferman Festschrift",
+ year = 1998,
+ month = dec
+}
+
+
+
+@book{constable+:nuprl,
+ title = "Implementing Mathematics with the {N}uprl Proof
+ Development System",
+ author = "Robert L. Constable and Stuart F. Allen and H. Mark Bromley and
+ W. Rance Cleaveland and James F. Cremer and Robert W. Harper and
+ Douglas J. Howe and Todd B. Knoblock and Nax Paul Mendler and
+ Prakash Panangaden and James T. Sasaki and Scott F. Smith",
+ publisher = "Prentice-Hall",
+ year = 1986,
+}
+
+@inproceedings{constable+:partial-objs,
+ author = "Robert L. Constable and Scott F. Smith",
+ title = "Partial Objects in Constructive Type Theory",
+ booktitle = o2 # " " # lics,
+ year = 1987,
+ month = jun,
+ pages = "183--193",
+ address = ith-ny,
+}
+
+@article{constable+:plcv3,
+ author = "Robert L. Constable and Daniel R. Zlatin",
+ title = "The Type Theory of {PL/CV3}",
+ journal = toplas,
+ volume = 6,
+ number = 1,
+ year = 1984,
+ month = jan,
+ pages = "94--117",
+}
+
+@techreport{constable:ita,
+ author = "Robert L. Constable",
+ title = "Intensional Analysis of Functions and Types",
+ year = 1982,
+ month = jun,
+ number = "CSR-118-82",
+ institution = edin-cs,
+}
+
+@incollection{constable:math-as-programming-logic,
+ author = "Robert L. Constable",
+ title = "Constructive Mathematics as a Programming Logic {I}:
+ Some Principles of Theory",
+ booktitle = "Topics in the Theory of Computation",
+ series = "Annals of Discrete Mathematics",
+ volume = 24,
+ publisher = elsevier,
+ year = 1985,
+ pages = "21--37",
+ note = "Selected papers of the International Conference on
+ Foundations of Computation Theory 1983",
+}
+
+@inproceedings{constable:tt-found-cs,
+ author = "Robert L. Constable",
+ title = "Type Theory as a Foundation for Computer Science",
+ booktitle = tacs # " 1991",
+ address = "Sendai, Japan",
+ year = 1991,
+ pages = "226--243",
+ series = lncs,
+ volume = 526,
+ publisher = springer,
+}
+
+@incollection{constable:types-logic-math-prog,
+ author = "Robert L. Constable",
+ title = "Types in Logic, Mathematics and Programming",
+ booktitle = "Handbook of Proof Theory",
+ editor = "Sam Buss",
+ chapter = 10,
+ year = 1998,
+ publisher = "Elsevier Science",
+}
+
+@inproceedings{cook+:inherit-not-subtyping,
+ author = "William R. Cook and Walter L. Hill and Peter
+ S. Canning",
+ title = "Inheritance is not Subtyping",
+ booktitle = o17 # " " # popl,
+ pages = "125--135",
+ month = jan,
+ year = 1990,
+ address = "San Francisco",
+}
+
+@TechReport{coq-manual,
+ title = "The {Coq} Proof Assistant Reference Manual: Version 6.1",
+ author = "Bruno Barras and Samuel Boutin and Cristina Cornes
+ and {Judica\"{e}l} Courant and Jean-Christophe
+ Filli\^{a}tre and Eduardo Gim\'{e}nez and Hugo
+ Herbelin and G\'{e}rard Huet and C\'{e}sar
+ {Mu\~{n}oz} and Chetan Murthy and Catherine Parent
+ and Christine Paulin-Mohring and Amokrane
+ {Sa\"{\i}bi} and Benjamin Werner",
+ institution = "{INRIA-Rocquencourt, CNRS and ENS Lyon}",
+ number = "RT-0203",
+ year = "1997",
+
+}
+
+@article{coquand+:coc,
+ author = "Thierry Coquand and G\'{e}rard Huet",
+ title = "The Calculus of Constructions",
+ journal = iandc,
+ year = 1988,
+ volume = 76,
+ pages = "95--120",
+}
+
+@inproceedings{coquand:girard-paradox,
+ author = "Thierry Coquand",
+ title = "An Analysis of {G}irard's Paradox",
+ booktitle = o1 # " " # lics,
+ year = 1986,
+ month = jun,
+ pages = "227--236",
+ address = cam-ma,
+}
+
+@incollection{coquand:investigate-coc,
+ author = "Thierry Coquand",
+ title = "Metamathematical Investigations of a Calculus of
+ Constructions",
+ booktitle = "Logic and Computer Science",
+ pages = "91--122",
+ year = 1990,
+ series = "The {APIC} Series",
+ volume = 31,
+ editor = "P. Odifreddi",
+ publisher = academic,
+}
+
+
+
+
+@InProceedings{coquand+:inductively,
+ author = {Thierry Coquand and Christin Paulin-Mohring},
+ title = {Inductively Defined Types},
+ booktitle = {COLOG-88 International Conference on Computer Logic},
+ pages = {50--66},
+ year = 1988,
+ editor = {P. Martin-L\"{o}f and G. Mints},
+ volume = 417,
+ series = lncs,
+ address = {Tallinn, USSR},
+ month = dec,
+ publisher = springer
+}
+
+@Incollection{coquand:new-paradox,
+ author = {Thierry Coquand},
+ editor = {Dag Prawitz and Brian Skyrms and Dag Westerst\aa{}hl},
+ booktitle = {Logic, Methodology and Philosophy of Science IX :
+ Proceedings of the Ninth International Congress of Logic,
+ Methodology, and Philosophy of Science, Uppsala, Sweden, August
+ 7-14, 1991},
+ title = {A New Paradox in Type Theory},
+ publisher = elsevier,
+ volume = 134,
+ year = 1994,
+ pages = "555--570",
+ address = {Amsterdam},
+ url = "citeseer.nj.nec.com/coquand94new.html"
+}
+
+@InProceedings{coquand:conversion,
+ author = {Thierry Coquand},
+ editor = {G\'{e}rard Huet and Gordon Plotkin},
+ booktitle = {Logical Frameworks},
+ title = {An Algorithm for Testing Conversion in Type Theory},
+ publisher = cambridge-press,
+ year = 1991,
+ pages = {255-277}
+}
+
+@inproceedings{crary+:capabilities,
+ author = "Karl Crary and David Walker and Greg Morrisett",
+ title = "Typed Memory Management in a Calculus of
+ Capabilities",
+ year = 1999,
+ month = jan,
+ booktitle = o26 # " " # popl,
+ address = "San Antonio, Texas",
+}
+
+@techreport{crary+:datatypes,
+ author = "Karl Crary and Robert Harper and Perry Cheng and
+ Leaf Petersen and Chris Stone",
+ title = "Transparent and Opaque Interpretations of Datatypes",
+ institution = cmu-cs,
+ month = nov,
+ year = 1998,
+ number = "CMU-CS-98-177",
+ memo = "Also published as Fox Memorandum CMU-CS-FOX-98-04.",
+}
+
+
+@techreport{crary+:lx-tr,
+ author = "Karl Crary and Stephanie Weirich",
+ title = "Flexible Type Analysis (Extended version)",
+ year = 1999,
+ institution = cornell-cs,
+}
+
+@InProceedings{crary+:popcron,
+ author = {Karl Crary and Stephanie Weirich},
+ title = {Resource Bound Certification},
+ booktitle = o27 # " " # popl,
+ pages = {184--198},
+ year = 2000,
+ address = "Boston, MA",
+ month = jan
+}
+
+@inproceedings{crary+:recmod,
+ author = "Karl Crary and Robert Harper and Sidd Puri",
+ title = "What is a Recursive Module?",
+ booktitle = 1999 # " " # pldi,
+ month = may,
+ year = 1999,
+ address = "Atlanta",
+ memo = "Also published as TR CMU-CS-98-168 and Fox
+ Memorandum CMU-CS-FOX-98-03.",
+}
+
+@inproceedings{crary:admissibility,
+ author = "Karl Crary",
+ title = "Admissibility of Fixpoint Induction over Partial
+ Types",
+ booktitle = o15 # " " # cade,
+ year = 1998,
+ month = jul,
+ address = "Lindau, Germany",
+ pages = "270--285",
+ publisher = springer,
+ series = lncs,
+ volume = 1421,
+ note = "Extended version published as CMU technical report
+ CMU-CS-98-164."
+}
+
+@techreport{crary:admissibility-tr,
+ author = "Karl Crary",
+ title = "Admissibility of Fixpoint Induction over Partial
+ Types",
+ institution = cmu-cs,
+ year = 1998,
+ month = oct,
+ number = "CMU-CS-98-164",
+}
+
+@inproceedings{crary:ho-subtyping-impl,
+ author = "Karl Crary",
+ title = "Foundations for the Implementation of Higher-Order
+ Subtyping",
+ booktitle = 1997 # " " # icfp,
+ year = 1997,
+ month = jun,
+ address = "Amsterdam",
+ pages = "125--135",
+}
+
+@manual{crary:kml96-manual,
+ title = "{KML} Reference Manual",
+ author = "Karl Crary",
+ year = 1996,
+ organization = cornell-cs,
+}
+
+@techreport{crary:orei,
+ author = "Karl Crary",
+ title = "Simple, Efficient Object Encoding using Intersection
+ Types",
+ institution = cmu-cs,
+ year = 1999,
+ month = jan,
+ number = "CMU-CS-99-100",
+ memo = "Also published as Fox Memorandum CMU-CS-FOX-99-01",
+}
+
+@techreport{crary:orei-old,
+ author = "Karl Crary",
+ title = "Simple, Efficient Object Encoding using Intersection
+ Types",
+ institution = cornell-cs,
+ year = 1998,
+ month = apr,
+ number = "TR98-1675",
+}
+
+@inproceedings{crary:param-sing,
+ author = "Karl Crary",
+ title = "A Simple Proof Technique for Certain Parametricity
+ Results",
+ booktitle = 1999 # " " # icfp,
+ year = 1999,
+ month = sep,
+ address = "Paris",
+ pages = "82--89",
+ memo = "Also published as CMU-CS-98-185 and Fox Memorandum
+ CMU-CS-FOX-98-06.",
+}
+
+@phdthesis{crary:phd,
+ author = "Karl Crary",
+ title = "Type-Theoretic Methodology for Practical Programming
+ Languages",
+ month = aug,
+ year = 1998,
+ school = cornell-cs,
+ address = ith-ny,
+}
+
+@inproceedings{crary:tt-semant,
+ author = "Karl Crary",
+ title = "Programming Language Semantics in Foundational Type
+ Theory",
+ booktitle = "International Conference on Programming Concepts and
+ Methods",
+ year = 1998,
+ address = "Shelter Island, New York",
+ publisher = chapman,
+ note = "Extended version published as Cornell University
+ technical report TR98-1666.",
+}
+
+@techreport{crary:tt-semant-tr,
+ author = "Karl Crary",
+ title = "Programming Language Semantics in Foundational Type
+ Theory",
+ institution = cornell-cs,
+ year = 1998,
+ month = feb,
+ number = "TR98-1666",
+ address = ith-ny
+}
+
+
+
+@InProceedings{crary:subtyping,
+ author = {Karl Crary},
+ title = {Typed Compilation of Inclusive Subtyping},
+ booktitle = {International Conference on Functional Programming (ICFP '00)},
+ year = 2000,
+ address = {Montreal, CA},
+ month = sep
+}
+
+@inproceedings{curien+:coherence,
+ author = "Pierre-Louis Curien and Giorgio Ghelli",
+ title = "Coherence of Subsumption",
+ booktitle = "Fifteenth Colloquium on Trees in Algebra and
+ Programming",
+ publisher = springer,
+ series = lncs,
+ volume = 431,
+ year = 1990,
+ pages = "132--146",
+}
+
+@article{curien+:confluent-subs,
+ author = "Pierre-Louis Curien and Th\'{e}r\`{e}se Hardin and
+ Jean-Jacques L\'{e}vy",
+ title = "Confluence Properties of Weak and Strong Calculi of
+ Explicit Substitutions",
+ journal = jacm,
+ month = mar,
+ year = 1996,
+ volume = 43,
+ number = 2,
+ pages = "362--397",
+}
+
+@Book{curry-feys,
+ author = {Haskell Curry and Robert Feys},
+ title = { Combinatory Logic I},
+ publisher = { North-Holland},
+ year = 1958
+}
+
+@inproceedings{czajkowki98:_jres,
+ author = {Grzegorz Czajkowki and Thorsten von Eiken},
+ title = {{JR}es: A Resource Accounting Interface for Java},
+ booktitle = "Proceedings of the 1998 " # oopsla,
+ pages = "21--35",
+ year = 1998,
+ volume = 33,
+ number = 10,
+ series = {SIGPLAN Notices},
+ month = oct
+}
+
+@inproceedings{czajkowski99database,
+ author = {Grzegorz Czajkowski and Tobias Mayr and Praveen
+ Seshadri and Thorsten von Eicken},
+ title = {Resource Control for Database Extensions},
+ year = 1999,
+ booktitle = o5 # " " # "USENIX Conference on Object-Oriented
+ Technologies and Systems",
+ month = may,
+ address = {San Diego, California, USA}
+}
+
+%% D %%
+
+@article{danvy+:control,
+ author = "Olivier Danvy and Andrzej Filinski",
+ title = "Representing control: a study of the {CPS}
+ transformation",
+ journal = "Mathematical Structures in Computer Science",
+ volume = 2,
+ number = 4,
+ month = dec,
+ year = 1992,
+ pages = "361--391",
+}
+
+@inproceedings{ danvy96typedirected,
+ author = "Olivier Danvy",
+ title = "Type-Directed Partial Evaluation",
+ booktitle = "{POPL}'96: The 23rd {ACM} {SIGPLAN}-{SIGACT}
+ Symposium on Principles of Programming Languages, St. Petersburg,
+ Florida, January 1996",
+ pages = "242--257",
+ year = "1996",
+ url = "citeseer.nj.nec.com/danvy96typedirected.html"
+}
+
+@inproceedings{davies+:modal-logic-comp,
+ author = "Rowan Davies and Frank Pfenning",
+ title = "A Modal Analysis of Staged Computation",
+ booktitle = o23 # " " # popl,
+ year = 1996,
+ month = jan,
+ pages = "258--270",
+}
+
+
+@Article{pfenning+:judgmental-reconstruct,
+ author = {Frank Pfenning and Rowan Davies.},
+ title = {A Judgmental Reconstruction of Modal Logic},
+ journal = {Mathematical Structures in Computer Science},
+ year = 2001,
+ volume = 11,
+ number = 4,
+ pages = {511--540},
+ month = aug
+}
+
+@inproceedings{davies:temporal-logic-comp,
+ author = "Rowan Davies",
+ title = "A Temporal-Logic Approach to Binding-Time Analysis",
+ booktitle = o11 # " " # lics,
+ year = 1996,
+ month = jul,
+ pages = "184--195",
+}
+
+@incollection{debruijn:automath-survey,
+ author = "Nicolaas Govert de Bruijn",
+ title = "A Survey of the Project {Automath}",
+ booktitle = "To {H.B.} {Curry}: Essays on Combinatory Logic,
+ Lambda-Calculus and Formalism",
+ editor = "J. Roger Seldin and Jonathan R. Hindley",
+ pages = "579--606",
+ publisher = "Academic Press",
+ year = 1980,
+}
+
+@article{debruijn:dummies,
+ author = "Nicolaas Govert de Bruijn",
+ title = "Lambda-Calculus Notation with Nameless Dummies: a
+ Tool for Automatic Formula Manipulation with
+ Application to the {Church-Rosser} Theorem",
+ journal = "Indagationes Mathematicae",
+ volume = 34,
+ number = 5,
+ year = 1972,
+ pages = "381--392",
+}
+
+
+
+@Book{des-rivieres:MOP,
+ author = {Gregor Kiczales and Jim des Rivieres and Daniel Bobrow},
+ title = {The Art of the Meta-Object Protocol},
+ publisher = mit-press,
+ year = 1991
+}
+
+
+@InProceedings{des-rivieres+:implementation-reflective,
+ author = {Jim des Rivieres and Brian Cantwell Smith},
+ title = {The implementation of procedurally reflective languages},
+ booktitle = {Conference Record of the 1984 ACM Symposium on LISP and Functional Programming},
+ pages = {331--347},
+ year = 1984,
+ address = {Austin, Texas},
+ publisher = "ACM Press"
+}
+
+@inproceedings{demers+:reflection-survey,
+ author = {Francois-Nicola Demers and Jacques Malenfant},
+ title = {Reflection and logic, functional and object-oriented programming:
+ a Short Comparative Study},
+ booktitle = {{IJCAI '95} Workshop on Reflection and Metalevel Architectures
+ and their Applications in AI},
+ pages = {29--38},
+ year = 1995,
+ month = aug,
+ url = {citeseer.nj.nec.com/106401.html}
+ }
+
+@Article{despeyroux+:functional,
+ author = {{Jo\"{e}lle} Despeyroux and Pierre Leleu },
+ title = {Recursion over Objects of Functional Type},
+ journal = {Mathematical Structures in Computer Science},
+ year = {2001},
+ volume = 11,
+ pages = "555-572",
+ publisher = cambridge-press
+}
+
+@InProceedings{despeyroux+:functional-preprint,
+ author = {{Jo\"{e}lle} Despeyroux and Pierre Leleu },
+ title = {Recursion over Objects of Functional Type},
+ booktitle = {Proceedings of the Types Working Group Meeting at Kloster Irsee, 1998},
+ year = 1999,
+ number = 1657,
+ series = lncs,
+ address = {Berlin},
+ publisher = springer
+}
+
+
+@InProceedings{despeyroux+:modal,
+ author = {{Jo\"{e}lle} Despeyroux and Pierre Leleu },
+ title = {A modal lambda-calculus with iteration and case constructs},
+ booktitle = {Proceedings of the Types Working Group Meeting at Kloster Irsee, 1998},
+ year = 1999,
+ number = 1657,
+ series = lncs,
+ address = berlin,
+ publisher = springer
+}
+
+@inproceedings{despeyroux+:ho-recursion,
+ author = "{Jo\"{e}lle} Despeyroux and Frank Pfenning and
+ {Carsten Sch\"{u}rmann}",
+ title = "Primitive Recursion for Higher-Order Abstract
+ Syntax",
+ booktitle = o3 # " " # tlca,
+ year = 1997,
+ month = apr,
+ address = "Nancy, France",
+ pages = "147--163",
+ series = lncs,
+ volume = 1210,
+ publisher = springer,
+ annote = "Extended version published as CMU technical report
+ CMU-CS-96-172.",
+}
+
+@inproceedings{dimock+:flow-transforms,
+ title = "Strongly Typed Flow-Directed Representation
+ Transformations",
+ author = "Allyn Dimock and Robert Muller and Franklyn Turbak
+ and J.~B.~Wells",
+ booktitle = 1997 # " " # icfp,
+ year = 1997,
+ month = jun,
+ address = "Amsterdam",
+ pages = "11--24",
+}
+
+@InCollection{dobson91,
+ author = {John E. Dobson},
+ title = {Information and Denial of Service},
+ booktitle = {Database Security V: Status and Prospects},
+ series = {IFIP Transactions},
+ volume = {A-6},
+ pages = {21--46},
+ year = 1991
+}
+
+@inproceedings{dubois+:extensional-poly,
+ author = "Catherine Dubois and Fran\c{c}ois Rouaix and Pierre
+ Weis",
+ title = "Extensional Polymorphism",
+ booktitle = o22 # " " # popl,
+ address = "San Francisco",
+ month = jan,
+ year = 1995,
+ pages = "118--129",
+}
+
+@inproceedings{duggan:marshalling,
+ author = "Dominic Duggan",
+ title = "A Type-Based Semantics for User-Defined Marshalling
+ in Polymorphic Languages",
+ booktitle = o2 # " " # tic,
+ year = 1998,
+ month = mar,
+}
+
+@InProceedings{duggan:tmal,
+ author = {Dominic Duggan},
+ title = {Sharing in Typed Module Assembly Language},
+ booktitle = {Types in Compilation : Third International Workshop, {TIC} 2000 Montreal;
+ Canada, September 21, 2000; Revised Selected Papers},
+ year = 2001,
+ editor = {R. Harper},
+ pages = {85--116},
+ volume = 2071,
+ series = lncs,
+ address = {Berlin},
+ publisher = {Springer}
+}
+
+@book{dummett:intuitionism,
+ author = "Michael Dummett",
+ title = "Elements of Intuitionism",
+ publisher = "Clarendon Press",
+ year = 1977,
+ series = "Oxford Logic Guides",
+}
+
+
+@InCollection{dybjer:inductive,
+ author = {Peter Dybjer},
+ title = {Inductive sets and families in {M}artin-{L}\"of's
+ type theory and their set-theoretic semantics},
+ booktitle = {Logical Frameworks},
+ pages = {280--306},
+ year = 1991,
+ editor = {Gerard Huet and Gordon
+ Plotkin},
+ publisher = {Prentice Hall}
+}
+
+%% E %%
+
+@incollection{eifrig+:constrained-types,
+ author = "J. Eifrig and S. Smith and V. Trifonov",
+ title = "Type Inference for Recursively Constrained Types and
+ its Application to {OOP}",
+ booktitle = mfps,
+ publisher = elsevier,
+ series = "Electronic Notes in Theoretical Computer Science",
+ volume = 1,
+ year = 1995,
+}
+
+@BOOKLET{ELF,
+ AUTHOR = {{T}ool {I}nterface {S}tandards {C}ommittee},
+ TITLE = {{E}xecutable and {L}inking {F}ormat ({ELF}) Specification},
+ MONTH = {May},
+ YEAR = {1995},
+ HOWPUBLISHED = {\url{http://x86.ddj.com/ftp/manuals/tools/elf.pdf}}
+}
+
+
+@InProceedings{engblom98optimize,
+ author = {Jakob Engblom and Andreas Ermedahl and Peter
+ Altenbernd},
+ title = {Facilitating worst-case execution time analysis of
+ optimized code},
+ booktitle = {Proceedings of the 10th EuroMicro Workshop on
+ Real-Time Systems},
+ year = 1998,
+ address = {Berlin, Germany},
+ month = jun
+}
+
+@INPROCEEDINGS{EnglerKO95,
+ TITLE = {{E}xokernel: an operating system architecture for application-level
+ resource management},
+ AUTHOR = {Dawson R. Engler and M. Frans Kaashoek and James {O'Toole Jr.}},
+ BOOKTITLE = {Proceedings of the 15th {ACM} {S}ymposium on {O}perating
+ {S}ystems {P}rinciples},
+ YEAR = {1995},
+ MONTH = {December},
+ ADDRESS = {Copper Mountain Resort, Colorado},
+ PAGES = {251--266},
+ URL = {http://www.pdos.lcs.mit.edu/papers/exokernel-sosp95.ps}
+}
+
+
+
+@InProceedings{erlingsson99sasi,
+ author = {\'{U}lfar Erlingsson and Fred B. Schneider},
+ title = {{SASI} Enforcement of Security Policies: A
+ Retrospective},
+ booktitle = {Proceedings of the 1999 New Security Paradigms
+ Workshop},
+ year = 1999,
+ address = {Caledon Hills, Ontario, Canada},
+ month = sep
+}
+
+%% F %%
+
+@Article{feferman62,
+ author = {Solomon Feferman},
+ title = { Transfinite Recursive Progressions of Axiomatic Theories.},
+ journal = { Journal of Symbolic Logic},
+ year = 1962,
+ volume = 27,
+ number = 3,
+ pages = {259--316},
+ month = sep
+}
+
+@inproceedings{ fegaras+:outer-space,
+ author = "Leonidas Fegaras and Tim Sheard",
+ title = "Revisiting Catamorphisms over Datatypes with Embedded Functions (or, Programs from Outer Space)",
+booktitle = o23 # popl,
+ address = {St.~Petersburg Beach, {FL},{USA}},
+ pages = "284--294",
+ year = 1996,
+ annote = {Also: OGI Technical Report 95/014},
+ url = "citeseer.nj.nec.com/article/fegaras96revisiting.html" }
+
+% publisher = "ACM Press",
+% address = "New York",
+% booktitle = "Conf.\ Record 23rd {ACM} {SIGPLAN}/{SIGACT} Symp.\
+% on Principles of Programming Languages, {POPL}'96,
+% St.~Petersburg Beach, {FL}, {USA}, 21--24 Jan.\ 1996",
+
+
+@InCollection{ferdinand98cache,
+ author = {Christian Ferdinand and Reinhard Wilhelm},
+ title = {On predicting Data Cache Behavior for Real-Time
+ systems},
+ booktitle = lctes,
+ pages = "16--30",
+ publisher = springer,
+ year = 1998,
+ editor = {Frank Muller and Azer Bestarvros},
+ volume = 1474,
+ series = lncs,
+ month = jun
+}
+
+@phdthesis{filinski:phd,
+ author = "Andrzej Filinski",
+ title = "Controlling Effects",
+ year = 1996,
+ month = may,
+ school = cmu-cs,
+ address = pgh-pa,
+}
+
+@inproceedings{fischer:cps,
+ author = "M.J. Fischer",
+ title = "Lambda calculus schemata",
+ booktitle = "ACM Conference on Proving Assertions About Programs,
+ SIGPLAN Notices 7(1)",
+ year = 1972,
+ pages = "104--109",
+}
+
+
+@inproceedings{flatt+:units,
+ author = "Matthew Flatt and Matthias Felleisen",
+ title = "Units: Cool Modules for {HOT} Languages",
+ booktitle = 1998 # " " # pldi,
+ pages = "236--248",
+ year = 1998,
+ month = jun,
+ address = "Montreal, Canada",
+}
+
+
+
+@InProceedings{freeman91refinement,
+ author = {Tim Freeman and Frank Pfenning},
+ title = {Refinement Types for {ML}},
+ booktitle = 1991 # " " # pldi,
+ pages = {268--277},
+ year = 1991,
+ address = {Toronto, Canada},
+ month = jun
+}
+
+@InBook{friedman:equality,
+ author = {H. Friedman},
+ editor = {R. Parikh},
+ chapter = {Equality between functionals},
+ title = {Logic Colloquium},
+ publisher = {Springer-Verlag},
+ year = 1975,
+ address = {Berlin},
+ pages = {22--37}
+}
+
+%% G %%
+
+@Article{PittsAM:newaas-jv,
+ author = {M. J. Gabbay and A. M. Pitts},
+ title = {A New Approach to Abstract Syntax with Variable
+ Binding},
+ journal = {Formal Aspects of Computing},
+ year = 2001,
+ volume = 13,
+ pages = {341--363}
+}
+
+
+@incollection{gallier:candidates-of-reducibility,
+ author = "Jean H. Gallier",
+ title = "On {Girard's} ``{Candidats} de {Reductibilit{\'{e}}}''",
+ booktitle = "Logic and Computer Science",
+ pages = "123--203",
+ year = 1990,
+ series = "The {APIC} Series",
+ volume = 31,
+ editor = "P. Odifreddi",
+ publisher = academic,
+}
+
+@InProceedings{gapayev+:regular-object-types,
+ author = {Vladimir Gapeyev and Benjamin Pierce},
+ title = {Regular Object Types},
+ booktitle = {Proc. 10th International Workshops on Foundations of Object-Oriented Languages, FOOL '03},
+ year = 2003,
+ address = {New Orleans, LA, USA},
+ month = jan
+}
+
+@InCollection{gandy:turing-proof,
+ author = {Robin O. Gandy},
+ editor = "J. Roger Seldin and Jonathan R. Hindley",
+ title = { An Early Proof of Normalization by {A.M. Turing}},
+ booktitle = { Introduction to Combinators and $\lambda$-Calculus },
+ publisher = cambridge-press,
+ year = 1986,
+ series = {London Mathematical Society Student Texts},
+ address = {Cambridge},
+ pages = {453--455 }
+}
+
+@InProceedings{garrigue:poly-variants,
+ author = {J. Garrigue},
+ title = {Programming with polymorphic variants},
+ booktitle = {ML Workshop},
+ url = "citeseer.nj.nec.com/garrigue98programming.html",
+ year = 1998,
+ month = sep
+}
+
+
+@inproceedings{gifford+:effects,
+title = "Integrating functional and imperative programming",
+author = "D. K. Gifford and J. M. Lucassen",
+booktitle = "{ACM} Conference on {Lisp} and Functional Programming",
+address = "Cambridge, Massachusetts",
+month = aug,
+year = 1986
+}
+
+
+@article{ghelli:fsub-divergence,
+ author = "Giorgio Ghelli",
+ title = "Divergence of {$F_{\leq}$} type checking",
+ journal = "Theoretical Computer Science",
+ volume = 139,
+ number = "1,2",
+ pages = "131--162",
+ year = 1995,
+}
+
+@phdthesis{ghelli:phd,
+ author = "Giorgio Ghelli",
+ title = "Proof Theoretic Studies about a Minimal Type System
+ Integrating Inclusion and Parametric Polymorphism",
+ school = "Dipartimento di Informatica, Universit\`{a} di Pisa",
+ year = 1990,
+ month = mar,
+}
+
+@book{girard+:proofs-and-types,
+ author = "Jean-Yves Girard and Yves Lafont and Paul Taylor",
+ title = "Proofs and Types",
+ publisher = cambridge-press,
+ year = 1988,
+}
+
+@inproceedings{girard:cut-elimination,
+ author = "Jean-Yves Girard",
+ title = "Une extension de l'interpr\'{e}tation de {G\"{o}del}
+ \`{a} l'analyse, et son application \`{a}
+ l'\'{e}limination de coupures dans l'analyse et la
+ th\'{e}orie des types",
+ editor = "J. E. Fenstad",
+ booktitle = "Proceedings of the Second Scandinavian Logic
+ Symposium",
+ pages = "63--92",
+ year = 1971,
+ publisher = "North-Holland Publishing Co.",
+}
+
+@article{girard:linear,
+ title = "Linear Logic",
+ author = "Jean-Yves Girard",
+ journal = "Theoretical Computer Science",
+ year = 1987,
+ volume = 50,
+ pages = "1--102",
+}
+
+@phdthesis{girard:phd,
+ author = "Jean-Yves Girard",
+ title = "Interpr\'{e}tation fonctionelle et \'{e}limination
+ des coupures de l'arithm\'{e}tique d'ordre
+ sup\'{e}rieur",
+ school = "Universit\'{e} Paris VII",
+ year = 1972,
+}
+
+
+
+@InProceedings{glew:branded,
+ author = {Neal Glew},
+ title = {Type Dispatch for Named Hierarchical Types},
+ booktitle = 1999 # " " # icfp,
+ pages = {172--182},
+ year = 1999,
+ address = {Paris, France},
+ month = sep
+}
+
+@inproceedings{glew+:linking,
+ author = "Neal Glew and Greg Morrisett",
+ title = "Type-Safe Linking and Modular Assembly Language",
+ year = 1999,
+ booktitle = o26 # " " # popl,
+ month = jan,
+ address = {San Antonio, TX},
+ pages = {250--261}
+}
+
+@Article{gligor84:os,
+ author = {Virgil D. Gligor},
+ title = {A Note on Denial-of-Service in Operating Systems},
+ journal = {IEEE Transactions on Software Engineering},
+ year = 1984,
+ volume = 10,
+ number = 3,
+ pages = {320--324}
+}
+
+@inproceedings{gligor86:_denial_servic_comput_networ,
+ author = {Virgil D. Gligor},
+ title = {On Denial-of-Service in Computer Networks},
+ booktitle = {Proceedings of the Second International Conference
+ on Data Engineering, February 5-7, 1986, Los
+ Angeles, California, USA},
+ publisher = {IEEE Computer Society},
+ year = 1986,
+ isbn = {0-8186-0655-X},
+ pages = {608-617},
+ crossref = {DBLP:conf/icde/86},
+ bibsource = {DBLP, http://dblp.uni-trier.de}
+}
+
+@Article{godel:incompleteness,
+ author = {Kurt Godel},
+ title = {\"{U}ber formal unentschiedbare S\"atze der
+ Principia Mathematica und verwandter Systeme, {I}},
+ journal = {Monatshefte f\"ur Mathematik und Physik},
+ year = 1931,
+ volume = 38,
+ pages = {173--98}
+}
+
+@InProceedings{godfrey98:_secur_portab_datab_exten,
+ author = {M. Godfrey and T. Mayr and P. Seshadri and T. von
+ Eiken},
+ title = {Secure and Portable Database Extensibility},
+ booktitle = sigmod,
+ year = 1998,
+ volume = 27,
+ number = 2,
+ series = {SIGMOD Record},
+ month = jun
+}
+
+@book{gordon+:hol,
+ author = "Michael J. C. Gordon and Tom F. Melham",
+ title = "Introduction to {HOL}: A Theorem Proving Environment
+ for Higher-Order Logic",
+ publisher = cambridge-press,
+ year = 1993,
+}
+
+@inproceedings{gordon+:imperative-objs,
+ author = "Andrew D. Gordon and Paul D. Hankin and {S\o ren}
+ B. Lassen",
+ title = "Compilation and Equivalence of Imperative Objects",
+ booktitle = "Foundations of Software Technology and Theoretical
+ Computer Science",
+ year = 1997,
+ month = dec,
+ series = lncs,
+ volume = 1346,
+ publisher = springer,
+}
+
+@book{gordon+:lcf,
+ author = "Michael J. Gordon and Arthur J. Milner and
+ Christopher P. Wadsworth",
+ title = "Edinburgh {LCF}: A Mechanised Logic of Computation",
+ publisher = springer,
+ series = lncs,
+ year = 1979,
+ volume = 78,
+}
+
+@book{gosling+:java,
+ author = "James Gosling and Bill Joy and Guy Steele",
+ title = "The {Java} Language Specification",
+ publisher = addison,
+ year = 1996,
+}
+
+@inproceedings{gougen+:datatypes,
+ author = "J. A. Goguen and J. W. Thatcher and E. G. Wagner",
+ title = "An initial algebra approach to the specification,
+ correctness and implementation of abstract data types.",
+ editor = "R. T. Yeh",
+ booktitle = "Current Trends in Programming Methodology IV:
+ Data Structuring",
+ pages = "80--144",
+ publisher = "Prentice Hall",
+ year = 1978
+}
+
+
+
+
+@InProceedings{green:java-reflection,
+ author = {Dale Green},
+ editor = {Mary Campione and Kathy Walrath and Alison Huml and Tutorial Team},
+ booktitle = {The Java Tutorial Continued: The Rest of the JDK(TM) },
+ title = {Trail: The Reflection {API}},
+ publisher = {Addison-Wesley Pub Co},
+ year = 1998,
+ note = {\url{http://java.sun.com/docs/books/tutorial/reflect/index.html}}
+}
+
+@Article{grossman:sta,
+ author = {Dan Grossman and Greg Morrisett and Steve Zdancewic},
+ title = {Syntactic Type Abstraction},
+ journal = toplas,
+ year = 2000,
+ volume = 22,
+ number = 6,
+ pages = {1037--1080},
+ month = nov
+}
+
+@InProceedings{grossman+:tic,
+ author = {Dan Grossman and Greg Morrisett},
+ title = {Scalable Certification of Native Code: Experience
+ from Compiling to TALx86},
+ booktitle = "Preliminary Proceedings of the Third " # tic,
+ year = 2000,
+ address = {Montreal, CA},
+ month = sep,
+ note = {Extended version published as Cornell University Computer Science technical
+report TR2000-1783}
+}
+
+@TechReport{grossman00,
+ author = {Dan Grossman and Greg Morrisett},
+ title = {Scalable Certification of Native Code: Experience
+ from Compiling to TALx86},
+ institution = cornell-cs,
+ year = 2000,
+ number = {TR2000-1783},
+ month = feb
+}
+
+
+@book{gunter+:theoretical-oop,
+ editor = "Carl A. Gunter and John C. Mitchell",
+ title = "Theoretical Aspects of Object-Oriented Programming",
+ publisher = mit-press,
+ year = 1994,
+ address = cam-ma
+}
+
+%% H %%
+
+@article{ hall96type,
+ author = "Cordelia V. Hall and Kevin Hammond and Simon L. {Peyton Jones} and Philip L. Wadler",
+ title = "Type Classes in {H}askell",
+ journal = "ACM Transactions on Programming Languages and Systems",
+ volume = "18",
+ number = "2",
+ month = mar,
+ publisher = "ACM Press",
+ pages = "109--138",
+ year = "1996"
+}
+# url = "citeseer.nj.nec.com/article/hall96type.html"
+
+
+
+@TechReport{harrison:survey,
+ author = {John Harrison},
+ title = {Metatheory and Reflection in Theorem Proving: A Survey and
+ Critique},
+ institution = {SRI},
+ number = {CRC-053},
+ month = feb,
+ year = 1995
+}
+
+@inproceedings{harper+:cps,
+ author = "Robert Harper and Mark Lillibridge",
+ title = "Explicit Polymorphism and {CPS} Conversion",
+ booktitle = o20 # " " # popl,
+ month = jan,
+ year = 1993,
+ pages = "206--219",
+}
+
+@inproceedings{harper+:ita,
+ author = "Robert Harper and Greg Morrisett",
+ title = "Compiling Polymorphism Using Intensional Type
+ Analysis",
+ pages = "130--141",
+ booktitle = o22 # " " # popl,
+ address = "San Francisco",
+ month = jan,
+ year = 1995,
+}
+
+@article{harper+:lf,
+ author = "Robert Harper and Furio Honsell and Gordon Plotkin",
+ title = "A Framework for Defining Logics",
+ journal = jacm,
+ volume = 40,
+ number = 1,
+ month = jan,
+ year = 93,
+ pages = "143--184",
+}
+
+@inproceedings{harper+:phase,
+ author = "Robert Harper and John C. Mitchell and Eugenio
+ Moggi",
+ title = "Higher-Order Modules and the Phase Distinction",
+ booktitle = o17 # " " # popl,
+ address = "San Francisco",
+ month = jan,
+ year = 1990,
+ pages = "341--354"
+}
+
+@inproceedings{harper+:translucent,
+ author = "Robert Harper and Mark Lillibridge",
+ title = "A Type-Theoretic Approach to Higher-Order Modules
+ with Sharing",
+ booktitle = o21 # " " # popl,
+ month = jan,
+ year = 1994,
+ address = "Portland, Oregon",
+ pages = "123--137",
+}
+
+@incollection{harper+:tt-interp-sml,
+ author = "Robert Harper and Chris Stone",
+ title = "A Type-Theoretic Interpretation of {Standard} {ML}",
+ booktitle = "Proof, Language and Interaction: Essays in Honour of
+ Robin Milner",
+ year = 1998,
+ publisher = mit-press,
+ note = "Extended version published as CMU technical report
+ CMU-CS-97-147.",
+}
+
+@techreport{harper+:tt-interp-sml-tr,
+ author = "Robert Harper and Chris Stone",
+ title = "An Interpretation of {Standard} {ML} in Type Theory",
+ institution = cmu-cs,
+ year = 1997,
+ month = jun,
+ number = "CMU-CS-97-147",
+}
+
+@article{harper+:type-structure-sml,
+ author = "Robert Harper and John C. Mitchell",
+ title = "On the Type Structure of {Standard ML}",
+ journal = toplas,
+ year = 1993,
+ volume = 15,
+ number = 2,
+ pages = "211--252",
+ month = apr,
+}
+
+@article{harper+:typecheck-univ,
+ author = "Robert Harper and Robert Pollack",
+ title = "Type Checking with Universes",
+ journal = tcs,
+ volume = 89,
+ year = 1991,
+ pages = "107--136",
+}
+
+@inproceedings{harper+:typical-ambiguity,
+ author = "Robert Harper and Robert Pollack",
+ title = "Type Checking, Universe Polymorphism, and Typical
+ Ambiguity in the Calculus of Constructions",
+ booktitle = "Proceedings of the International Joint Conference on
+ Theory and Practice of Software Development",
+ address = "Barcelona",
+ year = 1989,
+ month = mar,
+ series = lncs,
+ volume = 352,
+ publisher = springer,
+}
+
+@article{harper:types-over-op-semant,
+ author = "Robert Harper",
+ title = "Constructing Type Systems over an Operational
+ Semantics",
+ journal = "Journal of Symbolic Computation",
+ year = 1992,
+ volume = 14,
+ pages = "71--84",
+}
+
+
+
+@inproceedings{harper:tdtt,
+ author = "Daniel R. Licata and Robert Harper",
+ title = "2-Dimensional {Directed} {Type} {Theory}",
+ year = 2011,
+ booktitle = "MFPS XXVII: Mathematical Foundations of Programming Semantics"
+}
+
+
+@Unpublished{harper:notes,
+ author = {Robert Harper},
+ title = {Programming Languages: Theory and Practice},
+ note = {Unpublished, draft available at \url{http://www.cs.cmu.edu/~rwh/plbook/}},
+ year = 2001
+}
+
+
+
+@Article{hosoya+:xduce,
+ author = {Haruo Hosoya and Benjamin C. Pierce},
+ title = {Regular expression pattern matching for {XML}},
+ journal = jfp,
+ year = 2002,
+ volume = 13,
+ number = 4
+}
+
+@TechReport{peterson+:tilt,
+ author = {Leaf Petersen and Perry Cheng and Robert Harper and Chris Stone},
+ title = {Implementing the {TILT} Internal Language},
+ institution = { Carnegie Mellon University Computer Science},
+ year = 2000,
+ number = {CMU-CS-00-180},
+ month = dec
+}
+
+@unpublished{hickey:tt-obj-semant,
+ author = "Jason J. Hickey",
+ title = "A Semantics of Objects in Type Theory",
+ note = "Unpublished manuscript",
+ year = 1997,
+}
+
+@inproceedings{hickey:very-dependent-type,
+ author = "Jason J. Hickey",
+ title = "Formal Objects in Type Theory Using Very Dependent
+ Types",
+ booktitle = "Foundations of Object Oriented Languages 3",
+ year = 1996,
+}
+
+
+
+@Article{hinze:polytypic-journal,
+ author = {Ralf Hinze},
+ title = {Polytypic values possess polykinded types},
+ journal = {Science of Computer Programming},
+ year = 2002,
+ volume = 43,
+ number = {2--3},
+ pages = {129--159},
+ note = {MPC Special Issue}
+}
+
+@InProceedings{hinze:polytypic,
+ author = {Ralf Hinze},
+ title = {Polytypic values possess polykinded types},
+ booktitle = {Proceedings of the Fifth
+ International Conference on Mathematics of Program Construction (MPC 2000)},
+ year = 2000,
+ editor = {Roland Backhouse and J.N. Oliveira},
+ address = {Ponte de Lima, Portugal},
+ month = jul,
+ pages = "2--27"
+}
+
+@Incollection{hinze+:derivable,
+ author = {Ralf Hinze and Simon {Peyton Jones}},
+ title = {Derivable Type Classes},
+ booktitle = { Proceedings of the Fourth {H}askell Workshop, Montreal,
+ Canada, September 17, 2000},
+ year = 2000,
+ editor = {Graham Hutton},
+ series = { Electronic Notes in Theoretical Computer Science},
+ publisher = { Elsevier Science},
+ volume = {41.1},
+ month = aug,
+ annotation = {no page number.}
+}
+
+
+@InProceedings{hinze+:type-indexed-datatypes,
+ author = {Ralf Hinze and Johan Jeuring and Andres L\"oh},
+ title = {Type-indexed data types},
+ booktitle = {Proceedings of the Sixth International Conference on Mathematics
+ of Program Construction (MPC 2002)},
+ year = 2002,
+ editor = {Eerke Boiten, Bernhard M\"oller},
+ address = { Dagstuhl, Germany },
+ month = jul,
+ pages = {148--174}
+}
+
+
+@article{luo:coercions,
+ author = {Zhaohui Luo},
+ title = {Coercions in a polymorphic type system},
+ journal = {Mathematical Structures in Computer Science},
+ volume = {18},
+ number = {4},
+ year = {2008},
+ pages = {729-751},
+ ee = {http://dx.doi.org/10.1017/S0960129508006804},
+ bibsource = {DBLP, http://dblp.uni-trier.de}
+}
+
+
+@inproceedings{chakravarty+:accelerate,
+ author = {Chakravarty, Manuel M.T. and Keller, Gabriele and Lee, Sean and McDonell, Trevor L. and Grover, Vinod},
+ title = {Accelerating {Haskell} array codes with multicore {GPU}s},
+ booktitle = {Proceedings of the sixth workshop on {Declarative} {Aspects} of {Multicore} {Programming}},
+ series = {DAMP '11},
+ year = {2011},
+ isbn = {978-1-4503-0486-3},
+ location = {Austin, Texas, USA},
+ pages = {3--14},
+ numpages = {12},
+ publisher = {ACM},
+ address = {New York, NY, USA},
+ keywords = {arrays, data parallelism, dynamic compilation, gpgpu, haskell, skeletons},
+}
+
+
+
+@article{henglein:coercions,
+ author = {Henglein, Fritz},
+ title = {Dynamic typing: syntax and proof theory},
+ journal = {Sci. Comput. Program.},
+ volume = {22},
+ issue = {3},
+ month = {June},
+ year = {1994},
+ issn = {0167-6423},
+ pages = {197--230},
+ numpages = {34},
+ publisher = {Elsevier North-Holland, Inc.},
+ address = {Amsterdam, The Netherlands, The Netherlands},
+}
+
+
+@INPROCEEDINGS{HicksMN01a,
+ AUTHOR = {Michael Hicks and Jonathan T. Moore and Scott Nettles},
+ BOOKTITLE = {Proceedings of the {ACM SIGPLAN} Conference on Programming
+Language Design and Implementation},
+ TITLE = {Dynamic Software Updating},
+ MONTH = {June},
+ YEAR = 2001,
+ PAGES = {13--23},
+ PUBLISHER = {{ACM}},
+ ABSTRACT = {
+Many important applications must run continuously and without interruption,
+yet must be changed to fix bugs or upgrade functionality. No
+prior general-purpose methodology for dynamic updating achieves a practical
+balance between flexibility, robustness, low overhead, and ease of use.
+
+We present a new approach for C-like languages that provides type-safe
+dynamic updating of native code in an extremely flexible manner (code, data,
+and types may be updated, at programmer-determined times) and permits the
+use of automated tools to aid the programmer in the updating process. Our
+system is based on \emph{dynamic patches} that both contain the updated code
+and the code needed to transition from the old version to the new. A novel
+aspect of our patches is that they consist of \emph{verifiable native code}
+(\emph{e.g.} Proof-Carrying Code~\cite{necula:pcc} or Typed Assembly
+Language~\cite{morrisett+:tal}), which is native code accompanied by
+annotations that allow on-line verification of the code's safety. We
+discuss how patches are generated mostly automatically, how they are applied
+using dynamic-linking technology, and how code is compiled to make it
+updateable.
+
+To concretely illustrate our system, we have implemented a
+dynamically-updateable web server, FlashEd. We discuss our experience
+building and maintaining FlashEd. Performance experiments show that for
+FlashEd, the overhead due to updating is typically less than 1 percent.
+},
+ URL = {http://www.cis.upenn.edu/~mwh/papers/dyn_update.ps}
+}
+
+
+@PHDTHESIS{Hicks01,
+ AUTHOR = {Michael Hicks},
+ TITLE = {Dynamic Software Updating},
+ YEAR = 2001,
+ MONTH = {August},
+ SCHOOL = {Department of Computer and Information Science, University of Pennsylvania},
+ URL = {http://www.cis.upenn.edu/~mwh/papers/thesis.pdf}
+}
+
+
+@InProceedings{hicks98:_plan,
+ author = {M. Hicks and P. Kakkar and J. Moore and C. Gunter
+ and S. Nettles},
+ title = {{PLAN:} A Programming Language for Active Networks},
+ booktitle = o3 # " " # icfp,
+ pages = "86--93",
+ year = 1998
+}
+
+@article{hoffman+:unifying-objects,
+ author = "Martin Hofmann and Benjamin Pierce",
+ title = "A Unifying Type-Theoretic Framework for Objects",
+ journal = jfp,
+ year = 1995,
+ month = oct,
+ volume = 5,
+ number = 4,
+ pages = "593--635"
+}
+
+@InProceedings{hofmann00esop,
+ author = {Martin Hofmann},
+ title = {A Type System for Bounded Space and Functional
+ in-place update},
+ booktitle = esop,
+ year = 2000
+}
+
+@InProceedings{hofmann99lics,
+ author = {Martin Hofmann},
+ title = {Linear Types and non-size increasing polynomial
+ computation},
+ booktitle = lics,
+ year = 1999,
+ address = {Trento, Italy},
+ month = jul
+}
+
+@MISC{HotJava,
+ KEY = {hotjava},
+ TITLE = {HotJava Browser},
+ NOTE = {\url{http://java.sun.com/products/hotjava/index.html}}
+}
+
+
+@techreport{hook+:impred-strong-sum,
+ author = "James G. Hook and Douglas J. Howe",
+ title = "Impredicative Strong Existential Equivalent to
+ Type:Type",
+ institution = cornell-cs,
+ year = 1986,
+ month = jun,
+ number = "TR 86-760",
+}
+
+@incollection{hook:understanding-russell,
+ author = "James G. Hook",
+ title = "Understanding {Russell}---A First Attempt",
+ booktitle = "Semantics of Data Types",
+ series = lncs,
+ volume = 173,
+ publisher = springer,
+ year = 1984,
+}
+
+@InProceedings{hornof99rtcg,
+ author = {Luc Hornof and Trevor Jim},
+ title = {Certifying compilation and run-time code generation},
+ booktitle = pepm,
+ year = 1999,
+ month = jan
+}
+
+@incollection{howard:formulas-as-types,
+ author = "W. Howard",
+ title = "The Formulas-as-Types Notion of Construction",
+ booktitle = "To {H.B.} {Curry}: Essays on Combinatory Logic,
+ Lambda-Calculus and Formalism",
+ editor = "J. P. Seldin and J. R. Hindley",
+ pages = "479--490",
+ publisher = "Academic Press",
+ year = 1980,
+}
+
+@InBook{howard73logical,
+ author = {W. Howard},
+ chapter = {Hereditarily majorizable functionals},
+ title = {Mathematical Investigation of Intuistionistic Arithmetic and Analysis},
+ year = 1973,
+ number = {LNM},
+ pages = {454--461},
+ address = {Berlin},
+ publisher = {Springer}
+}
+
+@techreport{howe:embedding-hol-in-nuprl,
+ author = "Douglas J. Howe",
+ title = "Semantic Foundations for Embedding {HOL} in {Nuprl}",
+ institution = "Bell Labs",
+ year = 1996,
+}
+
+@inproceedings{howe:girard-paradox,
+ author = "Douglas J. Howe",
+ title = "The Computational Behaviour of {G}irard's Paradox",
+ booktitle = o2 # " " # lics,
+ year = 1987,
+ month = jun,
+ pages = "205--214",
+ address = ith-ny,
+}
+
+@inproceedings{howe:squiggle-eq,
+ author = "Douglas J. Howe",
+ title = "Equality in Lazy Computation Systems",
+ booktitle = o4 # " " # lics,
+ year = 1989,
+}
+
+
+@article{hudak+:haskell,
+ author = "Paul Hudak and Simon {Peyton Jones} and Philip
+ Wadler",
+ title = "Report on the Programming Language {Haskell},
+ version 1.2",
+ journal = "SIGPLAN Notices",
+ volume = 27,
+ number = 5,
+ year = 1992,
+ month = may,
+}
+
+
+@InProceedings{hughes96:_provin_correc_react_system_using_sized_types,
+ author = {John Hughes and Lars Pareto and Amr Sabry},
+ title = {Proving the Correctness of Reactive Systems Using
+ Sized Types},
+ booktitle = o23 # " " # popl,
+ year = 1996,
+ pages = "410--423",
+ month = jan
+}
+
+@Manual{hugs,
+ title = {Hugs 98 : A functional programming system based on {H}askell 98 : User Manual},
+ author = {Mark P Jones and Alastair Reid},
+ organization = {Yale Haskell Group and Oregon Graduate Institute of Science and Technology},
+ note = {Available at \url{http://cvs.haskell.org/Hugs/downloads/hugs.pdf}},
+ month = sep,
+ year = 1999
+}
+
+@InProceedings{hurkens:paradox,
+ author = {Antonious J. C. Hurkens },
+ title = {A simplification of {Girard's} Paradox},
+ year = 1995,
+ booktitle = "Second International Conference on Typed Lambda Calculi and Applications, TLCA '95",
+ editor = {Mariangiola Dezani-Ciancaglini and Gordon Plotkin},
+ volume = 902,
+ series = lncs,
+ address = {Edinburgh, United Kingdom},
+ month = apr,
+ publisher = springer,
+ pages = {266--278}
+}
+
+%% I %%
+@techreport{igarashi:admissibility,
+ author = "Shigeru Igarashi",
+ title = "Admissibility of Fixed-Point Induction in
+ First-Order Logic of Typed Theories",
+ institution = "Computer Science Department, Stanford University",
+ year = 1972,
+ month = may,
+ number = "AIM-168",
+}
+%% J %%
+@manual{jackson:nuprl-manual,
+ title = "The {N}uprl Proof Development System, Version 4.1",
+ author = "Paul Jackson",
+ organization = cornell-cs,
+ webnote = "Available at
+ http://www.cs.cornell.edu/Info/Projects/NuPrl/html/nuprldocs.html",
+ year = 1994,
+}
+
+@phdthesis{jackson:phd,
+ author = "Paul Bernard Jackson",
+ title = "Enhancing the Nuprl Proof Development System and
+ Applying it to Computational Abstract Algebra",
+ school = cornell-cs,
+ month = jan,
+ year = 1995,
+ address = ith-ny,
+}
+
+
+@PhdThesis{jansson:phd,
+ author = {Patrik Jansson},
+ title = {Functional Polytypic Programming},
+ school = {Chalmers University of Technology and Goteborg University},
+ year = 2000
+}
+
+@InProceedings{jansson97polyp,
+ author = {Patrick Jansson and Johan Jeuring},
+ title = {{PolyP}---{A} Polytypic Programming Language Extension},
+ booktitle = o24 # " " # popl,
+ pages = {470--482},
+ year = 1997,
+ address = {Paris, France}
+}
+
+@InProceedings{janssonjeuringWGP00:rewriting,
+ author = {Jansson, Patrik and Jeuring, Johan},
+ title = {A Framework for Polytypic Programming on Terms, with
+ an Application to Rewriting},
+ booktitle = "Workshop on Generic Programming (WGP2000),
+ Ponte de Lima, Portugal",
+ publisher = "Utrecht University",
+ note = "Technical Report UU-CS-2000-19",
+ year = 2000
+}
+
+
+@InProceedings{jansson+:polytypic-compression,
+ author = {Patrik Jansson and Johan Jeuring},
+ title = {Polytypic Compact Printing and Parsing},
+ booktitle = esop,
+ pages = {273-287},
+ year = 1999,
+ volume = 1576,
+ series = lncs
+}
+
+@Article{jansson+:polytypic-unification,
+ author = {Patrik Jansson and Johan Jeuring},
+ title = {Functional Pearl: Polytypic Unification},
+ journal = jfp,
+ year = 1998,
+ volume = 8,
+ number = 5,
+ month = sep,
+ pages = {527--536}
+}
+
+@article{jategaonkar+:ext-pattern-subtypes,
+ author = "Lalita A. Jategaonkar and John C. Mitchell",
+ title = "Type Inference with Extended Pattern Matching and
+ Subtypes",
+ journal = "Fundamenta Informaticae",
+ year = 1993,
+ volume = 19,
+ pages = "127--166",
+ note = "{\it Preliminary version appeared in 1988 {ACM}
+ Conference on Lisp and Functional Programming}",
+}
+
+
+
+@Misc{JavaBeans,
+ key = {JavaBeans},
+ title = {{JavaBeans}: The Only Component for {Java} Technology},
+ month = may,
+ year = 2002,
+ note = {\url{http://java.sun.com/products/javabeans/}}
+}
+
+@MISC{JavaClassloading96,
+ KEY = {javaclass},
+ TITLE = {Basics of Java class loaders},
+ YEAR = {1996},
+ NOTE = {\url{http://www.javaworld.com/javaworld/jw-10-1996/jw-10-indepth.html}}
+}
+
+
+@Article{jay+:fml,
+ author = {C. Barry Jay and Gianna Bell\`{e} and Eugenio Moggi},
+ title = {Functorial {ML} },
+ journal = jfp,
+ year = 1998,
+ volume = 8,
+ number = 6,
+ pages = {573--619},
+ month = nov
+}
+
+@article{ jay95semantics,
+ author = "C. Barry Jay",
+ title = "A Semantics for Shape",
+ journal = "Science of Computer Programming",
+ volume = "25",
+ number = "2--3",
+ pages = "251--283",
+ year = "1995",
+ url = "citeseer.nj.nec.com/71598.html" }
+
+@Article{jay:fish,
+ author = {C.B. Jay},
+ title = {Programming in {FISh} },
+ journal = {International Journal on Software Tools for Technology Transfer},
+ year = 1999,
+ volume = 2,
+ pages = {307--315}
+}
+
+@unpublished{ jim99type,
+ author = "Trevor Jim and Jens Palsberg",
+ title = "Type inference in systems of recursive types with subtyping",
+ year = "1999",
+ note = { Available at \url{citeseer.nj.nec.com/jim97type.html}}
+}
+
+
+
+
+@Article{johann:short-cut,
+ author = {Patricia Johann},
+ title = {A Generalization of Short-Cut Fution and its Correctness Proof},
+ journal = hosc,
+ year = 2002,
+ volume = 15,
+ pages = {273--300}
+}
+
+@techreport{jones:gofer-impl,
+ author = "Mark P. Jones",
+ title = "The Implementation of the {G}ofer Functional
+ Programming System",
+ institution = yale-cs,
+ year = 1994,
+ month = may,
+ type = "Research Report",
+ number = "YALEU/DCS/RR-1030",
+}
+
+
+@phdthesis{jones:phd,
+ author = "Mark P. Jones",
+ title = "Qualified Types: Theory and Practice",
+ school = "Oxford University Computing Laboratory",
+ year = 1992,
+ month = jul,
+}
+
+
+@techreport{jones:qualified-type-coherence,
+ author = "Mark P. Jones",
+ title = "Coherence for Qualified Types",
+ institution = yale-cs,
+ year = 1993,
+ month = sep,
+ type = "Research Report",
+ number = "YALEU/DCS/RR-989",
+}
+
+@incollection{ jones:qualified-types,
+ author = "Mark P. Jones",
+ title = "A Theory of Qualified Types",
+ booktitle = "{ESOP} '92, 4th European Symposium on Programming, Rennes, France, February 1992, Proceedings",
+ volume = 582,
+ publisher = "Springer-Verlag",
+ address = "New York, N.Y.",
+ editor = "Bernd Krieg-Bruckner",
+ pages = "287--306",
+ year = 1992,
+ url = "citeseer.nj.nec.com/jones92theory.html" }
+
+
+@Article{jones:ho-poly,
+ author = {Mark P. Jones},
+ title = {A system of constructor classes: overloading
+ and implicit higher-order polymorphism },
+ journal = jfp,
+ year = 1995,
+ volume = 5,
+ number = 1,
+ month = jan
+}
+
+
+@InProceedings{jones:fundeps,
+ author = {Mark P. Jones},
+ title = {Type Classes with Functional Dependencies},
+ booktitle = {Proceedings of the 9th European Symposium on Programming, ESOP 2000, Berlin, Germany},
+ year = 2000,
+ number = 1782,
+ series = {LNCS},
+ publisher = {Springer-Verlag}
+}
+
+@inproceedings{ jones97firstclass,
+ author = "Mark P. Jones",
+ title = "First-class Polymorphism with Type Inference",
+ booktitle = "Conference Record of {POPL}~'97: The 24th {ACM} {SIGPLAN}-{SIGACT} Symposium on Principles of Programming Languages",
+ month = "15--17",
+ address = "Paris, France",
+ pages = "483--496",
+ year = "1997",
+ url = "citeseer.nj.nec.com/451312.html" }
+
+
+@inproceedings{jouvelot+:effects,
+ author = "Pierre Jouvelot and D. K. Gifford",
+ title = "Algebraic reconstruction of types and effects",
+ booktitle = eighteenth # popl,
+ year = 1991,
+ month = jan,
+ pages = "303--310"
+}
+
+
+
+@InProceedings{juering:polytypic-pattern,
+ author = {J. Jeuring},
+ title = { Polytypic pattern matching},
+ booktitle = "FPCA95: " # fpca,
+ pages = {238--248},
+ year = 1995
+}
+
+%% K %%
+
+@inproceedings{kamin:smalltalk-semantics,
+ author = "Samuel Kamin",
+ title = "Inheritance in {S}malltalk-80: A Denotational
+ Definition",
+ booktitle = o15 # " " # popl,
+ year = 1988,
+ month = jan,
+ pages = "80--87",
+ address = "San Diego",
+}
+
+@Article{r5rs,
+ author = {Richard Kelsey and William Clinger and Jonathan Rees, editors},
+ title = { {Revised$^5$} Report on the Algorithmic Language {S}cheme },
+ journal = {Higher-Order and Symbolic Computation},
+ year = 1998,
+ volume = 11,
+ number = 1,
+ month = sep,
+ pages = {7--105}
+}
+
+@inproceedings{kennedy:dimensions,
+ author = "Andrew J. Kennedy",
+ title = "Relational Parametricity and Units of Measure",
+ booktitle = o24 # " " # popl,
+ year = 1997,
+ month = jan,
+ address = "Paris",
+ pages = "442--455",
+}
+
+@InProceedings{kennedy+:c-sharp-generics,
+ author = {Andrew Kennedy and Don Syme},
+ title = {Design and Implementation of Generics for
+ the {.NET} Common Language Runtime },
+ booktitle = proc # 2001 # pldi,
+ pages = {1--12},
+ year = 2001,
+ address = {Snowbird, Utah, USA},
+ month = jun
+}
+
+
+
+@Book{k&r,
+ author = {Brian W. Kernighan and Dennis M. Ritchie},
+ title = {The C Programming Language, Second Edition},
+ publisher = {Prentice Hall, Inc.},
+ year = 1988
+}
+
+@inproceedings{kieburtz:taming-effects,
+ author = "Richard B. Kieburtz",
+ title = "Taming Effects with Monadic Typing",
+ booktitle = 1998 # " " # icfp,
+ year = 1998,
+ month = sep,
+ addresss = "Baltimore",
+ pages = "51--62",
+}
+
+
+@Incollection{kiczales:aop,
+ author = {Gregor Kiczales and John Lamping and Anurag Mendhekar and
+ Chris Maeda and
+ Cristina Videira Lopes and Jean-Marc Loingtier and John Irwin},
+ title = {Aspect-Oriented Programming},
+ booktitle = { Proceedings of the European Conference on Object-Oriented
+ Programming (ECOOP)},
+ year = 1997,
+ volume = 1241,
+ series = lncs,
+ month = jun,
+ editor = "Mehmet Ak\c{s}it and Satoshi Matsuoka",
+ pages = "220--242",
+ publisher = {Springer-Verlag}
+}
+
+@InProceedings{kim99impacts,
+ author = {Sung-Kwan Kim and Rhan Ha and Sang Lyul Min},
+ title = {Analysis of the Impacts of Overestimation Sources on
+ the Accuracy of Worst Case Timing Analysis},
+ booktitle = {IEEE Real-Time Systems Symposium},
+ pages = {22--31},
+ year = 1999,
+ address = {Phoeniz, AZ},
+ month = {December},
+ organization = {IEEE Computer Society}
+}
+
+@inproceedings{kranz+:orbit,
+ author = "David Kranz and R. Kelsey and J. Rees and
+ P. R. Hudak and J. Philbin and N. Adams",
+ title = "{ORBIT}: An Optimizing Compiler for {S}cheme",
+ booktitle = "Proceedings of the {ACM SIGPLAN} '86 Symposium on
+ Compiler Construction",
+ year = 1986,
+ month = jun,
+ pages = "219--233",
+}
+
+@techreport{kreitz:embedding,
+ author = "Christoph Kreitz",
+ title = "Formal Reasoning about Communications Systems {I}",
+ institution = cornell-cs,
+ year = 1997,
+}
+
+@inproceedings{ krishnamurthi+:extensible-visitor,
+ author = "Shriram Krishnamurthi and Matthias Felleisen and Daniel P. Friedman",
+ title = "Synthesizing Object-Oriented and Functional Design to Promote Re-use",
+ booktitle = "European Conference on Object Oriented Programming",
+ pages = "91--113",
+ year = "1998",
+ url = "citeseer.nj.nec.com/krishnamurthi98synthesizing.html" }
+
+@TechReport{Kozen98,
+ author = {Dexter Kozen},
+ title = {Efficient Code Certification},
+ institution = {Department of Computer Science, Cornell University},
+ year = 1998,
+ number = {98-1661},
+ address = {Ithaca, NY 12853-7501},
+ month = {January}
+}
+
+@inproceedings{ kozen93efficient,
+ author = "Dexter Kozen and Jens Palsberg and Michael I. Schwartzbach",
+ title = "Efficient Recursive Subtyping",
+ booktitle = "Conference Record of the Twentieth Annual {ACM} {SIGPLAN}-{SIGACT} Symposium on Principles of Programming Languages",
+ address = "Charleston, South Carolina",
+ pages = "419--428",
+ year = "1993",
+ url = "citeseer.nj.nec.com/article/kozen95efficient.html" }
+
+
+%% L %%
+
+
+
+@TechReport{lampson:cedar,
+ author = {Butler Lampson},
+ title = {A description of the {C}edar language},
+ institution = {Xerox Palo Alto Research Center},
+ year = 1983,
+ number = {CSL-83-15}
+}
+
+@article{landin:closure,
+ author = "P. J. Landin",
+ title = "The mechanical evaluation of expressions",
+ journal = "Computer J.",
+ volume = 6,
+ number = 4,
+ pages = "308--320",
+ year = 1964,
+}
+
+@article{launchbury+:haskell-state,
+ author = "John Launchbury and Simon {Peyton Jones}",
+ title = "State in {Haskell}",
+ journal = "Lisp and Symbolic Computation",
+ volume = 8,
+ number = 4,
+ month = dec,
+ year = 1995,
+ pages = "293--341",
+}
+
+@inproceedings{launchbury+:param-unbox,
+ author = "John Launchbury and Ross Paterson",
+ title = "Parametricity and Unboxing with Unpointed Types",
+ booktitle = o6 # " " # esop,
+ year = 1996,
+ month = apr,
+ address = "{Link\"{o}ping}, Sweden",
+ pages = "204--218",
+ series = lncs,
+ volume = 1058,
+ publisher = springer,
+}
+
+
+@inproceedings{ lebotlan-remy:mlf-icfp,
+ author = {Le Botlan, Didier and Remy, Didier},
+ title = "{MLF}: Raising {ML} to the Power of {S}ystem-{F}",
+ booktitle = {Proceedings of the International Conference on Functional Programming ({ICFP} 2003), Uppsala, Sweden},
+ year = {2003},
+ publisher = {ACM Press},
+ pages = {27--38},
+ month = {aug},
+ pdf= {http://pauillac.inria.fr/~remy/work/mlf/icfp.pdf},
+ html= {http://pauillac.inria.fr/~remy/work/mlf/},
+ url = {citeseer.nj.nec.com/564799.html}
+}
+
+@inproceedings{leroy:applicative-functors,
+ author = "Xavier Leroy",
+ title = "Applicative Functors and Fully Transparent
+ Higher-Order Modules",
+ booktitle = o22 # " " # popl,
+ year = 1995,
+ month = jan,
+ address = "San Francisco",
+}
+
+@inproceedings{leroy:manifest,
+ author = "Xavier Leroy",
+ title = "Manifest Types, Modules and Separate Compilation",
+ booktitle = o21 # " " # popl,
+ year = 1994,
+ month = jan,
+ address = "Portland, Oregon",
+ pages = "109--122",
+}
+
+@manual{leroy:ocaml-manual,
+ title = "The {O}bjective {C}aml System, Release 1.00",
+ author = "Xavier Leroy",
+ year = 1996,
+ organization = inria,
+ webnote = "Available at http://pauillac.inria.fr/ocaml",
+}
+
+@inproceedings{leroy:unbox,
+ author = "Xavier Leroy",
+ title = "Unboxed objects and polymorphic typing",
+ booktitle = o19 # " " # popl,
+ year = 1992,
+ pages = "177-188",
+}
+
+@inproceedings{leroy:unbox-effectiveness,
+ author = "Xavier Leroy",
+ title = "The Effectiveness of Type-Based Unboxing",
+ booktitle = tic,
+ year = 1997,
+ month = jun,
+ address = "Amsterdam",
+ organization = "{ACM SIGPLAN}",
+ note = "Published as {B}oston {C}ollege Computer Science
+ Department Technical Report BCCS-97-03",
+}
+
+
+
+@Article{leroy+:exceptions,
+ author = {Xavier Leroy and F. Pessaux},
+ title = {Type-based analysis of uncaught exceptions},
+ journal = toplas,
+ year = 2000,
+ volume = 22,
+ number = 2,
+ pages = {340--377}
+}
+
+@incollection{ leroy91dynamics,
+ author = "Xavier Leroy and Michel Mauny",
+ title = "Dynamics in {ML}",
+ booktitle = "Functional Programming Languages and Computer Architecture, 5th {ACM} Conference",
+ volume = "523",
+ publisher = "Springer-Verlag",
+ address = "Berlin, Heidelberg, New York",
+ editor = "J. Hughes",
+ pages = "406--426",
+ year = "1991",
+ url = "citeseer.nj.nec.com/313297.html" }
+
+
+@InProceedings{leroy+:dynamics,
+ author = {Xavier Leroy and Michel Mauny},
+ title = {Dynamics in {ML}},
+ booktitle = {Functional Programming Languages and Computer Architecture},
+ pages = {406-426},
+ year = 1991,
+ editor = {J. Hughes},
+ number = 523,
+ series = {Lecture Notes in Computer Science},
+ month = aug,
+ publisher = {Springer-Verlag}
+
+}
+
+@string{popl00="Proceedings of the 27th Annual {ACM} {SIGPLAN-SIGACT} Symposium on Principles of Programming Languages, Boston, Massachusetts"}
+
+@inproceedings{lewis+:implicit-params
+,author="Jeffrey Lewis and Mark Shields and Erik Meijer and John Launchbury"
+,title="Implicit Parameters: Dynamic Scoping with Static Types"
+,booktitle=popl00
+,year="2000"
+,month="Jan"
+,pages="108--118"
+}
+
+@InProceedings{liedke+97:webos,
+ author = {Jochen Liedtke and Nyeem Islam and Trent Jaeger},
+ title = {Preventing Denial-of-Service Attacks on a
+ $\mu$-Kernel for web {OS}es},
+ booktitle = o6 # " " # hotos,
+ year = 1997
+}
+
+@article{liedtke95:cheap_time,
+ author = {Jochen Liedtke},
+ title = {A Short Note on Cheap Fine-grained Time Measurement},
+ journal = {ACM Operating Systems Review},
+ pages = {31--34},
+ year = 95,
+ volume = 29,
+ number = 3,
+ month = {July}
+}
+
+@phdthesis{lillibridge:phd,
+ author = "Mark Lillibridge",
+ title = "Translucent Sums: A Foundation for Higher-Order
+ Module Systems",
+ year = 1997,
+ month = may,
+ address = pgh-pa,
+ school = cmu-cs,
+}
+
+
+
+@InProceedings{lim94risc,
+ author = {Sung-Soo Lim and Young Hyun Bae and Gyu Tae Jang and Byung-Do Rhee
+ and Sang Lyul Min and Chang Yun Park and Heonshik Shin and Kunsoo Park and Chong Sang Kim},
+ title = {An Accurate Worts Case Timing Analysis Technique for {RISC} Processors},
+ booktitle = o15 # " " # rtss,
+ pages = {97--108},
+ year = 1994
+}
+
+@book{lindholm+:jvm,
+ title = "The {Java} Virtual Machine Specification",
+ author = "Tim Lindholm and Frank Yellin",
+ publisher = addison,
+ year = 1996,
+}
+
+
+@MISC{LinuxDynlink95,
+ KEY = {DLOPEN},
+ TITLE = {{DLOPEN}(3)},
+ howpublished = {{L}inux {P}rogrammer's {M}anual},
+ MONTH = {December},
+ YEAR = {1995}
+}
+
+
+
+@inproceedings{ liu98automatic,
+ author = "Yanhong Liu and Gustavo Gomez",
+ title = "Automatic accurate time-bound analysis for
+ high-level languages",
+ booktitle = lctes,
+ publisher = springer,
+ month = jun,
+ series = lncs,
+ volume = 1474,
+ year = 1998
+}
+
+@techreport{lucassen+:fx,
+ author = "J. M. Lucassen and D. K. Gifford and P. Jouvelot and
+ M. A. Sheldon",
+ title = "{FX-87} Reference Manual",
+ institution = "MIT Laboratory for Computer Science",
+ number = "MIT/LCS/TR-407",
+ month = sep,
+ year = 1987,
+}
+
+@InCollection{lundqvist98integrating,
+ author = {T. Lundqvist and P. Stenstrom},
+ title = {Integrating path and timing analysis using
+ instruction-level simulation techniques},
+ booktitle = lctes,
+ pages = {1--15},
+ publisher = springer,
+ year = 1998,
+ editor = {Frank Mueller and Azer Bestavros},
+ number = 1474,
+ series = lncs
+}
+
+%% M %%
+
+@inproceedings{ma+:parametric-poly2,
+ author = "QingMing Ma and John C. Reynolds",
+ title = "Types, Abstraction, and Parametric Polymorphism,
+ Part 2",
+ booktitle = o7 # " " # mfps,
+ year = 1991,
+ month = mar,
+ address = "Pittsburgh, Pennsylvania",
+ series = lncs,
+ volume = 598,
+ publisher = springer,
+ pages = "1--40",
+}
+
+@inproceedings{ma:parametricity,
+ author = "QingMing Ma",
+ title = "Parametricity as Subtyping",
+ booktitle = o19 # " " # popl,
+ year = 1992,
+ month = jan,
+ address = "Albuquerque, New Mexico",
+ pages = "281--292",
+}
+
+@inproceedings{macqueen+:semantics-ho-functors,
+ author = "David B. MacQueen and Mads Tofte",
+ title = "A Semantics for Higher-order Functors",
+ booktitle = o5 # " " # esop,
+ year = 1994,
+ series = lncs,
+ volume = 788,
+ publisher = springer,
+ pages = "409--423",
+}
+
+@inproceedings{macqueen:modular-struct,
+ author = "David MacQueen",
+ title = "Using Dependent Types to Express Modular Structure",
+ booktitle = o13 # " " # popl,
+ year = 1986,
+ month = jan,
+ pages = "277--286",
+ address = "St.\ Petersburg Beach, Florida",
+}
+
+@inproceedings{maqueen:modules,
+ author = "David MacQueen",
+ title = "Modules for {Standard} {ML}",
+ booktitle = 1984 # " " # lfp,
+ year = 1984,
+ month = aug,
+ address = "Austin, Texas",
+ pages = "198--207",
+}
+
+@InProceedings{maes:reflection,
+ author = {Pattie Maes},
+ title = {Concepts and experiments in computational reflection},
+ booktitle = {Proceedings of the 2nd Annual Conference on Object-Oriented Programming
+Systems, Languages and Applications (OOPSLA '87), (Orlando,
+FL)},
+ pages = {147--155},
+ year = 1987,
+ month = oct
+}
+
+@inproceedings{martin-lof:constructive-math-and-programming,
+ author = "Per Martin-L{\"{o}}f",
+ title = "Constructive Mathematics and Computer Programming",
+ booktitle = "Sixth International Congress of Logic, Methodology
+ and Philosophy of Science",
+ pages = "153--175",
+ publisher = noholland,
+ year = 1982,
+ series = "Studies in Logic and the Foundations of Mathematics",
+ volume = 104,
+}
+
+@inproceedings{martin-lof:intuitionistic-types-pred,
+ author = "Per Martin-L{\"{o}f}",
+ title = "An Intuitionistic Theory of Types: Predicative Part",
+ booktitle = "Proceedings of the Logic Colloquium, 1973",
+ pages = "73--118",
+ publisher = noholland,
+ year = 1975,
+ series = "Studies in Logic and the Foundations of Mathematics",
+ volume = 80,
+}
+
+
+
+@article{meertens:paramorphisms,
+ author = {Lambert G. L. T. Meertens},
+ title = {Paramorphisms},
+ journal = {Formal Aspects of Computing},
+ pages = {413--424},
+ year = 1992,
+ volume = 4,
+ number = 5,
+ publisher = springer
+}
+
+@inproceedings{mmf91m
+,author="Erik Meijer and Fokkinga, Maarten M. and Ross Paterson"
+,title="Functional Programming with Bananas, Lenses, Envelopes and
+ Barbed Wire"
+,booktitle="FPCA91: " # fpca
+,pages="124--144"
+,year=1991
+
+}
+% ,volume=523
+% ,series=lncs
+% ,publisher=springer
+
+@inproceedings{ meijer95bananas,
+ author = "Erik Meijer and Graham Hutton",
+ title = "Bananas in Space: Extending Fold and Unfold to Exponential Types",
+ booktitle = "FPCA95: " # fpca,
+ month = jun,
+ address = "La Jolla, CA",
+ pages = "324--333",
+ year = 1995,
+ url = "citeseer.nj.nec.com/293490.html"
+}
+
+@article{mendler:inductive-types,
+ author = "Nax Paul Mendler",
+ title = "Inductive Types and Type Constraints in the
+ Second-Order Lambda Calculus",
+ journal = "Annals of Pure and Applied Logic",
+ year = 1991,
+ volume = 51,
+ number = "1--2",
+ pages = "159--172",
+}
+
+@phdthesis{mendler:phd,
+ author = "Paul Francis Mendler",
+ title = "Inductive Definition in Type Theory",
+ school = cornell-cs,
+ month = sep,
+ year = 1987,
+ address = ith-ny,
+}
+
+@inproceedings{meyer+:type-not-type,
+ author = "Albert R. Meyer and Mark B. Reinhold",
+ title = "`{T}ype' is Not a Type",
+ booktitle = o13 # " " # popl,
+ year = 1986,
+ month = jan,
+ pages = "287--295",
+ address = "St. Petersburg Beach, Florida",
+}
+
+@InProceedings{millen92,
+ author = {J. K. Millen},
+ title = {A Resource Allocation Model for Denial of Service},
+ booktitle = ieeesp,
+ pages = {137--147},
+ year = 1992,
+ address = {Oakland, CA},
+ month = {May},
+ publisher = {IEEE Computer Society Press}
+}
+
+@InCollection{millen95,
+ author = {Jonathan K. Millen},
+ title = {Denial of Service: A Perspective},
+ booktitle = {Dependable Computing for Critical Applications 4},
+ publisher = springer,
+ year = 1995,
+ editor = {F. Cristian and G. {Le Lann} and T. Lunt},
+ volume = 9,
+ series = {Dependable Computing and Fault Tolerant Systems},
+ address = {Wien, Austria}
+}
+
+@book{milner+:sml,
+ title = "The Definition of {S}tandard {ML}",
+ author = "Robin Milner and Mads Tofte and Robert Harper",
+ publisher = mit-press,
+ address = cam-ma,
+ year = 1990,
+}
+
+@book{milner+:sml-comment,
+ title = "Commentary on {S}tandard {ML}",
+ author = "Robin Milner and Mads Tofte",
+ publisher = mit-press,
+ address = cam-ma,
+ year = 1991,
+}
+
+@book{milner+:sml97,
+ title = "The Definition of {Standard} {ML} (Revised)",
+ author = "Robin Milner and Mads Tofte and Robert Harper and
+ David MacQueen",
+ publisher = mit-press,
+ address = cam-ma,
+ year = 1997,
+}
+
+
+@Article{milner:alg-w,
+ author = {Robin Milner},
+ title = {A Theory of Type Polymorphism in Programming},
+ journal = {Journal of Computer and System Sciences },
+ year = 1978,
+ volume = 17,
+ number = 3,
+ pages = {348--375}
+}
+
+
+@InProceedings{millstein+:eml,
+ author = {Todd Millstein and Colin Bleckner and Craig Chambers},
+ title = {Modular Typechecking for Hierarchically Extensible Datatypes and
+ Functions},
+ booktitle = icfp,
+ year = 2002,
+ address = {Pittsburgh, PA, USA},
+ month = oct
+}
+
+@inproceedings{minamide+:typed-closure-conversion,
+ author = "Yasuhiko Minamide and Greg Morrisett and Robert
+ Harper",
+ title = "Typed Closure Conversion",
+ pages = "271--283",
+ booktitle = o23 # " " # popl,
+ address = "St. Petersburg, Florida",
+ month = jan,
+ year = 1996,
+}
+
+@unpublished{minamide:full-lift,
+ author = "Yasuhiko Minamide",
+ title = "Full Lifting of Type Parameters",
+ note = "Submitted for publication. Earlier version published
+ as ``Compilation Based on a Calculus for Explicit
+ Type-Passing'' in the {\em Second Fuji International
+ Workshop on Functional and Logic Programming,\/}
+ 1996.",
+}
+
+
+@InProceedings{minimide99space,
+ author = {Yasuhiko Minamide},
+ title = {Space-Profiling Semantics of the Call-by-Value Lambda Calculus
+ and the CPS transformation},
+ booktitle = o3 # " " # hoots,
+ pages = {103--118},
+ year = 1999,
+ volume = 26,
+ series = {Electronic Notes in Theoretical Computer Science},
+ address = {http://www.elsevier.nl/locate/entcs},
+ publisher = {Elsevier}
+}
+
+@book{mips,
+ title = "{MIPS} {RISC} Architecture",
+ author = "Gerry Kane and Joe Heinrich",
+ publisher = "Prentice-Hall",
+ year = 1991,
+}
+
+@article{mitchell+:existential,
+ author = "John C. Mitchell and Gordon D. Plotkin",
+ title = "Abstract Types Have Existential Type",
+ journal = toplas,
+ year = 1988,
+ volume = 10,
+ number = 3,
+ month = jul,
+ pages = "470--502",
+}
+
+
+
+@Book{mitchell:book,
+ author = {John C. Mitchell},
+ title = {Foundations for Programming Languages},
+ publisher = mit-press,
+ year = 1996
+}
+
+@article{moggi:computation-monad,
+ author = "Eugenio Moggi",
+ title = "Notions of Computation and Monads",
+ journal = iandc,
+ volume = 93,
+ year = 1991,
+ pages = "55-92",
+}
+
+
+@INPROCEEDINGS{moreau-Queinnec:DSL97,
+ AUTHOR = {Luc Moreau and Christian Queinnec},
+ TITLE = {{Design and Semantics of Quantum: a Language to
+ Control Resource Consumption in Distributed
+ Computing}},
+ BOOKTITLE = {Usenix Conference on Domain-Specific Languages
+ (DSL'97)},
+ ADDRESS = {Santa-Barbara, California},
+ YEAR = 1997,
+ PAGES = {183--197},
+ MONTH = OCT,
+ PS = {http://www.ecs.soton.ac.uk/~lavm/papers/dsl97.ps.gz},
+ EXPORT = {yes},
+ PIND = {EZ~02~01~04},
+ ABSTRACT = {This paper describes the semantics of Quantum, a
+ language that was specifically designed to control
+ resource consumption of distributed computations,
+ such as mobile agent style applications. In Quantum,
+ computations can be driven by mastering their
+ resource consumption. Resources can be understood as
+ processors cycles, geographical expansion, bandwidth
+ or duration of communications, etc. We adopt a
+ generic view by saying that computations need energy
+ to be performed. Quantum relies on three new
+ primitives that deal with energy. The first
+ primitive creates a tank of energy associated with a
+ computation. Asynchronous notifications inform the
+ user of energy exhaustion and computation
+ termination. The other two primitives allow us to
+ implement suspension and resumption of computations
+ by emptying a tank and by supplying more energy to a
+ tank. The semantics takes the form of an abstract
+ machine with explicit parallelism and energy-related
+ primitives.}
+}
+
+@inproceedings{morrisett+:abstract-memory-management,
+ author = "Greg Morrisett and Matthias Felleisen and Robert
+ Harper",
+ title = "Abstract Models of Memory Management",
+ booktitle = "FPCA95: " # fpca,
+ pages = "66--77",
+ year = 1995,
+ month = jun,
+ address = "La Jolla, CA",
+}
+
+@incollection{ morrisett97semantics,
+ author = "Greg Morrisett and Robert Harper",
+ title = "Semantics of Memory Management for Polymorphic Languages",
+ booktitle = "Higer Order Operational Techniques in Semantics",
+ publisher = "Newton Institute, Cambridge University Press",
+ editor = "Andrew Gordon and Andrew M. Pitts",
+ year = "1997",
+ pages = {175--226},
+ url = "citeseer.nj.nec.com/147455.html" }
+
+
+@inproceedings{morrisett+:poly-memory-management,
+ author = "Greg Morrisett and Robert Harper",
+ title = "Semantics of Memory Management for Polymorphic
+ Languages",
+ editor = "A. D. Gordon and A. M. Pitts",
+ booktitle = "Higher Order Operational Techniques in Semantics",
+ publisher = cambridge-press,
+ year = 1997,
+}
+
+@inproceedings{morrisett+:stal,
+ author = "Greg Morrisett and Karl Crary and Neal Glew and
+ David Walker",
+ title = "Stack-Based Typed Assembly Language",
+ booktitle = o2 # " " # tic,
+ year = 1998,
+ month = mar,
+ series = lncs,
+ volume = 1473,
+ publisher = springer,
+ note = "Extended version published as CMU technical report
+ CMU-CS-98-178.",
+ memo = "Extended version also published as Fox Memorandum
+ CMU-CS-FOX-98-05.",
+}
+
+@article{morrisett+:tal,
+ author = "Greg Morrisett and David Walker and Karl Crary and
+ Neal Glew",
+ title = "From {System} {F} to Typed Assembly Language",
+ journal = toplas,
+ year = 1999,
+ month = may,
+ volume = 21,
+ number = 3,
+ pages = {528--569},
+ note = "An earlier version appeared in the 1998 Symposium on
+ Principles of Programming Languages.",
+}
+
+@inproceedings{morrisett+:tal-popl,
+ author = "Greg Morrisett and David Walker and Karl Crary and
+ Neal Glew",
+ title = "From {System} {F} to Typed Assembly Language",
+ booktitle = o25 # " " # popl,
+ month = jan,
+ year = 1998,
+ address = "San Diego",
+ pages = "85--97",
+ note = "Extended version published as Cornell University
+ technical report TR97-1651.",
+}
+
+@techreport{morrisett+:tal-tr,
+ author = "Greg Morrisett and David Walker and Karl Crary and
+ Neal Glew",
+ title = "From {System} {F} to Typed Assembly Language
+ (Extended Version)",
+ institution = cornell-cs,
+ year = 1997,
+ month = nov,
+ number = "TR97-1651",
+}
+
+@inproceedings{morrisett+:til-safety,
+ author = "Greg Morrisett and David Tarditi and Perry Cheng and
+ Chris Stone and Robert Harper and Peter Lee",
+ title = "The {TIL/ML} Compiler: Performance and Safety
+ Through Types",
+ booktitle = "Workshop on Compiler Support for Systems Software",
+ year = 1996,
+ month = feb,
+ address = "Tucson"
+}
+
+@phdthesis{morrisett:phd,
+ author = "Greg Morrisett",
+ title = "Compiling with Types",
+ school = cmu-cs,
+ year = 1995,
+ month = dec,
+ address = pgh-pa,
+}
+
+@inproceedings{mycroft:poly-type-schemes,
+ author = "Alan Mycroft",
+ title = "Polymorphic Type Schemes and Recursive Definitions",
+ booktitle = o6 # " " # "International Symposium on Programming",
+ series = lncs,
+ number = 167,
+ pages = "217--228",
+ publisher = springer,
+ month = apr,
+ year = 1984,
+}
+
+@inproceedings{ myers97parameterized,
+ author = "Andrew C. Myers and Joseph A. Bank and Barbara Liskov",
+ title = "Parameterized Types for {Java}",
+ booktitle = "Conference Record of {POPL} '97: The 24th {ACM} {SIGPLAN}-{SIGACT} Symposium on Principles of Programming Languages",
+ address = "New York, NY",
+ pages = "132--145",
+ year = "1997",
+ url = "citeseer.nj.nec.com/myers97parameterized.html" }
+
+%% O %%
+
+
+%% N %%
+
+@inproceedings{necula+:safe-extensions,
+ title = "Safe Kernel Extensions Without Run-Time Checking",
+ author = "George Necula and Peter Lee",
+ booktitle = o2 # " " # osdi,
+ year = 1996,
+ month = oct,
+ pages = "229--243",
+ address = "Seattle",
+}
+
+@inproceedings{necula+:touchstone,
+ title = "The Design and Implementation of a Certifying
+ Compiler",
+ author = "George Necula and Peter Lee",
+ booktitle = 1998 # " " # pldi,
+ year = 1998,
+ month = jun,
+ pages = "333--344",
+ address = "Montreal",
+}
+
+@incollection{necula+:untrusted-agents,
+ author = "George Necula and Peter Lee",
+ title = "Safe, Untrusted Agents using Proof-Carrying Code",
+ booktitle = "Special Issue on Mobile Agent Security",
+ publisher = springer,
+ series = lncs,
+ volume = 1419,
+ month = oct,
+ year = 1997,
+}
+
+@inproceedings{necula:pcc,
+ title = "Proof-Carrying Code",
+ author = "George Necula",
+ booktitle = o24 # " " # popl,
+ year = 1997,
+ month = jan,
+ address = "Paris",
+ pages = "106--119",
+}
+
+@PhdThesis{necula:phd,
+ author = {George Necula},
+ title = {Compiling with Proofs},
+ school = {Carnegie Mellon University},
+ year = 1998,
+ address = pittsburgh-pa,
+ month = sep,
+ note = {Technical Report CMU-CS-98-154}
+}
+
+
+
+
+
+@inproceedings{neubauer01functional_notation,
+ author = {Matthias Neubauer and Peter Thiemann and Martin Gasbichler and Michael Sperber },
+ title = {A Functional Notation for Functional Dependencies},
+ booktitle = {Preliminary Proceedings of the 2001 {ACM SIGPLAN}
+Haskell Workshop
+({HW}'2001)
+Firenze, Italy
+2nd September 2001},
+ year = 2001,
+ editor = {Ralf Hinze},
+ number = {UU-CS-2001-23},
+ institution = {Institute of Information and Computing Sciences
+Utrecht University}
+}
+
+@Book{nielson+:two-level,
+ author = { Flemming Nielson and Hanne Riis Nielson},
+ title = {Two-Level Functional Languages},
+ publisher = cambridge-press,
+ year = 1992,
+ volume = 34,
+ series = {Cambridge Tracts in Theoretical Computer Science}
+}
+
+@inproceedings{ocallahan:jvm-types,
+ author = "Robert O'Callahan",
+ title = "A Simple, Comprehensive Type System for {Java}
+ Bytecode Subroutines",
+ booktitle = o26 # " " # popl,
+ year = 1999,
+ month = jan,
+ address = "San Antonio, Texas",
+ pages = {70--78},
+}
+
+@inproceedings{ odersky96putting,
+ author = "Martin Odersky and Konstantin {L\"aufer}",
+ title = "Putting Type Annotations to Work",
+ booktitle = "Conference Record of {POPL} '96: The 23rd {ACM} {SIGPLAN}-{SIGACT} Symposium on Principles of Programming Languages, St. Petersberg Beach, Florida",
+ address = "New York, N.Y.",
+ pages = "54-67",
+ year = "1996",
+ url = "citeseer.nj.nec.com/odersky96putting.html" }
+
+
+@article{ohearn+:param-local-vars,
+ author = "Peter W. O'Hearn and Robert D. Tennent",
+ title = "Parametricity and Local Variables",
+ journal = jacm,
+ volume = 42,
+ number = 3,
+ pages = "658--709",
+ year = 1995,
+ month = may,
+}
+@inproceedings{okasaki:catenable-dequeues,
+ author = "Chris Okasaki",
+ title = "Catenable Double-Ended Queues",
+ booktitle = 1997 # " " # icfp,
+ year = 1997,
+ month = jun,
+ address = "Amsterdam",
+ pages = "66--74",
+}
+
+@Book{okasaki:phd,
+ author = {Chris Okasaki},
+ title = {Purely Functional Data Structures},
+ publisher = cambridge-press,
+ year = 1998
+}
+
+@InProceedings{okasaki99fast,
+ author = {Chris Okasaki},
+ title = {From fast exponentiation to square matrices: An adventure in types},
+ booktitle = 1999 # " " # icfp,
+ pages = {28--35},
+ year = 1999,
+ month = sep,
+ address = {Paris, France}
+}
+
+
+%% P %%
+
+@techreport{palmgren+:domain-interp-itt,
+ author = "Erik Palmgren and Viggo Stoltenberg-Hansen",
+ title = "Domain Interpretations of Intuitionistic Type
+ Theory",
+ institution = "Uppsala University, Department of Mathematics",
+ year = 1989,
+ month = jan,
+ type = "{U.U.D.M.} Report",
+ number = "1989:1",
+}
+
+@article{palmgren:infosys-interp-mltt,
+ author = "Erik Palmgren",
+ title = "An Information System Interpretation of
+ {Martin-L\"{o}f}'s Partial Type Theory with
+ Universes",
+ journal = iandc,
+ year = 1993,
+ volume = 106,
+ pages = "26--60",
+}
+
+@inproceedings{palsberg:object-inference,
+ author = "Jens Palsberg",
+ title = "Efficient Inference of Object Types",
+ booktitle = o9 # " " # lics,
+ year = 1994,
+ month = jul,
+ pages = "186--195",
+ address = "Paris",
+}
+
+@article{park:fixpoint,
+ author = "David Park",
+ title = "Fixpoint Induction and Proofs of Program Properties",
+ journal = "Machine Intelligence",
+ volume = 5,
+ year = 1969,
+ pages = "59--78",
+}
+
+
+
+@Article{parigot:recursive,
+ author = {Michel Parigot},
+ title = {Recursive Programming with Proofs},
+ journal = tcs,
+ year = 1992,
+ volume = 94,
+ number = 2,
+ pages = {335-356},
+ month = mar
+}
+
+@INPROCEEDINGS{Moh93,
+ author = {Christin Paulin-Mohring},
+ booktitle = {Proceedings of the conference Typed Lambda Calculi and Applications},
+ editor = {Marc Bezem and Jan Friso Groote},
+ institution = {LIP-ENS Lyon},
+ note = {LIP research report 92-49},
+ number = {664},
+ pages ={328--345},
+ series = {Lecture Notes in Computer Science},
+ title = {Inductive Definitions in the System {Coq} - Rules and Properties},
+ type = {research report},
+ year = {1993},
+}
+
+@book{paulson:lcf,
+ author = "Lawrence C. Paulson",
+ title = "Logic and Computation: Interactive Proof with
+ {Cambridge} {LCF}",
+ year = 1987,
+ publisher = cambridge-press,
+}
+
+
+
+@InProceedings{persson99lctes,
+ author = {Patrik Persson},
+ title = {Live Memory Analysis for Garbage Collection in
+ Embedded Systems},
+ booktitle = 1999 # " " # lctes,
+ pages = {45--54},
+ year = 1999,
+ volume = 34,
+ number = 7,
+ series = {SIGPLAN Notices},
+ address = {Atlanta, GA},
+ month = {may}
+}
+
+
+@TECHREPORT{PetersonHL97,
+ AUTHOR = {Peterson, John and Hudak, Paul and Ling, Gary Shu},
+ TITLE = {Principled Dynamic Code Improvement},
+ INSTITUTION = {Department of Computer Science, Yale University},
+ NUMBER = {YALEU/DCS/RR-1135},
+ MONTH = {July},
+ YEAR = {1997},
+ URL = {http://www.cis.upenn.edu/~mwh/papers_DB/yale-tr.ps}
+}
+
+@Unpublished{peyton-jones:boilerplate,
+ author = {Simon {Peyton Jones} and Ralf Laemmel},
+ title = {Scrap your Boilerplate: a practical design pattern for generic programming},
+ note = {Available at http://research.microsoft.com/Users/simonpj/papers/hmap/},
+ year = 2002
+}
+
+@InProceedings{peyton-jones+:unboxed,
+ author = {Simon {Peyton Jones} and John Launchbury},
+ title = {Unboxed values as first class citizens in a
+non-strict functional programming language},
+ booktitle = "FPCA91:" # " " # fpca,
+ pages = {636-666},
+ year = 1991,
+ address = {New York, NY},
+ month = aug,
+ publisher = {ACM Press}
+}
+
+@inproceedings{peyton-jones+:ghc,
+ author = "Simon L. {Peyton Jones} and Cordelia V. Hall and
+ Kevin Hammond and Will Partain and Philip Wadler",
+ title = "The {G}lasgow {H}askell compiler: a technical
+ overview",
+ year = 1993,
+ month = jul,
+ booktitle = "Proc. UK Joint Framework for Information Technology
+ (JFIT) Technical Conference",
+}
+
+@inproceedings{peyton-jones+:imperative-fnal-prog,
+ author = "Peyton Jones, Simon L. and Philip Wadler",
+ title = "Imperative Functional Programming",
+ booktitle = o20 # " " # popl,
+ address = "Charleston, South Carolina",
+ year = 1993,
+ month = jan,
+}
+
+@TechReport{peyton-jones99:haskell,
+ author = {Simon {Peyton Jones} and John Hughes},
+ title = {Report on the Programming Language {H}askell 98, A
+ Non-strict Purely Functional Language},
+ institution = {Yale University, Department of Computer Science},
+ year = 1999,
+ number = {YALEU/DCS/RR-1106},
+ month = feb,
+ note = {Available from \url{http://www.haskell.org/definition/}}
+}
+
+@Book{peyton-jones03:haskell,
+ editor = {Simon {Peyton Jones}},
+ title = {Haskell 98 Language and Libraries: The Revised Report},
+ publisher = {Cambridge University Press},
+ year = 2003
+}
+
+
+
+
+@InProceedings{pfenning+:twelf,
+ author = {Frank Pfenning and Carsten Sch\"urmann},
+ title = {System description: Twelf---a meta-logical framework for deductive systems},
+ booktitle = {Proceedings of the 16th International Conference on Automated Deduction (CADE-16)},
+ pages = {202--206},
+ year = 1999,
+ editor = {H. Ganzinger},
+ address = {Trento, Italy},
+ month = jul
+}
+
+@InProceedings{pfenning+:hoas,
+ author = {Frank Pfenning and Conal Elliott},
+ title = {Higher-order Abstract Syntax},
+ booktitle = 1988 # " " # pldi,
+ pages = {199-208},
+ year = 1988,
+ address = {Atlanta, GA, USA},
+ month = jun
+}
+
+@inproceedings{pfenning+:leap,
+ author = "Frank Pfenning and Peter Lee",
+ title = "{LEAP}: A language with eval and polymorphism",
+ booktitle = "Proceedings of the International Joint Conference on
+ Theory and Practice in Software Development",
+ address = "Barcelona",
+ year = 1989,
+ series = lncs,
+ volume = 352,
+ publisher = springer,
+ pages = "345--359",
+}
+
+@techreport{pfenning:inductive-types-coq,
+ author = "Frank Pfenning",
+ title = "Inductively Defined Types in the Calculus of Constructions",
+ institution = cmu-cs,
+ month = nov,
+ year = 1988,
+ type = "Ergo Report",
+ number = "88-069",
+}
+
+
+@INPROCEEDINGS{PfPa89,
+ author = {Frank Pfenning and Christin Paulin-Mohring},
+ booktitle = {Proceedings of Mathematical Foundations of Programming Semantics},
+ publisher = {Springer-Verlag},
+ series = {Lecture Notes in Computer Science},
+ volume = 442,
+ title = {Inductively defined types in the {Calculus of Constructions}},
+ year = 1990,
+ pages = {209--228}
+}
+
+@inproceedings{pfenning:partial-inference,
+ author = "Frank Pfenning",
+ title = "Partial Polymorphic Type Inference and Higher-Order
+ Unification",
+ booktitle = 1998 # " " # lfp,
+ year = 1988,
+ month = jul,
+ pages = "153--163",
+ address = "Snowbird, Utah",
+}
+
+@article{pfenning:recon-undecidable,
+ author = "Frank Pfenning",
+ title = "On the Undecidability of Partial Polymorphic Type
+ Reconstruction",
+ journal = "Fundamenta Informaticae",
+ year = 1993,
+ volume = 19,
+ number = "1,2",
+ pages = "185--199",
+}
+
+@inproceedings{pfenning:unification,
+ author = "Frank Pfenning",
+ title = "Unification and Anti-Unification in the Calculus of
+ Constructions",
+ booktitle = o6 # " " # lics,
+ year = 1991,
+ month = jul,
+ pages = "74--85",
+ address = "Amsterdam",
+}
+
+@article{pierce+:ho-subtyping,
+ author = "Benjamin Pierce and Martin Steffen",
+ title = "Higher-Order Subtyping",
+ year = 1997,
+ journal = "Theoretical Computer Science",
+ volume = 176,
+ number = "1--2",
+ pages = "235--282",
+}
+
+@article{pierce+:oop-tt-foundations,
+ author = "Benjamin C. Pierce and David N. Turner",
+ title = "Simple Type-Theoretic Foundations For
+ Object-Oriented Programming",
+ journal = jfp,
+ year = 1994,
+ month = apr,
+ volume = 4,
+ number = 2,
+ pages = "207--247",
+}
+
+@inproceedings{pierce+:oop-wo-rectype,
+ author = "Benjamin C. Pierce and David N. Turner",
+ title = "Object-Oriented Programming Without Recursive Types",
+ booktitle = o20 # " " # popl,
+ year = 1993,
+ month = jan,
+ pages = "299--312",
+}
+
+@techreport{pierce+:programming-in-ho-lambda,
+ author = "Benjamin Pierce and Scott Dietzen and Spiro
+ Michaylov",
+ title = "Programming in Higher-Order Typed Lambda-Calculi",
+ year = 1989,
+ institution = cmu-cs,
+ number = "CMU-CS-89-111",
+}
+
+@incollection{pierce:bq-undecidable,
+ author = "Benjamin C. Pierce",
+ title = "Bounded Quantification is Undecidable",
+ booktitle = "Theoretical Aspects of Object-Oriented Programming",
+ year = 1994,
+ publisher = "The {MIT} Press",
+ pages = "427--459",
+}
+
+@article{pierce:intersection-and-bq,
+ author = "Benjamin C. Pierce",
+ title = "Intersection Types and Bounded Polymorphism",
+ pages = "129--193",
+ journal = mscs,
+ month = apr,
+ year = 1997,
+ volume = 7,
+ number = 2,
+}
+
+@phdthesis{pierce:phd,
+ author = "Benjamin C. Pierce",
+ title = "Programming with Intersection Types and Bounded
+ Polymorphism",
+ school = cmu-cs,
+ year = 1991,
+ month = dec,
+ address = pgh-pa,
+}
+
+@manual{pierce:pict,
+ author = "Benjamin C. Pierce",
+ title = "Programming in the Pi-Calculus: An Experiment in
+ Concurrent Language Design",
+ year = 1995,
+ month = dec,
+ webnote = "Available at
+ http://www.cs.indiana.edu/hyplan/pierce/ftp/pict/Html/Pict.html",
+}
+
+
+
+@inproceedings{ pierce98local,
+ author = "Benjamin C. Pierce and David N. Turner",
+ title = "Local Type Inference",
+ booktitle = "Conference Record of {POPL} 98: The 25TH {ACM} {SIGPLAN}-{SIGACT}
+ Symposium on Principles of Programming Languages, San Diego, California",
+ address = "New York, NY",
+ pages = "252--265",
+ year = "1998",
+ url = "citeseer.nj.nec.com/pierce98local.html" }
+
+
+@Book{pierce:book,
+ author = {Benjamin C. Pierce},
+ title = {Types and Programming Languages},
+ publisher = mit-press,
+ year = 2002
+}
+
+@InProceedings{pierce+:recursive-types-dummies,
+ author = "Vladimir Gapeyev and Michael Y. Levin and Benjamin C. Pierce",
+ title = "Recursive Subtyping Revealed",
+ booktitle = 2000 # " " # icfp,
+ address = "Montreal",
+ month = sep,
+ year = 2000,
+ pages = {221--232},
+ url = "citeseer.nj.nec.com/470426.html" }
+}
+
+@inproceedings{ pitts00metalanguage,
+ author = "Andrew M. Pitts and Murdoch Gabbay",
+ title = "A Metalanguage for Programming with Bound Names Modulo Renaming",
+ booktitle = "Mathematics of Program Construction",
+ pages = "230--255",
+ year = "2000",
+ url = "citeseer.nj.nec.com/pitts00metalanguage.html" }
+
+@TechReport{plotkin:logical-relations,
+ author = {G.D. Plotkin},
+ title = {Lambda-definablility and logical relations},
+ institution = {University of Edinburgh, School of Artificial Intelligence},
+ year = 1973,
+ number = {SAI-RM-4}
+}
+@article{plotkin:name-value,
+ author = "Gordon D. Plotkin",
+ title = "Call-by-name, call-by-value, and the lambda
+ calculus",
+ journal = tcs,
+ volume = 1,
+ year = 1975,
+ pages = "125--159",
+}
+
+
+
+@inbook{plotkin:lambda-definability,
+ author = {G.D. Plotkin},
+ chapter = {Lambda definability in the full type hierarchy},
+ book = {To H.B. Curry: Essays on Combinatory Logic, Lambda Calculus and Formalism},
+ year = 1980,
+ pages = {363--373},
+ publisher = {Academic Press}
+}
+
+@inproceedings{plotkin+:param-logic,
+ author = "Gordon Plotkin and Mart\'{\i}n Abadi",
+ title = "A Logic for Parametric Polymorphism",
+ booktitle = tlca,
+ year = 1993,
+ pages = "361--375",
+}
+
+@inproceedings{plotkin+:subtype-parametricity,
+ author = "Gordon Plotkin and Mart\'{\i}n Abadi and Luca
+ Cardelli",
+ title = "Subtyping and Parametricity",
+ booktitle = o9 # " " # lics,
+ year = 1994,
+ month = jul,
+ pages = "310--319",
+}
+
+@MastersThesis{poulsen:masters,
+ author = {Eigil Rosager Poulsen},
+ title = {Representation analysis for efficient implementation
+ of polymorphism},
+ school = {DIKU, University of Copenhagen},
+ year = 1993,
+ month = apr
+}
+
+%% Q %%
+
+%% R %%
+@inproceedings{pottier:simp-subtyping,
+ author = "Fran\c{c}ois Pottier",
+ title = "Simplifying Subtyping Constraints",
+ booktitle = 1996 # " " # icfp,
+ year = 1996,
+ month = may,
+ address = "Philadelphia",
+ pages = "122--133",
+}
+
+@inproceedings{reed99:xenoservers,
+ author = "D. Reed and I. Pratt and S. Early and P. Menage and
+ N. Stratford",
+ title = "Xenoservers: Accountable execution of untrusted
+ programs",
+ booktitle = o7 # " " # hotos,
+ month = 1999,
+ year = "1999"
+}
+
+@InProceedings{reistad94,
+ author = {Brian Reistad and David K. Gifford},
+ title = {Static Dependent Costs for Estimating Execution
+ Time},
+ booktitle = lfp,
+ pages = {65--78},
+ year = 1994,
+ address = {Orlando, FL},
+ month = jul
+}
+
+@inproceedings{remy+:objective-ml,
+ title = "Objective {ML}: A Simple Object-Oriented Extension
+ of {ML}",
+ author = "Didier R\'{e}my and J\'{e}r\^{o}me Vouillon",
+ booktitle = o24 # " " # popl,
+ year = 1997,
+ month = jan,
+ address = "Paris",
+ pages = "40--53",
+}
+
+@inproceedings{remy:ml-art,
+ author = "Didier R\'{e}my",
+ title = "Programming Objects with {ML-ART}: An Extension to
+ {ML} with Abstract and Record Types",
+ booktitle = tacs # " 1994",
+ address = "Sendai, Japan",
+ year = 1994,
+ pages = "321--346",
+ series = lncs,
+ volume = 789,
+ publisher = springer,
+}
+
+@incollection{remy:record-ext,
+ author = "Didier R\'{e}my",
+ title = "Type Inference for Records in a Natural Extension of
+ {ML}",
+ booktitle = "Theoretical Aspects of Object-Oriented Programming",
+ editor = "Carl A. Gunter and John C. Mitchell",
+ chapter = 3,
+ pages = "67--95",
+ year = 1994,
+ publisher = mit-press,
+ address = cam-ma,
+}
+
+@inproceedings{remy:type-rec-var,
+ author = "Didier R\'{e}my",
+ title = "Typechecking Records and Variants in a Natural
+ Extension of {ML}",
+ booktitle = o16 # " " # popl,
+ pages = "77--87",
+ year = 1989,
+ month = jan,
+}
+
+
+
+@inproceedings{reppy+:simple-objects,
+ author = "John Reppy and Jon Riecke",
+ title = "Simple Objects for {S}tandard {ML}",
+ booktitle = 1996 # " " # pldi,
+ year = 1996,
+ month = may,
+ pages = "171--180",
+ address = "Philadelphia",
+}
+
+@inproceedings{reynolds:definitional-interp,
+ author = "John C. Reynolds",
+ title = "Definitional Interpreters for Higher-Order
+ Programming Languages",
+ booktitle = "Conference Record of the 25th National ACM
+ Conference",
+ pages = "717--740",
+ address = "Boston",
+ month = aug,
+ year = "1972",
+}
+
+@inproceedings{reynolds:essence-of-algol,
+ author = "John C. Reynolds",
+ title = "The Essence of {Algol}",
+ booktitle = "Proceedings of the International Symposium on
+ Algorithmic Languages",
+ editor = "J. W. de Bakker and J. C. van Vliet",
+ address = "Amsterdam",
+ year = 1981,
+ month = oct,
+ pages = "345--372",
+ publisher = noholland,
+}
+
+@techreport{reynolds:forsythe,
+ author = "John C. Reynolds",
+ title = "Design of the Programming Language {F}orsythe",
+ year = 1996,
+ month = jun,
+ institution = cmu-cs,
+ number = "CMU-CS-94-146",
+}
+
+@incollection{reynolds:implicit-conversions,
+ author = "John C. Reynolds",
+ title = "Using Category Theory to Design Implicit Conversions
+ and Generic Operators",
+ booktitle = "Semantics-Directed Compiler Generation",
+ publisher = springer,
+ series = lncs,
+ volume = 94,
+ year = 1980,
+ pages = "211--258",
+}
+
+@inproceedings{reynolds:intersection-coherence,
+ author = "John C. Reynolds",
+ title = "The Coherence of Languages with Intersection Types",
+ booktitle = tacs # " 1991",
+ address = "Sendai, Japan",
+ year = 1991,
+ pages = "675--700",
+ series = lncs,
+ volume = 526,
+ publisher = springer,
+}
+
+@inproceedings{REYNOLDS83,
+ author = "John C. Reynolds",
+ title = "Types, Abstraction and Parametric Polymorphism",
+ booktitle = "Information Processing '83",
+ year = 1983,
+ pages = "513--523",
+ publisher = noholland,
+ note = "Proceedings of the IFIP 9th World Computer Congress",
+}
+
+@inproceedings{reynolds:polymorphism-not-set-theoretic,
+ author = "John C. Reynolds",
+ title = "Polymorphism is not Set-Theoretic",
+ booktitle = "Proceedings of the International Symposium on
+ Semantics of Data Types",
+ year = 1984,
+ series = lncs,
+ volume = 173,
+ publisher = springer,
+ pages = {145--156}
+}
+
+@inproceedings{reynolds:syntactic-control-interfere,
+ author = "John C. Reynolds",
+ title = "Syntactic Control of Interference",
+ booktitle = o5 # " " # popl,
+ year = 1978,
+ pages = "39--46",
+ address = "Tucson, Arizona",
+}
+
+@inproceedings{reynolds:syntactic-control-interfere2,
+ author = "John C. Reynolds",
+ title = "Syntactic Control of Interference, Part 2",
+ booktitle = o16 # " " # icalp,
+ month = jul,
+ year = 1989,
+}
+
+@inproceedings{reynolds:type-structure,
+ author = "John C. Reynolds",
+ title = "Towards a theory of type structure",
+ booktitle = "Programming Symposium",
+ pages = "408--425",
+ series = lncs,
+ volume = 19,
+ year = 1974,
+}
+
+@Article{reynolds+:funept,
+ author = {John C.~Reynolds and Gordon D.~Plotkin},
+ title = {On Functors Expressible in the Polymorphic Typed
+ Lambda Calculus},
+ journal = {Information and Computation},
+ year = 1993,
+ volume = 105,
+ pages = {1--29}
+}
+
+@techreport{rezus:semant-ctt,
+ author = "Adrian Rezus",
+ title = "Semantics of Constructive Type Theory",
+ institution = "Informatics Department, Faculty of Science,
+ Nijmegen, University, The Netherlands",
+ year = 1985,
+ month = sep,
+ number = 70,
+}
+
+@inproceedings{ roe97lightweight,
+ author = "Paul Roe and Clemens Szyperski",
+ title = "Lightweight Parametric Polymorphism for Oberon",
+ booktitle = "Proc. of Joint Modular Languages Conference ({JMLC})",
+ address = "Linz, Austria",
+ year = "1997",
+ url = "citeseer.nj.nec.com/roe97lightweight.html" }
+
+
+@INPROCEEDINGS{Rouaix96,
+ AUTHOR = {Fran\c{c}ois Rouaix},
+ TITLE = {A {Web} navigator with applets in {Caml}},
+ BOOKTITLE = {Proceedings of the 5th International {World} {Wide} {Web}
+ Conference, in {Computer} {Networks} and
+ {Telecommunications} {Networking}},
+ VOLUME = {28},
+ YEAR = {1996},
+ PUBLISHER = {Elsevier},
+ MONTH = {May},
+ PAGES = {1365--1371},
+ URL = {http://pauillac.inria.fr/~rouaix/mmm/papers/mmm.ps.gz}
+}
+
+
+
+@InProceedings{ ruehr98structural,
+ author = "Fritz Ruehr",
+ title = "Structural polymorphism",
+ booktitle = "Informal Proceedings Workshop on Generic Programming, WGP'98, Marstrand,
+ Sweden, 18 June 1998.",
+ editor = "Roland Backhouse and Tim Sheard",
+ year = 1998,
+ url = "citeseer.nj.nec.com/ruehr98structural.html"
+}
+
+
+
+@PhdThesis{ruehr:phd,
+ author = {Fritz Ruehr},
+ title = {Analytical and Structural Polymorphism Expressed Using Patterns Over Types},
+ school = {University of Michigan},
+ year = 1992
+}
+
+@inproceedings{ruf:df,
+ title = "Partitioning Dataflow Analyses Using Types",
+ author = "Erik Ruf",
+ booktitle = o24 # " " # popl,
+ year = "1997",
+ month = jan,
+ pages = "15--26",
+ address = "Paris",
+}
+
+@article{russell:types,
+ author = "Bertrand Russell",
+ title = "Mathematical logic as based on a theory of type",
+ journal = "Am. J. Math.",
+ volume = 30,
+ pages = "222--262",
+ year = 1908,
+}
+
+%% S %%
+
+@inproceedings{saha+:type-lift,
+ author = "Bratin Saha and Zhong Shao",
+ title = "Optimal Type Lifting",
+ booktitle = o2 # " " # tic,
+ year = 1998,
+ month = mar,
+}
+
+@InProceedings{saha+:fully,
+ author = {Valery Trifonov and Bratin Saha and Zhong Shao},
+ title = {Fully Reflexive Intensional Type Analysis},
+ booktitle = o5 # " " # icfp,
+ year = 2000,
+ address = "Montreal",
+ month = sep,
+ pages = "82--93",
+ annote = {Extended version is YALEU/DCS/TR-1194}
+}
+
+@InProceedings{saha+:fully-erasure,
+ author = {Bratin Saha and Valery Trifonov and Zhong Shao},
+ title = {Fully Reflexive Intensional Type Analysis in Type Erasure Semantics},
+ booktitle = o3 # " " # tic,
+ year = 2000,
+ address = "Montreal",
+ month = sep
+}
+
+
+@inproceedings{DBLP:conf/types/BradyMM03,
+ author = {Edwin Brady and
+ Conor McBride and
+ James McKinna},
+ title = {Inductive Families Need Not Store Their Indices},
+ booktitle = {TYPES},
+ year = {2003},
+ pages = {115-129},
+ ee = {http://springerlink.metapress.com/openurl.asp?genre=article{\&}issn=0302-9743{\&}volume=3085{\&}spage=115},
+ crossref = {DBLP:conf/types/2003},
+ bibsource = {DBLP, http://dblp.uni-trier.de}
+}
+
+@proceedings{DBLP:conf/types/2003,
+ editor = {Stefano Berardi and
+ Mario Coppo and
+ Ferruccio Damiani},
+ title = {Types for Proofs and Programs, International Workshop, TYPES
+ 2003, Torino, Italy, April 30 - May 4, 2003, Revised Selected
+ Papers},
+ booktitle = {TYPES},
+ publisher = {Springer},
+ series = {Lecture Notes in Computer Science},
+ volume = {3085},
+ year = {2004},
+ bibsource = {DBLP, http://dblp.uni-trier.de}
+}
+
+@STRING{fossacs11="Foundations of Software Science and Computational
+ Structures, 14th International Conference, FOSSACS 2011,
+ Saarbrucken, Germany"}
+
+@InProceedings{abel:fossacs11,
+ author = {Andreas Abel},
+ title = {Irrelevance in Type Theory with a Heterogeneous Equality
+ Judgement},
+ optcrossref = {},
+ optkey = {},
+ booktitle = fossacs11,
+ optpages = {},
+ year = {2011},
+ opteditor = {},
+ optvolume = {},
+ optnumber = {},
+ optseries = {},
+ optaddress = {},
+ optmonth = {},
+ optorganization={},
+ optpublisher = {},
+ note = {To appear.},
+ opturl = {},
+ optpostscript = {},
+ optpdf = {},
+ optdvi = {},
+ optabstract = {}
+}
+
+@inproceedings{bengtson+:f7,
+ author = {Bengtson, Jesper and Bhargavan, Karthikeyan and Fournet, C\'{e}dric and Gordon, Andrew D. and Maffeis, Sergio},
+ title = {Refinement Types for Secure Implementations},
+ booktitle = {Proceedings of the 2008 21st IEEE Computer Security Foundations Symposium},
+ year = {2008},
+ isbn = {978-0-7695-3182-3},
+ pages = {17--32},
+ numpages = {16},
+ publisher = {IEEE Computer Society},
+ address = {Washington, DC, USA},
+}
+
+
+@inproceedings{Borgstrom:2011:VSP:1929529.1929532,
+ author = {Borgstrom, Johannes and Chen, Juan and Swamy, Nikhil},
+ title = {Verifying stateful programs with substructural state and hoare types},
+ booktitle = {Proceedings of the 5th ACM workshop on Programming languages meets program verification},
+ series = {PLPV '11},
+ year = {2011},
+ isbn = {978-1-4503-0487-0},
+ location = {Austin, Texas, USA},
+ pages = {15--26},
+ numpages = {12},
+ publisher = {ACM},
+ address = {New York, NY, USA},
+ keywords = {affine types, dependent types, security type systems}}
+
+
+
+
+
+@incollection {mishra:erasure,
+ author = {Mishra-Linger, Nathan and Sheard, Tim},
+ affiliation = {Portland State University},
+ title = {Erasure and Polymorphism in Pure Type Systems},
+ booktitle = {Foundations of Software Science and Computational Structures},
+ series = {Lecture Notes in Computer Science},
+ editor = {Amadio, Roberto},
+ publisher = {Springer Berlin / Heidelberg},
+ isbn = {},
+ pages = {350-364},
+ volume = {4962},
+ year = {2008}
+}
+@Article{saltzer75protection,
+ author = "J.H. Saltzer and M.D. Schroeder",
+ title = "The Protection of Information in Computer Systems",
+ journal = {Proceedings of the IEEE},
+ year = 1975,
+ volume = 63,
+ number = 9,
+ pages = {1278--1308},
+ month = sep
+}
+
+@article{ schneider00enforceable,
+ author = "Fred B. Schneider",
+ title = "Enforceable security policies",
+ journal = "Information and System Security",
+ volume = "3",
+ number = "1",
+ pages = "30-50",
+ year = "2000",
+ url = "citeseer.nj.nec.com/article/schneider98enforceable.html" }
+
+
+@Article{schurmann:hoas,
+ author = {Carsten Sch\"{u}rmann and Jo\"{e}lle Despeyroux and Frank Pfenning},
+ title = {Primitive recursion for higher-order abstract syntax},
+ journal = {Theoretical Computer Science},
+ year = 2001,
+ volume = 266,
+ number = {1--2},
+ pages = {1--58},
+ month = sep
+}
+
+@Unpublished{schuermann:delphin,
+ author = {Carsten Sch\"{u}rmann and Richard Fontana and Yu Liao},
+ title = {Delphin: Functional Programming with deductive systems},
+ note = {Available at \url{http://cs-www.cs.yale.edu/homes/carsten/}},
+ year = 2002
+}
+
+@inproceedings{scott:advice-modal,
+ author = {Dana Scott},
+ editor = {K. Lambert},
+ booktitle = {Philosophical Problems in Logic},
+ title = {Advice on Modal Logic},
+ publisher = {D. Riedel Publishing Company},
+ year = 1973,
+ pages = {143--173}
+}
+
+@inproceedings{scott+:semantics,
+ author = "Dana Scott and Christopher Strachey",
+ title = "Toward a Mathematical Semantics for Computer
+ Languages",
+ booktitle = "Proceedings of the Symposium on Computers and
+ Automata",
+ series = "Microwave Research Institute Symposia Series",
+ volume = 21,
+ publisher = "Polytechnic Institute of Brooklyn",
+ year = 1971,
+}
+
+@inproceedings{scott:lattice-models,
+ author = "Dana Scott",
+ title = "Lattice Theoretic Models for Various Type-Free
+ Calculi",
+ booktitle = "Fourth International Congress of Logic, Methodology
+ and Philosophy of Science",
+ publisher = noholland,
+ year = 1972,
+}
+
+@inproceedings{scott:math-thy-comp,
+ author = "Dana Scott",
+ title = "Outline of a Mathematical Theory of Computation",
+ booktitle = "Fourth Princeton Conference on Information Sciences
+ and Systems",
+ year = 1970,
+ pages = "169--176",
+}
+
+@InProceedings{seltzer96vino,
+ author = {Margo Seltzer and Yasuhiro Endo and Chris Small and
+ Keith Smith},
+ title = {Dealing with Disaster: Surviving Misbehaved Kernel
+ Extensions},
+ booktitle = o2 # " " # osdi,
+ pages = {213--227},
+ year = 1996,
+ address = {Seattle, WA},
+ month = oct
+}
+
+@inproceedings{senizergues:dpda,
+ author = "G\'{e}raud S\'{e}nizergues",
+ title = "The Equivalence Problem for Deterministic Pushdown
+ Automata is Decidable",
+ booktitle = o24 # " " # icalp,
+ year = 1997,
+ month = jul,
+ address = "Bologna, Italy",
+ pages = "671--681",
+ series = lncs,
+ volume = 1256,
+ publisher = springer,
+}
+
+@Book{dylan:manual,
+ author = {Andrew Shalit and David Moon and Orca Starbuck},
+ title = {The Dylan Reference Manual : The Definitive Guide to the New Object-Oriented Dynamic Language
+},
+ publisher = {Apple Press},
+ year = 1996
+}
+
+@InProceedings{shao98implementing,
+ author = {Zhong Shao and Christopher League and Stefan
+ Monnier},
+ title = {Implementing Typed Intermediate Languages},
+ booktitle = 1998 # " " # icfp,
+ pages = {313--323},
+ year = 1998,
+ volume = 34,
+ number = 1,
+ series = {{ACM} {SIGPLAN} Notices},
+ address = {Baltimore, Maryland},
+ month = {sep}
+}
+
+@inproceedings{shao:flint,
+ author = "Zhong Shao",
+ title = "An Overview of the {FLINT/ML} Compiler",
+ booktitle = 1997 # " " # tic,
+ month = jun,
+ year = 1997,
+ address = "Amsterdam",
+ note = "Published as {B}oston {C}ollege Computer Science
+ Department Technical Report BCCS-97-03",
+}
+
+@inproceedings{shao:rep-analysis,
+ author = "Zhong Shao",
+ title = "Flexible Representation Analysis",
+ booktitle = 1997 # " " # icfp,
+ year = 1997,
+ month = jun,
+ address = "Amsterdam",
+ pages = "85--98",
+}
+
+@inproceedings{shao:typed-module-comp,
+ author = "Zhong Shao",
+ title = "Typed Cross-Module Compilation",
+ booktitle = 1998 # " " # icfp,
+ year = 1998,
+ month = sep,
+ address = "Baltimore, Maryland",
+ pages = "141--152",
+}
+
+
+
+@Article{shaw89time,
+ author = {Alan C. Shaw},
+ title = {Reasoning about Time in Higher-Level Language Software},
+ journal = tse,
+ year = 1989,
+ volume = 15,
+ number = 7,
+ pages = {875--889},
+ month = jul
+}
+
+
+@TechReport{ sheard93type,
+ author = "Tim Sheard",
+ title = "Type parametric programming",
+ number = "CSE 93-018",
+ institution = {Oregon Graduate Institute},
+ year = 1993,
+ url = "citeseer.nj.nec.com/sheard93type.html" }
+
+
+
+@inproceedings{shields01object-oriented,
+ author = {Mark Shields and Simon {Peyton Jones}},
+ title = {Object-Oriented Style Overloading for Haskell},
+ booktitle = {Electronic Notes in Theoretical Computer Science},
+ volume = {59},
+ issue = {1},
+ publisher = {Elsevier Science Publishers},
+ editor = {Nick Benton
+ and Andrew Kennedy},
+ year = {2001},
+ url = "http://www.elsevier.com/gej-ng/31/29/23/89/27/show/Products/notes/index.htt#008"
+}
+
+@Article{shostak:residue,
+ author = {R. Shostak},
+ title = {Deciding linear inequalities by computing loop
+ residues},
+ journal = jacm,
+ year = 1981,
+ volume = 28,
+ number = 4,
+ pages = {748--752},
+ month = oct
+}
+
+
+
+@inproceedings{sirer+:spinlink,
+ author = "Emin Gun Sirer and Marc E. Fiuczynski and Przemyslaw Pardyak and Brian N. Bershad",
+ title = "Safe Dynamic Linking in an Extensible Operating System",
+ booktitle = o1 # " " # wcsss,
+ year = 1996,
+ month = "February",
+ address = "Tucson",
+}
+
+
+@InProceedings{smith00alias,
+ author = {Frederick Smith and David Walker and Greg Morrisett},
+ title = {Alias Types},
+ booktitle = {European Symposium on Programming},
+ year = 2000,
+ address = {Berlin, Germany},
+ month = mar
+}
+
+@phdthesis{smithg:phd,
+ author = "Geoffrey Seward Smith",
+ title = "Polymorphic Type Inference For Languages with
+ Overloading and Subtyping",
+ school = cornell-cs,
+ year = 1991,
+ month = aug,
+ address = ith-ny,
+}
+
+@Article{smith+:active,
+ author = {Jonathan M. Smith and
+ Kenneth L. Calvert and Sandra L. Murphy and Hilarie K. Orman and Larry L. Peterson},
+ title = {Activating networks: A progress report},
+ journal = {IEEE Computer},
+ year = {1999},
+ OPTkey = {},
+ OPTvolume = {32},
+ OPTnumber = {4},
+ OPTpages = {32--41},
+ OPTmonth = apr,
+ OPTnote = {},
+ OPTannote = {}
+}
+
+@article{smith:partial-total,
+ author = "Scott F. Smith",
+ title = "Hybrid Partial-Total Type Theory",
+ journal = "International Journal of Foundations of Computer
+ Science",
+ volume = 6,
+ pages = "235--263",
+ year = 1995,
+}
+
+@phdthesis{smith:phd,
+ author = "Scott Fraser Smith",
+ title = "Partial Objects in Type Theory",
+ school = cornell-cs,
+ month = jan,
+ year = 1989,
+ address = ith-ny,
+}
+
+
+
+@InProceedings{smith:reflection,
+ author = {Brian Cantwell Smith},
+ title = {Reflection and Semantics in {LISP}},
+ booktitle = o14 # " " # popl,
+ pages = {23--35},
+ year = 1984
+}
+
+@inproceedings{solomon:type-defs-param,
+ author = "Marvin Solomon",
+ title = "Type Definitions with Parameters (Extended
+ Abstract)",
+ booktitle = o5 # " " # popl,
+ year = 1978,
+ month = jan,
+ address = "Tucson, Arizona",
+ pages = "31--38",
+}
+
+@InProceedings{spatscheck99:_defen_scout,
+ author = {Oliver Spatscheck and Larry L.Peterson },
+ title = {Defending against denial of service attacks in
+ Scout},
+ booktitle = o3 # " " # sosp,
+ pages = {59-72},
+ year = 1999
+}
+
+@InProceedings{splawski+:type-fixpoints,
+ author = {Zdzis\l{}aw Sp\l{}awski and Pawe\l{} Urzyczyn},
+ title = {Type Fixpoints: Iteration vs. Recursion},
+ booktitle = o4 # " " # icfp,
+ pages = {102--113},
+ year = 1999,
+ address = {Paris, France},
+ month = sep
+}
+
+@TechReport{spoonhower98telephony,
+ author = {Daniel Spoonhower and Grzegorz Czajkowski and Chris
+ Hawblitzel and Chi-Chao Chang and Deyu Hu and
+ Thorsten von Eicken},
+ title = {Design and Evaluation of an Extensible Web &
+ Telephony Server based on the J-Kernel},
+ institution = cornell-cs,
+ year = 1998,
+ number = {TR98-1715},
+ address = {ithaca-ny}
+}
+
+@inproceedings{stansifer:subtype-inf,
+ title = "Type Inference with Subtypes",
+ author = "Ryan Stansifer",
+ booktitle = o15 # " " # popl,
+ address = "San Diego",
+ year = 1988,
+ month = jan,
+ pages = "88--97",
+}
+
+
+
+@Article{statman:logical-relations,
+ author = {R. Statman},
+ title = {Logical Relations and Typed Lambda Calculus},
+ journal = {Information and Control},
+ year = 1985,
+ volume = 65,
+ pages = {85--97}
+}
+
+@mastersthesis{steele:rabbit,
+ author = "Guy L. {Steele Jr.}",
+ title = "{R}abbit: A Compiler for {S}cheme",
+ school = "MIT",
+ year = 1978,
+}
+
+
+
+@Book{steele:cltl2,
+ author = {Guy L. {Steele Jr.}},
+ title = {Common Lisp the Language, 2nd Edition},
+ publisher = {Digital Press},
+ year = 1990
+}
+
+@techreport{stone+:sml96,
+ title = "A Type-Theoretic Account of {S}tandard {ML} 1996",
+ author = "Chris Stone and Robert Harper",
+ institution = cmu-cs,
+ year = 1996,
+ number = "CMU-CS-96-136",
+}
+
+@InProceedings{stone+:singleton-kinds,
+ author = {Chris Stone and Robert Harper},
+ title = {Deciding Type Equivalence in a Language with Singleton Kinds},
+ booktitle = o27 # " " # popl,
+ pages = {214--225},
+ year = 2000,
+ address = {Boston, MA, USA},
+ month = jan
+}
+
+@Article{strachey:param,
+ author = {Christopher Strachey},
+ title = {Fundamental Concepts in Programming Languages},
+ journal = {Higher-Order and Symbolic Computation},
+ year = 2000,
+ volume = 13,
+ pages = {11--49},
+ note = {This paper forms the substance of a course of lectures given at the International Summer School in
+ Computer Programming at Copenhagen in August, 1967.}
+}
+
+
+
+@Book{stroustrup:c++,
+ author = {Bjarne Stroustrup},
+ title = {The C++ Programming Language (Third Edition) },
+ publisher = {Addison Wesley Longman},
+ year = 1997,
+ address = {Reading, MA}
+}
+
+@Article{sumii01:hybrid-pe,
+ author = {Eijiro Sumii and Naoki Kobayashi},
+ title = {A Hybrid Approach to Online and Offline Partial Evaluation},
+ journal = {Higher-Order and Symbolic Computation},
+ year = 2001,
+ volume = 14,
+ number = {2/3},
+ pages = {101--142}
+}
+
+%% T %%
+
+
+@Article{tait:intensional,
+ author = {William W. Tait},
+ title = {Intensional interpretation of functionals of finite type},
+ journal = {Journal of Symbolic Logic},
+ year = 1967,
+ volume = 32,
+ pages = {198--212}
+}
+
+@inproceedings{tarditi+:til,
+ author = "David Tarditi and Greg Morrisett and Perry Cheng and
+ Chris Stone and Robert Harper and Peter Lee",
+ title = "{TIL}: A Type-Directed Optimizing Compiler for {ML}",
+ booktitle = 1996 # " " # pldi,
+ year = 1996,
+ month = may,
+ pages = "181--192",
+}
+
+
+@PhdThesis{tarditi:phd,
+ author = {David Tarditi},
+ title = {Design and Implementation of Code Optimizations for a Type-Directed
+Compiler for Standard ML},
+ school = {Carnegie Mellon School of Computer Science},
+ year = 1996,
+ note = {Available as CMU-CS-97-108}
+}
+
+@Article{talpin+:type-effect,
+ author = {J.-P. Talpin and P. Jouvelot},
+ title = {The Type and Effect Discipline},
+ journal = {Information and Computation},
+ year = 1994,
+ volume = 111,
+ number = 2,
+ pages = {245--296}
+}
+
+@Article{tennenhouse97survey,
+ author = "D. Tennenhouse and J. Smith and W. Sincoskie and
+ D. Wetherall and G. Minden",
+ title = "A Survey of Active Network Research",
+ booktitle = {IEEE Communications Magazine},
+ pages = {80--86},
+ month = jan,
+ volume = 35,
+ number = 1,
+ year = 1997
+}
+
+
+@article{ tennenhouse96towards,
+ author = "David L. Tennenhouse and David J. Wetherall",
+ title = "Towards an Active Network Architecture",
+ journal = "Computer Communication Review",
+ volume = "26",
+ number = "2",
+ year = "1996",
+ pages = "5--18",
+ url = "citeseer.nj.nec.com/tennenhouse96towards.html"
+}
+
+
+@InProceedings{thiemann01,
+ author = { Peter Thiemann},
+ title = { Enforcing Security Properties by Type Specialization },
+ booktitle = { European Symposium on Programming (ESOP'01) },
+ year = 2001,
+ volume = 2028,
+ series = lncs,
+ address = {Genova, Italy },
+ month = apr,
+ publisher = {Springer-Verlag}
+}
+
+
+@InProceedings{tuiryn:subtyping-undecidable,
+ author = {Jerzy Tiuryn and Pawel Urzyczyn},
+ title = { The subtyping problem for second-order types is undecidable.},
+ booktitle = {Proceedings of the IEEE Symposion on Logic in Computer Science (LICS 96)},
+ pages = {74--85},
+ year = 1996,
+ address = {New Brunswick, New Jersey},
+ publisher = {IEEE Computer Society Press}
+}
+
+@inproceedings{tofte:higher-order-modules,
+ author = "Mads Tofte",
+ title = "Principal Signatures for Higher-Order Program
+ Modules",
+ booktitle = o19 # " " # popl,
+ year = 1992,
+ month = jan,
+ pages = "189--199",
+}
+
+@article{tofte:polymorphic-refs,
+ author = "Mads Tofte",
+ title = "Type Inference for Polymorphic References",
+ journal = iandc,
+ volume = 89,
+ pages = "1--34",
+ year = 1990,
+ month = nov,
+}
+
+@inproceedings{tolmach:tagless-gc,
+ author = "Andrew Tolmach",
+ title = "Tag-Free Garbage Collection Using Explicit Type
+ Parameters",
+ booktitle = 1994 # " " # lfp,
+ month = jun,
+ pages = "1--11",
+ year = 1994,
+ address = "Orlando"
+}
+
+@InProceedings{vanderwaart+:datatypes,
+ author = {Joseph C. Vanderwaart and Derek Dreyer and Leaf Petersen and Karl Crary and Robert Harper and Perry Cheng},
+ title = {Typed Compilation of Recursive Datatypes},
+ booktitle = {{ACM} {SIGPLAN} Workshop on Types in Language Design and Implementation},
+ year = 2003,
+ address = {New Orleans, USA},
+ month = jan
+}
+
+%% U %%
+
+%% V %%
+
+
+@techreport{van-renesse+:horus,
+ author = "Robbert van Renesse and Takako M. Hickey and Kenneth
+ P. Birman",
+ title = "Design and Performance of {H}orus: A Lightweight
+ Group Communications System",
+ institution = cornell-cs,
+ year = 1994,
+ month = aug,
+ number = "TR 94-1442",
+}
+
+
+@MastersThesis{vestin:polytypic-ga,
+ author = {M\o{a}ns Vestin},
+ title = {Genetic algorithms in {H}askell with polytypic programming},
+ school = {G\"{o}teborg University},
+ year = 1997
+}
+
+@inproceedings{viswanathan:fully-abstract-objs,
+ author = "Ramesh Viswanathan",
+ title = "Full Abstraction for First-Order Objects with
+ Recursive Types and Subtyping",
+ booktitle = o13 # " " # lics,
+ year = 1998,
+ month = jun,
+ address = "Indianapolis",
+}
+
+%% W %%
+
+@InProceedings{wadler+:type-classes,
+ author = {Philip Wadler and Stephen Blott},
+ title = {How to make Ad-hoc Polymorphism less ad-hoc},
+ booktitle = o16 # " " # popl,
+ pages = {60--76},
+ year = 1989,
+ publisher = {ACM Press}
+}
+
+@inproceedings{wadler:comprehending-monads,
+ author = "Philip Wadler",
+ title = "Comprehending Monads",
+ year = 1992,
+ booktitle = "Mathematical Structures in Computer Science",
+ volume = 2,
+ pages = "461--493",
+ publisher = cambridge-press,
+}
+
+@inproceedings{wadler:effects-to-monads,
+ author = "Philip Wadler",
+ title = "The Marriage of Effects and Monads",
+ booktitle = 1998 # " " # icfp,
+ year = 1998,
+ month = sep,
+ address = "Baltimore",
+ pages = "63--74"
+}
+
+@inproceedings{wadler:fnal-essence,
+ author = "Philip Wadler",
+ title = "The Essence of Functional Programming",
+ booktitle = o19 # " " # popl,
+ year = 1992,
+ month = jan,
+ address = "Albuquerque, New Mexico",
+}
+
+@inproceedings{Wadler89,
+ author = "Philip Wadler",
+ title = "Theorems for Free!",
+ booktitle = "FPCA89:" # " " # fpca,
+ year = 1989,
+ month = sep,
+ pages = "347--359",
+ address = "London",
+}
+
+@inproceedings{wadler:linear-taste,
+ author = "Philip Wadler",
+ title = "A taste of linear logic",
+ booktitle = "Mathematical Foundations of Computer Science",
+ year = 1993,
+ publisher = springer,
+ volume = 711,
+ series = lncs,
+}
+
+@inproceedings{wadler:linear-world,
+ author = "Philip Wadler",
+ title = "Linear types can change the world!",
+ booktitle = "IFIP Working Conference on Programming Concepts and
+ Methods",
+ address = "Sea of Galilee, Israel",
+ month = apr,
+ year = 1990,
+ publisher = noholland,
+}
+
+@inproceedings{wahbe+:sfi,
+ title = "Efficient Software-Based Fault Isolation",
+ author = "Robert Wahbe and Steven Lucco and Thomas Anderson
+ and Susan Graham",
+ booktitle = o14 # " " # sosp,
+ year = 1993,
+ month = dec,
+ pages = "203--216",
+ address = "Asheville",
+}
+
+@TechReport{walker00recursive-alias,
+ author = {David Walker and Greg Morrisett},
+ title = {Alias Types for Recursive Data Structures},
+ institution = cornell-cs,
+ year = 2000,
+ number = {TR2000-1787},
+ address = ith-ny,
+ month = mar,
+ note = {submitted for publication}
+}
+
+
+@InProceedings{walker00,
+ author = {David Walker},
+ title = {A Type System for Expressive Security Policies},
+ booktitle = {Proceedings of the 27th ACM SIGPLAN-SIGACT symposium on Principles of programming languages
+January 19 - 21, 2000, Boston, MA USA},
+ pages = {254--267},
+ year = 2000,
+ publisher = {ACM Press}
+}
+
+@InProceedings{watanabe+:reflection-oo,
+ author = {Takuo Watanabe and Akinori Yonezawa},
+ title = {Reflection in an Object-Oriented Concurrent Language},
+ booktitle = oopsla,
+ pages = {306--315},
+ year = 1988
+}
+
+@inproceedings{wand:hoal,
+ author = "Mitchell Wand",
+ title = "Correctness of Procedure Representations in
+ Higher-Order Assembly Language",
+ booktitle = mfps,
+ year = 1991,
+ volume = 598,
+ publisher = springer,
+ series = 1992,
+ pages = "294--311",
+}
+
+
+
+@TechReport{washburn+:itaname-tr,
+ author = {Geoffrey Washburn and Stephanie Weirich},
+ title = {Unifying nominal and structural ad-hoc polymorphism (Extended version)},
+ institution = {University of Pennsylvania},
+ year = 2004,
+ note = { Available at \url{http://www.cis.upenn.edu/~sweirich/} }
+}
+
+@Article{wells:typability,
+ author = {Joe B. Wells},
+ title = {Typability and type checking in System {F} are equivalent and undecidable},
+ journal = {Ann. Pure Appl. Logic},
+ year = 1999,
+ volume = 98,
+ number = {1--3},
+ pages = {111--156}
+}
+
+@book{whitehead+:principia,
+ author = "Alfred North Whitehead and Bertrand Russell",
+ title = "Principia Mathematica",
+ publisher = cambridge-press,
+ year = "1910",
+ edition = "2nd",
+}
+
+@InProceedings{wickline98rtcg,
+ author = {Philip Wickline and Peter Lee and Frank Pfenning},
+ title = {Run-time Code Generation and Modal-{ML}},
+ booktitle = 1998 # " " # pldi,
+ pages = {224--235},
+ year = 1998,
+ month = jun,
+ organization = {ACM SIGPLAN}
+}
+
+@article{wright+:syntactic-soundness,
+ author = "Andrew K. Wright and Matthias Felleisen",
+ title = "A Syntactic Approach to Type Soundness",
+ journal = iandc,
+ volume = 115,
+ pages = "38--94",
+ year = 1994,
+}
+
+@article{wright:value-restriction,
+ author = "Andrew K. Wright",
+ title = "Simple Imperative Polymorphism",
+ journal = "Lisp and Symbolic Computation",
+ volume = 8,
+ number = 4,
+ month = dec,
+ year = 1995,
+ pages = "343--356",
+}
+
+
+%% X %%
+@inproceedings{xi+:dependent-types-practical,
+ author = "Hongwei Xi and Frank Pfenning",
+ title = "Dependent Types in Practical Programming",
+ booktitle = o26 # " " # popl,
+ address = "San Antonio, Texas",
+ month = jan,
+ year = 1999,
+ pages = "214--227",
+}
+
+@PhdThesis{xi:phd,
+ author = {Hongwei Xi},
+ title = {Dependent Types in Practical Programming},
+ school = {Carnegie Mellon University},
+ year = 1998,
+ address = {Pittsburgh, PA},
+ month = sep
+}
+
+
+
+@InProceedings{xi+:guarded-datatype,
+ author = {Hongwei Xi and Chiyan Chen and Gang Chen},
+ title = {Guarded Recursive Datatype Constructors},
+ booktitle = o30 # " " # popl,
+ pages = {224--235},
+ year = 2003,
+ address = {New Orleans, LA, USA},
+ month = jan
+}
+
+%% Y %%
+
+@InProceedings{yang:encoding_types,
+ author = {Zhe Yang},
+ title = {Encoding Types in {ML}-like languages},
+ booktitle = 1998 # " " # icfp,
+ year = 1998,
+ volume = 34,
+ series = {{ACM} {SIGPLAN} Notices},
+ address = {Baltimore, MD},
+ month = sep,
+ pages = { 289--300 }
+}
+
+@inproceedings{ zenger01extensible,
+ author = {Matthias Zenger and Martin Odersky},
+ title = {Extensible Algebraic Datatypes with Defaults},
+ year = 2001,
+ month = "September",
+ booktitle = "Proceedings of the International Conference on Functional Programming",
+ address = {Firenze, Italy},
+ url = {citeseer.nj.nec.com/zenger01extensible.html} }
+
+%% Z %%
+
+
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+@inproceedings{nanevski:namenec,
+ author = {Aleksandar Nanevski},
+ title = {Meta-programming with names and necessity},
+ booktitle = {Proceedings of the seventh ACM SIGPLAN international conference on Functional programming},
+ year = {2002},
+ isbn = {1-58113-487-8},
+ pages = {206--217},
+ location = {Pittsburgh, PA, USA},
+ doi = {http://doi.acm.org/10.1145/581478.581498},
+ publisher = {ACM Press},
+ }
+
+@inproceedings{loh+:dependgen,
+ author = {Andres L\"oh and Dave Clarke and Johan Jeuring},
+ title = {Dependency-style Generic Haskell},
+ booktitle = proc # o8 # icfp,
+ year = 2003,
+ pages = {141-152},
+ location = {Uppsala, Sweden},
+ }
+
+@inproceedings{nanevsk:dynamic,
+ author = {Aleksandar Nanevski},
+ title = {From dynamic binding to state via modal possibility},
+ booktitle = {Proceedings of the 5th ACM SIGPLAN international conference on Principles and practice of declaritive programming},
+ year = {2003},
+ isbn = {1-58113-705-2},
+ pages = {207--218},
+ location = {Uppsala, Sweden},
+ doi = {http://doi.acm.org/10.1145/888251.888271},
+ publisher = {ACM Press},
+ }
+
+
+
+@inproceedings{ambler+:hybrid,
+ author = {Simon Ambler and Roy L. Crole and Alberto Momigliano},
+ title = {Combining Higer Order Abstract Syntax with Tactical Theorem Proving and (Co)Induction},
+ booktitle = {Theorem Proving in Higher Order Logics, 15th International Conference,
+ TPHOLs 2002, Hampton, VA, USA, August 20-23, 2002, Proceedings},
+ publisher = {Springer},
+ series = {Lecture Notes in Computer Science},
+ volume = 2410,
+ year = 2002,
+ isbn = {3-540-44039-9},
+}
+
+@Unpublished{washburn:modal-spec,
+author = {Geoffrey Washburn},
+title = {Modal Typing for Specifying Run-time Code Generation},
+note = {Available from \url{http://www.cis.upenn.edu/~geoffw/research/}},
+year = {2001}
+}
+
+@inproceedings{acar+:selective-mem,
+ author = "Umut Acar and Guy Blelloch and Robert Harper",
+ title = "Selective Memoization",
+ booktitle = o30 # " " # popl,
+ year = 2002,
+ month = jan,
+ address = "New Orleans, LA",
+}
+
+@InProceedings{miller:mllam,
+ author = {Dale Miller},
+ title = {An Extension to {ML} to Handle Bound Variables in Data Structures: Preliminary Report},
+ booktitle = {Proceedings of the Logical Frameworks BRA Workshop},
+ year = 1990,
+ month = may
+}
+
+@article{dp:modal-logic-comp,
+ author = "Rowan Davies and Frank Pfenning",
+ title = "A Modal Analysis of Staged Computation",
+ journal = jacm,
+ year = 2001,
+ volume = 48,
+ number = 3,
+ month = "May",
+ pages = "555--604",
+}
+
+@inproceedings{pitts:fresh,
+ author = {Andrew M. Pitts},
+ title = {A fresh approach to representing syntax with static binders in functional programming},
+ booktitle = {Proceedings of the sixth ACM SIGPLAN international conference on Functional programming},
+ year = {2001},
+ isbn = {1-58113-415-0},
+ pages = {1--1},
+ location = {Florence, Italy},
+ doi = {http://doi.acm.org/10.1145/507635.507637},
+ publisher = {ACM Press},
+ }
+
+
+@Unpublished{weirich:type-erasure,
+ author = {Stephanie Weirich},
+ title = {Higher-Order Intensional Type Analysis in Type-Erasure Semantics},
+ note = {Available from \url{http://www.cis.upenn.edu/~sweirich/}},
+ year = 2003
+}
+
+
+@inproceedings{lammel:boilerplate,
+ author = {Ralf L\"ammel and Simon {Peyton Jones}},
+ title = "Scrap your boilerplate:
+ a practical design pattern for generic programming",
+ year = "2003",
+ booktitle = "Proc.\ of the ACM SIGPLAN Workshop
+ on Types in Language Design and Implementation (TLDI~2003)"
+}
+
+
+@inproceedings{dreyer+:modules,
+ author = {Derek Dreyer and Karl Crary and Robert Harper},
+ title = {A type system for higher-order modules},
+ booktitle = proc # o30 # popl,
+ year = {2003},
+ isbn = {1-58113-628-5},
+ pages = {236--249},
+ location = {New Orleans, Louisiana, USA},
+ doi = {http://doi.acm.org/10.1145/604131.604151},
+ publisher = {ACM Press},
+ }
+
+@InProceedings{Leifer:2003:GAS,
+ author = "James J. Leifer and Gilles Peskine and Peter Sewell
+ and Keith Wansbrough",
+ title = "Global abstraction-safe marshalling with hash types",
+ booktitle = proc # o8 # icfp,
+ year = "2003",
+ pages = "87--98",
+ address = "Uppsala, Sweden"
+}
+
+@TechReport{washburn+:mtr,
+ author = {Geoff Washburn and Stephanie Weirich},
+ title = {Unifying nominal and structural ad-hoc polymorphism},
+ institution = {University of Pennsylvania},
+ year = 2003,
+ note = {Available from \url{http://www.cis.upenn.edu/\~\ washburn/research/}}
+}
+
+@inproceedings{Remy:popl89,
+ author = "Didier Remy",
+ title = "Records and Variants as a natural Extension of {ML}",
+ booktitle = "Sixteenth Annual Symposium on
+ Principles Of Programming Languages",
+ year = 1989,
+ note = "Available from \url{http://doi.acm.org/10.1145/75277.75284}",
+}
+
+
+@TechReport{vytiniotis+:mtr,
+ author = {Dimitrios Vytiniotis and Geoffrey Washburn and Stephanie Weirich},
+ title = {An Open and Shut Typecase},
+ institution = {University of Pennsylvania},
+ year = {2004},
+ number = {MS-CIS-04-26},
+ note = {Available from \url{http://www.cis.upenn.edu/~dimitriv/itaname}}
+}
+
+@TechReport{zenger+:expression,
+ author = {Matthias Zenger and Martin Odersky.},
+ title = {Independently Extensible Solutions to the Expression Problem},
+ institution = {EPFL Lausanne, Switzerland},
+ year = 2004,
+ number = {IC/2004/33}
+}
+
+@Book{Nipkow-Paulson-Wenzel:2002,
+ author = {Tobias Nipkow and Lawrence C. Paulson and Markus Wenzel},
+ title = {Isabelle/HOL --- A Proof Assistant for Higher-Order Logic},
+ publisher = {Springer},
+ series = {LNCS},
+ volume = 2283,
+ year = 2002}
+
+
+@inproceedings{mellies:rectypes,
+ author = {Paul-Andr\'{e} Melli\`{e}s and J\'{e}r\^{o}me Vouillon},
+ title = {Recursive Polymorphic Types and Parametricity in an Operational Framework},
+ booktitle = {LICS '05: Proceedings of the 20th Annual IEEE Symposium on Logic in Computer Science (LICS' 05)},
+ year = {2005},
+ isbn = {0-7695-2266-1},
+ pages = {82--91},
+ doi = {http://dx.doi.org/10.1109/LICS.2005.42},
+ publisher = {IEEE Computer Society},
+ address = {Washington, DC, USA},
+ }
+
+@inproceedings{DBLP:conf/esop/Ahmed06,
+ author = {Amal J. Ahmed},
+ title = {Step-Indexed Syntactic Logical Relations for Recursive and
+ Quantified Types.},
+ booktitle = {ESOP},
+ year = {2006},
+ pages = {69-83},
+ ee = {http://dx.doi.org/10.1007/11693024_6},
+ crossref = {DBLP:conf/esop/2006},
+ bibsource = {DBLP, http://dblp.uni-trier.de}
+}
+
+@proceedings{DBLP:conf/esop/2006,
+ editor = {Peter Sestoft},
+ title = {Programming Languages and Systems, 15th European Symposium
+ on Programming, ESOP 2006, Held as Part of the Joint European
+ Conferences on Theory and Practice of Software, ETAPS 2006,
+ Vienna, Austria, March 27-28, 2006, Proceedings},
+ booktitle = {ESOP},
+ publisher = {Springer},
+ series = {Lecture Notes in Computer Science},
+ volume = {3924},
+ year = {2006},
+ isbn = {3-540-33095-X},
+ bibsource = {DBLP, http://dblp.uni-trier.de}
+}
+
+
+@article{appel01:indexed,
+ author = {Andrew W. Appel and David McAllester},
+ title = {An indexed model of recursive types for foundational proof-carrying code},
+ journal = {ACM Trans. Program. Lang. Syst.},
+ volume = {23},
+ number = {5},
+ year = {2001},
+ issn = {0164-0925},
+ pages = {657--683},
+ doi = {http://doi.acm.org/10.1145/504709.504712},
+ publisher = {ACM Press},
+ address = {New York, NY, USA},
+ }
+
+
+@Article{johann:higher-order-poly,
+ author = {Patricia Johann},
+ title = {On Proving the Correctness of Program Transformations based
+on Free Theorems for Higher-Order Polymorphic Lambda
+Calculi},
+ journal = {Math. Struct. Comp. Sci.},
+ year = 2005,
+ number = 15,
+ pages = {201--229}
+}
+
+
+@inproceedings{johann04:seq,
+ author = {Johann, Patricia and Voigtl\"{a}nder, Janis},
+ title = {Free theorems in the presence of seq},
+ booktitle = {POPL '04: Proceedings of the 31st ACM SIGPLAN-SIGACT Symposium on Principles of Programming Languages},
+ year = {2004},
+ isbn = {1-58113-729-X},
+ pages = {99--110},
+ location = {Venice, Italy},
+ doi = {http://doi.acm.org/10.1145/964001.964010},
+ publisher = {ACM},
+ address = {New York, NY, USA},
+ }
+
+
+@InCollection{PittsAM:typor,
+ author = {A. M. Pitts},
+ title = {Typed Operational Reasoning},
+ booktitle = {Advanced Topics in Types and Programming Languages},
+ pages = {245--289},
+ publisher = {The MIT Press},
+ year = 2005,
+ editor = {B. C. Pierce},
+ chapter = 7,
+ isbn = {0-262-16228-8}
+}
+
+@techreport{simonet-pottier:gadt-inference,
+ AUTHOR = {Vincent Simonet and Fran\c{c}ois Pottier},
+ TITLE = {Constraint-Based Type Inference with Guarded Algebraic Data Types},
+ URL = {http://pauillac.inria.fr/~fpottier/publis/simonet-pottier-hmg.ps.gz},
+ institution = {INRIA},
+ MONTH = JUL,
+ YEAR = {2003} }
+
+@ARTICLE{simonet-pottier-hmg-toplas,
+ AUTHOR = {Vincent Simonet and Francois Pottier},
+ TITLE = {A Constraint-Based Approach to Guarded Algebraic Data
+ Types},
+ MONTH = JAN,
+ YEAR = {2007},
+ JOURNAL = {ACM Transactions on Programming Languages and
+ Systems},
+ VOLUME = {29},
+ NUMBER = {1},
+}
+
+
+
+
+@article{ Pitts00,
+author = "Andrew M. Pitts",
+title = "Parametric polymorphism and operational equivalence",
+journal = "Mathematical Structures in Computer Science",
+volume = 10,
+pages = "321--359",
+year = "2000"
+}
+
+@techreport{sulzmann+:eadts,
+ author = "Martin Sulzmann and Jeremy Wazny and Peter Stuckey",
+ title = "A framework for extended algebraic data types",
+ year = 2005,
+ institution = "National University of Singapore",
+ keywords = "GADT, type classes"
+}
+
+
+@inproceedings{spj+:gadt,
+ author = {Simon {Peyton Jones} and Dimitrios Vytiniotis and Stephanie Weirich and Geoffrey Washburn},
+ title = {Simple unification-based type inference for {GADTs}},
+ booktitle = {ICFP '06: Proceedings of the Eleventh ACM SIGPLAN International Conference on Functional Programming},
+ year = {2006},
+ isbn = {1-59593-309-3},
+ pages = {50--61},
+ location = {Portland, Oregon, USA},
+ publisher = {ACM Press},
+ address = {New York, NY, USA},
+ }
+
+@inproceedings{sulzman+:eadts,
+ author = {Martin Sulzmann and
+ Jeremy Wazny and
+ Peter J. Stuckey},
+ title = {A Framework for Extended Algebraic Data Types.},
+ booktitle = {FLOPS},
+ year = {2006},
+ pages = {47-64},
+ ee = {http://dx.doi.org/10.1007/11737414_5},
+ crossref = {DBLP:conf/flops/2006},
+ bibsource = {DBLP, http://dblp.uni-trier.de}
+}
+
+@proceedings{DBLP:conf/flops/2006,
+ editor = {Masami Hagiya and
+ Philip Wadler},
+ title = {Functional and Logic Programming, 8th International Symposium,
+ FLOPS 2006, Fuji-Susono, Japan, April 24-26, 2006, Proceedings},
+ booktitle = {FLOPS},
+ publisher = {Springer},
+ series = {Lecture Notes in Computer Science},
+ volume = {3945},
+ year = {2006},
+ isbn = {3-540-33438-6},
+ bibsource = {DBLP, http://dblp.uni-trier.de}
+}
+
+@article{crary+:polyrecrelns,
+ author = {Crary, Karl and Harper, Robert},
+ title = {Syntactic Logical Relations for Polymorphic and Recursive Types},
+ journal = {Electron. Notes Theor. Comput. Sci.},
+ volume = {172},
+ year = {2007},
+ issn = {1571-0661},
+ pages = {259--299},
+ doi = {http://dx.doi.org/10.1016/j.entcs.2007.02.010},
+ publisher = {Elsevier Science Publishers B. V.},
+ address = {Amsterdam, The Netherlands, The Netherlands},
+ }
+
+
+@INPROCEEDINGS{Was+Wei:2005,
+ AUTHOR = {Geoffrey Washburn and Stephanie Weirich},
+ TITLE = {Generalizing Parametricity Using Information Flow},
+ BOOKTITLE = {The Twentieth Annual IEEE Symposium on Logic in Computer Science (LICS 2005)},
+ YEAR = 2005,
+ MONTH = {June},
+ PAGES = {62--71},
+ ADDRESS = {Chicago, IL},
+ ORGANIZATION = {{IEEE} Computer Society},
+ PUBLISHER= {{IEEE} Computer Society Press},
+ PDF = {http://www.cis.upenn.edu/~geoffw/research/papers/lics2005.pdf},
+ PLCLUB = "yes",
+ ABSTRACT = {
+Run-time type analysis allows programmers to easily and concisely define
+operations based upon type structure, such as serialization, iterators,
+and structural equality. However, when types can be inspected at run
+time, nothing is secret. A module writer cannot use type abstraction
+to hide implementation details from clients: clients can determine the
+structure of these supposedly ``abstract'' data types. Furthermore,
+access control mechanisms do not help isolate the implementation of
+abstract datatypes from their clients. Buggy or malicious authorized
+modules may leak type information to unauthorized clients, so module
+implementors cannot reliably tell which parts of a program rely on their
+type definitions.
+
+Currently, module implementors rely on parametric polymorphism to provide
+integrity and confidentiality guarantees about their abstract datatypes.
+However, standard parametricity does not hold for languages with run-time
+type analysis; this paper shows how to generalize parametricity so
+that it does. The key is to augment the type system with annotations
+about information-flow. Implementors can then easily see which parts
+of a program depend on the chosen implementation by tracking the flow
+of dynamic type information.
+ }
+}
+
+@incollection{cardelli91extension,
+ author = "Luca Cardelli and John C. Mitchell and Simone Martini and Andre Scedrov",
+ title = "An Extension of System {F} with Subtyping",
+ booktitle = "Proc.\ of 1st Int.\ Symp.\ on Theor.\ Aspects of Computer Software, {TACS}'91, Sendai, Japan, 24--27 Sept 1991",
+ volume = "526",
+ publisher = "Springer-Verlag",
+ address = "Berlin",
+ editor = "Takayasu Ito and Albert R. Meyer",
+ pages = "750--770",
+ year = "1991",
+ url = "citeseer.ist.psu.edu/cardelli91extension.html" }
+
+
+
+@inproceedings{donnelly-xi:normalization,
+ author = {Kevin Donnelly and Hongwei Xi},
+ title = "A Formalization of Strong normalization for Simply Typed Lambda-Calculus and {System F}",
+ booktitle = {International Workshop on Logical Frameworks and Meta-Languages: Theory and Practice (LFMTP'06), Seattle, WA},
+ year = {2006},
+ pages = "98--113",
+ month = {Aug},
+}
+
+
+@techreport{sarnat-schuermann:lr,
+ author = "Jeffrey Sarnat and Carsten Schurmann",
+ title = "On the representation of logical relations in {Twelf}",
+ institution = "Yale University",
+ year = "2006",
+ number = "YaleU/DCS/TR-1362"}
+
+
+
+@article{harper-mitchell:joperator,
+ author = {Robert Harper and John C. Mitchell},
+ title = {Parametricity and variants of {Girard's} {J} operator},
+ journal = {Inf. Process. Lett.},
+ volume = {70},
+ number = {1},
+ year = {1999},
+ issn = {0020-0190},
+ pages = {1--5},
+ doi = {http://dx.doi.org/10.1016/S0020-0190(99)00036-8},
+ publisher = {Elsevier North-Holland, Inc.},
+ address = {Amsterdam, The Netherlands, The Netherlands},
+ }
+
+
+@PhDThesis{KucanThesis,
+author = "Jacov Ku\v{c}an ",
+title = "Metatheorems about Convertibility in Typed Lambda Calculi: Applications to CPS Transform and Free Theorems",
+school = "Massachusetts Institute of Technology",
+month = "February",
+year = "1997"
+}
+
+
+
+@TechReport{takeuti:lambda-cube,
+ year = {2001},
+ month = jun,
+ author = {Izumi Takeuti},
+ title = {The Theory of Parametricity in Lambda Cube (Towards new interaction between category theory and proof theory)},
+ uri = {\url{http://hdl.handle.net/2433/41237}},
+ institution = {Kyoto University Research Information Repository}
+}
+
+
+@article{vytiniotis:rtheorems,
+ author = {Dimitrios Vytiniotis and Stephanie Weirich},
+ title = {Free Theorems and Runtime Type Representations},
+ journal = {Electron. Notes Theor. Comput. Sci.},
+ volume = {173},
+ year = {2007},
+ issn = {1571-0661},
+ pages = {357--373},
+ doi = {http://dx.doi.org/10.1016/j.entcs.2007.02.043},
+ publisher = {Elsevier Science Publishers B. V.},
+ address = {Amsterdam, The Netherlands, The Netherlands},
+}
+
+@inproceedings{achten+:compositional-model-views,
+ author = {Peter Achten and
+ Marko C. J. D. van Eekelen and
+ Marinus J. Plasmeijer},
+ title = {Compositional Model-Views with Generic Graphical User Interfaces.},
+ booktitle = {Practical Aspects of Declarative Languages, 6th International
+ Symposium, PADL 2004, Dallas, TX, USA, June 18-19, 2004, Proceedings},
+ pages = {39-55},
+ year = {2004},
+ ee = {http://springerlink.metapress.com/openurl.asp?genre=article{\&}issn=0302-9743{\&}volume=3057{\&}spage=39},
+ bibsource = {DBLP, http://dblp.uni-trier.de}
+}
+
+@inproceedings{cheney:nameplate,
+ author = {James Cheney},
+ title = {Scrap your nameplate: (functional pearl)},
+ booktitle = {ICFP '05: Proceedings of the 10th ACM SIGPLAN International Conference on Functional Programming},
+ year = {2005},
+ isbn = {1-59593-064-7},
+ pages = {180--191},
+ location = {Tallinn, Estonia},
+ doi = {http://doi.acm.org/10.1145/1086365.1086389},
+ publisher = {ACM Press},
+ address = {New York, NY, USA},
+ }
+
+@article{pfenning:logical-frameworks,
+ author = {Frank Pfenning},
+ title = {Logical frameworks},
+ journal = {Handbook of automated reasoning},
+ year = {2001},
+ isbn = {0-444-50812-0},
+ pages = {1063--1147},
+ publisher = {Elsevier Science Publishers B. V.},
+ address = {Amsterdam, The Netherlands, The Netherlands},
+ }
+
+
+@inproceedings{baars+:tdt,
+ author = {Arthur I. Baars and S. Doaitse Swierstra},
+ title = {Typing dynamic typing},
+ booktitle = {ICFP '02: Proceedings of the 7th ACM SIGPLAN International Conference on Functional Programming},
+ year = {2002},
+ isbn = {1-58113-487-8},
+ pages = {157--166},
+ location = {Pittsburgh, PA, USA},
+ doi = {http://doi.acm.org/10.1145/581478.581494},
+ publisher = {ACM Press},
+ address = {New York, NY, USA},
+ }
+
+
+@inproceedings{cheney-hinze:lightweight-generics,
+ author = {James Cheney and Ralf Hinze},
+ title = {A lightweight implementation of generics and dynamics},
+ booktitle = {Haskell '02: Proceedings of the 2002 ACM SIGPLAN Workshop on Haskell},
+ year = {2002},
+ isbn = {1-58113-605-6},
+ pages = {90--104},
+ location = {Pittsburgh, Pennsylvania},
+ doi = {http://doi.acm.org/10.1145/581690.581698},
+ publisher = {ACM Press},
+ address = {New York, NY, USA},
+ }
+
+
+@inproceedings{lammel:syb-xpath,
+ author = {Ralf L\"{a}mmel},
+ title = {Scrap your boilerplate with {XPath}-like combinators},
+ booktitle = {POPL '07: Proceedings of the 34th annual ACM SIGPLAN-SIGACT symposium on Principles of Programming Languages},
+ year = {2007},
+ isbn = {1-59593-575-4},
+ pages = {137--142},
+ location = {Nice, France},
+ doi = {http://doi.acm.org/10.1145/1190216.1190240},
+ publisher = {ACM Press},
+ address = {New York, NY, USA},
+ }
+
+
+@article{weirich:runtime,
+ author = {Stephanie Weirich},
+ title = {Type-safe run-time polytypic programming},
+ journal = {Journal of Functional Programming},
+ volume = {16},
+ number = {6},
+ year = {2006},
+ issn = {0956-7968},
+ pages = {681--710},
+ doi = {http://dx.doi.org/10.1017/S0956796806005879},
+ publisher = {Cambridge University Press},
+ address = {New York, NY, USA},
+ }
+
+@inproceedings{syb3,
+ author = {Ralf L\"{a}mmel and Simon {Peyton Jones}},
+ title = "{Scrap your boilerplate with class: extensible generic functions}",
+ booktitle = "{Proceedings of the ACM SIGPLAN International Conference
+ on Functional Programming (ICFP 2005)}",
+ year = {2005},
+ pages = {204--215},
+ location = {Tallinn, Estonia},
+ publisher = {ACM Press},
+ month = sep,
+}
+
+@inproceedings{generic-views,
+ author = {Stefan Holdermans and Johan Jeuring and Andres L\"{o}h and Alexey Rodriguez},
+ title = {Generic Views on Data Types},
+ booktitle = {Mathematics of Program Construction,
+ 8th International Conference, MPC 2006, Kuressaare, Estonia, July 3-5, 2006, Proceedings},
+ publisher = {Springer},
+ series = {Lecture Notes in Computer Science},
+ volume = 4014,
+ year = 2006,
+ isbn = {978-3-540-35631-8},
+}
+
+
+@article{harper-pfening:canforms,
+ author = {Robert Harper and Frank Pfenning},
+ title = {On equivalence and canonical forms in the {LF} type theory},
+ journal = {ACM Trans. Comput. Logic},
+ volume = {6},
+ number = {1},
+ year = {2005},
+ issn = {1529-3785},
+ pages = {61--101},
+ doi = {http://doi.acm.org/10.1145/1042038.1042041},
+ publisher = {ACM Press},
+ address = {New York, NY, USA},
+ }
+
+
+@inproceedings{Pau93a,
+ Author = {Christine {Paulin-Mohring}},
+ Booktitle = {International Conference on Typed Lambda Calculi and Applications, TLCA '93},
+ Date-Modified = {2007-04-25 22:40:20 -0400},
+ Pages = {328--345},
+ Publisher = {Springer},
+ Series = {Lecture Notes in Computer Science},
+ Title = {Inductive Definitions in the System {Coq}: Rules and Properties},
+ Volume = {664},
+ Year = {1993}}
+
+@MANUAL{ghc,
+ author = {The GHC team},
+ title = {The {Glasgow Haskell} compiler},
+ url = {http://www.haskell.org/ghc/}
+}
+
+@MANUAL{coq,
+ author = {{The Coq Team}},
+ title = {Coq},
+ url = {http://coq.inria.fr}
+}
+
+@book{ CroleBook,
+author = "Roy Crole",
+title = "Categories for Types",
+publisher = "Cambridge University Press",
+year = "1994"
+}
+
+
+@inproceedings{dreyer:non-parametric,
+ author = {Neis, Georg and Dreyer, Derek and Rossberg, Andreas},
+ title = {Non-parametric parametricity},
+ booktitle = {ICFP '09: Proceedings of the 14th ACM SIGPLAN International Conference on Functional Programming},
+ year = {2009},
+ isbn = {978-1-60558-332-7},
+ pages = {135--148},
+ location = {Edinburgh, Scotland},
+ publisher = {ACM},
+ address = {New York, NY, USA},
+ }
+
+# doi = {http://doi.acm.org/10.1145/1596550.1596572},
+
+@inproceedings{voigtlander:type-constructor,
+ author = {Voigtl\"{a}nder, Janis},
+ title = {Free theorems involving type constructor classes: functional pearl},
+ booktitle = {ICFP '09: Proceedings of the 14th ACM SIGPLAN International Conference on Functional Programming},
+ year = {2009},
+ isbn = {978-1-60558-332-7},
+ pages = {173--184},
+ location = {Edinburgh, Scotland},
+ doi = {http://doi.acm.org/10.1145/1596550.1596577},
+ publisher = {ACM},
+ address = {New York, NY, USA},
+ }
+
+
+@inproceedings{andersson+:fastandloose,
+ abstract = {Functional programmers often reason about programs as if they were written in a total language, expecting the results to carry over to non-total (partial) languages. We justify such reasoning.Two languages are defined, one total and one partial, with identical syntax. The semantics of the partial language includes partial and infinite values, and all types are lifted, including the function spaces. A partial equivalence relation (PER) is then defined, the domain of which is the total subset of the partial language. For types not containing function spaces the PER relates equal values, and functions are related if they map related values to related values.It is proved that if two closed terms have the same semantics in the total language, then they have related semantics in the partial language. It is also shown that the PER gives rise to a bicartesian closed category which can be used to reason about values in the domain of the relation.},
+ address = {New York, NY, USA},
+ author = {Danielsson, Nils A. and Hughes, John and Jansson, Patrik and Gibbons, Jeremy},
+ booktitle = {POPL '06: Conference record of the 33rd ACM SIGPLAN-SIGACT symposium on Principles of programming languages},
+ citeulike-article-id = {558255},
+ citeulike-linkout-0 = {http://portal.acm.org/citation.cfm?id=1111037.1111056},
+ citeulike-linkout-1 = {http://dx.doi.org/10.1145/1111037.1111056},
+ comment = {* Concert Reading Group: 02/13/2006},
+ doi = {10.1145/1111037.1111056},
+ isbn = {1-59593-027-2},
+ keywords = {rg-2006},
+ location = {Charleston, South Carolina, USA},
+ month = {January},
+ number = {1},
+ pages = {206--217},
+ posted-at = {2009-08-17 19:18:44},
+ priority = {2},
+ publisher = {ACM},
+ title = {Fast and loose reasoning is morally correct},
+ url = {http://dx.doi.org/10.1145/1111037.1111056},
+ volume = {41},
+ year = {2006}
+}
+
+# isbn = {978-1-60558-379-2},
+# doi = {http://doi.acm.org/10.1145/1480881.1480926},
+@inproceedings{mongagu-remy:modules,
+ author = {Montagu, Beno\^{\i}t and R\'{e}my, Didier},
+ title = {Modeling abstract types in modules with open existential types},
+ booktitle = {POPL '09: Proceedings of the 36th annual ACM SIGPLAN-SIGACT Symposium on Principles of Programming Languages},
+ year = {2009},
+ pages = {354--365},
+ location = {Savannah, GA, USA},
+ publisher = {ACM},
+ address = {New York, NY, USA},
+ }
+
+@phdthesis{dreyer:thesis,
+ author = {Dreyer, Derek},
+ note = {Co-Chair-Harper, Robert and Co-Chair-Crary, Karl},
+ title = {Understanding and evolving the {ML} module system},
+ year = {2005},
+ isbn = {0-542-01550-1},
+ order_no = {AAI3166274},
+ publisher = {Carnegie Mellon University},
+ address = {Pittsburgh, PA, USA},
+ }
+
+
+
+@inproceedings{neis+:non-parametric,
+ author = {Neis, Georg and Dreyer, Derek and Rossberg, Andreas},
+ title = {Non-parametric parametricity},
+ booktitle = {ICFP '09: Proceedings of the 14th ACM SIGPLAN International Conference on Functional Programming},
+ year = {2009},
+ isbn = {978-1-60558-332-7},
+ pages = {135--148},
+ location = {Edinburgh, Scotland},
+ publisher = {ACM},
+ address = {New York, NY, USA},
+ }
+
+# isbn = {1-59593-064-7},
+# doi = {http://doi.acm.org/10.1145/1086365.1086372},
+@inproceedings{dreyer:rec-param,
+ author = {Dreyer, Derek},
+ title = {Recursive type generativity},
+ booktitle = {ICFP '05: Proceedings of the Tenth ACM SIGPLAN International Conference on Functional Programming},
+ year = {2005},
+ pages = {41--53},
+ location = {Tallinn, Estonia},
+ publisher = {ACM},
+ address = {New York, NY, USA},
+ }
+
+# doi = {http://doi.acm.org/10.1145/888251.888274},
+@inproceedings{rossberg:generativity,
+ author = {Rossberg, Andreas},
+ title = {Generativity and dynamic opacity for abstract types},
+ booktitle = {PPDP '03: Proceedings of the 5th ACM SIGPLAN International Conference on Principles and Practice of Declaritive Programming},
+ year = {2003},
+ isbn = {1-58113-705-2},
+ pages = {241--252},
+ location = {Uppsala, Sweden},
+ publisher = {ACM},
+ address = {New York, NY, USA},
+ }
+
+
+@article{benje+:universes,
+ author = {Benke, Marcin and Dybjer, Peter and Jansson, Patrik},
+ title = {Universes for generic programs and proofs in dependent type theory},
+ journal = {Nordic J. of Computing},
+ volume = {10},
+ number = {4},
+ year = {2003},
+ issn = {1236-6064},
+ pages = {265--289},
+ publisher = {Publishing Association Nordic Journal of Computing},
+ address = {, Finland},
+ }
+
+# doi = {http://doi.acm.org/10.1145/1190315.1190324},
+# isbn = {1-59593-393-X},
+@inproceedings{sulzmann+:fc-paper,
+ author = {Sulzmann, Martin and Chakravarty, Manuel M. T. and {Peyton Jones}, Simon and Donnelly, Kevin},
+ title = {System {F} with type equality coercions},
+ booktitle = {TLDI '07: Proceedings of the 2007 ACM SIGPLAN International Workshop on Types in Languages Design and Implementation},
+ year = {2007},
+ pages = {53--66},
+ location = {Nice, Nice, France},
+ publisher = {ACM},
+ address = {New York, NY, USA},
+ }
+
+
+@article{haskell98,
+ author = {Simon {Peyton Jones} and others},
+ title = {The {Haskell} 98 Language and Libraries: The Revised Report},
+ journal = {Journal of Functional Programming},
+ volume = 13,
+ number = 1,
+ pages = {0--255},
+ month = {Jan},
+ year = 2003,
+ note = {\url{http://www.haskell.org/definition/}},
+}
+
+# doi = {http://doi.acm.org/10.1145/1047659.1040306},
+@article{chak+:types,
+ author = {Chakravarty, Manuel M. T. and Keller, Gabriele and {Peyton Jones}, Simon and Marlow, Simon},
+ title = {Associated types with class},
+ journal = {SIGPLAN Not.},
+ volume = {40},
+ number = {1},
+ year = {2005},
+ issn = {0362-1340},
+ pages = {1--13},
+ publisher = {ACM},
+ address = {New York, NY, USA},
+ }
+
+# doi = {http://doi.acm.org/10.1145/1086365.1086397},
+# isbn = {1-59593-064-7},
+@inproceedings{chak+:synonyms,
+ author = {Chakravarty, Manuel M. T. and Keller, Gabriele and {Peyton Jones}, Simon},
+ title = {Associated type synonyms},
+ booktitle = {ICFP '05: Proceedings of the Tenth ACM SIGPLAN International Conference on Functional Programming},
+ year = {2005},
+ pages = {241--253},
+ location = {Tallinn, Estonia},
+ publisher = {ACM},
+ address = {New York, NY, USA},
+ }
+
+
+@inproceedings{Kiselyov09funwith,
+ author = {Oleg Kiselyov and Simon {Peyton Jones} and {Chung-chieh} Shan},
+ title = {Fun with type functions},
+ booktitle = "Reflections on the work of CAR Hoare",
+ editor = "Cliff Jones and Bill Roscoe",
+ publisher = "Springer",
+ year = {2010}
+}
+
+@inproceedings{russo:existentials,
+ author = {Russo, Claudio V.},
+ title = {Non-dependent Types for {Standard ML} Modules},
+ booktitle = {PPDP '99: Proceedings of the International Conference PPDP'99 on Principles and Practice of Declarative Programming},
+ year = {1999},
+ isbn = {3-540-66540-4},
+ pages = {80--97},
+ publisher = {Springer-Verlag},
+ address = {London, UK},
+ }
+
+
+@book{sml-book,
+ author = {Milner, Robin and Tofte, Mads and Macqueen, David},
+ title = {The Definition of Standard ML},
+ year = {1997},
+ isbn = {0262631814},
+ publisher = {MIT Press},
+ address = {Cambridge, MA, USA},
+ }
+
+
+
+@article{dybjer:ind-rec,
+ author = {Peter Dybjer},
+ title = {A General Formulation of Simultaneous Inductive-Recursive Definitions in Type Theory},
+ journal = { Journal of Symbolic Logic},
+ year = 2000,
+ volume = 65,
+ number = 2,
+ pages = {525--549}
+}
+
+# isbn = {978-1-59593-919-7},
+# doi = {http://doi.acm.org/10.1145/1411204.1411215},
+@inproceedings{shrijvers:open-tyfuns,
+ author = {Schrijvers, Tom and {Peyton Jones}, Simon and Chakravarty, Manuel and Sulzmann, Martin},
+ title = {Type checking with open type functions},
+ booktitle = {ICFP '08: Proceeding of the 13th ACM SIGPLAN international conference on Functional programming},
+ year = {2008},
+ pages = {51--62},
+ location = {Victoria, BC, Canada},
+ publisher = {ACM},
+ address = {New York, NY, USA},
+ }
+
+# doi = {http://dx.doi.org/10.1007/978-3-642-03359-9_6},
+# isbn = {978-3-642-03358-2},
+@inproceedings{agda,
+ author = {Bove, Ana and Dybjer, Peter and Norell, Ulf},
+ title = {A Brief Overview of {Agda} --- A Functional Language with Dependent Types},
+ booktitle = {TPHOLs '09: Proceedings of the 22nd International Conference on Theorem Proving in Higher Order Logics},
+ year = {2009},
+ pages = {73--78},
+ location = {Munich, Germany},
+ publisher = {Springer-Verlag},
+ address = {Berlin, Heidelberg},
+ }
+
+@phdthesis{norell:thesis,
+ author = {Ulf Norell},
+ title = {Towards a practical programming language based on dependent type
+ theory},
+ school = {Department of Computer Science and Engineering, Chalmers University of Technology},
+ year = 2007,
+ month = {September},
+ address = {SE-412 96 G\"{o}teborg, Sweden}
+}
+
+
+
+
+@TechReport{lh05dmlproofs-tr,
+ author = {Daniel R. Licata and Robert Harper},
+ title = {A Formulation of Dependent {ML} with Explicit Equality Proofs},
+ institution = {Carnegie Mellon University Department of Computer Science},
+ year = {2005},
+ number = {CMU-CS-05-178},
+}
+
+# doi = {http://doi.acm.org/10.1145/1053468.1053469},
+# issn = {0164-0925},
+@article{shao+:certbin,
+ author = {Shao, Zhong and Trifonov, Valery and Saha, Bratin and Papaspyrou, Nikolaos},
+ title = {A type system for certified binaries},
+ journal = {ACM Trans. Program. Lang. Syst.},
+ volume = {27},
+ number = {1},
+ year = {2005},
+ pages = {1--45},
+ publisher = {ACM},
+ address = {New York, NY, USA},
+ }
+
+
+@BOOK{ATTAPL,
+ EDITOR = {Benjamin C. Pierce},
+ TITLE = {Advanced Topics in Types and Programming Languages},
+ PUBLISHER = {MIT Press},
+ YEAR = 2005,
+ PLCLUB = {Yes},
+ BCP = {Yes},
+ KEYS = {books},
+ HOMEPAGE = {http://www.cis.upenn.edu/~bcpierce/attapl}
+}
+
+@inproceedings{weirich+:fc2,
+ author = {Weirich, Stephanie and Vytiniotis, Dimitrios and Peyton Jones, Simon and Zdancewic, Steve},
+ title = {Generative type abstraction and type-level computation},
+ booktitle = {Proceedings of the 38th annual ACM SIGPLAN-SIGACT Symposium on {Principles} of {Programming} {Languages}},
+ series = {POPL '11},
+ year = {2011},
+ isbn = {978-1-4503-0490-0},
+ location = {Austin, Texas, USA},
+ pages = {227--240},
+ numpages = {14},
+ publisher = {ACM},
+ address = {New York, NY, USA},
+ keywords = {haskell, newtype deriving, type functions},
+}
+
+
+
+
+@inproceedings{HarperM95,
+ author = {Robert Harper and Greg Morrisett},
+ title = {Compiling polymorphism using intensional type analysis},
+ booktitle = {POPL '95: Proceedings of the 22nd ACM SIGPLAN-SIGACT symposium on Principles of programming languages},
+ year = {1995},
+ isbn = {0-89791-692-1},
+ pages = {130--141},
+ location = {San Francisco, California, United States},
+ publisher = {ACM},
+ address = {New York, NY, USA},
+ ps = {http://www.eecs.harvard.edu/~greg/papers/ip-popl.ps}
+}
+
+
+
+@inproceedings{Altenkirch:ott,
+ author = {Altenkirch, Thorsten and McBride, Conor and Swierstra, Wouter},
+ title = {Observational equality, now!},
+ booktitle = {Proceedings of the 2007 workshop on Programming languages meets program verification},
+ series = {PLPV '07},
+ year = {2007},
+ isbn = {978-1-59593-677-6},
+ location = {Freiburg, Germany},
+ pages = {57--68},
+ numpages = {12},
+ url = {http://doi.acm.org/10.1145/1292597.1292608},
+ doi = {http://doi.acm.org/10.1145/1292597.1292608},
+ acmid = {1292608},
+ publisher = {ACM},
+ address = {New York, NY, USA},
+ keywords = {equality, type theory},
+}
+
+
+@article{ott1,
+author = {Thorsten Altenkirch and Conor McBride},
+title = {Towards Observational Type Theory},
+masid = {4008452}
+}
+
+@inproceedings{Miquel:icc,
+ author = {Miquel, Alexandre},
+ title = {The implicit calculus of constructions: extending pure type systems with an intersection type binder and subtyping},
+ booktitle = {Proceedings of the 5th international conference on Typed lambda calculi and applications},
+ series = {TLCA'01},
+ year = {2001},
+ isbn = {3-540-41960-8},
+ location = {Krak\&\#243;w, Poland},
+ pages = {344--359},
+ numpages = {16},
+ url = {http://portal.acm.org/citation.cfm?id=1754621.1754650},
+ acmid = {1754650},
+ publisher = {Springer-Verlag},
+ address = {Berlin, Heidelberg},
+}
+
+
+@inproceedings{barras:icc,
+author = {Bruno Barras and Bruno Bernardo},
+title = {The Implicit Calculus of Constructions as a Programming Language with Dependent Types},
+booktitle = {Foundations of Software Science and Computation Structure},
+year = {2008},
+pages = {365--379},
+doi = {10.1007/978-3-540-78499-9_26},
+masid = {4259647}
+}
+
+
+
+@InProceedings{swamy+:fstar,
+ author = {Nikhil Swamy and Juan Chen and Cedric Fournet and Pierre-Yves Strub and Karthikeyan Bharagavan and Jean Yang},
+ title = {Secure Distributed Programming with Value-dependent Types},
+ booktitle = {Proceedings of the Sixteenth {ACM SIGPLAN} International Conference on Functional Programming (ICFP '11)},
+ year = 2011,
+ month = {September},
+ note = {To appear.}
+}
+
+
+@inproceedings{tldi12,
+ author = {Yorgey, Brent A. and Weirich, Stephanie and Cretin, Julien and
+ Peyton Jones, Simon and Vytiniotis, Dimitrios and
+ Magalh\~aes, Jos\'e Pedro},
+ title = {Giving {Haskell} a Promotion},
+ booktitle = {Proceedings of the 8th ACM SIGPLAN workshop on Types in
+ language design and implementation},
+ series = {TLDI '12},
+ year = {2012},
+ location = {Philadelphia, PA, USA},
+ pages = {53--66},
+ doi = {10.1145/2103786.2103795},
+ publisher = {ACM},
+ address = {New York, NY, USA},
+}
+
+@inproceedings{flanagan-hybrid,
+ author = {Flanagan, Cormac},
+ title = {Hybrid type checking},
+ booktitle = {Conference record of the 33rd ACM SIGPLAN-SIGACT symposium on Principles of programming languages},
+ series = {POPL '06},
+ year = {2006},
+ isbn = {1-59593-027-2},
+ location = {Charleston, South Carolina, USA},
+ pages = {245--256},
+ numpages = {12},
+ url = {http://doi.acm.org/10.1145/1111037.1111059},
+ doi = {http://doi.acm.org/10.1145/1111037.1111059},
+ acmid = {1111059},
+ publisher = {ACM},
+ address = {New York, NY, USA},
+ keywords = {contracts, dynamic checking, static checking, type systems},
+}
+
+@inproceedings{wadler-blame-calculus,
+ author = {Wadler, Philip and Findler, Robert Bruce},
+ title = {Well-Typed Programs Can't Be Blamed},
+ booktitle = {Proceedings of the 18th European Symposium on Programming Languages and Systems: Held as Part of the Joint European Conferences on Theory and Practice of Software, ETAPS 2009},
+ series = {ESOP '09},
+ year = {2009},
+ isbn = {978-3-642-00589-3},
+ location = {York, UK},
+ pages = {1--16},
+ numpages = {16},
+ url = {http://dx.doi.org/10.1007/978-3-642-00590-9_1},
+ doi = {http://dx.doi.org/10.1007/978-3-642-00590-9_1},
+ acmid = {1532976},
+ publisher = {Springer-Verlag},
+ address = {Berlin, Heidelberg},
+}
+
+
+@inproceedings{blame-for-all,
+ author = {Ahmed, Amal and Findler, Robert Bruce and Matthews, Jacob and Wadler, Philip},
+ title = {Blame for all},
+ booktitle = {Proceedings for the 1st workshop on Script to Program Evolution},
+ series = {STOP '09},
+ year = {2009},
+ isbn = {978-1-60558-543-7},
+ location = {Genova, Italy},
+ pages = {1--13},
+ numpages = {13},
+ url = {http://doi.acm.org/10.1145/1570506.1570507},
+ doi = {http://doi.acm.org/10.1145/1570506.1570507},
+ acmid = {1570507},
+ publisher = {ACM},
+ address = {New York, NY, USA},
+}
+
+
+@InProceedings{siek08:_gradual_inference,
+ author = {Jeremy G. Siek and Manish Vachharajani},
+ title = {Gradual Typing with Unification-based Inference},
+ booktitle = {Dynamic Languages Symposium},
+ abstract = {Static and dynamic type systems have well-known strengths and
+weaknesses. Gradual typing provides the benefits of both in a
+single language by giving the programmer control over which portions
+of the program are statically checked based on the presence or absence
+of type annotations. This paper studies the combination of gradual
+typing and unification-based type inference with the goal of
+developing a system that helps programmers increase the amount of
+static checking in their program. The key question in combining
+gradual typing and type inference is how should the dynamic type of a
+gradual system interact with the type variables of a type inference
+system. This paper explores the design space and shows why three
+straightforward approaches fail to meet our design goals. This paper
+presents a new type system based on the idea that a solution for a
+type variable should be as informative as any type that constrains the
+variable. The paper also develops an efficient inference algorithm
+and proves it sound and complete with respect to the type system.
+},
+ year = 2008,
+ month = {July}
+}
+
+
+@InProceedings{siek06:_gradual,
+author = {Jeremy G. Siek and Walid Taha},
+title = {Gradual typing for functional languages},
+booktitle = {Scheme and Functional Programming Workshop},
+year = 2006,
+month = {September}
+}
+
+
+@article{type-error-slicing,
+ author = {Haack, Christian and Wells, J. B.},
+ title = {Type error slicing in implicitly typed higher-order languages},
+ journal = {Sci. Comput. Program.},
+ volume = {50},
+ issue = {1-3},
+ month = {March},
+ year = {2004},
+ issn = {0167-6423},
+ pages = {189--224},
+ numpages = {36},
+ url = {http://dl.acm.org/citation.cfm?id=989777.989786},
+ doi = {10.1016/j.scico.2004.01.004},
+ acmid = {989786},
+ publisher = {Elsevier North-Holland, Inc.},
+ address = {Amsterdam, The Netherlands, The Netherlands},
+ keywords = {intersection types, type error location, type inference},
+}
+
+
+@inproceedings{Tobin-Hochstadt:migration,
+ author = {Tobin-Hochstadt, Sam and Felleisen, Matthias},
+ title = {Interlanguage migration: from scripts to programs},
+ booktitle = {Companion to the 21st ACM SIGPLAN symposium on Object-oriented programming systems, languages, and applications},
+ series = {OOPSLA '06},
+ year = {2006},
+ isbn = {1-59593-491-X},
+ location = {Portland, Oregon, USA},
+ pages = {964--974},
+ numpages = {11},
+ url = {http://doi.acm.org/10.1145/1176617.1176755},
+ doi = {http://doi.acm.org/10.1145/1176617.1176755},
+ acmid = {1176755},
+ publisher = {ACM},
+ address = {New York, NY, USA},
+ keywords = {{\$\lambda\$}-calculus, contract, interlanguage migration, module systems},
+}
+
+@book{MacLaneS:catwm,
+ author = {Mac Lane, Saunders},
+ title = {Categories for the Working Mathematician},
+ publisher = {Springer-Verlag},
+ series = {Graduate Texts in Mathematics},
+ number = 5,
+ year = 1971,
+ isbn = 0387900357}
+
+@inproceedings{Licata:2012:CTT:2103656.2103697,
+ author = {Licata, Daniel R. and Harper, Robert},
+ title = {Canonicity for 2-dimensional type theory},
+ booktitle = {Proceedings of the 39th annual ACM SIGPLAN-SIGACT {Symposium} on {Principles} of {Programming} {Languages}},
+ series = {POPL '12},
+ year = {2012},
+ isbn = {978-1-4503-1083-3},
+ location = {Philadelphia, PA, USA},
+ pages = {337--348},
+ numpages = {12},
+ url = {http://doi.acm.org/10.1145/2103656.2103697},
+ doi = {10.1145/2103656.2103697},
+ acmid = {2103697},
+ publisher = {ACM},
+ address = {New York, NY, USA},
+ keywords = {category theory, dependent types, homotopy type theory, type theory},
+}
+
+@book{Baader:1998:TR:280474,
+ author = {Baader, Franz and Nipkow, Tobias},
+ title = {Term rewriting and all that},
+ year = {1998},
+ isbn = {0-521-45520-0},
+ publisher = {Cambridge University Press},
+ address = {New York, NY, USA},
+}
+
+
+@inproceedings{Dershowitz:1983:AR:1623516.1623594,
+ author = {Dershowitz, Nachum and Hsiang, Jien and Josephson, N. Alan and Plaisted, David A.},
+ title = {Associative-commutative rewriting},
+ booktitle = {Proceedings of the Eighth international joint conference on Artificial intelligence - Volume 2},
+ series = {IJCAI'83},
+ year = {1983},
+ location = {Karlsruhe, West Germany},
+ pages = {940--944},
+ numpages = {5},
+ url = {http://dl.acm.org/citation.cfm?id=1623516.1623594},
+ acmid = {1623594},
+ publisher = {Morgan Kaufmann Publishers Inc.},
+ address = {San Francisco, CA, USA},
+}
+
+@article{Bachmair:1985:TOA:6947.6948,
+ author = {Bachmair, Leo and Plaisted, David A.},
+ title = {Termination orderings for associative-commutative rewriting systems},
+ journal = {J. Symb. Comput.},
+ issue_date = {Dec. 1985},
+ volume = {1},
+ number = {4},
+ month = dec,
+ year = {1985},
+ issn = {0747-7171},
+ pages = {329--349},
+ numpages = {21},
+ url = {http://dx.doi.org/10.1016/S0747-7171(85)80019-5},
+ doi = {10.1016/S0747-7171(85)80019-5},
+ acmid = {6948},
+ publisher = {Academic Press, Inc.},
+ address = {Duluth, MN, USA},
+}
+
diff --git a/docs/opt-coercion/fc-normalization-rta.tex b/docs/opt-coercion/fc-normalization-rta.tex
new file mode 100755
index 0000000000..a1e7d4201d
--- /dev/null
+++ b/docs/opt-coercion/fc-normalization-rta.tex
@@ -0,0 +1,1627 @@
+\documentclass[a4paper,UKenglish]{lipics}
+
+\usepackage{enumerate}
+%% \usepackage{abbrev}
+\usepackage{xspace}
+\usepackage{denot}
+\usepackage{prooftree}
+\usepackage{afterpage}
+\usepackage{float}
+%% \usepackage{pstricks}
+\usepackage{url}
+
+\usepackage{amsthm}
+
+\usepackage{latexsym}
+%% %% less space consuming enumerates and itemizes
+\usepackage{mdwlist}
+\usepackage{stmaryrd}
+
+%% \usepackage{amsfonts}
+%% \usepackage{amssymb}
+%% % Local packages
+\usepackage{code}
+
+%% % \newcommand{\text}[1]{\mbox{#1}}
+
+%% \newcommand{\reach}[2]{\widehat{#1}(#2)}
+%% \newcommand{\ftv}[2]{ftv^{#1}(#2)}
+
+\usepackage{color}
+%% %% \newcommand{\color}[1]{}
+
+%% % \newcommand{\scf}{\sigma^\dagger}
+%% % \newcommand{\rcf}{\rho^\dagger}
+%% % \newcommand{\tcf}{\tau^\dagger}
+
+\newcommand{\simon}[1]{{\bf SPJ:}\begin{color}{blue} #1 \end{color}}
+\newcommand{\dv}[1]{{\bf DV:}\begin{color}{red} #1 \end{color}}
+\def\fiddle#1{\hspace*{-0.8ex}\raisebox{0.1ex}{$\scriptscriptstyle#1$}}
+
+\newcommand{\highlight}[1]{\colorbox{green}{\ensuremath{#1}}}
+
+
+\def\twiddleiv{\endprooftree\qquad\prooftree} % ~~~~
+\def\twiddlev{\endprooftree\\ \\ \prooftree} % ~~~~~...
+\def\rulename#1{\textsc{#1}}
+\def\minusv#1{\using\text{\rulename{#1}}\justifies} % \minusv...
+
+
+\newcommand{\OK}[2]{#1 \vdash^{\fiddle{\sf{E}}} #2}
+\newcommand{\wfe}{\vdash^{\fiddle{\sf{E}}}}
+\newcommand{\wfco}{\vdash^{\fiddle{\sf{co}}}}
+\newcommand{\wftm}{\vdash^{\fiddle{\sf{tm}}}}
+\newcommand{\wfty}{\vdash^{\fiddle{\sf{ty}}}}
+\newcommand{\unboxed}[1]{\mathop{unboxed}(#1)}
+
+\newcommand{\psim}{\mathrel{\sim_{\tiny \#}}}
+\newcommand{\static}{\textsf{$Constraint_{\#}$}}
+
+%% %% \newtheorem{theorem}{Theorem}[section]
+%% %% %% \newtheorem{proof}{Proof}[]
+%% %% \newtheorem{lemma}[theorem]{Lemma}
+%% %% \newtheorem{proposition}[theorem]{Proposition}
+%% %% \newtheorem{corollary}[theorem]{Corollary}
+
+%% %% bibliography guidelines
+%% \usepackage{natbib}
+%% \bibpunct();A{},
+%% \let\cite=\citep
+
+\def\rulename#1{\textsc{#1}}
+\def\ruleform#1{\fbox{$#1$}}
+
+
+%% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% % Floats
+
+%% %% \renewcommand{\textfraction}{0.1}
+%% %% \renewcommand{\topfraction}{0.95}
+%% %% \renewcommand{\dbltopfraction}{0.95}
+%% %% \renewcommand{\floatpagefraction}{0.8}
+%% %% \renewcommand{\dblfloatpagefraction}{0.8}
+
+%% %% \setlength{\floatsep}{16pt plus 4pt minus 4pt}
+%% %% \setlength{\textfloatsep}{16pt plus 4pt minus 4pt}
+
+%% % Figures should be boxed
+%% % *** Uncomment the next two lines to box the floats ***
+\floatstyle{boxed}
+\restylefloat{figure}
+
+%% %% % Keep footnotes on one page
+%% %% \interfootnotelinepenalty=10000
+
+%% %% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% %% % Indentation
+%% %% \setlength{\parskip}{0.35\baselineskip plus 0.2\baselineskip minus 0.1\baselineskip}
+%% %% \setlength{\parsep}{\parskip}
+%% %% \setlength{\topsep}{0cm}
+%% %% \setlength{\parindent}{0cm}
+
+%% \renewcommand{\phi}{\varphi}
+
+\newcommand{\E}{{\cal E}}
+\newcommand{\ol}[1]{\overline{#1}}
+\newcommand{\sym}[1]{\mathop{sym}\, #1}
+\newcommand{\bnd}{\mathop{bnd}}
+\newcommand{\cval}{\textsf{cv}}
+\newcommand{\nfval}{\textsf{nf}}
+\newcommand{\tval}{\textsf{tv}}
+\newcommand{\val}{\textsf{val}}
+\newcommand{\clift}[1]{\lfloor#1\rfloor}
+\newcommand{\lifting}[2]{[#1]{\uparrow}(#2)}
+\newcommand{\erase}[2]{\{#2\}_{#1}}
+\newcommand{\nth}[2]{\mathop{nth} #1\;#2}
+\newcommand{\inst}[2]{#1@#2}
+\newcommand{\refl}[1]{\langle#1\rangle} % Reflexivity
+
+\newcommand{\tcase}[2]{\mathbf{case}\;#1\;\mathbf{of}\;\ol{#2}}
+\newcommand{\tlet}[4]{\mathbf{let}\;#1{:}#2 = #3\;\mathbf{in}\;#4}
+\newcommand{\tcast}[2]{#1\;\triangleright\;#2}
+\newcommand{\rsa}[1]{\rightsquigarrow_{#1}}
+\newcommand{\as}{\ol{a}}
+\newcommand{\bs}{\ol{b}}
+\newcommand{\cs}{\ol{c}}
+\newcommand{\ds}{\ol{d}}
+\newcommand{\es}{\ol{e}}
+\newcommand{\fs}{\ol{f}}
+\newcommand{\gs}{\ol{g}}
+
+\newcommand{\alphas}{\ol{\alpha}}
+\newcommand{\betas}{\ol{\beta}}
+\newcommand{\gammas}{\ol{\gamma}}
+\newcommand{\deltas}{\ol{\delta}}
+\newcommand{\epsilons}{\ol{\epsilon}}
+\newcommand{\zetas}{\ol{\zeta}}
+\newcommand{\etas}{\ol{\eta}}
+
+\newcommand{\phis}{\ol{\phi}}
+
+\newcommand{\sigmas}{\ol{\sigma}}
+\newcommand{\taus}{\ol{\tau}}
+
+\newcommand{\xs}{\ol{x}}
+
+%% %% \theoremstyle{plain}
+%% %% \newtheorem{definition}{Definition}[section]
+
+
+\title{Evidence normalization in System FC}
+
+\author{Dimitrios Vytiniotis}
+\author{Simon Peyton Jones}
+\affil{Microsoft Research, Cambridge}
+
+ %% \{\{dimitris,simonpj@microsoft.com}}
+
+\authorrunning{D. Vytiniotis and S. Peyton Jones}
+% \Copyright{TO BE PROVIDED}
+
+\subjclass{F.4.2 Grammars and Other Rewriting Systems}
+
+
+\begin{document}
+
+
+
+%% \preprintfooter{\textbf{--- DRAFT submitted to ICFP 2011 ---}}
+
+%% \conferenceinfo{ICFP'08,} {September 22--24, 2008, Victoria, BC, Canada.}
+%% \CopyrightYear{2008}
+%% \copyrightdata{978-1-59593-919-7/08/09}
+
+
+
+%% \category{D.3.3}{Language Constructs and Features}{Abstract data types}
+%% \category{F.3.3}{Studies of Program Constructs}{Type structure}
+
+%% \terms{Design, Languages}
+
+%% \keywords{Type equalities, Deferred type errors, System FC}
+
+
+%% Theory of computation → Rewrite systems
+%% Software and its engineering → Data types and structures
+
+
+\maketitle
+\makeatactive
+
+\begin{abstract}
+System FC is an explicitly typed language that serves as the target language for Haskell
+source programs. System FC is based on System F with the addition of erasable but explicit type equality
+proof witnesses. Equality proof witnesses are generated from type inference performed on source Haskell
+programs. Such witnesses may be very large objects, which causes performance degradation in later stages of
+compilation, and makes it hard to debug the results of type inference and subsequent program transformations.
+In this paper we present an equality proof simplification algorithm, implemented in GHC, which greatly reduces
+the size of the target System FC programs.
+\end{abstract}
+%% \category{D.3.3}{Language Constructs and Features}{Abstract data types}
+%% \category{F.3.3}{Studies of Program Constructs}{Type structure}
+%% \terms{Design,Languages}
+%% \keywords{Haskell, Type functions, System FC}
+
+\section{Introduction}\label{s:intro}
+
+A statically-typed intermediate language brings a lot of benefits to a compiler: it is free
+from the design trade-offs that come with source language features; types
+can inform optimisations; and type checking
+programs in the intermediate language provides a powerful consistency check on
+each stage of the compiler.
+
+%% Type checking the intermediate programs
+%% that result from further program transformation and optimization passes
+%% checks
+%% that these stages
+%% the results of further program transformation and optimization passes.
+%% A typed intermediate language provides a firm place for a compiler to stand,
+%% free from the design trade-offs of a complex source language. Moreover,
+%% type-checking the intermediate program provides a
+%% powerful consistency check on the earlier stages of elaboration,
+%% desugaring, and optimization.
+
+The Glasgow Haskell Compiler (GHC) has just such an intermediate language,
+which has evolved from System F to System FC
+\cite{sulzmann+:fc-paper,weirich+:fc2} to accommodate the
+source-language features of
+\emph{GADTs}~\cite{cheney-hinze:phantom-types,sheard:omega,spj+:gadt}
+and \emph{type families}~\cite{Kiselyov09funwith,chak+:synonyms}.
+The key feature that allows System FC to accomodate GADTs and type
+families is its use of explicit \emph{coercions} that witness the
+equality of two syntactically-different types. Coercions are erased
+before runtime but, like types, serve as a static consistency
+proof that the program will not ``go wrong''.
+
+In GHC, coercions are produced by a fairly complex
+type inference (and proof inference) algorithm
+that elaborates source Haskell programs into FC programs \cite{pjv:modular}.
+Furthermore, coercions undergo major transformations during subsequent program
+optimization passes. As a consequence, they can become very large,
+making the compiler bog down. This paper describes how we fixed the problem:
+\begin{itemize*}
+\item Our main contribution is a novel coercion simplification algorithm, expressed
+as a rewrite system, that allows the compiler to replace a coercion
+with an equivalent but much smaller one
+(Section~\ref{s:normalization}).
+ \item Coercion simplification is important in practice.
+ We encountered programs whose un-simplified
+ coercion terms grow to many times the size of the actual executable terms,
+ to the point where GHC choked and ran out of heap. When the simplifier
+ is enabled, coercions simplify to a small fraction of their
+ size (Section~\ref{ssect:ghc}).
+ \item To get these benefits, coercion simplification must take user-declared equality axioms
+ into account, but the simplifier {\em must never loop} while optimizing a coercion -- no matter
+ which axioms are declared by users. Proof normalization theorems are notoriously hard,
+ but we present such a theorem for our coercion simplification. (Section~\ref{ssect:termination})
+ \end{itemize*}
+Equality proof normalization was first studied in the context of monoidal categories and we give
+pointers to early work in Section~\ref{s:related} -- this work in addition addresses the simplification
+of open coercions containing variables and arbitrary user-declared axioms.
+
+%% Coercion simplification has been studied in the context
+%% Despite its great practical importance,
+%% coercion simplification did not appear to be well-studied in the coercion
+%% literature, but we give some connections to related work in Section~\ref{s:related}.
+
+% --------------------------------------------------------------------------
+\section{An overview of System FC} \label{s:intro-coercions}
+
+\begin{figure}\small
+\[\begin{array}{l}
+\begin{array}{lrll}
+%% \multicolumn{3}{l}{\text{Terms}} \\
+c & \in & \text{Coercion variables} \\
+x & \in & \text{Term variables} \\
+e,u & ::= & x \mid l \mid \lambda x{:}\sigma @.@ e \mid e\;u \\
+ & \mid & \Lambda a{:}\eta @.@ e \mid e\;\phi & \text{Type polymorphism} \\
+ & \mid & \lambda c{:}\tau @.@ e \mid e\;\gamma & \text{Coercion abstraction/application} \\
+ & \mid & K \mid \tcase{e}{p \to u} & \text{Constructors and case expressions} \\
+ & \mid & \tlet{x}{\tau}{e}{u} & \text{Let binding} \\
+ & \mid & \tcast{e}{\gamma} & \text{Cast} \\
+%% & \mid & \text{\sout{\ensuremath{\lambda c{:}\tau_1 \psim \tau_2 @.@ e}}} & \text{\sout{Coercion abstraction}} \\[2mm]
+p & ::= & K\;\ol{c{:}\tau}\;\ol{x{:}\tau} & \text{Patterns} \\[3mm]
+\end{array}
+\end{array}\]
+\caption{Syntax of System FC (Terms)}\label{fig:syntax1}
+\end{figure}
+
+
+We begin by reviewing the role of an intermediate
+language. GHC desugars a rich, complex source language (Haskell) into
+a small, simple intermediate language. The source language, Haskell, is \emph{implicitly typed},
+and a type inference engine figures out the type of every binder and sub-expression.
+To make type inference feasible, Haskell embodies many somewhat ad-hoc design
+compromises; for example, $\lambda$-bound variables are assigned monomorphic types.
+By contrast, the intermediate language is simple, uniform, and \emph{explicitly typed}.
+It can be typechecked by a simple, linear time algorithm. The type inference
+engine \emph{elaborates} the implicitly-typed Haskell program into an
+explicitly-typed FC program.
+
+To make this concrete, Figure~\ref{fig:syntax1} gives the syntax of
+System FC, the calculus implemented by GHC's intermediate language.
+The term language is mostly conventional, consisting of System F,
+together with let bindings, data constructors and case expressions.
+The syntax of a term encodes its typing derivation: every binder
+carries its type, and type abstractions $\Lambda a{:}\eta@.@e$ and
+type applications $e\,\phi$ are explicit.
+
+\begin{figure}\small
+\[\begin{array}{l|l}
+\begin{array}{lrll}
+\multicolumn{3}{l}{\text{Types}} \\
+\phi,\sigma,\tau,\upsilon & ::= & a & \text{Variables} \\
+ & \mid & H & \text{Constants} \\
+ & \mid & F & \text{Type functions} \\
+ & \mid & \phi_1\;\phi_2 & \text{Application} \\
+%% & \mid & \phi\;\kappa & \text{Kind application} \\
+ & \mid & \forall a{:}\eta @.@ \phi & \text{Polymorphic types} \\
+%% & \mid & \forall\kvar @.@ \tau & \text{Kind-polymorphic types}\\[2mm]
+\multicolumn{3}{l}{\text{Type constants}} \\
+H & ::= & T & \text{Datatypes} \\
+ & \mid & (\to) & \text{Arrow} \\
+ & \mid & (\psim) & \text{Coercion} \\
+%% & \mid & (\psim) & \text{Primitive equality type} \\
+\multicolumn{3}{l}{\text{Kinds}} \\
+ \kappa,\eta & ::= & \star \mid \kappa \to \kappa \\
+%% & \mid & \forall\kvar @.@ \kappa & \text{Polymorphic kinds} \\
+ & \mid & \static & \text{Coercion kind} \\[2mm]
+\end{array} &
+\begin{array}{lrll}
+\multicolumn{3}{l}{\text{Coercion values}} \\
+\gamma,\delta & ::= & c & \text{Variables} \\
+%% & \mid & \text{\sout{\ensuremath{c}}} & \text{\sout{Coercion variables}} \\
+%% & \mid & C\;\ol{\kappa}\;\gammas & \text{Axiom application} \\
+%% & \mid & \gamma_1\;\kappa & \text{Kind application} \\
+ & \mid & \refl{\phi} & \text{Reflexivity} \\
+ & \mid & \gamma_1;\gamma_2 & \text{Transitivity} \\
+ & \mid & \sym{\gamma} & \text{Symmetry} \\
+ & \mid & \nth{k}{\gamma} & \text{Injectivity} \\
+ & \mid & \gamma_1\;\gamma_2 & \text{Application} \\
+ & \mid & C\;\gammas & \text{Type family axiom} \\
+ & \mid & \forall a{:}\eta @.@ \gamma & \text{Polym. coercion} \\
+ & \mid & \inst{\gamma}{\phi} & \text{Instantiation} \\ \\ \\ \\
+%% & \mid & \forall\kvar @.@ \gamma & \text{Kind polymorphic coercion} \\
+%% & \mid & \inst{\gamma}{\kappa} & \text{Kind instantiation}
+\end{array}
+\end{array}\]
+\caption{Syntax of System FC (types and coercions)}\label{fig:syntax2}
+\end{figure}
+
+The types and kinds of the language are given in Figure~\ref{fig:syntax2}. Types include variables ($a$)
+and constants $H$ (such as $@Int@$ and @Maybe@), type applications (such as $@Maybe@\;@Int@$),
+and polymorphic types ($\forall a{:}\eta @.@ \phi$). The syntax of types also includes {\em type functions}
+(or {\em type families} in the Haskell jargon), which are used to express type level computation.
+For instance the following declaration in source Haskell:
+\begin{code}
+ type family F (a :: *) :: a
+ type instance F [a] = a
+\end{code}
+introduces a type function $F$ at the level of System FC. The accompanying @instance@ line asserts
+that any expression of type @F [a]@ can be viewed as having type @a@. We shall see in
+Section~\ref{sec:type-funs} how this fact
+is expressed in FC. Finally type constants include datatype
+constructors ($T$) but also arrow ($\to$) as well as a special type constructor $\psim$ whose
+role we explain in the following section. The kind language includes the familiar $\star$ and
+$\kappa_1 \to \kappa_2$ kinds but also a special kind called $\static$ that we explain along with
+the $\psim$ constructor.
+
+The typing rules for System FC are given in Figure~\ref{fig:wftm}. We
+urge the reader to consult \cite{sulzmann+:fc-paper,weirich+:fc2} for
+more examples and intuition.
+
+\begin{figure}\small
+\[\begin{array}{l}
+\begin{array}{lrll}
+\multicolumn{3}{l}{\text{Environments}} \\
+\Gamma,\Delta & ::= & \cdot \mid \Gamma,\bnd \\
+\bnd & ::= %% & \kvar & \text{Kind variable} \\
+ & a : \eta & \text{Type variable} \\
+ & \mid & c : \sigma \psim \phi & \text{Coercion variable}\\
+ & \mid & x : \sigma & \text{Term variable}\\
+ & \mid & T : \ol{\kappa} \to \star & \text{Data type} \\
+ & \mid & K : \forall (\ol{a{:}\eta}) @.@ \taus \to T\;\as & \text{Data constructor} \\
+ & \mid & F^n : \ol{\kappa}^n \to \kappa & \text{Type families (of arity $n$)} \\
+ & \mid & C \,\ol{(a{:}\eta)} : \sigma \psim \phi & \text{Axioms} \\
+%% & \mid & F_n : \kappa_1 \to \ldots \to \kappa_n \to \kappa & \text{Type family, arity $n$} \\
+%% & \mid & C\;\ol{\kvar}\;(\ol{a{:}\kappa}) : \peqt{\sigma}{\phi} & \text{Axiom} \\
+\multicolumn{3}{l}{\text{Notation}} \\
+T\;\ol{\tau} & \equiv & T\;\tau_1 \ldots \tau_n \\
+\taus \to \tau & \equiv & \tau_1 \to \ldots \to \tau_n \to \tau \\
+\taus^{1..n} & \equiv & \tau_1,\ldots,\tau_n
+ %% & & \text{for $\alpha$ either $\kappa$ or $\tau$}\\
+% \Gamma_0 & \equiv & \text{initial (closed) environment} \\
+% & \ni & \multicolumn{2}{l}{(\psim) : \forall\kvar @.@ \kvar \to \kvar \to \static} \\
+\end{array}
+\end{array}\]
+\caption{Syntax of System FC (Auxiliary definitions) }\label{fig:syntax3}
+\end{figure}
+
+\begin{figure}\small
+\[\begin{array}{c}\ruleform{\Gamma \wftm e : \tau } \\ \\
+\prooftree
+ (x{:}\tau) \in \Gamma
+ \minusv{EVar}
+ \Gamma \wftm x : \tau
+ \twiddleiv
+ (K{:}\sigma) \in \Gamma
+ \minusv{ECon}
+ \Gamma \wftm K : \sigma
+ \twiddlev
+ \begin{array}{c}
+ \Gamma,(x{:}\sigma) \wftm e : \tau \quad
+ \Gamma \wfty \sigma : \star \end{array}
+ \minusv{EAbs}
+ \Gamma \wftm \lambda x{:}\sigma @.@ e : \sigma \to \tau
+ \twiddleiv
+ \begin{array}{c}
+ \Gamma \wftm e : \sigma \to \tau \quad \Gamma \wftm u : \sigma
+ \end{array}
+ \minusv{EApp}
+ \Gamma \wftm e\;u : \tau
+ \twiddlev
+ \begin{array}{c}
+ \Gamma,(c{:}\sigma) \wftm e : \tau \\
+ \Gamma \wfty \sigma : \static{}
+ \end{array}
+ \minusv{ECAbs}
+ \Gamma \wftm \lambda c{:}\sigma @.@ e : \sigma \to \tau
+ \twiddleiv
+ \begin{array}{c}
+ \Gamma \wftm e : (\sigma_1 \psim \sigma_2) \to \tau \\
+ \Gamma \wfco \gamma : \sigma_1 \psim \sigma_2
+ \end{array}
+ \minusv{ECApp}
+ \Gamma \wftm e\;\gamma : \tau
+ \twiddlev
+ \begin{array}{c} \phantom{\Gamma}
+%% \Gamma \wfk \eta \\
+ \Gamma,(a{:}\eta) \wftm e : \tau
+ \end{array}
+ \minusv{ETabs}
+ \Gamma \wftm \Lambda a{:}\eta @.@ e : \forall a{:}\eta @.@ \tau
+ \twiddleiv
+ \begin{array}{c}
+ \Gamma \wftm e : \forall a{:}\eta @.@ \tau \quad
+ \Gamma \wfty \phi : \eta
+ \end{array}
+ \minusv{ETApp}
+ \Gamma \wftm e\;\phi : \tau[\phi/a]
+ \twiddlev
+ %% \begin{array}{c} \phantom{\Gamma} \\
+ %% \Gamma,\kvar \wftm e : \tau
+ %% \end{array}
+ %% -----------------------------------------{EKabs}
+ %% \Gamma \wftm \Lambda\kvar @.@ e : \forall\kvar @.@ \tau
+ %% \twiddleiv
+ %% \begin{array}{c}
+ %% \Gamma \wftm e : \forall\kvar @.@ \tau \\
+ %% \Gamma \wfk \kappa
+ %% \end{array}
+ %% -----------------------------------------{EKApp}
+ %% \Gamma \wftm e\;\kappa : \tau[\kappa/\kvar]
+ %% \twiddlev
+ \begin{array}{c}
+ \Gamma,(x{:}\sigma) \wftm u : \sigma \quad
+ \Gamma,(x{:}\sigma) \wftm e : \tau
+ \end{array}
+ \minusv{ELet}
+ \Gamma \wftm \tlet{x}{\sigma}{u}{e} : \tau
+%% \twiddleiv
+%% \begin{array}{c}
+%% \Gamma \wftm u : \sigma \\
+%% \Gamma,(x{:}\sigma) \wftm e : \tau
+%% \end{array}
+%% -------------------------------------------{ELet}
+%% \Gamma \wftm \tlet{x}{\sigma}{u}{e} : \tau
+ \twiddleiv\hspace{-5pt}
+ \begin{array}{c}
+ \Gamma \wftm e : \tau \quad
+ \Gamma \wfco \gamma : \tau \psim \phi
+ \end{array}
+ \minusv{ECast}
+ \Gamma \wftm \tcast{e}{\gamma} : \phi
+ \twiddlev
+ \begin{array}{l}
+ \Gamma \wftm e : T\;\ol{\kappa}\;\sigmas \\
+ \text{For each branch } K\;\ol{x{:}\tau} \to u \\
+ \quad (K{:}\forall (\ol{a{:}\eta_a}) @.@ \ol{\sigma_1\psim\sigma_2} \to \taus \to T\;\as) \in \Gamma \\
+ \quad \phi_i = \tau_i[\sigmas/\as] \\
+ \quad \phi_{1i} = \sigma_{1i}[\sigmas/\as] \\
+ \quad \phi_{2i} = \sigma_{2i}[\sigmas/\as]
+ \quad \Gamma,\ol{c{:}\phi_1\psim\phi_2}\;\ol{x{:}\phi} \wftm u : \sigma
+ \end{array}
+ \minusv{ECase}
+ \Gamma \wftm \tcase{e}{K\;(\ol{c{:}\sigma_1\psim\sigma_2})\;(\ol{x{:}\tau}) \to u} : \sigma
+\endprooftree
+\end{array}\]\caption{Well-formed terms}\label{fig:wftm}
+\end{figure}
+
+
+
+\begin{figure}\small
+\[\begin{array}{c}\ruleform{\Gamma \wfty \tau : \kappa } \\ \\
+\prooftree
+ (a{:}\eta) \in \Gamma
+ \minusv{TVar}
+ \Gamma \wfty a : \eta
+ \twiddleiv
+ (T{:}\kappa) \in \Gamma
+ \minusv{TData}
+ \Gamma \wfty T : \kappa
+ \twiddleiv
+ (F{:}\kappa) \in \Gamma
+ \minusv{TFun}
+ \Gamma \wfty F : \kappa
+ \twiddlev
+ \kappa_1,\kappa_2 \in \{ \static, \star \}
+ \minusv{TArr}
+ \Gamma \wfty (\to) : \kappa_1 \to \kappa_2 \to \star
+ \twiddleiv
+ \phantom{\Gamma}
+ \minusv{TEqPred}
+ \Gamma \wfty (\psim) : \kappa \to \kappa \to \static
+ \twiddlev
+ \begin{array}{c}
+ \Gamma \wfty \phi_1 : \kappa_1 \to \kappa_2 \quad
+ \Gamma \wfty \phi_2 : \kappa_1
+ \end{array} \vspace{2pt}
+ \minusv{TApp}
+ \Gamma \wfty \phi_1\;\phi_2 : \kappa_2
+ \twiddleiv
+ \begin{array}{c} \phantom{\Gamma} \quad
+ \Gamma,(a{:}\eta) \wfty \tau : \star
+ \end{array} \vspace{2pt}
+ \minusv{TAll}
+ \Gamma \wfty \forall a{:}\eta @.@ \tau : \star
+\endprooftree
+\end{array}\]\caption{Well-formed types}\label{fig:wfty}
+\end{figure}
+
+\subsection{Coercions}
+
+The unusual feature of FC is the use of coercions.
+The term $\tcast{e}{\gamma}$ is a cast, that converts a term $e$ of
+type $\tau$ to one of type $\phi$ (rule \rulename{ECast} in
+Figure~\ref{fig:wftm}). The coercion $\gamma$ is a \emph{witness},
+or \emph{proof}, providing
+evidence that $\tau$ and $\phi$ are equal types -- that is, $\gamma$ has
+type $\tau \psim \phi$.
+We use the symbol ``$\psim$'' to denote type equality\footnote{The ``$\#$'' subscript
+is irrelevant for this paper; the interested reader may consult
+\cite{deferred-type-errors} to understand the related type equality $\sim$, and
+the relationship between $\sim$ and $\psim$.}.
+The syntax of coercions $\gamma$ is given in
+Figure~\ref{fig:syntax2}, and their typing rules in Figure~\ref{fig:wfco}.
+For uniformity we treat $\psim$ as an ordinary type constructor, with
+kind $\kappa \to \kappa \to \static$ (Figure~\ref{fig:wfty}).
+
+To see casts in action, consider this Haskell program which uses GADTs:
+\begin{code}
+ data T a where f :: T a -> [a]
+ T1 :: Int -> T Int f (T1 x) = [x+1]
+ T2 :: a -> T a f (T2 v) = [v]
+
+ main = f (T1 4)
+\end{code}
+We regard the GADT data constructor @T1@ as having the type
+$$ @T1@ : \forall a. (a \psim @Int@) \to @Int@ \to @T@\;a $$
+So in FC, @T1@ takes three arguments: a type argument to instantiate $a$,
+a coercion witnessing the equivalence of $a$ and @Int@, and a value of type @Int@.
+Here is the FC elaboration of @main@:
+\begin{code}
+ main = f Int (T1 Int <Int> 4)
+\end{code}
+The coercion argument has kind $(@Int@\psim@Int@)$, for which the evidence
+is just $\refl{@Int@}$ (reflexivity).
+Similarly, pattern-matching on @T1@ binds two variables:
+a coercion variable, and a term variable. Here is the FC elaboration
+of function @f@:
+\begin{code}
+ f = /\(a:*). \(x:T a).
+ case x of
+ T1 (c:a ~# Int) (n:Int) -> (Cons (n+1) Nil) |> sym [c]
+ T2 (v:a) -> Cons v Nil
+\end{code}
+The cast converts the type of the result from @[Int]@ to @[a]@.
+The coercion $\sym{[c]}$ is evidence for (or a proof of)
+the equality of these types, using coercion @c@, of type $(@a@\psim@Int@)$.
+
+\subsection{Typing coercions} \label{sec:newtype} \label{sec:type-funs}
+
+\begin{figure*}\small
+\[\begin{array}{c}\ruleform{\Gamma \wfco \gamma : \sigma_1 \psim \sigma_2 } \\ \\
+\prooftree
+ \begin{array}{c} \phantom{G} \\
+ (c{:}\sigma_1 \psim \sigma_2) \in \Gamma
+ \end{array}
+ \minusv{CVar}
+ \Gamma \wfco c : \sigma_1 \psim \sigma_2
+ \twiddleiv
+ \begin{array}{c}
+ (C\, \ol{a{:}\eta} : \tau_1 \psim \tau_2) \in \Gamma \\
+ \Gamma \wfco \gamma_i : \sigma_i \psim \phi_i \vspace{1pt}
+ \end{array}
+ \minusv{CAx}
+ \Gamma \wfco C\;\gammas : \tau_1[\sigmas/\as]{\psim}\tau_2[\phis/\as]
+ \twiddleiv
+ \begin{array}{c} \phantom{G} \\
+ \Gamma \wfty \phi : \kappa
+ \end{array}
+ \minusv{CRefl}
+ \Gamma \wfco \refl{\phi} : \sigma \psim \sigma
+ \twiddlev
+ \begin{array}{c}
+ \Gamma \wfco \gamma_1 : \sigma_1 \psim \sigma_2 \\
+ \Gamma \wfco \gamma_2 : \sigma_2 \psim \sigma_3 \vspace{1pt}
+ \end{array}
+ \minusv{CTrans}
+ \Gamma \wfco \gamma_1;\gamma_2 : \sigma_1{\psim}\sigma_3
+ \twiddleiv
+ \Gamma \wfco \gamma : \sigma_1 \psim \sigma_2
+ \minusv{CSym}
+ \Gamma \wfco \sym{\gamma} : \sigma_2 \psim \sigma_1
+ \twiddleiv
+ \Gamma \wfco \gamma : H\;\sigmas \psim H\;\taus
+ \minusv{CNth}
+ \Gamma \wfco \nth{k}{\gamma} : \sigma_k \psim \tau_k
+ \twiddlev
+ \Gamma,(a{:}\eta) \wfco \gamma : \sigma_1 \psim \sigma_2
+ \minusv{CAll}
+ \Gamma \wfco \forall a{:}\eta @.@ \gamma : (\forall a{:}\eta @.@ \sigma_1) \psim (\forall a{:}\eta @.@ \sigma_2)
+ %% \twiddleiv
+ %% \Gamma \wfco \gamma_i : \tau_i \psim \sigma_i \quad i \in 1..n
+ %% \minusv{CFun}
+ %% \Gamma \wfco F^n\;\gammas : F\;\taus \psim F\;\sigmas
+ \twiddlev
+ \begin{array}{c}
+ \Gamma \wfco \gamma_1 : \sigma_1 \psim \sigma_2 \\
+ \Gamma \wfco \gamma_2 : \phi_1 \psim \phi_2 \quad \Gamma \wfty : \sigma_1\;\phi_1 : \kappa
+ \end{array}
+ \minusv{CApp}
+ \Gamma \wfco \gamma_1\;\gamma_2 : \sigma_1\;\phi_1 \psim \sigma_2\;\phi_2
+ \twiddleiv
+ \begin{array}{c}
+ \Gamma \wfty \phi : \eta \\
+ \Gamma \wfco \gamma : (\forall a{:}\eta @.@ \sigma_1) \psim (\forall a{:}\eta @.@ \sigma_2) \vspace{1pt}
+ \end{array}
+ \minusv{CInst}
+ \Gamma \wfco \inst{\gamma}{\phi} : \sigma_1[\phi/a] \psim \sigma_2[\phi/a]
+\endprooftree
+\end{array}\]\caption{Well-formed coercions}\label{fig:wfco}
+\end{figure*}
+
+Figure~\ref{fig:wfco} gives the typing rules for coercions. The rules include unsurprising cases
+for reflexivity (\rulename{CRefl}), symmetry (\rulename{CSym}), and transitivity (\rulename{CTrans}).
+Rules \rulename{CAll} and \rulename{CApp} allow us to construct coercions on more complex types from
+coercions on simpler types. Rule \rulename{CInst} instantiates a coercion between two $\forall$-types,
+to get a coercion between two instantiated types. Rule \rulename{CVar} allows us to use a coercion
+that has been introduced to the context by a coercion abstraction $(\lambda c{:}\tau{\psim}\phi @.@ e)$,
+or a pattern match against a GADT (as in the example above).
+
+Rule \rulename{CAx} refers to instantiations of {\em axioms}. In GHC, axioms can arise as a result of {\em newtype} or {\em type family} declarations. Consider the following code:
+\begin{code}
+ newtype N a = MkN (a -> Int)
+
+ type family F (x :: *) :: *
+ type instance F [a] = a
+ type instance F Bool = Char
+\end{code}
+$N$ is a \emph{newtype} (part of the original Haskell 98 definition), and is desugared to
+the following FC coercion axiom:
+\[\begin{array}{rcl}
+C_N \, a& : & N\,a \psim a \rightarrow @Int@
+\end{array}\]
+which provides evidence of the equality of types $(N\,a)$ and $(a \rightarrow @Int@)$.
+
+In the above Haskell code, $F$ is a {\em type family} \cite{chak+:types, chak+:synonyms},
+and the two @type@ @instance@ declarations above introduce two FC coercion axioms:
+\[\begin{array}{rcl}
+C_1 \, a & : & F\;[a] \psim a \\
+C_2 & : & F\;@Bool@ \psim @Char@
+\end{array}
+\]
+Rule \rulename{CAx} describes how these axioms may be used to create coercions. In this
+particular example, if we have $\gamma : \tau \psim \sigma$, then we can prove that
+$ C_1\;\gamma : F\;[\tau] \psim \sigma$. Using such coercions we can get, for example, that
+$(\tcast{3}{\sym{(C_1\;\refl{@Int@})}}) : F\;[@Int@]$.
+
+Axioms always appear saturated in System FC, hence the syntax $C\,\overline{\gamma}$ in Figure~\ref{fig:syntax2}.
+
+%% Lifting and one push rule, in case we need it
+%% \begin{figure*}\small
+%% \[\begin{array}{c}
+%% \ruleform{\lifting{a\mapsto\gamma}{\tau} = \gamma'} \\ \\
+%% \begin{array}{lcl}
+%% \lifting{a \mapsto \gamma}{a} & = & \gamma \\
+%% \lifting{a \mapsto \gamma}{b} & = & \refl{b} \\
+%% \lifting{a \mapsto \gamma}{H} & = & \refl{H} \\
+%% \lifting{a \mapsto \gamma}{F} & = & \refl{F} \\
+%% \lifting{a \mapsto \gamma}{\tau_1\;\tau_2} & = &
+%% \left\{\begin{array}{l}
+%% \refl{\phi_1\;\phi_2} \text{ when } \lifting{a\mapsto\gamma}{\tau_i} = \refl{\phi_i} \\
+%% (\lifting{a \mapsto \gamma}{\tau_1})\;(\lifting{a\mapsto\gamma}{\tau_2}) \text{ otherwise }
+%% \end{array}\right. \\
+%% \lifting{a\mapsto\gamma}{\forall a{:}\eta @.@ \tau} & = &
+%% \left\{\begin{array}{l}
+%% \refl{\forall a{:}\eta @.@ \phi} \text{ when } \lifting{a\mapsto\gamma}{\tau} = \refl{\phi} \\
+%% \forall a{:}\eta @.@ (\lifting{a\mapsto\gamma}{\tau}) \text{ otherwise}
+%% \end{array}\right.
+%% \end{array} \\ \\
+%% \begin{array}{llcl}
+%% & \tcase{\tcast{K\;\taus\;\gammas\;\es}{\gamma}}{p \to u} & \rightsquigarrow & \tcase{K\;\taus'\;\gammas'\;\es'}{p \to u} \\
+%% & & & \hspace{-4pt}\begin{array}{lll}
+%% \text{when } \\ %% & \cval(K\;\taus\;\phis\;\es) \\
+%% & \wfco \gamma : T\;\taus \psim T\;\taus' \\
+%% & K{:}\forall\ol{a{:}\eta} @.@ \ol{\sigma_1 \psim \sigma_2} \to \sigmas \to T\;\as \in \Gamma_0 \\
+%% & e_i' = \tcast{e_i}{\lifting{\as \mapsto \deltas}{\sigma_i[\phis/\cs]}} \\
+%% & \delta_j = \nth{j}{\gamma} \\
+%% & \gamma_j' = \ldots
+%% \end{array}
+%% \end{array}
+%% \end{array} \]
+%% \caption{Coercion pushing in simplification}\label{fig:opsem}
+%% \end{figure*}
+
+
+% --------------------------------------------------------------------------
+\section{The problem with large coercions}\label{ssect:large}
+
+System FC terms arise as the result of elaboration of source language
+terms, through type inference. Type inference typically
+relies on a \emph{constraint solver} \cite{pjv:modular}
+which produces System FC witnesses of
+equality (coercions), that in turn decorate the elaborated term. The constraint solver is
+not typically concerned with producing small or readable witnesses;
+indeed GHC's constraint solver can produce large and complex coercions.
+These complex coercions can make the
+elaborated term practically impossible to understand and debug.
+
+Moreover, GHC's optimiser transforms well-typed FC terms.
+Insofar as these transformations involve coercions, the coercions \emph{themselves}
+may need to be transformed. If you think of the coercions as little proofs that
+fragments of the program are well-typed, then the optimiser must maintain the proofs
+as it transforms the terms.
+
+\subsection{How big coercions arise}
+
+The trouble is that \emph{term-level optimisation tends to make
+coercions bigger}. The full details of these transformations are given in the so called {\em push}
+rules in our previous work~\cite{weirich+:fc2}, but we illustrate them here with an example.
+Consider this term:
+$$
+ (\tcast{\lambda x.e}{\gamma})\, a
+$$
+where
+$$
+\begin{array}{rcl}
+ \gamma & : & (\sigma_1 \rightarrow \tau_1) \psim (\sigma_2 \rightarrow \tau_2) \\
+ a & : & \sigma_2
+\end{array}
+$$
+We would like to perform the beta reduction, but the cast is getting in
+the way. No matter! We can transform thus:
+$$\begin{array}{ll}
+ & (\tcast{\lambda x.e}{\gamma})\, a \\
+= & \tcast{((\lambda x.e)\, (\tcast{a}{\sym{(\nth{0}{\gamma})}}))}{\nth{1}{\gamma}}
+\end{array}
+$$
+From the coercion $\gamma$ we have derived two coercions whose syntactic form
+is larger, but whose types are smaller:
+$$
+\begin{array}{rcl}
+ \gamma & : & (\sigma_1 \rightarrow \tau_1) \psim (\sigma_2 \rightarrow \tau_2) \\
+\sym{(\nth{0}{\gamma})} & : & \sigma_2 \psim \sigma_1 \\
+\nth{1}{\gamma} & : & \tau_1 \psim \tau_2
+\end{array}
+$$
+Here we make use of the coercion combinators $sym$, which reverses the sense of
+the proof; and $nth\,i$, which from a proof of $T\,\overline{\sigma} \psim T \, \overline{\tau}$
+gives a proof of $\sigma_i \psim \tau_i$. Finally, we use the derived coercions to
+cast the argument and result of the function separately. Now the lambda is
+applied directly to an argument (without a cast in the way), so
+$\beta$-reduction can proceed as desired.
+Since $\beta$-reduction is absolutely
+crucial to the optimiser, this ability to ``push coercions out of the way'' is
+fundamental. Without it, the optimiser is hopelessly compromised.
+
+A similar situation arises with @case@ expressions:
+$$@case@\,(\tcast{K\,e_1}{\gamma})\,@of@\,\{\ldots;\,K\,x \rightarrow e_2; \ldots \}$$
+where $K$ is a data constructor.
+Here we want to simplify the @case@ expression, by picking the correct alternative
+$K\,x \rightarrow e_2$, and substituting $e_1$ for $x$. Again the coercion gets in the way, but
+again it is possible to push the coercion out of way.
+
+\subsection{How coercions can be simplified}
+
+Our plan is to simplify complicated coercion terms into simpler ones, using rewriting.
+Here are some obvious rewrites we might think of immediately:
+$$
+\begin{array}{rcll}
+\sym{(\sym{\gamma})} & \rsa{} & \gamma \\
+\gamma ; \sym{\gamma} & \rsa{} & \refl{\tau} & \text{if}\,\gamma : \tau \psim \phi
+\end{array}
+$$
+But ther are much more complicated rewrites to consider.
+Consider these coercions, where $C_N$ is the axiom generated by the newtype coercion in
+Section~\ref{sec:newtype}:
+$$
+\begin{array}{rcl}
+\gamma_1 & : & \tau_1 \psim \tau_2 \\
+\gamma_2 = \sym{(C_N\,\refl{\tau_1})} & : & (\tau_1 \rightarrow @Int@) \psim (N\,\tau_1) \\
+\gamma_3 = N\,\refl{\gamma_1} & : & (N\,\tau_1) \psim (N\,\tau_2) \\
+\gamma_4 = C_N\,\refl{\tau_2} & : & (N\,\tau_2) \psim (\tau_2 \rightarrow @Int@) \\
+\\
+\gamma_5 = \gamma_2 ; \gamma_3 ; \gamma_4 & : & (\tau_1 \rightarrow @Int@) \psim (\tau_2 \rightarrow @Int@)
+\end{array}
+$$
+Here $\gamma_2$ takes a function, and wraps it in the newtype; then $\gamma_3$ coerces that newtype from
+$N\,\tau_1$ to $N\,\tau_2$; and $\gamma_4$ unwraps the newtype.
+Composing the three gives a rather large, complicated
+coercion $\gamma_2 ; \gamma_3 ; \gamma_4$. \emph{But its type
+is pretty simple}, and indeed the coercion $\gamma_1 \to \refl{@Int@}$ is a much simpler
+witness of the same equality. The rewrite system we present shortly will rewrite
+the former to the latter.
+
+Finally, here is an actual example taken from a real program compiled by GHC
+(don't look at the details!):
+$$
+\begin{array}{ll}
+& @Mut@\, \refl{v}\, (\sym{(C_{StateT} \, \refl{s})})\, \refl{a} \\
+& ; \sym{(\nth{0}{(\inst{\inst{\inst{(\forall
+ w % :*\rightarrow *
+ t % :*
+ b % : *
+.\,
+ @Mut@\, \refl{w}\, (\sym{(C_{StateT}\, \refl{t})})\, \refl{b}
+ \rightarrow \refl{@ST@\, t\,(w\, b)})}{v}}{s}}{a})}} \\
+\rsa{} & \refl{@Mut@\, v\,s\,a}
+\end{array}
+$$
+As you can see, the shrinkage in coercion size can be dramatic.
+
+%% \dv{Simon will update some of the examples here. Not sure if we should
+%% include the push figure then if we can explain it with a couple of
+%% examples. The figure will introduce lifting etc and maybe that is a
+%% distraction. However Simon, note that we refer to this example from
+%% a later section and describe how exactly it was optimized, so probably
+%% you do not want to eliminate it entirely, but just add more examples?}
+
+
+\section{Coercion simplification}\label{s:normalization}
+\newcommand{\G}{{\cal G}}
+
+We now proceed to the details of our coercion simplification algorithm. We note that the design of the algorithm
+is guided by empirical evidence of its effectiveness on actual programs and that other choices might be possible.
+Nevertheless, we formally study the properties of this algorithm, namely we will show that it preserves validity
+of coercions and terminates -- even when the rewrite system induced by the axioms is not strongly normalizing.
+
+\subsection{Simplification rules}\label{ssect:rules}
+
+Coercion simplification is given as a non-deterministic relation in Figure~\ref{fig:optimization1} and Figure~\ref{fig:optimization2}
+In these two figures we use some syntactic conventions: Namely, for sequences of coercions $\gammas_1$ and $\gammas_2$,
+we write $\ol{\gamma_1;\gamma_2}$ for the sequence of pointwise transitive compositions and $\sym{\gammas_1}$ for pointwise
+application of symmetry. We write $nontriv(\gamma)$ iff $\gamma$ {\em contains} some variable $c$ or axiom application $C\;\gammas$.
+
+\begin{figure}\small
+\[\begin{array}{l}
+\text{Coercion evaluation contexts} \quad\quad \G ::= \Box \mid \G\;\gamma \mid \gamma\;\G \mid C\;\gammas_1\G\gammas_2 \mid \sym{\G} \mid \forall a{:}\eta @.@ \G \mid \inst{\G}{\tau} \mid \G;\gamma \mid \gamma;\G \\ \\
+\prooftree
+ \begin{array}{c}
+ \gamma \approx \G[\gamma_1] \text{ modulo associativity of } ({;}) \quad
+ \Delta \wfco \gamma_1 : \sigma \psim \phi \quad \Delta \vdash \gamma_1 \rsa{} \gamma_2 \vspace{2pt}
+ \end{array}
+ \minusv{CoEval}
+ \gamma \longrightarrow \G[\gamma_2]
+\endprooftree \\ \\
+\ruleform{\Delta \vdash \gamma_1 \rsa{} \gamma_2} \\ \\
+\begin{array}{llcl}
+\multicolumn{4}{l}{\text{Reflexivity rules}} \\
+\rulename{ReflApp} & \Delta \vdash \refl{\phi_1}\;\refl{\phi_2} & \rightsquigarrow & \refl{\phi_1\;\phi_2} \\
+\rulename{ReflAll} & \Delta \vdash \forall a{:}\eta @.@ \refl{\phi} & \rightsquigarrow & \refl{\forall a{:}\eta @.@ \phi} \\
+\rulename{ReflElimL} & \Delta \vdash \refl{\phi};\gamma & \rsa{} & \gamma \\
+\rulename{ReflElimR} & \Delta \vdash \gamma;\refl{\phi} & \rsa{} & \gamma \\ \phantom{\Delta}
+\end{array} \\
+\begin{array}{llcl}
+\multicolumn{4}{l}{\text{Eta rules}} \\
+\rulename{EtaAllL} & \Delta \vdash \inst{((\forall a{:}\eta @.@ \gamma_1);\gamma_2)}{\phi} & \rsa{} & \gamma_1[\phi/a];(\inst{\gamma_2}{\phi}) \\
+\rulename{EtaAllR} & \Delta \vdash \inst{(\gamma_1;(\forall a{:}\eta @.@ \gamma_2))}{\phi} & \rsa{} & \inst{\gamma_1}{\phi};\gamma_2[\phi/a] \\
+\rulename{EtaNthL} & \Delta \vdash \nth{k}{(\refl{H\;\taus^{1..\ell}}\;\gammas;\gamma)} & \rsa{} & \left\{\begin{array}{ll} \nth{k}{\gamma} & \text{ if } k \leq \ell \\
+ \gamma_{k-\ell};\nth{k}{\gamma} & \text{ otherwise }
+
+ \end{array}\right. \\
+\rulename{EtaNthR} & \Delta \vdash \nth{k}{(\gamma;\refl{H\;\taus^{1..\ell}}\;\gammas)} & \rsa{} & \left\{\begin{array}{ll}
+ \nth{k}{\gamma} & \text{ if } k \leq \ell \\
+ \nth{k}{\gamma};\gamma_{k-\ell} & \text{ otherwise }
+ \end{array}\right.
+\end{array} \\
+\begin{array}{llcl}
+\multicolumn{4}{l}{\text{Symmetry rules}} \\
+\rulename{SymRefl} & \Delta \vdash \sym{\refl{\phi}} & \rightsquigarrow & \refl{\phi} \\
+\rulename{SymAll} & \Delta \vdash \sym{(\forall a{:}\eta @.@ \gamma)} & \rightsquigarrow & \forall a{:}\eta @.@ \sym{\gamma} \\
+\rulename{SymApp} & \Delta \vdash \sym{(\gamma_1\;\gamma_2)} & \rightsquigarrow & (\sym{\gamma_1})\;(\sym{\gamma_2}) \\
+\rulename{SymTrans} & \Delta \vdash \sym{(\gamma_1;\gamma_2)} & \rightsquigarrow & (\sym{\gamma_2}){;}(\sym{\gamma_1}) \\
+\rulename{SymSym} & \Delta \vdash \sym{(\sym{\gamma})} & \rightsquigarrow & \gamma
+\end{array} \\ \\
+\begin{array}{llcl}
+\multicolumn{4}{l}{\text{Reduction rules}} \\
+\rulename{RedNth} & \Delta \vdash \nth{k}{(\refl{H\;\taus^{1..\ell}}\;\gammas)} & \rightsquigarrow & \left\{\begin{array}{ll} \refl{\tau_k} & \text{ if }k \leq \ell \\
+ \gamma_{k-\ell} & \text{ otherwise }
+ \end{array}\right. \\
+\rulename{RedInstCo} & \Delta \vdash \inst{(\forall a{:}\eta @.@ \gamma)}{\phi} & \rsa{} & \gamma[\phi/a] \\
+\rulename{RedInstTy} & \Delta \vdash \inst{\refl{\forall a{:}\eta @.@ \tau}}{\phi} & \rsa{} & \refl{\tau[\phi/a]}
+\end{array} \\ \\
+\begin{array}{llcll}
+\multicolumn{4}{l}{\text{Push transitivity rules }} \\
+\rulename{PushApp} & \Delta \vdash (\gamma_1\;\gamma_2);(\gamma_3\;\gamma_4) & \rsa{} & (\gamma_1;\gamma_3)\;(\gamma_2;\gamma_4) \\
+\rulename{PushAll} & \Delta \vdash (\forall a{:}\eta @.@ \gamma_1); (\forall a{:}\eta @.@ \gamma_2) & \rsa{} & \forall a{:}\eta @.@ \gamma_1;\gamma_2 \\
+\rulename{PushInst}& \Delta \vdash (\inst{\gamma_1}{\tau});(\inst{\gamma_2}{\tau}) & \rsa{} & \inst{(\gamma_1;\gamma_2)}{\tau}
+ & \text{ when } \Delta \wfco \gamma_1;\gamma_2 : \sigma_1 \psim \sigma_2 \\
+\rulename{PushNth} & \Delta \vdash (\nth{k}{\gamma_1});(\nth{k}{\gamma_2}) & \rsa{} & \nth{k}{(\gamma_1;\gamma_2)}
+ & \text{ when } \Delta \wfco \gamma_1;\gamma_2 : \sigma_1 \psim \sigma_2
+\end{array}
+\end{array}\]\caption{Coercion simplification (I)}\label{fig:optimization1}
+\end{figure}
+
+We define coercion evaluation contexts, $\G$, as coercion terms with holes inside them. The syntax of $\G$ allows us to rewrite anywhere
+inside a coercion. The main coercion evaluation rule is \rulename{CoEval}. If we are given a coercion $\gamma$, we first decompose it to some
+evaluation context $\G$ with $\gamma_1$ in its hole. Rule \rulename{CoEval} works up to associativity of transitive composition;
+% -- for example, the compiler may use a flat list of coercions
+%that are transitively composed to each other instead of the binary composition operator $(;)$.
+for example, we will
+allow the term $(\gamma_1;\gamma_2;);\gamma_3$ to be written as $\G[\gamma_2;\gamma_3]$ where $\G = \gamma_1;\Box$. This treatment of
+transitivity is extremely convenient, but we must be careful to ensure that our argument for termination
+remains robust under associativity (Section~\ref{ssect:termination}). Once we
+have figured out a decomposition $\G[\gamma_1]$, \rulename{CoEval} performs
+a single step of rewriting $\Delta \vdash \gamma_1 \rsa{} \gamma_2$ and simply return $\G[\gamma_2]$.
+Since we are allowed to rewrite coercions under a type environment ($\forall a{:}\eta @.@ \G$ is a valid coercion
+evaluation context), $\Delta$ (somewhat informally) enumerates the type variables bound by $\G$. For instance we
+should be allowed to rewrite $\forall a{:}\eta @.@ \gamma_1$ to $\forall a{:}\eta @.@ \gamma_2$. This can happen
+if $(a{:}\eta) |- \gamma_1 \rsa{} \gamma_2$. The precondition $\Delta \wfco \gamma_1 : \sigma \psim \phi$ of rule
+\rulename{CoEval} ensures that this context corresponds to the decomposition of $\gamma$ into a context and $\gamma_1$.
+Moreover, the $\Delta$ is passed on to the $\rsa{}$ relation, since some of the rules of the $\rsa{}$ relation that we will present
+later may have to consult the context $\Delta$ to establish preconditions for rewriting.
+
+The soundness property for the $\longrightarrow$ relation is given by the following theorem.
+\begin{theorem}[Coercion subject reduction]\label{thm:sr-theorem}
+If $\wfco \gamma_1 : \sigma \psim \phi$ and $\gamma_1 \longrightarrow \gamma_2$ then $\wfco \gamma_2 : \sigma \psim \phi$.
+\end{theorem}
+The rewriting judgement $\Delta \vdash \gamma_1 \rsa{} \gamma_2$ satisfies a similar property.
+\begin{lemma}\label{lem:sr-lemma}
+If $\Delta \wfco \gamma_1 : \sigma \psim \phi$ and $\Delta \vdash \gamma_1 \rsa{} \gamma_2$ then $\Delta \wfco \gamma_2 : \sigma \psim \phi$.
+\end{lemma}
+
+To explain coercion simplification, we now present the reaction rules
+for the $\rsa{}$ relation, organized in several groups.
+
+\subsubsection{Pulling reflexivity up}
+Rules \rulename{ReflApp}, \rulename{ReflAll}, \rulename{ReflElimL}, and \rulename{ReflElimR}, deal with
+uses of reflexivity. Rules \rulename{ReflApp} and \rulename{ReflAll} ``swallow'' constructors from the
+coercion language (coercion application, and quantification respectively) into the type language
+(type application, and quantification respectively). Hence they pull reflexivity as high as
+possible in the tree structure of a coercion term. Rules \rulename{ReflElimL} and \rulename{ReflElimR}
+simply eliminate reflexivity uses that are composed with other coercions.
+
+\subsubsection{Pushing symmetry down}
+Uses of symmetry, contrary to reflexivity, are pushed as close to the leaves as possible or eliminated,
+(rules \rulename{SymRefl}, \rulename{SymAll}, \rulename{SymApp}, \rulename{SymTrans}, and \rulename{SymSym})
+only getting stuck at terms of the form
+$\sym{x}$ and $\sym{(C\;\gammas)}$.
+The idea is that by pushing uses of symmetry towards the leaves,
+the rest of the rules may completely ignore symmetry, except where
+symmetry-pushing gets stuck (variables or axiom applications).
+
+\subsubsection{Reducing coercions}
+Rules \rulename{RedNth}, \rulename{RedInstCo}, and \rulename{RedInstTy} comprise the first interesting group of rules.
+They eliminate uses of injectivity and instantiation. Rule \rulename{RedNth} is concerned with the case where
+we wish to decompose a coercion of type $H\;\phis \psim H\;\sigmas$, where the coercion term contains $H$ in its head.
+Notice that $H$ is a type and may already be applied to some type arguments $\taus^{1..\ell}$, and hence the rule
+has to account for selection from the first $\ell$ arguments, or a later argument. Rule \rulename{RedInstCo} deals
+with instantiation of a polymorphic coercion with a type. Notice that in rule \rulename{RedInstCo} the quantified variable
+may only appear ``protected'' under some $\refl{\sigma}$ inside $\gamma$, and hence simply substituting $\gamma[\phi/a]$ is
+guaranteed to produce a syntactically well-formed coercion. Rule \rulename{RedInstTy} deals with the instantiation of a
+polymorphic coercion that is {\em just} a type.
+
+\subsubsection{Eta expanding and subsequent reducing}
+Redexes of \rulename{RedNth} and \rulename{RedInstCo} or \rulename{RedInstTy} may not be directly visible.
+Consider $\nth{k}{(\refl{H\;\taus^{1..\ell}}\;\gammas;\gamma)}$. The use of transitivity stands in our way for the
+firing of rule \rulename{RedNth}. To the rescue, rules \rulename{EtaAllL}, \rulename{EtaAllR}, \rulename{EtaNthL},
+and \rulename{EtaNthR}, push decomposition or instantiation through transitivity and eliminate such redexes.
+We call these rules ``eta'' because in effect we are $\eta$-expanding and immediately reducing one of the components of the transitive composition.
+Here is a decomposition of \rulename{EtaAllL} in smaller steps that involve an $\eta$-expansion (of $\gamma_2$ in the second line):
+\[\begin{array}{ll}
+ & \inst{((\forall a{:}\eta @.@ \gamma_1);\gamma_2)}{\phi} \\
+ \rsa{} & \inst{((\forall a{:}\eta @.@ \gamma_1);(\forall a{:}\eta @.@ \inst{\gamma_2}{a}))}{\phi} \\
+ \rsa{} & \inst{(\forall a{:}\eta @.@ \gamma_1;\inst{\gamma_2}{a})}{\phi} \;\;\rsa{}\;\; \gamma_1[\phi/a] ; \inst{\gamma_2}{\phi}
+\end{array}\]
+We have merged these steps in a single rule to facilitate the proof of
+termination. In doing this, we do not lose any reactions, since all of the intermediate terms can also reduce to the final coercion.
+
+There are many design possibilities for rules that look like our $\eta$-rules. For instance one may wonder why
+we are not always expanding terms of the form $\gamma_1;(\forall a{:}\eta @.@ \gamma_2)$ to $\forall a{:}\eta @.@ \inst{\gamma_1}{a} ; \gamma_2$,
+whenever $\gamma_1$ is of type $\forall a{:}\eta @.@ \tau \psim \forall a{:}\eta @.@ \phi$. We experimented with several variations like this, but we found
+that such expansions either complicated the termination argument, or did not result in smaller coercion terms. Our rules in
+effect perform $\eta$-expansion {\em only} when there is a firing reduction directly after the expansion.
+
+%% Finally, one may wonder if we are missing a rule that reduces $\inst{(\gamma_1;(\forall a{:}\eta @.@ \gamma_2);\gamma_3)}{\phi}$ (and similarly for $\mathrel{nth}$).
+%% However, if $\gamma_1$ or $\gamma_3$ are $\forall$-coercions then the ``push rules'' (to be described next) will recover this reduction. If not, then
+%% we are not gaining anything if we push the instantiation inwards to get: $\inst{\gamma_1}{\phi}; \gamma_2[\phi/a]; \inst{\gamma_3}{\phi}$. In fact, the
+%% resulting term is bigger than the one we started with!
+
+\subsubsection{Pushing transitivity down}
+Rules \rulename{PushApp}, \rulename{PushAll}, \rulename{PushNth}, and \rulename{PushInst} push uses of transitivity
+{\em down} the structure of a coercion term, towards the leaves. These rules aim to reveal more redexes
+at the leaves, that will be reduced by the next (and final) set of rules. Notice that rules \rulename{PushInst} and \rulename{PushNth}
+impose side conditions on the transitive composition $\gamma_1;\gamma_2$. Without these conditions, the resulting coercion may not be well-formed.
+Take $\gamma_1 = \forall a{:}\eta @.@ \refl{T\;a\;a}$ and $\gamma_2 = \forall a{:}\eta @.@ \refl{T\;a\;@Int@}$. It is
+certainly the case that $(\inst{\gamma_1}{@Int@});(\inst{\gamma_2}{@Int@})$ is well formed. However, $\wfco \gamma_1 : \forall a{:}\eta @.@ T\;a\;a \psim \forall a{:}\eta @.@ T\;a\;a$
+and $\wfco \gamma_2 : \forall a{:}\eta @.@ T\;a\;@Int@ \psim \forall a{:}\eta @.@ T\;a\;@Int@$, and hence $\inst{(\gamma_1;\gamma_2)}{@Int@}$ is not well-formed. A similar argument
+applies to rule \rulename{PushNth}.
+
+\begin{figure}[t]\small
+\[\begin{array}{c}
+%% \text{Leaf rules} \\ \\
+\prooftree
+ \Delta \wfco c : \tau \psim \upsilon
+ \minusv{VarSym}
+ \Delta \vdash c ; \sym{c} \rsa{} \refl{\tau}
+ \twiddleiv
+ \Delta \wfco c : \tau \psim \upsilon
+ \minusv{SymVar}
+ \Delta \vdash \sym{c} ; c \rsa{} \refl{\upsilon}
+ \twiddlev
+ (C\, \ol{(a{:}\eta)} : \tau \psim \upsilon) \in \Gamma \quad \as \subseteq ftv(\upsilon)
+ \minusv{AxSym}
+ \begin{array}{l}
+ \Delta \vdash C\;\gammas_1;\sym{(C\;\gammas_2)} \rsa{} \\
+ \qquad\quad \lifting{\as \mapsto \ol{\gamma_1;\sym{\gamma_2}}}{\tau}
+ \end{array}
+ \twiddleiv
+ (C\,\ol{(a{:}\eta)} : \tau \psim \upsilon) \in \Gamma \quad \as \subseteq ftv(\tau)
+ \minusv{SymAx}
+ \begin{array}{l}
+ \Delta \vdash \sym{(C\;\gammas_1)};C\;\gammas_2 \rsa{} \\
+ \qquad\quad \lifting{\as \mapsto \ol{\sym{\gamma_1};\gamma_2}}{\upsilon}
+ \end{array}
+ \twiddlev
+ \begin{array}{c}
+ (C\,\ol{(a{:}\eta)} : \tau \psim \upsilon) \in \Gamma \\ \as \subseteq ftv(\upsilon) \quad
+ nontriv(\delta) \\ \delta = \lifting{\as \mapsto\gammas_2}{\upsilon}
+ \end{array}
+ \minusv{AxSuckR}
+ \Delta \vdash (C\;\gammas_1) ; \delta \rsa{} C\;\ol{\gamma_1{;}\gamma_2}
+ \twiddleiv
+ \begin{array}{c}
+ (C \ol{(a{:}\eta)} : \tau \psim \upsilon) \in \Gamma \\ \as \subseteq ftv(\tau) \quad
+ nontriv(\delta) \\ \delta = \lifting{\as \mapsto\gammas_1}{\tau} \vspace{2pt}
+ \end{array}
+ \minusv{AxSuckL}
+ \Delta \vdash \delta ; (C\;\gammas_2) \rsa{} C\;\ol{\gamma_1{;}\gamma_2}
+ \twiddlev
+ \begin{array}{c}
+ (C\, \ol{(a{:}\eta)} : \tau \psim \upsilon) \in \Gamma \quad \as \subseteq ftv(\tau) \\
+ nontriv(\delta) \quad \delta = \lifting{\as \mapsto\gammas_2}{\tau} \vspace{2pt}
+ \end{array}
+ \minusv{SymAxSuckR}
+ \Delta \vdash \sym{(C\;\gammas_1)} ; \delta \rsa{} \sym{(C\;\ol{\sym{\gamma_2}{;}\gamma_1})}
+ \twiddlev
+ \begin{array}{c}
+ (C\,\ol{(a{:}\eta)} : \tau \psim \upsilon) \in \Gamma \quad \as \subseteq ftv(\upsilon) \\
+ nontriv(\delta) \quad \delta = \lifting{\as \mapsto\gammas_1}{\upsilon}
+ \end{array}
+ \minusv{SymAxSuckL}
+ \Delta \vdash \delta ; \sym{(C\;\gammas_2)} \rsa{} \sym{(C\;\ol{\gamma_2{;}\sym{\gamma_1}})}
+\endprooftree
+\end{array}\]\caption{Coercion simplification (II)}\label{fig:optimization2}
+\end{figure}
+
+\subsubsection{Leaf reactions}
+When transitivity and symmetry have been pushed as low as possible, new redexes may appear, for which we introduce
+rules \rulename{VarSym}, \rulename{SymVar}, \rulename{AxSym}, \rulename{SymAx}, \rulename{AxSuckR}, \rulename{AxSuckL},
+\rulename{SymAxSuckR}, \rulename{SymAxSuckL}. (Figure~\ref{fig:optimization2})
+\begin{itemize*}
+ \item Rules \rulename{VarSym} and \rulename{SymVar} are entirely straightforward: a coercion variable (or its symmetric coercion) meets its
+symmetric coercion (or the variable) and the result is the identity.
+
+ \item Rules \rulename{AxSym} and \rulename{SymAx} are more involved. Assume that the axiom $(C\;(\ol{a{:}\eta}) {:} \tau \psim \upsilon) \in \Gamma$, and a
+ well-formed coercion of the form: $C\;\gammas_1; \sym{(C\;\gammas_2)}$. Moreover $\Delta \wfco \gammas_1 : \sigmas_1 \psim \phis_1$ and $\Delta \wfco \gammas_2 : \sigmas_2 \psim \phis_2$.
+Then we know that $\Delta \wfco C\;\gammas_1; \sym{(C\;\gammas_2)} : \tau[\sigmas_1/\as] \psim \tau[\sigmas_2/\as]$. Since the composition is
+well-formed, it must be the case that $\upsilon[\phis_1/\as] = \upsilon[\phis_2/\as]$. If $\as \subseteq ftv(\upsilon)$ then it must be $\phis_1 = \phis_2$. Hence,
+the pointwise composition $\ol{\gamma_1;\sym{\gamma_2}}$ is well-formed and of type $\sigmas_1 \psim \sigmas_2$. Consequently, we may replace the original coercion
+with the {\em lifting} of $\tau$ over a substitution that maps $\as$ to $\ol{\gamma_1;\sym{\gamma_2}}$: $\lifting{\as \mapsto \ol{\gamma_1;\sym{\gamma_2}}}{\tau}$.
+
+What is this lifting operation, of a substitution from type variables to coercions, over a type?
+Its result is a new coercion, and the definition of the operation is given in Figure~\ref{fig:lifting}.
+The easiest way to understand it is by its effect on a type:
+\begin{lemma}[Lifting]
+If $\Delta,(a{:}\eta) \wfty \tau : \eta$ and
+$\Delta \wfco \gamma : \sigma \sim \phi$ such that $\Delta \wfty \sigma : \eta$ and $\Delta \wfty \phi : \eta$,
+then $\Delta \wfco \lifting{a \mapsto \gamma}{\tau} : \tau[\sigma/a] \psim \tau[\phi/a]$
+\end{lemma}
+Notice that we have made sure that lifting pulls reflexivity as high as possible in the syntax tree -- the only
+significance of this on-the-fly normalization was that it appeared to simplify the argument we have given for termination of
+coercion normalization.
+
+\begin{figure}\small
+\[\begin{array}{l}
+\ruleform{\lifting{a\mapsto\gamma}{\tau} = \gamma'} \\ \\
+\begin{array}{lcl}
+\lifting{a \mapsto \gamma}{a} & = & \gamma \\
+\lifting{a \mapsto \gamma}{b} & = & \refl{b} \\
+\lifting{a \mapsto \gamma}{H} & = & \refl{H} \\
+\lifting{a \mapsto \gamma}{F} & = & \refl{F} \\
+\lifting{a \mapsto \gamma}{\tau_1\;\tau_2} & = &
+ \left\{\begin{array}{l}
+ \refl{\phi_1\;\phi_2} \text{ when } \lifting{a\mapsto\gamma}{\tau_i} = \refl{\phi_i} \\
+ (\lifting{a \mapsto \gamma}{\tau_1})\;(\lifting{a\mapsto\gamma}{\tau_2}) \text{ otherwise }
+ \end{array}\right. \\
+\lifting{a\mapsto\gamma}{\forall b{:}\eta @.@ \tau} & = &
+ \left\{\begin{array}{l}
+ \refl{\forall a{:}\eta @.@ \phi} \text{ when } \lifting{a\mapsto\gamma}{\tau} = \refl{\phi} \\
+ \forall b{:}\eta @.@ (\lifting{a\mapsto\gamma}{\tau}) \text{ otherwise} \quad (b \notin ftv(\gamma), b \neq a)
+ \end{array}\right.
+\end{array}
+%% \begin{array}{llcl}
+%% & \tcase{\tcast{K\;\taus\;\gammas\;\es}{\gamma}}{p \to u} & \rightsquigarrow & \tcase{K\;\taus'\;\gammas'\;\es'}{p \to u} \\
+%% & & & \hspace{-4pt}\begin{array}{lll}
+%% \text{when } \\ %% & \cval(K\;\taus\;\phis\;\es) \\
+%% & \wfco \gamma : T\;\taus \psim T\;\taus' \\
+%% & K{:}\forall\ol{a{:}\eta} @.@ \ol{\sigma_1 \psim \sigma_2} \to \sigmas \to T\;\as \in \Gamma \\
+%% & e_i' = \tcast{e_i}{\lifting{\as \mapsto \deltas}{\sigma_i[\phis/\cs]}} \\
+%% & \delta_j = \nth{j}{\gamma} \\
+%% & \gamma_j' = \ldots
+%% \end{array}
+%% \end{array}
+\end{array} \]
+\caption{Lifting}\label{fig:lifting}
+\end{figure}
+
+Returning to rules \rulename{AxSym} and \rulename{SymAx}, we stress that the side condition is essential for the rule to be sound. Consider the following example:
+\[ C (a{:}\star): F\;[a] \psim @Int@ \in \Gamma \]
+Then $(C\;\refl{@Int@});\sym{(C\;\refl{@Bool@})}$ is well-formed and of
+type $F\;[@Int@] \psim F\;[@Bool@]$, but $\refl{F}\;(\refl{@Int@};\sym{\refl{@Bool@}})$ is not well-formed!
+Rule \rulename{SymAx} is symmetric and has a similar soundness side condition on the free variables of $\tau$ this time.
+
+ \item The rest of the rules deal with the case when an axiom meets a lifted type -- the reaction swallows the lifted type
+ inside the axiom application. For instance, here is rule \rulename{AxSuckR}:
+ \[\small\prooftree
+ \begin{array}{c}
+ (C\;(\ol{a{:}\eta}) {:} \tau \psim \upsilon) \in \Gamma \quad \as \subseteq ftv(\upsilon) \\
+ nontriv(\delta) \quad \delta = \lifting{\as \mapsto\gammas_2}{\upsilon} \vspace{2pt}
+ \end{array}
+ \minusv{AxSuckR}
+ \Delta \vdash (C\;\gammas_1) ; \delta \rsa{} C\;\ol{\gamma_1{;}\gamma_2}
+ \endprooftree\]
+ This time let us assume that $\Delta \wfco \gammas_1 : \sigmas_1 \psim \phis_1$. Consequently
+ $\Delta \wfco C\;\gammas_1 : \tau[\sigmas_1/\as] \psim \upsilon[\phis_1/\as]$. Since $\as \subseteq ftv(\upsilon)$ it
+ must be that $\Delta \wfco \gammas_2 : \phis_1 \psim \phis_3$ for some $\phis_3$ and we can
+ pointwise compose $\ol{\gamma_1{;}\gamma_2}$ to get coercions between $\sigmas_1 \psim \phis_3$.
+ The resulting coercion $C\;\ol{\gamma_1{;}\gamma_2}$ is well-formed and of type $\tau[\sigmas_1/\as] \psim \upsilon[\phis_3/\as]$.
+ Rules \rulename{AxSuckL}, \rulename{SymAxSuckL}, and \rulename{SymAxSuckR} involve a similar reasoning.
+
+ The side condition $nontriv(\delta)$ is not restrictive in any way -- it merely requires that $\delta$ contains some variable
+ $c$ or axiom application. If not, then $\delta$ can be converted to reflexivity:
+ \begin{lemma}\label{lem:coherence}
+ If $\wfco \delta : \sigma{\psim}\phi$ and $\lnot nontriv(\delta)$, then $\delta {\longrightarrow^{*}} \refl{\phi}$.
+ \end{lemma}
+ Reflexivity, when transitively composed with any other coercion, is eliminable via \rulename{ReflElimL/R} or and consequently the side condition is not preventing any
+ reactions from firing. It will, however, be useful in the simplification termination proof in Section~\ref{ssect:termination}.
+\end{itemize*}
+
+The purpose of rules \rulename{AxSuckL/R} and \rulename{SymAxSuckL/R} is to eliminate intermediate coercions in a
+big transitive composition chain, to give the opportunity to an axiom to meet its symmetric version and react
+with rules \rulename{AxSym} and \rulename{SymAx}. In fact this rule is {\em precisely} what we need for the
+impressive simplifications from Section~\ref{ssect:large}. Consider that example again:
+\[\begin{array}{lrll}
+ \gamma_5 & = & \gamma_2;\gamma_3;\gamma_4 \\
+ & = & \sym{(C_N\;\refl{\tau_1})};(\refl{N}\;\gamma_1);(C_N\;\refl{\tau_2}) & (\rulename{AxSucL} \text{ with } \delta := (\refl{N}\;\gamma_1)) \\
+ & \longrightarrow & \sym{(C_N\;\refl{\tau_1})};(C_N\;(\gamma_1;\refl{\tau_2})) & (\rulename{ReflElimR} \text{ with } \gamma := \gamma_1, \phi := \tau_2) \\
+ & \longrightarrow & \sym{(C_N\;\refl{\tau_1})};(C_N\;\gamma_1) & (\rulename{SymAx}) \\
+ & \longrightarrow & \refl{\to}\;(\refl{\tau_1};\gamma_1)\;\refl{@Int@} & (\rulename{ReflElimL} \text{ with } \phi := \tau_1,\gamma := \gamma_1) \\
+ & \longrightarrow & \refl{\to}\;\gamma_1\;\refl{@Int@}
+\end{array}\]
+
+Notably, rules \rulename{AxSuckL/R} and \rulename{SymAxSuckL/R} generate
+axiom applications of the form $C\;\gammas$ (with a coercion as argument).
+In our previous papers, the syntax of axiom applications was $C\;\taus$, with \emph{types}
+as arugments. But we need the additional generality to allow coercions rewriting to
+proceed without getting stuck.
+
+%% which we now give in mathematical notation. The
+%% relevant axioms are:
+%% \[\begin{array}{lll}
+%% C_n : \forall a{:}\star \to \star @.@ N\;a \psim \forall xy @.@ a\;x \to a\;y & \in & \Gamma \\
+%% C_f : F\;() \psim Maybe & \in & \Gamma
+%% \end{array}\]
+%% The coercion term is:
+%% \[ \nth{2}{(
+%% \inst{(\inst{(\sym{C_n\;\refl{Maybe}};\refl{N}\;(\sym{C_f});C_n\;\refl{F\;()})}{x_{a}})}{y_{a}})} \]
+
+%% Its simplification is given in Figure~\ref{fig:optimization-example}.
+%% Notably, rules \rulename{AxSuckL/R} and \rulename{SymAxSuckL/R} rely
+%% on axiom applications be of the form $C\;\gammas$ instead of the simpler
+%% $C\;\taus$ found in previous FC papers.
+
+%% \begin{figure*}\small
+%% \[\begin{array}{ll}
+%% \nth{2}{(
+%% \inst{(\inst{(\sym{C_n\;\refl{Maybe}};\highlight{\refl{N}\;(\sym{C_f});C_n\;\refl{F\;()}})}{x_{a}})}{y_{a}})} \vspace{3pt} \\
+%% (\rulename{AxSuckL}) \rsa{} \vspace{3pt}\\
+%% \nth{2}{(
+%% \inst{(\inst{\highlight{(\sym{C_n\;\refl{Maybe}};C_n\;((\sym{C_f});\refl{F\;()}))}}{x_{a}})}{y_{a}})} \vspace{3pt} \\
+%% (\rulename{SymAx}) \rsa{} \vspace{3pt}\\
+%% \nth{2}{(
+%% \inst{(\inst{(\forall xy. (\sym{\refl{Maybe}};\sym{C_f};\refl{F\;()})\;\refl{x}\;\refl{\to}\;
+%% (\sym{\refl{Maybe}};\sym{C_f};\refl{F\;()})\;\refl{y})}{x_{a}})}{y_{a}})} \vspace{3pt}\\
+%% (\rulename{ReflElimL},\rulename{ReflElimR},\rulename{SymRefl}) \rsa{}^{*} \vspace{3pt}\\
+%% \nth{2}{(
+%% \inst{(\inst{(\forall x y @.@ (\sym{C_f})\;\refl{x}\;\refl{\to}\;
+%% (\sym{C_f})\;\refl{y})}{x_{a}})}{y_{a}})} \vspace{3pt}\\
+%% (\rulename{RedInstCo}) \rsa{}^{*} \quad
+%% \nth{2}{((\sym{C_f})\;\refl{x_a}\;\refl{\to}\;(\sym{C_f})\;\refl{y_a})} \quad
+%% (\rulename{RedNth}) \rsa{} \quad
+%% (\sym{C_f})\;\refl{y_a}
+%% \end{array}\]
+%% \caption{Simplification example}\label{fig:optimization-example}
+%% \end{figure*}
+
+\section{Coercion simplification in GHC}\label{ssect:ghc}
+
+To assess the usefulness of coercion simplification we added it to GHC.
+For Haskell programs that make no use of GADTs or type families, the
+effect will be precisely zero, so we took measurements on two bodies of code.
+First, our regression suite of 151 tests for GADTs and type families; these are
+all very small programs. Second, the @Data.Accelerate@ library that we know makes use
+of type families \cite{chakravarty+:accelerate}. This library consists
+of 18 modules, containing 8144 lines of code.
+
+We compiled each of these programs with and without coercion simplification,
+and measured the percentage reduction in size of the coercion terms with
+simplification enabled. This table shows the minimum, maximum, and
+aggregate reduction, taken over the 151 tests and 18 modules respectively.
+The ``aggregate reduction'' is obtained by combining all the programs
+in the group (testsuite or @Accelerate@) into one giant ``program'', and computing
+the reduction in coercion size.
+$$
+\begin{array}{rrr}
+& \text{Testsuite} & \text{Accelerate} \\
+\text{Minimum} & -97\% & -81\%\\
+\text{Maximum} & +14\% & 0\% \\
+\text{\bf Aggregate} & {\bf -58\% } & {\bf -69\%}
+\end{array}
+$$
+There is a substantial aggregate decrease of 58\% in the testsuite
+and 69\% in @Accelerate@, with a massive 97\% decrease
+in special cases. These special cases should not be taken lightly:
+in one program the types and coercions taken together were five times
+bigger than the term they decorated; after simplification they were ``only''
+twice as big. The coercion simplifier makes the compiler less vulnerable to
+falling off a cliff.
+
+Only one program showed an increase in coercion size, of 14\%, which turned out to be the
+effect of this rewrite:
+$$ \sym{(C ; D)} \quad \longrightarrow \quad (\sym{D});(\sym{C}) $$
+Smaller coercion terms make the
+compiler faster, but the normalization algorithm itself consumes some time.
+However, the effect on compile time is barely measurable (less than 1\%), and we
+do not present detailed figures.
+
+Of course none of this would matter if coercions were always tiny, so that they
+took very little space in the first place. And indeed that is often the case.
+But for programs that make heavy use of type functions, un-optimised coercions
+can dominate compile time. For example, the @Accelerate@ library makes
+heavy use of type functions. The time and memory consumption of compiling
+all 21 modules of the library are as follows:
+$$
+\begin{array}{lrrr}
+ & \text{Compile time} & \text{Memory allocated} & \text{Max residency} \\
+\text{With coercion optimisation} & 68s & 31\, Gbyte & 153\, Mbyte \\
+\text{Without coercion optimisation} & 291s & 51\, Gbyte & 2,000\, Mbyte
+\end{array}
+$$
+As you can see, the practical effects can be extreme; the cliff is very real.
+
+\section{Termination and confluence}\label{ssect:termination}
+\newcommand{\ps}{\ol{p}}
+
+We have demonstrated the effectiveness of the algorithm in practice, but we must also
+establish termination. This is important, since it would not be acceptable
+for a compiler to loop while simplifying a coercion, no matter what axioms are declared by users.
+Since the rules fire non-deterministically, and some of the rules (such as \rulename{RedInstCo} or \rulename{AxSym})
+create potentially larger coercion trees, termination is not obvious.
+
+\subsection{Termination}
+
+\begin{figure*}\small
+\[\begin{array}{c}
+ \begin{array}{lcl}
+ \multicolumn{3}{l}{\text{Axiom polynomial}} \\
+ p(\sym{\gamma}) & = & p(\gamma) \\
+ p(C\;\gammas) & = & z \cdot \Sigma p(\gamma_i) + z + 1 \\
+ p(c) & = & 1 \\
+ p(\gamma_1;\gamma_2) & = & p(\gamma_1) + p(\gamma_2) + p(\gamma_1)\cdot p(\gamma_2) \\
+ p(\refl{\phi}) & = & 0 \\
+ p(\nth{k}{\gamma}) & = & p(\gamma) \\
+ p(\inst{\gamma}{\phi}) & = & p(\gamma) \\
+ p(\gamma_1\;\gamma_2) & = & p(\gamma_1) + p(\gamma_2) \\
+ p(\forall a{:}\eta @.@ \gamma) & = & p(\gamma)
+ \end{array}
+ \begin{array}{lcl}
+ \multicolumn{3}{l}{\text{Coercion weight}} \\
+ w(\sym{\gamma}) & = & w(\gamma) \\
+ w(C\;\gammas) & = & \Sigma w(\gamma_i) + 1 \\
+ w(c) & = & 1 \\
+ w(\gamma_1;\gamma_2) & = & 1 + w(\gamma_1) + w(\gamma_2) \\
+ w(\refl{\phi}) & = & 1 \\
+ w(\nth{k}{\gamma}) & = & 1 + w(\gamma) \\
+ w(\inst{\gamma}{\phi}) & = & 1 + w(\gamma) \\
+ w(\gamma_1\;\gamma_2) & = & 1 + w(\gamma_1) + w(\gamma_2) \\
+ w(\forall a{:}\eta @.@ \gamma) & = & 1 + w(\gamma)
+ \end{array} \\
+\begin{array}{lcl}
+ \multicolumn{3}{l}{\text{Symmetry weight}} \\
+ sw(\sym{\gamma}) & = & w(\gamma) + sw(\gamma) \\
+ sw(C\;\gammas) & = & \Sigma sw(\gamma_i) \\
+ sw(c) & = & 0 \\
+ sw(\gamma_1;\gamma_2) & = & sw(\gamma_1) + sw(\gamma_2) \\
+ sw(\refl{\phi}) & = & 0 \\
+ sw(\nth{k}{\gamma}) & = & sw(\gamma) \\
+ sw(\inst{\gamma}{\phi}) & = & sw(\gamma) \\
+ sw(\gamma_1\;\gamma_2) & = & sw(\gamma_1) + sw(\gamma_2) \\
+ sw(\forall a{:}\eta @.@ \gamma) & = & sw(\gamma)
+ \end{array}
+\end{array}\]\caption{Metrics on coercion terms}\label{fig:metrics}
+\end{figure*}
+
+To formalize a termination argument, we introduce several definitions in Figure~\ref{fig:metrics}.
+The {\em axiom polynomial} of a coercion over a distinguished variable $z$, $p(\cdot)$, returns a polynomial with natural number coefficients that can be compared
+to any other polynomial over $z$. The {\em coercion weight} of a coercion is defined as the function $w(\cdot)$ and
+the {\em symmetry weight} of a coercion is defined with the function $sw(\cdot)$ in
+ Figure~\ref{fig:metrics}. Unlike the polynomial and coercion weights of a coercion,
+ $sw(\cdot)$ does take symmetry into account.
+Finally, we will also use the {\em number of coercion applications and coercion $\forall$-introductions}, denoted with $intros(\cdot)$ in what follows.
+
+Our termination argument comprises of the lexicographic left-to-right ordering of:
+\[ \mu(\cdot) = \langle p(\cdot),w(\cdot),intros(\cdot),sw(\cdot)\rangle \]
+We will show that each of the $\rsa{}$ reductions reduces this tuple.
+For this to be a valid termination argument for $(\longrightarrow)$ we need two more facts about
+{\em each} component measure, namely that (i)~$(=)$ and $(<)$ are preserved under arbitrary contexts,
+and (ii)~each component is invariant with respect to the associativity of $(;)$.
+
+\begin{lemma} If $\Delta \wfco \gamma_1 : \tau \psim \sigma$ and $\gamma_1 \approx \gamma_2$ modulo associativity
+of $(;)$, then $p(\gamma_1) = p(\gamma_2)$, $w(\gamma_1) = w(\gamma_2)$, $intros(\gamma_1) = intros(\gamma_2)$, and $sw(\gamma_1) = sw(\gamma_2)$.
+\end{lemma}
+\vspace{-10pt}\begin{proof} This is a simple inductive argument, the only interesting case is the case for
+$p(\cdot)$ where the reader can calculate that $p(\gamma_1;(\gamma_2;\gamma_3)) = p((\gamma_1;\gamma_2);\gamma_3)$ and by induction we are done.
+\end{proof}
+
+\begin{lemma} If $\Gamma,\Delta \wfco \gamma_i : \tau \psim \sigma$ (for $i=1,2$) and $p(\gamma_1) < p(\gamma_2)$ then
+$p(\G[\gamma_1]) < p(\G[\gamma_2])$ for any $\G$ with $\Gamma \wfco \G[\gamma_i] : \phi \psim \phi'$.
+Similarly if we replace $(<)$ with $(=)$.
+\end{lemma}
+\vspace{-10pt}\begin{proof} By induction on the shape of $\G$. The only interesting case is the transitivity case
+again. Let $\G = \gamma ; \G'$. Then $p(\gamma;\G'[\gamma_1]) = p(\gamma) + p(\G'[\gamma_1]) + p(\gamma)\cdot p(\G'[\gamma_1])$ whereas
+$p(\gamma;\G'[\gamma_2]) = p(\gamma) + p(\G'[\gamma_2]) + p(\gamma)\cdot p(\G'[\gamma_2])$. Now, either $p(\gamma) = 0$, in which case we are done
+by induction hypothesis for $\G'[\gamma_1]$ and $\G'[\gamma_2]$, or $p(\gamma) \neq 0$ in which case again induction
+hypothesis gives us the result since we are multiplying $p(\G'[\gamma_1])$ and $p(\G'[\gamma_2])$ by the same polynomial.
+The interesting ``trick'' is that the polynomial for transitivity contains both the product
+of the components {\em and} their sum (since product alone is not preserved by contexts!).
+\end{proof}
+\begin{lemma} If $\Gamma,\Delta \wfco \gamma_i : \tau \psim \sigma$ and $w(\gamma_1) < w(\gamma_2)$ then
+$w(\G[\gamma_1]) < w(\G[\gamma_2])$ for any $\G$ with $\Gamma \wfco \G[\gamma_i] : \phi \psim \phi'$.
+Similarly if we replace $(<)$ with $(=)$.
+\end{lemma}
+
+\begin{lemma} If $\Gamma,\Delta \wfco \gamma_i : \tau \psim \sigma$ and $intros(\gamma_1) < intros(\gamma_2)$ then
+$intros(\G[\gamma_1]) < intros(\G[\gamma_2])$ for any $\G$ with $\Gamma \wfco \G[\gamma_i] : \phi \psim \phi'$.
+Similarly if we replace $(<)$ with $(=)$.
+\end{lemma}
+
+
+\begin{lemma} If $\Gamma,\Delta \wfco \gamma_i : \tau \psim \sigma$, $w(\gamma_1) \leq w(\gamma_2)$, and $sw(\gamma_1) < sw(\gamma_2)$ then
+$sw(\G[\gamma_1]) < sw(\G[\gamma_2])$ for any $\G$ with $\Gamma \wfco \G[\gamma_i] : \phi \psim \phi'$.
+\end{lemma}
+\vspace{-10pt}\begin{proof} The only interesting case is when $\G = \sym{\G'}$ and hence we have that
+$sw(\G[\gamma_1]) = sw(\sym{\G'[\gamma_1]}) = w(\G'[\gamma_1]) + sw(\G'[\gamma_1])$.
+Similarly $sw(\G[\gamma_2]) = w(\G'[\gamma_2]) + sw(\G'[\gamma_2])$. By the precondition for the weights and induction
+hypothesis we are done. The precondition on the weights is not restrictive, since
+$w(\cdot)$ has higher precedence than $sw(\cdot)$ inside $\mu(\cdot)$.
+\end{proof}
+
+The conclusion is the following theorem.
+\begin{theorem}
+If $\gamma \approx \G[\gamma_1]$ modulo associativity of $(;)$ and $\Delta \wfco \gamma_1 : \sigma \psim \phi$, and
+$\Delta \vdash \gamma_1 \rsa{} \gamma_2$ such that $\mu(\gamma_2) < \mu(\gamma_1)$, it is the case that $\mu(\G[\gamma_2]) < \mu(\gamma)$.
+\end{theorem}
+
+\begin{corollary}
+$(\longrightarrow)$ terminates on well-formed coercions if each of the $\rsa{}$ transitions reduces $\mu(\cdot)$.
+\end{corollary}
+
+Note that often the term rewrite literature requires similar
+conditions (preservation under contexts and associativity), but also
+{\em stability under substitution} (e.g. see~\cite{Baader:1998:TR:280474},
+Chapter 5). In our setting, variables are essentially treated as
+constants and this is the reason that we do not rely on stability
+under substitutions. For instance the rule \rulename{ReflElimR}
+$\Delta |- \gamma;\refl{\phi} \rsa{} \gamma$ is {\em not} expressed as
+$\Delta |- c;\refl{\phi} \rsa{} c$, as would be customary in a more
+traditional term-rewrite system presentation.
+
+We finally show that indeed each of the $\rsa{}$ steps reduces $\mu(\cdot)$.
+
+\begin{theorem}[Termination]
+If $\Delta \wfco \gamma_1 : \sigma \psim \phi$ and $\Delta \vdash \gamma_1 \rsa{} \gamma_2$ then $\mu(\gamma_2) < \mu(\gamma_1)$.
+\end{theorem}
+\vspace{-10pt}\begin{proof}
+It is easy to see that the reflexivity rules, the symmetry rules, the reduction rules, and the
+$\eta$-rules preserve or reduce the polynomial component $p(\cdot)$. The same is true for the push rules
+but the proof is slightly more interesting. Let us consider \rulename{PushApp}, and let us write
+$p_i$ for $p(\gamma_i)$. We have that
+$p((\gamma_1\;\gamma_2);(\gamma_3\;\gamma_4)) = p_1 + p_2 + p_3 + p_4 + p_1p_3 + p_2p_3 + p_1p_4 + p_2p_4$. On
+the other hand $p((\gamma_1;\gamma_3)\;(\gamma_2;\gamma_4)) = p_1 + p_3 + p_1p_3 + p_2 + p_4 + p_2p_4$ which is a smaller
+or equal polynomial than the left-hand side polynomial.
+Rule \rulename{PushAll} is easier. Rules \rulename{PushInst} and \rulename{PushNth} have exactly the same polynomials on the left-hand and
+the right-hand side so they are ok. Rules \rulename{VarSym} and \rulename{SymVar} reduce $p(\cdot)$.
+The interesting bit is with rules \rulename{AxSym}, \rulename{SymAx}, and \rulename{AxSuckR/L}
+and \rulename{SymAxSuckR/L}. We will only show the cases for \rulename{AxSym} and \rulename{AxSuckR}
+as the rest of the rules involve very similar calculations:
+\begin{itemize*}
+ \item Case \rulename{SymAx}. We will use the notational convention $\ps_1$ for $p(\gammas_1)$ (a vector of polynomials)
+ and similarly $\ps_2$ for $p(\gammas_2)$. Then the left-hand side polynomial is:
+ \[\begin{array}{l}
+ (z\Sigma\ps_1{+}z{+}1) + (z\Sigma\ps_2{+}z{+}1) + \\
+ \quad\quad\quad\quad\quad\quad (z\Sigma\ps_1{+}z{+}1)\cdot(z\Sigma\ps_2{+}z{+}1) = \\
+ (z^2{+}2z)\Sigma\ps_1 + (z^2{+}2z)\Sigma\ps_2 + z^2\Sigma\ps_1\Sigma\ps_2 + (z^2{+}4z{+}3)
+ \end{array}\]
+ For the right-hand side polynomial we know that each $\gamma_{1i};\sym{\gamma_{2i}}$ will have polynomial
+ $p_{1i}+p_{2i}+p_{1i} p_{2i}$ and it cannot be repeated inside the lifted type more than a finite
+ number of times (bounded by the maximum number of occurrences of a type variable from $\as$ in
+ type $\tau$), call it $k$. Hence the right-hand side polynomial is smaller or equal to:
+ \[\begin{array}{ll}
+ k\Sigma\ps_1 + k\Sigma\ps_2 + k\Sigma(p_{1i}p_{2i}) \leq
+ k\Sigma\ps_1 + k\Sigma\ps_2 + k\Sigma\ps_1\Sigma\ps_2
+ \end{array}\]
+ But that polynomial is strictly smaller than the left-hand side polynomial, hence we are done.
+ \item Case \rulename{AxSuckR}. In this case the left-hand side polynomial is going to be greater
+ or equal to (because of reflexivity inside $\delta$ and because some of the $\as$ variables may
+ appear more than once inside $\upsilon$ it is not exactly equal to) the following:
+ \[\begin{array}{l}
+ (z\Sigma\ps_1+z+1) + \Sigma\ps_2 + (z\Sigma\ps_1+z+1)\Sigma\ps2 = \\
+ \quad\quad\quad\quad\quad z\Sigma\ps_1\Sigma\ps_2 + z\Sigma\ps_1 + z\Sigma\ps_2 + 2\Sigma\ps_2 + z + 1
+ \end{array}\]
+ On the other hand, the right-hand side polynomial is:
+$$
+ z\Sigma(p_{1i}+p_{2i}+p_{1i}p_{2i})+z+1 \, \leq \,
+ z\Sigma\ps_1+z\Sigma\ps_2+z\Sigma\ps_1\Sigma\ps_2+z+1
+$$
+ We observe that there is a difference of $2\Sigma\ps_2$, but we know that
+ $\delta$ satisfies $nontriv(\delta)$, and consequently there must exist some variable or
+ axiom application inside one of the $\gammas_2$. Therefore, $\Sigma\ps_2$ is
+ {\em non-zero} and the case is finished.
+\end{itemize*}
+It is the arbitrary copying of coercions $\gammas_1$ and $\gammas_2$ in rules \rulename{AxSym} and \rulename{SymAx}
+that prevents simpler measures that only involve summation of coercions for axioms or transitivity. Other reasonable
+measures such as the height of transitivity uses from the leaves would not be preserved from contexts,
+due to \rulename{AxSym} again.
+
+So far we've shown that all rules but the axiom rules preserve the polynomials, and the axiom rules
+reduce them. We next show that in the remaining rules, some other component reduces, lexicographically.
+Reflexivity rules reduce $w(\cdot)$. Symmetry rules preserve $w(\cdot)$ and $intros(\cdot)$
+but reduce $sw(\cdot)$. Reduction rules and $\eta$-rules reduce $w(\cdot)$.
+Rules \rulename{PushApp} and \rulename{PushAll} preserve or reduce $w(\cdot)$ but certainly
+reduce $intros(\cdot)$. Rules \rulename{PushInst} and \rulename{PushNth} reduce $w(\cdot)$.
+\end{proof}
+We conclude that $(\longrightarrow)$ terminates.
+
+\subsection{Confluence}
+
+Due to the arbitrary types of axioms and coercion variables in the context, we do not expect
+confluence to be true. Here is a short example that demonstrates the lack of
+confluence; assume we have the following in our context:
+\[\begin{array}{lcl}
+C_1 \, (a{:}\star \to \star) : F\;a \psim a & \\
+C_2 \, (a{:}\star \to \star) : G\;a \psim a &
+\end{array}\]
+Consider the coercion:
+\[ (C_1\;\refl{\sigma});\sym{(C_2\;\refl{\sigma})} \]
+of type $F\;\sigma \psim G\;\sigma$. In one reduction possibility, using
+rule \rulename{AxSuckR}, we may get
+\[ C_1\;(\sym{(C_2\;\refl{\sigma})}) \]
+In another possibility, using \rulename{SymAxSuckL}, we
+may get
+\[ \sym{(C_2\;(\sym{(C_1\;\refl{\sigma})}))} \]
+Although the two normal forms are different, it is unclear if one of them is ``better'' than the other.
+
+Despite this drawback, confluence or syntactic characterization of normal forms is, for our purposes,
+of secondary importance (if possible at all for open coercions in such an under-constrained problem!),
+since we never reduce coercions for the purpose of comparing their normal forms. That said, we acknowledge
+that experimental results may vary with respect to the actual evaluation strategy, but we do not expect
+wild variations.
+
+
+%% \begin{array}{l}
+%% \nth{2}{(
+%% \inst{(\inst{(\sym{N\;\refl{Maybe}};C\;\sym{TF};N\;(F\;()))}{x_{a}})}{y_{a}})} \\
+%% \rightsquigarrow
+
+
+
+
+%% axiom N a :: C a ~ forall xy. a x -> a y
+%% axiom TF :: F () ~ Maybe
+%% nth 2
+%% (inst
+%% (inst
+%% (trans
+%% (sym
+%% (N Maybe)
+%% )
+%% (trans (C (sym TF()))
+%% (N (F ()))
+%% ))
+%% xabL)
+%% yabM)
+%% :: Maybe yabM ~ F () yabM
+%% Here is another motivating example from GHC: \dv{Add example.}
+
+
+
+
+
+
+
+%% \section{Discussion}\label{s:discuss}
+%% \dv{Is there anything we want to write here, at all?}
+
+\section{Related and future work}\label{s:related}
+
+%% \subsection{Coercion erasure}
+%% There is a substantial volume of related work on proof erasure in the
+%% context of dependent type theory. Our method for sound, runtime, but
+%% zero-cost equality proof terms lies in the middle ground between two
+%% other general methodologies.
+
+%% \paragraph{Type-based erasure}
+%% On the one hand, Coq~\cite{coq} uses a {\em
+%% type-based} erasure process by introducing a special universe for
+%% propositions, {\em Prop}. Terms whose type lives in {\em
+%% Prop} are erased even when they are applications of functions
+%% (lemmas) to computational terms. This is sound since in Coq
+%% the computation language is also strongly normalizing. As we have seen,
+%% this is not sound in FC.
+%% \paragraph{Irrelevance-based erasure}
+%% On the other hand, {\em irrelevance-based} erasure is another
+%% methodology proposed in the context of pure type systems and type
+%% theory. In the context of Epigram, \cite{DBLP:conf/types/BradyMM03} present an erasure
+%% technique where term-level indices of inductive types can be erased
+%% even when they are deconstructed inside the body of a function, since
+%% values of the indexed inductive datatype will be simultaneously
+%% deconstructed and hence the indices are irrelevant for the
+%% computation. In the Agda language~\cite{norell:thesis} there exist plans to adopt a similar
+%% irrelevance-based erasure strategy. Other related work~\cite{mishra:erasure,abel:fossacs11}
+%% proposes erasure in the context of PTSs guided with lightweight programmer annotations.
+
+%% Finally, our approach of separating the ``computational part'' of a
+%% proof, which always has to run before we get to a zero-cost ``logical part''
+%% is reminiscent of the separation that A-normal forms introduce in refinement
+%% type systems, for instance~\cite{bengtson+:f7}. It is interesting future work to determine
+%% whether our treatment of coercions is also applicable
+%% to types and hopefully paves the way towards full-spectrum dependent types.
+%% \subsection{Coercion simplification}
+
+Traditionally, work on proof theory is concerned with proof normalization theorems, namely cut-elimination.
+Category and proof theory has studied the commutativity of diagrams in {\em monoidal
+categories}~\cite{MacLaneS:catwm}, establishing coherence theorems. In our setting Lemma~\ref{lem:coherence}
+expresses such a result: any coercion that does not include axioms or free coercion variables is equivalent
+to reflexivity. More work on proof theory is concerned with cut-elimination theorems -- in our setting
+eliminating transitivity completely is plainly impossible due to the presence of axioms.
+Recent work on {\em 2-dimensional type theory}~\cite{Licata:2012:CTT:2103656.2103697} provides an equivalence
+relation on equality proofs (and terms),
+which suffices to establish that types enjoy canonical forms. Although that work does not provide an algorithm
+for checking equivalence (this is harder to do because of actual computation embedded with isomorphisms), that
+definition shares many rules with our normalization algorithm. Finally there is a large literature in associative
+commutative rewrite systems~\cite{Dershowitz:1983:AR:1623516.1623594,Bachmair:1985:TOA:6947.6948}.
+
+To our knowledge, most programming languages literature on coercions is not concerned with coercion
+simplification but rather with inferring the placement of coercions in
+source-level programs. Some recent examples are~\cite{luo:coercions} and~\cite{Swamy:2009:TTC:1596550.1596598}.
+A comprehensive study of coercions {\em and their normalization} in programming languages
+is that of~\cite{henglein:coercions}, motivated by coercion placement in a language with
+{\em type dynamic}. Henglein's coercion language differs to ours in that (i)~coercions there
+are not symmetric, (ii)~do not involve polymorphic axiom schemes and (iii)~may have computational significance.
+Unlike us, Henglein is concerned with characterizations of minimal coercions and confluence,
+fixes an equational theory of coercions, and presents a normalization algorithm for that equational theory.
+In our case, in the absence of a denotational semantics for System FC and its coercions,
+such an axiomatization would be no more ad-hoc than the algorithm and
+hence not particularly useful: for instance we could consider adding type-directed
+equations like $\Delta \vdash \gamma \rsa{} \refl{\tau}$ when $\Delta \wfco \gamma : \tau \psim \tau$, or other equations
+that only hold in consistent or confluent axiom sets. It is certainly an
+interesting direction for future work to determine whether
+there even exists a maximal syntactic axiomatization of
+equalities between coercions with respect to some denotational semantics
+of System FC.
+
+In the space of typed intermediate languages, {\sf xMLF}\cite{Remy-Yakobowski:xmlf} is
+a calculus with coercions that capture {\em instantiation} instead of equality, and which serves
+as target for the {\sf MLF} language. Although the authors are not
+directly concerned with normalization as part of an intermediate
+language simplifier, their translation of the graph-based instantiation
+witnesses does produce {\sf xMLF} normal proofs.
+
+Finally, another future work direction would be to
+determine whether we can encode coercions as $\lambda$-terms, and derive coercion
+simplification by normalization in some suitable $\lambda$-calculus.
+
+%% \dv{Related work seems a bit thin at the moment.}
+
+\paragraph*{Acknowledgments}
+Thanks to Tom Schrijvers for early discussions
+and for contributing a first implementation. We would particularly
+like to thank Thomas Str\"{o}der for his insightful and detailed feedback
+in the run-up to submitting the final paper.
+
+\bibliographystyle{plain}
+\bibliography{fc-normalization-rta}
+
+\end{document}
diff --git a/docs/opt-coercion/lipics.cls b/docs/opt-coercion/lipics.cls
new file mode 100755
index 0000000000..f0913fb68b
--- /dev/null
+++ b/docs/opt-coercion/lipics.cls
@@ -0,0 +1,647 @@
+%%
+%% This is file `lipics.cls',
+%% generated with the docstrip utility.
+%%
+%% The original source files were:
+%%
+%% lipics.dtx (with options: `class')
+%%
+%% -----------------------------------------------------------------
+%% Author: le-tex publishing services
+%%
+%% This file is part of the lipics package for preparing
+%% LIPICS articles.
+%%
+%% Copyright (C) 2010 Schloss Dagstuhl
+%% -----------------------------------------------------------------
+\NeedsTeXFormat{LaTeX2e}[2005/12/01]
+\ProvidesClass{lipics}
+ [2010/09/27 v1.1 LIPIcs articles]
+\emergencystretch1em
+\advance\hoffset-1in
+\advance\voffset-1in
+\advance\hoffset2.95mm
+\newif\if@nobotseplist \@nobotseplistfalse
+\def\@endparenv{%
+ \addpenalty\@endparpenalty\if@nobotseplist\else\addvspace\@topsepadd\fi\@endpetrue}
+\def\@doendpe{%
+ \@endpetrue
+ \def\par{\@restorepar
+ \everypar{}%
+ \par
+ \if@nobotseplist
+ \addvspace\topsep
+ \addvspace\partopsep
+ \global\@nobotseplistfalse
+ \fi
+ \@endpefalse}%
+ \everypar{{\setbox\z@\lastbox}%
+ \everypar{}%
+ \if@nobotseplist\global\@nobotseplistfalse\fi
+ \@endpefalse}}
+\def\enumerate{%
+ \ifnum \@enumdepth >\thr@@\@toodeep\else
+ \advance\@enumdepth\@ne
+ \edef\@enumctr{enum\romannumeral\the\@enumdepth}%
+ \expandafter
+ \list
+ \csname label\@enumctr\endcsname
+ {\advance\partopsep\topsep
+ \topsep\z@\@plus\p@
+ \ifnum\@listdepth=\@ne
+ \labelsep0.72em
+ \else
+ \ifnum\@listdepth=\tw@
+ \labelsep0.3em
+ \else
+ \labelsep0.5em
+ \fi
+ \fi
+ \usecounter\@enumctr\def\makelabel##1{\hss\llap{##1}}}%
+ \fi}
+\def\endenumerate{\ifnum\@listdepth=\@ne\global\@nobotseplisttrue\fi\endlist}
+\def\itemize{%
+ \ifnum \@itemdepth >\thr@@\@toodeep\else
+ \advance\@itemdepth\@ne
+ \edef\@itemitem{labelitem\romannumeral\the\@itemdepth}%
+ \expandafter
+ \list
+ \csname\@itemitem\endcsname
+ {\advance\partopsep\topsep
+ \topsep\z@\@plus\p@
+ \ifnum\@listdepth=\@ne
+ \labelsep0.83em
+ \else
+ \ifnum\@listdepth=\tw@
+ \labelsep0.75em
+ \else
+ \labelsep0.5em
+ \fi
+ \fi
+ \def\makelabel##1{\hss\llap{##1}}}%
+ \fi}
+\def\enditemize{\ifnum\@listdepth=\@ne\global\@nobotseplisttrue\fi\endlist}
+\def\@sect#1#2#3#4#5#6[#7]#8{%
+ \ifnum #2>\c@secnumdepth
+ \let\@svsec\@empty
+ \else
+ \refstepcounter{#1}%
+ \protected@edef\@svsec{\@seccntformat{#1}\relax}%
+ \fi
+ \@tempskipa #5\relax
+ \ifdim \@tempskipa>\z@
+ \begingroup
+ #6{%
+ \@hangfrom{\hskip #3\relax
+ \ifnum #2=1
+ \colorbox[rgb]{0.99,0.78,0.07}{\kern0.15em\@svsec\kern0.15em}\quad
+ \else
+ \@svsec\quad
+ \fi}%
+ \interlinepenalty \@M #8\@@par}%
+ \endgroup
+ \csname #1mark\endcsname{#7}%
+ \addcontentsline{toc}{#1}{%
+ \ifnum #2>\c@secnumdepth \else
+ \protect\numberline{\csname the#1\endcsname}%
+ \fi
+ #7}%
+ \else
+ \def\@svsechd{%
+ #6{\hskip #3\relax
+ \@svsec #8}%
+ \csname #1mark\endcsname{#7}%
+ \addcontentsline{toc}{#1}{%
+ \ifnum #2>\c@secnumdepth \else
+ \protect\numberline{\csname the#1\endcsname}%
+ \fi
+ #7}}%
+ \fi
+ \@xsect{#5}}
+\def\@seccntformat#1{\csname the#1\endcsname}
+\def\@biblabel#1{\textcolor{darkgray}{\sffamily\bfseries#1}}
+\def\copyrightline{%
+ \ifx\@serieslogo\@empty
+ \else
+ \setbox\@tempboxa\hbox{\includegraphics[height=42\p@]{\@serieslogo}}%
+ \rlap{\hspace\textwidth\hspace{-\wd\@tempboxa}\hspace{\z@}%
+ \vtop to\z@{\vskip-0mm\unhbox\@tempboxa\vss}}%
+ \fi
+ \scriptsize
+ \vtop{\hsize\textwidth
+ \nobreakspace\\
+% \@Copyright
+ \ifx\@Event\@empty\else\@Event.\\\fi
+ \ifx\@Editors\@empty\else
+ \@Eds: \@Editors
+ ; pp. \thepage--\pageref{LastPage}%
+ \\
+ \fi
+% \setbox\@tempboxa\hbox{\includegraphics[height=14\p@,trim=0 15 0 0]{lipics-logo-bw}}%
+ \hspace*{\wd\@tempboxa}\enskip
+ \href{http://www.dagstuhl.de/lipics/}%
+ {Leibniz International Proceedings in Informatics}\\
+ \smash{\unhbox\@tempboxa}\enskip
+ \href{http://www.dagstuhl.de}%
+ {Schloss Dagstuhl -- Leibniz-Zentrum f{\"u}r Informatik, Dagstuhl Publishing, Germany}}}
+\def\ps@plain{\let\@mkboth\@gobbletwo
+ \let\@oddhead\@empty
+ \let\@evenhead\@empty
+ \let\@evenfoot\copyrightline
+ \let\@oddfoot\copyrightline}
+\def\lipics@opterrshort{Option "\CurrentOption" not supported}
+\def\lipics@opterrlong{The option "\CurrentOption" from article.cls is not supported by lipics.cls.}
+\DeclareOption{a5paper}{\@latexerr{\lipics@opterrshort}{\lipics@opterrlong}}
+\DeclareOption{b5paper}{\@latexerr{\lipics@opterrshort}{\lipics@opterrlong}}
+\DeclareOption{legalpaper}{\@latexerr{\lipics@opterrshort}{\lipics@opterrlong}}
+\DeclareOption{executivepaper}{\@latexerr{\lipics@opterrshort}{\lipics@opterrlong}}
+\DeclareOption{landscape}{\@latexerr{\lipics@opterrshort}{\lipics@opterrlong}}
+\DeclareOption{10pt}{\@latexerr{\lipics@opterrshort}{\lipics@opterrlong}}
+\DeclareOption{11pt}{\@latexerr{\lipics@opterrshort}{\lipics@opterrlong}}
+\DeclareOption{12pt}{\@latexerr{\lipics@opterrshort}{\lipics@opterrlong}}
+\DeclareOption{oneside}{\@latexerr{\lipics@opterrshort}{\lipics@opterrlong}}
+\DeclareOption{twoside}{\@latexerr{\lipics@opterrshort}{\lipics@opterrlong}}
+\DeclareOption{titlepage}{\@latexerr{\lipics@opterrshort}{\lipics@opterrlong}}
+\DeclareOption{notitlepage}{\@latexerr{\lipics@opterrshort}{\lipics@opterrlong}}
+\DeclareOption{onecolumn}{\@latexerr{\lipics@opterrshort}{\lipics@opterrlong}}
+\DeclareOption{twocolumn}{\@latexerr{\lipics@opterrshort}{\lipics@opterrlong}}
+\DeclareOption{fleqn}{\@latexerr{\lipics@opterrshort}{\lipics@opterrlong}}
+\DeclareOption{openbib}{\@latexerr{\lipics@opterrshort}{\lipics@opterrlong}}
+\DeclareOption{a4paper}{\PassOptionsToClass{\CurrentOption}{article}
+ \advance\hoffset-2.95mm
+ \advance\voffset8.8mm}
+\DeclareOption{numberwithinsect}{\let\numberwithinsect\relax}
+\DeclareOption*{\PassOptionsToClass{\CurrentOption}{article}}
+\ProcessOptions
+\LoadClass[twoside,notitlepage,fleqn]{article}
+\renewcommand\normalsize{%
+ \@setfontsize\normalsize\@xpt{13}%
+ \abovedisplayskip 10\p@ \@plus2\p@ \@minus5\p@
+ \abovedisplayshortskip \z@ \@plus3\p@
+ \belowdisplayshortskip 6\p@ \@plus3\p@ \@minus3\p@
+ \belowdisplayskip \abovedisplayskip
+ \let\@listi\@listI}
+\normalsize
+\renewcommand\small{%
+ \@setfontsize\small\@ixpt{11.5}%
+ \abovedisplayskip 8.5\p@ \@plus3\p@ \@minus4\p@
+ \abovedisplayshortskip \z@ \@plus2\p@
+ \belowdisplayshortskip 4\p@ \@plus2\p@ \@minus2\p@
+ \def\@listi{\leftmargin\leftmargini
+ \topsep 4\p@ \@plus2\p@ \@minus2\p@
+ \parsep 2\p@ \@plus\p@ \@minus\p@
+ \itemsep \parsep}%
+ \belowdisplayskip \abovedisplayskip
+}
+\renewcommand\footnotesize{%
+ \@setfontsize\footnotesize{8.5}{9.5}%
+ \abovedisplayskip 6\p@ \@plus2\p@ \@minus4\p@
+ \abovedisplayshortskip \z@ \@plus\p@
+ \belowdisplayshortskip 3\p@ \@plus\p@ \@minus2\p@
+ \def\@listi{\leftmargin\leftmargini
+ \topsep 3\p@ \@plus\p@ \@minus\p@
+ \parsep 2\p@ \@plus\p@ \@minus\p@
+ \itemsep \parsep}%
+ \belowdisplayskip \abovedisplayskip
+}
+\renewcommand\large{\@setfontsize\large{10.5}{13}}
+\renewcommand\Large{\@setfontsize\Large{12}{14}}
+\setlength\parindent{1.5em}
+\setlength\headheight{3mm}
+\setlength\headsep {10mm}
+\setlength\footskip{3mm}
+\setlength\textwidth{140mm}
+\setlength\textheight{222mm}
+\setlength\oddsidemargin{32mm}
+\setlength\evensidemargin{38mm}
+\setlength\marginparwidth{25mm}
+\setlength\topmargin{13mm}
+\setlength{\skip\footins}{2\baselineskip \@plus 4\p@ \@minus 2\p@}
+\def\@listi{\leftmargin\leftmargini
+ \parsep\z@ \@plus\p@
+ \topsep 8\p@ \@plus2\p@ \@minus4\p@
+ \itemsep \parsep}
+\let\@listI\@listi
+\@listi
+\def\@listii {\leftmargin\leftmarginii
+ \labelwidth\leftmarginii
+ \advance\labelwidth-\labelsep
+ \topsep 4\p@ \@plus2\p@ \@minus\p@
+ \parsep\z@ \@plus\p@
+ \itemsep \parsep}
+\def\@listiii{\leftmargin\leftmarginiii
+ \labelwidth\leftmarginiii
+ \advance\labelwidth-\labelsep
+ \topsep 2\p@ \@plus\p@\@minus\p@
+ \parsep \z@
+ \partopsep \p@ \@plus\z@ \@minus\p@
+ \itemsep \z@ \@plus\p@}
+\def\ps@headings{%
+ \def\@evenhead{\large\sffamily\bfseries
+ \llap{\hbox to0.5\oddsidemargin{\thepage\hss}}\leftmark\hfil}%
+ \def\@oddhead{\large\sffamily\bfseries\rightmark\hfil
+ \rlap{\hbox to0.5\oddsidemargin{\hss\thepage}}}%
+ \def\@oddfoot{\hfil
+ \rlap{%
+ \vtop{%
+ \vskip10mm
+ \colorbox[rgb]{0.99,0.78,0.07}
+ {\@tempdima\evensidemargin
+ \advance\@tempdima1in
+ \advance\@tempdima\hoffset
+ \hb@xt@\@tempdima{%
+ \textcolor{darkgray}{\normalsize\sffamily
+ \bfseries\quad
+ \expandafter\textsolittle
+ \expandafter{\@EventShortName}}%
+ \strut\hss}}}}}
+ \let\@evenfoot\@empty
+ \let\@mkboth\markboth
+ \let\sectionmark\@gobble
+ \let\subsectionmark\@gobble}
+\pagestyle{headings}
+\renewcommand\maketitle{\par
+ \begingroup
+ \renewcommand\thefootnote{\@fnsymbol\c@footnote}%
+ \if@twocolumn
+ \ifnum \col@number=\@ne
+ \@maketitle
+ \else
+ \twocolumn[\@maketitle]%
+ \fi
+ \else
+ \newpage
+ \global\@topnum\z@ % Prevents figures from going at top of page.
+ \@maketitle
+ \fi
+ \thispagestyle{plain}\@thanks
+ \endgroup
+ \setcounter{footnote}{0}%
+ \global\let\thanks\relax
+ \global\let\maketitle\relax
+ \global\let\@maketitle\relax
+ \global\let\@thanks\@empty
+ \global\let\@author\@empty
+ \global\let\@date\@empty
+ \global\let\@title\@empty
+ \global\let\title\relax
+ \global\let\author\relax
+ \global\let\date\relax
+ \global\let\and\relax
+}
+\newwrite\tocfile
+\def\@maketitle{%
+ \newpage
+ \null\vskip-\baselineskip
+ \vskip-\headsep
+ \@titlerunning
+ \@authorrunning
+ \let \footnote \thanks
+ \parindent\z@ \raggedright
+ {\LARGE\sffamily\bfseries\mathversion{bold}\@title \par}%
+ \vskip 1.5em%
+ \ifnum\c@authors=0 %
+ \@latexerr{No \noexpand\author given}%
+ {Provide at least one author. See the LIPIcs class documentation.}%
+ \else
+ \@author
+ \fi
+ \bgroup
+ \let\footnote\@gobble
+ \immediate\openout\tocfile=\jobname.vtc
+ \protected@write\tocfile{}{%
+ \string\contitem
+ \string\title{\@title}%
+ \string\author{\AB@authfortoc}%
+ \string\page{\thepage}}%
+ \closeout\tocfile
+ \egroup
+ \par}
+\setcounter{secnumdepth}{4}
+\renewcommand\section{\@startsection {section}{1}{\z@}%
+ {-3.5ex \@plus -1ex \@minus -.2ex}%
+ {2.3ex \@plus.2ex}%
+ {\sffamily\Large\bfseries\raggedright}}
+\renewcommand\subsection{\@startsection{subsection}{2}{\z@}%
+ {-3.25ex\@plus -1ex \@minus -.2ex}%
+ {1.5ex \@plus .2ex}%
+ {\sffamily\Large\bfseries\raggedright}}
+\renewcommand\subsubsection{\@startsection{subsubsection}{3}{\z@}%
+ {-3.25ex\@plus -1ex \@minus -.2ex}%
+ {1.5ex \@plus .2ex}%
+ {\sffamily\Large\bfseries\raggedright}}
+\renewcommand\paragraph{\@startsection{paragraph}{4}{\z@}%
+ {-3.25ex \@plus-1ex \@minus-.2ex}%
+ {1.5ex \@plus .2ex}%
+ {\sffamily\large\bfseries\raggedright}}
+\renewcommand\subparagraph{\@startsection{subparagraph}{5}{\z@}%
+ {3.25ex \@plus1ex \@minus .2ex}%
+ {-1em}%
+ {\sffamily\normalsize\bfseries}}
+\setlength\leftmargini \parindent
+\setlength\leftmarginii {1.2em}
+\setlength\leftmarginiii{1.2em}
+\setlength\leftmarginiv {1.2em}
+\setlength\leftmarginv {1.2em}
+\setlength\leftmarginvi {1.2em}
+\renewcommand\labelenumi{%
+ \textcolor{darkgray}{\sffamily\bfseries\mathversion{bold}\theenumi.}}
+\renewcommand\labelenumii{%
+ \textcolor{darkgray}{\sffamily\bfseries\mathversion{bold}\theenumii.}}
+\renewcommand\labelenumiii{%
+ \textcolor{darkgray}{\sffamily\bfseries\mathversion{bold}\theenumiii.}}
+\renewcommand\labelenumiv{%
+ \textcolor{darkgray}{\sffamily\bfseries\mathversion{bold}\theenumiv.}}
+\renewcommand\labelitemi{%
+ \textcolor[rgb]{0.6,0.6,0.61}{\ifnum\@listdepth=\@ne
+ \rule{0.67em}{0.33em}%
+ \else
+ \rule{0.45em}{0.225em}%
+ \fi}}
+\renewcommand\labelitemii{%
+ \textcolor[rgb]{0.6,0.6,0.61}{\rule{0.45em}{0.225em}}}
+\renewcommand\labelitemiii{%
+ \textcolor[rgb]{0.6,0.6,0.61}{\sffamily\bfseries\textasteriskcentered}}
+\renewcommand\labelitemiv{%
+ \textcolor[rgb]{0.6,0.6,0.61}{\sffamily\bfseries\textperiodcentered}}
+\renewenvironment{description}
+ {\list{}{\advance\partopsep\topsep\topsep\z@\@plus\p@
+ \labelwidth\z@ \itemindent-\leftmargin
+ \let\makelabel\descriptionlabel}}
+ {\ifnum\@listdepth=\@ne\global\@nobotseplisttrue\fi\endlist}
+\renewcommand*\descriptionlabel[1]{%
+ \hspace\labelsep\textcolor{darkgray}{\sffamily\bfseries\mathversion{bold}#1}}
+\renewenvironment{abstract}{%
+ \vskip\bigskipamount
+ \noindent
+ \rlap{\color[rgb]{0.51,0.50,0.52}\vrule\@width\textwidth\@height1\p@}%
+ \hspace*{7mm}\fboxsep1.5mm\colorbox[rgb]{1,1,1}{\raisebox{-0.4ex}{%
+ \large\selectfont\sffamily\bfseries\abstractname}}%
+ \vskip3\p@
+ \fontsize{9.5}{12.5}\selectfont
+ \noindent\ignorespaces}
+ {\ifx\@subjclass\@empty\else
+ \vskip\baselineskip\noindent
+ \subjclassHeading\@subjclass
+ \fi
+ \ifx\@keywords\@empty\else
+ \vskip\baselineskip\noindent
+ \keywordsHeading\@keywords
+ \fi
+ \ifx\@DOI\@empty\else
+ \vskip\baselineskip\noindent
+ \doiHeading\doi{\@DOI}%
+ \fi}
+\renewenvironment{thebibliography}[1]
+ {\if@noskipsec \leavevmode \fi
+ \par
+ \@tempskipa-3.5ex \@plus -1ex \@minus -.2ex\relax
+ \@afterindenttrue
+ \@tempskipa -\@tempskipa \@afterindentfalse
+ \if@nobreak
+ \everypar{}%
+ \else
+ \addpenalty\@secpenalty\addvspace\@tempskipa
+ \fi
+ \noindent
+ \rlap{\color[rgb]{0.51,0.50,0.52}\vrule\@width\textwidth\@height1\p@}%
+ \hspace*{7mm}\fboxsep1.5mm\colorbox[rgb]{1,1,1}{\raisebox{-0.4ex}{%
+ \normalsize\sffamily\bfseries\refname}}%
+ \@xsect{1ex \@plus.2ex}%
+ \list{\@biblabel{\@arabic\c@enumiv}}%
+ {\leftmargin8.5mm
+ \labelsep\leftmargin
+ \settowidth\labelwidth{\@biblabel{#1}}%
+ \advance\labelsep-\labelwidth
+ \usecounter{enumiv}%
+ \let\p@enumiv\@empty
+ \renewcommand\theenumiv{\@arabic\c@enumiv}}%
+ \fontsize{9.5}{12.5}\selectfont
+ \sloppy
+ \clubpenalty4000
+ \@clubpenalty \clubpenalty
+ \widowpenalty4000%
+ \sfcode`\.\@m}
+ {\def\@noitemerr
+ {\@latex@warning{Empty `thebibliography' environment}}%
+ \endlist}
+\renewcommand\footnoterule{%
+ \kern-8\p@
+ {\color[rgb]{0.60,0.60,0.61}\hrule\@width40mm\@height1\p@}%
+ \kern6.6\p@}
+\renewcommand\@makefntext[1]{%
+ \parindent\z@\hangindent1em
+ \leavevmode
+ \hb@xt@1em{\@makefnmark\hss}#1}
+\usepackage[utf8]{inputenc}
+\IfFileExists{lmodern.sty}{\RequirePackage{lmodern}}{}
+\RequirePackage[T1]{fontenc}
+\RequirePackage{textcomp}
+\RequirePackage[mathscr]{eucal}
+\RequirePackage{amssymb}
+\RequirePackage{soul}
+\sodef\textsolittle{}{.12em}{.5em\@plus.08em\@minus.06em}%
+ {.4em\@plus.275em\@minus.183em}
+\RequirePackage{color}
+\definecolor{darkgray}{rgb}{0.31,0.31,0.33}
+\RequirePackage{babel}
+\RequirePackage[tbtags,fleqn]{amsmath}
+\RequirePackage{amsthm}
+\thm@headfont{%
+ \textcolor{darkgray}{$\blacktriangleright$}\nobreakspace\sffamily\bfseries}
+\def\th@remark{%
+ \thm@headfont{%
+ \textcolor{darkgray}{$\blacktriangleright$}\nobreakspace\sffamily}%
+ \normalfont % body font
+ \thm@preskip\topsep \divide\thm@preskip\tw@
+ \thm@postskip\thm@preskip
+}
+\def\@endtheorem{\endtrivlist}%\@endpefalse
+\renewcommand\qedsymbol{\textcolor{darkgray}{\ensuremath{\blacktriangleleft}}}
+\renewenvironment{proof}[1][\proofname]{\par
+ \pushQED{\qed}%
+ \normalfont \topsep6\p@\@plus6\p@\relax
+ \trivlist
+ \item[\hskip\labelsep
+ \color{darkgray}\sffamily\bfseries
+ #1\@addpunct{.}]\ignorespaces
+}{%
+ \popQED\endtrivlist%\@endpefalse
+}
+\theoremstyle{plain}
+\newtheorem{theorem}{Theorem}
+\newtheorem{lemma}[theorem]{Lemma}
+\newtheorem{corollary}[theorem]{Corollary}
+\theoremstyle{definition}
+\newtheorem{definition}[theorem]{Definition}
+\newtheorem{example}[theorem]{Example}
+\theoremstyle{remark}
+\newtheorem*{remark}{Remark}
+\ifx\numberwithinsect\relax
+ \@addtoreset{theorem}{section}
+ \edef\thetheorem{\expandafter\noexpand\thesection\@thmcountersep\@thmcounter{theorem}}
+\fi
+\RequirePackage{graphicx}
+\RequirePackage{array}
+\let\@classzold\@classz
+\def\@classz{%
+ \expandafter\ifx\d@llarbegin\begingroup
+ \toks \count@ =
+ \expandafter{\expandafter\small\the\toks\count@}%
+ \fi
+ \@classzold}
+\RequirePackage{multirow}
+\RequirePackage{tabularx}
+\RequirePackage[online]{threeparttable}
+\def\TPTtagStyle#1{#1)}
+\def\tablenotes{\small\TPT@defaults
+ \@ifnextchar[\TPT@setuptnotes\TPTdoTablenotes} % ]
+\RequirePackage{listings}
+\lstset{basicstyle=\small\ttfamily,%
+ backgroundcolor=\color[rgb]{0.85,0.85,0.86},%
+ frame=single,framerule=0pt,xleftmargin=\fboxsep,xrightmargin=\fboxsep}
+\RequirePackage{lastpage}
+\IfFileExists{doi.sty}
+ {\RequirePackage{doi}%
+ \renewcommand*{\doitext}{}}
+ {\RequirePackage{hyperref}%
+ \def\doi##1{##1}}
+\hypersetup{pdfborder={0 0 0}}
+\RequirePackage[labelsep=space,singlelinecheck=false,%
+ font={up,small},labelfont={sf,bf},%
+ listof=false]{caption}%"listof" instead of "list" for backward compatibility
+\@ifpackagelater{hyperref}{2009/12/09}
+ {\captionsetup{compatibility=false}}%cf. http://groups.google.de/group/comp.text.tex/browse_thread/thread/db9310eb540fbbd8/42e30f3b7b3aa17a?lnk=raot
+ {}
+\DeclareCaptionLabelFormat{boxed}{%
+ \kern0.05em{\color[rgb]{0.99,0.78,0.07}\rule{0.73em}{0.73em}}%
+ \hspace*{0.67em}\bothIfFirst{#1}{~}#2}
+\captionsetup{labelformat=boxed}
+\captionsetup[table]{position=top}
+\RequirePackage[figuresright]{rotating}
+\RequirePackage{subfig}
+\def\titlerunning#1{\gdef\@titlerunning{{\let\footnote\@gobble\markboth{#1}{#1}}}}
+\def\authorrunning#1{%
+ \gdef\@authorrunning{\expandafter\def\expandafter\@tempa\expandafter{#1}%
+ \ifx\@tempa\@empty\else\markright{#1}\fi}}
+\titlerunning{\@title}
+\authorrunning{\AB@authrunning}
+\newcommand*\volumeinfo[6]{%
+ {\gdef\@Editors{#1}%
+ \gdef\@Eds{Editor}\ifnum #2>1 \gdef\@Eds{Editors}\fi
+ \gdef\@Event{#3}%
+ \setcounter{page}{#6}}}
+\volumeinfo{}{1}{}{}{}{1}
+\RequirePackage{authblk}
+\renewcommand*\Authand{{ and }}
+\renewcommand*\Authfont{\Large\bfseries\mathversion{bold}}
+\renewcommand*\AB@authnote[1]{\textsuperscript{#1}}
+\renewcommand*\AB@affilnote[1]{\protect\item[#1]}
+\renewcommand*\Affilfont{\fontsize{9.5}{12}\selectfont}
+\setlength\affilsep{\baselineskip}
+\newcommand\AB@authrunning{}
+\newcommand\AB@authfortoc{}
+\renewcommand\author[2][]%
+ {\ifnewaffil\addtocounter{affil}{1}%
+ \edef\AB@thenote{\arabic{affil}}\fi
+ \if\relax#1\relax\def\AB@note{\AB@thenote}\else\def\AB@note{#1}%
+ \setcounter{Maxaffil}{0}\fi
+ \ifnum\value{authors}>1\relax
+ \@namedef{@sep\number\c@authors}{\Authsep}\fi
+ \addtocounter{authors}{1}%
+ \begingroup
+ \let\protect\@unexpandable@protect \let\and\AB@pand
+ \def\thanks{\protect\thanks}\def\footnote{\protect\footnote}%
+ \@temptokena=\expandafter{\AB@authors}%
+ {\def\\{\protect\\[\@affilsep]\protect\Affilfont
+ \protect\AB@resetsep}%
+ \xdef\AB@author{\AB@blk@and#2}%
+ \ifnewaffil\gdef\AB@las{}\gdef\AB@lasx{\protect\Authand}\gdef\AB@as{}%
+ \xdef\AB@authors{\the\@temptokena\AB@blk@and}%
+ \else
+ \xdef\AB@authors{\the\@temptokena\AB@as\AB@au@str}%
+ \global\let\AB@las\AB@lasx\gdef\AB@lasx{\protect\Authands}%
+ \gdef\AB@as{\Authsep}%
+ \fi
+ \gdef\AB@au@str{#2}}%
+ \@temptokena=\expandafter{\AB@authlist}%
+ \let\\=\authorcr
+ \xdef\AB@authlist{\the\@temptokena
+ \protect\@nameuse{@sep\number\c@authors}%
+ \protect\Authfont#2\AB@authnote{\AB@note}}%
+ %new
+ \@temptokena=\expandafter{\AB@authrunning}%
+ \let\\=\authorcr
+ \xdef\AB@authrunning{\the\@temptokena
+ \protect\@nameuse{@sep\number\c@authors}#2}%
+ %
+ %new
+ \@temptokena=\expandafter{\AB@authfortoc}%
+ \let\\=\authorcr
+ \xdef\AB@authfortoc{\the\@temptokena
+ \expandafter\noexpand\csname @sep\number\c@authors\endcsname#2}%
+ %
+ \endgroup
+ \ifnum\value{authors}>2\relax
+ \@namedef{@sep\number\c@authors}{\Authands}\fi
+ \newaffilfalse
+}
+\renewcommand\affil[2][]%
+ {\newaffiltrue\let\AB@blk@and\AB@pand
+ \if\relax#1\relax\def\AB@note{\AB@thenote}\else\def\AB@note{#1}%
+ \setcounter{Maxaffil}{0}\fi
+ \begingroup
+ \let\protect\@unexpandable@protect
+ \def\thanks{\protect\thanks}\def\footnote{\protect\footnote}%
+ \@temptokena=\expandafter{\AB@authors}%
+ {\def\\{\protect\\\protect\Affilfont}\xdef\AB@temp{#2}}%
+ \xdef\AB@authors{\the\@temptokena\AB@las\AB@au@str
+ \protect\\[\affilsep]\protect\Affilfont\AB@temp}%
+ \gdef\AB@las{}\gdef\AB@au@str{}%
+ {\xdef\AB@temp{#2}}%
+ \@temptokena=\expandafter{\AB@affillist}%
+ \xdef\AB@affillist{\the\@temptokena \AB@affilsep
+ \AB@affilnote{\AB@note}\protect\Affilfont\AB@temp}%
+ \endgroup
+ \let\AB@affilsep\AB@affilsepx}
+\renewcommand\@author{\ifx\AB@affillist\AB@empty\AB@authrunning\else
+ \ifnum\value{affil}>\value{Maxaffil}\def\rlap##1{##1}%
+ \AB@authlist\\[\affilsep]
+ \labelwidth1.5em\labelsep\z@\leftmargini\labelwidth
+ \edef\@enumctr{enumi}%
+ \list\theenumi{\usecounter\@enumctr\def\makelabel##1{\rlap{##1}\hss}}%
+ \AB@affillist
+ \endlist
+ \else \AB@authors\fi\fi}
+\newcommand*\Copyright[1]{%
+% \def\@Copyright{%
+% \setbox\@tempboxa\hbox{\includegraphics[height=14\p@,clip]{cc-by}}%
+% \hspace*{\wd\@tempboxa}\enskip\ifx#1\@empty \else \textcopyright\ #1;\\\fi
+% \href{http://creativecommons.org/licenses/by/3.0/}%
+% {\smash{\unhbox\@tempboxa}}\enskip
+% licensed under Creative Commons License CC-BY\\
+% }
+ }
+\Copyright{\@empty}
+\def\keywords#1{\def\@keywords{#1}}
+\let\@keywords\@empty
+\def\keywordsHeading{%
+ \textcolor{darkgray}{\fontsize{9.5}{12.5}\sffamily\bfseries
+ Keywords and phrases\enskip}}
+\def\subjclass#1{\gdef\@subjclass{#1}}
+\let\@subjclass\@empty
+\def\subjclassHeading{%
+ \textcolor{darkgray}{\fontsize{9.5}{12.5}\sffamily\bfseries
+ 1998 ACM Subject Classification\enskip}}
+\def\doiHeading{%
+ \textcolor{darkgray}{\fontsize{9.5}{12.5}\sffamily\bfseries
+ Digital Object Identifier\enskip}}
+\def\serieslogo#1{\gdef\@serieslogo{#1}}
+\serieslogo{}
+\def\EventShortName#1{\gdef\@EventShortName{#1}}
+\EventShortName{}
+\def\DOI#1{\gdef\@DOI{#1}}
+\DOI{}
+\endinput
+%%
+%% End of file `lipics.cls'.
diff --git a/docs/opt-coercion/prooftree.sty b/docs/opt-coercion/prooftree.sty
new file mode 100644
index 0000000000..abb7d44864
--- /dev/null
+++ b/docs/opt-coercion/prooftree.sty
@@ -0,0 +1,347 @@
+\message{<Paul Taylor's Proof Trees, 2 August 1996>}
+%% Build proof tree for Natural Deduction, Sequent Calculus, etc.
+%% WITH SHORTENING OF PROOF RULES!
+%% Paul Taylor, begun 10 Oct 1989
+%% *** THIS IS ONLY A PRELIMINARY VERSION AND THINGS MAY CHANGE! ***
+%%
+%% 2 Aug 1996: fixed \mscount and \proofdotnumber
+%%
+%% \prooftree
+%% hyp1 produces:
+%% hyp2
+%% hyp3 hyp1 hyp2 hyp3
+%% \justifies -------------------- rulename
+%% concl concl
+%% \thickness=0.08em
+%% \shiftright 2em
+%% \using
+%% rulename
+%% \endprooftree
+%%
+%% where the hypotheses may be similar structures or just formulae.
+%%
+%% To get a vertical string of dots instead of the proof rule, do
+%%
+%% \prooftree which produces:
+%% [hyp]
+%% \using [hyp]
+%% name .
+%% \proofdotseparation=1.2ex .name
+%% \proofdotnumber=4 .
+%% \leadsto .
+%% concl concl
+%% \endprooftree
+%%
+%% Within a prooftree, \[ and \] may be used instead of \prooftree and
+%% \endprooftree; this is not permitted at the outer level because it
+%% conflicts with LaTeX. Also,
+%% \Justifies
+%% produces a double line. In LaTeX you can use \begin{prooftree} and
+%% \end{prootree} at the outer level (however this will not work for the inner
+%% levels, but in any case why would you want to be so verbose?).
+%%
+%% All of of the keywords except \prooftree and \endprooftree are optional
+%% and may appear in any order. They may also be combined in \newcommand's
+%% eg "\def\Cut{\using\sf cut\thickness.08em\justifies}" with the abbreviation
+%% "\prooftree hyp1 hyp2 \Cut \concl \endprooftree". This is recommended and
+%% some standard abbreviations will be found at the end of this file.
+%%
+%% \thickness specifies the breadth of the rule in any units, although
+%% font-relative units such as "ex" or "em" are preferable.
+%% It may optionally be followed by "=".
+%% \proofrulebreadth=.08em or \setlength\proofrulebreadth{.08em} may also be
+%% used either in place of \thickness or globally; the default is 0.04em.
+%% \proofdotseparation and \proofdotnumber control the size of the
+%% string of dots
+%%
+%% If proof trees and formulae are mixed, some explicit spacing is needed,
+%% but don't put anything to the left of the left-most (or the right of
+%% the right-most) hypothesis, or put it in braces, because this will cause
+%% the indentation to be lost.
+%%
+%% By default the conclusion is centered wrt the left-most and right-most
+%% immediate hypotheses (not their proofs); \shiftright or \shiftleft moves
+%% it relative to this position. (Not sure about this specification or how
+%% it should affect spreading of proof tree.)
+%
+% global assignments to dimensions seem to have the effect of stretching
+% diagrams horizontally.
+%
+%%==========================================================================
+
+\def\introrule{{\cal I}}\def\elimrule{{\cal E}}%%
+\def\andintro{\using{\land}\introrule\justifies}%%
+\def\impelim{\using{\Rightarrow}\elimrule\justifies}%%
+\def\allintro{\using{\forall}\introrule\justifies}%%
+\def\allelim{\using{\forall}\elimrule\justifies}%%
+\def\falseelim{\using{\bot}\elimrule\justifies}%%
+\def\existsintro{\using{\exists}\introrule\justifies}%%
+
+%% #1 is meant to be 1 or 2 for the first or second formula
+\def\andelim#1{\using{\land}#1\elimrule\justifies}%%
+\def\orintro#1{\using{\lor}#1\introrule\justifies}%%
+
+%% #1 is meant to be a label corresponding to the discharged hypothesis/es
+\def\impintro#1{\using{\Rightarrow}\introrule_{#1}\justifies}%%
+\def\orelim#1{\using{\lor}\elimrule_{#1}\justifies}%%
+\def\existselim#1{\using{\exists}\elimrule_{#1}\justifies}
+
+%%==========================================================================
+
+\newdimen\proofrulebreadth \proofrulebreadth=.05em
+\newdimen\proofdotseparation \proofdotseparation=1.25ex
+\newdimen\proofrulebaseline \proofrulebaseline=2ex
+\newcount\proofdotnumber \proofdotnumber=3
+\let\then\relax
+\def\hfi{\hskip0pt plus.0001fil}
+\mathchardef\squigto="3A3B
+%
+% flag where we are
+\newif\ifinsideprooftree\insideprooftreefalse
+\newif\ifonleftofproofrule\onleftofproofrulefalse
+\newif\ifproofdots\proofdotsfalse
+\newif\ifdoubleproof\doubleprooffalse
+\let\wereinproofbit\relax
+%
+% dimensions and boxes of bits
+\newdimen\shortenproofleft
+\newdimen\shortenproofright
+\newdimen\proofbelowshift
+\newbox\proofabove
+\newbox\proofbelow
+\newbox\proofrulename
+%
+% miscellaneous commands for setting values
+\def\shiftproofbelow{\let\next\relax\afterassignment\setshiftproofbelow\dimen0 }
+\def\shiftproofbelowneg{\def\next{\multiply\dimen0 by-1 }%
+\afterassignment\setshiftproofbelow\dimen0 }
+\def\setshiftproofbelow{\next\proofbelowshift=\dimen0 }
+\def\setproofrulebreadth{\proofrulebreadth}
+
+%=============================================================================
+\def\prooftree{% NESTED ZERO (\ifonleftofproofrule)
+%
+% first find out whether we're at the left-hand end of a proof rule
+\ifnum \lastpenalty=1
+\then \unpenalty
+\else \onleftofproofrulefalse
+\fi
+%
+% some space on left (except if we're on left, and no infinity for outermost)
+\ifonleftofproofrule
+\else \ifinsideprooftree
+ \then \hskip.5em plus1fil
+ \fi
+\fi
+%
+% begin our proof tree environment
+\bgroup% NESTED ONE (\proofbelow, \proofrulename, \proofabove,
+% \shortenproofleft, \shortenproofright, \proofrulebreadth)
+\setbox\proofbelow=\hbox{}\setbox\proofrulename=\hbox{}%
+\let\justifies\proofover\let\leadsto\proofoverdots\let\Justifies\proofoverdbl
+\let\using\proofusing\let\[\prooftree
+\ifinsideprooftree\let\]\endprooftree\fi
+\proofdotsfalse\doubleprooffalse
+\let\thickness\setproofrulebreadth
+\let\shiftright\shiftproofbelow \let\shift\shiftproofbelow
+\let\shiftleft\shiftproofbelowneg
+\let\ifwasinsideprooftree\ifinsideprooftree
+\insideprooftreetrue
+%
+% now begin to set the top of the rule (definitions local to it)
+\setbox\proofabove=\hbox\bgroup$\displaystyle % NESTED TWO
+\let\wereinproofbit\prooftree
+%
+% these local variables will be copied out:
+\shortenproofleft=0pt \shortenproofright=0pt \proofbelowshift=0pt
+%
+% flags to enable inner proof tree to detect if on left:
+\onleftofproofruletrue\penalty1
+}
+
+%=============================================================================
+% end whatever box and copy crucial values out of it
+\def\eproofbit{% NESTED TWO
+%
+% various hacks applicable to hypothesis list
+\ifx \wereinproofbit\prooftree
+\then \ifcase \lastpenalty
+ \then \shortenproofright=0pt % 0: some other object, no indentation
+ \or \unpenalty\hfil % 1: empty hypotheses, just glue
+ \or \unpenalty\unskip % 2: just had a tree, remove glue
+ \else \shortenproofright=0pt % eh?
+ \fi
+\fi
+%
+% pass out crucial values from scope
+\global\dimen0=\shortenproofleft
+\global\dimen1=\shortenproofright
+\global\dimen2=\proofrulebreadth
+\global\dimen3=\proofbelowshift
+\global\dimen4=\proofdotseparation
+\global\count255=\proofdotnumber
+%
+% end the box
+$\egroup % NESTED ONE
+%
+% restore the values
+\shortenproofleft=\dimen0
+\shortenproofright=\dimen1
+\proofrulebreadth=\dimen2
+\proofbelowshift=\dimen3
+\proofdotseparation=\dimen4
+\proofdotnumber=\count255
+}
+
+%=============================================================================
+\def\proofover{% NESTED TWO
+\eproofbit % NESTED ONE
+\setbox\proofbelow=\hbox\bgroup % NESTED TWO
+\let\wereinproofbit\proofover
+$\displaystyle
+}%
+%
+%=============================================================================
+\def\proofoverdbl{% NESTED TWO
+\eproofbit % NESTED ONE
+\doubleprooftrue
+\setbox\proofbelow=\hbox\bgroup % NESTED TWO
+\let\wereinproofbit\proofoverdbl
+$\displaystyle
+}%
+%
+%=============================================================================
+\def\proofoverdots{% NESTED TWO
+\eproofbit % NESTED ONE
+\proofdotstrue
+\setbox\proofbelow=\hbox\bgroup % NESTED TWO
+\let\wereinproofbit\proofoverdots
+$\displaystyle
+}%
+%
+%=============================================================================
+\def\proofusing{% NESTED TWO
+\eproofbit % NESTED ONE
+\setbox\proofrulename=\hbox\bgroup % NESTED TWO
+\let\wereinproofbit\proofusing
+\kern0.3em$
+}
+
+%=============================================================================
+\def\endprooftree{% NESTED TWO
+\eproofbit % NESTED ONE
+% \dimen0 = length of proof rule
+% \dimen1 = indentation of conclusion wrt rule
+% \dimen2 = new \shortenproofleft, ie indentation of conclusion
+% \dimen3 = new \shortenproofright, ie
+% space on right of conclusion to end of tree
+% \dimen4 = space on right of conclusion below rule
+ \dimen5 =0pt% spread of hypotheses
+% \dimen6, \dimen7 = height & depth of rule
+%
+% length of rule needed by proof above
+\dimen0=\wd\proofabove \advance\dimen0-\shortenproofleft
+\advance\dimen0-\shortenproofright
+%
+% amount of spare space below
+\dimen1=.5\dimen0 \advance\dimen1-.5\wd\proofbelow
+\dimen4=\dimen1
+\advance\dimen1\proofbelowshift \advance\dimen4-\proofbelowshift
+%
+% conclusion sticks out to left of immediate hypotheses
+\ifdim \dimen1<0pt
+\then \advance\shortenproofleft\dimen1
+ \advance\dimen0-\dimen1
+ \dimen1=0pt
+% now it sticks out to left of tree!
+ \ifdim \shortenproofleft<0pt
+ \then \setbox\proofabove=\hbox{%
+ \kern-\shortenproofleft\unhbox\proofabove}%
+ \shortenproofleft=0pt
+ \fi
+\fi
+%
+% and to the right
+\ifdim \dimen4<0pt
+\then \advance\shortenproofright\dimen4
+ \advance\dimen0-\dimen4
+ \dimen4=0pt
+\fi
+%
+% make sure enough space for label
+\ifdim \shortenproofright<\wd\proofrulename
+\then \shortenproofright=\wd\proofrulename
+\fi
+%
+% calculate new indentations
+\dimen2=\shortenproofleft \advance\dimen2 by\dimen1
+\dimen3=\shortenproofright\advance\dimen3 by\dimen4
+%
+% make the rule or dots, with name attached
+\ifproofdots
+\then
+ \dimen6=\shortenproofleft \advance\dimen6 .5\dimen0
+ \setbox1=\vbox to\proofdotseparation{\vss\hbox{$\cdot$}\vss}%
+ \setbox0=\hbox{%
+ \advance\dimen6-.5\wd1
+ \kern\dimen6
+ $\vcenter to\proofdotnumber\proofdotseparation
+ {\leaders\box1\vfill}$%
+ \unhbox\proofrulename}%
+\else \dimen6=\fontdimen22\the\textfont2 % height of maths axis
+ \dimen7=\dimen6
+ \advance\dimen6by.5\proofrulebreadth
+ \advance\dimen7by-.5\proofrulebreadth
+ \setbox0=\hbox{%
+ \kern\shortenproofleft
+ \ifdoubleproof
+ \then \hbox to\dimen0{%
+ $\mathsurround0pt\mathord=\mkern-6mu%
+ \cleaders\hbox{$\mkern-2mu=\mkern-2mu$}\hfill
+ \mkern-6mu\mathord=$}%
+ \else \vrule height\dimen6 depth-\dimen7 width\dimen0
+ \fi
+ \unhbox\proofrulename}%
+ \ht0=\dimen6 \dp0=-\dimen7
+\fi
+%
+% set up to centre outermost tree only
+\let\doll\relax
+\ifwasinsideprooftree
+\then \let\VBOX\vbox
+\else \ifmmode\else$\let\doll=$\fi
+ \let\VBOX\vcenter
+\fi
+% this \vbox or \vcenter is the actual output:
+\VBOX {\baselineskip\proofrulebaseline \lineskip.2ex
+ \expandafter\lineskiplimit\ifproofdots0ex\else-0.6ex\fi
+ \hbox spread\dimen5 {\hfi\unhbox\proofabove\hfi}%
+ \hbox{\box0}%
+ \hbox {\kern\dimen2 \box\proofbelow}}\doll%
+%
+% pass new indentations out of scope
+\global\dimen2=\dimen2
+\global\dimen3=\dimen3
+\egroup % NESTED ZERO
+\ifonleftofproofrule
+\then \shortenproofleft=\dimen2
+\fi
+\shortenproofright=\dimen3
+%
+% some space on right and flag we've just made a tree
+\onleftofproofrulefalse
+\ifinsideprooftree
+\then \hskip.5em plus 1fil \penalty2
+\fi
+}
+
+%==========================================================================
+% IDEAS
+% 1. Specification of \shiftright and how to spread trees.
+% 2. Spacing command \m which causes 1em+1fil spacing, over-riding
+% exisiting space on sides of trees and not affecting the
+% detection of being on the left or right.
+% 3. Hack using \@currenvir to detect LaTeX environment; have to
+% use \aftergroup to pass \shortenproofleft/right out.
+% 4. (Pie in the sky) detect how much trees can be "tucked in"
+% 5. Discharged hypotheses (diagonal lines).