“严谨”的混乱——数学

数学爱好者总是喜欢称赞数学严谨的特点，但实际上，数学的严谨往往取决于使用它的人，而非数学本身。如果你没有学习过数学的某些概念，那么你初次遇见相关的表达时往往很难看懂。这样的现象可以证明数学没有统一的定义和语法，这些全部都是由创造某些概念的数学家按照自己的喜好定义出来的。接下来，我会举几个例子来让你体会一下这种混乱。

无规则命名

同样是函数，三角函数可以有三个字母，但是别的大多数不行。在书写的时候，多字母的函数或是其他符号会产生歧义，而数学将其解释为 “约定俗成”。

绝大部分人没法直接用手写出衬线字体，书写时，“sin⁡\sinsin” 和 “sin sinsin” 并无区别。那这时候，如果 sin⁡\sinsin 未曾定义，那么它完全可以被认为是 s⋅i⋅n s \cdot i \cdot ns⋅i⋅n。当然，我们也可以定义一些函数，比如 si\rm{si}si 和 in\rm{in}in，那么 sin⁡\sinsin 就既是 si⋅n\rm{si} \cdot \mathcal{n}si⋅n 也是 s⋅in s \cdot \rm{in}s⋅in 了。

上面的表达可能有些不太严谨，毕竟数学没有严格的类型，所以 sin⁡\sinsin、sin⁡(x)\sin(x)sin(x)、sin⁡x\sin xsinx、si\rm{si}si、si(x)\rm{si} (\mathcal{x})si(x)、in\rm{in}in、in(x)\rm{in} (\mathcal{x})in(x) 等等等等都可以表示函数，但也有可能是别的什么东西。可是这跟用语法高亮写语法有什么区别？笔有颜色、粗细、笔触上的区别，那么是不是还能开发出什么彩色、粗细、笔触的语法？难不成可变字体是数学家发明的？别问，问就是：“约定俗成”。

另外，既然 sin⁡\sinsin 是正弦，cos⁡\coscos 是余弦，那么 tan⁡\tantan 作为正切，cot⁡\cotcot 作为余切看起来确实非常合理。当你感叹道这一切是多么的井然有序时，出现了一对非常令人不快的函数打破你的宁静 ——sec⁡\secsec 和 csc⁡\csccsc。合着加前缀 “co\rm{co}co” 并去除末两位字母命名的时候重名了就可以直接随便取一个全新的名字咯？

含糊不清的语法

数学家很喜欢创造语法，但是他们似乎想不出很多漂亮的语法和符号，所以相同的符号放在类似的地方所表示的意义需要通过上下文来推测，下面是一个例子：

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

如果不知道 f ff 的定义，那么你只能知道这是一个函数，但不知道它的返回值类型，而在数学里，貌似是允许函数返回函数的，比如这样：

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

看起来好像和返回类型没什么关系？但是数学没有明确指出 <variableName>(<parameter>)\texttt{<variableName>}(\texttt{<parameter>})<variableName>(<parameter>) 的意义，所以上述 f(x)f(x)f(x) 既可以理解成函数的返回值，也可以理解成函数，那么上面的式子我们可以解释为是把函数 f ff 的返回值定义为函数 g gg。所以我们可以得出：

Copy f(x)(m+1)=(f(x))(m+1)=g(m+1)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)g(x) 没有什么关系：

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

这一例子不仅反映出数学家爱简写的坏习惯，而且说明数学中相同的符号、相同的语法具有多重含义。不是说简写不好，而是有歧义的简写没有杜绝造成简写的弊端充分显现。

高度复用且极富歧义的符号

学过数列的朋友们都知道 {an}\{ a_n \}{an​} 可以表示数列，但是如果你还没学到数列，那这就看起来是一个集合。

让我们来看下面这个表达：

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

这时候你能清楚地知道 (0,2 2)\left( 0, 2\sqrt{2} \right)(0,22 ​) 表示一个区间，但是如果我这样写：

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

这里 x\textbf{x}x 是一个平面向量。幸好教科书保守地使用了 “x⃗\vec{x}x ”，否则手写很难区分斜体和粗体的 “x”。

事实上，如果不是我给出了 “∈\in∈” 和 “===”，你根本无从得知 “(0,2 2)\left( 0, 2\sqrt{2} \right)(0,22 ​)” 的意义。这样复用符号是不是过于草率了呢？

更令人难以理解的是，很多人会推荐在括号嵌套时，依次轮换使用不同的括号：

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

这真是给本就肩负多重重任的括号们火上浇油。问题是这样做看起来很难看，写起来还需要不停地改刚刚写出的外层括号，难道我写这类式子还得事先计算嵌套层数吗？如果像上面那样配对括号至少还有一点点用处，那下面这样就实在是过于荒谬了：

Copy 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\}f[g(x)]=h{e+[21​+i(x)]2}

用于标识函数的参数的括号竟也可以遵循上述规则，这说明函数其实没有属于它自己的语法。上面这个例子中的 f ff、g gg、h hh 和 i ii 看起来是函数，但其实你找不出依据，你判断它们是函数的理由只能是：看起来像。这样的表示方法与省略乘号的 f⋅[g⋅(x)]f \cdot [g \cdot (x)]f⋅[g⋅(x)] 并无区别。

限制过多的集合与区间

类型是严谨性的基石，然而数学不遵循这一点。{1,π,e}\left\{ 1, \pi, e \right\}{1,π,e} 是一个集合，但你一定听说过点集，通过把若干点放在一个集合里，构成一个可以用图像表示的集合，比如 {(1,1),(2,3),(4,9)}\left\{ (1, 1), (2, 3), (4, 9) \right\}{(1,1),(2,3),(4,9)}。我们还知道 [1,4]\left[1, 4\right][1,4] 是一个区间。那么，当我们把它们并起来：

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

上述运算是合法的，区间和数的集合是可以取并集的，这说明不同类型的集合可以取并集，然而：

Copy{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,π,e}∪[1,4]∪{(1,1),(2,3),(4,9)}

这一下子就不合法了。这说明取并集的集合的元素类型必须相同，然而一个有时看起来像坐标或者说是点的区间，竟和数构成的集合类型相同。这时候你也许会为数学辩解，说区间和数集本就是相同类型。那么为什么 {1}\{ 1 \}{1} 是合法的，可是 [1,1][1, 1][1,1] 却不合法？

集合，是一个既不像数组，也不像数列的东西。集合不允许相同的元素，数组允许，但这没有不允许的必要，我们完全可以在定义中认为 {1}\left\{ 1 \right\}{1} 和 {1,1,1}\left\{ 1, 1, 1 \right\}{1,1,1} 是等价的。既然连隐式类型转换都到处都是，那么为什么不能自动地隐式忽略相同元素呢？真是充分发挥了隐式的弊端，而避开了隐式的优势。然后当你学习数列时，你又发现数列完全就是一个数组构造函数，真正像数组的东西倒是向量。

隐式类型转换

我们可以定义一个 s ss 代表一个代数式：

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

这时候，我想，s ss 应该可以算是属于表达式类型，然而给它加个括号，它就变成了一个函数：

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

于是 s ss 被隐式地转换成了一个函数。紧接着，给 s ss 加个 “′'′”，它又变成了函数 s ss 的导函数：

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

那么按理说，导函数 s′s's′ 应该也可以看作是一个表达式，所以说，我们绕了一圈，证明了表达式类型具有可求导函数的性质，所以，表达式也能有导函数了。

不明确的运算适用范围

我们可以对一个函数的返回值做平方运算：

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

而这一表达，也可以写为：

Copy sin⁡2 θ\sin^2 \thetasin2θ

这样简写，明显就是在对函数做平方运算，而非其返回值。如果这样的语法确实合法，那么这样应该也行：

Copy(sin⁡θ)12=sin⁡12 θ(\sin \theta)^{\frac{1}{2}} = \sin^{\frac{1}{2}} \theta(sinθ)21​=sin21​θ

照道理，这也可以写成平方根的形式：

Copy sin⁡θ\sqrt{\sin} \thetasin ​θ

可上述表达，至少我从未见过，一般都是表示为：

Copy sin⁡θ\sqrt{\sin \theta}sinθ ​

那么，把指数写在函数名的上角标位置的形式，仅限指数为整数，且 >1\gt 1>1。

除此之外，当函数的指数为 −1-1−1 时，它就变成了原函数的反函数，比如 sin⁡−1\sin^{-1}sin−1 即为 arcsin⁡\arcsinarcsin，而非 1 sin⁡\frac{1}{\sin}sin1​。而当指数为 0 00 或 1 11 时的意义更是没有明确定义。

结语 —— 严谨的表达与严谨的思维同样重要

一门如此追求思维美学的学科，怎么能构建出如此杂乱的表达？这时候我必须提起计算机语言了，计算机语言的表达欲数学表达比起来，严谨得不止一点。主流的语言往往有统一的标准，表达和命名都有严格的规定，然而数学没有。年轻的计算机语言没有厚重的历史包袱，使得它可以构建全新的语法，从而摆脱以往语言存在但无法解决的问题。可是，数学语言在历史发展中已然成型，其问题不能被轻易解决，原因在于有太多信息已然在它的基础之上建立好了，所以数学语言无法承担颠覆性的变革。更何况数学语言没有版本体系，自然谈不上什么更新迭代了。

数学语言漏洞百出的根本原因，其实还是需要归咎于数学研究者的不负责任。大家都认为自己的表达可以随意一些，只要方便就好，而不考虑推广开来可能造成的隐患。虽然大多部分表达确实没有大范围推广，可仅仅是那些推广了的部分，在历史积累的过程中，就完全足以使整个数学表达体系陷入极度混乱的深渊。

更为糟糕的是，在不同地区、不同文化背景之下，即使是对于相同的对象，数学语言也能有各种不同的表达方式，美国和苏联的两种方式就是最好的例子。不同文化中诞生不同的表达并非不可理解的事，但没有一个人想起为此订立统一的标准，更有甚者在多种表达方式中反复横跳。这正是规范意识缺乏的反映。物理化学都有国际标准，符号和单位国际通用，但是数学貌似没有，而且看起来也不像是会有的样子。

数学语言的严重问题亟待解决，可却无从下手，那不如让我们每个人都严以律己。从今起，规范自己的语言，完善自己的表达，至少可以让你自己所产出的内容摆脱这般混乱的困境。