Foundations of Software

Staff

Documents

Assignments

Project 1 - The NB Language

Project 2 - Untyped Lambda Calculus

Project 3 - Simply Typed Lambda Calculus

Project 4 - STLC Extensions

Project 5 - STLC with Type Reconstruction

Description

Software foundations (or theory of programming languages) is the mathematical study of the meaning of programs. Students will learn ways to describe program behaviors, and mathematical tools to formalize and check interesting properties of programs. This course concentrates on operational techniques and type systems.

Mailing list

Additional announcements related to the course, as well as answers to the students’ questions will be posted on the mailing list so remember to check it frequently.

Our mailing list is hosted at https://groups.google.com/forum/#!forum/fos2018, and you must join it if you’re attending the course - all announcements, questions and answers will be posted there.

The mailing list is only available to registered members. In order to join the mailing list, open the google group and click ‘Apply for membership’.

Teams

We encourage you to team up when working on assignments. Teams can consist of one, two or three students and should not intersect with each other. It is okay to share ideas between teams, but sharing code is prohibited.

Team Registration: Please fill in the form to register your group. Registration will be closed on 30 Sep 2018, 23:59.

Schedule

The Foundations of Software course at EPFL is taught on Tue 14:15-16:00, INM 10. Exercise sessions take place on Wed 10:15-12:00, CO 020.

Tue, 18 Sep Lecture on Introduction and Combinator Parsers
Wed, 19 Sep Exercise session on arithmetic expressions
Tue, 25 Sep Lecture on Arithmetic Expressions - Abstract Syntax and Proof Principles
Wed, 26 Sep Exercise session on arithmetic expressions
Tue, 2 Oct Lecture on The Untyped Lambda Calculus (1)
Wed, 3 Oct Exercise session on untyped lambda calculus
Tue, 9 Oct Lecture on The Untyped Lambda Calculus (2)
Wed, 10 Oct Exercise session on untyped lambda calculus
Tue, 16 Oct Lecture on The Simply Typed Lambda Calculus
Wed, 17 Oct Pen & paper exercise session #1
Tue, 23 Oct Lecture on STLC & Simple Extensions to STLC
Wed, 24 Oct Exercise session on simply typed lambda calculus
Tue, 30 Oct Lecture on More Extensions to STLC
Wed, 31 Oct Pen & paper exercise session #2
Tue, 6 Nov Lecture on Recursion and State with STLC
Wed, 7 Nov Exercise session on simply typed lambda calculus with extensinos
Tue, 13 Nov Lecture on Type Reconstruction and Polymorphism
Wed, 14 Nov Midterm
Tue, 20 Nov Lecture on Subtyping
Wed, 21 Nov Exercise session on simply typed lambda calculus with Type Reconstruction
Tue, 27 Nov Lecture on Objects
Wed, 28 Nov Pen & paper exercise session #3
Tue, 4 Dec Lecture on Featherweight Java
Wed, 5 Dec Exercise session on simply typed lambda calculus with Type Reconstruction
Tue, 11 Dec Lecture on Foundations of Scala
Wed, 12 Dec Pen & paper exercise session #4
Tue, 18 Dec Lecture on Foundations of Scala (cont.)
Wed, 19 Dec Pen & paper exercise session #5
TBD Final

Lecture notes and pen & paper session exercises are available in documents section.

Grading

Each enrolled student will receive a grade based on their results for the projects, the midterm exam and the final exam. The relative importance of each part is: 30% for projects, 30% for the midterm and 40% for the final.

Cheating

Sharing ideas between groups is very recommended. Plagiarising code as part of a project will not be tolerated — whatever the source. In particular, you are not allowed to publish your projects in public repositories at GitHub/Bitbucket/… or to use solutions published by others.

In case of cheating, you will receive the grade “NA” (not acquired, zero) for the concerned project or exam, or for the whole course. You may furthermore be denounced and punished in accordance with the ordonnance sur la discipline. If you are in any fashion worried about this, speak with an assistant.