試論 co- 的譯法:餘弦詞源漫談
本文作為生日禮物題獻給@興趣使然千里冰封,內容以深度優先遍歷的方式論述。
題圖為鬼人正邪。
從勾股定理到三角函式
數之法,出於圓方。圓出於方,方出於矩。矩出於九九八十一。故折矩,以為句廣三,股修四,徑隅五。既方之外,半其一矩。環而共盤,得成三、四、五。兩矩共長二十有五,是謂積矩。
這段話出自我國的第一部數學著作《周髀算經》,開篇即是商高對勾股定理的最早表述。因此勾股定理又稱商高定理。其中「句廣三,股修四,徑隅五」為勾股定理最經典的一個特例。後人則直接簡稱為「勾三股四弦五」來表述勾股定理。
呃..簡稱?簡在哪了?句怎麼變成了勾?徑怎麼變成了弦?「廣」「修」「隅」又是什麼鬼?這要從甲古文說起。
先說勾。其實漢字在隸變之前並沒有這個字,而只有「句(gōu)」字。句源於丩,甲古文和金文如下圖所示,很像一個鉤子上掛了東西:

丩在演變成金文時,多了下面的口字,許是用來鉤魚嘴的。一直到小篆,下面這個口都是可選的,後來才慢慢定了下來。在漢字的書體隸變時,口變成了厶,才有了現在的勾。同樣因隸變而成為異體字的的還有「強」和「強」。
那麼「句」又是如何有了「語句」的意思呢?原因是古文中沒有標點,教學時要明句讀。為了輔助標記,便在斷句處的字旁邊勾一個 ,久而久之,「勾」便有了語句的意思。勾句自此分化。興許是為了表示區分,用帶厶的表示勾批,用帶口的表示語句。至於硃批句讀畫出的圓圈變成了句號,那是後話了。
說到這裡,不得不提一下被萬千程式設計師吐槽的「控制代碼(handle)」。「柄」好理解,「句」哪來的?
控制代碼乎?勾柄乎?
「控制代碼」一詞最早的考證來自於一本編譯原理的著作,指的是語句中最先被歸約的部分。維基百科中該詞條給出的來源如下:
康奈爾大學副教授David Gries所著的《Compiler Construction for Digital Computer》. John Wiley and Sons, New York, 1971, 491 pages, ISBN 0-471-32776-X,給出如下定義:
(2.3.10) DEFINITION. A handle of any sentential form is a leftmost simple phrase.
在該書的中譯本: D.格里斯著,仲萃豪等譯:《數字計算機的編譯程式構造》,科學出版社, 1976年版,給出瞭如下翻譯:
(2.3.10) 定義. 任一句型的控制代碼就是此句型的最左簡單短語。
「句」字在漢語中發 gōu 音時,做「查考」之義,如:句校(查考校核);句考(查考);句稽(查考;核算)。
而「句」作「查考」解的來源,則是古人在查閱卷集時「勾批」的動作衍生而來的。
然而,handle 還有另一個意思:
在程式設計中,控制代碼(handle)是 Windows 作業系統用來標識被應用程式所建立或使用的物件的整數。其本質相當於帶有引用計數的智慧指標。
這個解釋更為廣大程式設計師所熟知。在這裡,「控制代碼」變成了用以索取物件這個大頭的小鉤子,正如提起一隻櫻桃時雙指捏住的果柄。而在使用 git cherry-pick 時,雜湊值(hash)便成了對應提交(commit)的勾柄(handle)或指標(pointer)。
handle 本有兩義,在翻譯成漢語時也應區別對待。仲老古漢語修為頗深,在翻譯語句的 handle 時想到了「控制代碼」。而後人遇到了作為指標的 handle,想也不想便直接拿來用了。
網上有人說「控制代碼」是「勾柄」打錯了字,雖然臆測,不過也不失為一個好寫法。有鑑於此,我比較傾向於 「控制代碼」的句應該讀jù還是gōu? - 思無邪SyiMyuZya的回答 ,即表示語句(sentence)時,讀 jù。而作指標解時,「勾柄」則是現代漢語中更好的寫法。
其實「勾柄」這個東西,99%的中國人都見過,也都用過。用白話說,勾柄就是彎彎的「把手」,它長這樣:

而還有一種東西,它在某寶上的名字叫「勾柄直杆傘」,它長這樣:

相信你已經知道什麼是控制代碼了。
跑個題:「套接管」長這個樣子:

修廣長寬,徑隅成弦
說完了句,後面就好說了。「修」表示長,「廣」表示寬。「寬廣」「修長」,漢語中很常見的近義字組詞。《詩經·小雅·六月》中亦有「四牡修廣,其大有顒」來形容戰馬的長寬高大。
「股」是大腿,「句」是曲折勾起來的腳。用勾股來形容短邊長邊,再合適不過了。
( 此處應有冰冰黑絲勾股照.jpg )有趣的是,廣本意為寬,到了矩形裡卻成了短邊。

「折矩」語出《禮記 - 玉藻》:「周還中規,折還中矩。」後亦有《復莊衛生書》:「周規折矩,尺步繩趨」。用矩尺定的折角,就是直角。
在「徑(徑)」字中,「彳」為「行」之省。「巠」意為「縱向的」「高低走向的」「陡直的」。「彳」與「巠」聯合起來表示「陡直的山路」。「遠上寒山石徑斜」就是這個意思。
「隅」為角落,「偏安一隅」就是這個意思。把一根棍子搭在牆角,就是徑隅。
「故折矩,以為句廣三,股修四,徑隅五。」
這句話翻譯成現代漢語就是:如果有一個直角,短邊寬三,長邊長四,那麼搭在這個角上的斜邊就是五。

現在還有個問題:徑是怎麼變成弦的?
弦即弓弦,下面這個圖形叫「弓形」,其中的線段 AB 就是「弦」:

當弦最長時,所得弓形即為半圓。
周朝的《周髀算經》雖然記載了商高對勾股定理的描述,但並沒有給出嚴格的證明。到了三國時期,趙爽在他的《周髀算經注·勾股圓方圖說》中第一次給出了勾股定理的嚴格證明。


到了這裡,勾股定理和圓的聯絡已呼之欲出,徑也自然變成了直角三角的弦。魏晉時期的《九章算術》所用術語已於今無二:「勾股各自乘,並之,為弦實。開方除之,即弦。」我們終於可以說「勾三股四弦五」了。隨之而來的「周三徑一」,徑也有了圓的直徑的意思。後世宋朝的祖沖之也沿用了這一名詞。
西學東漸,餘正相生
時光荏苒,轉眼已到了明朝末年,這是第一次西學東漸開始的時代。
三角學傳入中國,始於明崇禎 4 年(1631年)。是年,鄧玉函、湯若望和徐光啟合編《大測》,作為曆書的一部份呈獻給朝廷,這是我國第一部編譯的三角學。在《大測》中,首先將 sine 譯為「正半弦」,簡稱「正弦」,這就成了「正弦」一詞的由來。
其實 sine 源於拉丁語 sinus,本意為「衣物的褶邊,曲線,女人的胸部」。可是本來表示彎弧的詞,怎麼又變成直的弦了呢?
原來在最初,印度人將連結弧的兩端的弦稱為 jiba,源自梵語 jyā(弓弦)。後來 jiba 這個詞譯成阿拉伯語時,和 jaib(捆綁,胸部,衣服的褶邊)搞混了,被誤解為「彎曲」「凹處」,成了阿拉伯語的「dschaib」。到了 12 世紀中葉,義大利克雷莫納的 Gherardo 在將一本阿拉伯文的幾何學著作轉譯成中世紀拉丁語時,把這個詞直譯成了「sinus」。1590 年代,Thomas Fale 在他論述日晷的著作《Horologiographia, the Art of Dialling》一書中首先用 sinus 來表示現代三角學意義上的正弦函式。之後就演變成了英語中的 sine。這樣一來,「弧」就被掰直成「弦」了。

而徐光啟並未受此影響,因為他直接看到了三角函式的圖:

當然他看到的並不是這張圖,但相信與此類似。中國古代研究圓時,向來以直徑為基準,因此有「周三徑一」的說法。徐光啟在《大測》中,以圓的直徑為基準,∠AOB 正對弓形 ADB 的弦 AB,即為正弦,線段 AC 則為正半弦。
而他在和利瑪竇合譯《幾何原本》第三卷《圓與角》時,發現書中以半徑為基準。由於三角函式的「正弦」描述的其實是正弦與直徑之比,而等比縮放不改變比例關係,因此正半弦與半徑之比自然還應該叫「正弦」。
三角之於圓,有三條直線:絃線,切線和割線。sine line 為絃線,tangent line 為切線,secant line 為割線。如果把下圖的 sin 和 tan 沿橫軸對稱補上,sec 以圓心對稱補上,那就是漢語裡原本意義上的弦、切和割了。

相信不少人曾有這樣的困惑:「切」和「割」有什麼區別呢?其實在日常生活中,二者意思很接近。「割」就是割開,一分為二;「切」呢?還是切開的意思。
然而在「切線」這裡,「切」其實應該讀 qiè。《廣雅》中有「切,摩也。」的解釋。確切來說,就是「密合,貼近,緊挨著」的意思。「切脈」不是割脈,而是手指貼著脈來感受;「切膚之痛」也不是面板被劃破了,而是與自身關係極為密切,自己能切身感受的痛苦。如果你是還不能理解,那麼別人在對你表示親切問候,深切關懷時,請做好防禦準備(病嬌控除外)。

「切」讀 qiē 時,和割還是有些區別的。割其實還有個「劃拉」的動作,你可以從「割肉」「切水果」感受出來。
到這裡,「正弦」「正切」「正割」已經溯本清源。現在終於輪到本文的主角「餘」了。

我們還來看這張圖。現在想象你站在圓心 O 點,向 E 處看去。∠AOB 是你可以清楚看到的範圍,正前方的正弦是你看到的畫面。然而當你注視前方時,你會還會發現視角的兩邊也能感受到模糊的畫面,這叫做眼角的「餘光」。餘光所看到的畫面(圖中藍線),就是餘弦。
「餘」即剩餘,我們在數學中最早接觸的「餘」就是「餘數」,表示除不盡剩下的數。如果我們把正視的角叫「正角」∠AOB,那麼餘光所視的角就是它的「餘角」∠AOF。於是我們得到了餘角的定義:
若兩角之和為直角(即 90°),則稱這兩個角「互為餘角(complementary angles)」,簡稱「互餘」。餘角所對的弦,就是餘弦。
順帶一提,若兩角之和為平角(即 180°),則稱這兩個角「互為補角(supplementary angle)」,簡稱「互補」。
互餘(complementary)的字首 com-,和餘弦(cosine)的 co- 其實來自同一個詞源,作為拉丁語的字首表示「一起,相伴(with, together)」的意思。com- 放到母音和輕音之前,變成了 co-;在 -g- 前,為 cog- 或 con-;在 -l- 前,為 col-;在 -r- 前為 cor-;在 -c-、-d-、-j-、-n-、-q-、-s-、-t- 和 -v- 前則化成了 con-。
一根射線將直角分為兩半,二角相伴相生,此消彼長。所對應的正弦餘弦亦是如此。然而在中文裡,「餘」只有剩餘的意思,因此並不能把所有的 co- 都翻譯成餘。實際上,一切相生相剋的東西,都是互 co- 的。男是 co-女,陰是 co-陽,天是 co-地,柔是 co-剛。
所以 co- 有了太多太多的譯法:
coerce 是圍在一起,成了約制;covariant 是一起變型,成了協變;collect 是選出來放在一起,成了收集;conjugate 比作馬車曲木的兩端,成了共軛。coauthor 是合作者;codomain 是陪域。
餘、共、互、逆、陪、伴、協、同、交、合、配、對、逆、反、偶、上……我們在看到這個詞頭時,不必像阿拉伯那個把胸部當成 jiba 的曲直不分的傢伙那樣直譯,而是像徐光啟那樣,直接看清它的本質是什麼。 知其變,守其恆,為天下式。
當我看到陳意雲老師把 coinduction 翻譯成「餘歸納」的時候,我很困惑:「餘」在哪了?而當我發現 coinduction 就是把歸納的過程反過來後,自然就有了它的譯法:逆歸納。「反」是一個靜態的描述,而「逆」是一個動態的表述。當歸納的箭頭有了流動的方向,逆流而上便是把箭頭反過來最自然的想法了。於是在英語世界,有了很多關於 co- 的妙語:
Q : What does a category theorist call a reader?
A : A "co-author".
問:範疇論學家把讀者稱為什麼?
答:「協作者」。
"I had a dream last night. I cheated on my wife and she knew it."
"But dream is coreality."
"So the reality is?"
"Your wife cheated on you and you didn't know it."
「我做了一個夢,夢見我對我妻子出軌了,被我妻子知道了。」
「可是夢是與現實伴生的(co-現實)。」
「所以現實應該是?」
「你的妻子對你出軌了,而你還不知道。」
A mathematician is a machine that turns coffee into theorems.
A comathematician is a comachine that coturns cotheorems onto ffee.
在一個叫“上古卷軸”的遊戲裡,有一個衛兵的膝蓋中了一箭。
在一個叫“古卷軸”的遊戲裡,有一枚上箭從上士兵的上膝蓋裡上射了出來。
A coconut is just a nut.
(椰子就是堅果。)
負負得正,看來 co- 是對合(involution)的。
本文其實已經接近尾聲了,不過還有一個詞的翻譯差點讓咱想瞞混過去:上同調(cohomology)。
「上」是哪來的?帶著這個疑問,咱打開了維基百科的 cohomology 詞條:
In mathematics, specifically in homology theory and algebraic topology, cohomology is a general term for a sequence of abelian groups associated to a topological space, often defined from a cochain complex. Cohomology can be viewed as a method of assigning richer algebraic invariants to a space than homology. Some versions of cohomology arise by dualizing the construction of homology. In other words, cochains are functions on the group of chains in homology theory.
當時咱就這個表情:

不過既然是「上」,說不定有可以看出「上」的圖來呢?Google 一下:



好吧看來不行。不過那邊有個 cochain complex,似乎很有關係,咱去瞅瞅:

雖然還是看不懂,不過這裡能感受到某種對稱性,最直觀的就是反過來的箭頭,那麼「逆」或許是個不錯的譯法。不過且慢……
chain complex ↔ cochain complex
cochain 裡的黑點、數字和字母都標在右上角,所以 co 是「上」; chain 裡標在右下角的記法就是「下」了。我們在各種 cohomology 裡也能找到很多這種記法:

哈哈,看來「上同調」的譯者早已深諳此道了。
這就是 co-,一個相生為伴,互克而消的故事。
後記
這篇文章其實咱早就有了把它寫出來的打算,可無奈拖延症+懶癌作怪,也想著收集更多的資料去印證各種想法。然而精力和學識有限,無法面面俱到,至臻完美。恰逢冰冰要作一個關於 CuTT 的演講,裡面很多術語找不到很好的譯法,於是咱肝了兩天把它寫了出來,以作參考。同時,今天也是冰冰的生日,於是作為生日禮物送給他。 冰冰醬生快喵~!=w=
本文參考了大量的資料,但寫著寫著網頁就開了太多,記憶體被 Chrome 吞噬掉了,於是只好看完一點就關掉。很多參考來源已經不好找了,還要翻歷史記錄。後期咱會把引用來源慢慢補上。
因為咱畢竟是 CS 專業的,這些內容很多屬於詞源學,所以超出了咱的專業範疇,本文可信度也略有折扣。文中字詞之解時有妄測,咱也懇請各位 reader 們能夠真的作為 co-author 幫忙審校斧正,在咱說「波乃水之皮時」能戲以「然則滑,水之骨也?」駁之。
其實在語言文字的演化過程中,我們會發現和生物演化很像的現象。生物進化的單位是基因(gene),而文化演化的單位是模因(meme),它們在歷史的長河中演進、分化、變異、融合。時而複製出錯,產生了功能完全不同的「蛋白質」,又反過來作用於文化自身,繼續奔流湧進。正如有些生命會偷取其它基因片段一樣,文化裡也會拿來直接用。古人用典,今人玩梗,十分有趣。而有些在不同語言中本不相干的東西,因為巧合而變得更加撓人心魄。不過這些表面的東西,總是難以觸碰到本質的。
如果你對知識進行了徹底的分析而非某種機械的套弄,在你腦中生成的概念與生硬的文字之間已經沒有很強的相似性,我們就認為這個概念是被理解的。徹底的分析和非凡的變換,是獲得真知的標誌性特徵。——@興趣使然千里冰封
咱在寫作過程中,發現了很多有用的網站,在這裡推薦給大家:
漢典 用於查詢古漢語的字詞之源
Online Etymology Dictionary 用於查詢英語詞源
維基詞典 同樣用於查詢詞源詞義
維基文庫 查閱古籍很好用
GeoGebra 很棒的幾何繪圖工具
科普中國 非常棒的科普網站
其它還有維基百科、百度百科、知乎、雅虎問答、Quora、Stack Overflow 等都可以用來參考。當然,你必須能夠 正常訪問網際網路 ,畢竟我們仍在西學東漸中,多幾個沒有生在明末的徐光啟總是好的。