物理学的概念其实是一个很“虚”的概念。
尤其在现代,当我们泛泛而谈“物理”的时候,总会或多或少地与别的学科发生纠结。
比如说,从最广义的角度而言,所谓物理就是事物演化的道理——于是乎,化学、生物、社会乃至人文、经济都被包含在了物理的范畴中,这显然是不对的,虽然有过类似于“As a physicist, you must know everything”(虽然个人认为这句话中的physicist应该换成detective)——哦,数学大概会表示毫无压力,因为抽象的数学概念恐怕没法被纳入事物这个Object的范畴。
因而,什么是物理是一个让人很纠结的问题。
研究粒子物理的人可以给出一堆细致到分毫的界定,来告诉你什么是粒子物理,但对于什么是物理,恐怕也不能给出让人不纠结的答案。
看看物理都涵盖了些什么?小到粒子,大到宇宙,中间原子分子分子团都有物理的影子。介观里各种日常生活中的物体都是物理,比如水电煤,分别涉及流体力学、电磁学和热力学,比如女人们最爱的汽车与房子,涉及各种力学——动力学与静力学。宏观上,从火箭发射到太阳黑子,从地球运动到宇宙膨胀,所有这一切都是物理——只不过分工不同,这些是星体物理,这些是空间物理,这些是宇宙学,那些是工程力学——总而言之,都是物理。
在这个背景下,很容易理解为什么某些学校里力学系、光学系、电子系和无线电科学会从物理系中分出去,那就是因为物理太大了,当我们要专心研究某个领域的时候,冠之以泛泛的“物理”之名会让人不知所云——就好比某些学校的理论物理专业,一个理论物理所,跑来一看,哇塞,都是研究复杂网络的……
好吧,就让我们采纳最大的也是最全面的物理的定义——所谓物理,就是研究事物演化的道理的科学,同时把所有化学、生物等内容都显式地扣除,不到万不得已不允许类型转换——一旦发生强制类型转换,那就是传说中的交叉学科,比如生物物理。
因而,物理研究的就是一个系统的演化。
在这里,其实就暗含了两条线索——
1,系统具有属性,而且一旦所有的属性都确定了,那这个系统的状态也就唯一确定了;
2,系统的属性是时间的函数,会随着时间的发展而改变,而且这种改变是可以被描述的。
第一条其实很重要,因为它给出了这么一个观点:系统等于系统所有属性之合。这是一个典型的还原论观点。
因而,从第一条基本线索,其实也是基本假定,出发,我们可以把物理看成OOP中的一个Class,而物理的属性就是这个Class的各种属性——甚至于还包括了Delegate与Function。当然,真要说来的话,物理这个OOP其实是lisp-like的,因为所有一切都可以当作属性来看,function也是一种data。
所以,第一条线索事实上等价于这么一个说法:一旦一个Class的所有属性(包括函数)都确定了,这个Class就确定了。Class是它自身所有Data的总和,没有更多内容。站在OOP的立场而言,这个说法没有丝毫问题——但对于物理而言,这个说法本身是一种形而上的要求,并不能从物理本身找到其存在的合理性。
这里还有一点是需要注意的,那就是系统的属性未必都是可观测的,而且不可观测的未必就没有意义。
从OOP的话来说,物理这个Class的属性有的是Public——可观测的,有的是Private——不可观测的,有的是Protected——可以间接地体现出来。甚至于,如果细分的话,我们还可以分出哪些是Static的,哪些是Sealed的,哪些是Abstract的。
从这个意义上来说,将物理系统视为一个OOP中的Class是很合理的——但事实情况是,OOP发展的时候事实上是从哲学中借取了Class的概念,而哲学是对自然科学的总结而有的Class的概念,所以原则上说,是OOP映射了物理,而不是物理映射了OOP。
物理Class的Private对象未必就是没意义的。最简单的反例就是磁场中的AB效应,以及电场中的AC效应——这里电磁场的势能A与phi都是不客观测量——用经典物理的话来说是辅助量——但事实上,正是这两个Private的属性导致了屏上的干涉相位,所以不可观测量一样能引起物理效应——虽然不如客观测量那么直接。
当然,上述这段的一个值得深思的问题,就是物理上到底什么是基本量这个概念其实还是很模糊的。这个在等下说到系统演化的时候将更明显。
上述两条线索中的第二条,则将物理与数学建立起了一种很内在的联系——当然,与第一条一样,这里也存在一个形而上的要求,即所有物理量(不管是可观测是Public还是不可观测的Private)都可以用数学语言建立起一致性的描述。这个要求在现在的我们看来是天经地义的,但事实上却未必如此。
说一个DOM的例子。DOM中的对象的属性有很多,有些是可以用数学来表达的,比如Height,Width,有些则也许大概可能或者八成能用数学来表达,比如Style(具体做法,是将Style抽象为JSON,并且可以继续拆分为各种基本对象的组合,于是从某种意义上来说可以用离散数学视之)。但有些,估计是坚决不能用数学表达的,比如在innerHTML中写一段莎士比亚的Sonnet,你说这能用数学表达么?那莎翁第一个不高兴。
同样的,对于物理,就算我们坚持了第一条,那也不能说这些属性就一定都能用数学来表示,这两条之间并没有一个必然的逻辑关系。
比如说,某个对象有一个Lable标签,里面是可以输入文字的,于是乎,数学悲剧了。
再比如,一个系统有若干个刚体构成,这些刚体的形状虽然都一样而且都不变,但是它们的位置可以构成许多图案——这些图案的PixelData可以用数学来表示(比如对于HTML5的Canvas对象可以getImageData),但这幅图案所表达的意境能用数学来表示么(Canvas本身就不能判断图案属于哪个流派,你要另写算法)?能的话,梵高也要步莎翁后尘了。
乍看之下,上述两个例子与物理基本上属于风马牛不相及,但事实上,这却是科学哲学中对物理学的思考中的一个必经过程。
因而,第二条与其说是一种叙述,不如说是一种筛选——能用数学描述的,我们作为物理对象的属性,不能的,我们作为写小说的素材(玩笑)。
于是,这样又有问题了——系统的所有属性中那些不能用数学描述的属性难道对这个系统的演化没影响么?
或者这么问:是否存在对系统的演化有影响的且不能用数学来描述的属性。
对这个问题,物理本身是无能为力的。
在人类这个层面上来说的话,问题就变成了这么一个情形:人类的意识活动是否能用数学来完备地描述?如果不能的话,人类对事物运动的改变是否可以作为物理的一部分?
这个问题乍看起来又很无厘头,但事实上,如果我们站在哥本哈根流派的量子力学的角度,这个问题又值得玩味了——哥本哈根流派中,人类的活动将导致物理系统的塌缩——我动,或者不动你,你的演化是不同的。这和爱情买卖可不一样。 所以,如果认为人类的意识活动不能用数学来完备地描述,那就是说存在不能用数学描述的但却可以影响物理系统发展的系统属性。
这点本身颇有狡辩的意味。
总之,无论如何,物理都要求了如上两点的成立——而且,只要如上两点成立了,我们自然就可以得出这样的结论:可以用数学语言来描述一个系统的演化。
因而,在时间中演化的系统是可以用一条“演化路径”来描述的,而这条演化路径可以用数学的语言来描述。
这等价于OOP的这么一个情况:
有一个父类定义了一系列的方法与属性,其中方法的调用将导致属性的连贯改变(可以看作是触发了一个setInterval,或者用C++的语言来说就是启动了一个Thread,专门用来“定时”修改系统的属性,按照方法中指定的方法)。继承自这个父类的子类将具有唯一给定的方法,来对其属性进行连贯修改——这个方法就是系统的演化路径。
于是,又可以引出如下的问题:
假定多个系统所处的外部条件是相同,但是初始状态不同,那么这些系统之后的演化是否具有统一的规律?
这个问题等价于这么一个问题:
当边界条件(也就是系统的外部环境)一定、初始条件给定的情况下,系统的演化路径是否可以用一个统一的演化方程来描述。
用OOP的话来说,就是这么一个情况:
父类具有一组属性与方法,继承自该父类的子类将override掉属性,而不override那些父类的方法。为此,父类方法需要有输入,从而实现“应势而动”,对不同的子类给出各自的演化路径。
在具体的情况中,可以考虑自由粒子的自由运动,这枚自由粒子往东匀速直线运动,那枚粒子往南偏西匀速直线运动,第三枚粒子往东北偏北匀速直线运动,其演化路径各不相同,但有共性——匀速直线运动。于是我们知道了,自由粒子被抽象成一个父类以后,其演化方法就是自由直线运动。这枚粒子为该父类的子类,叫“往东运动”,于是方法就给出了“往东直线运动”。实例化以后,实例化了的“往东”粒子的初始位置在(0,0),那个实例化了的“往东”粒子的初始位置在(1,3)。
再比如,对于简谐运动,父类给出的方法是vec{a}=-vec{x},继承的子类则有很多,比如一维谐振子,二维谐振子,等等。实例化一下,这个谐振子具有这个初始位置与初始速度,那个谐振子有那个初始位置与初始速度,于是就有了很多种不同的运动——但是,运动的本质还是父类的那个方程。
最后,把所有上述两个父类,以及其它的各种抽象化的运动结合在一起,我们就得到了一个爷爷类,名叫“牛顿第二定律”,其演化方法就是vec{a}=vec{f}(vec{x},vec{v})。上述的自由运动与谐振子,只不过是牛二律这个父类的子类罢了,给定特定的属性,一个是vec{f}=0,一个是vec{f}=-vec{x},这些在子类定义的时候可以作为一个private的属性给出。
在分析力学出来以前的牛顿力学,可以说最大的功绩就是找到了牛二律这个父类,以及一些别的父类(牛顿三定律,以及引力定律)。
牛二律还有一个很大的功绩,就是把力与运动联系在了一起。
一般而言,物理的主要工作有两个,一个就是在给定外界环境的情况下,系统怎么演化——运动学;另一个就是系统本身怎么导致外界的改变——动力学。
这里可以将外界也看作一个OOP中的Class,系统的演化方法通过调用这个Class的属性(比如vec{f}=-vec{x})来决定自己的演化,这是运动学;同时系统也提供一个delegate,让这个Class可以调用之然后修改自己的属性,这是动力学。
牛二律这个父类就是运动学的精华。
之后的物理学,可以说要做的就是找出动力学的父类,而运动学方面则是找出各种在实际应用中所要用的子类——比如固体物理里面要怎么做啊,点粒子是什么样啊,刚体是什么样啊,转动又要怎么样啊。
在动力学方面,很快就找到了这样的一个父类——牛顿的引力定律。这个父类在经典的层面上告诉大家引力是怎么产生的。随后是Maxwell方程组,告诉大家电磁力是怎么产生的。几年以后得到了GR,于是我们就知道了时空如何因物质而弯曲、物质如何在弯曲时空中运动。
这里,其实和之前最初的两条“线索”一样,物理的科学哲学中沿用了这么一个逻辑,也就是只要我知道了运动学与动力学的方程,物理我就知道了。因此,在这个过程中,数学化的公式体系逐渐取代了物理的思想体系,物理思想开始变得有点模糊,得到方程才是最主要的。知道了方程,就知道了一切——最初的拉普拉斯的机械决定论正是在这个背景下出现的——只要我知道了初始数据、运动方程,这个世界以后会怎么运行我就了如指掌了——当然,这里还假定了一切属性的演化都可以用数学来描述这个条件。
这个思想在数学中也有体现——当然,更加理性。
柯西定理告诉我们,对于微分流形上的满足给定微分方程的可微张量场,在边界条件给定的情况下,这个场是被唯一确定的。
这点在电动力学中用来证明边界条件给定的情况下电磁场的唯一性时被用到过。
同样的,在时空这个流形上的各种张量场,在给定了边界条件与初始条件以后,其在“未来”的演化也就是唯一确定的了。
但,值得注意的是,从各种演化路径抽象总结而来的运动方程,其实并不能完备地描述系统的演化——还是磁场中的AB效应与电场中的AC效应,这里在管外电磁场是恒为零的,所以演化方程没法给出干涉的结果。
在得到了运动方程以后,除了寻找越来越多的动力学原理以外,还有一件很重要的事情,那就是发展了分析力学。
从运动方程到作用量的过程,可以看作是从演化路径到运动方程的抽象化过程的延续。
从作用量出发,我们就可以通过变分原理来获得运动方程,这个过程就好比从运动方程出发就可以获得演化路径是一样的——事实上,在哈密顿力学中,我们可以把哈密顿方程看作是相空间中的牛顿第二定律,所以分析力学其实就是建立了相空间中的牛顿力学,因而是牛二律这个父类的延续。
而且,作用量的另一个好处,就是在给定了运动项以后,加入动力学项就能得到该动力学对应的演化,如果要研究多个相互作用的动力学的总效应,直接写上多个不同的相互作用项就好了,这比从实验总结运动方程方便很多。
以场论(经典场论,不是量子场论)来说,我们在有了长的运动项以后,引入Yukawa耦合项,就得到了SQED,引入U(1)规范,就得到了QED,引入SU(2)×U(1)规范,就是弱电,很方便。甚至于,在弯曲时空中引入U(1)规范,很自然地就得到了引力场与物质的耦合、电磁场与物质的耦合,以及,更重要的,引力场与电磁场的耦合。
这东西的威力就很巨大了,因为相对于经验总结的运动方程,作用量是具有“说得清道得明”的“物理意义”的。而且在作用量中,你只要给出粒子的运动项,以及相互作用的相互作用项,运动学与动力学就都有了,不可谓不方便。
但,作用量许多时候也未必就能得到想要的运动方程。
比如,对于vec{a}=vec{f}的情况,对应到分析力学,是L=frac{1}{2}mv^2-V(x),于是对应的运动方程为:vec{a} =-
abla{V},但
abla{V}与-vec{f}未必是等价的,除非partial_i f_j=partial_j f_i。
因而,也不是所有的运动都能用作用量来给出。
当然,作为一种信仰,我们依然可以相信作用量可以给出所有的物理——而且,事实上,就算是上述哪种情况,我们也可以换一个角度——只要我们所得到的运动方程可以让通过作用量得到的运动方程成立,就可以了。这两个是有区别的,因为我可以在运动方程上乘上个东西,使得面目全非,但方程的解依然是解,而面目全非的这个东西则可以是通过作用量来得到的。
比如说吧,具有摩擦力的阻尼运动方程vec{a}=lambdavec{v},这个东西就显然没法用L=frac{1}{2}mv^2-V(x,v)来获得。但是,如果取作用量为L=frac{lambda x+vlog{1-frac{lambda x}{v}}}{(lambda x)^2},那就可以得到阻尼运动的运动方程,当然,还乘上了许多“乱七八糟”的东西。
因此,我们有足够的信念说:物理上的运动方程都可以从作用量来获得,于是又等于把物理抽象了一个层次,而且抽象得更加“数学”——本来所有的物理就是运动方程,现在所有的物理就是作用量(当然,在哈密顿力学中就是哈密顿量,两者相差一个勒让格变换)。而且,以后要得到新的物理,比如多种相互作用的联合作用、多个物理对象的共同作用,运动方程还要从实验中来摸索,现在可好,直接把几个作用量加在一起就完事了。
简单粗暴。
这就好比在一个大环境的Class里面丢进去一个表示粒子的Class,没别的了,于是自由运动;再扔进去一个粒子,但是不扔相互作用,于是还是两个自由运动的粒子闲逛。现在扔进去一个名叫引力的Class,两个粒子开始二体的引力作用;再扔进去一个粒子,就三体了。接着扔进去一个名叫电磁力的Class,于是在引力和电磁力作用下的三体运动,就更加精彩了。
物理到了这里就是这个样子,一个大模子,你随便扔,只要你能写出作用量。
从这个角度来说,所谓作用量,就是一个代码,而物理就是一个运行这种代码的图灵机。你把几个代码一起扔进这台图灵机,这台图灵机就会按照你设计好的这几种相互作用的形式来作用,很方便。
而且,还能看出一点,运动学所要的最重要的东西,就是运动物体自身的作用量;而动力学所要的最重要的东西,就是相互作用的作用量。在这个意义上,“物质”与“相互作用”是分离的——但是两者必须同时存在才能形成完整的运动学与运动学。只有相互作用作用量,那就只能得到相互作用的演化,但是没有源;只有物体的运动项作用量,那物体永远是自由运动。
一个有趣的问题,是关于图灵机的各种命题对于物理是否也能问呢?
比如说停机问题,在物理上如何反应?对物理而言,所谓停机应该理解为“宇宙的终结”。于是如果物理这台图灵机能停机,那宇宙就有尽头——如果宇宙不能停机,那宇宙就没有尽头。这两个分别对应了闭合的宇宙(大塌缩)与开放的宇宙(热寂)——但是,对于平衡态宇宙,没人知道到底是能停机还是不能停机,因为严格的平衡态宇宙是不存在的,物质的运动会产生扰动,从而使得宇宙要么塌缩要么热寂。
从这个意义上来说,宇宙要么能停机,要么不能停机,但到底停机还是不停机呢?——当下的宇宙学观测告诉我们,宇宙更可能是AdS的,而不是dS的,于是宇宙是开放的,于是宇宙不能停机——所以,宇宙如果作为图灵机,那么是不能停机的。
站在停机问题这个最原始版本的角度来说,既然宇宙不能停机,而图灵机没法判定是否可以停机,于是宇宙不是图灵机。
上帝是怎么造宇宙的?就是用五天写下作用量,扔进宇宙图灵机,第六天写一个人类的作用量扔进去,第七天周末休息放假看电影。
但是,作用量本身却也有一些说不清楚的地方。
比如,我们都相信物体有往势能最小的地方运动的趋势,但是对于作用量而言,其对应的运动方程可以是作用量最大,也可以是作用量最小,甚至可以是作用量为驻值,这三种情况并存,所以未必就是势能最小的情况。
对于自由点粒子而言,作用量的情况还算容易理解——就是粒子运动的世界线的长度,所有作用量的变分原理就对应到了世界线最短(或者最长)的原理,这个在几何光学中很常见。但是对于非自由点粒子,以及不是点粒子的别的东西,这就说不清楚了。
因而,对于作用量而言,物理上并不知道作用量究竟是什么,但是知道作用量可以给出我们所需要的物理——比如说,运动方程。另一方面,我们也不知道为什么作用量要按照变分原理所示,以变分为零(所以作用量最小或者最大或者驻值)来得到运动方程(也就是相空间中的演化路径,从相空间来看,哈密顿方程就是演化方程,对应了辛几何中的牛顿力学)。
当然,其实这两个问题不需要深究,我们只要知道:作用量加上变分原理就能得到运动方程,从而描述物理,这就够了——这是物理上很常用的实用主义。
但,如果站在量子的角度来看,那情况便有所不同了——在exp(iS)这样的相因子形式中,很容易联想到delta函数的Fourier分解,当然,即使是在形式上说,两者也并不完全相同。
作用量的作用与意义的模糊性在量子力学中又有了更深刻的表现。
比如,我们知道exp(iS)可以作为相因子,最后在路径积分中体现,引起量子效应,但是为什么是作用量呢?为什么是作用量作为exp的相因子呢?这两个问题又是知其然不知其所以然了。
当然,exp(iS)的这种形式在另一种角度上来说,与“波函数”这个表象又是有所联系的。容易证明,在路径积分的语境下,只有exp(iS)才能得到波函数,因而“波函数”是exp(iS)这种路径积分形式的必然结果。反之也可以认为,只要要求了量子力学具有波函数的形式,那路径积分就只能是对exp(iS)的积分。
从这个角度说,波函数,路径积分,exp(iS)以及经典中的作用量变分原理这四样东西是完全可以联系起来的。
同样的,在路径积分的语境下,正则量子化的“算符化”操作很好理解,就是路径积分的一个结果罢了。
但,不得不说,为何要采用exp(iS)这种形式其实也值得深究,但却没法究清楚。
所以,如果换到OOP的角度来说,事实上物理学家在做的是这样的事情:我们手上有一个软件,我们要做的就是不停地测试这个软件,从而最终掌握这个软件是怎么编写的——也就是作用量到底是什么。
而且,很类似的是,一个软件可以有许多不同的编写方法,我可以用JS,可以用C#,可以用VB6,甚至可以用机器码。上帝写宇宙这个程序的时候用的是什么语言,看他高兴;我破解的时候用的是什么语言,看我高兴。
除了语言不同,实现同一段程序,代码也可以是完全不同的,思路也可以是不同的——上帝可能喜欢用这个思路,我喜欢另外一个思路,也行,只要能做到一样的事情就可以。
从这个角度说,所谓做物理,事实上就是在做一个逆向工程,黑掉宇宙这个软件。当然,如果顺带可以在逆向的过程中体会到上帝编写这个软件时的强大智慧,以及宇宙这个软件的伟大深邃,还有人类作为一段代码的渺小无助,那就更好了。