範疇 函子與態射

2021-09-07 20:46:11 字數 1131 閱讀 5241

"範疇就是使用箭頭連線的物體。"

箭頭表示範疇成員之間的關係,正式的名稱叫做"態射"(morphism)。範疇論認為,同乙個範疇的所有成員,就是不同狀態的"變形"(transformation)。通過"態射",乙個成員可以變形成另乙個成員。

1.2數學模型

既然"範疇"是滿足某種變形關係的所有物件,就可以總結出它的數學模型。

也就是說,範疇論是集合論更上層的抽象,簡單的理解就是"集合 + 函式"。

理論上通過函式,就可以從範疇的乙個成員,算出其他所有成員。

1.3範疇與容器

我們可以把"範疇"想象成是乙個容器,裡面包含兩樣東西。

下面我們使用**,定義乙個簡單的範疇。

我們先記住前面一句話,函子是範疇間的一類對映。我們知道,態射是範疇內物件之間的對映關係。函子與它類似,函子是範疇與範疇間的對映關係,也就是可以通過乙個函子,把乙個範疇對映到另乙個範疇。

上圖中有兩個範疇 c 和 d,還有乙個函子 f,意思是範疇 c 通過函子 f 對映到了d。 

我們用白話描述一下函子的定義,免得陷入各種希臘字母的公式中。 

- 範疇 c 中的每乙個物件,都可以對映到範疇 d 上的乙個物件(這個可以多對一); 

- 範疇 c 中的每乙個態射 f: x->y ,都可以遇到到範疇 d 上的相應態射 f(f) : f(x)->f(y), 包括單位態射; 

- 對映後的態射的復合規則依然被保持,即 f:x->y, g:y->z, 恒有 f(g.f)=f(g).f(f)。

還有,把乙個範疇對映到自身的函子叫做自函子。

原文: 

函子(functors

態射是型別之間的對映;函子是範疇之間的對映。可以認為函子是這樣乙個函式,它從乙個容器中取出值, 並將其加工,然後放到乙個新的容器中。這個函式的第乙個輸入的引數是型別的態射,第二個輸入的引數是容器。

// myfunctor :: (a -> b) -> f a -> f b

意思是「給我乙個傳入a返回b的函式和乙個包含a(乙個或多個)的容器,我會返回乙個包含b(乙個或多個)的容器」

Haskell 與範疇論 函子 態射 函式

如果你是第一次聽說範疇論 category theory 看到這高大上的名字估計心裡就會一咯噔,到底數學威力巨大,光是高等數學就能讓很多人噩夢連連。和搞程式設計的一樣,數學家喜歡將問題不斷加以抽象從而將本質問題抽取出來加以論證解決,範疇論就是這樣一門以抽象的方法來處理數學概念的學科,主要用於研究一些...

併發與競態

linux是乙個多工的作業系統,在多個程序同時執行時,就有可能為了競爭同乙個資源發生堵塞。以下是解決的幾種方法 1 訊號量 declare mutex sem if down interruptible sem critical section up sem 2 完成量 declare comple...

sync fsync與fdatasync函式詳解

在研究mysql配置檔案中sync binlog n引數之中,發現該引數的含義是在n個sql之後,呼叫了fdatasync 函式重新整理binlog到磁碟,所以就好好研究了下sync fsync和fdatasync這三個函式,也記錄下來分享一波。名詞解釋 髒頁 當程序修改了快取中的資料時,該頁就被標...