Schedule

Week 1

Thursday: introductions

Week 2

Relational programming.

The first pre-defined assignment is to implement microKanren in the language of one's choice.
Due November 1.

Tuesday: miniKanren

Thursday: microKanren

Week 3

Formal methods.

The second pre-defined assignment is to implement a sudoku solver using an SMT solver in the language of one's choice.
Or another problem using an SMT solver.
Or a sudoku solver using another approach and comparing with an existing SMT-based sudoku solver.
Due November 1.

Tuesday: SMT solvers

Thursday: Dafny

Week 4

Tuesday: Penrose

Thursday: Open, Extensible Object Models

Week 5

Tuesday: Gen: A General-purpose Probabilistic Programming System with Programmable Inference

Thursday: Formal verification of higher-order probabilistic programs: reasoning about approximation, convergence, Bayesian inference, and optimization

Week 6

Tuesday: Dex: array programming with typed indices

Thursday: OMeta: An Object-Oriented Language for Pattern-Matching

Week 7

Tuesday: DiffTaichi: Differentiable Programming for Physical Simulation

Thursday: Pytorch

Week 8

Tuesday: Formulog

Thursday: On fast large-scale program analysis in Datalog

Week 9

Tuesday: egg

Thursday: Grammar Variational Autoencoder

Week 10

Tuesday: assignment debriefing

Thursday: Bluespec

November

See calendar

Final Week of Classes

Tuesday: Final Project Presentations

Thursday: Final Project Presentations