あなたの問題は次の簡単な質問を減らすようです:
関数のクラスに2つの関数がある場合、すべてのxに対してF (x )= G (x )がありますか?(言い換えれば、どこでも同じ価値がありますか?)F,GF(x)=G(x)x
このクラスの関数では、これが決定可能かどうかはわかりません。もしそうなら、あなたの問題も決定可能でなければなりません。
問題の一般的なアプローチは、を記号的に区別してF ′(x )を取得し、すべてのxに対してF ′(x )= G (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
2つの関数がまったく同じかどうかを確認する簡単な方法があり、実際にはかなりうまくいくと思います。繰り返しのランダム値選択:アルゴリズムは、このされ、そしてかどうかをチェックの値を保持し。ランダムに選択された多くのが等しい場合、「それらはまったく等しい」と出力されます。もし発見した場合は対象の、出力"彼らは異なっています"。F (x )= G (x )x x x F (x )≠ G (x )xF(x)=G(x)xxxF(x)≠G(x)
これが機能する保証はありませんが、多くのクラスの関数では、この手順の出力は高い確率で正しくなります。特に、我々は上のいくつかの分布があると確率変数で表されるといくつかのようにすべて当てはまるクラス。さらに、許容できる関数のクラスが(クラスがそうであるように)減算で閉じられているとします。次に、上記の手順のラウンドは、最大で確率で誤った答えをます。X ε > 0 のPr [ F (X )= 0 ] ≥ ε FのR (1 - ε )RxXϵ>0Pr[F(X)=0]≥ϵFr(1−ϵ)r
また、多項式の等価性テストのランダム化された手順がある場合、問題は決定可能です。
そのような結果が特定のクラスの関数に当てはまるかどうかを尋ねる必要があります。上記のステートメントはおそらく成立しません。ただし、運が良ければ、次のようなことを証明できるかもしれません。
すべて、実数、つまり確率変数と定数分布を見つけることができますこのようなクラスにあり、「サイズ」が最大でであるすべての関数を保持します。X S ε S > 0 のPr [ F (Xが)= 0 ] F Sをs∈NXsϵs>0Pr[F(X)=0]Fs
これが真の場合、多項式の等価性テスト用のランダム化されたアルゴリズムが存在することになるため、問題は特定できます。