|
|
Projects
The project should consist of a term paper and an implementation in
Elf. The term paper should summarize and explain a piece of research
in the theory of programming languages or logics. Typically, the
informal development follows a given research paper or report. The Twelf
implementation should formalize the language, judgments, algorithms,
and metatheory to the extent that this is feasible for a term
project. Each student should propose his or her own term project. Some
topics are suggested below, but they should not be considered as
canonical or exhaustive.
- A calculus of explicit substitutions [Abadi, Cardelli, Curien, & Levy 91]
- A calculus of objects [Abadi & Cardelli 94]
- Coherence of a language with subtyping and implicit coercions [Breazu-Tannen, Coquand, Gunter, & Scedrov 91]
- A lambda-calculus with intersection types [Coppo, Dezani-Ciancaglini, & Venneri 81] [Reynolds 91]
- A logic for parametricity [Plotkin & Abadi 93]
- A lambda-calculus with names [Odersky 94]
- First-order unification [Snyder & Gallier 88]
- Higher-order logic programming [Miller, Nadathur, Pfenning, & Scedrov 91]
- Program analysis and optimization
- Binding-time analysis [Nielson & Nielson 92] [Davies & Pfenning 96]
[Davies 96] [Hatcliff 96]
- Abstract interpretation [Cousot & Cousot 77]
- Strictness analysis [Hankin & Metayer 94]
- The Categorical Abstract Machine [Cousineau, Curien, & Mauny 87]
- Closure conversion and lambda-lifting [Reynolds 72]
- Extending Mini-ML (each topic below is a possible separate
project)
- with exceptions
- with references
- with general datatype definitions
- overloading and typecase
- Mini-Forsythe [Reynolds 88]
- Elementary notions of rewrite systems [Bachmair 91]
- Modal logic and Kripke semantics [Basin, Matthews, Vigano 96]
- Polymorphic recursion and semi-unification [Henglein 93, TOPLAS]
- Lazy evaluation [Launchbury 93]
- Pure functional programming and monads [Filinski 94]
- Evaluation based on evaluation contexts [Felleisen]
- Logical interpretations [Goedel, Friedman]
- Linear logic [Girard 87, Pfenning 96]
- Computational interpretations of classical logic [Ong 96, Ong & Stewart 97]
- Pi-calculus [Milner]
- Theorem proving
- via tactics
- via iterative deepening
- other methods
- induction
- Presburger arithmetic
- decision procedures for fragments
- Elementary category theory [Rydeheard & Burstall, Gehrke]
- Type-directed compilation [Morrisett 95]
- Shape types [Fradet & Metayer 97]
- Relational parametricity and units of measure [Kennedy 97]
- Type directed partial evaluation [Danvy 96]
- Typed closure conversion [Minamide, Morrisett, Harper 96]
- Call-by-value lambda-calculus [Plotkin 75, Sabry & Wadler 96]
- Call-by-need lambda-calculus [Ariola et al 95]
- Recursive types [Abadi & Fiore 96]
- ``Logical'' logic program compilation [Pfenning 97]
- LF in Twelf
- Twelf in Twelf
- Intensional type analysis [Harper, Morrisett 95]
|
|