Votre problème semble réduire la question plus simple suivante:
Étant donné deux fonctions dans la classe de fonctions, avons-nous pour tout ? (En d'autres termes, ont-ils la même valeur partout?)F ( x ) = G ( x ) xF,GF(x)=G(x)x
Je ne sais pas si c'est décidable, pour cette classe de fonctions. Si c'est le cas, votre problème devrait également être décidable.
Pour votre problème, une approche générale est la suivante: différencier symboliquement pour obtenir , puis vérifier si nous avons pour tout .F ′ ( x ) F ′ ( x ) = G ( x ) xF(x)F′(x)F′(x)=G(x)x
L'étape clé est donc la différenciation symbolique. Voyons comment faire cela plus en détail. Nous pouvons définir la classe des fonctions autorisées de manière récursive:
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))
où s'étend sur les constantes et sur les fonctions.F , F 1 , F 2cF,F1,F2
Il est alors possible de concevoir un algorithme récursif pour différencier symboliquement cette classe de fonctions, en utilisant les règles de calcul standard (par exemple, la règle de chaîne, etc.). En particulier, nous pouvons traiter tous les cas ci-dessus, et montrer récursivement que la dérivée peut être exprimée symboliquement comme une fonction dans cette classe. Par exemple:
Si , .F ′ ( x ) = 0F(x)=cF′(x)=0
Si , .F ′ ( x ) = 1F(x)=xF′(x)=1
Si , .F ′ ( x ) = e xF(x)=exF′(x)=ex
Si , .F ′ ( x ) = 1 / xF(x)=log(x)F′(x)=1/x
Si , .F ′ ( x ) = cos ( x )F(x)=sin(x)F′(x)=cos(x)
Si , .F ′ ( x ) = 1 + ( tan ( x ) ) 2F(x)=tan(x)F′(x)=1+(tan(x))2
Si , .F ′ ( x ) = F ′ 1 ( x ) + F ′ 2 ( x )F(x)=F1(x)+F2(x)F′(x)=F′1(x)+F′2(x)
Si , .F ′ ( x ) = F ′ 1 ( x ) F 2 ( 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)
Si , (règle de chaîne).F ′ ( x ) = F ′ 1 ( F 2 ( x ) ) F ′ 2 ( x )F(x)=F1(F2(x))F′(x)=F′1(F2(x))F′2(x)
Etc. Dans chaque cas, si est dans la classe des fonctions autorisées, alors , et vous pouvez récursivement trouver une expression symbolique pour - c'est ce que l'on appelle la différenciation symbolique .F ′ ( x ) F ′ ( x )F(x)F′(x)F′(x)
Enfin, il ne reste plus qu'à vérifier si pour tout . C'est le problème que je mentionne en haut de ma réponse.xF′(x)=G(x)x
Il existe une méthode simple pour vérifier si deux fonctions sont identiques à l'identique et je m'attends à ce qu'elle fonctionne plutôt bien dans la pratique. L'algorithme est le suivant: choisissez à plusieurs reprises une valeur aléatoire de et vérifiez si est valable pour cette valeur de . S'il est identique pour de nombreux choisis au hasard , alors affichez "ils sont identiques de façon identique". Si vous trouvez un pour lequel , alors affichez "ils sont différents".xF(x)=G(x)xxxF(x)≠G(x)
Il n'y a aucune garantie que cela fonctionnera, mais pour de nombreuses classes de fonctions, la sortie de cette procédure sera correcte avec une forte probabilité. En particulier, supposons que nous ayons une distribution sur représentée par la variable aléatoire et un tel que valable pour tous les de la classe. Supposons en outre que la classe des fonctions autorisées soit fermée par soustraction (comme l'est votre classe). Ensuite, il s'ensuit que tours de la procédure ci-dessus donnent la mauvaise réponse avec probabilité au plus .xXϵ>0Pr[F(X)=0]≥ϵFr(1−ϵ)r
De plus, s'il existe une procédure aléatoire pour les tests d'égalité polynomiale, alors le problème est décidable.
Reste à savoir si un tel résultat vaut pour votre classe particulière de fonctions. La déclaration ci-dessus ne tiendra probablement pas. Cependant, si nous avons de la chance, nous pourrions peut-être prouver quelque chose comme ce qui suit:
Pour tout , nous pouvons peut-être trouver une distribution sur des nombres réels, c'est-à-dire une variable aléatoire et une constante , telle que vaut pour toutes les fonctions qui sont dans votre classe et qui ont au plus "taille" .s∈NXsϵs>0Pr[F(X)=0]Fs
Si cela est vrai, il s'ensuit qu'il existe un algorithme randomisé pour les tests d'égalité polynomiale et donc votre problème est décidable.