Чи можна довести, що функція є ідентичною?


12

Чи можна використовувати статичні або залежні типи, щоб довести функцію ідентично?

Я шукав відповіді в Google та різних місцях на StackOverflow / StackExchange, не пощастивши. Найближчою я знайшов цю розмову про Ідріс: https://groups.google.com/forum/#!topic/idris-lang/yp7vrspChRg

На жаль, це обговорення трохи над головою.


3
Я не публікую це як відповідь, тому що я не впевнений на 100%, але вважаю, що це неможливо через теорему Райса .
садок

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

2
Теорема @gardenhead Rice стверджує, що з огляду на будь-яке властивість, яке може мати поведінка програми, іноді неможливо визначити, чи має програма ці властивість. Існує велика різниця між "це іноді неможливо" і "це неможливо".
Таннер Світт

2
Мій останній коментар був досить розпливчастим. У будь-якому випадку, ось що має сказати теорема Райса: не існує алгоритму, який би правильно класифікував усі функції як ідентичні, так і не ідентичні. Однак є ще корисні алгоритми, які класифікують деякі функції як ідентичні чи ні.
Tanner Swett

2
ОП запитала про доведення того, що функція є ідентичною, не має алгоритму, який класифікує функції як idemptotent чи ні. Основна відмінність полягає в тому, що доказ може написати людина. Що стосується повноти Тьюрінга, то це справді не проблема .
gallais

Відповіді:


3

Для певних функцій воно є. Особливо, коли ти знаєш функцію ;-)

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

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


Дякую за відповідь. Можливість «автоматично вирішувати» була саме те, що я шукав.
bmaddy

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