Коли можна сказати, що дві програми різні?


15

Q1. Коли ми можемо сказати, що дві програми (написані якоюсь мовою програмування, як C ++) відрізняються?

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

Q2. Чи однакові програми та алгоритми? Якщо ні, що таке визначення алгоритму та чим воно відрізняється від визначення програми? Коли можна сказати, що два алгоритми еквівалентні?


Програма проблеми ізоморфізму? Не можна запитати "чи ця програма ізоморфна програмі, яка завжди зупиняється?" і відновити проблему зупинки? Якщо ми обмежимось проблемою програми обмеженої зупинки, чи не це просто ізоморфізм графіка?
user834

5
Коли два алгоритми однакові? arxiv.org/abs/0811.0811
sdcvvc

1
Чи не це повністю залежало б від контексту? Тут трохи по-філософськи, але крісло з підкрученим боком та кріслом з підкрученим боком вниз - це те саме, що фізично, але не однакове з точки зору ідеї крісла.
Рей Міясака

Трохи поза темою, але, оскільки докази є програмами ... gowers.wordpress.com/2007/10/04/…
Radu GRIGо

1
Наступна стаття дуже пов'язана. Я лише переглянув це деякий час тому, але Бласс та Гуревич зазвичай дуже добре пишуть (я просто не пам'ятаю, щоб читати щось інше від Дершовіца, не кажучи, що це зазвичай не дуже читабельно). research.microsoft.com/en-us/um/people/gurevich/Opera/192.pdf КОЛИ ДВІ АЛГОРИТМИ САМІ? ANDREAS BLASS, NACHUM DERSHOWITZ, AND YURI
GUREVICH

Відповіді:


18

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

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


Введення та побічні ефекти взагалі взагалі не охоплені поняттями класичного алгоритму.
Рафаель

15

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

Це не є крайнім: потрібно визначити еквівалентність програми відносно поняття спостереження.

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

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

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

В основному, немає єдиного поняття еквівалентності програми; це завжди щодо поняття спостереження, яке ви вибираєте, і це залежить від програми, яку ви маєте на увазі.


1
Варто зазначити, що не існує єдиного поняття контекстуальної еквівалентності (або контекстуальної конгруентності), наприклад, якщо мова програмування, про яку йде мова, є інтерактивною (тобто не дає значення).
Мартін Бергер

α

1
αα

1
@ SamTobin-Hochstadt Гаразд, забудемо "звичайне". Я відчуваю, що ви говорите те саме, що сказала Ніл, що було досить добре продумано, на мій погляд. Ваша ідея, яка для мене все ще неясна, може бути формалізована в рамках Ніла шляхом вибору правильного виду спостережень і правильного програмного контексту.
Удай Редді

1
@UdayReddy Розгляньте -рахунок. Який контекст можна виділити λ x . хλλх.хλу.у

2

Q2: Я думаю, що звичайні теоретичні визначення насправді не розрізняють алгоритми та програми, але "алгоритм", як часто використовується, більше схожий на клас програм. Для мене алгоритм на зразок програми з деякими підпрограмами, залишеними не повністю, тобто визначена їх бажана поведінка, але не їх реалізація). Наприклад, алгоритм усунення Гаусса насправді не визначає, як слід виконувати ціле множення.

Мені шкода, якщо це наївно. Я не займаюся дослідженням ПЛ.


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