We'll study techniques for thinking crisply about programming languages, write some fascinating programs, and discuss various design tradeoffs. We will roughly follow Dan Grossman's traditional 505 material using the Coq proof assistant.
|Meeting||Mon, Wed 9:30 ARC G070|
|Instructor||Zach Tatlock (ztatlock@cs)|
|Thu 9:30 CSE 546|
|TA||Konstantin Weitz (weitzkon@cs)|
|Tue 9:30 CSE 218|
|Tutor||James Wilcox (jrw12@cs)|
|Fri 13:30 CSE 674|
|Tutor||Eric Mullen (emullen@cs)|
|Fri 13:30 CSE 674|
|Tutor||Joe Redmon (pjreddie@cs)|
|Fri 13:30 CSE 674|
We'll read and discuss a handful of papers this quarter. Most of the readings are relatively non-technical; they're intended to foster discussion and debate. By noon the day before each discussion, please submit a short review. Your review should have three small paragraphs: (1) a high-level summary of the paper and a concise recap of its main take-away; (2) a description of what you most valued learning from the paper and what the paper's greatest strengths are; and (3) a discussion of what you disagreed with or felt could be improved to make the paper stronger.
Please submit your reviews in
plain text format
in a single file,
including only ASCII characters (no Unicode please),
.txt file extension,
(Please note, this means you should NOT submit a PDF!)
Please work on your problem sets with a partner. It should be more fun and help you meet folks in the department you may not have otherwise gotten a chance to work with. To find a partner who is not in your lab, try the Piazza partner search. Also, make sure to work with a different partner for each problem set. Only one member of each team should submit a solution. Please clearly indicate both team members in a comment at the top of your submission. Happy hacking :)
Also, make sure to check out Joe's tactic index to get up to speed with Coq tactics and see what's available!
Submit problem sets via the 505 Dropbox. If you absolutely must, you can submit up to 2 days late, but the policy is to subtract 10% per day.
Unlike problem sets, exams should be entirely your own work. Please submit your exam via the 505 Dropbox.
You can always get help on Piazza, but nothing beats a genuine face-to-face meeting.
If you'd like to interact with a real person please come to Zach's office hours (Thu 9:30 CSE 546), Konne's office hours (Tue 9:30 CSE 218), or drop in on the Coq Tutoring sessions (Fri 1:30 CSE 674). Because schedules are hectic, some times and locations may change throughout the quarter, so we've included the exact schedule for in-person help below:
This course will use CoqIDE 8.5pl2 and OCaml 4.02 or later. We have provided a VM with all the required software, or you can set up your own machine.
Using the provided VM.
sudo apt-get install menhir(Thanks to Everett Maus for pointing this out!)
Setting up an Ubuntu machine.
apt-get update && apt-get install -y \ camlp5 \ libpcre-ocaml-dev \ libpcre3-dev \ pkg-config \ liblablgtksourceview2-ocaml-dev
curl -O https://coq.inria.fr/distrib/8.5pl2/files/coq-8.5pl2.tar.gz tar -xvf coq-*.tar.gz cd coq-* ./configure \ -bindir /usr/local/bin \ -libdir /usr/local/lib/coq \ -configdir /etc/xdg/coq \ -datadir /usr/local/share/coq \ -mandir /usr/local/share/man \ -docdir /usr/local/share/doc/coq \ -emacs /usr/local/share/emacs/site-lisp \ -coqdocdir /usr/local/share/texmf/tex/latex/misc make; sudo make install
$ ocaml -version The OCaml toplevel, version 4.02.3 $ coqc --version The Coq Proof Assistant, version 8.5pl2 (September 2016) $ coqide
Setting up an OS X machine.
to your ~/.bashrc file. Create that file if it does not already exist. Also, add the following lines to ~/.bash_profile if they are not already there in order to activate your ~/.bashrc file.export PATH=/Applications/CoqIDE_8.5pl2.app/Contents/Resources/bin:$PATH
To test, open a new terminal and type coqc --version. You should see something like this:if [ -f ~/.bashrc ]; then source ~/.bashrc fi
The Coq Proof Assistant, version 8.5pl2 (July 2016) compiled on Jul 8 2016 13:35:37 with OCaml 4.02.3
This command may take some time (5 minutes) to complete and is a good opportunity to go to the PLSE lab (CSE 407) and enjoy the free coffee/tea and company!brew install ocaml ocamlbuild menhir
$ ocaml -version The OCaml toplevel, version 4.03.0 $ ocamlbuild -version ocamlbuild 0.9.2 $ menhir --version menhir, version 20160526
Joe is leading the development of a new tactic index to help you learn what Coq tactics are available and how they work. Check it out and send us feedback!
Pierce's superb Software Foundations is very closely related to our course.
Chlipala's excellent Certified Programming with Dependent Types is great for continuing to develop more advanced Coq hacking skills.
The classic 505 materials and Types and Programming Language textbook are also excellent for learning all the material we'll cover in class and more, but from a traditional pen-and-paper perspective.
For some notes on bullets in proof scripts, see "Structuring proofs with bullets" and the Coq manual on bullets.