bkc39 / Coq311

A course in Functional Programming and Data Structures
GNU General Public License v2.0
2 stars 0 forks source link

Syllabus + Lecture Schedule #10

Open bkc39 opened 9 years ago

bkc39 commented 9 years ago

Ok, we are finally getting this repo up to a point where we can start writing lecture notes. I think we should agree on what topics we plan to cover as well as the individual lectures that we plan to write so that we can start making issues and working on these individually.

Here is a rough outline for how I think that this should go. I think we should model the course at a high level off of the version offered by Nate in 2014sp. He has 6 high level topics:

  1. Introduction to Functional Programming
  2. Mutability
  3. Formal Verification
  4. Asynchronous Programming
  5. Analysis of Algorithms
  6. Advanced Topics

Here are my feelings:

At a high level I think our syllabus should look like:

  1. Introduction to Functional Programming
  2. Data Structures
  3. Side Effects

Here is the lecture schedule that I propose:

  1. Introduction To Functional Programming
    • Expressions and their evaluation.
    • Intuitionistic Propositional Logic
    • The Curry Howard Isomorphism
    • Natural Numbers and Induction
    • Lists and Induction
    • Trees and Induction
  2. Data Structures
    • Common Abstract Data Types
      • Stack
      • Queue
      • Heap
      • Set
      • Map
    • Self-Balancing Binary Trees
      • Splay Tree
      • 2-3 Tree
      • Red/Black Tree
    • Algebraic Properties of Data Types
      • Functors
      • Pointed and Applicative Functors
      • Foldable types
      • Traversable types
      • Introduction to Category Theory
  3. Side Effects
    • Mutable References and Pitfalls of Side Effects
    • Semantics of IMP via translation to a functional language
    • Monads
    • Monad Transformers
    • Free Monads and Abstract Interpretation

Here is my rationale for the above:

This totals 24 lectures, compared to the 27 lectures and 27 recitations of CS 3110. Overall, I think this syllabus better reflects the title Functional Programming and Data Structures.

We should discuss and finalize this syllabus ASAP so we can begin working on writing the notes.

bkc39 commented 9 years ago

Oh as a note, I think that predicate logic will naturally be included during the " and Induction" lectures. We could just have a brief subsection talking about how to extend IPL with the relevant judgments. Identity and refl will be treated similarly, although we may want to include that in the treatment of IPL.

bennn commented 9 years ago

For 1, I was thinking

bennn commented 9 years ago

Also I think the rest of the lectures are great. We may want to turn up on more data structures, or write typed / dep.typed interpreters as the final, but this is exactly what I was thinking (monads included) for the core of the course.

bkc39 commented 9 years ago

Ok, I agree that the beginning may have IPL sort of coming out of left field and perhaps it will be a bit unmotivated to a novice. I think using Curry-Howard is a good way to introduce programming and proving simultaneously, even if the deeper implications are ignored at the beginning or put in a black diamond section. Basically,

This way our treatment of algebraic data types and structural induction are all instances of the same unifying framework. I think that the benefits of this make up for the apparent non-sequitur in Lecture 2.

Also, I agree that testing should be covered in the beginning. The question is how to integrate it correctly.

I haven't given any thought to how the problem set schedule would correspond to this. The only thing I know is that PS 1 gets released on the day of the first lecture. We should probably make a separate issue to talk about problem sets though.