В інформатиці ми хочемо проаналізувати та зрозуміти вихідний код з математичною суворістю. Це єдиний спосіб довести цікаві властивості (наприклад, припинення) з абсолютною впевненістю. Для цього нам потрібна мова з дуже чітко визначеним значенням для кожної конструкції.
Теоретично це може бути будь-яка мова з хорошою формальною семантикою . Але щоб зробити речі менш складними та менш схильними до помилок, найкраще використовувати мову, максимально просту, але все ж здатну висловити будь-яку програму (тобто Тьюрінг завершений ). Для міркувань про імперативний код існують машини Тюрінга . Але для міркувань про функціональне програмування існує -рахунок.λ
Основний -рахунок схожий на функціональну мову програмування, але з великою кількістю «багажу» вийнято. Не важливо, щоб це була гарна мова, щоб насправді писати програми, а також не бути ефективною мовою. Тільки, що це просто і виразно. Наприклад, петлі нам не потрібні, оскільки ми можемо імітувати їх за допомогою рекурсії. І нам не потрібні функції з кількома параметрами, оскільки ми можемо імітувати їх за допомогою Currying .λ
Тепер у якийсь момент ви можете довести властивості щодо конструкцій, які не є частиною базового (нетипізованого) -рахунку. Ось чому комп’ютери впродовж років розширювали його в різних напрямках. Наприклад, для міркувань про типові системи існує велика кількість варіантів типізованих λ -калькулів .λλ