关于改进符号体系的建议
举一个非常简单的例子。如果你说 \(cos^2θ\) 表示 \((cos θ)^2\),那么理所当然,\(cos^{-1}θ\) 就应该表示 \(1/(cos θ)\) 了?可它偏偏不是!别被数学老师们的教条和借口欺骗啦,他们总是告诉你:“你应该记住这些!” 可是你想过吗:凭什么? \(cos^2θ\) 表示 \((cos θ)^2\),而 \(cos^{-1}θ\),明明是一模一样的形式,表示的却是 \(arccos θ\)。一个是求幂,一个是调用反函数,风马不及,却写成一个样子。这样的语言设计混淆不堪,却喜欢以“约定俗成”作为借口。 如果你再多看一些数学书,就会发现这只是数学语言几百年累积下来的糟粕的冰山一角。数学书里尽是各种上标下标,带括号的上标下标,x,y,z,a,b,c,f,g,h,各种扭来扭去的希腊字母,希伯来字母…… 斜体,黑体,花体,双影体,……用不同的字体来表示不同的“类型”。很多符号的含义,在不同的子领域里面都不一样。有些人上一门数学课,到最后还没明白那些符号是什么意思。 直到今天,数学家们写书仍然非常不严谨。他们常犯的一个错误是把 \(x^2\) 这样的东西叫做“函数”(function)。其实 \(x^2\) 不是一个函数,它只是一个表达式。你必须同时指明“\(x\) 是参数”,加上 \(x^2\),才会成为一个函数。所以正确的函数写法其实看起来像这样:\(f(x) = x^2\)。或者如果你不想给它一个名字,可以借用 lambda calculus 的写法,写成: \(λx.x^2\)。
建议:
- 可以参考C语言,引入头文件。按照标准的学科分类把符号进行分层分级,整合成为一系列标准符号库,然后像C一样在论文或者学术文章里进行引用。
- 可以参考C++语言,引入namespace。
- 必须确保符号一致性,比如右上角的角标如果是实数那就只代表幂次,这个具体在头文件里定义。
无论怎样,这都不是一蹴而就的事情,因为习惯很难改变,而这件事又没有显著的短期利益。可能随着符号体系越来越臃肿,直到人们受不了了才开始思考改变。
从根本上说,数学和计算机科学的融合是未来的趋势,符号体系的改进是迟早的事。