Haskell 中如何描述 product 作為 的 category?

時間 2021-06-03 01:23:56

1樓:張智浩

首先這個問題表述確實不大清楚,至少不是嚴格的數學語言(或者說不大精確)。我把問題重新表述如下(此處快速回憶範疇的定義,略;或可參見維基百科):

性質 ()對任意三個物件 ,復合對映 是同構。

不精確的問題:若乙個範疇滿足性質(),我們能對它說些什麼嗎?

從某些(可能沒用的)經驗來看,這種問題一般就取特殊值就完了。

首先把()中三個物件都取為同乙個 ,那麼復合對映 是同構。且先不論這個同構是什麼,僅僅是存在這樣乙個同構就告訴我們,集合 只有可能

是空集;

是單點集;

是無限集。

(不過很快會看到這個論斷其實沒什麼意義)

首先第一種情況是不可能的,因為單位態射 。第三種情況也是不可能的,範疇的定義告訴我們 加上上述復合對映與 是乙個么半群(monoid),故可從下述論斷中看出:

Claim.若乙個么半群 含有多於乙個元素,則乘法對映 不可能是同構。

Proof.這意思是 除了包含單位元 至少還有另乙個不同的元素 ,那麼 ,故乘法對映不是單射。

所以 只含有乙個元素,即單位態射 。

再把()中三個物件的某兩個取成相同的。易見取 或 時是平凡的,什麼也沒說。當取 時,有復合對映 是同構。

僅僅是存在這個同構就告訴我們,所有的 也必須是單點集。

結論:滿足性質 () 的範疇必定所有 hom set 都是單點集,即對任意兩個物件存在唯一從的態射。

2樓:parker liu

在範疇C中,其物件a,b,c,和態射p: a -> b,q: b -> c的compose是態射r:

a -> c,態射r = q . p,這個是從範疇的定義來的。任何範疇的態射的組合都應遵循這個定義。

至於題主提到的組合,我覺得是不存在的,(p, q)如何成為 a 到 c 之間的態射呢?

按積範疇的觀點,態射(p, q)是積範疇 C X C的態射,其定義為(p, q) : (a, b) -> (b, c),這裡(a, b) 和 (b, c)都是積範疇 C X C中的物件。

haskell中的immutable array是如何實現隨機訪問的?

已登出 我印象中 Data.Vector 是乙個 32 個格仔然後可以往下擴充套件的乙個樹,Date.Vector.Mutate 是乙個利用定長陣列實現的 ST Monad 憑印象回答,很可能有錯 Tang Boyun 已經有答案給出Haskell常用的幾個庫,但如果追求極致效能的話,C陣列依舊是最...

如何理解Haskell中的函式呼叫

並不是你想的語法糖,按照你的思路,只返回的函式咋辦?事實是這是一種叫柯里化的東西,用必應會谷歌自行查詢 Currying Function 事實上,對於Haskell 很多地方與一般的面相過程與物件的語言是不一樣的。 UWRF 對於 a b 是函式嗎?a 和 b 是什麼不重要,但 a 和 b 的型別...

如何解釋 Haskell 中的單子(Monad)?

陳斌 自函子的Monoidal範疇上的乙個么半群.么半群是指.大概意思.原群 這班裡全是小學生,希望揍他們任意有限次後還是小學生.這在拓撲概念裡可能要求更過分,揍任意無數次必須還是小學生.半群 在原群基礎上,小學生排好隊了之後,我希望先揍任意相鄰兩個,結果都一樣.么半群 在半群基礎上,希望這群小學生...