THE UNIVERSITY of EDINBURGH

DEGREE REGULATIONS & PROGRAMMES OF STUDY 2026/2027

Draft Edition - Due to be published Thursday 9th April 2026

Timetable information in the Course Catalogue may be subject to change.

University Homepage
DRPS Homepage
DRPS Search
DRPS Contact
DRPS : Course Catalogue : School of Informatics : Informatics

Undergraduate Course: Topics in Programming Languages and Semantics (INFR11302)

Course Outline
SchoolSchool of Informatics CollegeCollege of Science and Engineering
Credit level (Normal year taken)SCQF Level 11 (Year 4 Undergraduate) AvailabilityNot available to visiting students
SCQF Credits20 ECTS Credits10
SummaryThis course is intended for those who wish to enter research in programming languages or to be technical experts in their future roles in industry. Each year the course selects topics representative of current research and practice in programming languages and semantics. These topics may include dependent type theory for language semantics and verification, concurrency theory, or type systems and applications to language design.

The course gives a deeper understanding of the principles of programming languages and their design and implementation, building upon other courses covering elementary material such as Elements of Programming Languages (INFR10061) or Introduction to Theoretical Computer Science (INFR10059) by introducing more advanced topics and recent developments in the field. We recommend that students have either taken a general introduction to programming languages either in Edinburgh (such as EPL (INFR10061)) or elsewhere, or have a sufficient background in mathematics or logic to quickly familiarise with this material.

Visiting undergraduate students are eligible to enrol on Topics in Programming Languages and Semantics (UG) (INFR11305).
Course description The course consists of multiple independent topic tracks (usually three), of which students are expected to attend, and will be assessed on, two of their choice. Each track covers one important direction in programming languages, including its mathematical foundations and relevance to current research and practice.

Although topics may range from mainly theoretical to applied, a working knowledge of mathematical concepts (logic, discrete structures, induction, probability as covered in pre-honours Informatics programmes) and some programming experience are assumed. Familiarity with basic concepts of programming language semantics, type systems, and language implementation techniques is also assumed.

Each track will typically consist of one lecture hour per week, with some variation based on topic. Each track will have a series of formative questions for study, supported by tutorials, a class forum, and some targeted feedback.


The topics vary from year to year, dependent on availability and current research interests of teaching staff (the course website will describe in detail the topics each year). Possible topics include:
- Type theory, dependent types, mechanised reasoning about programming languages and calculi, verification of program correctness, operational and denotational semantics, induction and recursion
- Modelling concurrent systems, formal techniques for reasoning about concurrency, labelled transition systems, notions of equivalence of concurrent systems, bisimulation and coinduction
- Type systems and language design, advanced functional programming, rewriting theory and termination/strong normalization, type inference, applications to for example safe concurrent programming, functional reactive programming, language integrated query, concurrent/reactive programming
- Probabilistic programming and semantics of probabilistic programs using denotational techniques, applications in machine learning, probabilistic modelling, statistics
Entry Requirements (not applicable to Visiting Students)
Pre-requisites It is RECOMMENDED that students have passed Elements of Programming Languages (INFR10061) OR Introduction to Theoretical Computer Science (INFR10059)
Co-requisites
Prohibited Combinations Other requirements MSc students must register for this course, while Undergraduate students must register for INFR11305 instead.

This course is open to all Informatics students including those on joint degrees. For external students where this course is not listed in your DPT, please seek special permission from the course organiser.

This course requires practical mathematical application of discrete structures (trees, graphs, induction), logic and symbolic reasoning (inference rules, rewriting systems) and problem solving. For example, topics may require you to define or study the properties of a type system for tracking the ways different variables are used in a program. Some of the required details can be learned during the course, but some familiarity with these mathematical topics (or the ability to quickly acquire it through self study) is required

We assume that students have taken a basic introduction to programming languages, compilers, and/or theoretical computer science.
Course Delivery Information
Academic year 2026/27, Not available to visiting students (SS1) Quota:  None
Course Start Semester 2
Timetable Timetable
Learning and Teaching activities (Further Info) Total Hours: 200 ( Lecture Hours 20, Seminar/Tutorial Hours 16, Summative Assessment Hours 2, Programme Level Learning and Teaching Hours 4, Directed Learning and Independent Learning Hours 158 )
Assessment (Further Info) Written Exam 70 %, Coursework 30 %, Practical Exam 0 %
Feedback Targeted individual feedback will be provided on some of the formative work provided throughout the materials. Students are expected to engage with the course content in weekly tutorial sessions with teaching assistants, and to discuss any unanswered questions on the class forum.
Exam Information
Exam Diet Paper Name Minutes
Main Exam Diet S2 (April/May)Topics in Programming Languages and Semantics INFR11302 and INFR11305120
Learning Outcomes
On completion of this course, the student will be able to:
  1. identify how an aspect of an advanced programming languages topic applies to a given applied problem
  2. use programming languages techniques to model, reason about, or formally verify properties of a system
  3. critically compare and contrast alternative choices or variants of methods or approaches in the area
  4. identify the technical, ethical and societal implications, including both benefits and risks, of different approaches to programming language design and implementation
Reading List
Programming language foundations in Agda (Wadler, Kokke)
Practical foundations of programming languages (Harper)
Introduction to Process Algebra (Fokkink)
Additional Information
Graduate Attributes and Skills Apply critical analysis, evaluation and synthesis to issues, or issues that are informed by forefront developments in the subject / discipline / sector.
Identify, conceptualise, and define new and abstract problems and issues.
Develop original and creative responses to problems and issues.
Critically review, consolidate and extend knowledge, skills, practices and thinking in subject / discipline / sector.
Deal with complex issues and make informed judgements in situations in the absence of complete or consistent data / information.
KeywordsProgramming languages,Concurrency,Verification,Type theory,Type inference,Semantics
Contacts
Course organiserDr Ohad Kammar
Tel:
Email: ohad.kammar@ed.ac.uk
Course secretaryMr Lachlan Boyd
Tel:
Email: lboyd@ed.ac.uk
Navigation
Help & Information
Home
Introduction
Glossary
Search DPTs and Courses
Regulations
Regulations
Degree Programmes
Introduction
Browse DPTs
Courses
Introduction
Humanities and Social Science
Science and Engineering
Medicine and Veterinary Medicine
Other Information
Combined Course Timetable
Prospectuses
Important Information