Факультатив "Теория вычислений и логика" — различия между версиями

Материал из Wiki - Факультет компьютерных наук
Перейти к: навигация, поиск
(История: Добавлено занятие 11 -- последнее)
(Страница подготовлена к весне 2021)
Строка 1: Строка 1:
Факультатив дополняет курс дискретной математики-2 рядом сюжетов из математической логики и теории алгоритмов. Содержание курса может меняться в соответствии с желаниями слушателей: мы уделим больше внимания вопросам, заинтересовавшим аудиторию. Занятия планируется проводить в формате живой беседы участников. Мы будем пытаться самостоятельно приходить к некоторым важным идеям, прежде чем вводить формальные определения. Факультатив желательно (хотя и необязательно) посещать одновременно с изучением курса дискретной математики-2 или после прохождения этого курса.
+
Факультатив представляет собой введение в науку о сложности вычислений – красивую и богатую глубокими результатами область математики. Если теория алгоритмов пытается ответить на вопрос "что можно и чего нельзя вычислить на компьютере?", то теория сложности уточняет "что можно вычислить быстро?", "что принципиально невозможно вычислить быстро?", "что делает трудные задачи трудными?", "можно ли использовать случайность, чтобы ускорить вычисления?". Чтобы (попытаться) ответить на эти вопросы, мы разобьём задачи на классы сложности и будем сравнивать разные классы между собой. Некоторые из наших теорем будут чисто теоретическими (зато очень красивыми!), а некоторые будут иметь прямые приложения в алгоритмической практике, на которые мы постараемся явно указывать.
 +
 
 +
Каждую неделю будет проходить «занятие» (одна пара) – смесь лекции и семинара в меняющейся пропорции. Будут задачи для самостоятельного решения, расширяющие и дополняющие материал занятий.
 +
 
 +
Для успешного прохождения курса достаточно иметь общее представление об алгоритмах, алгоритмических задачах и математических доказательствах. В примерах и задачах мы будем использовать стандартные вещи: булевы функции, графы, простые числа и так далее, однако никаких специальных предварительных знаний не предполагается.
  
 
==Общая информация==
 
==Общая информация==
'''Официальное название:''' «Избранные вопросы теории вычислений и математической логики».
+
'''Официальное название:''' «Теория вычислений». (Никакой "и логики" в названии нет, хотя в программе она может появиться (см. курсив в программе курса)).
  
 
'''Преподаватель:''' [https://www.hse.ru/org/persons/305069360 Антон Гнатенко], почта: [mailto:agnatenko@hse.ru agnatenko@hse.ru], телеграм: [https://t.me/antongnatenko @antongnatenko]. Всюду на этой странице местоимение «я» обозначает именно этого человека.
 
'''Преподаватель:''' [https://www.hse.ru/org/persons/305069360 Антон Гнатенко], почта: [mailto:agnatenko@hse.ru agnatenko@hse.ru], телеграм: [https://t.me/antongnatenko @antongnatenko]. Всюду на этой странице местоимение «я» обозначает именно этого человека.
  
'''Время и место:''' среда (с 16 сентября), 9:30-10:50, '''Zoom''': <для получения ссылки — добавляйтесь в чат>
+
'''Время и место:''' уточняются
  
'''Записи занятий:''' https://www.youtube.com/playlist?list=PLbjUsKUoAqLPFWgiaIFX4QW__3Obyipcw
+
'''Записи занятий:'''  
  
'''Доски (начиная с занятия 7 (11 ноября)):''' https://drive.google.com/drive/folders/1ahvNYYDqhXqWDyhUYwX-OteyWKOLaa05?usp=sharing
+
'''Доски:'''  
  
 
'''Телеграм-чат:''' https://t.me/joinchat/FehKYBXfk1Mu7npLZ3Tt_w
 
'''Телеграм-чат:''' https://t.me/joinchat/FehKYBXfk1Mu7npLZ3Tt_w
Строка 16: Строка 20:
 
Ссылка на эту страницу: https://tinyurl.com/logicomp
 
Ссылка на эту страницу: https://tinyurl.com/logicomp
  
Форма для задач: https://forms.gle/erSRPvvgTbroDK5G8
+
Форма для задач: https://forms.gle/fvZhCKN4BmRTRRB76
  
Таблица с оценками: https://docs.google.com/spreadsheets/d/1FhHnZJBfumvzNVqcnviWxmR8cIulIwRSmCQmaRXoC6g/edit?usp=sharing
+
Таблица с оценками:  
  
 
==История==
 
==История==
'''16 сентября 2020. Занятие 1. ''' Конечные автоматы и регулярные языки.
+
Пока ничего не произошло
 
+
Видеозапись: https://youtu.be/80Ur1TKLU48
+
 
+
Конспект: https://drive.google.com/file/d/1Xa8nprULWAkrj5E1OFAci06ucIZoHCo_/view?usp=sharing
+
<br />
+
<br />
+
 
+
'''18 сентября 2020. Выложена первая порция задач.''' См. раздел [http://wiki.cs.hse.ru/%D0%A4%D0%B0%D0%BA%D1%83%D0%BB%D1%8C%D1%82%D0%B0%D1%82%D0%B8%D0%B2_%22%D0%A2%D0%B5%D0%BE%D1%80%D0%B8%D1%8F_%D0%B2%D1%8B%D1%87%D0%B8%D1%81%D0%BB%D0%B5%D0%BD%D0%B8%D0%B9_%D0%B8_%D0%BB%D0%BE%D0%B3%D0%B8%D0%BA%D0%B0%22#.D0.97.D0.B0.D0.B4.D0.B0.D1.87.D0.B8 «Задачи»]
+
<br />
+
<br />
+
 
+
'''23 сентября 2020. Занятие 2.''' Лемма о накачке. Двусторонние автоматы.
+
 
+
Видеозапись: https://youtu.be/ssBN5EcUIqU
+
<br />
+
<br />
+
 
+
'''30 сентября 2020. Занятие 3.''' Некоторые открытые проблемы теории автоматов. Древесные автоматы.
+
 
+
Видеозапись: https://youtu.be/nSO7Uzze0YI
+
<br />
+
<br />
+
 
+
'''7 октября 2020. Занятие 4.''' Проблема усердного бобра. Примитивно рекурсивные функции.
+
 
+
Видеозапись: https://youtu.be/YKBEfiTU-YI
+
<br />
+
<br />
+
 
+
'''11 октября 2020. Выложена вторая порция задач и новая бонусная задача по автоматам.''' См. раздел [http://wiki.cs.hse.ru/%D0%A4%D0%B0%D0%BA%D1%83%D0%BB%D1%8C%D1%82%D0%B0%D1%82%D0%B8%D0%B2_%22%D0%A2%D0%B5%D0%BE%D1%80%D0%B8%D1%8F_%D0%B2%D1%8B%D1%87%D0%B8%D1%81%D0%BB%D0%B5%D0%BD%D0%B8%D0%B9_%D0%B8_%D0%BB%D0%BE%D0%B3%D0%B8%D0%BA%D0%B0%22#.D0.97.D0.B0.D0.B4.D0.B0.D1.87.D0.B8 «Задачи»]
+
<br />
+
<br />
+
 
+
'''14 октября 2020. Занятие 5.''' Функция Аккермана. Частично рекурсивные функции.
+
 
+
Видеозапись: https://youtu.be/hqtfPIGA72k
+
<br />
+
<br />
+
 
+
'''28 октября 2020. Занятие 6.''' Лямбда-исчисление. Моделирование примитивно рекурсивных функций.
+
 
+
Видеозапись: https://youtu.be/bCSIW_3Pzwg
+
<br />
+
<br />
+
 
+
'''4 ноября 2020. Добавлены задачи по лямбда-исчислению.''' См. раздел [http://wiki.cs.hse.ru/%D0%A4%D0%B0%D0%BA%D1%83%D0%BB%D1%8C%D1%82%D0%B0%D1%82%D0%B8%D0%B2_%22%D0%A2%D0%B5%D0%BE%D1%80%D0%B8%D1%8F_%D0%B2%D1%8B%D1%87%D0%B8%D1%81%D0%BB%D0%B5%D0%BD%D0%B8%D0%B9_%D0%B8_%D0%BB%D0%BE%D0%B3%D0%B8%D0%BA%D0%B0%22#.D0.97.D0.B0.D0.B4.D0.B0.D1.87.D0.B8 «Задачи»]
+
<br />
+
<br />
+
 
+
'''11 ноября 2020. Занятие 7.''' Лямбда-исчисление:  теоремы о неподвижной точке и о рекурсии
+
 
+
Видеозапись: https://youtu.be/O95mbv5YH_8
+
 
+
Доска: https://jamboard.google.com/d/1YjDm4adrO31QKmvgktj6uTcPPkYZEygYwYT_nc6CyIM/edit?usp=sharing
+
<br />
+
<br />
+
 
+
'''18 ноября 2020. Занятие 8.''' Теорема о неразрешимости для лямбда-исчисления, простые типы по Чёрчу
+
 
+
Видеозапись: https://youtu.be/P0N-Pxzep4E
+
 
+
Доска: https://jamboard.google.com/d/1eVMbsdByjNvyD07d6zaTYKKozTDsd5qZtP1TUYuUneU/edit?usp=sharing
+
 
+
Поскольку я потерял счёт времени, занятие 8 продолжалось примерно 50 минут.
+
<br />
+
<br />
+
 
+
'''17 ноября 2020. Выложена третья порция задач (включающая пару бонусных).''' См. раздел [http://wiki.cs.hse.ru/%D0%A4%D0%B0%D0%BA%D1%83%D0%BB%D1%8C%D1%82%D0%B0%D1%82%D0%B8%D0%B2_%22%D0%A2%D0%B5%D0%BE%D1%80%D0%B8%D1%8F_%D0%B2%D1%8B%D1%87%D0%B8%D1%81%D0%BB%D0%B5%D0%BD%D0%B8%D0%B9_%D0%B8_%D0%BB%D0%BE%D0%B3%D0%B8%D0%BA%D0%B0%22#.D0.97.D0.B0.D0.B4.D0.B0.D1.87.D0.B8 «Задачи»]
+
<br />
+
<br />
+
 
+
'''25 ноября 2020. Занятие 9.'''  Арифметика Пеано: язык, аксиомы и представление вычислимых функций. Теорема Чёрча о неразрешимости.
+
 
+
Видеозапись: https://youtu.be/gCZtU8iAwsw
+
 
+
Доска: https://jamboard.google.com/d/1aq6BRgMAevit7HDjbd0rGBSwJ09oaN9Pqj1v9vNI7XE/edit?usp=sharing
+
<br />
+
<br />
+
 
+
'''2 декабря 2020. Занятие 10.'''  Арифметика. Диагонализация. Теорема Тарского о неопределимости, две теоремы Гёделя о неполноте.
+
 
+
Видеозапись: https://youtu.be/AxKTTeMbHcY
+
 
+
Доска: https://jamboard.google.com/d/14Pkx7U8RMGQJBtcNK3rtPuWPJPgxlD74yG3seZuQowk/edit?usp=sharing
+
<br />
+
<br />
+
 
+
'''9 декабря 2020. Занятие 11.'''  Логика второго порядка, арифметика второго порядка.
+
 
+
Видеозапись: https://youtu.be/AzLyYHYzFEI
+
 
+
Доска: https://jamboard.google.com/d/10ZseVGiI4losvuOcq_0nIMx9IYh1Fd9cDkZSsSYwugU/edit?usp=sharing
+
<br />
+
<br />
+
 
+
'''Курс окончен. Приходите за продолжением в следующем семестре'''
+
  
 
==Программа курса (примерная)==
 
==Программа курса (примерная)==
  
Темы, ''написанные курсивом'', являются дополнительными. Мы рассмотрим их, если будет на то желание слушателей. Если ''курсивные темы'' станут реальностью, они могут вытеснить обычные темы и занять их место.
+
Темы, написанные прямым шрифтом – обязательные, это классика теории сложности вычислений. Темы, написанные курсивом, – дополнительные. Мы рассмотрим некоторые из них, если будет на то желание слушателей. Если ''курсивные темы'' станут реальностью, они могут вытеснить обычные темы и занять их место.
  
====Регулярные языки и автоматы====
+
* Временная сложность, классы P и NP.
* Детерминированные конечные автоматы и их языки
+
* NP-трудные и NP-полные задачи, NP-полнота задачи о выполнимости КНФ, о клике, о раскраске графа в 3 цвета, о существовании гамильтонова пути и других.
* Нерегулярные языки и лемма о накачке
+
* ''Решение NP-полных задач на практике (общий обзор).''
* Недетерминированные автоматы
+
* Класс coNP. ''Полиномиальная иерархия. Теорема о коллапсе полиномиальной иерархии.''
* Автоматы и поиск подстроки в строке
+
* Пространственная сложность, класс PSPACE, PSPACE-полные задачи ''и попытки решать их на практике (общий обзор)''.
* ''Алгебраические свойства регулярных языков. Минимизация автоматов''
+
* ''Сложность вычислений с помощью схем из функциональных элементов, класс P/poly.''
* ''Регулярные выражения''
+
* ''Коммуникационная сложность.''
* ''Автоматы на термах, на деревьях, над бесконечными словами, ...''
+
* ''Вероятностная сложность, класс BPP (и другие), вероятностные алгоритмы проверки числа на простоту и проверки полиномов на равенство.''
 +
* ''Интерактивные доказательства и вероятностно проверяемые доказательства.''
 +
* ''Разрешимость и сложность некоторых логических теорий, автоматы над бесконечными словами.''
 +
* ''Вычисления с оракулом. Арифметическая иерархия и аналитическая иерархия.''
  
====Теория алгоритмов====
 
* Частично рекурсивные функции
 
* Лямбда-исчисление
 
* ''Вычисления с оракулом''
 
 
====Логика====
 
* Логические способы описания языков. Выразительная сила логик. Трансляция формул в автоматы и автоматов в формулы.
 
* Логическое программирование
 
* ''Арифметика и вычислимые функции. Теоремы Чёрча, Тарского и Гёделя''
 
* ''Доказуемость в арифметике и ещё одна теорема Гёделя''
 
* ''Логика второго порядка''
 
 
* '''''...''''' (это многоточие написано ''курсивом'')
 
* '''''...''''' (это многоточие написано ''курсивом'')
  
 
==Правила оценивания==
 
==Правила оценивания==
Чтобы получить оценку, нужно набрать необходимое количество баллов (обычных и бонусных). Вот как это сделать:
+
Чтобы получить оценку, нужно набирать баллы (обычные и бонусные). Вот как это сделать:
  
* '''Решать задачи''', которые предлагаются на занятиях и появляются на этой страничке в разделе [http://wiki.cs.hse.ru/%D0%A4%D0%B0%D0%BA%D1%83%D0%BB%D1%8C%D1%82%D0%B0%D1%82%D0%B8%D0%B2_%22%D0%A2%D0%B5%D0%BE%D1%80%D0%B8%D1%8F_%D0%B2%D1%8B%D1%87%D0%B8%D1%81%D0%BB%D0%B5%D0%BD%D0%B8%D0%B9_%D0%B8_%D0%BB%D0%BE%D0%B3%D0%B8%D0%BA%D0%B0%22#.D0.97.D0.B0.D0.B4.D0.B0.D1.87.D0.B8 «Задачи»]. Для каждой задачи указано количество баллов, которые можно получить за правильное решение. У каждой задачи есть мягкий дедлайн — после него правильные решения получат половину баллов. Задачи можно сдавать устно или письменно. В случае письменной сдачи может потребоваться устная защита некоторых неслучайно выбранных задач. Баллы за задачу выставляются только в случае успешной защиты.
+
* '''Решать задачи''', которые предлагаются на занятиях и появляются на этой страничке в разделе [http://wiki.cs.hse.ru/%D0%A4%D0%B0%D0%BA%D1%83%D0%BB%D1%8C%D1%82%D0%B0%D1%82%D0%B8%D0%B2_%22%D0%A2%D0%B5%D0%BE%D1%80%D0%B8%D1%8F_%D0%B2%D1%8B%D1%87%D0%B8%D1%81%D0%BB%D0%B5%D0%BD%D0%B8%D0%B9_%D0%B8_%D0%BB%D0%BE%D0%B3%D0%B8%D0%BA%D0%B0%22#.D0.97.D0.B0.D0.B4.D0.B0.D1.87.D0.B8 «Задачи»]. Для каждой задачи указано количество баллов, которые можно получить за правильное решение. У каждой задачи есть мягкий дедлайн — после него правильные решения получат половину баллов. Задачи можно сдавать устно или письменно. В случае письменной сдачи может потребоваться дополнительное обсуждение некоторых неслучайно выбранных задач. Во время обсуждения нужно продемонстрировать понимание сданного решения. Зато можно исправить ошибки, если они там есть.
  
* '''Решать трудные задачи''', которые появляются там же. За трудные задачи даются '''бонусные баллы''' (см. ниже).
+
* '''Решать бонусные задачи''', которые появляются там же. За бонусные задачи даются '''бонусные баллы''' (см. ниже).
  
* '''Участвовать в занятиях'''. Иногда можно получить один или два '''бонусных балла''' за высказанную идею решения задачи, идею доказательства, ответ на вопрос.  
+
* '''Участвовать в занятиях'''. Иногда можно получить немного '''бонусных баллов''' за высказанную идею решения задачи, идею доказательства, ответ на вопрос.  
  
 
Пусть теперь M = «максимально возможное количество обычных баллов», а S = «сумма всех баллов (обычных и бонусных), набранных студентом за семестр».
 
Пусть теперь M = «максимально возможное количество обычных баллов», а S = «сумма всех баллов (обычных и бонусных), набранных студентом за семестр».
Тогда накопленная оценка равна P = min{S / M * 10, 10}.
+
Тогда оценка за курс вычисляется по формуле P = min{S / M * 10, 10}.
  
 
Таким образом, можно получить 10 баллов, просто решая обычные задачи. Но это проще сделать, если набирать бонусные баллы.
 
Таким образом, можно получить 10 баллов, просто решая обычные задачи. Но это проще сделать, если набирать бонусные баллы.
 
Если P >= 4, то по желанию студента можно объявить её итоговой оценкой за факультатив. Если P < 4 или студент хочет улучшить оценку, проводится письменный экзамен, состоящий из нескольких обычных задач. Оценка за экзамен E равна доле решённых задач от общего количества, умноженной на 10. Итоговая оценка вычисляется по формуле F = 0.5P + 0.5E. Если F всё ещё меньше 4, экзамен можно пересдать. Если и это не поможет, можно сдавать устный экзамен комиссии. При этом P аннулируется и оценка, полученная на экзамене, является окончательной. (Будем надеяться, что до этого не дойдёт.)
 
  
 
==Задачи==
 
==Задачи==
'''Письменные решения нужно сдавать [https://forms.gle/erSRPvvgTbroDK5G8 вот этой гугл-форме].''' Пожалуйста, оформляйте решения аккуратно. Для оцифровки записей лучше всего использовать не фото, а специальные приложения-сканеры. Например, Camscanner. Если вы сдаёте несколько задач сразу, объединяйте их в один пдф или в один архив.
+
'''Письменные решения нужно сдавать [https://forms.gle/fvZhCKN4BmRTRRB76 вот этой гугл-форме].''' Пожалуйста, оформляйте решения аккуратно. Для оцифровки записей лучше всего использовать не фото, а специальные приложения-сканеры. Например, Camscanner. Если вы сдаёте несколько задач сразу, объединяйте их в один пдф или в один архив.
  
 
Для сдачи файлов в форму нужен гугл-аккаунт. Если его нет и по каким-то причинам вы совсем не хотите его заводить, можно сдавать задачи устно или договориться о каком-либо ещё варианте. Но лучше всё-таки завести аккаунт.
 
Для сдачи файлов в форму нужен гугл-аккаунт. Если его нет и по каким-то причинам вы совсем не хотите его заводить, можно сдавать задачи устно или договориться о каком-либо ещё варианте. Но лучше всё-таки завести аккаунт.
  
'''Правила оформления решений.''' При изложении решений рекомендуется соблюдать разумный баланс между строгостью и размахиванием руками. Если требуется доказать, например, регулярность языка, то достаточно предоставить словесное описание соответствующего автомата (если только в условии явно не просят построить автомат). Описание должно быть, тем не менее, чётким и подробным (но без фанатизма). Если какие-то важные детали из этого описания будут неясны, я попрошу сделать пояснения (возможно, устные).
+
'''Правила оформления решений.''' При изложении решений рекомендуется соблюдать разумный баланс между строгостью и размахиванием руками. Если требуется доказать, например, принадлежность некоторого языка классу NP, то достаточно предоставить словесное описание соответствующей машины (если только в условии явно не просят построить машину). Описание должно быть, тем не менее, чётким и подробным (но без фанатизма). Если какие-то важные детали из этого описания будут неясны, я попрошу сделать пояснения (возможно, устные).  
 
+
'''Можно сдавать задачи устно:'''
+
* В Зуме в среду. О своём желании сдавать задачи нужно сообщить мне в конце занятия или написать в Телеграме, и мы договоримся об удобном времени. Точно недоступен интервал 15:10-16:40.
+
* В Вышке (о желании прийти и сдать задачи тоже нужно сообщить заранее):
+
**в понедельник (16:00-17:00)
+
**в пятницу (15:00-16:00)
+
 
+
[https://drive.google.com/file/d/1ix0jHA7Wb5QbOZ-whAXXLFPNk7M-N7kw/view?usp=sharing Задачи по автоматам]. Мягкий дедлайн: 1 ноября. Дедлайн по задаче 8 перенесён на конец курса.
+
 
+
[https://drive.google.com/file/d/18CZkDW3LvnIdAz45NAenWWqO2lxdAD7h/view?usp=sharing Бонусные задачи по автоматам]. Можно сдавать до конца курса.
+
 
+
[https://drive.google.com/file/d/1tO_A5gueirUT9MTURjGc9v04bRmaJefE/view?usp=sharing Задачи по рекурсивным функциям и лямбда-исчислению]. Мягкий дедлайн: 1 декабря.
+
  
[https://drive.google.com/file/d/19IspepZ3a9UXmaIfnQp5OUoH2WKUE5P7/view?usp=sharing Задачи по лямбда-исчислению и комбинаторной логике ('''есть бонусы''')]. Мягкий дедлайн: 21 декабря.
+
'''Вероятно, можно будет сдавать задачи устно.''' Подробности появятся позже.
  
 
==Литература==
 
==Литература==
# Dexter C. Kozen. Automata and Computability. (Моя любимая книга про автоматы)
+
# Dexter C. Kozen. Theory of Computation. (Замечательная книга по теории сложности вычислений, малоизвестная, по непонятным причинам, в нашей стране. Изложение структурировано в виде "лекций", часть из которых "обычные", а часть "продвинутые")
# Н.К. Верещагин, А. Шень. Вычислимые функции. (Незаменимая книга по курсу ДМ-2, в которой также можно почитать про рекурсивные функции, оракулы, арифметичность вычислимых функций)
+
# Michael Sipser. Introduction to the Theory of Computation (Очень хороший вводный учебник)
# Дж. Булос, Р. Джеффри. Вычислимость и логика. (Немного философская книга про логику и алгоритмы, в которой есть много всего интересного и, в частности, кое-что про логику второго порядка)
+
# Sanjeev Arora & Boaz Barak. Computational Complexity: A Modern Approach. (Большая книга, которая входит во все списки литературы по теории сложности вычислений)
# Dexter C. Kozen. Theory of Computation. (Ещё одна замечательная книга Декстера Козена по теории (сложности) вычислений; здесь можно прочитать про автоматы над бесконечными словами и про многое другое, не вошедшее, увы, в нашу программу)
+
# Д.В. Мусатов. Лекции по сложности вычислений в МФТИ (видеозаписи). https://mipt.lectoriy.ru/course/Maths-ComputationalComplexity-14L (Очень хороший курс лекций, существенно пересекающийся с нашим)
# С.Л. Кузнецов, Л.Д. Беклемишев. [https://www.youtube.com/playlist?list=PLUbD59ZHv1GTHQ8fFYc1stXVQ-RGRzy8q Плейлист спецкурса "Лямбда-исчисление и вычислительная теория доказательств"]
+
# J.R. Hindley, J.P. Seldin. Lambda-Calculus and Combinators, an Introduction.
+

Версия 18:40, 10 января 2021

Факультатив представляет собой введение в науку о сложности вычислений – красивую и богатую глубокими результатами область математики. Если теория алгоритмов пытается ответить на вопрос "что можно и чего нельзя вычислить на компьютере?", то теория сложности уточняет "что можно вычислить быстро?", "что принципиально невозможно вычислить быстро?", "что делает трудные задачи трудными?", "можно ли использовать случайность, чтобы ускорить вычисления?". Чтобы (попытаться) ответить на эти вопросы, мы разобьём задачи на классы сложности и будем сравнивать разные классы между собой. Некоторые из наших теорем будут чисто теоретическими (зато очень красивыми!), а некоторые будут иметь прямые приложения в алгоритмической практике, на которые мы постараемся явно указывать.

Каждую неделю будет проходить «занятие» (одна пара) – смесь лекции и семинара в меняющейся пропорции. Будут задачи для самостоятельного решения, расширяющие и дополняющие материал занятий.

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

Общая информация

Официальное название: «Теория вычислений». (Никакой "и логики" в названии нет, хотя в программе она может появиться (см. курсив в программе курса)).

Преподаватель: Антон Гнатенко, почта: agnatenko@hse.ru, телеграм: @antongnatenko. Всюду на этой странице местоимение «я» обозначает именно этого человека.

Время и место: уточняются

Записи занятий:

Доски:

Телеграм-чат: https://t.me/joinchat/FehKYBXfk1Mu7npLZ3Tt_w

Ссылка на эту страницу: https://tinyurl.com/logicomp

Форма для задач: https://forms.gle/fvZhCKN4BmRTRRB76

Таблица с оценками:

История

Пока ничего не произошло

Программа курса (примерная)

Темы, написанные прямым шрифтом – обязательные, это классика теории сложности вычислений. Темы, написанные курсивом, – дополнительные. Мы рассмотрим некоторые из них, если будет на то желание слушателей. Если курсивные темы станут реальностью, они могут вытеснить обычные темы и занять их место.

  • Временная сложность, классы P и NP.
  • NP-трудные и NP-полные задачи, NP-полнота задачи о выполнимости КНФ, о клике, о раскраске графа в 3 цвета, о существовании гамильтонова пути и других.
  • Решение NP-полных задач на практике (общий обзор).
  • Класс coNP. Полиномиальная иерархия. Теорема о коллапсе полиномиальной иерархии.
  • Пространственная сложность, класс PSPACE, PSPACE-полные задачи и попытки решать их на практике (общий обзор).
  • Сложность вычислений с помощью схем из функциональных элементов, класс P/poly.
  • Коммуникационная сложность.
  • Вероятностная сложность, класс BPP (и другие), вероятностные алгоритмы проверки числа на простоту и проверки полиномов на равенство.
  • Интерактивные доказательства и вероятностно проверяемые доказательства.
  • Разрешимость и сложность некоторых логических теорий, автоматы над бесконечными словами.
  • Вычисления с оракулом. Арифметическая иерархия и аналитическая иерархия.
  • ... (это многоточие написано курсивом)

Правила оценивания

Чтобы получить оценку, нужно набирать баллы (обычные и бонусные). Вот как это сделать:

  • Решать задачи, которые предлагаются на занятиях и появляются на этой страничке в разделе «Задачи». Для каждой задачи указано количество баллов, которые можно получить за правильное решение. У каждой задачи есть мягкий дедлайн — после него правильные решения получат половину баллов. Задачи можно сдавать устно или письменно. В случае письменной сдачи может потребоваться дополнительное обсуждение некоторых неслучайно выбранных задач. Во время обсуждения нужно продемонстрировать понимание сданного решения. Зато можно исправить ошибки, если они там есть.
  • Решать бонусные задачи, которые появляются там же. За бонусные задачи даются бонусные баллы (см. ниже).
  • Участвовать в занятиях. Иногда можно получить немного бонусных баллов за высказанную идею решения задачи, идею доказательства, ответ на вопрос.

Пусть теперь M = «максимально возможное количество обычных баллов», а S = «сумма всех баллов (обычных и бонусных), набранных студентом за семестр». Тогда оценка за курс вычисляется по формуле P = min{S / M * 10, 10}.

Таким образом, можно получить 10 баллов, просто решая обычные задачи. Но это проще сделать, если набирать бонусные баллы.

Задачи

Письменные решения нужно сдавать вот этой гугл-форме. Пожалуйста, оформляйте решения аккуратно. Для оцифровки записей лучше всего использовать не фото, а специальные приложения-сканеры. Например, Camscanner. Если вы сдаёте несколько задач сразу, объединяйте их в один пдф или в один архив.

Для сдачи файлов в форму нужен гугл-аккаунт. Если его нет и по каким-то причинам вы совсем не хотите его заводить, можно сдавать задачи устно или договориться о каком-либо ещё варианте. Но лучше всё-таки завести аккаунт.

Правила оформления решений. При изложении решений рекомендуется соблюдать разумный баланс между строгостью и размахиванием руками. Если требуется доказать, например, принадлежность некоторого языка классу NP, то достаточно предоставить словесное описание соответствующей машины (если только в условии явно не просят построить машину). Описание должно быть, тем не менее, чётким и подробным (но без фанатизма). Если какие-то важные детали из этого описания будут неясны, я попрошу сделать пояснения (возможно, устные).

Вероятно, можно будет сдавать задачи устно. Подробности появятся позже.

Литература

  1. Dexter C. Kozen. Theory of Computation. (Замечательная книга по теории сложности вычислений, малоизвестная, по непонятным причинам, в нашей стране. Изложение структурировано в виде "лекций", часть из которых "обычные", а часть "продвинутые")
  2. Michael Sipser. Introduction to the Theory of Computation (Очень хороший вводный учебник)
  3. Sanjeev Arora & Boaz Barak. Computational Complexity: A Modern Approach. (Большая книга, которая входит во все списки литературы по теории сложности вычислений)
  4. Д.В. Мусатов. Лекции по сложности вычислений в МФТИ (видеозаписи). https://mipt.lectoriy.ru/course/Maths-ComputationalComplexity-14L (Очень хороший курс лекций, существенно пересекающийся с нашим)