Шестилетний сын профессора из Hendrix College застал отца за чтением хабилитационной диссертации Яниса Фойгтлендера. На вопрос «что это?» отец честно ответил: «Очень длинная история про свободные теоремы». Сын переспросил, что такое свободные теоремы. Тогда отец решил объяснять с нуля.
Функция — это как машина: что-то кладёшь на вход, что-то выходит на выход. Например, на входе число три — на выходе четыре. Тип функции говорит, что можно класть и что получать: числа, списки чисел или даже слова. Когда сын понял, что можно класть и другие функции, он ахнул от восторга.
Свободная теорема, объяснил отец, — это утверждение, которое верно для любой функции, если ты знаешь только её тип и ничего не знаешь про внутренности. Для шестилетки это оказалось сложновато, особенно без полиморфизма. Но разговор навёл на идею игры.
Игра называется «function machine game». Отец загадывает функцию, сын подаёт ей на вход разные значения, а отец сообщает, что вышло. Задача — угадать, что делает функция. Сыну игра безумно понравилась: они играли в машине по дороге на вечеринку и утром, пока папа был в душе.
Сын угадал несколько функций: константную (всегда выводит 5), функцию следования (прибавляет единицу). Константная далась тяжело — мальчик долго не мог поверить, что машине всё равно на вход. Интересно, что точно такая же трудность возникла у студентов курса функционального программирования, когда они изучали лямбда-исчисление: они отказывались подставлять вход, если переменная не встречается в теле.
Потом сын захотел загадывать свои функции. Иногда они получались отличными, иногда бессмысленными (он менял правило по ходу, но искренне отрицал это). После того как он наконец осознал константную функцию, он придумал свою — про пары чисел, дающих в сумме 10 (подсмотрел в детском саду). Автор считает это одним из лучших своих родительских дней.