32  Monads Monoids และ Categoryต่างๆ (Sketch)

ไม่มีที่ใหนที่เหมาะสมกับจากจบหนังสือที่เกี่ยวกับทฤษฎีcategory ได้มีสิ่งใหม่ที่ต้องเรียนรู้ตลอดเวลา ทฤษฎีcategoryเป็นวิชาที่กว้าง ในเวลาเดียวกันมันชัดเจนว่ามีธีม แนวคิดและรูปแบบเดียวกันได้โผล่ออกมาหลายต่อหลายครัง ได้มีคำกล่าวว่าทุกๆแนวคิดคือแนวคิดทั้งหมดคือส่วนขยายKan และแน่นอนว่าคุณสามารถใช้ส่วนขยายKanในการได้มาซึ่งlimits, colimits, adjunctions, monads, Yoneda lemmaและอื่นๆ ความเป็นcategoryมันเองโผล่มาในทุกระดับของabstraction และแนวคิดของmonoidและmonadก็เช่นกัน แล้วอะไรคือสิ่งที่พื้นฐานที่สุดละ? มันกลับมาเป็นว่าพวกมันนั้นมีความสัมพันธ์ระหว่างกัน สิ่งหนึ่งนำไปยังอีกสิ่งหนึ่งในวงจรที่ไม่มีที่สิ้นสุดของการabstractions ผมตัดสินใจว่าการแสดงความสัมพันธ์ระหว่างกันเหล่านี้อาจจะเป็นวิธีที่ดีในการจบหนังสือเล่มนี้

32.1 Bicategories

หนึ่งในด้านที่ยากที่สุดของทฤษฎีcategoryนั้นคือการเปลี่ยนมุมมองไปมา ลองนำcategoryของsetเป็นตัวอย่าง เราได้ใช้ในการนิยามsetในรูปแบบของสมาชิก setว่างนั้นไปมีสมาชิก setที่มีสมาชิกเดียวก็มีสมาชิกเดียว productแบบCartesianของสองsetคือsetของคู่และอื่นๆ แต่ในตอนที่เราพูดเกี่ยวกับcategorySet ผมของให้คุณได้ลืมเกี่ยวกับเนื้อหาของsetและหันมาสนใจบนmorphisms(ลูกศร)ระหว่างพวกมัน คุณนั้นได้รับอณุญาติ ในบางเวลาในการส่องเข้าไปภายใต้สิ่งคลุมอยู่ในการดูว่าการสร้างแบบสากลบางประเภทในSetถูกอธิบายในรูปแบบของสมาชิกต่างๆ วัตถุสุดท้ายกลายมาเป็นsetที่มีสมาชิกเดียวและอื่นๆ แต่สิ่งเหล่านี้เป็นแค่การตรวจสอบให้มั่นใจ

functorถูกนิยามในฐานะการโยงของcategoryต่างๆ มันเป็นธรรมชาติในการพิจารณาการโยงในฐานะmorphismในcategory functorกลายมาเป็นmorphismในcategoryของcategoryต่างๆ(categoryขนาดเล็ก ถ้าเราต้องการที่จะหลีกหนีเกี่ยวกับขนาด) โดนการมองfunctorในฐานะลูกศร เราละทิ้งข้อมูลเกี่ยวกับการกระทำของมันบนส่วนที่อยู่ข้างในของcategory(นั้นคือวัตถุและmorphisms)แค่เหมือนกับการที่เราละทิ้งข้อมูลเกี่ยวกับการกระทำของfunctionบนสมาชิกของsetในตอนที่เรามองมันในฐานะลูกศรในSet แต่functorระหว่างสองcategoryใดๆก็ตามก็ก่อให้เกิดcategory ในเวลานี้คุณถูกถามในการพิจารณาบางอย่างที่เคยเป็นลูกศรในcategoryหนึ่งในการเป็นวัตถุของอีกตัวหนึ่ง ในcategoryแบบfunctor functorคือวัตถุและการแปลแบบธรรมชาติคือmorphisms เราได้ค้นพบว่าสิ่งเดียวกันสามารถเป็นลูกศรในcategoryหนึ่งและเป็นวัตถุในอีกตัวหนึ่ง มุมมองแบบตรงๆของวัตถุในฐานะคำนามและลูกศรในฐานะคำกริยาไม่ถูกต้องอีกแล้ว

แทนที่จะสลับระหว่างสองมุมมอง เราสามารถพยายามในการรวมพวกมันไปเป็นตัวหนึ่ง นี้คือวิธีการที่เราจะได้มาซึ่งแนวคิดของ2-categoryที่วัตถุนั้นถูกเรียกว่า0-cell morphismคือ1-cellsและmorphismระหว่างmorphismsคือ2-cells

0-cellคือ a,b 1-cellsคือf,gและ2-cellคือ α

categoryของcategoryCat นั้นคือตัวอย่างที่ชัดเจน เรามีcategoryในฐานะ0-cell functorในฐานะ1-cell และการแปลงแบบธรรมชาติในฐานะ2-cell กฎต่างๆของ2-categoryบอกเราว่า1-cellระหว่างสอง0-cellไดๆก็ตามก่อให้เกิดcategory(ในอีกความหมายหนึ่งC(a,b)คือhom-categoryแทนที่จะเป็นhom-set) สิ่งนี้เข้ากันได้ดีกับเงื่อยไขของเราก่อนหน้านี้ที่functorระหว่างสองcategoryใดๆก็ตามก่อให้เกิดcategoryแบบfunctor

โดยเฉพาะเช่น 1-cellจาก0-cellsใดๆก็ตามกลับไปหาตนเองก็ก่อให้เกิดcategory hom-categoryC(a,a) แต่categoryนั้นมีโครงสร้างมากกว่า สมาชิกของC(a,a)สามารถถูกมองในฐานะลูกศรในCหรือในฐานะวัตถุในC(a,a) ในฐานะลูกศร พวกมันสามารถถูกประกอบในระหว่างตัวมันเอง แต่ในตอนที่เรามองของพวกมันในฐานะวัตถุ การประกอบกันกลายมาเป็นการโยงระหว่างคู่ของวัตถุไปยังวัตถุ ในความเป็นจริงมันดูเหมือนอย่างมากกับproduct (ถ้าให้แม่นยำมันคือเป็นproductแบบtensor) productแบบtensorนี้มีunitคือ1-cellที่เป็นidentity มันกลับมาเป็นว่าใน2-category hom-category C(a,a)นั้นคือcategoryแบบmonoidโดยอัตโนมัติกับproductแบบtensorนิยามในฐานะการประกอบกันของ1-cell กฏการสลับหมู่และunitก็ตามมาจากกฏของcategoryที่เป็นคู่กัน

เรามาดูว่าสิ่งนี้หมายความว่าอะไรในตัวอย่างมาตราฐานของ2-categoryCat hom-category Cat(a,a)คือcategoryของendofunctorsบนa การปรพะอบกันของendofunctorsมีบทบาทของproductแบบtensorในมัน functor identityคือunitของproductนี้ เราได้เห็นมาก่อนหน้านี้ว่าendofunctorก็ให้เกิดcategoryแบบmonoid(เราฝช้ความจริงในนิยามของmonad) แต่ในตอนนี้เราเห็นว่านี้คือปรากฏการณ์ที่ทั่วไปมากกว่านี้คือ endo-1-cellsใน2-categoryใดๆก็ตามก่อให้เกิดcategoryแบบmonoid เราจะกลับมากันในสิ่งนี้ในภายหลังในตอนที่เราได้วางนียแบบทั่วไปของmonad

คุณอาจจะจำได้ว่าในcategoryแบบmonoidทั่วไป เราไม่ได้ย้ำถึงกฏของmonoidที่ถูกบรรลุแบบตรงๆ มันนั้นมักจะเพียงพอแล้วสำหรับกฏของunitและกฏการสลับกลุ่มในการที่จะถูกบรรลุจนไปถึงisomorphism ในง2-category กฏทางmonoidในC(a,a)ตามมาจากกฎการประกอบกันของสำหรับ1-cell กฏเหล่านี้นั้นเคร่งครัด ดังนั้นเราจะได้มาซึ่งcategoryแบบmonoidที่เคร่งครัดโดยตรอด แต่มันนั้นเป็นไปได้ในการผ่อนกฏเหล่านี้ไปด้วยกัน ตัวอย่างเช่นเราสามารถพูดได้ว่าการประกอบกันของ1-cell identity idaกับอีก1-cellf::abนั้นisomorphicแทนที่จะเท่ากับf isomorphismของ1-cellนั้นถูกนิยามโดยการใช้2-cell ในอีกความหมายหนึ่งได้มี2-cellอย่าง

ρ::fidaf

ที่มีinverse

กฎidentityในbicategoryนั้นอยู่จนไปถึงisomorphism(2-cellที่สามารถinvertได้ρ)

เราสามารถทำแบบเดียวกันสำหรับidentityด้านช้ายและกฏการสลับกลุ่ม 2-category ที่ไม่เคร่งครัดมากถูกเรียกว่าbicategory(ได้มีกฏความสอดคล้องกันที่ผมจะละเว้นไว้ในที่นี้)

ในการที่คาดไว้ endo-1-cellในbicategoryก่อให้เกิดcategoryแบบmonoidทั่วไปที่มีกฏที่ไม่เคร่งครัด

ตังอย่างที่สำคัญของbicategoryคือcategoryของspan spanระหว่างสองวัตถุaและbคือวัตถุxและคู่ของmorphisms

f::xag::xb

คุณอาจจะจำได้ว่าเราได้ใช้spanในนิยามของproductแบบcategory ในที่นี้เราต้องการที่จะมองในที่spansในฐานะ1-cellในbicategory เริ่มแรกคือการนิยามการประกอบกันของspans

f::ybg::yc

การประกอบกันควรที่จะเป็นspanที่สมากับบางยอดz ตัวเลือกที่เป็นธรรมชาติที่สุดสำหรับมันคือpullbackของgกับf จำได้ว่าpullbackคือวัตถุzคู่กับสองmorphismsอย่าง

h::zxh::zy

ในการที่ว่า

gh=fh

ที่เป็นสากลกับวัตถุทั้งหมดแบบนี้

ต่อจากนี้เรามาเพ่งเล็งไปยังspansบนcategoryของset ในกรณีนี้ pullbackคือแค่setของคู่(p,q)จากproductแบบCartesian x×yในแบบที่ว่า

g p=f q

morphismระหว่างสองspanที่มีด้านจบเดียวกันนั้นถูกนิยามในฐานะmorphismhระหว่างปลายของมัน ในการที่ว่าtriangleที่เหมาะสมcommuteกัน

โดยสรุปแล้วในbicategorySpan 0-cellคือset 1-cellsคือspan 2-cellคือmorphismของspan 1-cell identityคือspanแบบลดรูป(degenerate)ที่ทั้งสมวัตถุนั้นคือตัวเดียวกันและสองmorphismคือidentity

เราได้เห็นอีกตัวอย่างหนึ่งของbicategoryก่อนหน้านี้คือbicategoryProfของprofunctiosที่ 0-cellคือcategory 1-cellคือprofunctorและ2-cellคือการแปลงแบบธรรมชาติ การประกอบกันของprofunctorนั้นให้มาโดยcoend

32.2 Monads

จนถึงตอนนี้คุณควรที่จะมีความคุ้นชินกับนิยามของmonadในฐานะmonoidในcategoryของendofunctors เรากลับมาหานิยามนี้อีกครั้งกับความเข้าใจใหม่ว่าcategoryของendofunctorsคือแค่hom-categoryขนาดเล็กหนึ่งของendo-1-cells ในbicategoryCatเรารู้ว่ามันคือcategoryแบบmonoidที่productแบบtensorมาจากการประกอบกันของendofunctor monoidนั้นถูกนิยามในฐานะวัตถุในcategoryแบบmonoid(ในที่นี้คือก็จะเป็นendofunctorT)คู่กับmorphismสองตัว morphismsระหว่างendofunctorต่างๆนั้นคือการแปลงแบบธรรมชาติ morphismหนึ่งโยงunitแบบmonoid (ที่คือendofunctor identity)ไปยังT

η::IT

morphismที่สองโยงproductแบบtensor TTไปยังT productแบบtensorนั้นให้มาโดยการประกอบกันของendofunctor ดังนั้นเราได้

μ::TTT

เราสังเกตสิ่งนี้ในฐานะสองoperationsทำการนิยามmonad(พวกมันถูกเรียกว่าreturnและjoinในHaskell)และเรารู้ว่ากฎmonoidเปลี่ยนไปเป็นกฏของmonad

ในตอนนี้เรามามำสิ่งที่พูดถึงendofunctorออกทั้งหมดจากนิยามนี้ เราเริ่มด้วยbicategoryCและเลือก0-cellaในมัน ในการที่เราได้เหห็นก่อนหน้านี้hom-categoryC(a,a)คือcategoryแบบmonoid ดังนั้นเราสามารถนิยามmonoidในC(a,a)โดยการเลือก1-cellTและ2-cellอย่าง

η::ITμ::TTT

ที่บรรลุกฏของmonoid เราเรียกสิ่งนี้ว่าmonad

นั้นคือนิยามที่กว้างที่สุดของmonadโดยการใช้แค่0-cell 1-cellและ2-cell มันลดไปยังmonadทั่วๆไปในตอนที่ใช้มันกับbicategoryCat แต่เรามาดูว่าเกิดอะไรขึ้นในbicategoriesอื่นๆ

เรามาสร้างmonadในSpan เราเลือก0-cellที่คือsetที่ ในสำหรับเหตุผลที่จะชัดเจนมากขึ้นหลังจากนี้ ผมจะเรียกว่าOb ต่อมาเราเลือก endo-1-cellที่คือspanจากObไปยังOb มันมีsetที่จุดยอดที่ผมจะเรียกว่าArร่วมกับสองfunctionsอย่าง

dom::ArObcod::ArOb

เราจะเรียกสมาชิกของsetArว่า”ลูกศร(arrows)” ถ้าผมก็จะบอกคุณให้เรียกสมาชิกของObว่า”วัตถุ(object)“คุณอาจจะได้คำใบ้ว่าสิ่งนี้จะนำไปสู่อะไร สองfunctionsdomและcodกำหนดdomainและcodomainไปยัง”ลูกศร”

ในการทำให้spanของเราไปยังmonad เราต้องการสอง2-cell ηและμ unitแบบmonoidในกรณีนี้คือspanแบบตรงไปตรงมาจากObไปยังObกับจุดยอดที่Obและสองfunctions identity 2-cell ηคือfunctionระหว่างปลายObและAr ในอีกความหมายหนึ่งηกำหนด”ลูกศร”ไปยังทุกๆ”วัตถุ” 2-cellในSpanต้องบรรลุเงื่อนไขการสลับหมู่ในกรณีนี้

domη=idcodη=id

ในส่วนประกอบนี้แล้วสิ่งนี้กลายมาเป็น

dom (η ob)=ob=cod (η ob)

ที่obคือ”วัตถุ“ในOb ในอีกความหมายหนึ่งηกำหนดไปยังทุกๆ”วัตถุ“และ”ลูกศร”ที่domainและcodomainคือ”วัตถุ“นั้น เราจะเรียก”ลูกศร”พิเศษนี้ว่า”ลูกศรidentity”

2-cellตัวที่สองμกรระทำบนการประกอบกันของspanArกับตัวมันเอง การประกอบกันนั้นถูกนิยามในฐานะpullback ดังนั้นสมาชิกของมันคือคู่ของสมาชิกจากAr(คู่ของ”ลูกศรต่างๆ”(a1,a2)) เงื่อนไขจของpullbackคือ

cod a1=dom a2

เราเรียกว่าa1และa2ว่า”ประกอบได้“เพราะว่าdomainของตัวหนึ่งคือcodomainของอีกตัวหนึ่ง

2-cell μคือfunctionที่โยงคู่ของลูกศรที่สามารถประกอบกันได้(a1,a2)ไปยังลูกศรเดี่ยวa3จากAr ในอีกความหมายหนึ่งμนิยามการประกอบกันของลูกศร

มันง่ายที่จะตรวจสอบว่ากฏmonadคู่กับidentityและกฏการสลับหมู่ตรงกับลูกศร เราได่แค่นิยามcategory(ย้ำว่าcategoryขนาดเล็กในที่วัตถุและลูกศรก่อให้เกิดset)

ดังนั้นโดยสรุป categoryคือแค่monadในbicategoryของspans

สิ่งที่สุดยอดเกี่ยวกับผลลัพธ์นี้คือว่ามันวางcategoryในระดับเดียวกันกับโครงสร้างทางพีชคณิตอย่างmonadและmonoids ได้ไม่มีความพิเศษเกี่ยวกับการเป็นcategory มันคือสองsetและสี่function ในความเป็นจริงแล้วเราไม่ต้องการsetแยกสำหรับวัตถุ เพราะว่าวัตถุสามารถถูกนิยามด้วยarrow identity(พวกมันตรงกับแบบหนึ่งต่อหนึ่ง) ดังนั้นมันคือแค่setและบางfunction เมื่อพิจารณาถึงบทบาทที่สำคัญของทฤษฎีcategoryในคณิตศาสตร์ทั้งหมด มันเป็นความเข้าใจที่ถ่อมตน

32.3 โจทย์ท้าทาย

  1. ลองสร้างกฏunitและการสลับหมู่สำหรับproductแบบtensorที่ถูกนิยามในฐานะการประกอบกันของendo-1-cellsในbicategory
  2. ลองทดสอบว่ากฏของmonadสำหรับmonadในSpanตรงกับกฏunitและการสลับหมู่ในcategoryที่ได้มา
  3. ลองแสดงว่าmonadในProfคือfunctor identityบนวัตถุ
  4. อะไรคือalgebraแบบmonadสำหรับmonadในSpan

32.4 บรรณานุกรม

  1. BlogของPaweł Sobociński

(Page 342) (Page 345)


  1. https://graphicallinearalgebra.net/2017/04/16/a-monoid-is-a-category-a-category-is-a-monad-a-monad-is-a-monoid/↩︎