Mr. Will

Mr. Will

github
mastodon

“嚴謹”的混亂——數學

數學愛好者總是喜歡稱讚數學嚴謹的特點,但實際上,數學的嚴謹往往取決於使用它的人,而非數學本身。如果你沒有學習過數學的某些概念,那麼你初次遇見相關的表達時往往很難看懂。這樣的現象可以證明數學沒有統一的定義和語法,這些全部都是由創造某些概念的數學家按照自己的喜好定義出來的。接下來,我會舉幾個例子來讓你體會一下這種混亂。

無規則命名#

同樣是函數,三角函數可以有三個字母,但是別的大多數不行。在書寫的時候,多字母的函數或是其他符號會產生歧義,而數學將其解釋為 “約定俗成”。

絕大部分人沒法直接用手寫出襯線字體,書寫時,“sin\sin” 和 “sinsin” 並無區別。那這時候,如果 sin\sin 未曾定義,那麼它完全可以被認為是 sins \cdot i \cdot n。當然,我們也可以定義一些函數,比如 si\rm{si}in\rm{in},那麼 sin\sin 就既是 sin\rm{si} \cdot \mathcal{n} 也是 sins \cdot \rm{in} 了。

上面的表達可能有些不太嚴謹,畢竟數學沒有嚴格的類型,所以 sin\sinsin(x)\sin(x)sinx\sin xsi\rm{si}si(x)\rm{si} (\mathcal{x})in\rm{in}in(x)\rm{in} (\mathcal{x}) 等等等等都可以表示函數,但也有可能是別的什麼東西。可是這跟用語法高亮寫語法有什麼區別?筆有顏色、粗細、筆觸上的區別,那麼是不是還能開發出什麼彩色、粗細、筆觸的語法?難不成可變字體是數學家發明的?別問,問就是:“約定俗成”。

另外,既然 sin\sin 是正弦,cos\cos 是余弦,那麼 tan\tan 作為正切,cot\cot 作為余切看起來確實非常合理。當你感嘆道這一切是多麼的井然有序時,出現了一對非常令人不快的函數打破你的寧靜 ——sec\seccsc\csc。合著加前綴 “co\rm{co}” 並去除末兩位字母命名的時候重名了就可以直接隨便取一個全新的名字咯?

含糊不清的語法#

數學家很喜歡創造語法,但是他們似乎想不出很多漂亮的語法和符號,所以相同的符號放在類似的地方所表示的意義需要通過上下文來推測,下面是一個例子:

f(x)(m+1)f(x)(m + 1)

如果不知道 ff 的定義,那麼你只能知道這是一個函數,但不知道它的返回值類型,而在數學裡,貌似是允許函數返回函數的,比如這樣:

f(x)=g(x)f(x) = g(x)

看起來好像和返回類型沒什麼關係?但是數學沒有明確指出 <variableName>(<parameter>)\texttt{<variableName>}(\texttt{<parameter>}) 的意義,所以上述 f(x)f(x) 既可以理解成函數的返回值,也可以理解成函數,那麼上面的式子我們可以解釋為是把函數 ff 的返回值定義為函數 gg。所以我們可以得出:

f(x)(m+1)=(f(x))(m+1)=g(m+1)f(x)(m + 1) = (f(x))(m + 1) = g(m + 1)

然而這樣的理解是不對的,其實原始式子只是省略了一個乘號,跟 g(x)g(x) 沒什麼關係:

f(x)(m+1)=f(x)(m+1)f(x)(m + 1) = f(x) \cdot (m + 1)

這一例子不僅反映出數學家愛簡寫的壞習慣,而且說明數學中相同的符號、相同的語法具有多重含義。不是說簡寫不好,而是有歧義的簡寫沒有杜絕造成簡寫的弊端充分顯現。

高度復用且極富歧義的符號#

學過數列的朋友們都知道 {an}\{ a_n \} 可以表示數列,但是如果你還沒學到數列,那這就看起來是一個集合。

讓我們來看下面這個表達:

x(0,22)x \in \left( 0, 2\sqrt{2} \right)

這時候你能清楚地知道 (0,22)\left( 0, 2\sqrt{2} \right) 表示一個區間,但是如果我這樣寫:

x=(0,22)\textbf{x} = \left( 0, 2\sqrt{2} \right)

這裡 x\textbf{x} 是一個平面向量。幸好教科書保守地使用了 “x\vec{x}”,否則手寫很難區分斜體和粗體的 “x”。

事實上,如果不是我給出了 “\in” 和 “==”,你根本無從得知 “(0,22)\left( 0, 2\sqrt{2} \right)” 的意義。這樣復用符號是不是過於草率了呢?

更令人難以理解的是,很多人會推薦在括號嵌套時,依次輪換使用不同的括號:

1+[2+(3+4+[5+(6+7)])]\\{1 + [2 + (3 + \\{ 4 + [5 + (6 + 7)]\\})]\\}

這真是給本就肩負多重重任的括號們火上加油。問題是這樣做看起來很難看,寫起來還需要不停地改剛剛寫出的外層括號,難道我寫這類式子還得事先計算嵌套層數嗎?如果像上面那樣配對括號至少還有一點點用處,那下面這樣就實在是過於荒謬了:

f[g(x)]=h{e+[12+i(x)]2}f\left[ g(x) \right] = h\left\{e + \left[ \frac{1}{2} + i(x) \right]^2 \right\}

用於標識函數的參數的括號竟也可以遵循上述規則,這說明函數其實沒有屬於它自己的語法。上面這個例子中的 ffgghhii 看起來是函數,但其實你找不出依據,你判斷它們是函數的理由只能是:看起來像。這樣的表示方法與省略乘號的 f[g(x)]f \cdot [g \cdot (x)] 並無區別。

限制過多的集合與區間#

類型是嚴謹性的基石,然而數學不遵循這一點。{1,π,e}\left\{ 1, \pi, e \right\} 是一個集合,但你一定聽說過點集,通過把若干點放在一個集合裡,構成一個可以用圖像表示的集合,比如 {(1,1),(2,3),(4,9)}\left\{ (1, 1), (2, 3), (4, 9) \right\}。我們還知道 [1,4]\left[1, 4\right] 是一個區間。那麼,當我們把它們並起來:

{1,π,e}[1,4]\left\{ 1, \pi, e \right\} \cup \left[1, 4\right]

上述運算是合法的,區間和數的集合是可以取並集的,這說明不同類型的集合可以取並集,然而:

{1,π,e}[1,4]{(1,1),(2,3),(4,9)}\left\{ 1, \pi, e \right\} \cup \left[1, 4\right] \cup \left\{ (1, 1), (2, 3), (4, 9) \right\}

這一下子就不合法了。這說明取並集的集合的元素類型必須相同,然而一個有時看起來像坐標或者說是點的區間,竟和數構成的集合類型相同。這時候你也許會為數學辯解,說區間和數集本就是相同類型。那麼為什麼 {1}\{ 1 \} 是合法的,可是 [1,1][1, 1] 卻不合法?

集合,是一個既不像數組,也不像數列的東西。集合不允許相同的元素,數組允許,但這沒有不允許的必要,我們完全可以在定義中認為 {1}\left\{ 1 \right\}{1,1,1}\left\{ 1, 1, 1 \right\} 是等價的。既然連隱式類型轉換都到處都是,那麼為什麼不能自動地隱式忽略相同元素呢?真是充分發揮了隱式的弊端,而避開了隱式的優勢。然後當你學習數列時,你又發現數列完全就是一個數組構造函數,真正像數組的東西倒是向量。

隱式類型轉換#

我們可以定義一個 ss 代表一個代數式:

s=3x2+6s = 3x^2 + 6

這時候,我想,ss 應該可以算是屬於表達式類型,然而給它加個括號,它就變成了一個函數:

s(x)=3x2+6s(x) = 3x^2 + 6

於是 ss 被隱式地轉換成了一個函數。緊接著,給 ss 加個 “'”,它又變成了函數 ss 的導函數:

s(x)=6xs'(x) = 6x

那麼按理說,導函數 ss' 應該也可以看作是一個表達式,所以說,我們繞了一圈,證明了表達式類型具有可求導函數的性質,所以,表達式也能有導函數了。

不明確的運算適用範圍#

我們可以對一個函數的返回值做平方運算:

(sinθ)2(\sin \theta)^2

而這一表達,也可以寫為:

sin2θ\sin^2 \theta

這樣簡寫,明顯就是在對函數做平方運算,而非其返回值。如果這樣的語法確實合法,那麼這樣應該也行:

(sinθ)12=sin12θ(\sin \theta)^{\frac{1}{2}} = \sin^{\frac{1}{2}} \theta

照道理,這也可以寫成平方根的形式:

sinθ\sqrt{\sin} \theta

可上述表達,至少我從未見過,一般都是表示為:

sinθ\sqrt{\sin \theta}

那麼,把指數寫在函數名的上角標位置的形式,僅限指數為整數,且 >1\gt 1

除此之外,當函數的指數為 1-1 時,它就變成了原函數的反函數,比如 sin1\sin^{-1} 即為 arcsin\arcsin,而非 1sin\frac{1}{\sin}。而當指數為 0011 時的意義更是沒有明確定義。

結語 —— 嚴謹的表達與嚴謹的思維同樣重要#

一門如此追求思維美學的學科,怎麼能構建出如此雜亂的表達?這時候我必須提起計算機語言了,計算機語言的表達欲數學表達比起來,嚴謹得不止一點。主流的語言往往有統一的標準,表達和命名都有嚴格的規定,然而數學沒有。年輕的計算機語言沒有厚重的歷史包袱,使得它可以構建全新的語法,從而擺脫以往語言存在但無法解決的問題。可是,數學語言在歷史發展中已然成型,其問題不能被輕易解決,原因在於有太多信息已然在它的基礎之上建立好了,所以數學語言無法承擔顛覆性的變革。更何況數學語言沒有版本體系,自然談不上什麼更新迭代了。

數學語言漏洞百出的根本原因,其實還是需要歸咎於數學研究者的不負責任。大家都認為自己的表達可以隨意一些,只要方便就好,而不考慮推廣開來可能造成的隱患。雖然大多部分表達確實沒有大範圍推廣,可僅僅是那些推廣了的部分,在歷史積累的過程中,就完全足以使整個數學表達體系陷入極度混亂的深淵。

更為糟糕的是,在不同地區、不同文化背景之下,即使是對於相同的對象,數學語言也能有各種不同的表達方式,美國和蘇聯的兩種方式就是最好的例子。不同文化中誕生不同的表達並非不可理解的事,但沒有一個人想起為此訂立統一的標準,更有甚者在多種表達方式中反復橫跳。這正是規範意識缺乏的反映。物理化學都有國際標準,符號和單位國際通用,但是數學貌似沒有,而且看起來也不像是會有的樣子。

數學語言的嚴重問題亟待解決,可卻無從下手,那不如讓我們每個人都嚴以律己。從今起,規範自己的語言,完善自己的表達,至少可以讓你自己所產出的內容擺脫這般混亂的困境。

載入中......
此文章數據所有權由區塊鏈加密技術和智能合約保障僅歸創作者所有。