During the second half of the course, students
(individually or in pairs) will engage in a research project of their
choice. Projects may be implementation-oriented, theoretically-oriented,
application-driven or teaching-oriented.
Students are encouraged to come up with their own project ideas based
on topics we have covered in class or related topics with connections
to other research around the department. Alternatively, students may investigate one
of the ideas listed below (the references given below are just a starting point
for a literature search).
|Study Girard's method of candidates, an extension of our logical relations
arguments to the polymorphic lambda calculus. Describe the technique
in detail and apply it to some interesting problems. Teach it to the
|Girard, Taylor and Lafont. Proofs and Types.|
|Study some other interesting proof technique such as techniques based on
parametricity, singleton types or contextual equivalence. Apply it to
some interesting problems and teach it to the class.|
|Design a module system for a dependently typed language. Consider
either SML-style modules or Flatt-Felleisen units.
|Harper, Mitchell and Moggi. Higher-order Modules and the Phase
|Harper and Stone. A Type-Theoretic Interpretation of Standard
|Flatt and Feleisen. Units: Cool Modules for HOT Languages.|
|Reid, Flatt, Stoller, Lepreau, and Eide. Knit: Component Composition for Systems Software.|
|Design an object-oriented, dependently typed language. Consider
basing your language on Featherweight Java or Abadi-Cardelli objects.
|Pierce. Types for Programming Languages.|
|Abadi and Cardelli. A theory of objects.|
|Propose a language design that admits both features for tracking linear
resources and exceptions. Consider using dynamic techniques to resolve
|Walker and Watkins. On regions and linear types.|
|Walker, Crary and Morrisett. Typed Memory Management via Static
|Deline and Fahndrich. Vault.|
|Implement a theorem prover for (a fragment of) linear logic, ordered
logic, bunched logic, modal logic.
|Frank Pfenning. Lecture notes on theorem proving.|
|Frank Pfenning. Lecture notes on linear logic.|
|Use Myer's Java toolkit to extend core Java with linear types, run-time
security monitoring, dependent types, or any other feature you can think of
that will improve the reliability or security of Java programs.
|Andrew Myers home page.|
|Design any type system for CML or some other concurrent language that uses
linear logic to control access to shared mutable data structures.
|Samin Ishtiaq and Peter O'Hearn. BI as an Assertion Language for
Mutable Data Structures.|
|Walker. Unpublished note on mechanical reasoning on shared
mutable data structures.|
|Use an experimental safe systems language such as Cyclone or Vault to
write some interesting systems application that is normally written in an
unsafe language. How does the type system help or hurt? How is
performance effected? Design an extension of language to verify some
important property in your particular domain.
|Use a logical framework, such as LF or concurrent LF to encode a
programming system and reason about some of its properties. Consider
encoding a concurrent system such as the Spy Calculus or Mobile Ambients|
There are three parts to the project.
- A one-page proposal outlining the project goals and major phases in the
project development. Proposals are due by March
27th and are worth 10% of the final grade.
- A presentation in class describing the area of research.
Presentations will be given during the second half of the semester.
The most important component of the presentation is how well you teach the
subject matter to me and your classmates (20% of final). At least two
days before giving the presentation, you must run through it with me.
Make an appointment.
- A report and/or a system demo due during the last week of classes (40% of
final). Reports on purely theoretical topics should be at least 5000
words, although the length will vary depending upon the topic.
Late projects will only be accepted under extraordinary circumstances.