Undergraduate Course: Types and Semantics for Programming Languages (INFR10040)
|School||School of Informatics
||College||College of Science and Engineering
||Availability||Available to all students
|Credit level (Normal year taken)||SCQF Level 10 (Year 4 Undergraduate)
|Home subject area||Informatics
||Other subject area||None
||Taught in Gaelic?||No
|Course description||Type systems and semantics are mathematical tools for precisely describing aspects of programming language. A type system imposes constraints on legal programs in order to guarantee their safe execution, whilst a semantics specifies what a program will do when executed. This course gives an introduction to the main ideas and methods of type systems and semantics. This enables a deeper understanding of existing programming languages, as well as the ability to design and specify new language features.
Information for Visiting Students
|Displayed in Visiting Students Prospectus?||No
Course Delivery Information
|Delivery period: 2013/14 Semester 2, Available to all students (SV1)
||Learn enabled: No
|Course Start Date
|Breakdown of Learning and Teaching activities (Further Info)
Lecture Hours 20,
Summative Assessment Hours 2,
Programme Level Learning and Teaching Hours 2,
Directed Learning and Independent Learning Hours
|Breakdown of Assessment Methods (Further Info)
|No Exam Information
Summary of Intended Learning Outcomes
|1 - Read and understand the presentation of operational semantics and type systems via inference rules for lambda calculus, and be able to modify such a presentation to include a new language feature, such as state and exceptions.
2 - State and prove the theorems that relate big-step and small-step semantics, and the preservation and progress theorems that link operational semantics and type systems.
3 - Exploit the connection between logic and type systems, where propositions correspond to types and proofs correspond to programs; understand how conjunction corresponds to products, disjunction to sums, and implication to functions.
4 - Explain the differences between informal and formal semantics of programming languages, and between the operational, denotational and axiomatic approaches to formal semantics.
5 - Read a formal semantics for a small programming language written in operational or denotational style, interpret it in informal terms, and predict how a given program will behave according to the semantic definition.
6 - Write a formal semantics for a programming language in the operational style, given a careful informal description of the language, and explain how any inadequacies in the informal description have been addressed in the formal one.
|Written Examination 0|
Assessed Assignments 25
Practical Examination 75
Short exercises each week.
If delivered in semester 1, this course will have an option for semester 1 only visiting undergraduate students, providing assessment prior to the end of the calendar year.
||Type systems for programming languages
* Untyped and simply-typed lambda calculus. Variable binding.
* Small step and big step semantics.
* Progress and preservation theorems.
* Products, sums, and list types.
* Reference types and exceptions.
* Subtyping. Subsumption and its understanding as inclusion or coercion.
Formal semantics for programming languages
* Principles of operational, denotational and axiomatic semantics.
* Key concepts of semantics: compositionality, adequacy, observational equivalence, full abstraction and definability.
* Case study: operational semantics for a fragment of Java.
Relevant QAA Computing Curriculum Sections: Comparative Programming Languages, Compilers and Syntax Directed Tools, Programming Fundamentals, Theoretical Computing
||* Benjamin Pierce, et al, Software Foundations, 2012. [Available online, required reading: http://www.cis.upenn.edu/~bcpierce/sf/]
|Course organiser||Dr Mary Cryan
Tel: (0131 6)50 5153
|Course secretary||Miss Kate Farrow
Tel: (0131 6)50 2706
© Copyright 2013 The University of Edinburgh - 13 January 2014 4:27 am