อะไรคือความสัมพันธ์ระหว่างหน้าที่ใน SML และทฤษฎีหมวดหมู่?


24

ตามความคิดเดียวกันกับคำกล่าวนี้โดยAndrej Bauerในคำตอบนี้

ชุมชน Haskell ได้มีการพัฒนาเทคนิคจำนวนหนึ่งแรงบันดาลใจจากทฤษฎีประเภทที่monadsเป็นที่รู้จักกันดีที่สุด แต่ไม่ควรจะสับสนกับmonads

อะไรคือความสัมพันธ์ระหว่างfunctorsใน SML และfunctorsในทฤษฎีหมวดหมู่?

เนื่องจากฉันไม่รู้เกี่ยวกับรายละเอียดของฟังก์ชั่นในภาษาอื่นเช่น Haskell หรือ OCaml หากมีข้อมูลที่มีค่ากรุณาเพิ่มหัวข้อสำหรับภาษาอื่นด้วย


1
คุณสามารถลองส่งอีเมลถึงDave McQueenเพื่อหาคำตอบที่ชัดเจนฉันคิดว่า
Gilles 'หยุดชั่วร้าย'

คำตอบ:


14

หมวดหมู่เป็นหมวดหมู่ (ใหญ่) ที่มีวัตถุเป็นหมวดหมู่ (เล็ก) และมี morphisms เป็นหน้าที่ระหว่างหมวดหมู่เล็ก ๆ ในแง่นี้ฟังก์ชั่นในหมวดหมู่ทฤษฎีคือ "morphisms ขนาดที่สูงขึ้น"

ML ฟังก์ชั่นไม่ใช่ฟังก์ชั่นในการจัดหมวดหมู่ของคำ แต่พวกมันคือ "ฟังก์ชั่นขนาดที่สูงขึ้น" ในแง่ของทฤษฎีประเภท

คิดว่าประเภทข้อมูลที่เป็นรูปธรรมในภาษาการเขียนโปรแกรมทั่วไปเป็น "เล็ก" ดังนั้นint, bool, int -> intฯลฯ มีขนาดเล็กเรียนใน java มีขนาดเล็กเป็น structs Typeดีในซีเราอาจรวบรวมประเภทข้อมูลทั้งหมดลงในคอลเลกชันขนาดใหญ่ที่เรียกว่า ตัวสร้างประเภทเช่นlistหรือarrayเป็นฟังก์ชั่นจากไปType Typeดังนั้นมันจึงเป็นฟังก์ชั่น "ใหญ่" ML functor เป็นเพียงฟังก์ชั่นขนาดใหญ่ที่มีความซับซ้อนมากกว่าเล็กน้อย: มันยอมรับว่าเป็นการโต้เถียงหลายสิ่งเล็ก ๆ น้อย ๆ และมันจะคืนสิ่งเล็ก ๆ "สิ่งเล็ก ๆ น้อย ๆ ที่รวมเข้าด้วยกัน" เรียกว่าโครงสร้างใน ML ในแง่ของทฤษฎีประเภทมาร์ติน - โลฟเรามีจักรวาล Typeขนาดเล็ก ชนิดที่มีขนาดใหญ่มักจะเรียกว่าชนิด ดังนั้นเราจึงมี:

  1. ค่าที่เป็นองค์ประกอบของประเภท (ตัวอย่าง: 42 : int)
  2. ชนิดที่มีองค์ประกอบของType(ตัวอย่าง: int : Type)
  3. ลายเซ็น ML ชนิด (ตัวอย่าง: OrderedType)
  4. ประเภทการก่อสร้างเป็นองค์ประกอบของชนิด (ตัวอย่าง: list : Type -> Type)
  5. stuctures ML เป็นองค์ประกอบของชนิด (ตัวอย่าง: String : OrderedType)
  6. functors ML มีฟังก์ชั่นระหว่างชนิด (ตัวอย่าง: Map.Make : Map.OrderedType -> Make.S)

ตอนนี้เราสามารถวาดการเปรียบเทียบระหว่าง ML และหมวดหมู่ภายใต้ฟังก์ชั่นที่สอดคล้องกับหน้าที่ แต่เรายังสังเกตเห็นว่าประเภทข้อมูลใน ML เป็นเหมือน "หมวดหมู่ขนาดเล็กที่ไม่มี morphisms" หรือกล่าวอีกนัยหนึ่งว่าพวกเขาเป็นเหมือนชุดมากกว่าพวกเขาจะเป็นหมวดหมู่ เราสามารถใช้การเปรียบเทียบระหว่าง ML กับทฤษฎีเซตแล้ว:

  1. ประเภทข้อมูลเป็นเหมือนชุด
  2. ชนิดเหมือนคลาส set-theoretic
  3. Functionors เป็นเหมือนฟังก์ชั่นขนาดคลาส

15

โครงสร้างมาตรฐาน ML จะคล้ายกับผู้พีชคณิต ลายเซ็นของมันอธิบายคลาสของพีชคณิตทั้งรูปร่างที่คล้ายกัน

Standard ML functor เป็นแผนที่จากคลาสของ algebras ไปยัง algebras อีกชั้นหนึ่ง ตัวอย่างเช่นการเปรียบเทียบกับ functorsซึ่งเพิ่มการดำเนินการผกผันกับ monoids หรือซึ่งเพิ่ม monoid แบบ multiplicative สำหรับกลุ่ม Abelian เพื่อทำวงแหวนF:MโอnGRพีF:ARnก.

ความคิดเหล่านี้ส่วนใหญ่ทำงานในชุดเอกสารโดย Burstall และ Goguen ในการออกแบบภาษาสเปคที่เรียกว่า CLEAR (อ้างอิง c5 และ c6 ในหน้า DBLP ) David MacQueen ทำงานร่วมกับ Burstall และ Sannella ในเวลานั้นและคุ้นเคยอย่างใกล้ชิด กับปัญหา ระบบโมดูล ML มาตรฐานยึดตามแนวคิดเหล่านี้

สิ่งที่คนส่วนใหญ่จะสงสัยคือสิ่งที่เกี่ยวกับ morphisms? หมวดหมู่ฟังก์ชั่นเชิงทฤษฎีมีส่วนของวัตถุและส่วนมอร์ฟิซึ่มส์ ฟังก์ชั่น ML มาตรฐานมีเหมือนกันหรือไม่? คำตอบคือใช่และไม่ใช่

  • ส่วนของคำตอบที่ใช่ถ้าโครงสร้างเป็นลำดับแรก จากนั้นจะมีโฮโมมอร์ฟิซึมระหว่างโครงสร้างที่แตกต่างกันของลายเซ็นเดียวกันและ Standard ML functors จะจับคู่มันกับโฮโมมอร์ฟิซึมของลายเซ็นผลลัพธ์โดยอัตโนมัติ
  • ส่วนที่ไม่มีคำตอบใช้เมื่อโครงสร้างมีการดำเนินการใบสั่งสูงกว่า

นี่หมายความว่า ML มาตรฐานเบี่ยงเบนจากทฤษฎีหมวดหมู่หรือไม่ ฉันไม่คิดอย่างนั้น ฉันคิดว่า Standard ML กำลังทำสิ่งที่ถูกต้องและทฤษฎีหมวดหมู่ก็ยังไม่ทันตามมา ทฤษฎีหมวดหมู่ยังไม่ทราบวิธีจัดการกับฟังก์ชั่นที่มีลำดับสูงกว่า สักวันมันจะ


"ทฤษฎีหมวดหมู่ยังไม่รู้วิธีจัดการกับฟังก์ชันที่มีลำดับสูงกว่า" นั่นฟังดูเหมือนคำถามอื่นเพราะฉันคิดว่าทฤษฎีหมวดหมู่สามารถทำทุกอย่างได้ในฐานะรากฐาน
Guy Coder

2
T(X)=[XX]เสื้อWผมอีX=T(X)T(X)
Uday Reddy

ที่จริงผมทำให้มันเป็นจริงคำถาม
Guy Coder

"โครงสร้าง ML มาตรฐานคล้ายกับพีชคณิต " ฟังก์ชั่นทั่วไปไม่ได้มากกว่านั้นเหรอ? ไม่มีสิ่งใดป้องกันโครงสร้างที่มีวัตถุที่ไม่เกี่ยวข้อง (ประเภทค่าและฟังก์ชั่น) เช่น ไม่ก่อตัวเป็นพีชคณิต
didierc

2
@didierc ลายเซ็นสำหรับ algebras ประกอบด้วยอย่างน้อยหนึ่งประเภท (เช่นประเภทของเรา) และการดำเนินการอย่างน้อยหนึ่งอย่าง(เช่นฟังก์ชั่นของเรา) และเป็นทางเลือกสัจพจน์บางอย่าง (เช่นข้อกำหนดของเรา) พีชคณิตสำหรับลายเซ็นหยิบชุดโดยเฉพาะอย่างยิ่งสำหรับทุกประเภทเหล่านั้นและฟังก์ชั่นโดยเฉพาะอย่างยิ่งสำหรับการดำเนินการดังกล่าวดังกล่าวว่าหลักการมีความพึงพอใจ ลายเซ็นและโครงสร้างของ SML นั้นเป็นสิ่งที่ถูกต้องยกเว้นว่า SML อนุญาตการดำเนินการตามลำดับที่สูงขึ้นในขณะที่พีชคณิตไม่ได้ทำ
Uday Reddy

3

นั่นคือที่ดีที่สุดของความรู้ของฉันไม่มีความสัมพันธ์อย่างเป็นทางการระหว่างfunctorsในหมวดหมู่ทฤษฎีและการfunctorsใน ML (SML หรือ OCaml พวกเขากำลังใกล้พอสำหรับจุดประสงค์ของเราที่นี่)

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

ฟังก์ชั่น ML ได้รับบัพติศมาโดย Dave McQueen ในปี 1985 การแก้ไขโมดูลสำหรับมาตรฐาน ML (citeseerx)ที่ปรากฏในจดหมายข่าว Polymorphism (กระดาษต้นฉบับใช้นิพจน์ น่าเสียดายที่ฉันไม่พบสำเนาของกระดาษนั้น ใน 1,986 กระดาษของเขาใช้ประเภทขึ้นอยู่กับ Express โครงสร้าง Modular (Citeseerx)เขาให้ชื่อเป็นที่ยอมรับ.


2
ฟังก์ชั่นไม่ใช่เพียงแค่ฟังก์ชั่นบนวัตถุเท่านั้น Functors คือ "morphisms ระหว่างหมวดหมู่"
Andrej Bauer

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