{"id":25395071,"url":"https://github.com/barghouthi/cs704","last_synced_at":"2026-01-22T01:34:21.474Z","repository":{"id":63732053,"uuid":"118251716","full_name":"barghouthi/cs704","owner":"barghouthi","description":"CS 704 course website - Principles of Programming Languages","archived":false,"fork":false,"pushed_at":"2022-11-24T19:51:05.000Z","size":97112,"stargazers_count":67,"open_issues_count":1,"forks_count":15,"subscribers_count":10,"default_branch":"master","last_synced_at":"2025-04-10T17:00:20.764Z","etag":null,"topics":["course","graduate-course","programming-languages"],"latest_commit_sha":null,"homepage":"","language":"TeX","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/barghouthi.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2018-01-20T14:49:22.000Z","updated_at":"2024-12-10T16:24:21.000Z","dependencies_parsed_at":"2022-11-24T22:33:18.395Z","dependency_job_id":null,"html_url":"https://github.com/barghouthi/cs704","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/barghouthi/cs704","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/barghouthi%2Fcs704","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/barghouthi%2Fcs704/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/barghouthi%2Fcs704/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/barghouthi%2Fcs704/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/barghouthi","download_url":"https://codeload.github.com/barghouthi/cs704/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/barghouthi%2Fcs704/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":28649472,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-01-22T01:17:37.254Z","status":"ssl_error","status_checked_at":"2026-01-22T01:17:35.564Z","response_time":86,"last_error":"SSL_read: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["course","graduate-course","programming-languages"],"created_at":"2025-02-15T19:53:46.149Z","updated_at":"2026-01-22T01:34:21.452Z","avatar_url":"https://github.com/barghouthi.png","language":"TeX","funding_links":[],"categories":[],"sub_categories":[],"readme":"#  Principles of Programming Languages\n## CS 704 | Spring 2022\n\n| τ | τ' |\n|-|-|\n|When | Tu/Th 1-2:15 |\n|Where | CS 1263 |\n|Who | [Aws Albarghouthi](http://www.cs.wisc.edu/~aws) |\n|Office hours | Tue ~Thu~ 215-300 in CS 6363 |\n\nAll notes and assignments wil be posted on this website. \n\nSubmission of assignments and course project deliverables is via Canvas.\n\nAnonymous feedback can be submitted on this [Google form](https://goo.gl/forms/UsfJOK4TetQU0zYp1)\n\n## Course description\nThis 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.\n\nThe goal is to expose students to a range of mathematical and practical tools for reasoning about programs.\n\n## Lectures\nThe following will be populated as the course progresses:\n\n#### Week 1 (Jan 24) Lambda calculus\n\n* **Tue** Welcome to the course / Intro to the beautiful lambda calculus\n  * [notes](notes/cs704-lec-1-22-2010.pdf)\n  * Ch. 5 of TAPL \n\n* **Thu**  Computing with lambda calculus\n  * [notes](notes/cs704-lec-01-25-2010.pdf) \n  * Chs. 5 and 6 of TAPL\n  \n*you might also find helpful the notes from Sampson's Cornell class—[this](http://www.cs.cornell.edu/courses/cs6110/2017sp/lectures/lec02.pdf) and [this](http://www.cs.cornell.edu/courses/cs6110/2017sp/lectures/lec03.pdf)*\n\n#### Week 2 (Jan 31) Programming constructs \u0026 fixpoints in lambda calculus\n* **Tue** Programming constructs in lambda calclus\n  * [notes](notes/cs704-lec-01-29-2010.pdf)\n  * Ch. 5 of TAPL \n\n* **Thu**  OCaml tutorial\n\n[*Asn 1 out*](http://pages.cs.wisc.edu/~aws/courses/cs704-asn/asn1)\n\n#### Week 3 (Feb 7) Fixpoints and project ideas\n* **Tue**  Fixpoints in lambda calculus\n  * [notes](notes/cs704-lec-01-29-2010.pdf) (same as Tue)\n  * [code from class](code/fixpoint_combinators.py)\n  *   \u003ca href=\"http://matt.might.net/articles/implementation-of-recursive-fixed-point-y-combinator-in-javascript-for-memoization/\"\u003e Matt Might's blog: Y combinator in JS\u003c/a\u003e\n        (See Might's other lambda calculus posts too.)\n  * See [this nice blog post on deriving the Y combinator](https://invenia.github.io/blog/2018/08/20/ycombinator/)\n\n* **Tue** Introduction to types\n  * Ch. 8 of TAPL\n\n#### Week 4 (Feb 14) Types\n* **Tue** Simply typed lambda calculus\t\n  * Ch. 9 of TAPL\n  \n* **Thu** Project meetings\n\n*you might also find helpful the notes from Sampson's Cornell class—[this](http://www.cs.cornell.edu/courses/cs6110/2017sp/lectures/lec19.pdf) and [this](http://www.cs.cornell.edu/courses/cs6110/2017sp/lectures/lec20.pdf)*\n\n#### Week 5 (Feb 21) Types continued\n* **Tue** Type inference\n  * Ch. 22 of TAPL\n  \n* **Thu** Types for an imperative language\n  * Ch. 3 of SPA (Ch. 2 has language definition)\n  \n*you might also find helpful the notes from Sampson's Cornell class—[this](http://www.cs.cornell.edu/courses/cs6110/2017sp/lectures/lec23.pdf) and [this](http://www.cs.cornell.edu/courses/cs6110/2017sp/lectures/lec24.pdf)*\n\n#### Week 6 (Feb 28) Semantics\n* **Tue** Operational semantics\n  * The class presentation is based on Nielsen and Nielsen's book [Sem] -- see their comprehensive slides [here](http://www.imm.dtu.dk/~hrni/SWA/SwA_presentations/SwA-2a-natural.pdf)\n  \n  \n* **Thu** Axiomatic semantics\n  * The class presentation is based on Nielsen and Nielsen's book [Sem] -- see their comprehensive slides [here](http://www.imm.dtu.dk/~hrni/SWA/SwA_presentations/SwA-9-axiomatic.pdf)\n\n*you might also find helpful Chs 7 (operational semantics) and 12 (axiomatic semantics) of [Chlipala's FRAP book](http://adam.chlipala.net/frap/), which is freely available*\n\n#### Week 7 (Mar 7) Logic \u0026 SAT/SMT\n\n* **Tue** Propositional logic and SAT solvers\n  * The class presentation will follow Dillig's slides: [here](http://www.cs.utexas.edu/~isil/cs389L/lecture1-6up.pdf) and [here](http://www.cs.utexas.edu/~isil/cs389L/lecture2-6up.pdf)\n  \n  \n* **Thu** First-order logic and SMT solvers\n  * The class presentation will follow Dillig's slides: [here](http://www.cs.utexas.edu/~isil/cs389L/lecture6-6up.pdf) and [here](http://www.cs.utexas.edu/~isil/cs389L/lecture7-6up.pdf) and [here](http://www.cs.utexas.edu/~isil/cs389L/lecture10-6up.pdf)\n\n*For more references, consult Bradley and Manna's book [CofC]—see references below*\n\n#### Week 8 (Mar 21) Transition systems \u0026 program encodings \n* **Tue** Bounded encodings\n  * [notes](notes/transRelEnc.pdf)\n  \n#### Week 9 (Mar 28) Automated verification\n* **Tue** Bounded encodings and Z3 solver\n  * [notes](notes/transRelEnc.pdf) (same as last time)\n  * [colab](https://colab.research.google.com/drive/1ZCzVuJk4nfKYzM0L8lalmXOYdpBk2vCg?usp=sharing)\n\n* **Thu** Invariant generation with Horn clauses\n  * [notes](notes/hornClauses.pdf)\n \n#### Week 10 (Apr 4) Automated verification continued\n* **Tue** Invariant generation with predicate abstraction\n  * [notes](notes/hornClauses.pdf) (same as last time)\n  * [colab](https://colab.research.google.com/drive/1qHqbHdkZj-hc7GIAAsAOD6Aw9FgKQxVd?usp=sharing)\n\n* **Thu** Lattice theory\n  * SPA ch. 4\n\n#### Week 11 (Apr 11) Applications of abstract interpretation\n* **Tue** Lattice theory\n  * SPA ch. 4\n \n* **Thu** Abstract interpretation of programs\n  * SPA ch. 10\n\n#### Week 12 (Apr 18) Applications of abstract interpretation (continued)\n* **Tue** Abstract interpretation of programs\n  * SPA ch. 10\n\n* **Thu** Numerical domains\n  * SPA ch. 6\n  \n#### Week 13 (Apr 25) \n* **Tue** Termination\n  * [Marktoberdorf notes](https://www.cs.tufts.edu/comp/150BUGS/terminator-principles.pdf)\n\n* **Thue** *project presentations*\n#### Week 14 (May 2)\n*project presentations*\n\n## Assignments\nAssignments will be posted here:\n\n| Assignment | Due date |\n| - | - |\n| [asn1](http://pages.cs.wisc.edu/~aws/courses/cs704-asn/asn1)  | Feb 15 |\n| [asn2](asn/asn2.pdf)  | Mar 14 |\n| [asn3](asn/asn3.pdf)  | April 15 |\n| [asn4](asn/asn4.pdf)  | Apr 30 |\n\n\n## Evaluation\nPerformance will be evaluated as follows:\n\n| Task | X% |\n| - | - |\n| Research project | 45% |\n| Assignments (4) | 40%|\n| Project presentation | 10% |\n| Class participation | 5% |\n\n\n## Course Project\nFor the final project, you can work on a problem of your choice with a partner or by yourself.\n\n* **Deliverable 1 (Feb 14)**   Send me a list of three project ideas.\n\n* 5%: **Deliverable 2 (Feb 25)**  Submit a 2-3 page proposal including the following:\nThe statement of the problem to be investigated\nAn explanation of why the problem is interesting\nA description of what you propose to do.\nExplain the elements that you will have to build.\nExplain the elements that you can pick up from open-source sites.\nExplain the experiment(s) or performance measurement(s) that you plan to carry out. Two good approaches are\nState the hypothesis that you hope to refute.\nComplete the following sentence: \"The experiments were designed to shed light on the following questions: . . .\"\nThen explain what you plan to measure; how you will measure it (if it is not obvious); and where you will obtain test cases.\nList the tasks, broken down into two or three milestones\n\n* 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\".\n\n* 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.\n\n* 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](http://homepages.math.uic.edu/~bshipley/sample.short.tex). \n\n## Resources\nThere 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.\n\nThis is an excellent reference for our lambda calculus and types material\n\n* [TAPL] Pierce, \u003ca href=\"https://search.library.wisc.edu/catalog/999923278402121\"\u003e Types and Programming Languages.\u003c/a\u003e The MIT Press, 2002.\n\nThis is a free and excellent book that covers most material we cover in 704\n\n* [FRAP] Chlipala \u003ca href=\"http://adam.chlipala.net/frap/\"\u003eFormal Reasoning About Programs\u003c/a\u003e\n\nThis is a fantastic (I think it's the best) book on static program analysis\n\n* [SPA] Møller and Schwartzbach [Static Program Analysis](https://cs.au.dk/~amoeller/spa/)\n\n\nThis book talks about decision procedures\nand their applications in verification.\n\n* [CofC] Bradley and Manna, \u003ca href=\"http://search.library.wisc.edu/catalog/ocn190764844\"\u003e The Calculus of Computation.\u003c/a\u003e Spring, 2007.\n\nThis is a short book on\noperational, axiomatic, and denotational semantics.\n\n* [Sem] Nielson and Nielson \u003ca href=\"http://www.imm.dtu.dk/~hrni/SWA/swa.html\"\u003e Semantics with Applications.\u003c/a\u003e Springer, 2007.\n\nThe following book covers data-flow analysis\nand abstract interpretation.\n\n* [PA] Nielson et al., \u003ca href=\"http://search.library.wisc.edu/catalog/ocm42579405\"\u003e Principles of Program Analysis \u003c/a\u003e Springer, 1999.\n\nThis is another abstract interpretation resource.\n\n* [AI] Abramsky and Hankin, \u003ca href=\"https://www.cs.virginia.edu/~weimer/2007-615/reading/AbramskiAI.pdf\"\u003e An Introduction to Abstract Interpretation.\u003c/a\u003e\n  \nThere are multiple courses at other universities\nthat overlap with the material we cover in CS704. Here are some that I found helpful:\n\n* \u003ca href=\"https://www.cs.cmu.edu/~15414/schedule.html\"\u003e Fredrikson \u0026 Platzer's course at CMU \u003c/a\u003e\n* \u003ca href=\"https://www.cs.cornell.edu/courses/cs6110/2018sp/schedule.html\"\u003e Sampson's class at Cornell \u003c/a\u003e\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fbarghouthi%2Fcs704","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fbarghouthi%2Fcs704","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fbarghouthi%2Fcs704/lists"}