Sorununuz aşağıdaki basit soruyu azaltıyor gibi görünüyor:
Fonksiyon sınıfında iki fonksiyonu verildiğinde tüm için mı? (Başka bir deyişle, her yerde aynı değere sahipler mi?)F,GF(x)=G(x)x
Bu işlev sınıfı için bunun karar verilebilir olup olmadığını bilmiyorum. Eğer öyleyse, probleminiz de karar verilebilir olmalıdır.
Senin sorun için, genel bir yaklaşımdır: sembolik ayırt etme almak için o zaman var olup olmadığını kontrol herkes için .F(x)F′(x)F′(x)=G(x)x
Yani kilit adım sembolik farklılaşmadır. Bunu daha ayrıntılı olarak nasıl yapacağımıza bakalım. İzin verilen işlevlerin sınıfını özyineli olarak tanımlayabiliriz:
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))
burada sabitler üzerinde değişir ve işlevler üzerinde değişir.cF,F1,F2
Daha sonra, standart hesap kurallarını (örneğin, zincir kuralı, vb.) Kullanarak, bu fonksiyon sınıfını sembolik olarak farklılaştırmak için özyinelemeli bir algoritma tasarlamak mümkündür. Özellikle, yukarıdaki her durumu ele alabilir ve yinelemeli olarak türevin bu sınıf içindeki bir fonksiyon olarak sembolik olarak ifade edilebildiğini gösterebiliriz. Örneğin:
Eğer , .F(x)=cF′(x)=0
Eğer , .F(x)=xF′(x)=1
Eğer , .F(x)=exF′(x)=ex
Eğer , .F(x)=log(x)F′(x)=1/x
Eğer , .F(x)=sin(x)F′(x)=cos(x)
Eğer , .F(x)=tan(x)F′(x)=1+(tan(x))2
Eğer , .F(x)=F1(x)+F2(x)F′(x)=F′1(x)+F′2(x)
Eğer , .F(x)=F1(x)×F2(x)F′(x)=F′1(x)F2(x)+F1(x)F′2(x)
Eğer , (zincir kuralı).F(x)=F1(F2(x))F′(x)=F′1(F2(x))F′2(x)
Ve bunun gibi. Eğer her bir durumda, izin verilen fonksiyonların sınıfta, o zaman bir ve yinelemeli için sembolik bir ifade çalışabilir -, bu şekilde bilinen sembolik farklılaşması .F(x)F′(x)F′(x)
Son olarak, geriye kalan tüm için olup olmadığını kontrol etmektir . Cevabımın tepesinde bahsettiğim sorun bu.F′(x)=G(x)x
Pratikte oldukça iyi çalışmayı bekleyebileceğim iki işlevin aynı olup olmadığını kontrol etmek için basit bir yöntem var. Algoritma şudur: tekrar tekrar rasgele bir değeri seçin ve in bu değerini tutup tutmadığını kontrol edin . Rastgele seçilen birçok için eşitlik taşıyorsa , çıktı "eşittir". olan herhangi bir bulursanız , "bunlar farklı" olur.xF(x)=G(x)xxxF(x)≠G(x)
Bunun işe yarayacağına dair bir garanti yoktur, ancak birçok işlev sınıfı için bu prosedürün çıktısı yüksek olasılıkla doğru olacaktır. Özellikle, bazı dağılımına sahip varsayalım rastgele değişken ile temsil edilen ve bazı öyle ki tüm tutan sınıfında. Dahası, izin verilen işlevler sınıfının çıkarma altında (sınıfınız olduğu gibi) kapalı olduğunu varsayalım. Daha sonra , yukarıdaki prosedürün turunun en fazla olasılıkla yanlış cevap verdiği .xXϵ>0Pr[F(X)=0]≥ϵFr(1−ϵ)r
Ayrıca, polinom eşitlik testi için rastgele bir prosedür varsa, sorun karar verilebilir.
Böyle bir sonucun sizin özel sınıflarınız için geçerli olup olmadığını sormaya devam etmektedir. Yukarıdaki ifade muhtemelen geçerli olmayacaktır. Ancak, şanslıysak, belki aşağıdakine benzer bir şeyi kanıtlayabiliriz:
Tüm , gerçek sayılar üzerinde bir dağılım, yani rastgele bir ve sabit bir , öyle ki tüm fonksiyonlar için de geçerlidir sınıfınızda ve en fazla "boyutu" var .s∈NXsϵs>0Pr[F(X)=0]Fs
Bu doğruysa, o zaman polinom eşitlik testi için rastgele bir algoritma olduğunu ve dolayısıyla probleminizin karar verilebileceğini takip edecektir.