ทฤษฎีหมวดหมู่ (ไม่ใช่) สำหรับการเขียนโปรแกรม?


21

หลังจากเรียนรู้ Haskell และภาษา FP อื่น ๆ ที่ไม่บริสุทธิ์ฉันก็ตัดสินใจอ่านเกี่ยวกับทฤษฎีหมวดหมู่ หลังจากได้รับความเข้าใจที่ดีเกี่ยวกับทฤษฎีหมวดฉันเริ่มคิดเกี่ยวกับแนวคิดของทฤษฎีหมวดหมู่ที่สามารถใช้ในการคิดเกี่ยวกับการออกแบบโปรแกรมแต่ไม่ว่าฉันจะพยายามอย่างหนักเพียงใดดูเหมือนว่านี่ไม่ใช่วิธีที่จะไป

หลังจากใช้ความพยายามไม่สำเร็จหลายครั้งเพื่อเชื่อมโยงทฤษฎีหมวดหมู่กับโปรแกรมการออกแบบฉันได้ข้อสรุปว่า:

  • หมวดหมู่ทฤษฎีจะเป็นประโยชน์เมื่อการออกแบบภาษาการเขียนโปรแกรม
  • ทฤษฎีหมวดหมู่ไม่ใช่สิ่งที่คุณใช้เมื่อออกแบบโปรแกรม (แม้เมื่อใช้ภาษาที่ได้รับการออกแบบตามหลักการหมวดหมู่) ตัวอย่างเช่น: เมื่อการเขียนโปรแกรมใน Haskell คุณจะใช้ชนิดตัวสร้างประเภทฟังก์ชั่นฟังก์ชั่นการสั่งซื้อที่สูงขึ้น ฯลฯ เพื่อออกแบบโปรแกรมของคุณไม่ใช่แนวคิดทฤษฎีหมวดหมู่

โดยสรุปเรามีระบบเลเยอร์ด้านล่าง (คำสั่งซื้อต่ำถึงสูง):

หมวดหมู่ทฤษฎี -> ภาษาการเขียนโปรแกรม -> โปรแกรม

ที่ชั้นโดยเฉพาะอย่างยิ่งคุณใช้แนวคิดของชั้นพื้นฐานทันที

ความเข้าใจนี้ถูกต้องหรือไม่ ถ้าไม่ใช่และคุณเชื่อว่าในการออกแบบโปรแกรมเราสามารถใช้แนวคิดทฤษฎีหมวดหมู่ได้โดยตรงโปรดอ้างอิงบทความหรือบทความในบล็อกที่แสดงให้เห็น

หมายเหตุ: โดยการออกแบบโปรแกรมฉันหมายถึงการออกแบบโปรแกรมตามแนวคิดที่แตกต่างกันเช่นการทำงานพร้อมกัน, การขนาน, ปฏิกิริยา, การส่งข้อความเป็นต้น


1
คุณคิดว่า monads เป็นส่วนหนึ่งของภาษาโปรแกรมหรือไม่? ลูกศร?
เดฟคลาร์ก

2
สิ่งนี้ทำให้ฉันเป็นคำถามที่เกี่ยวกับฟอสฟอรัสอย่างน้อยก็บางส่วน ฉันไม่แน่ใจว่ามีคำตอบเดียวที่ถูกต้อง ทฤษฎีหมวดหมู่หนึ่งจะใช้สัญชาตญาณที่ได้รับจากมันในขณะที่การเขียนโปรแกรมและอีกอันจะสนับสนุนวิธีคิดที่แตกต่างกัน
Raphael

2
โปรแกรมส่วนใหญ่ที่ใช้ภาษาการเขียนโปรแกรมไม่ได้รับแรงบันดาลใจจากทฤษฎีหมวดหมู่ เท่าที่ฉันสามารถบอกได้โปรแกรมเมอร์โดยเฉลี่ยไม่ทราบทฤษฎีหมวดหมู่และโปรแกรมส่วนใหญ่ (รวมถึงระบบปฏิบัติการและเบราว์เซอร์ของคุณ) ไม่ได้รับแรงบันดาลใจจากคณิตศาสตร์ที่สูงขึ้น
Yuval Filmus

1
@YuvalFilmus: คำถามของฉันมุ่งเน้นไปที่ภาษาโปรแกรมการทำงาน
Ankur

1
ดูคำถามนี้สำหรับบางแอปพลิเคชัน CS ของ monoids ด้วย
vzn

คำตอบ:


13

แน่นอนว่าขึ้นอยู่กับโปรแกรมที่คุณกำลังพยายามออกแบบ

หากคุณกำลังออกแบบโปรแกรมบัญชีสำหรับร้านขายช็อกโกแลตป้าของคุณฉันสงสัยว่าหมวดหมู่ทฤษฎีจะมีประโยชน์มาก

แต่มีสถานการณ์ที่แน่นอนว่าทฤษฎีหมวดหมู่นั้นมีประโยชน์อย่างมากในการออกแบบโปรแกรม (โดยที่ฉันหมายถึงโครงสร้างข้อมูลห้องสมุดและอื่น ๆ ) สถานการณ์ดังกล่าวส่วนใหญ่เกิดขึ้นเมื่อโปรแกรมที่เกี่ยวข้องมีลักษณะทางคณิตศาสตร์

หากคุณต้องการเขียนโปรแกรมที่คำนวณด้วยจำนวนจริงที่แน่นอนและโครงสร้างอื่น ๆ ที่เกิดขึ้นในการวิเคราะห์ทางคณิตศาสตร์คำถามแรกที่คุณต้องตอบคือการใช้วัตถุทางคณิตศาสตร์ที่ซับซ้อนอย่างถูกต้อง (เช่นฟังก์ชัน differentiable, manifold ฯลฯ ) ) ที่นี่ช่วยให้คุณรู้ทฤษฎีหมวดหมู่และตรรกะได้เป็นอย่างมากเพราะมันจะให้วิธีการแปลคำจำกัดความของโครงสร้างทางคณิตศาสตร์อย่างเป็นระบบเพื่อให้ได้ข้อมูลจำเพาะและการนำไปใช้ของโครงสร้างข้อมูลที่สอดคล้องกัน buzzword ที่คุณควรมองหาคือทฤษฎีความเป็นจริง แต่นี่เป็นเพียงตัวอย่างเดียว

วิธีที่ดีที่สุดในการดูว่าทฤษฎีหมวดหมู่มีประโยชน์อย่างไรคือดูโปรแกรมที่เขียนขึ้นโดยผู้ที่รู้ทฤษฎีหมวดหมู่มากมาย (และคณิตศาสตร์โดยทั่วไป) ตัวอย่างที่ชัดเจนของเรื่องนี้คือMartínEscardóและฟังก์ชันที่เป็นไปไม่ได้ของเขาเช่น:

M. Escardóและ P. Oliva: เกมเรียงตามลำดับทฤษฎีบท Tychonoff และ Double-Negation Shift มีการเขียนโปรแกรมเชิงฟังก์ชันทั่วไปที่มีโครงสร้างทางคณิตศาสตร์ 2010, ACM Press (พร้อมไฟล์ Haskell และ Agda ที่แสดงร่วม)

คุณอาจบ่นว่านี่ไม่ใช่แค่ทฤษฎีหมวดหมู่ แต่ยังรวมถึงตรรกะและโครงสร้าง การร้องเรียนดังกล่าวจะถูกเข้าใจผิดอย่างรุนแรง ทฤษฎีหมวดหมู่ที่ดีที่สุดมักผสมกับสิ่งอื่นเสมอ

สุดท้ายนี้ฉันจะแนะนำให้ไม่ทำข้อสรุปที่ยิ่งใหญ่เกี่ยวกับธรรมชาติของสิ่งต่าง ๆ โดยใช้การอ่านเล็กน้อยที่ได้รับมอบหมายด้วยตนเอง


นั่นคือจุดของฉันอย่างแม่นยำ ถ้าฉันกำลังออกแบบซอฟต์แวร์บัญชีระบบชนิดจะเป็นภาษาของฉันสำหรับการออกแบบ หากฉันออกแบบซอฟต์แวร์ทางคณิตศาสตร์ฉันจะใช้ระบบพิมพ์เพื่อแสดงแนวคิดทฤษฎีหมวดหมู่ ซึ่งโดยทั่วไปบ่งชี้ว่าทฤษฎีประเภทหรือระบบการพิมพ์เป็นนามธรรมทั่วไปแล้วทฤษฎีหมวดหมู่
Ankur

1
นั่นเป็นคำพูดที่ไร้สาระ ฉันคิดว่าคุณควรจะเรียนรู้เพิ่มเติมก่อนที่จะทำงบแบบนี้ บางทีคุณสามารถเริ่มต้นด้วยexistentialtype.wordpress.com/2011/03/27/the-holy-trinity
Andrej Bauer

ฉันไม่ใช่นักวิจัย, Phd guy, นักวิทยาศาสตร์, นักคณิตศาสตร์หรือนักทฤษฎีหมวดหมู่ดังนั้นอย่ากังวลกับคำแถลงของฉันพวกเขาจะไม่ตีพิมพ์ในวารสารทางวิทยาศาสตร์หรืองานวิจัย ฉันเป็นเพียงโปรแกรมเมอร์ที่พยายามเข้าใจด้านอื่น ๆ ของเหรียญ โดยวิธีการขอบคุณสำหรับการเชื่อมโยง
Ankur

1
ฉันรู้สิ่งนี้ซึ่งเป็นเหตุผลที่ฉันแนะนำให้คุณระมัดระวังในการสรุปข้อสรุปเช่นคุณ: คุณไม่มีข้อมูลที่จำเป็นในการสรุป และนี่คือเหตุผลที่ฉันแนะนำคุณไปยังบล็อกโพสต์โดย Bob Harpher แทนที่จะพูดว่าหนังสือเทคนิคบางเล่มเกี่ยวกับความสัมพันธ์ระหว่างทฤษฎีประเภทและทฤษฎีหมวดหมู่ ฉันพยายามที่จะช่วย แต่ฉันคาดหวังว่าจะได้รับการจองเพิ่มอีกเล็กน้อยจากคุณเมื่อพูดถึงข้อสรุปที่ยิ่งใหญ่เกี่ยวกับธรรมชาติของคณิตศาสตร์ทั้งสาขา
Andrej Bauer

ตัวอย่างเช่นคุณระบุว่า "ทฤษฎีการพิมพ์เป็นนามธรรมที่เป็นนามธรรมมากกว่าทฤษฎีหมวดหมู่" นี่เป็นตัวอย่างของคำแถลงที่คุณไม่ควรรู้โดยใช้ความรู้เพียงเล็กน้อย ฉันทำงานอย่างมืออาชีพในด้านนี้และฉันก็จะระมัดระวังในการสรุปเช่นนี้หรือสิ่งที่ตรงกันข้าม
Andrej Bauer

6

ผู้คนเคยใช้ CT เพื่ออธิบายชนิดข้อมูล

  1. ชนิดข้อมูลถูกกำหนดโดยหมวดหมู่เฉพาะที่วัตถุเป็นลำดับ จำกัด ของประเภท (ภาษาข้อมูลจำเพาะ) และลูกศรเป็นเส้นโครงหรือองค์ประกอบอื่นของการดำเนินการชนิดข้อมูล ตัวอย่างเช่นวัตถุคือโดเมนและเป็นโคโดเมนของการดำเนินการพุชของสแต็ก สิ่งนี้จะให้ไวยากรณ์แก่คุณ แต่คุณยังไม่มีความหมายของความหมาย
  2. พีชคณิตซึ่งก็คือตัวอย่างของประเภทนั้นคือ functor จากทฤษฎีถึง Ens หมวดหมู่ของชุด (เล็ก) (เราใช้ "เล็ก" เพื่อหลีกเลี่ยงความขัดแย้งของรัสเซล แต่ส่วนใหญ่ไม่สำคัญ)
  3. ปรากฎว่าคุณสมบัติการปิดของหมวดหมู่สอดคล้องกับครอบครัวของทฤษฎีตรรกะ ตัวอย่างเช่นหากหมวดหมู่ทฤษฎีถูกปิดภายใต้ผลิตภัณฑ์ประเภทข้อมูลสามารถ axiomatized โดยสมการ หากหมวดหมู่ทฤษฎีถูกปิดโดยการดึงกลับจากนั้นชนิดข้อมูลสามารถ axiomatized โดยประโยคฮอร์น

ฉันไม่แน่ใจว่าจะมีใครสนใจเรื่องนี้อีกต่อไป ฉันคิดว่านี่และลิงก์ที่นั่นจะอธิบายรายละเอียดเพิ่มเติม

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.