Як пов’язані мови програмування та основи математики?


30

В основному я знаю три основи математики

  1. Теорія множин
  2. Теорія типів
  3. Теорія категорій

Тож якими способами пов'язані мови програмування та основи математики?

EDIT

Первісне питання було "Мови програмування на основі математики"

з доданим парагарфом

І реалізація теорії
1. Теорія типів у Coq
2. Теорія множин у SETL
3. Теорія категорій у Haskell

На основі пропозиції це було змінено на "Як пов'язані мови програмування та основи математики"

Оскільки це одне з таких питань: я не знав достатньо того, про що я питав, але хотів щось навчитися, я модифікував це питання, щоб зробити його більш цінним для навчання та інших, але залишаючи деталі, щоб не зробити Поточна відповідь Андрія Бауера здається поза темою.

Дякую за всі коментарі та відповідь досі, я вчуся від них.


1
Я не впевнений, чи розумію це питання чи припущення, викладені в ньому. Наскільки я розумію, Coq - це не мова програмування. Програми можуть бути вилучені з доказів Coq, але це не робить мову програмування. Також теорія категорій та теорія типів тісно пов'язані, тому я не впевнений, чи зможемо ми класифікувати їх як у вас. Не знаю про SETL. Дивіться також список помічників у Вікіпедії.
Каве

3
Хаскелл - це не «реалізація теорії категорій», і в будь-якому випадку основи математики служать іншому призначенню, ніж мови програмування. Незважаючи на те, що можна порівняти, не так добре намагатися змусити порівняння у формальних відносинах.
Андрій Бауер

1
Відповідне посилання на святу Трійцю
садок

Відповіді:


29

[Примітка: цей параграф зараз застарів.] Назва вашого запитання містить необґрунтоване припущення, а саме, що мови програмування "засновані на засадах математики". Це, як правило, не так, хоча дві області мають важливі стосунки. Більш точним буде твердження про те, що (деякі) мови програмування були розроблені з використанням основоположних методів. Кращим питанням буде "як пов'язані мови програмування та основи математики?"

Найзагальніший зв'язок втілений у слогані « докази-програми» , які можна зробити декількома способами. Переписка Каррі-Говард є найбільш очевидною. З ним ми відразу пов'язуємо теорію, логіку та програмування типу. Але слід підкреслити, що листування Кері-Говарда працює не дуже добре за наявності загальної рекурсії (оскільки кожен тип стає населеною), яку підтримує кожна мова програмування загального призначення.

Більш тонким способом примусової роботи лозунгу як програми є використання реалізабельності . Тут ми також співвідносимо докази та програми, але зараз напрямок йде від доказів до програм: кожен доказ дає програму, але не кожна програма обов'язково є доказом.

Основним прикладом мови програмування, заснованого на фундаменті, є Agda , яка просто є реалізацією теорії залежного типу. Однак Agda не є мовою програмування загального призначення, оскільки не підтримує загальну рекурсію. Кожна функція в Agda є загальною, і є обчислювані функції, які неможливо реалізувати в Agda. На практиці програмісти цього не помітять, але вони помітять, що Agda не допускає невизначених значень, наприклад нескінченних циклів.

Coq - це не мова програмування, а скоріше корекційний помічник. Однак він також має можливості видобутку, які дають програми з підтверджень. Асистентів-кореспондентів та мови програмування не слід плутати один з одним.

Не слід забувати, що пролог та інші мови логічного програмування беруть натхнення від думки, що обчислення - це пошук доказів . Це, звичайно, пов’язує їх з логікою.

Haskell - мова програмування загального призначення, яка базується на теорії домену . Тобто його семантика є теоретично доменною, оскільки вона повинна враховувати часткові функції та рекурсію. Громада Хаскелла розробила ряд методів, натхнених теорією категорій, з яких монади найбільш відомі, але їх не слід плутати з монадами . Більш загальнодоступні функції програмування зазвичай розглядаються за допомогою комбінації теорії доменів та теорії категорій, але це не те, в чому хакельський програміст на вулиці вміє. Так звана "синтаксична категорія" типів Хаскелла - це уявлення мирян про те, як Хаскелл і теорія категорій відповідають один одному.

Теорія наборів (класична чи конструктивна), здається, надихає ідеї в мові програмування меншою мірою. Звичайно, теорія конструктивних множин має свій зв'язок з програмуванням через конструктивну логіку. Одне важливе застосування інтуїтивістської теорії множин до мов програмування було надано Алексом Сімпсоном, який використовував її для роботи синтетичної теорії доменів. Але це досить вдосконалений матеріал, можливо, дивіться ці слайди . Жан-Луї Кривін розробив дуже цікавий бренд реалізації для класичної теорії множин. Це здається хорошим способом співвідносити класичну теорію множин та програмування.

Підводячи підсумок, теорія мов програмування використовує основоположні методи. Це не дивно, оскільки ми вважаємо обчислення основним поняттям. Але занадто наївно говорити, що мови програмування "базуються" на певних засадах. Насправді трихотомія основ "теорія множин - теорія типів - теорія категорій" - це знову лише корисне спостереження високого рівня, яке можна зробити математично точним різними способами, але в цьому немає нічого необхідного. Це історична аварія.


"ідея, що обчислення - це пошук доказів ." Мене бентежить це твердження. Безумовно, пошук доказів є формою обчислень, але чи не всі обчислення є пошуковим доказом? У контексті цього питання також існує перевірка доказів, перевірка типу. Більш загально, просто додавання 5 + 3. Що ви маєте на увазі під цим твердженням?
user56834

6

це дуже складна тема, і є багато чудових книг на цю тему, останній називається Собор Терзінга, витоки цифрового Всесвіту, а також Двигуни логіки, математики та витоки комп'ютера .

комп'ютерні мови розвивалися протягом багатьох десятиліть, але вірите чи ні, є дві оригінальні мови програмування, які показують, що математика та інформатика тісно переплітаються:

Є дві ключові фігури, які перетнули межі математики та інформатики wrt "мови програмування":

  • Теорія інформації, вперше створена Шенноном, показує глибокі зв’язки між математикою та інформатикою

  • Ще одна ключова фігура, що перетинається між математикою та інформатикою, - це Фон Нойман . він винайшов архітектуру фон Неймана для зберігання програм у пам'яті.

ще раніше "мови програмування":

  • Англійське слово "комп'ютер" спочатку означало щось більше на кшталт "калькулятор", який використовував математичні операції над числами та його значення суттєво перейшов до загальної концепції програмування сьогодні. тому існує зв'язок між мовами програмування та ранніми калькуляторами.
  • перфокарти, які використовувались у ткацьких ткацьких верстатах кінця 19 - початку 20 століття, були "мовою програмування" для ткацьких візерунків. зауважте, що перфокарти використовувались для програмування мейнфреймів значно в 1960-х роках. вони спочатку розглядалися як "обчислювальні машини" (використовуючи математику!) не стільки сучасні комп'ютери загального призначення.
  • Беббідж і Ада Ловеллес розробили рудиментарні ранні концепції "мови програмування" в середині 1800-х років на "обчислювальній машині"
  • булева алгебра спочатку була чисто математичною концепцією, винайденою Булом
  • стародавня (тисячоліття стара) абака для математичного обчислення розглядається як провісник сучасного комп’ютера. але можна сказати, що операції по маніпулюванню ним були свого роду "мовою програмування" (за якою слідували люди)

Однак у сучасних мовах програмування, коли абстракція зростала та масштабувалась, чіткий, прямий зв’язок з математикою дещо зменшувався протягом десятиліть, але його завжди буде досить сутнісним і певним чином зміцнилося. наприклад, такі мови, як Java та її суворі типи, мають зв'язки з математикою, і, починаючи з кінця ~ 1990-х, основні комп'ютерні мови (наприклад, c ++, Java, Ruby тощо) почали явно реалізовувати багато математичних об'єктів вищого рівня як поблизу примітивів у такі мови, як набори, дерева (наприклад, Btrees або хешмапи) тощо.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.