那條不肯安分的迴路
到現在你已經親歷了第二篇那令人不安的發現。你取了一個天真的函數元素——比方說平方根的一個分支,在一個遠離 0 的小圓盤上是單值且全純的——然後你用沿路徑的延拓帶著它繞原點走一圈。當你回到同一個圓盤,這個元素變了:sqrt(z) 變成了 -sqrt(z)。函數沒有壞掉,也沒有對你說謊。它只是拒絕記得自己最初取的是哪一個值。同樣的事發生在 log z 身上,只是更糟:繞 0 一圈會把答案加上 2 pi i,再繞一圈又加一份,永無止盡。
第三篇接著指出:當延拓真的被堵死時,你會撞上一道自然邊界——一堵函數永遠無法跨越的牆。但平方根與對數沒有這樣的牆。它們在除了單獨一個分支點以外的地方處處延拓得通;唯一的瑕疵是它們回家時不肯保持單值。那是一種溫和得多的毛病,而本篇談的正是它的療法。療法不是去禁止那些迴路。而是去承認:這個函數天然的定義域,從一開始就不是那張平坦的平面。
單值性定理真正想告訴我們的
回想第二篇單值性定理的判決:如果你能在一個單連通域——一個沒有洞可繞的區域——裡自由地延拓一個元素,那麼結果就真正是單值的,而且兩條有相同端點的路徑總是給出相同的值。多值性永遠只透過洞、透過那些無法收縮成一點的迴路才悄悄溜進來。去掉原點的平面恰好有這麼一個洞,而這正是 sqrt(z) 與 log z 在那裡失常的緣由。
把這話倒過來讀,它就成了一帖配方。麻煩不在函數裡;它在我們硬逼函數棲身其上的那個定義域的拓撲裡。一條繞分支點、繞數非零的迴路,正是那場改變的信使。所以與其切開平面去禁止這種迴路(那是前幾階梯的分支割線把戲,有用但臨時湊合),我們問一個更勇敢的問題:有沒有一個新的定義域、一個重新塑形過的定義域,使得那些惹禍的迴路根本不回到同一個地方——好讓函數誠實地單值,不必禁止任何東西?答案是有,而那個新的定義域就是黎曼曲面。
建造曲面:堆疊紙頁,黏合迴路
這是平方根的建造法,緩慢而具體地走一遍。函數 sqrt(z) 有兩個分支——叫它們 +頁 與 -頁——每一個都是去心平面的一份完美的單值副本。取兩份這樣的副本,兩張去掉原點的平坦平面紙頁,把一張疊在另一張之上。在上頁,sqrt(z) 取它的 + 值;在下頁,取它的 - 值。到此為止我們不過畫了兩幅互不相干的圖。魔法在於我們如何把它們接合起來。
把每一張紙頁沿同一條射線——比方說負實軸——切開,於是每張紙頁現在沿那道狹縫都有一條上唇與一條下唇。然後交叉黏合:上頁的上唇接到下頁的下唇,而下頁的上唇接到上頁的下唇。現在沿一條繞 0 一圈的路徑走。在平坦平面上這會把你帶回出發點;在黏合後的曲面上,當你越過那道舊割線時,你便從上頁滑到下頁。你抵達「同一個 z 的上方」,卻在另一張紙頁上——恰恰是 sqrt 已經翻號的地方。再繞第二圈,交叉黏合又把你帶回第一頁,值也翻了回來。兩圈走完,恢復原狀。曲面已經把翻號內建進它的幾何裡。
z-plane (one hole at 0) Riemann surface of sqrt(z)
. . . . . . upper sheet ( + value )
. loop adds . ____________________
. sign flip . ===glue==> / cross over the cut /
. . /____________________/
. . . . . . lower sheet ( - value )
one z, two values --> two points stacked over each z
loop returns -sqrt(z) --> loop climbs to the other sheet在曲面上,函數終於單值了
退一步看看我們造出了什麼。黎曼曲面的一個點不只是一個數 z;它是一個數 z 連同你身在哪一張紙頁上——等價地說,z 連同你指的是 sqrt 的哪一個值。每個非零的 z 上方有兩個這樣的點(兩個分支),所以這個曲面是去心平面一個貨真價實的雙層覆蓋。而現在是回報的時刻:作為曲面上一個點的函數,sqrt 是完完全全單值的。問「在這個曲面點上 sqrt 是多少?」便有一個毫不含糊的答案,因為那個點本身已經帶著它的分支。多值性並沒有消失——它被轉化成了定義域的雙頁性。
那位於 0 的分支點本身呢?它是兩張紙頁被釘在一起的那一處——同時屬於兩頁的單獨一點。想像兩張紙頁在那裡相接,像一道螺旋坡道的交會點。曲面處處沒有撕裂的邊緣、沒有自由的唇;那道在平坦平面上看似邊界的舊割線,如今成了內部一道隱形的縫,兩張紙頁在那裡平順地彼此穿過。這個縫合起來的對象,連同它的紙頁與分支點,正是函數一直以來暗中真正定義其上的東西。平坦的平面,從頭到尾不過是它的影子。
對數那無盡的螺旋,以及作為覆蓋的曲面
對數是所有例子裡最乾淨的一個,因為它的曲面永遠不折回自身。回想對數的多值性:log z = log|z| + i arg z,而 arg z 只定義到相差 2 pi 的整數倍。每繞 0 一整圈會把 arg z 往上推 2 pi,於是把 log z 往上推 2 pi i。不存在哪個 n 使得 n 圈把你帶回家,所以不像平方根,那些紙頁永遠不重新接上。因此對數的黎曼曲面是一道無窮的螺旋坡道:去心平面上每一個點 z 的上方坐著無窮多個曲面點,每個分支選擇一個,像一道永遠向上又向下攀升的螺線的階梯般疊起。在這道坡道上,log 是一個單一、舉止優美的函數——攀爬這道坡道,根本就是看著 arg z 穩穩地增加,沒有跳躍、沒有含糊。
我們造出的東西有一個名字,而它把本階梯連到拓撲學。一個鋪在平面上方、使得局部看起來像平面上一塊普通的小片、但整體上可能有好幾層的曲面,就是去心平面的一個覆蓋空間。平方根曲面是一個二重覆蓋;對數的則是無窮重的萬有覆蓋,所有覆蓋裡攤得最開的那一個,是每一條迴路終於都被解開的那一個。這正是為什麼這套建造總是行得通的深層原因:沿路徑延拓一個函數元素,喬裝之下其實就是把那些路徑提升到一個覆蓋空間上,而一個覆蓋之所以那樣建造,正是為了使提升一條迴路不必把你帶回出發的那一層。
誠實的但書,以及這通向何方
幾條誠實的告誡,免得這幅圖像把人帶偏。第一,「切」與「黏」這兩個詞是鷹架,不是那個對象本身。黎曼曲面本身並不取決於你沿哪條射線去切——不同的切法只是把同樣的兩張紙頁縫得不同,得到的卻是同一個曲面(至多換個標籤)。割線是一種繪圖輔助,曲面一旦建好就丟棄。第二,對數曲面那向上盤旋的圖像是一幅忠實的草圖,但真正的曲面活在太多維度裡,畫出來不可能不看似穿過自身;任何平面圖裡看似的自交,都是把它壓扁下來的假象,不是真正的交叉。
第三,也是最要緊的:黎曼曲面不只是一個拓撲小裝置——它帶著自己的複結構,使得「在曲面上全純」有了誠實的意義,而在其上,函數與它的諸延拓是單一的對象,也就是第二篇的語言所稱的一個被完全延拓的完全解析函數。整團糾結的分支坍縮成一個真正單值的全純函數,代價不過是把定義域擴大。這就是整個構想,也是數學裡最美的交易之一:你無法在平面上把 sqrt 弄成單值,但你能把它弄成單值——只要把它應得的定義域給它。
在本階梯的最後一篇,我們會把這台機器拿去處理那兩個推動了一切的函數:我們將鉅細靡遺地描出平方根的雙頁曲面與對數的無盡螺旋,看著 arg z 攀上坡道,並確切地看見單獨一個分支點如何能組織起整片曲面。手握這條一般原理——分支化作紙頁、迴路化作攀爬、分支點化作那枚釘子——那兩片曲面便不再像奇異的構造,而更像它們一向就是的、顯而易見又無可避免的歸宿。