| 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.