電腦代數與符號計算

零等價問題(zero-equivalence problem)

這聽起來像世上最簡單的問題:這個表達式等於零嗎?對 3 - 3 而言,當然是。但對 exp(log(x)) - x,或一團層層嵌套的對數、指數與平方根,要判定整個東西是否偷偷為零,竟是電腦代數中最難的問題之一——而就其完全的一般性而言,可證明電腦不可能總是正確回答。

問題是這樣:給定一個符號表達式,判定它是否代表零函數(等價地,藉由問 A - B 是否為零,來判定兩個表達式 A 與 B 是否相等)。對多項式與有理函數而言這很容易——展開成標準形,看是否全部抵消。但一旦你允許「初等」函數(exp、log、sin、根式,可自由複合),理查森定理表明這個問題變得不可判定:不存在一個演算法能對每個這樣的表達式停機並給出正確的是或否。這正是一般表達式不可能有完美標準形的原因,也是自動化簡會被「相等卻拒絕看起來相等」的表達式擊敗的原因。

在實務上,系統繞過這個不可能性而非解決它。主流的技巧是機率性的:代入隨機的數值;若表達式算出來明顯非零,它就肯定不是零,而若它在許多隨機點都算出零,它幾乎肯定是零函數(這是支撐大半電腦代數的施瓦茨-齊普爾想法)。這給出一個快速、以壓倒性機率正確的答案,但永遠不是「為零」的絕對證明。誠實的結論是:電腦代數系統中的相等性檢驗,是躲在一個無辜等號背後的深刻、有時不可判定的問題,而「無法判定」或一個機率性的裁決,有時是可得的最誠實答案。

sqrt(3 + 2*sqrt(2)) - 1 - sqrt(2) 等於零嗎?是的,因為 3 + 2*sqrt(2) = (1 + sqrt(2))^2。電腦代數系統也許從表面形式看不出來,但把表達式代入高精度數值求值器,得到五十位都是 0.00000...——這是「為零」的強力機率證據,雖不及一個符號證明。

數值檢驗給出「為零」的強力證據,卻非符號上的證明。

依理查森定理,一般初等表達式的零等價是不可判定的——沒有演算法能總是正確回答。機率性檢驗(隨機求值)快速且幾乎總是對的,但其給出的「為零」裁決是壓倒性的證據,而非證明。

又稱
the zero recognition problemdeciding if an expression is zero零識別問題判定表達式是否為零