Su problema parece reducir la siguiente pregunta más simple:
Dadas dos funciones en la clase de funciones, ¿tenemos F ( x ) = G ( x ) para todas las x ? (En otras palabras, ¿tienen el mismo valor en todas partes?)F,GF(x)=G(x)x
No sé si esto es decidible, para esta clase de funciones. Si es así, entonces su problema también debería ser decidible.
Para su problema, un enfoque general es: diferenciar simbólicamente para obtener , luego verifique si tenemos para todas las .F(x)F ′ ( x ) = G ( x ) xF′(x)F′(x)=G(x)x
Entonces, el paso clave es la diferenciación simbólica. Veamos cómo hacerlo con más detalle. Podemos definir la clase de funciones permitidas de forma recursiva:
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))
donde extiende sobre las constantes y sobre las funciones.cF,F1,F2
Entonces es posible diseñar un algoritmo recursivo para diferenciar simbólicamente esta clase de funciones, utilizando las reglas estándar de cálculo (por ejemplo, la regla de la cadena, etc.). En particular, podemos manejar todos los casos anteriores y mostrar recursivamente que la derivada se puede expresar simbólicamente como una función dentro de esta clase. Por ejemplo:
Si , .F(x)=cF′(x)=0
Si , .F(x)=xF′(x)=1
Si , .F(x)=exF′(x)=ex
Si , .F(x)=log(x)F′(x)=1/x
Si , .F(x)=sin(x)F′(x)=cos(x)
Si , .F(x)=tan(x)F′(x)=1+(tan(x))2
Si , .F(x)=F1(x)+F2(x)F′(x)=F′1(x)+F′2(x)
Si , .F(x)=F1(x)×F2(x)F′(x)=F′1(x)F2(x)+F1(x)F′2(x)
Si , (regla de la cadena).F(x)=F1(F2(x))F′(x)=F′1(F2(x))F′2(x)
Y así. En cada caso, si está en la clase de funciones permitidas, también lo está , y puede calcular recursivamente una expresión simbólica para ; esto se conoce como diferenciación simbólica .F(x)F′(x)F′(x)
Finalmente, todo lo que queda es verificar si para todo . Ese es el problema que menciono en la parte superior de mi respuesta.F′(x)=G(x)x
Hay un método simple para verificar si dos funciones son idénticamente iguales que esperaría que funcionen bastante bien en la práctica. El algoritmo es el siguiente: seleccione repetidamente un valor aleatorio de y compruebe si cumple para ese valor de . Si se mantiene con igualdad para muchas elegidas al azar , entonces la salida "son idénticamente iguales". Si encuentra alguna para la cual , entonces emite "son diferentes".F ( x ) = G ( x ) x x x F ( x ) ≠ G ( x )xF(x)=G(x)xxxF(x)≠G(x)
No hay garantía de que esto funcione, pero para muchas clases de funciones, la salida de este procedimiento será correcta con alta probabilidad. En particular, supongamos que tenemos alguna distribución en representada por la variable aleatoria y algo de tal manera que cumple para todas las en la clase. Supongamos, además, que la clase de funciones permitidas se cierra por resta (como lo es su clase). Luego se deduce que rondas del procedimiento anterior da la respuesta incorrecta con probabilidad como máximo .X ϵ > 0 Pr [ F ( X ) = 0 ] ≥ ϵxXϵ>0Pr[F(X)=0]≥ϵr ( 1 - ϵ ) rFr(1−ϵ)r
Además, si hay un procedimiento aleatorio para la prueba de igualdad polinómica, entonces el problema es decidible.
Queda por preguntarse si tal resultado es válido para su clase particular de funciones. La declaración anterior probablemente no sea válida. Sin embargo, si tenemos suerte, quizás podamos probar algo como lo siguiente:
Para todos los , tal vez podamos encontrar una distribución en números reales, es decir, una variable aleatoria , y una constante , tal que se cumple para todas las funciones que están en su clase y tienen "tamaño" como máximo .X s ϵ s > 0 Pr [ F ( X ) = 0 ] F ss∈NXsϵs>0Pr[F(X)=0]Fs
Si esto es cierto, se deducirá que existe un algoritmo aleatorio para la prueba de igualdad polinómica y, por lo tanto, su problema es decidible.