Il problema sembra ridurre la seguente domanda più semplice:
Date due funzioni nella classe di funzioni, abbiamo F ( x ) = G ( x ) per tutte le x ? (In altre parole, hanno lo stesso valore ovunque?)F,GF(x)=G(x)x
Non so se questo sia decidibile, per questa classe di funzioni. Se lo è, anche il tuo problema dovrebbe essere decidibile.
F(x)F′(x)F′(x)=G(x)x
Quindi il passo chiave è la differenziazione simbolica. Scopriamo come farlo in modo più dettagliato. Possiamo definire ricorsivamente la classe di funzioni consentite:
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))
dove varia su costanti e su funzioni.cF,F1,F2
È quindi possibile escogitare un algoritmo ricorsivo per differenziare simbolicamente questa classe di funzioni, usando le regole standard di calcolo (ad esempio, la regola della catena, ecc.). In particolare, possiamo gestire tutti i casi precedenti e mostrare ricorsivamente che la derivata può essere espressa simbolicamente come una funzione all'interno di questa classe. Per esempio:
Se , .F(x)=cF′(x)=0
Se , .F(x)=xF′(x)=1
Se , .F(x)=exF′(x)=ex
Se , .F(x)=log(x)F′(x)=1/x
Se , .F(x)=sin(x)F′(x)=cos(x)
Se , .F(x)=tan(x)F′(x)=1+(tan(x))2
Se , .F(x)=F1(x)+F2(x)F′(x)=F′1(x)+F′2(x)
Se , .F(x)=F1(x)×F2(x)F′(x)=F′1(x)F2(x)+F1(x)F′2(x)
Se , (regola catena).F(x)=F1(F2(x))F′(x)=F′1(F2(x))F′2(x)
E così via. In ogni caso, se è nella classe delle funzioni consentite, allora lo è anche , e puoi elaborare ricorsivamente un'espressione simbolica per - questo è noto come differenziazione simbolica .F(x)F′(x)F′(x)
Infine, non resta che verificare se per tutte le . Questo è il problema che menziono all'inizio della mia risposta.F′(x)=G(x)x
Esiste un metodo semplice per verificare se due funzioni sono identiche tra loro e mi aspetto che funzionino abbastanza bene nella pratica. L'algoritmo è questo: scegli ripetutamente un valore casuale di e controlla se vale per quel valore di . Se vale con l'uguaglianza per molti scelti casualmente , allora l'output "sono identicamente uguali". Se trovi una per la quale , allora scrivi "sono diversi".F ( x ) = G ( x ) x x x F ( x ) ≠ G ( x )xF(x)=G(x)xxxF(x)≠G(x)
Non vi è alcuna garanzia che ciò funzioni, ma per molte classi di funzioni, l'output di questa procedura sarà corretto con alta probabilità. In particolare, supponiamo di avere una distribuzione su rappresentata dalla variabile casuale e alcuni tali che vale per tutte le della classe. Supponi inoltre che la classe di funzioni consentite sia chiusa per sottrazione (come la tua classe). Ne consegue che round della procedura di cui sopra dà la risposta sbagliata con probabilità al massimo .xXϵ>0Pr[F(X)=0]≥ϵFr(1−ϵ)r
Inoltre, se esiste una procedura randomizzata per il test di uguaglianza polinomiale, il problema è decidibile.
Resta da chiedere se tale risultato valga per la tua particolare classe di funzioni. L'affermazione sopra probabilmente non regge. Tuttavia, se siamo fortunati, forse potremmo essere in grado di dimostrare qualcosa di simile al seguente:
Per tutti , forse possiamo trovare una distribuzione su numeri reali, cioè una variabile casuale e una costante , tale che tale che vale per tutte le funzioni che sono nella tua classe e hanno "dimensione" al massimo .s∈NXsϵs>0Pr[F(X)=0]Fs
Se questo è vero, ne seguirà che esiste un algoritmo randomizzato per il test di uguaglianza polinomiale e quindi il tuo problema è decidibile.