Start of topic | Skip to actions
Scribe: Angela Zhu Date: 2007-04-09

Things done and TODOs

What have we learned so far:

In this semester, our seminar focuses more on implementation. We also talk about some theory and formal methods, mostly in the demands of implementation. It is nice to know that we can program in concoqtion without knowing too much about underneath formal theory and meta theory.

Concoqtion applied projects:

  • Sized lists:
    • Simple functions: map, zip, append, fold
    • More trickier ones: size_it, at_size
    • Sorting (bubble sort is finished)
    • FFT
  • Braun trees
    • We did: insert, size_it
    • We failed: delete
  • Lambda calculus
    • unstaged intepreter
    • type checker
    • staged intepreter (TODO)
  • Sparse matrics (was discussed in class, no implementation)
  • TODOs
    • Arrays and Matrices
    • Circuits

Concoqtion alternatives:

  • Extraction
    • extract data types from Coq

Things learned on demand

  • Context refinement is tricky.
    • Joesph comments that without context refinement we are still able to tackle some of the problems we met, although in a clumsy way.
  • How to use "cast" function.
  • How does normalization work.

When we prove things like associativity and commutativity of "plus". We might need the basic inductive definition of "plus". It is funny that we've seen and use some functions like plus for years but care about there definition until we go to college. This is because such functions have several layers, and most time, implementation details are hidded. But when we want to reason about them, we need to go from scratch. These normalization module and abstract layers can help us write programs without handling the definitions at the bottom. Without these features, we can still write a program, but it will be very complicated and big in size.

Theories discussed

  • Lambda caculus as proofs
  • Curry Hoaward isomorphism
  • Extraction project.
  • Interpreters and Tagless interpreters.
  • Polymorphism, index types
  • Existential
  • Casting
  • Product & sum types.
  • Basic ideas from catagory theory.
  • One guest lecture on "Fortress"
  • Type drive design (The semantics of types)
    • Help you figure out what you want to do
  • Inhabitance of type
  • Measuring time

Trouble spots

  • Big list
  • Concoqtion syntax (very bad when you first start)
    • The interface provided by concoqtion is very limited, but the we can gaurantee termination here.
    • Not everything in Coq terminates because of the tactics.
    • It is hard to come up with a good demo system that whenever you
give it a program, it will display to you the theorem for that. This fact almost killed formal methods in practive. Usually, formal methods is good in programs of small shape, but it is hard to get it work for very big systems. That is why to convince people the power of formal methods is hard. Formal methods are more successful in hardware community, because hardware are much easier software.

Future topics

  • Error messages
  • Lambda cube
  • More guest lectures.
    • There is a guy from SLB want to come and talk about tools for finding bugs.
  • Measuring times
  • How does normalization work
    • Can we use more powerful reduction of Coq
  • DSL desing and implementation

Bigger projects

  • Old projects on 617S07 webpage
  • Searching algorithms
  • DSL design and implementation.

Homeworks

  • Finish implementing the "delete" function of braun tree.
  • Convert the interpreter to a staged one.


End of topic
Skip to actions | Back to top
Creative Commons LicenseThis work is licensed under a Creative Commons Attribution 2.5 License. Please follow our citation guidelines.