├── assets └── images │ └── kevin.jpg ├── lectures ├── lecture27-sl.pdf ├── lecture02-sygus.pdf ├── lecture06-tdp.pdf ├── lecture09-vsa.pdf ├── lecture12-smt.pdf ├── lecture16-dpll.pdf ├── lecture19-cegis.pdf ├── lecture21-types.pdf ├── lecture32-bayes.pdf ├── lecture08-euphony.pdf ├── lecture13-euphony.pdf ├── lecture20-cegis2.pdf ├── lecture23-brahma.pdf ├── lecture23-types2.pdf ├── lecture28-effects.pdf ├── lecture01-overview.pdf ├── lecture05-eusolver.pdf ├── lecture07-weighted.pdf ├── lecture10-fta-egraph.pdf ├── lecture11-stochastic.pdf ├── lecture17-constraint.pdf ├── lecture30-abstract.pdf ├── lecture30-absynthe.pdf ├── lecture34-learning.pdf ├── lecture03-enumeration.pdf ├── lecture22-brahma-types.pdf ├── lecture31-regae-rbsyn.pdf ├── lecture33-distribution.pdf ├── lecture35-optimization.pdf ├── lecture18-specifications.pdf ├── lecture25-sketch-synquid.pdf ├── lecture36-neurosymbolic.pdf └── lecture04-equivalence-reduction.pdf ├── _announcements ├── week-0.md └── week-1.md ├── Gemfile ├── .gitignore ├── _layouts ├── module.html ├── announcement.html ├── staffer.html └── schedule.html ├── _sass └── custom │ ├── announcement.scss │ ├── card.scss │ ├── staffer.scss │ ├── custom.scss │ ├── module.scss │ └── schedule.scss ├── _staffers ├── evil-kevin.md ├── more-evil-kevin.md ├── really-evil-kevin.md └── kevin.md ├── .github └── ISSUE_TEMPLATE │ ├── config.yml │ ├── feature_request.md │ └── bug_report.md ├── _modules ├── week-16.md ├── week-14.md ├── week-15.md ├── week-13.md ├── week-01.md ├── week-02.md ├── week-03.md ├── week-05.md ├── week-08.md ├── week-09.md ├── week-12.md ├── week-06.md ├── week-07.md ├── week-10.md ├── week-04.md └── week-11.md ├── schedule.md ├── announcements.md ├── README.md ├── readings.md ├── _includes └── minutes.liquid ├── LICENSE ├── _schedules └── weekly.md ├── about.md ├── _config.yml ├── projects.md ├── synx.md └── syllabus.md /assets/images/kevin.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ngsankha/eecs700/main/assets/images/kevin.jpg -------------------------------------------------------------------------------- /lectures/lecture27-sl.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ngsankha/eecs700/main/lectures/lecture27-sl.pdf -------------------------------------------------------------------------------- /lectures/lecture02-sygus.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ngsankha/eecs700/main/lectures/lecture02-sygus.pdf -------------------------------------------------------------------------------- /lectures/lecture06-tdp.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ngsankha/eecs700/main/lectures/lecture06-tdp.pdf -------------------------------------------------------------------------------- /lectures/lecture09-vsa.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ngsankha/eecs700/main/lectures/lecture09-vsa.pdf -------------------------------------------------------------------------------- /lectures/lecture12-smt.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ngsankha/eecs700/main/lectures/lecture12-smt.pdf -------------------------------------------------------------------------------- /lectures/lecture16-dpll.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ngsankha/eecs700/main/lectures/lecture16-dpll.pdf -------------------------------------------------------------------------------- /lectures/lecture19-cegis.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ngsankha/eecs700/main/lectures/lecture19-cegis.pdf -------------------------------------------------------------------------------- /lectures/lecture21-types.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ngsankha/eecs700/main/lectures/lecture21-types.pdf -------------------------------------------------------------------------------- /lectures/lecture32-bayes.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ngsankha/eecs700/main/lectures/lecture32-bayes.pdf -------------------------------------------------------------------------------- /lectures/lecture08-euphony.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ngsankha/eecs700/main/lectures/lecture08-euphony.pdf -------------------------------------------------------------------------------- /lectures/lecture13-euphony.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ngsankha/eecs700/main/lectures/lecture13-euphony.pdf -------------------------------------------------------------------------------- /lectures/lecture20-cegis2.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ngsankha/eecs700/main/lectures/lecture20-cegis2.pdf -------------------------------------------------------------------------------- /lectures/lecture23-brahma.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ngsankha/eecs700/main/lectures/lecture23-brahma.pdf -------------------------------------------------------------------------------- /lectures/lecture23-types2.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ngsankha/eecs700/main/lectures/lecture23-types2.pdf -------------------------------------------------------------------------------- /lectures/lecture28-effects.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ngsankha/eecs700/main/lectures/lecture28-effects.pdf -------------------------------------------------------------------------------- /lectures/lecture01-overview.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ngsankha/eecs700/main/lectures/lecture01-overview.pdf -------------------------------------------------------------------------------- /lectures/lecture05-eusolver.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ngsankha/eecs700/main/lectures/lecture05-eusolver.pdf -------------------------------------------------------------------------------- /lectures/lecture07-weighted.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ngsankha/eecs700/main/lectures/lecture07-weighted.pdf -------------------------------------------------------------------------------- /lectures/lecture10-fta-egraph.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ngsankha/eecs700/main/lectures/lecture10-fta-egraph.pdf -------------------------------------------------------------------------------- /lectures/lecture11-stochastic.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ngsankha/eecs700/main/lectures/lecture11-stochastic.pdf -------------------------------------------------------------------------------- /lectures/lecture17-constraint.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ngsankha/eecs700/main/lectures/lecture17-constraint.pdf -------------------------------------------------------------------------------- /lectures/lecture30-abstract.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ngsankha/eecs700/main/lectures/lecture30-abstract.pdf -------------------------------------------------------------------------------- /lectures/lecture30-absynthe.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ngsankha/eecs700/main/lectures/lecture30-absynthe.pdf -------------------------------------------------------------------------------- /lectures/lecture34-learning.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ngsankha/eecs700/main/lectures/lecture34-learning.pdf -------------------------------------------------------------------------------- /lectures/lecture03-enumeration.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ngsankha/eecs700/main/lectures/lecture03-enumeration.pdf -------------------------------------------------------------------------------- /lectures/lecture22-brahma-types.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ngsankha/eecs700/main/lectures/lecture22-brahma-types.pdf -------------------------------------------------------------------------------- /lectures/lecture31-regae-rbsyn.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ngsankha/eecs700/main/lectures/lecture31-regae-rbsyn.pdf -------------------------------------------------------------------------------- /lectures/lecture33-distribution.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ngsankha/eecs700/main/lectures/lecture33-distribution.pdf -------------------------------------------------------------------------------- /lectures/lecture35-optimization.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ngsankha/eecs700/main/lectures/lecture35-optimization.pdf -------------------------------------------------------------------------------- /lectures/lecture18-specifications.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ngsankha/eecs700/main/lectures/lecture18-specifications.pdf -------------------------------------------------------------------------------- /lectures/lecture25-sketch-synquid.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ngsankha/eecs700/main/lectures/lecture25-sketch-synquid.pdf -------------------------------------------------------------------------------- /lectures/lecture36-neurosymbolic.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ngsankha/eecs700/main/lectures/lecture36-neurosymbolic.pdf -------------------------------------------------------------------------------- /_announcements/week-0.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Week 0 Announcement 3 | week: 0 4 | date: 2019-04-01 5 | --- 6 | 7 | Hello world! 8 | {: .fs-5 } 9 | -------------------------------------------------------------------------------- /lectures/lecture04-equivalence-reduction.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ngsankha/eecs700/main/lectures/lecture04-equivalence-reduction.pdf -------------------------------------------------------------------------------- /Gemfile: -------------------------------------------------------------------------------- 1 | source 'https://rubygems.org' 2 | gem 'github-pages', group: :jekyll_plugins 3 | 4 | gem "jekyll", "~> 3.9" 5 | 6 | gem "webrick", "~> 1.8" 7 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | *.gem 2 | .bundle/ 3 | .jekyll-cache/ 4 | .jekyll-metadata 5 | .sass-cache/ 6 | Gemfile.lock 7 | _site/ 8 | node_modules/ 9 | vendor/ 10 | -------------------------------------------------------------------------------- /_layouts/module.html: -------------------------------------------------------------------------------- 1 | 2 |
3 | {{ content }} 4 |
5 | -------------------------------------------------------------------------------- /_sass/custom/announcement.scss: -------------------------------------------------------------------------------- 1 | .announcement { 2 | @extend %card; 3 | 4 | h1, h2 { 5 | @extend .text-gamma; 6 | } 7 | 8 | .announcement-meta { 9 | @extend .text-epsilon; 10 | } 11 | } 12 | -------------------------------------------------------------------------------- /_staffers/evil-kevin.md: -------------------------------------------------------------------------------- 1 | --- 2 | name: Evil Kevin 3 | role: Teaching Assistant 4 | email: me@example.com 5 | website: https://kevinl.info 6 | photo: kevin.jpg 7 | --- 8 | 9 | I like teaching Computer Science! 10 | -------------------------------------------------------------------------------- /_staffers/more-evil-kevin.md: -------------------------------------------------------------------------------- 1 | --- 2 | name: More Evil Kevin 3 | role: Teaching Assistant 4 | email: me@example.com 5 | website: https://kevinl.info 6 | photo: kevin.jpg 7 | --- 8 | 9 | I like teaching Computer Science! 10 | -------------------------------------------------------------------------------- /_staffers/really-evil-kevin.md: -------------------------------------------------------------------------------- 1 | --- 2 | name: Really Evil Kevin 3 | role: Teaching Assistant 4 | email: me@example.com 5 | website: https://kevinl.info 6 | photo: kevin.jpg 7 | --- 8 | 9 | I like teaching Computer Science! 10 | -------------------------------------------------------------------------------- /.github/ISSUE_TEMPLATE/config.yml: -------------------------------------------------------------------------------- 1 | blank_issues_enabled: false 2 | contact_links: 3 | - name: Ask a question 4 | url: https://github.com/kevinlin1/just-the-class/discussions 5 | about: Ask questions and discuss with other community members 6 | -------------------------------------------------------------------------------- /_modules/week-16.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Presentation 3 | --- 4 | 5 | Mon Dec 9 6 | : Project Presentations 7 | : []() 8 | 9 | Wed Dec 11 10 | : Project Presentations 11 | : []() 12 | 13 | Fri Dec 13 14 | : **Project Report Due**{: .label .label-purple } 15 | -------------------------------------------------------------------------------- /_staffers/kevin.md: -------------------------------------------------------------------------------- 1 | --- 2 | name: Kevin Lin 3 | role: Instructor 4 | email: me@example.com 5 | website: https://kevinl.info 6 | photo: kevin.jpg 7 | meta: 8 | Office Hours: Somewhere on the internet 9 | --- 10 | 11 | [Schedule an appointment](#){: .btn .btn-outline } 12 | -------------------------------------------------------------------------------- /_modules/week-14.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Neurosymbolic 3 | --- 4 | 5 | Mon Nov 25 6 | : [Neurosymbolic Synthesis - I](../lectures/lecture36-neurosymbolic.pdf) 7 | : []() 8 | 9 | Wed Nov 27 10 | : **Thanksgiving**{: .label .label-red } 11 | 12 | Fri Nov 29 13 | : **Thanksgiving**{: .label .label-red } 14 | -------------------------------------------------------------------------------- /schedule.md: -------------------------------------------------------------------------------- 1 | --- 2 | layout: page 3 | title: Schedule 4 | description: Listing of course modules and topics by date. 5 | nav_order: 3 6 | --- 7 | 8 | # Schedule 9 | 10 | _Schedule beyond next week is subject to change!_ 11 | 12 | {% for module in site.modules %} 13 | {{ module }} 14 | {% endfor %} 15 | -------------------------------------------------------------------------------- /_modules/week-15.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Presentation 3 | --- 4 | 5 | Mon Dec 2 6 | : [Neurosymbolic Synthesis - II](https://neurosymbolic-learning.github.io/popl23tutorial/neurosymbolic_notebook2.html) 7 | : []() 8 | 9 | Wed Dec 4 10 | : Project Presentations 11 | : []() 12 | 13 | Fri Dec 6 14 | : Project Presentations 15 | : []() 16 | -------------------------------------------------------------------------------- /_modules/week-13.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Neural Synthesis 3 | --- 4 | 5 | Mon Nov 18 6 | : [Learning Complex Distributions](../lectures/lecture34-learning.pdf) 7 | : []() 8 | 9 | Wed Nov 20 10 | : [Synthesis with Optimization](../lectures/lecture35-optimization.pdf) 11 | : []() 12 | 13 | Fri Nov 22 14 | : **SNG Traveling**{: .label .label-yellow } 15 | : []() 16 | -------------------------------------------------------------------------------- /_modules/week-01.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Course Overview and Inductive Synthesis 3 | --- 4 | 5 | Mon Aug 26 6 | : [Course Overview](../lectures/lecture01-overview.pdf) 7 | : []() 8 | 9 | Wed Aug 28 10 | : [Syntax-Guided Synthesis](../lectures/lecture02-sygus.pdf) 11 | : []() 12 | 13 | Fri Aug 30 14 | : [Enumerative Search](../lectures/lecture03-enumeration.pdf) 15 | : []() 16 | -------------------------------------------------------------------------------- /_modules/week-02.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Search Space Pruning 3 | --- 4 | 5 | Mon Sep 2 6 | : **Labor Day**{: .label .label-red } 7 | 8 | Wed Sep 4 9 | : [Enumerative Search (Cont.)](../lectures/lecture03-enumeration.pdf) 10 | : []() 11 | 12 | Fri Sep 6 13 | : [Equivalence Reduction](../lectures/lecture04-equivalence-reduction.pdf) 14 | : [EUSolver](https://www.cis.upenn.edu/~alur/Tacas17.pdf) 15 | -------------------------------------------------------------------------------- /_modules/week-03.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Biasing Search 3 | --- 4 | 5 | Mon Sep 9 6 | : [Paper + Project Discussions](../lectures/lecture05-eusolver.pdf) 7 | : []() 8 | 9 | Wed Sep 11 10 | : [Top-down Propagation](../lectures/lecture06-tdp.pdf) 11 | : []() 12 | 13 | Fri Sep 13 14 | : [Weighted Enumerative Search](../lectures/lecture07-weighted.pdf) 15 | : [EUPhony](https://www.cis.upenn.edu/~alur/PLDI18.pdf) 16 | -------------------------------------------------------------------------------- /_modules/week-05.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Constraint Solving 3 | --- 4 | 5 | Mon Sep 23 6 | : [Stochastic Search](../lectures/lecture11-stochastic.pdf) 7 | : []() 8 | 9 | Wed Sep 25 10 | : [Constraint Solving with SAT/SMT](../lectures/lecture12-smt.pdf) 11 | : []() 12 | 13 | Fri Sep 27 14 | : Symbolic Execution Demo 15 | : [BlinkFill](https://www.microsoft.com/en-us/research/wp-content/uploads/2016/09/vldb16.pdf) 16 | -------------------------------------------------------------------------------- /_modules/week-08.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Deductive Synthesis 3 | --- 4 | 5 | Mon Oct 14 6 | : **Fall Break**{: .label .label-red } 7 | 8 | Wed Oct 16 9 | : [Type-directed Synthesis](../lectures/lecture21-types.pdf) 10 | : []() 11 | 12 | Fri Oct 18 13 | : [Brahma and Type-directed Synthesis (cont.)](../lectures/lecture22-brahma-types.pdf) 14 | : [Sketch](https://link.springer.com/content/pdf/10.1007/s10009-012-0249-7.pdf) 15 | -------------------------------------------------------------------------------- /_layouts/announcement.html: -------------------------------------------------------------------------------- 1 |
2 |

{{ page.title }}

3 | 4 | {% if page.date %} 5 | {{ page.date | date: '%b %e' }} 6 | · 7 | {% endif %} 8 | {% assign minutes = content | strip_html | number_of_words | divided_by: 180.0 | round %} 9 | {{ minutes }} min read 10 | 11 |
12 | {{ content }} 13 |
14 |
15 | -------------------------------------------------------------------------------- /_modules/week-09.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Project and Break 3 | --- 4 | 5 | Mon Oct 21 6 | : [Type-directed Synthesis](../lectures/lecture21-types.pdf) 7 | : []() 8 | 9 | Wed Oct 23 10 | : [Sketch and Synquid](../lectures/lecture25-sketch-synquid.pdf) 11 | : []() 12 | 13 | Fri Oct 25 14 | : [Synthesis with Refinement Types](../lectures/lecture23-types2.pdf) 15 | : [Synquid](https://cseweb.ucsd.edu/~npolikarpova/publications/pldi16.pdf) 16 | -------------------------------------------------------------------------------- /_modules/week-12.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Probabilistic Synthesis 3 | --- 4 | 5 | Mon Nov 11 6 | : [Bayesian View of Synthesis](../lectures/lecture32-bayes.pdf) 7 | : []() 8 | 9 | Wed Nov 13 10 | : **SNG Traveling**{: .label .label-yellow } 11 | : []() 12 | 13 | Fri Nov 15 14 | : [Synthesizing Under a Distribution](../lectures/lecture33-distribution.pdf) 15 | : [Execution-guided Neural Program Synthesis](https://openreview.net/pdf?id=H1gfOiAqYm) 16 | -------------------------------------------------------------------------------- /_modules/week-06.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Program Sketching 3 | --- 4 | 5 | Mon Sep 30 6 | : [How SAT/SMT Solvers Work](../lectures/lecture16-dpll.pdf) 7 | : []() 8 | 9 | Wed Oct 2 10 | : [BlinkFill and Constraint-based Search](../lectures/lecture17-constraint.pdf) 11 | : []() 12 | 13 | Fri Oct 4 14 | : [Specifications](../lectures/lecture18-specifications.pdf) 15 | : []() 16 | 17 | Sun Oct 6 18 | : **Project Proposal Due**{: .label .label-purple } 19 | -------------------------------------------------------------------------------- /_modules/week-07.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Type-driven Synthesis 3 | --- 4 | 5 | Mon Oct 7 6 | : [CEGIS and Program Sketching - I](../lectures/lecture19-cegis.pdf) 7 | : []() 8 | 9 | Wed Oct 9 10 | : [CEGIS and Program Sketching - II](../lectures/lecture20-cegis2.pdf) 11 | : []() 12 | 13 | Fri Oct 11 14 | : [CEGIS and Program Sketching - II (cont.)](../lectures/lecture20-cegis2.pdf) 15 | : [Brahma](https://people.eecs.berkeley.edu/~sseshia/pubdir/synth-icse10.pdf) 16 | -------------------------------------------------------------------------------- /announcements.md: -------------------------------------------------------------------------------- 1 | --- 2 | layout: page 3 | title: Announcements 4 | nav_exclude: true 5 | description: A feed containing all of the class announcements. 6 | --- 7 | 8 | # Announcements 9 | 10 | Announcements are stored in the `_announcements` directory and rendered according to the layout file, `_layouts/announcement.html`. 11 | 12 | {% assign announcements = site.announcements | reverse %} 13 | {% for announcement in announcements %} 14 | {{ announcement }} 15 | {% endfor %} 16 | -------------------------------------------------------------------------------- /_modules/week-10.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Test-driven Synthesis 3 | --- 4 | 5 | Mon Oct 28 6 | : [Synthesis with Refinement Types](../lectures/lecture23-types2.pdf) 7 | : []() 8 | 9 | Wed Oct 30 10 | : [Hoare Logic](https://cmu-program-analysis.github.io/2022/lecture-slides/14-hoare-logic.pdf) 11 | : []() 12 | 13 | Fri Nov 1 14 | : [Separation Logic and Deductive Synthesis](../lectures/lecture27-sl.pdf) 15 | : [Regae](https://glassmanlab.seas.harvard.edu/papers/ips_augex_uist20.pdf) 16 | -------------------------------------------------------------------------------- /_modules/week-04.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Representation-based Search and Stochastic Search 3 | --- 4 | 5 | Mon Sep 16 6 | : [Weighted Enumerative Search (cont.)](../lectures/lecture07-weighted.pdf) and [EuPhony](../lectures/lecture08-euphony.pdf) 7 | : []() 8 | 9 | Wed Sep 18 10 | : [Version Space Algebra](../lectures/lecture09-vsa.pdf) 11 | : []() 12 | 13 | Fri Sep 20 14 | : [Finite Tree Automata and e-graphs](../lectures/lecture10-fta-egraph.pdf) 15 | : []() 16 | 17 | Sun Sep 22 18 | : **Project Group Due**{: .label .label-purple } 19 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # EECS 700: Introduction to Program Synthesis 2 | 3 | _University of Kansas, Fall 2023_ 4 | 5 | [Website](https://sankhs.com/eecs700/) 6 | 7 | This is the source for the course webpage EECS 700: Introduction to Program Synthesis. The webpage is based on the Jekyll theme [Just the Class](https://github.com/kevinlin1/just-the-class). 8 | 9 | This course draws a lot from the other program synthesis classes at [UCSD](https://github.com/nadia-polikarpova/cse291-program-synthesis/) and [MIT](https://people.csail.mit.edu/asolar/SynthesisCourse/index.htm). 10 | -------------------------------------------------------------------------------- /_announcements/week-1.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Week 1 Announcement 3 | week: 1 4 | date: 2019-04-08 5 | --- 6 | 7 | 1. Create a [new repository based on Just the Class](https://github.com/kevinlin1/just-the-class/generate). 8 | 1. Configure a [publishing source for GitHub Pages](https://help.github.com/en/articles/configuring-a-publishing-source-for-github-pages). Your course website is now live! 9 | 1. Update `_config.yml` with your course information. 10 | 1. Edit and create `.md` [Markdown files](https://guides.github.com/features/mastering-markdown/) to add your content. 11 | -------------------------------------------------------------------------------- /_modules/week-11.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: TBD 3 | --- 4 | 5 | Mon Nov 4 6 | : [Synthesizing Effectful programs](../lectures/lecture28-effects.pdf) 7 | : []() 8 | 9 | Wed Nov 6 10 | : [Abstract Interpretation](https://groups.seas.harvard.edu/courses/cs252/2015fa/lectures/Lec05-AbstractInt.pdf) 11 | : []() 12 | 13 | Fri Nov 8 14 | : [Synthesis with Abstract Interpretation](../lectures/lecture30-absynthe.pdf) and [Paper Discussion](../lectures/lecture31-regae-rbsyn.pdf) 15 | : [RbSyn](https://sankhs.com/static/rbsyn-pldi21.pdf) 16 | 17 | 18 | -------------------------------------------------------------------------------- /readings.md: -------------------------------------------------------------------------------- 1 | --- 2 | layout: page 3 | title: Readings 4 | description: EECS 700 class list of papers 5 | nav_order: 4 6 | published: false 7 | --- 8 | 9 | # Reading List 10 | 11 | ### Week 1 12 | 13 | 1. [Dimensions in Program Synthesis](https://www.microsoft.com/en-us/research/wp-content/uploads/2016/12/ppdp10-synthesis.pdf), Sumit Gulwani, PPDP '10 14 | 2. [Syntax-Guided Synthesis](https://www.cis.upenn.edu/~alur/SyGuS13.pdf), Alur and Bodik and Juniwal and Martin and Raghothaman and Seshia and Singh and Solar-Lezama and Torlak and Udupa, FMCAD '13 15 | 16 | ### Weeks 2-16 17 | 18 | The reading list comprises of papers cited in the lecture slides and in your reading assignments. 19 | -------------------------------------------------------------------------------- /.github/ISSUE_TEMPLATE/feature_request.md: -------------------------------------------------------------------------------- 1 | --- 2 | name: Feature request 3 | about: Suggest an idea for this project 4 | title: '' 5 | labels: '' 6 | assignees: '' 7 | 8 | --- 9 | 10 | **Is your feature request related to a problem? Please describe.** 11 | A clear and concise description of what the problem is. Ex. I'm always frustrated when [...] 12 | 13 | **Describe the solution you'd like** 14 | A clear and concise description of what you want to happen. 15 | 16 | **Describe alternatives you've considered** 17 | A clear and concise description of any alternative solutions or features you've considered. 18 | 19 | **Additional context** 20 | Add any other context or screenshots about the feature request here. 21 | -------------------------------------------------------------------------------- /_sass/custom/card.scss: -------------------------------------------------------------------------------- 1 | @mixin abstract-card() { 2 | box-shadow: 0 1px 3px rgba(0, 0, 0, 0.07), 0 4px 14px rgba(0, 0, 0, 0.05); 3 | margin: $sp-4 (-$gutter-spacing-sm); 4 | 5 | @include mq(md) { 6 | border-radius: $border-radius; 7 | margin: $sp-4 0; 8 | } 9 | } 10 | 11 | %card { 12 | @include abstract-card(); 13 | display: flex; 14 | flex-direction: column; 15 | min-width: 0; 16 | padding: 0 $sp-4; 17 | position: relative; 18 | word-wrap: break-word; 19 | 20 | >:first-child { 21 | border-top: none !important; 22 | } 23 | 24 | >:last-child { 25 | border-bottom: none !important; 26 | } 27 | 28 | .label { 29 | border-radius: $border-radius; 30 | margin-left: 0; 31 | user-select: none; 32 | } 33 | } 34 | -------------------------------------------------------------------------------- /_sass/custom/staffer.scss: -------------------------------------------------------------------------------- 1 | .staffer { 2 | display: flex; 3 | margin: $sp-4 0; 4 | 5 | .staffer-image { 6 | border-radius: 50%; 7 | height: 100px; 8 | margin-right: $sp-4; 9 | width: auto; 10 | } 11 | 12 | .anchor-heading { 13 | right: auto; 14 | left: -$sp-5; 15 | } 16 | 17 | .staffer-name, 18 | .staffer-meta, 19 | p { 20 | margin: 0 0 $sp-1 0; 21 | } 22 | 23 | .staffer-name { 24 | @extend .d-inline-block; 25 | } 26 | 27 | .staffer-pronouns { 28 | @extend .label, .text-grey-dk-300, .bg-grey-lt-000; 29 | 30 | user-select: none; 31 | } 32 | 33 | .staffer-meta { 34 | dt, dd, dd + dt { 35 | margin-top: 0; 36 | } 37 | } 38 | 39 | @include mq(sm) { 40 | .staffer-meta { 41 | display: grid; 42 | grid-template-columns: auto 1fr; 43 | } 44 | } 45 | } 46 | -------------------------------------------------------------------------------- /_includes/minutes.liquid: -------------------------------------------------------------------------------- 1 | {% capture _minutes_workspace %} 2 | {% comment %} 3 | Return the number of minutes between midnight and the given time string (e.g. '9:30 AM'). 4 | 5 | Parameters: 6 | `time` (string): the time to convert. 7 | {% endcomment %} 8 | 9 | {% assign _time = include.time %} 10 | {% assign _hhmm = _time | split: ' ' | first | split: ':' %} 11 | {% assign _hours = _hhmm | first | to_integer %} 12 | {% assign _minutes = _hhmm | last | to_integer %} 13 | {% assign _ampm = _time | split: ' ' | last | upcase %} 14 | 15 | {% if _ampm == 'AM' and _hours == 12 %} 16 | {% assign _hours = _hours | minus: 12 %} 17 | {% elsif _ampm == 'PM' and _hours != 12 %} 18 | {% assign _hours = _hours | plus: 12 %} 19 | {% endif %} 20 | {% endcapture %}{% assign _minutes_workspace = '' %}{{ _hours | times: 60 | plus: _minutes }} 21 | -------------------------------------------------------------------------------- /.github/ISSUE_TEMPLATE/bug_report.md: -------------------------------------------------------------------------------- 1 | --- 2 | name: Bug report 3 | about: Create a report to help us improve 4 | title: '' 5 | labels: '' 6 | assignees: '' 7 | 8 | --- 9 | 10 | **Describe the bug** 11 | A clear and concise description of what the bug is. 12 | 13 | **To Reproduce** 14 | Steps to reproduce the behavior: 15 | 1. Go to '...' 16 | 2. Click on '....' 17 | 3. Scroll down to '....' 18 | 4. See error 19 | 20 | **Expected behavior** 21 | A clear and concise description of what you expected to happen. 22 | 23 | **Screenshots** 24 | If applicable, add screenshots to help explain your problem. 25 | 26 | **Desktop (please complete the following information):** 27 | - OS: [e.g. iOS] 28 | - Browser [e.g. chrome, safari] 29 | - Version [e.g. 22] 30 | 31 | **Smartphone (please complete the following information):** 32 | - Device: [e.g. iPhone6] 33 | - OS: [e.g. iOS8.1] 34 | - Browser [e.g. stock browser, safari] 35 | - Version [e.g. 22] 36 | 37 | **Additional context** 38 | Add any other context about the problem here. 39 | -------------------------------------------------------------------------------- /_layouts/staffer.html: -------------------------------------------------------------------------------- 1 |
2 | {%- if page.photo -%} 3 | 4 | {%- endif -%} 5 |
6 |

7 | {%- if page.website -%} 8 | {{ page.name }} 9 | {%- else -%} 10 | {{ page.name }} 11 | {%- endif -%} 12 |

13 | {%- if page.pronouns -%} 14 |

{{ page.pronouns }}

15 | {%- endif -%} 16 | {%- if page.email -%} 17 |

{{ page.email }}

18 | {%- endif -%} 19 | {%- if page.meta -%} 20 |
21 | {%- for meta in page.meta -%} 22 |
{{ meta[0] }}
23 |
{{ meta[1] | markdownify }}
24 | {%- endfor -%} 25 |
26 | {%- endif -%} 27 | {{ content }} 28 |
29 |
30 | -------------------------------------------------------------------------------- /_sass/custom/custom.scss: -------------------------------------------------------------------------------- 1 | // Just the Class dependencies 2 | @import 'card'; 3 | 4 | // Just the Class styles 5 | @import 'announcement'; 6 | @import 'module'; 7 | @import 'schedule'; 8 | @import 'staffer'; 9 | 10 | // Overrides 11 | code { 12 | font-size: 14px; 13 | padding: 0.2em 0.4em; 14 | border: none; 15 | } 16 | 17 | iframe { 18 | max-width: 100%; 19 | } 20 | 21 | details { 22 | @extend .mb-4; 23 | } 24 | 25 | summary { 26 | @extend .btn, .btn-outline; 27 | 28 | width: 100%; 29 | } 30 | 31 | .main-content-wrap { 32 | max-width: $content-width; 33 | margin: auto; 34 | } 35 | 36 | .main-content { 37 | dl { 38 | display: block; 39 | grid-template-columns: none; 40 | } 41 | 42 | dt { 43 | font-weight: 700; 44 | text-align: start; 45 | 46 | &::after { 47 | content: normal; 48 | } 49 | } 50 | 51 | dd { 52 | font-weight: normal; 53 | 54 | + dt { 55 | margin-top: 1em; 56 | } 57 | } 58 | } 59 | 60 | .site-header { 61 | height: 100%; 62 | max-height: 7.75rem; 63 | } 64 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2019 Sankha Narayan Guria 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /_schedules/weekly.md: -------------------------------------------------------------------------------- 1 | --- 2 | timeline: 3 | - '9:00 AM' 4 | - '9:30 AM' 5 | - '10:00 AM' 6 | - '10:30 AM' 7 | - '11:00 AM' 8 | - '11:30 AM' 9 | - '12:00 PM' 10 | - '12:30 PM' 11 | - '1:00 PM' 12 | - '1:30 PM' 13 | - '2:00 PM' 14 | - '2:30 PM' 15 | - '3:00 PM' 16 | - '3:30 PM' 17 | - '4:00 PM' 18 | - '4:30 PM' 19 | - '5:00 PM' 20 | - '5:30 PM' 21 | schedule: 22 | - name: Monday 23 | events: 24 | - name: Lecture 25 | start: 9:30 AM 26 | end: 10:30 AM 27 | location: 150 Wheeler 28 | - name: Section 29 | start: 11:30 AM 30 | end: 12:30 PM 31 | location: 310 Soda 32 | - name: Office Hours 33 | start: 12:30 PM 34 | end: 2:00 PM 35 | location: 271 Soda 36 | - name: Tuesday 37 | - name: Wednesday 38 | events: 39 | - name: Lecture 40 | start: 9:30 AM 41 | end: 10:30 AM 42 | location: 150 Wheeler 43 | - name: Section 44 | start: 11:30 AM 45 | end: 12:30 PM 46 | location: 310 Soda 47 | - name: Office Hours 48 | start: 12:30 PM 49 | end: 2:00 PM 50 | location: 271 Soda 51 | - name: Thursday 52 | - name: Friday 53 | events: 54 | - name: Lecture 55 | start: 9:30 AM 56 | end: 10:30 AM 57 | location: 150 Wheeler 58 | - name: Section 59 | start: 11:30 AM 60 | end: 12:30 PM 61 | location: 310 Soda 62 | - name: Office Hours 63 | start: 12:30 PM 64 | end: 2:00 PM 65 | location: 271 Soda 66 | --- 67 | -------------------------------------------------------------------------------- /_layouts/schedule.html: -------------------------------------------------------------------------------- 1 | {% assign start_time = page.timeline | first %} 2 | {% capture offset %}{% include minutes.liquid time=start_time %}{% endcapture %} 3 |
4 | 9 | 34 |
35 | -------------------------------------------------------------------------------- /_sass/custom/module.scss: -------------------------------------------------------------------------------- 1 | .main-content .module, 2 | .module { 3 | @extend %card; 4 | 5 | h1, 6 | h2, 7 | h3, 8 | h4, 9 | h5, 10 | h6 { 11 | &:first-child { 12 | margin-top: $sp-4; 13 | } 14 | } 15 | 16 | >dl { 17 | border-bottom: $border $border-color; 18 | border-top: $border $border-color; 19 | display: grid; 20 | grid-template-columns: max-content 1fr; 21 | margin: $sp-2 (-$sp-4); 22 | 23 | &:first-child { 24 | margin-top: 0; 25 | } 26 | 27 | &:last-child { 28 | margin-bottom: 0; 29 | } 30 | 31 | @include mq(lg) { 32 | grid-template-columns: 1.5fr 7fr; 33 | } 34 | 35 | %module-item { 36 | margin: 0; 37 | padding: $sp-2; 38 | 39 | @include mq(sm) { 40 | padding: $sp-2 $sp-4; 41 | } 42 | } 43 | 44 | >dt { 45 | @extend %module-item; 46 | border-top: $border $border-color; 47 | font-weight: normal; 48 | text-align: right; 49 | 50 | +dd { 51 | border-top: $border $border-color; 52 | } 53 | 54 | &:first-child { 55 | border-top: none; 56 | 57 | +dd { 58 | border-top: none; 59 | } 60 | } 61 | 62 | &::after { 63 | content: ":"; 64 | } 65 | } 66 | 67 | >dd { 68 | @extend %module-item; 69 | 70 | +dd { 71 | padding-top: 0; 72 | } 73 | 74 | ol, ul, dl { 75 | margin: 0; 76 | } 77 | 78 | dl { 79 | display: flex; 80 | flex-direction: column; 81 | 82 | @include mq(sm) { 83 | flex-direction: row; 84 | } 85 | 86 | dt { 87 | flex: 0 0 62.5%; 88 | margin: 0; 89 | } 90 | 91 | dd { 92 | margin: 0; 93 | } 94 | } 95 | } 96 | } 97 | } 98 | -------------------------------------------------------------------------------- /about.md: -------------------------------------------------------------------------------- 1 | --- 2 | layout: home 3 | title: About 4 | nav_exclude: false 5 | nav_order: 1 6 | permalink: /:path/ 7 | seo: 8 | type: Course 9 | name: "EECS 700: Introduction to Program Synthesis" 10 | --- 11 | 12 | # EECS 700: Introduction to Program Synthesis 13 | 14 | **Fall, 2024** 15 | 16 | **Instructor:** [Sankha Narayan Guria](https://sankhs.com) 17 | 18 | **Lectures:** Monday, Wednesday, and Friday, 3:00 - 3:50pm, LEEP2 G411 19 | 20 | **Office Hours:** Monday 4:00 - 5:00pm, Eaton Hall 2034 21 | 22 | **Email:** [sankha@ku.edu](mailto:sankha@ku.edu) 23 | 24 | _Please email if standard office hours times do not work for you._ 25 | 26 | EECS 700: Introduction to Program Synthesis is a comprehensive introduction to automatic programming or program synthesis, an emerging area that sits at the intersection of programming languages, automated reasoning, and artificial intelligence. Program synthesis aims to generate programs automatically from high-level, possibly incomplete descriptions. The course covers a wide variety of recent synthesis techniques that differ in the kind of descriptions they start with tests and input-output examples to formal correctness specifications. It will also cover the search strategies synthesis tools use like enumeration, symbolic execution, type systems, stochastic search, and machine learning. 27 | 28 | ### Communications 29 | 30 | * [Canvas](https://canvas.ku.edu/courses/129458) 31 | 32 | ### Disclaimer 33 | 34 | All information on this class website is tentative and subject to change. Any substantive change will be accompanied with an announcement to the class via Canvas. 35 | 36 | _This course is inspired from other Program Synthesis classes at [MIT](https://people.csail.mit.edu/asolar/SynthesisCourse/), [UCSD](https://github.com/nadia-polikarpova/cse291-program-synthesis/), and [UW Madison](https://github.com/lorisdanto/cs703-program-synthesis). You should check out those courses as well!_ 37 | -------------------------------------------------------------------------------- /_sass/custom/schedule.scss: -------------------------------------------------------------------------------- 1 | .schedule { 2 | @include abstract-card(); 3 | overflow-x: scroll; 4 | position: relative; 5 | 6 | li::before { 7 | display: none; 8 | } 9 | 10 | ul.schedule-timeline, 11 | ul.schedule-group, 12 | ul.schedule-events { 13 | margin-top: 0; 14 | padding-left: 0; 15 | } 16 | 17 | ul.schedule-timeline { 18 | margin: 40px auto 0; 19 | position: absolute; 20 | width: 100%; 21 | } 22 | 23 | .schedule-time { 24 | @extend .fs-2; 25 | color: $grey-dk-000; 26 | height: 40px; 27 | margin: 0; 28 | padding: $sp-2; 29 | position: relative; 30 | 31 | &::after { 32 | background-color: $border-color; 33 | content: ''; 34 | height: 1px; 35 | left: 0; 36 | position: absolute; 37 | top: 0; 38 | width: 100%; 39 | } 40 | } 41 | 42 | .schedule-group { 43 | display: flex; 44 | margin-bottom: 0; 45 | position: relative; 46 | } 47 | 48 | .schedule-day { 49 | border-left: $border $border-color; 50 | flex: 1 0 0; 51 | margin: 0; 52 | min-width: 120px; 53 | 54 | &:first-of-type { 55 | border-left: 0; 56 | } 57 | } 58 | 59 | h2.schedule-header { 60 | align-items: center; 61 | display: flex; 62 | font-size: 18px !important; 63 | height: 40px; 64 | justify-content: center; 65 | margin: 0; 66 | } 67 | 68 | .schedule-events { 69 | display: flex; 70 | padding: 0; 71 | position: relative; 72 | } 73 | 74 | .schedule-event { 75 | background-color: $grey-dk-000; 76 | border-radius: $border-radius; 77 | box-shadow: 0 10px 20px rgba(0, 0, 0, .1), inset 0 -3px 0 rgba(0, 0, 0, .2); 78 | color: $white; 79 | float: left; 80 | height: 100%; 81 | margin: 0; 82 | padding: $sp-1 $sp-2; 83 | position: absolute; 84 | width: 100%; 85 | 86 | .name { 87 | @extend .fs-3, .fw-700; 88 | } 89 | 90 | .time, 91 | .location { 92 | @extend .fs-2; 93 | } 94 | 95 | &.lecture { 96 | background-color: $grey-dk-000; 97 | } 98 | 99 | &.section { 100 | background-color: $purple-000; 101 | } 102 | 103 | &.office-hours { 104 | background-color: $blue-000; 105 | } 106 | } 107 | } 108 | -------------------------------------------------------------------------------- /_config.yml: -------------------------------------------------------------------------------- 1 | # Welcome to Jekyll! 2 | # 3 | # This config file is meant for settings that affect your whole site, values 4 | # which you are expected to set up once and rarely edit after that. If you find 5 | # yourself editing these this file very often, consider using Jekyll's data files 6 | # feature for the data you need to update frequently. 7 | # 8 | # For technical reasons, this file is *NOT* reloaded automatically when you use 9 | # 'jekyll serve'. If you change this file, please restart the server process. 10 | 11 | # Site settings 12 | # These are used to personalize your new site. If you look in the HTML files, 13 | # you will see them accessed via {{ site.title }}, {{ site.github_repo }}, and so on. 14 | # You can create any custom variable you would like, and they will be accessible 15 | # in the templates via {{ site.myvariable }}. 16 | title: "EECS 700: Introduction to Program Synthesis" 17 | tagline: "EECS 700: Introduction to Program Synthesis" 18 | description: "EECS 700: Introduction to Program Synthesis" 19 | author: Sankha Narayan Guria 20 | baseurl: '/eecs700' # the subpath of your site, e.g. /blog 21 | url: 'https://sankhs.com' # the base hostname & protocol for your site, e.g. http://example.com 22 | exclude: ["Gemfile", "Gemfile.lock", "LICENSE"] 23 | 24 | # Theme settings 25 | remote_theme: just-the-docs/just-the-docs@v0.5.4 26 | color_scheme: light 27 | search_enabled: true 28 | heading_anchors: true 29 | permalink: pretty 30 | aux_links: 31 | Sankha Narayan Guria: 32 | - 'https://sankhs.com' 33 | footer_content: 34 | 35 | # Collections for website data 36 | collections: 37 | # staffers: 38 | modules: 39 | # schedules: 40 | # announcements: 41 | # Default layouts for each collection type 42 | defaults: 43 | # - scope: 44 | # path: '' 45 | # type: staffers 46 | # values: 47 | # layout: staffer 48 | # height: 300 49 | # subpath: '/assets/images/' 50 | # width: 300 51 | - scope: 52 | path: '' 53 | type: modules 54 | values: 55 | layout: module 56 | # - scope: 57 | # path: '' 58 | # type: schedules 59 | # values: 60 | # layout: schedule 61 | # - scope: 62 | # path: '' 63 | # type: announcements 64 | # values: 65 | # layout: announcement 66 | 67 | compress_html: 68 | clippings: all 69 | comments: all 70 | endings: all 71 | startings: [] 72 | blanklines: false 73 | profile: false 74 | nav_external_links: 75 | - title: Canvas 76 | url: https://canvas.ku.edu/courses/129458 77 | - title: Example Code on Github 78 | url: https://github.com/ku-progsys/eecs700-demos 79 | -------------------------------------------------------------------------------- /projects.md: -------------------------------------------------------------------------------- 1 | --- 2 | layout: page 3 | title: Projects 4 | description: EECS 700 Projects 5 | nav_order: 5 6 | --- 7 | 8 | # Project Ideas 9 | 10 | Here are some project ideas, roughly in the order of increasing difficulty / scope. For all projects that involve applying program synthesis to a new application area, the default recommendation is to use an existing synthesis framework such as: 11 | 12 | * [Sketch](https://people.csail.mit.edu/asolar/) 13 | * [Rosette](https://emina.github.io/rosette/) 14 | * [PROSE](https://www.microsoft.com/en-us/research/project/prose-framework/) 15 | * [Absynthe](https://github.com/ngsankha/absynthe) 16 | 17 | You can also implement a synthesizer from scratch if you feel up to task. Please talk to me before finalizing your project topic. A list of papers that have applied program synthesis to other areas is given in [Synthesis + X](../synx/). 18 | 19 | * Reproduce any experimental results from the papers we read in class or from the [reading list](../readings). 20 | * **CEGIS:** Re-impement a symbolic program synthesizer based on a CEGIS loop. Your synthesizer must accept input in the [SyGuS](https://sygus.org/) format. 21 | * **SemGuS:** Build a [SemGuS](https://www.semgus.org/) solver. You can try to adapt any papers for SyGuS to SemGuS or build on top of the existing solvers. You can also contribute domain specific benchmarks in the SemGuS format and build a solver only for that domain. Some algorithms to target [FrAngel](https://arxiv.org/abs/1811.05175), Markov Chain Monte Carlo, symbolic solvers, neural solvers, and advanced enumeration techniques. Some concrete ideas: 22 | * Use inductive relations and random testing library like QuickChick to synthesize SemGuS programs. 23 | * Use unrealizability proofs to accelerate search to candidate solutions. 24 | * **Extend [RbSyn](https://github.com/ngsankha/rbsyn/):** RbSyn is a synthesizer we developed to synthesize Ruby programs with side effects. There are exciting opportunities to extending this work: 25 | * **Synthesize loops:** There has been past work on synthesizing programs given some loop invariant (or inferring the loop invariant). However, this is about synthesizing programs that can use the higher order combinators like map, reduce, filter, etc. (potentially without built-in knowledge of what [constraints to use](https://dl.acm.org/doi/abs/10.1145/2813885.2737977)). 26 | * **Synthesize resource safe programs:** A capability system can be potentially included in RbSyn to synthesize programs that are always resource-safe, i.e., always closes files after using, closes sockets after network I/O is done, etc. 27 | * **Integrate with LLM:** Ruby has a large amount of publicly available code on Github, thus allowing large language models to generate almost correct code. The goal would to find novel ways to integrate LLM in the program generation part while still maintaining correctness. 28 | * **Extend [Absynthe](https://github.com/ngsankha/absynthe/):** Absynthe is a synthesizer we developed to synthesize programs in any target language by writing only abstract interpreter for a domain and combining it with testing. Potential ways to build on this work: 29 | * Think of ways you can reason about programs in a particular domain (eg: fairness, differential privacy, effects, etc.) and try to encode that domain as an abstract interpretation. Evaluate how Absynthe works on synthesizing example programs from that domain. 30 | * Absynthe only considers programs that it can automatically prove are sound with respect to the abstract domain. However, due to approximations there maybe programs that are correct but never considered in the search. Can feedback be taken from testing to see where Absynthe lost precision in the abstract interpretation? 31 | * **Synthesis of recursive functions with [egg](https://egraphs-good.github.io/):** There is interesting [recent work](https://dl.acm.org/doi/10.1145/3434335) on combining top-down and bottom-up enumeration to synthesize recursive functions. The goal of this project would be to re-implement their techniques using e-graphs and the efficient egg library. There is also potential to do some interesting work involving synthesizing [optimized Datalog queries](https://arxiv.org/abs/2202.10390) or [optimizing quantum circuits](https://arxiv.org/abs/2211.09691). 32 | * **Synthesis with ASP:** There is some [recent work](https://mgree.github.io/papers/2023popl_asp.pdf) on using Answer-Set Programming (ASP) to synthesize Datalog programs. The goal of this project would be to apply ASP to a different relational domain, e.g. synthesizing context-free grammars (or tree grammars). You can think of other domains where relational reasoning can be used. 33 | * [Scallop](https://scallop-lang.github.io/) is a language that allows programmers to write a rules in a declarative language and combine it with a neural network to jointly enable probabilistic reasoning. Can it be scaled up to synthesize programs with respect to some specification? 34 | * **ARC:** Implement a synthesizer that solves (a simple subset of) tasks from the [Abstraction and Reasoning Challenge](https://www.kaggle.com/c/abstraction-and-reasoning-challenge). 35 | -------------------------------------------------------------------------------- /synx.md: -------------------------------------------------------------------------------- 1 | --- 2 | layout: page 3 | title: Synthesis + X 4 | description: EECS 700 Examples of Program Synthesis applied to other domains 5 | nav_order: 6 6 | --- 7 | 8 | # Synthesis + X 9 | 10 | ### Frameworks 11 | 12 | 1. [Semantics-Guided Synthesis](http://semgus.org/). Kim et al. 13 | 2. [Growing Solver-Aided Languages with Rosette](https://emina.github.io/rosette/). Torlak et al. 14 | 3. [Program sketching](https://dl.acm.org/doi/abs/10.1007/s10009-012-0249-7). Solar-Lezama et al. 15 | 4. [Syntax-guided synthesis](https://sygus.org). Alur et al. 16 | 17 | ### Architecture 18 | 19 | 1. [Synthesizing memory models from framework sketches and Litmus tests](https://dl.acm.org/doi/10.1145/3062341.3062353). Bornholt et al. 20 | 2. [Swizzle Inventor: Data Movement Synthesis for GPU Kernels](https://mangpo.net/papers/swizzle-inventor-asplos19.pdf). Phothilimthana et al. 21 | 3. [Chlorophyll: synthesis-aided compiler for low-power spatial architectures](https://dl.acm.org/doi/10.1145/2594291.2594339). Phothilimthana et al. 22 | 4. [DSAGEN: Synthesizing Programmable Spatial Accelerators](http://web.cs.ucla.edu/~tjn//papers/isca2020-daegen.pdf). Weng et al. 23 | 24 | ### Compilers 25 | 26 | 1. [Semantic code search via equational reasoning](https://dl.acm.org/doi/10.1145/3385412.3386001). Premonton et al. 27 | 2. [Learning Syntactic Program Transformations from Examples](https://ieeexplore.ieee.org/document/7985680) Rolim et al. 28 | 3. [Scaling up Superoptimization](https://mangpo.net/papers/lens-asplos16.pdf). Phothilimthana et al. 29 | 4. [Synthesis of loop-free programs](https://dl.acm.org/doi/10.1145/1993316.1993506). Gulwani et al. 30 | 31 | ### Databases 32 | 33 | 1. [Data Migration using Datalog Program Synthesis](https://arxiv.org/abs/2003.01331). Wang et al. 34 | 2. [Synthesizing database programs for schema refactoring](https://dl.acm.org/doi/10.1145/3314221.3314588). Wang et al. 35 | 3. [SQLizer: query synthesis from natural language](https://dl.acm.org/doi/10.1145/3133887). Yaghmazadeh et al. 36 | 4. [Synthesizing highly expressive SQL queries from input-output examples](https://dl.acm.org/doi/10.1145/3062341.3062365) (Wang et al) 37 | 5. [Synthesizing Entity Matching Rules by Examples](http://www.vldb.org/pvldb/vol11/p189-singh.pdf). Singh et al. 38 | 39 | ### Education 40 | 41 | 1. [Synthesizing interpretable strategies for solving puzzle games](https://dl.acm.org/doi/10.1145/3102071.3102084). Butler et al. 42 | 2. [sk_p: a neural program corrector for MOOCs](https://dl.acm.org/doi/10.1145/2984043.2989222). Pu et al. 43 | 3. [Synthesis of Problems for Shaded Area Geometry Reasoning](https://link.springer.com/chapter/10.1007/978-3-319-61425-0_39). Alvin et al. 44 | 4. [Writing Reusable Code Feedback at Scale with Mixed-Initiative Program Synthesis](https://dl.acm.org/doi/10.1145/3051457.3051467). Head et al. 45 | 46 | ### Graphics 47 | 48 | 1. [InverseCSG: automatic conversion of 3D models to CSG trees](https://dl.acm.org/doi/10.1145/3272127.3275006). Du et al. 49 | 2. [Learning to Infer Graphics Programs from Hand-Drawn Images](http://papers.nips.cc/paper/7845-learning-to-infer-graphics-programs-from-hand-drawn-images). Ellis et al. 50 | 3. [Synthesizing structured CAD models with equality saturation and inverse transformations](https://dl.acm.org/doi/10.1145/3385412.3386012). Nandi et al. 51 | 52 | ### Human-Computer Interaction (HCI) 53 | 54 | 1. [Small-Step Live Programming by Example](https://cseweb.ucsd.edu/~hpeleg/snippy-uist2020.pdf). Ferdowsifard et al. 55 | 2. [Interactive Program Synthesis by Augmented Examples](https://glassmanlab.seas.harvard.edu/papers/ips_augex_uist20.pdf). Zhang et al. 56 | 3. [Rousillon: Scraping Distributed Hierarchical Web Data](https://schasins.com/assets/papers/rousillon.pdf). Chasins et al. 57 | 58 | ### Machine Learning 59 | 60 | 1. [RobustFill: Neural Program Learning under Noisy I/O](https://arxiv.org/abs/1703.07469). Devlin et al. 61 | 2. [Synthesizing Programmatic Policies that Inductively Generalize](https://openreview.net/forum?id=S1l8oANFDH). Inala et al. 62 | 3. [Programmatically Interpretable Reinforcement Learning](https://arxiv.org/abs/1804.02477). Verma et al. 63 | 4. [HOUDINI: Lifelong Learning as Program Synthesis](https://arxiv.org/abs/1804.00218). Valkov et al. 64 | 65 | ### Networks 66 | 67 | 1. [Synthesis of Fault-Tolerant Distributed Router Configurations](https://dl.acm.org/doi/10.1145/3179425). Subramanian et al. 68 | 2. [Genesis: synthesizing forwarding tables in multi-tenant networks](https://dl.acm.org/doi/10.1145/3009837.3009845). Subramanian et al. 69 | 3. [Learning Network Design Objectives Using A Program Synthesis Approach](https://dl.acm.org/doi/10.1145/3365609.3365861). Wang et al. 70 | 71 | ### Natural Language Processing (NLP) 72 | 73 | 1. [Multi-modal synthesis of regular expressions](https://dl.acm.org/doi/10.1145/3385412.3385988). Chen et al. 74 | 2. [SQLizer: query synthesis from natural language](https://dl.acm.org/doi/10.1145/3133887). Yaghmazadeh et al. 75 | 3. [Program synthesis using natural language](https://dl.acm.org/doi/10.1145/2884781.2884786). Desai et al. 76 | 77 | ### Robotics 78 | 79 | 1. [Synthesis for Robots: Guarantees and Feedback for Robot Behavior](http://mortezalahijanian.com/papers/AR-CRAS2017.pdf). Kress-Gazit et al. 80 | 2. [SMT-based synthesis of integrated task and motion plans from plan outlines](https://citeseerx.ist.psu.edu/viewdoc/summary?doi=10.1.1.640.1459). Nedunuri et al. 81 | 3. [Bodystorming Human-Robot Interactions](http://pages.cs.wisc.edu/~aws/papers/uist19.pdf). Porfirio et al. 82 | 83 | ### Security / Crypto 84 | 85 | 1. [Precise Attack Synthesis for Smart Contracts](https://arxiv.org/abs/1902.06067). Feng et al. 86 | 2. [Synthesis of Super-Optimized Smart Contracts Using Max-SMT](https://link.springer.com/chapter/10.1007/978-3-030-53288-8_10). Albert et al. 87 | 3. [Automated Synthesis of Semantic Malware Signatures using Maximum Satisfiability](https://www.ndss-symposium.org/ndss2017/ndss-2017-programme/automated-synthesis-semantic-malware-signatures-using-maximum-satisfiability/). Feng et al. 88 | 4. [Synthesis of fault-attack countermeasures for cryptographic circuits](https://link.springer.com/chapter/10.1007/978-3-319-41540-6_19). Eldib et al. 89 | 5. [Syntia: Synthesizing the Semantics of Obfuscated Code](https://www.usenix.org/system/files/conference/usenixsecurity17/sec17-blazytko.pdf). Blazytko et al. 90 | 6. [Look for the Proof to Find the Program: Decorated-Component-Based Program Synthesis](https://link.springer.com/chapter/10.1007/978-3-319-63390-9_5). Gascon et al. 91 | 92 | ### Software Engineering 93 | 94 | 1. [Component-based synthesis for complex APIs](https://dl.acm.org/doi/10.1145/3009837.3009851). Feng et al. 95 | 2. [FrAngel: Component-Based Synthesis with Control Structures](https://arxiv.org/abs/1811.05175). Shi et al. 96 | 3. [Automatic repair of regular expressions](https://dl.acm.org/doi/10.1145/3360565). Pan et al. 97 | 4. [Angelix: Scalable Multiline Program Patch Synthesis via Symbolic Analysis](http://angelix.io/) 98 | 5. [S3: Syntax- and Semantic-Guided Repair Synthesis via Programming by Examples](https://www.cs.cmu.edu/~clegoues/docs/legoues-esecfse17.pdf). Le et al. 99 | 6. [AutoPandas: neural-backed generators for program synthesis](https://dl.acm.org/doi/10.1145/3360594). Bavishi et al. 100 | 101 | ### Systems 102 | 103 | 1. [Synthesizing JIT Compilers for In-Kernel DSLs](https://link.springer.com/chapter/10.1007%2F978-3-030-53291-8_29). Van Geffen et al. 104 | 2. [Hamsaz: replication coordination analysis and synthesis](https://dl.acm.org/doi/10.1145/3290387). Houshmand et al. 105 | 3. [TASO: Optimizing Deep Learning Computation with Automatic Generation of Graph Substitutions](https://cs.stanford.edu/~padon/taso-sosp19.pdf). Jia et al. 106 | 107 | ### Theory 108 | 109 | 1. [Exact and Approximate Methods for Proing Unrealizability of SyGuS Problems](https://pages.cs.wisc.edu/~loris/papers/pldi20unrealizability.pdf). Hu et al. 110 | 2. [Decidable Synthesis of Programs with Uninterpreted Functions](https://link.springer.com/chapter/10.1007%2F978-3-030-53291-8_32). Krogmeier et al. 111 | 3. [Efficient Synthesis with Probabilistic Constraints](https://pages.cs.wisc.edu/~loris/papers/cav19-digits.pdf). Drews et al. 112 | 113 | 114 | ### Visualization 115 | 116 | 1. [Sketch-n-sketch](https://ravichugh.github.io/sketch-n-sketch/). Chugh et al. 117 | 2. [Visualization by example](https://dl.acm.org/doi/10.1145/3371117). Wang et al. 118 | -------------------------------------------------------------------------------- /syllabus.md: -------------------------------------------------------------------------------- 1 | --- 2 | layout: page 3 | title: Syllabus 4 | description: EECS 700 class organization and syllabus 5 | nav_order: 2 6 | --- 7 | 8 | # Syllabus 9 | 10 | ## Instructor Details 11 | 12 | **Instructor:** [Sankha Narayan Guria](https://sankhs.com) 13 | 14 | **Lectures:** Monday, Wednesday, and Friday, 3:00 - 3:50pm, LEEP2 G411 15 | 16 | **Office Hours:** Monday 4:00 - 5:00pm, Eaton Hall 2034 17 | 18 | **Email:** [sankha@ku.edu](mailto:sankha@ku.edu) 19 | 20 | _Please email if standard office hours times do not work for you._ 21 | 22 | ## Course Hours 23 | 24 | **Credit Hours:** 3 25 | 26 | A credit hour is a way to measure the amount of work you're expected to do for a class. It's based on the learning goals of the course and how much time you'll spend on it. During a full length (15-week) semester, you can expect to spend about one hour in class and another two hours on homework or studying each week for each credit hour. 27 | 28 | ## Instructional Methods 29 | 30 | In Person. Some classes may be scheduled on Zoom in unforeseen circumstances. 31 | 32 | ## Course Description 33 | 34 | EECS 700: Introduction to Program Synthesis is a comprehensive introduction to automatic programming or program synthesis, an emerging area that sits at the intersection of programming languages, automated reasoning, and artificial intelligence. Program synthesis aims to generate programs automatically from high-level, possibly incomplete descriptions. The course covers a wide variety of recent synthesis techniques that differ in the kind of descriptions they start with tests and input-output examples to formal correctness specifications. It will also cover the search strategies synthesis tools use like enumeration, symbolic execution, type systems, stochastic search, and machine learning. 35 | 36 | ## Learning Outcomes 37 | 38 | At the conclusion of this course, students will be able to: 39 | 40 | * Enumerative Program Search and Pruning 41 | * Stochastic and Representation-based Search 42 | * Constraint Solving 43 | * Type-directed Synthesis 44 | * Abstraction-based Synthesis 45 | * Machine learning based Synthesis 46 | * Reading and reviewing relevant research papers 47 | * Build/use a program synthesis tool from scratch 48 | 49 | ## Course Materials 50 | 51 | All materials are available as publicly available research papers linked from the [course schedule](../schedule/). 52 | 53 | ## Minimal Technical Skills Needed 54 | 55 | You must be proficient in programming and knowledge of programming languages design and implementation. EECS 662 gives relevant background for this class. While the class is strongly recommended, it is not required. 56 | 57 | ## Course Assignments and Requirements 58 | 59 | * **Paper reviews:** 45% 60 | * 9 papers, 5% each 61 | * **Final Project:** 50% 62 | * **Team formed by deadline:** 5% 63 | * **Project Proposal:** 15% 64 | * **Project Presentation:** 15% 65 | * **Final Report:** 15% 66 | * **Class Particpation:** 5% 67 | 68 | ### Paper Reviews 69 | 70 | Most work in the class requires reading and reviewing research papers. We will cover about one paper per week. For each paper, you are required to write a review. 71 | 72 | The key things your review requires (unless noted by specific questions on the assignment): 73 | 74 | * 1-2 paragraph summary of the paper and their key contributions 75 | * What is your opinion of the paper (criticisms, limitations, things you liked, potential improvements, strengths, weaknesses according to you) 76 | * Feel free to puts questions you have after reading the paper in your summary too 77 | 78 | We will discuss the key questions in the class for each paper. The goal of the writing the summary is to get you to think deeply about the paper, not to test you. You will not be graded on the correctness of your reviews; any non-trivial review will get you points. 79 | 80 | ### Final Project 81 | 82 | The goal of the final project is to gain an in-depth understanding of the materials presented in the course by re-implementing them, applying them to new domains, or extending them. I will share a list of possible project topics. You can also suggest your own project ideas. You project topics are required to be approved by the instructor before you start working on them. If you are already working on a research project that fits the theme of the class, you can use that as your final project (provided you meet all the course deliverables). If you are taking any other class and want to work on synthesis for that domain, feel free to propose such project ideas. 83 | 84 | The project will have the following milestones: 85 | 86 | 1. Form and register your project group with 2-3 students. 87 | 2. **Project Proposal:** One page document with 3 sections: 88 | * What you plan to do and why it is a good idea. The project should be well scoped. 89 | * Give concrete example(s) about what kind of synthesis problem will be solved, i.e. what are the input/outputs for the synthesizer 90 | * Broad idea of the algorithm/tools your synthesizer will use to transform the provided synthesis problem to the desired program. Give 1-2 sentences about your plans for evaluating your project. 91 | 3. A short presentation describing your project. 92 | 4. A final report describing your project between 5-8 pages of length. The report should read like a short paper, so describe what you did with examples, you algorithm, your design decisions, and link to your code repository on GitHub. This should be similar in-spirit to the papers you read in class. 93 | 94 | The projects will be judged on scope, quality of execution, and originality. 95 | 96 | ### Class Participation 97 | 98 | To earn participation points, participate in discussions and ask questions during lectures and online on Canvas Discussions. 99 | 100 | ## Student Survey of Teaching 101 | 102 | You will have multiple opportunities to provide feedback on your experience in this course. Suggestions and constructive criticism are encouraged throughout the course and may be particularly valuable early in the semester. To that end, I may use surveys and/or reflection assignments to gather input on what is working well and what could be improved. You will also be asked to complete an end-of-semester, online Student Survey of Teaching, which could inform modifications to this course (and other courses that I teach) in the future. 103 | 104 | ## Grading 105 | 106 | * A: 90 - 100% 107 | * B: 80 - 90% 108 | * C: 70 - 80% 109 | * D: 60 - 70% 110 | * F: Below 60% 111 | 112 | I do not use the +/- grading scale. 113 | 114 | ## Attendance Policy 115 | 116 | All course material (research papers and lecture slides) will be shared online after class. I do not take attendance. You are however, expected and encouraged to attend and participate in class. There is 5% points for class participation. If you have any problems which will cause you to miss a class or an assignment deadline please email me. 117 | 118 | The [University Excused Absence Policy](https://policy.ku.edu/governance/USRR#excused) is a good reference for allowed reasons. 119 | 120 | ## Subject to Change Statement 121 | 122 | The schedule for the class beyond next week is subject to change. Please consult the course website to know the latest version of the schedule and syllabus. Any changes in assignments and syllabus policies will conveyed via Canvas announcements. 123 | 124 | ## Student Resources and University Policies 125 | 126 | Please visit the Student Resources website ([KU Academic Success](https://academicsuccess.ku.edu/student-resources-0)) for a list of student resources and university policies. 127 | 128 | ## Accommodation 129 | 130 | The Student Access Center (SAC) coordinates academic accommodations and services for all eligible KU students with disabilities. If you have a disability for which you wish to request accommodations and have not contacted SAC, please do so as soon as possible. They are located in 22 Strong Hall and can be reached at 785-864-4064 (V/TTY). Information about their services can be found at [access.ku.edu](https://access.ku.edu). Please contact me privately in regard to your needs in this course. 131 | 132 | ## Course Schedule 133 | 134 | Please see the [schedule](../schedule/) page. 135 | 136 | ## Academic Integrity 137 | 138 | Academic misconduct of any kind will automatically result in a 0 score on the paper reviews or project and your actions will be reported to the department chair. You must work on paper reviews individually and projects only with your group. Posting your assignments to internet discussion lists / forums / chatrooms is considered academic misconduct. Sharing your solutions with others is also considered academic misconduct. 139 | --------------------------------------------------------------------------------