Осень 2026
Курс
ПОМИ РАН

Семантика языков программирования

Когда мы пишем программы, мы не оперируем элементарными терминами языка программирования, подобно тому, как, говоря на родном языке, мы не размышляем в терминах синтаксиса и морфологии. Человеческое мышление мнемонично, оно действует в терминах абстракций и идиом. Такой способ рассуждений хорошо работает при создании прикладных программ, однако даёт странные и иногда необъяснимые результаты при реализации языковых инструментов, то есть программ, которые получают на вход одни программы и возвращают другие (компиляторов, интерпретаторов, специализаторов и т. д.).

Это происходит оттого, что такие инструменты должны правильно работать для всех исходных программ, а не только для таких, которые состоят из удобных нам мнемонических структур. Например, что следует делать, если в программе на языке C в теле цикла while мы встретили оператор case (сразу, без switch)?

Довольно быстро (после каких-то 20 лет развития науки о языках программирования) оказалось, что для надёжной работы таких инструментов (или, как минимум, для правдоподобного обоснования, почему они работают именно так) необходимы способы формальной и точной спецификации семантики языков программирования, которые предоставили бы средства для математического доказательства свойств программ и их преобразователей.

В рамках данного курса мы познакомимся со способами формального описания семантик языков программирования, которые позволяют всё это проделывать, а также научимся доказывать свойства программ и их преобразований, пользуясь инструментом для автоматизированного доказательства теорем Rocq.

Пререквизиты курса:

  • знание какого-либо языка программирования (а лучше нескольких, а лучше — принадлежащих разным парадигамам (C — Java — Haskell и т.д.))
  • начала мат. логики
  • начала дискретного анализа

Занятия

15 лекций

Лекция 1

Лекция 1. Основные понятия и примеры.

Expand icon
21.09.2026 / ПН
18:00–19:30
Лекция
avatar
Дмитрий БулычевПреподаватель

Лекция 1. Основные понятия и примеры.

Семантика я.п. как наука о "смыслах" программ. Множественность семантик, статическая и динамическая семантики. "Стандартная семантика" я.п. Семантически-зависимые конструкции: интерпретатор, транслятор, оптимизатор, специализатор и их программные воплощения. Проекции Футамуры-Ершова-Турчина. Вопросы практического применения.

Лекция 2

Лекция 2. Формы семантических описаний

Expand icon
21.09.2026 / ПН
19:30–21:00
Лекция
avatar
Дмитрий БулычевПреподаватель

Лекция 2. Формы семантических описаний

Семантический домен, семантическая функция. Понятие "стиля" описания семантики. Язык простых варажений и его денотационная семантика. Операционные семантики малого и большого шага. Семантика в терминах редукционных контекстов. Помеченные системы переходов. Композиционность, структурная индукция.

Лекция 3

Лекция 3. Язык чистых выражений

Expand icon
28.09.2026 / ПН
18:00–19:30
Лекция
avatar
Дмитрий БулычевПреподаватель

Лекция 3. Язык чистых выражений

Синтаксис языка чистых выражений. Денотационная семантика языка чистых выражений. Операционная семантика языка чистых выражений: семантика большого и малого шага, семантика с редукционными контекстами, семантика в виде системы помеченных переходов. Строгость семантики чистых выражений. Эквивалентность семантик, описанных различными стилями.

Лекция 4

Лекция 4. Простой имеративный язык: семантика большого и малого шага

Expand icon
12.10.2026 / ПН
18:00–19:30
Лекция
avatar
Дмитрий БулычевПреподаватель

Лекция 4. Простой имеративный язык: семантика большого и малого шага

Простой императивный язык: присваивания, последовательное исполнение, пустой оператор, ветвления, циклы, ввод-вывод. Операционные семантики большого и малого шага для императивных конструкций.

Лекция 5

Лекция 5. Простой императивнй язык: помеченные системы переходов, редукционные контексты, проблема денотационной семантики

Expand icon
12.10.2026 / ПН
19:40–21:10
Лекция
avatar
Дмитрий БулычевПреподаватель

Лекция 5. Простой императивнй язык: помеченные системы переходов, редукционные контексты, проблема денотационной семантики

Семантика в стиле редукционных контекстов и помеченных систем переходов. Ненаблюдаемые действия. Некомпозиционность семантики простого императивного языка, принципы доказательств индукцией по дереву вывода и длине последовательности вывода. Проблема денотационного описания для простого императивного языка.

Лекция 6

Лекция 6. Семантика рекурсивного определения как неподвижная точка его абстрагированной правой части

Expand icon
19.10.2026 / ПН
18:00–19:30
Лекция
avatar
Дмитрий БулычевПреподаватель

Лекция 6. Семантика рекурсивного определения как неподвижная точка его абстрагированной правой части

Рекурсивные определения и неподвижные точки. Частично-упорядоченные множества, монотонные и дистрибутивные функции. Свойства редуктивности и экстенсивности. Решетки и полные решётки. Теорема Тарского-Кнастера. Варианты теорем о неподвижных точках. Индуктивные и коиндуктивные определения и принципы доказательства.

Лекция 7

Лекция 7. Денотационная семантика рекурсивных определений

Expand icon
26.10.2026 / ПН
18:00–19:30
Лекция
avatar
Дмитрий БулычевПреподаватель

Лекция 7. Денотационная семантика рекурсивных определений

Частичный порядок, основанный на доопределении. Мотовация и связь с рекурсией. Частичные порядки с упорядоченными цепями. Теорема о неподвижной точке монотонной функции. Денотационная семантика циклических конструкций.

Лекция 8

Лекция 8. Лямбда-исчисление: синтаксис и основные определения

Expand icon
02.11.2026 / ПН
18:00–19:30
Лекция
avatar
Дмитрий БулычевПреподаватель

Лекция 8. Лямбда-исчисление: синтаксис и основные определения

Синтаксис нетипизированного лямбда-исчисления. Интуитивная семантика. Свободные и связанные переменные. Подстановка, альфа-эквивалентность, бета-редукция, эта-расширение. Проблема захвата переменных. Конгруэнтные отношения. Бета-сводимость и бета-эквивалентность. Бета-нормальная форма, теорема Чёрча-Россера.

Лекция 9

Лекция 9. Лямбда-представимость; нумералы Чёрча.

Expand icon
09.11.2026 / ПН
18:00–19:30
Лекция
avatar
Дмитрий БулычевПреподаватель

Лекция 9. Лямбда-представимость; нумералы Чёрча.

Представление булевских значений лямбда-термами. Кодирование условного оператора. Нумералы Чёрча, кодирование арифметических операций. Комбинатор неподвижной точки, кодирование рекурсии/циклических конструкций. Y- и Z-комбинаторы.

Лекция 10

Лекция 10

Expand icon
16.11.2026 / ПН
18:00–19:30
Лекция
avatar
Дмитрий БулычевПреподаватель

Лекция 10

Лекция 11

Лекция 11

Expand icon
23.11.2026 / ПН
18:00–19:30
Лекция
avatar
Дмитрий БулычевПреподаватель

Лекция 11

Лекция 12

Лекция 12

Expand icon
30.11.2026 / ПН
18:00–19:30
Лекция
avatar
Дмитрий БулычевПреподаватель

Лекция 12

Лекция 13

Лекция 13

Expand icon
07.12.2026 / ПН
18:00–19:30
Лекция
avatar
Дмитрий БулычевПреподаватель

Лекция 13

Лекция 14

Лекция 14

Expand icon
14.12.2026 / ПН
18:00–19:30
Лекция
avatar
Дмитрий БулычевПреподаватель

Лекция 14

Лекция 15

Лекция 15

Expand icon
21.12.2026 / ПН
18:00–19:30
Лекция
avatar
Дмитрий БулычевПреподаватель

Лекция 15

Лекторы

avatar
Дмитрий БулычевПреподаватель

Дополнительные материалы

1 материал

Партнеры