Здається, ваша проблема зменшує таке простіше питання:
Враховуючи дві функції у класі функцій, чи маємо для всіх ? (Іншими словами, чи мають вони всюди однакове значення?)F,GF(x)=G(x)x
Я не знаю, чи можна це вирішити для цього класу функцій. Якщо це так, то і ваша проблема повинна бути вирішена.
Для вашої проблеми загальним підходом є: символічно диференціювати щоб отримати , а потім перевірити, чи маємо для всіх .F(x)F′(x)F′(x)=G(x)x
Тож ключовим кроком є символічна диференціація. Давайте розберемося, як це зробити більш детально. Ми можемо визначити клас допустимих функцій рекурсивно:
F(x)::=c|x|ex|log(x)|sin(x)|cos(x)|tan(x)|F1(x)+F2(x)|F1(x)×F2(x)|F1(x)/F2(x)|F1(F2(x))
де діапазон констант і діапазон функцій.cF,F1,F2
Тоді можна розробити рекурсивний алгоритм символічної диференціації цього класу функцій, використовуючи стандартні правила обчислення (наприклад, правило ланцюга тощо). Зокрема, ми можемо обробляти кожен випадок вище та рекурсивно показувати, що похідна може виражатися символічно як функція в межах цього класу. Наприклад:
Якщо , .F(x)=cF′(x)=0
Якщо , .F(x)=xF′(x)=1
Якщо , .F(x)=exF′(x)=ex
Якщо , .F(x)=log(x)F′(x)=1/x
Якщо , .F(x)=sin(x)F′(x)=cos(x)
Якщо , .F(x)=tan(x)F′(x)=1+(tan(x))2
Якщо , .F(x)=F1(x)+F2(x)F′(x)=F′1(x)+F′2(x)
Якщо , .F(x)=F1(x)×F2(x)F′(x)=F′1(x)F2(x)+F1(x)F′2(x)
Якщо , (правило ланцюга).F(x)=F1(F2(x))F′(x)=F′1(F2(x))F′2(x)
І так далі. У кожному випадку, якщо входить до класу допустимих функцій, тоді це так само , і ви можете рекурсивно опрацювати символьний вираз для - це називається символічною диференціацією .F(x)F′(x)F′(x)
Нарешті, залишається лише перевірити, чи для всіх . Це проблема, про яку я згадую у верхній частині своєї відповіді.F′(x)=G(x)x
Існує простий метод перевірити, чи однакові дві функції однакові, які, як я очікував, спрацюють на практиці. Алгоритм такий: кілька разів вибирайте випадкове значення і перевіряйте, чи має значення для цього значення . Якщо це дорівнює рівності для багатьох випадково вибраних , то виведіть "вони однаково рівні". Якщо ви знайдете будь-який для якого , то виведіть "вони різні".xF(x)=G(x)xxxF(x)≠G(x)
Немає гарантії, що це спрацює, але для багатьох класів функцій вихід цієї процедури буде правильним з високою ймовірністю. Зокрема, припустимо, у нас є деякий розподіл на представлений випадковою змінною а деякий таким, що виконується для всіх у класі. Припустимо, крім того, що клас допустимих функцій закривається на віднімання (як у вашому класі). Тоді випливає, що раундів вищевказаної процедури дає неправильну відповідь з максимальною вірогідністю .xXϵ>0Pr[F(X)=0]≥ϵFr(1−ϵ)r
Крім того, якщо існує рандомізована процедура тестування рівності поліномів, то проблема вирішується.
Залишається запитати, чи відповідає такий результат вашому конкретному класу функцій. Наведене вище твердження, ймовірно, не буде дотримано. Однак, якщо нам пощастить, можливо, нам вдасться довести щось подібне:
Для всіх , можливо, ми можемо знайти розподіл на дійсні числа, тобто випадкову змінну та константу , таку, що така, що утримується для всіх функцій які є у вашому класі та мають "розмір" не більше .s∈NXsϵs>0Pr[F(X)=0]Fs
Якщо це правда, то з цього випливає, що існує рандомізований алгоритм для тестування поліноміальної рівності, і, отже, ваша проблема вирішується.