Fall 98, CSE 520: Projects

Projects

There are two kinds of projects: the overview projects and the research/implementation projects. In both cases the student is required to write a paper of 10-20 pages on the subject. The paper should be written as if it was meant for publication, i.e. to be read by other students / researchers.

The papers are due by December 3 (in class).

Overview projects

An overview paper should be organized as an introductory tutorial on the subject. It should contain the following parts:
  1. Motivations
  2. History / Literature
  3. Main definitions
  4. Main results
  5. Implementations (if applicable)
  6. Applications/relevance for computer science
  7. Open problems
The criteria of evaluation will be the standard criteria that apply for publication of overview papers, namely:
  1. Organization and structure
  2. Clarity
  3. Focus on the relevant definitions/results of the subject
Furthermore, initiave in searching for other reference material relevant for the subject (besides the material suggested by me) will be highly appeciated.

Research/implementation projects

A project of this kind consists in the study of an open theoretical problem, or an implementation problem, of moderate difficulty. The student should write a paper presenting this study or implementation. In general, the apper should contain the following parts:
  1. Explanation of the problem, motivations and relevant literature
  2. Technical preliminaries (existing in literature)
  3. Technical definitions (possibly developed by the student)
  4. Main result / program (developed by the student)
  5. Open problems
The criteria of evaluation will be the standard criteria that apply for publication of research papers, namely:
  1. Organization, structure
  2. Clarity
  3. Correctness of results / program

List of subjects for projects

This list is not complete. New suggestions will be added during the semester. Students are welcome to come out themselves with ideas for projects, subject to my approval.

For each subject a list of relevant works is given. This should be interpreted as a minimum reference material. Students are encouraged to search themselves for other reference material relevant for the subject (one way to start is to look at the list of references at the end of the papers).

Overview projects

  1. Explicit substitutions
    Initiated by Nadathur and independently by Abadi, Cardelli, Levy, and Curien. Link between theory and implementation. Convenient tool to reason about functional languages, and implementations.

    References

    Martin Abadi, Luca Cardelli, Pierre-Louis Curien, and Jean-Jacques Levy. Explicit Substititions. Journal of Functional Programming 1, 4 (October 1991), 375-416.

    Gopalan Nadathur and Debra Sue Wilson. A Notation for Lambda Terms: A Generalization of Environments. To appear in Theoretical Computer Science 198(1-2): 49-98, 1998.

    Gopalan Nadathur. An Explicit Substitution Notation in a lambda Prolog Implementation. Technical Report. University of Chicago. December 1997.

  2. Logical Frameworks
    Dependent Types. The idea is to consider as types the formulae of the predicate calculus. Following the Curry-Howard analogy, terms are then interpreted as representant of proofs possibly depending on other proofs.

    References

    Robert Harper, Furio Honsell, and Gordon Plotkin. A framework for defining logics. Journal of the Association for Computing Machinery, 40(1):143-184, 1993.

    Henk P. Barendregt. Lambda Calculi with types. Chapter in the Handbook of Logic in Computer Science, Vol. 2. S. Abramski, Dov M. Gabbay, and T.S.E. Maibaum, Eds. Oxford Science Publications, 1992.

    Papers on ELF. See Frank Pfenning's home page at CMU.

  3. The Calculus of Constructions
    Dependent higher-order types. Types as formulas of the Higher Order predicate calculus. (See also the Lambda-Cube, Barendregt)

    References

    Th. Coquand and G. Huet. The Calculus of Constructions. Information and Computation, 76:95-120, 1988.

    Henk P. Barendregt. Lambda Calculi with types. Chapter in the Handbook of Logic in Computer Science, Vol. 2. S. Abramski, Dov M. Gabbay, and T.S.E. Maibaum, Eds. Oxford Science Publications, 1992.

  4. Higher-order unification
    The theory of unification which is at the basis of Lambda Prolog (and other logical higher-order languages like ELF).

    References

    Gerard Huet, A Unification Algorithm for Typed lambda-Calculus, Theoretical Computer Science 1:27-57, 1973.

    W. Snyder and J. Gallier, Higher-Order Unification Revisited: Complete Sets of Transformations, Journal of Symbolic Computation 8: 101 - 140, 1989.

  5. Decidability of bisimulation
    Bisimulation can be easily shown to be decidable for finite-state processes (i.e. processes whose transition graph is finite). In general, bisimulation is not decidable for infinite-state processes. However, recent research has identified some classes of infinite-states processes where bisimulation is still decidable. One of these classes corresponds to the context-free grammars (in Greibach Normal Form). The decidability of bisimulation in this case is particularly surprising, because it is well-known that language equivalence (= trace equivalence) for context-free grammars is undecidable.

    References

    Jos C. M. Baeten, Jan A. Bergstra, and Jan Willem Klop. Decidability of Bisimulation Equivalence for Processes Generating Context-Free Languages. Journal of the Association for Computing Machinery 40(3): 653-682, 1993.

    Hans Hüttel and Colin Stirling. Actions speak louder than words: Proving bisimilarity for context-free processes. Journal of Logic and Computation, 8(4):485-509, August 1998. (A previous version of this paper appeared in Proceedings of LICS 91.)

    Søren Christensen, Hans Hüttel and Colin Stirling. Bisimilarity is Decidable for All Context-Free Processes. Information and Computation, 121(2):141-148, September 1995. (A previous version of this paper appeared in Proceedings of CONCUR 92.)

    Søren Christensen, Yoram Hirshfeld, and Faron Moller. Decidable subsets of CCS. The Computer Journal, 37(4):233-242, 1994.

  6. Bisimulation as a congruence
    Bisimulation is a general notion which can be applied to any language whose semantics is specified via a transition system. One of the properties which are very desirable for any kind of equivalence considered for verification, is the property of being a congruence. Recent research has pointed out the conditions (on the rules of the transition system) which guarrantee that the associated bisimulation equivalence is a congruence. Furthermore, a complete set of axioms (for bisimulation congruence) can be derived automatically.

    References

    J.F. Groote and F.W. Vaandrager. Structured operational semantics and bisimulation as a congruence. Information and Computation, 100(2):202-260, 1992.

    L. Aceto, B. Bloom and F.W. Vaandrager. Turning SOS rules into equations. LICS'92 Special Issue of Information and Computation, 111(1):1-52, 1994.

Research/Implementation projects

  1. Implementation of the PCF with the let construct in lambda Prolog Consider PCF with the let construct explained in class (see LN 11). The project consists in developing a Lambda Prolog implementation (for the eager or for the lazy semantics) and proving its correctness. More specifically:
    1. Type checker: Extend the lambda Prolog type system so to include the case of the let construct (consider weak polymorphism)
    2. Interpreter: you can use the one explained in class (see LN 12).
    3. Proof of correctness of the interpreter and of the type system
    4. Proof of the subject reduction theorem. This can be done directly by reasoning on the Lambda Prolog code (it is simpler).

  2. The Hamming sequence
    This project consists in specifying and implementing a system generating the ordered sequence (without repetitions) of the Hammming numbers. A Humming number is any number of the form 2k3m5n for arbitrary k, m, and n. The specification should be given in CCS or in pi-calculus, and the implementation should be done in Java.

    The CCS (or pi-calculus) definition should express the system as a parallel composition of (at least) the following processes:

    You can find a description of this design also at pag. 286 of the book

    Chris Reade. Elements of Functional Programming. Addison-Wesley, 1989.
    Note that the implementation of the system proposed in this textbook is sequential. Hence: don't follow that implementation!

    In the specification, you can use CCS or pi-calculus enriched with

    It is preferable to have the above processes communicating with each other via queues. (This will allow the processes to be more independent, i.e. will allow more parallelism.) A queue can be specified in CCS or in pi-calculus in the same way as a buffer with unbounded capacity. Note that also these queues, in the CCS (or pi-calculus) specification, will be processes.

    The Java implementation should follow the CCS (or pi-calculus) design, using threads to implement processes. There should be a thread for each of the processes described in the CCS (or pi-calculus) specification, except for queues: you can implement queues as passive objects if you prefer. Note that in this case the methods of the queues should be synchronized.
    Note: There are testbooks presenting CC++ or Java programs solving this problem in various fashions. Therefore, a solution containing only the Java implementation, or in which the Java implementation does not correspond to the CCS (or pi-calculus) specification, will be considered absolutely insufficient.

    It is not strictly requested to prove the correcteness of the CCS (or pi-calculus) specification, but it would be appreciated (in a concrete way, i.e. it will contribute to the final grade). The correctness consists in proving that the system is (weakly) bisimilar to the process P(1), where P(n) is defined inductively as follows:

    P(n) = out^(H(n)). P(n+1)
    where H(n) is the n-th element of the ordered sequence of Humming numbers.

  3. The Heratosthenes' Sieve
    This project is analogous to the previous one and consists in specifying and implementing a system, based on Eratosthenes' sieve method, for generating the ordered sequence of the prime numbers (starting from 2). The specification should be given in CCS or in pi-calculus, and the implementation should be done in Java.

    The CCS (or pi-calculus) definition should express the system as a parallel composition of (at least) the following processes:

    You can find a description of this design also at pag. 274 of the book

    Ravi Sethi. Programming Languages Concepts and Constructs. 2nd edition, Addison-Wesley, 1996.
    Note that the implementation of the system proposed in this textbook is sequential. Hence: don't follow that implementation!

    In the specification, you can use CCS or pi-calculus enriched with

    It is preferable to have the above processes communicating with each other via queues. (This will allow the processes to be more independent, i.e. will allow more parallelism.) A queue can be specified in CCS (or in pi-calculus) in the same way as a buffer with unbounded capacity. Note that also these queues, in the CCS (or pi-calculus) specification, will be processes.

    The Java implementation should follow the CCS (or pi-calculus) design, using threads to implement processes. There should be a thread for each of the processes described in the CCS (or pi-calculus) specification, except for queues: you can implement queues as passive objects if you prefer. Note that in this case the methods of the queues should be synchronized.
    Note: There are testbooks presenting CC++ or Java programs solving this problem in various fashions. Therefore, a solution containing only the Java implementation, or in which the Java implementation does not correspond to the CCS (or pi-calculus) specification, will be considered absolutely insufficient.

    It is not strictly requested to prove the correcteness of the CCS (or pi-calculus) specification, but it would be appreciated (in a concrete way, i.e. it will contribute to the final grade). The correctness consists in proving that the system is (weakly) bisimilar to the process P(1), where P(n) is defined inductively as follows:

    P(n) = out^(F(n)). P(n+1)
    where F(n) is the n-th prime number starting from 2.

  4. A prototype for the pi-calculus
    This project consists in defining in lambda Prolog a prototype for the pi-calculus. More specifically, the prototype should simulate (obviously in a sequential fashion) the transition relation of the pi-calculus, i.e. the lambda Prolog program should contain the definition of a predicate trans : Proc -> Act -> Proc -> o such that (trans P alpha Q) holds if and only if there is a alpha-transition from P to Q (in the operational semantics of the pi-calculus). You can define also other variants of this relation if convenient.

  5. A theory for asynchronous communication
    This project consists in investigating the theory of testing semantics for the calculus of asynchronous communication presented in
    Frank S. de Boer, Jan Willem Klop, and Catuscia Palamidessi. Asynchronous communication in process algebra. In Proc. of the seventh annual IEEE symposium on Logics in Computer Science (LICS), pages 137-147. IEEE Computer Society Press, Los Alamitos, California, 1992.
    This is a "fresh topic": the theories which have been investigated so far for this calculus are relative to trace, bisimulation and failure set semantics, but not testing.

    If you are interested in this project please contact me for reference material about testing semantics.