Twój problem wydaje się redukować następujące prostsze pytanie:
Biorąc pod uwagę dwie funkcje w klasie funkcji, czy mamy dla wszystkich ? (Innymi słowy, czy mają one wszędzie tę samą wartość?)fa, Gfa( x ) = G ( x )x
Nie wiem, czy jest to rozstrzygalne dla tej klasy funkcji. Jeśli tak, to twój problem również powinien być rozstrzygalny.
W przypadku twojego problemu ogólne podejście to: symbolicznie różnicuj aby uzyskać , a następnie sprawdź, czy mamy dla wszystkich .fa( x )F′(x)F′(x)=G(x)x
Zatem kluczowym krokiem jest różnicowanie symboliczne. Dowiedzmy się, jak to zrobić bardziej szczegółowo. Możemy zdefiniować klasę dopuszczalnych funkcji rekurencyjnie:
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))
gdzie rozciąga się ponad stałe, a zakres ponad funkcje.cF,F1,F2
Możliwe jest zatem opracowanie algorytmu rekurencyjnego do symbolicznego różnicowania tej klasy funkcji, przy użyciu standardowych reguł rachunku różniczkowego (np. Reguła łańcuchowa itp.). W szczególności możemy obsłużyć każdy powyższy przypadek i rekurencyjnie pokazać, że pochodną można wyrazić symbolicznie jako funkcję w tej klasie. Na przykład:
Jeśli , .F(x)=cF′(x)=0
Jeśli , .F(x)=xF′(x)=1
Jeśli , .F(x)=exF′(x)=ex
Jeśli , .F(x)=log(x)F′(x)=1/x
Jeśli , .F(x)=sin(x)F′(x)=cos(x)
Jeśli , .F(x)=tan(x)F′(x)=1+(tan(x))2
Jeśli , .F(x)=F1(x)+F2(x)F′(x)=F′1(x)+F′2(x)
Jeśli , .F(x)=F1(x)×F2(x)F′(x)=F′1(x)F2(x)+F1(x)F′2(x)
Jeśli , (reguła łańcuchowa).F(x)=F1(F2(x))F′(x)=F′1(F2(x))F′2(x)
I tak dalej. W każdym przypadku, jeśli należy do klasy dozwolonych funkcji, to także i można rekurencyjnie wypracować wyrażenie symboliczne dla - jest to znane jako różnicowanie symboliczne .F(x)F′(x)F′(x)
Na koniec pozostaje tylko sprawdzić, czy dla wszystkich . O tym problemie wspominam na początku mojej odpowiedzi.F′(x)=G(x)x
Istnieje prosta metoda sprawdzenia, czy dwie funkcje są identyczne, i spodziewałbym się, że zadziała całkiem dobrze w praktyce. Algorytm jest następujący: wielokrotnie wybierz losową wartość i sprawdź, czy utrzymuje dla tej wartości . Jeśli zachowuje równość dla wielu losowo wybranych , to wypisz „są identyczne”. Jeśli znajdziesz dowolne dla którego , to wypisz „są różne”.xF(x)=G(x)xxxF(x)≠G(x)
Nie ma gwarancji, że to zadziała, ale dla wielu klas funkcji wynik tej procedury będzie poprawny z dużym prawdopodobieństwem. W szczególności załóżmy, że mamy pewien rozkład na reprezentowany przez zmienną losową i niektóre takie, że zachowuje się dla wszystkich w klasie. Przypuśćmy ponadto, że klasa dopuszczalnych funkcji jest zamknięta odejmując (tak jak twoja klasa). To stąd, że rund powyższej procedury daje złe odpowiedź z prawdopodobieństwem najwyżej .xXϵ>0Pr[F(X)=0]≥ϵFr(1−ϵ)r
Ponadto, jeśli istnieje randomizowana procedura testowania równości wielomianowej, problem jest rozstrzygalny.
Pozostaje pytanie, czy taki wynik odnosi się do konkretnej klasy funkcji. Powyższe stwierdzenie prawdopodobnie się nie utrzyma. Jeśli jednak będziemy mieli szczęście, być może uda nam się udowodnić coś takiego:
Dla wszystkich być może możemy znaleźć rozkład na liczbach rzeczywistych, tj. zmienną i stałą , taką, że obowiązuje dla wszystkich funkcji które są w twojej klasie i mają „rozmiar” co najwyżej .s∈NXsϵs>0Pr[F(X)=0]Fs
Jeśli jest to prawda, oznacza to, że istnieje losowy algorytm do testowania równości wielomianowej, a zatem twój problem jest rozstrzygalny.