最近在上代數學以及高微的時候,經常會需要定義、宣告某個數學概念(尤其是宣告的部分,這在寫定理和寫題目時最常遇到),這些東西常常又臭又長。我在上課時總是習慣先理解概念再抄筆記,有時候上太快或是教授的版書風格偏亂時就會來不及抄。為此我發明了一些新的符號,用來精簡大量文字敘述,同時兼具了數學的嚴謹性。
前情提要一下,我這些符號風格是來自程式語言,特別是python,你可以把你的腦袋想成是一個(高階語言的)程式編譯器,來看待這些符號。
例如,今天我們如果要定義「群」,用我的寫法可以寫成
def: group(G,+,identity=e)%定義群
closure(G,+)%滿足封閉性
associativity(G,+)%滿足結合性
identity_element(G,+,e)%存在單位元
inverse_element(G,+)%存在反元素
(巴哈沒辦法排版,def下面的每一行應該要有個tab縮排)
當然我實際在寫的時候也不會這麼囉嗦,英文部分可能會簡寫。事實上,因為我已經了解群的定義了,所以其實我平常只會寫
group(G,+)
用來聲稱G是一個群,單位元只會在特別要強調的時候寫
以下示範一個定理敘述:
定理:
一個群(G,*)如果滿足∀a∈G a*a=e 那麼G是交換群
這個定理用英文或中文敘述(對手寫來講)有點長,他在我的符號下可以精簡成這樣:(注意到我們默認支援所有已經通用的數學語言和符號)
group(G,*). if ∀a∈G a*a=e then abelian(G,*)
%abelian()是交換群的意思
我們先宣告G在「*」這個運算下是個群,滿足定理前提,則有定理結果「G在「*」之下是交換群」,當然或許我們已經事先定義何為交換群
我認為這大蝠加快了我抄筆記的速度
再示範一個代數學的定理:
一個有限群(G,*,e),則對於所有G內的元素a,總是存在正整數n使得a^n=e
在我的寫法之下是:
finite_group(G,*,e)⇒∀a∈G ∃n∈Ν s.t. a^n=e
這個筆記風格最近在高微有了很好的發揮,因為高微非常強調嚴謹性,定理的前提與結果用英文或中文寫簡直是作文,這種簡寫在定理描述上特別好用。
這裡示範夾擠定理的陳述。我這邊有些小地方會特別仔細(用來強調我的寫法不失嚴謹性),但這其實都可以省略或簡寫(如果你非常清楚各個符號的意義以及你在邏輯世界中所在的位置)
import logic %引入邏輯
import normal_notation_in_mathematic %允許使用所有已知的數學符號
from set_theory import real_number %這裡引入實數集,允許使用夾擠定理前的所有定理以及性質,至於到底有哪些內容就看你高微的學習狀況了
%以上我都不會真的寫出來,我只是想強調數學陳述可程式化的感覺
a∈R%宣告a是實數
I=set.deleted_neighbourhood(a)%宣告I是a的一個去心臨域(或是要寫interval也可以),前面的set代表他是集合的一個類別
function(f,g,h,domain=I)%宣告有三個定義在I上的函數f,g,h,其實這句話我在筆記中是寫「f、g、h define on I」畢竟更清楚而且也比較短
%以上都是前提,接下來進入定理內容
part A%第一部分
f(x)<g(x)<h(x) and lim(f(x),a)=lim(h(x),a)=L %若三個函數滿足這個敘述
then lim(g(x),a)=L %則有這個結果
%特別說一下lim(f(x),a)的意思是f(x)在a的極限,而且我還有意強調變數是x
part B
bounded(g(x),I) and lim(f(x),a)=0 %如果g是有界的(我有意強調他在I內有界),而且f的極限是0
then lim(f(x)g(x),a)=0 %那麼這兩者相乘的極限是0
end
我當然在做筆記的時候沒寫那麼多,其中有很多部分在你自己已經有清楚概念的前提下可以省略,各種符號你也都可以替換成自己看得懂的,你也不需要完全放棄文字敘述,畢竟自己的筆記自己看得懂是最重要的。
結論:
在體會到這個寫法的美好之後,我開始想到如果可以讓程式來驗證我的證明過程或敘述過程,這是否會是資訊科技的進步?我目前還不認為有辦法讓程式自動發現定理或是自動證明。僅僅是驗證而已,確保敘述過程沒有任何思緒上的錯誤。或許可以把這種寫法更加完備化,比如說給電腦引入真值運算、邏輯表,然後讓我的寫法支援這些運算,是否哪天可以讓程式來檢查我的高微作業有沒有哪裡不小心出錯呢?