Coder Social home page Coder Social logo

cs704's Introduction

Principles of Programming Languages

CS 704 | Spring 2022

τ τ'
When Tu/Th 1-2:15
Where CS 1263
Who Aws Albarghouthi
Office hours Tue Thu 215-300 in CS 6363

All notes and assignments wil be posted on this website.

Submission of assignments and course project deliverables is via Canvas.

Anonymous feedback can be submitted on this Google form

Course description

This course covers a range of topics in programming languages, including lambda calculus and type theory, functional programming, logics for encoding programs, and automated verification techniques.

The goal is to expose students to a range of mathematical and practical tools for reasoning about programs.

Lectures

The following will be populated as the course progresses:

Week 1 (Jan 24) Lambda calculus

  • Tue Welcome to the course / Intro to the beautiful lambda calculus

  • Thu Computing with lambda calculus

    • notes
    • Chs. 5 and 6 of TAPL

you might also find helpful the notes from Sampson's Cornell class—this and this

Week 2 (Jan 31) Programming constructs & fixpoints in lambda calculus

  • Tue Programming constructs in lambda calclus

  • Thu OCaml tutorial

Asn 1 out

Week 3 (Feb 7) Fixpoints and project ideas

Week 4 (Feb 14) Types

  • Tue Simply typed lambda calculus

    • Ch. 9 of TAPL
  • Thu Project meetings

you might also find helpful the notes from Sampson's Cornell class—this and this

Week 5 (Feb 21) Types continued

  • Tue Type inference

    • Ch. 22 of TAPL
  • Thu Types for an imperative language

    • Ch. 3 of SPA (Ch. 2 has language definition)

you might also find helpful the notes from Sampson's Cornell class—this and this

Week 6 (Feb 28) Semantics

  • Tue Operational semantics

    • The class presentation is based on Nielsen and Nielsen's book [Sem] -- see their comprehensive slides here
  • Thu Axiomatic semantics

    • The class presentation is based on Nielsen and Nielsen's book [Sem] -- see their comprehensive slides here

you might also find helpful Chs 7 (operational semantics) and 12 (axiomatic semantics) of Chlipala's FRAP book, which is freely available

Week 7 (Mar 7) Logic & SAT/SMT

  • Tue Propositional logic and SAT solvers

    • The class presentation will follow Dillig's slides: here and here
  • Thu First-order logic and SMT solvers

    • The class presentation will follow Dillig's slides: here and here and here

For more references, consult Bradley and Manna's book [CofC]—see references below

Week 8 (Mar 21) Transition systems & program encodings

  • Tue Bounded encodings

Week 9 (Mar 28) Automated verification

  • Tue Bounded encodings and Z3 solver

  • Thu Invariant generation with Horn clauses

Week 10 (Apr 4) Automated verification continued

  • Tue Invariant generation with predicate abstraction

  • Thu Lattice theory

    • SPA ch. 4

Week 11 (Apr 11) Applications of abstract interpretation

  • Tue Lattice theory

    • SPA ch. 4
  • Thu Abstract interpretation of programs

    • SPA ch. 10

Week 12 (Apr 18) Applications of abstract interpretation (continued)

  • Tue Abstract interpretation of programs

    • SPA ch. 10
  • Thu Numerical domains

    • SPA ch. 6

Week 13 (Apr 25)

Week 14 (May 2)

project presentations

Assignments

Assignments will be posted here:

Assignment Due date
asn1 Feb 15
asn2 Mar 14
asn3 April 15
asn4 Apr 30

Evaluation

Performance will be evaluated as follows:

Task X%
Research project 45%
Assignments (4) 40%
Project presentation 10%
Class participation 5%

Course Project

For the final project, you can work on a problem of your choice with a partner or by yourself.

  • Deliverable 1 (Feb 14) Send me a list of three project ideas.

  • 5%: Deliverable 2 (Feb 25) Submit a 2-3 page proposal including the following: The statement of the problem to be investigated An explanation of why the problem is interesting A description of what you propose to do. Explain the elements that you will have to build. Explain the elements that you can pick up from open-source sites. Explain the experiment(s) or performance measurement(s) that you plan to carry out. Two good approaches are State the hypothesis that you hope to refute. Complete the following sentence: "The experiments were designed to shed light on the following questions: . . ." Then explain what you plan to measure; how you will measure it (if it is not obvious); and where you will obtain test cases. List the tasks, broken down into two or three milestones

  • 5%: Deliverable 3 (Apr 9) Submit a description of progress, implementation plan with completed steps checked off, and experimentation plan. Please turn in an updated proposal (with changes marked with changebars, and your new material added as "Appendix B: Progress Report".

  • 10%: Deliverable 4 (last 2 weeks of class) 10-15 minute oral presentations (plus 5 minutes for questions/discussion) will be given during class. You will need to e-mail me an abstract (in plaintext) giving the title, project participants, and a two-paragraph to three-paragraph summary of what will be presented.

  • 35%: Deliverable 5 (May 7) Final writeup: The final writeup should be modeled after a typical conference paper. There is no length requirement or limit, but I would expect it to be somewhere around 10-15 pages of Single-colum Latex article.

Resources

There are no required textbooks for this class. The following is a list of books that should be useful references for different parts of the course.

This is an excellent reference for our lambda calculus and types material

This is a free and excellent book that covers most material we cover in 704

This is a fantastic (I think it's the best) book on static program analysis

This book talks about decision procedures and their applications in verification.

This is a short book on operational, axiomatic, and denotational semantics.

The following book covers data-flow analysis and abstract interpretation.

This is another abstract interpretation resource.

There are multiple courses at other universities that overlap with the material we cover in CS704. Here are some that I found helpful:

cs704's People

Contributors

barghouthi avatar mmjb avatar stjacks avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

cs704's Issues

Somthing potentially wrong with ToDeBruijinCheck.ml

In the default ToDeBuijnCheck.ml,
at line 10, it prints out the original lambda expression before printing out the output of function to_debruijn, thus the script will consider the output incorrect.

I bypassed this issue by copying the entire code skeleton folder and comment out line 10, but if this code is a part of the automated tester for grading, then probably this issue needs to be fixed

rlwrap: Cannot execute ocamlc: No such file or directory

I'm having trouble getting "rlwrap ocamlc" to run. Do you notice something I'm doing incorrectly or a step I might be missing?

  1. Connect to "best-linux.cs.wisc.edu" using PuTTY

  2. Add rlwrap and ocaml to the PATH environment variable
    $ PATH=$PATH:/unsup/rlwrap/amd64_rhel6/bin:/unsup/ocaml/amd64_rhel7/bin

  3. Attempt to run "rlwrap ocamlc" - at this point I receive the error "rlwrap: Cannot execute ocamlc: No such file or directory."
    $ rlwrap ocamlc
    rlwrap: Cannot execute ocamlc: No such file or directory

Note that if I enter "ocamlc" at the prompt by itself, I receive the following message:
$ ocamlc
-bash: /unsup/ocaml-4.02.3/amd64_rhel7/bin/ocamlc: /unsup/ocaml-4.02.3/@sys/bin/ocamlrun: bad interpreter: No such file or directory

While if I enter "rlwrap" at the prompt by itself, I receive the following message:
$ rlwrap
Usage: rlwrap [options] command ...
Options:
...
bug reports, suggestions, updates:
http://utopia.knoware.nl/~hlub/uck/rlwrap/
$

Thank you!

PROG1 PATH specified in grab script seems to be incorrect

In the file /u/a/w/aws/public/html/courses/cs704-code/asn1/grab

PROG1 is set to some folder under cs704-s17

PROG1='/u/a/w/aws/public/html/courses/cs704-s17/code/asn1'

which doesn't exist
I think it should be
PROG1='/u/a/w/aws/public/html/courses/cs704-code/asn1'
instead

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.