Хто-небудь фактично створив систему, яка записує комп'ютерні програми із специфікації?


17

Хтось насправді писав систему (програмне забезпечення або детальне пояснення на папері з простими прикладами), що генерує комп'ютерні програми? Я ввожу і вона створює програму, яка містить прості числа менше 10. просто визначається як Професори кажуть, що можуть, але ніхто не дає фактичних повних прикладів.Пriме(х)х<10Пriме(х)

1<хАс.т.1<АА<хх=А×Б, з А,БN

13
Ви маєте на увазі, як, знаєте, компілятор для мови програмування загального призначення?
Сашо Ніколов

1
Привіт - Ласкаво просимо в cstheory! На жаль, ваше запитання не є питанням рівня дослідження в теоретичній інформатиці і є поза темою на цьому сайті.

Власне, це гарне питання, що знаходиться на вершині сучасних досліджень, і дуже перспективне. Однак часто дуже важко точно вказати, що ви хочете. Якщо вам вдасться його вказати, то вам потрібна система, яка доведе, що це має сенс, що це можливо, і що вимагатиме математичного підтвердження. З цього доказу може бути витягнута програма, яка це робить. Але дослідження для автоматизації доказування та вилучення програми ще в зародковому стані, хоча й добре розвиваються. Ви можете подивитися, наприклад, Coq на wikipedia.- - - cc @LevReyzin
babou

2
Ось книга, відповідна вашому запитанню. Є й інші. Зрозуміти це не просто. Натовп Coq та Ізабел (ще одна така система) включає користувачів SE, які могли б дати вам більше інформації та прикладів, якби питання не було закрито. Я знайшов це за допомогою пошуку в Інтернеті для: синтезу прикладу програми coq.
бабу

2
Область інформатики, яка охоплює те, про що ви запитуєте, називається програмним синтезом і є активною областю досліджень.
Гек Беннетт

Відповіді:


11

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

Це сильно пов'язане з результатом у логіці, який називається відповідністю Керрі-Говарда (або ізоморфізмом), що показує, що комп'ютерні програми та математичні докази дуже схожі.

Отже, ідея полягає в тому, що система сприйме специфікацію вашої програми як теорему, яку потрібно довести. У випадку вашого прикладу це було б щось на зразок (неофіційно): "існує набір усіх простих чисел менше 10".

Тоді ви спробуєте довести, що теорема та існуючі системи допоможуть вам зробити доказ, автоматизувати деякі частини, можливо, цілі докази, і переконавшись, що ви ніколи не помилитесь.

З цього доказу можна витягнути програму, яка фактично обчислює шуканий список простих чисел, який був спочатку вказаний.

У минулому було розроблено декілька систем для з'ясування цих ідей. Одним із відомих був LCF з допомогою Робін Мілнер , який створив мову ML для цієї мети. Однією з найбільш передових на даний момент систем є Coq .

Є приклади, повністю відпрацьовані, деякі з них досить складні. Ви можете їх знайти в наступному статті , хоча це аж ніяк не просте читання і вимагає передових знань з логіки.


9

Відповідь ваги: ​​Так, але під час написання для більшості нетривіальних програм специфікації виглядають так само важко, як і програми.

Більш серйозно, відповідь бабу хороша, але я також пропоную перевірити область залежних типів. Там є досить хороша книга, що використовує Coq (повна відмова: написана моїм другом), але є також Епіграма, Агда та Ідріс. Ізабель / HOL також варто перевірити.

Усі вони базуються на обчисленні конструкцій. Якщо ви хочете знати теоретичну основу, знайдіть теорію типу Мартіна-Лефа. Навколо є кілька чудових знайомств.


Я повністю згоден щодо технічних характеристик (а також решти вашої відповіді, але ви знаєте це краще, ніж я). Будь-який реальний програміст знає, як важко повністю уточнити, що програма повинна робити. Це головне питання в інженерії програмного забезпечення. І це перекладається і тут, хоча проблеми, які вирішуються, загалом є більш математичними. Однак я не хотів звучати занадто зневажливо (особливо враховуючи історію цього питання, проілюстровану першим коментарем).
бабу

4

Відбуваючи тут дотичну, програмні генератори (тобто системи, які давали опис на високому рівні чимось спеціальною мовою) існують назавжди. Будь-який компілятор є одним із таких, як і будь-який з багатьох генераторів парсера. Ще в той час були популярні системи під назвою "мови третього покоління", які генерували (більшість) код типового бізнес-додатку, даючи опис високого рівня та каталог доступних даних.


1

Логічне програмування і, загалом, декларативне програмування, сприймайте саме те, що ви пропонуєте: а саме з логічної специфікації поверніть результат, що відповідає цій специфікації.

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

Ви можете спробувати ECLiPSe для конкретної (з відкритим кодом) реалізації такої системи.


Чи правильно було б сказати, що парадигма логіки / обмежень - це більше для визначення відповідей, ніж для визначення програм. Звичайно, можна сказати, що неповна специфікація - це програма. Але я якось не впевнений, що це та сама гра, що і синтез програм. Це правда, але це відповідає на прикладі, тому що приклад був дуже простим. Я не хочу сказати, що програмування обмежень стосується лише простих проблем.
бабу
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.