ในคำตอบก่อนหน้าในเว็บไซต์วิทยาการคอมพิวเตอร์ฉันกล่าวว่าทฤษฎีหมวดหมู่เป็น "รากฐาน" สำหรับทฤษฎีประเภท ที่นี่ฉันอยากจะพูดอะไรบางอย่างที่แข็งแกร่ง หมวดหมู่ทฤษฎีคือทฤษฎีประเภท ตรงกันข้ามประเภททฤษฎีคือทฤษฎีประเภท ขอผมขยายจุดเหล่านี้
ทฤษฎีหมวดหมู่เป็นทฤษฎีประเภท
ในภาษาอย่างเป็นทางการใด ๆ พิมพ์และแม้กระทั่งในวิชาคณิตศาสตร์ตามปกติโดยใช้สัญกรณ์ทางการเราจบลงด้วยการประกาศฟังก์ชั่นที่มีชนิดB โดยนัยในการเขียนซึ่งเป็นความคิดที่ว่าและคือบางสิ่งที่เรียกว่า "ประเภท" และคือ "ฟังก์ชัน" จากประเภทหนึ่งไปอีกประเภทหนึ่ง หมวดหมู่ทฤษฎีเป็นทฤษฎีเกี่ยวกับพีชคณิตของ "ประเภท" และ "หน้าที่" (อย่างเป็นทางการหมวดหมู่ทฤษฎีเรียกพวกเขาว่า "วัตถุ" และ "morphisms" เพื่อหลีกเลี่ยงการเหยียบย่ำบนชุดทฤษฎี - เท้าของ traditionalists แต่ยิ่งฉันเห็นนักทฤษฎีหมวดหมู่โยนความระมัดระวังเช่นลมและใช้คำง่าย: "ประเภท "และ" ฟังก์ชั่น "แต่A B ff:A→BABf
เราทุกคนได้รับการเลี้ยงดูในทฤษฎีเซตจากโรงเรียนมัธยมเป็นต้นไป ดังนั้นเราจึงใช้ความคิดประเภทต่าง ๆ เช่นและเป็นเซตและฟังก์ชั่นเช่นเป็นการแมป set-theoretic หากคุณไม่เคยคิดถึงสิ่งเหล่านั้นคุณก็จะมีรูปร่างที่ดี คุณได้ล้างสมองการล้างสมองตามทฤษฎีแล้ว ทฤษฎีหมวดหมู่บอกว่ามีหลายประเภทและฟังก์ชั่นหลายประเภท ดังนั้นความคิดของประเภทที่เป็นชุด จำกัด แต่ทฤษฎีหมวดหมู่ axiomatizes ประเภทและฟังก์ชั่นในทางพีชคณิต โดยทั่วไปนั่นคือทฤษฎีหมวดหมู่ ทฤษฎีประเภทและหน้าที่ มันค่อนข้างซับซ้อนมีระดับสูงของนามธรรม แต่ถ้าคุณสามารถเรียนรู้ได้คุณจะได้รับความเข้าใจอย่างลึกซึ้งเกี่ยวกับประเภทและฟังก์ชั่นB fABf
ทฤษฎีประเภทเป็นทฤษฎีหมวดหมู่
โดย "ทฤษฎีการพิมพ์" ฉันหมายถึงภาษาทางการใด ๆ ที่พิมพ์ตามกฎที่เข้มงวดของการสร้างคำซึ่งทำให้แน่ใจว่าทุกอย่างตรวจสอบประเภท ปรากฎว่าเมื่อใดก็ตามที่เราทำงานในภาษาดังกล่าวเรากำลังทำงานในโครงสร้างหมวดหมู่ตามทฤษฎี แม้ว่าเราจะใช้สัญลักษณ์เชิงทฤษฎีและคิดตามหลักทฤษฎี แต่เราก็ยังเขียนสิ่งที่มีเหตุผล นั่นคือความเป็นจริงที่น่าตื่นตาตื่นใจ
ในอดีตดาน่าก็อตต์อาจเป็นคนแรกที่รู้เรื่องนี้ เขาทำงานเกี่ยวกับการสร้างแบบจำลองความหมายของภาษาการเขียนโปรแกรมโดยใช้แคลคูลัสแลมบ์ดา แบบจำลองทฤษฎีเซตแบบดั้งเดิมนั้นไม่เพียงพอสำหรับจุดประสงค์นี้เนื่องจากภาษาการเขียนโปรแกรมเกี่ยวข้องกับการเรียกซ้ำแบบไม่ จำกัด ซึ่งทำให้ทฤษฎีขาดความรู้ สกอตต์คิดค้นชุดของรุ่นความหมายที่ถูกจับปรากฏการณ์การเขียนโปรแกรมและมาถึงตระหนักว่าพิมพ์แลมบ์ดาแคลคูลัสว่าเป็นตัวแทนของระดับของประเภทที่เรียกว่าประเภทปิดคาร์ทีเซียน มีหมวดหมู่ปิดคาร์ทีเซียนมากมายที่ไม่ใช่ "set-theoretic" แต่แคลคูลัสแลมบ์ดาที่พิมพ์ลงไปใช้ได้กับพวกมันทุกคนเท่ากัน Scott เขียนเรียงความที่ดีที่เรียกว่า " ทฤษฎีที่เกี่ยวข้องของแลมบ์ดาแคลคูลัส"อธิบายว่าเกิดอะไรขึ้นบางส่วนดูเหมือนจะมีอยู่ในเว็บบทความต้นฉบับตีพิมพ์ในหนังสือเล่มหนึ่งที่เรียกว่า" กับ HB แกง: บทความเกี่ยวกับ Combinatory ตรรกศาสตร์แลมบ์ดาแคลคูลัสและพิธีการ "กดวิชาการ 2523 เบอร์รี่และ Curien มาถึงสำนึกเดียวกันอาจจะเป็นอิสระ. พวกเขากำหนดเครื่องนามธรรมเด็ดขาด (CAM) ในการใช้ความคิดเหล่านี้ในการดำเนินการภาษาการทำงานและภาษาที่พวกเขาดำเนินการถูกเรียกว่า "CAML" ซึ่งเป็นกรอบพื้นฐานของไมโครซอฟท์F #
ก่อสร้างประเภทมาตรฐานเช่น , ,ฯลฯfunctors นั่นหมายความว่าพวกเขาไม่เพียง แต่แมปประเภทกับประเภท แต่ยังทำงานระหว่างประเภทกับฟังก์ชั่นระหว่างประเภท ฟังก์ชั่น Polymorphicรักษาฟังก์ชั่นดังกล่าวทั้งหมดที่เกิดจากการกระทำ functor ทฤษฎีหมวดหมู่ถูกประดิษฐ์ขึ้นในปี 1950 โดยEilenberg และ MacLane→ L ฉันs T×→Listแม่นยำในการทำให้เป็นแนวคิดของฟังก์ชัน polymorphic พวกเขาเรียกพวกเขาว่า "การแปลงตามธรรมชาติ", "ธรรมชาติ" เพราะมันเป็นสิ่งเดียวที่คุณสามารถเขียนในแบบที่ถูกต้องโดยใช้ตัวแปรประเภท ดังนั้นอาจกล่าวได้ว่าทฤษฎีหมวดหมู่นั้นถูกประดิษฐ์ขึ้นอย่างแม่นยำเพื่อทำให้ภาษาการเขียนโปรแกรม polymorphic เป็นทางการแม้แต่ก่อนที่ภาษาการเขียนโปรแกรมจะเข้ามามีบทบาท!
อนุรักษนิยมชุดทฤษฎีไม่มีความรู้เกี่ยวกับ functors และการเปลี่ยนแปลงทางธรรมชาติที่เกิดขึ้นภายใต้พื้นผิวเมื่อเขาใช้สัญลักษณ์ชุดทฤษฎี แต่ตราบใดที่เขาใช้ระบบพิมพ์อย่างซื่อสัตย์เขาก็กำลังสร้างสิ่งก่อสร้างที่เป็นหมวดหมู่ขึ้นมาโดยที่ไม่รู้ตัว
ทั้งหมดที่กล่าวมาและทำทฤษฎีหมวดหมู่เป็นทฤษฎีทางคณิตศาสตร์ที่เป็นแก่นสารของประเภทและฟังก์ชั่น ดังนั้นโปรแกรมเมอร์ทุกคนสามารถได้รับประโยชน์จากการเรียนรู้ทฤษฎีหมวดหมู่เล็กน้อยโดยเฉพาะโปรแกรมเมอร์ที่ใช้งานได้ น่าเสียดายที่ดูเหมือนจะไม่มีหนังสือตำราเกี่ยวกับทฤษฎีหมวดหมู่ที่กำหนดเป้าหมายไปที่โปรแกรมเมอร์โดยเฉพาะ หนังสือ "ทฤษฎีหมวดหมู่สำหรับวิทยาการคอมพิวเตอร์" นั้นมีเป้าหมายอยู่ที่นักศึกษา / นักวิทยาศาสตร์ด้านทฤษฎี หนังสือเล่มนี้โดยเบนจามินเพียร์ซทฤษฎีหมวดหมู่พื้นฐานสำหรับนักวิทยาศาสตร์คอมพิวเตอร์อาจเป็นหนังสือที่อ่านง่ายที่สุด
อย่างไรก็ตามมีทรัพยากรมากมายบนเว็บซึ่งมีเป้าหมายอยู่ที่โปรแกรมเมอร์ หน้า Haskellwikiสามารถเป็นจุดเริ่มต้นที่ดี ที่บัณฑิตวิทยาลัย Midlandsเรามีการบรรยายเกี่ยวกับทฤษฎีหมวดหมู่ (อื่น ๆ ) หลักสูตรของ Graham Hutton ได้รับการระบุว่าเป็นหลักสูตร "เริ่มต้น" และฉันได้รับการระบุว่าเป็นหลักสูตร "ขั้นสูง" แต่เนื้อหาทั้งคู่ครอบคลุมเนื้อหาเดียวกันเป็นหลัก University of Chalmers มีหน้าแหล่งข้อมูลที่ดีเกี่ยวกับหนังสือและบันทึกการบรรยายจากทั่วโลก บล็อกเว็บไซต์กระตือรือร้นของ "sigfpe"นอกจากนี้ยังมีจำนวนมากที่มีสัญชาติญาณที่ดีจากจุดโปรแกรมเมอร์ของมุมมอง
หัวข้อพื้นฐานที่คุณต้องการเรียนรู้คือ:
- คำจำกัดความของหมวดหมู่และตัวอย่างของหมวดหมู่
- functors และตัวอย่างของพวกเขา
- การเปลี่ยนแปลงตามธรรมชาติและตัวอย่างของพวกเขา
- คำจำกัดความของผลิตภัณฑ์ coproducts และ exponents (ช่องว่างฟังก์ชัน) วัตถุเริ่มต้นและเทอร์มินัล
- adjunctions
- หมวดหมู่ monads, algebras และ Kleisli
บันทึกการบรรยายของฉันเองในMidlands Graduate Schoolครอบคลุมหัวข้อเหล่านี้ทั้งหมดยกเว้นหัวข้อสุดท้าย (monads) วันนี้มีแหล่งข้อมูลอื่น ๆ อีกมากมาย นั่นไม่ใช่การสูญเสียครั้งใหญ่
ยิ่งคุณรู้คณิตศาสตร์มากเท่าไหร่ก็ยิ่งง่ายต่อการเรียนรู้ทฤษฎีหมวดหมู่ เนื่องจากทฤษฎีหมวดหมู่เป็นทฤษฎีทั่วไปของโครงสร้างทางคณิตศาสตร์มันเป็นประโยชน์ที่จะรู้ตัวอย่างเพื่อชื่นชมความหมายของคำนิยาม (เมื่อฉันเรียนรู้ทฤษฎีหมวดหมู่ฉันต้องสร้างตัวอย่างของตัวเองโดยใช้ความรู้ด้านการเขียนโปรแกรมภาษาเพราะหนังสือตำรามาตรฐานมีตัวอย่างทางคณิตศาสตร์เท่านั้นซึ่งฉันไม่รู้อะไรเลย) จากนั้นหนังสือแลคเค็กมาเยี่ยม และสกอตต์เรียกว่า " บทนำสู่ตรรกะเชิงหมวดหมู่"ซึ่งเกี่ยวข้องกับทฤษฎีหมวดหมู่ในการพิมพ์ระบบ (สิ่งที่พวกเขาเรียกว่า" ตรรกะ ") ตอนนี้มันเป็นไปได้ที่จะเข้าใจทฤษฎีหมวดหมู่เพียงแค่เกี่ยวข้องกับประเภทของระบบโดยไม่ต้องรู้ตัวอย่างมากมายทรัพยากรมากมายที่ฉันได้กล่าวไว้ข้างต้นใช้สิ่งนี้ วิธีการอธิบายทฤษฎีหมวดหมู่