Ваша проблема, кажется, уменьшает следующий простой вопрос:
Учитывая две функции в классе функций, имеем ли мы F ( x ) = G ( x ) для всех x ? (Другими словами, они имеют одинаковое значение везде?)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
Существует простой метод проверки того, что две функции одинаково равны, и я ожидаю, что они будут работать довольно хорошо на практике. Алгоритм таков: многократно выбирайте случайное значение и проверяйте, выполняется ли для этого значения . Если он выполняется с равенством для многих случайно выбранных , выведите «они одинаково равны». Если вы найдете для которого , то выведите «они разные».F ( x ) = G ( x ) x x x F ( x ) ≠ G ( x )xF(x)=G(x)xxxF(x)≠G(x)
Нет гарантии, что это будет работать, но для многих классов функций вывод этой процедуры будет правильным с высокой вероятностью. В частности, предположим, что у нас есть некоторое распределение по представленное случайной величиной и некоторое число такое, что выполняется для всех в классе. Кроме того, предположим, что класс допустимых функций замкнут относительно вычитания (как и ваш класс). Из этого следует, что раундов описанной выше процедуры дает неправильный ответ с вероятностью не более .xXϵ>0F r ( 1 - ϵ ) rPr[F(X)=0]≥ϵFr(1−ϵ)r
Кроме того, если существует рандомизированная процедура для проверки полиномиального равенства, то проблема разрешима.
Осталось спросить, имеет ли место такой результат для вашего конкретного класса функций. Заявление выше, вероятно, не будет иметь места. Однако, если нам повезет, возможно, мы сможем доказать что-то вроде следующего:
Для всех , возможно, мы можем найти распределение по действительным числам, т. переменную и константу , такую, что выполняется для всех функций которые находятся в вашем классе и имеют «размер» не более .X s ϵ s > 0 Pr [ F ( X ) = 0 ] F ss∈NXsϵs>0Pr[F(X)=0]Fs
Если это так, то из этого следует, что существует рандомизированный алгоритм для проверки полиномиального равенства, и, следовательно, ваша проблема разрешима.