"ในตำแหน่งที่เป็นบวก" และ "ในตำแหน่งเชิงลบ" หมายถึงอะไรในบริบทของทฤษฎีประเภท?
สิ่งเดียวที่ฉันเข้าใจจากโพสต์บล็อกของ Bob Harper ในหัวข้อคือมีการเชื่อมต่อระหว่างขั้วในแง่นี้ในทฤษฎีประเภทและขั้วในตรรกะ แต่ฉันไม่รู้ว่าการเชื่อมต่อนั้นคืออะไร
"ในตำแหน่งที่เป็นบวก" และ "ในตำแหน่งเชิงลบ" หมายถึงอะไรในบริบทของทฤษฎีประเภท?
สิ่งเดียวที่ฉันเข้าใจจากโพสต์บล็อกของ Bob Harper ในหัวข้อคือมีการเชื่อมต่อระหว่างขั้วในแง่นี้ในทฤษฎีประเภทและขั้วในตรรกะ แต่ฉันไม่รู้ว่าการเชื่อมต่อนั้นคืออะไร
คำตอบ:
น่าเสียดายที่ "ขั้ว" เป็นแนวคิดที่ค่อนข้างมากในทฤษฎีประเภท "ตำแหน่งในเชิงบวก" และ "ตำแหน่งเชิงลบ" อ้างถึงแนวคิดเรื่องขั้วที่แตกต่างจากสิ่งที่บ๊อบพูดถึงด้วยการมุ่งเน้น / โพลาไรซ์
เมื่อคุณกำหนดประเภทอุปนัยคุณให้ชุดของกฎที่สอดคล้องกับการดำเนินงานสำหรับประเภทที่คุณกำหนด ตัวอย่างเช่นคุณอาจจะบอกว่าNat
เป็นสิ่งที่มี
zero : Nat
suc : Nat -> Nat
และจากนั้นก็คาดหวังว่าNat
มีค่าทั้งหมดที่สามารถสร้างขึ้นจากการใช้ซ้ำ ๆsuc
กับคนอื่น ๆและรวมถึงNat
zero
สอดคล้องกับโครงสร้างอุปนัยนี้เราได้รับหลักการการเรียกซ้ำข้ามNat
ซึ่งทำงานบนพื้นฐานของความจริงที่ว่าNat
มีการสร้างขึ้นโดยผู้สร้างเหล่านั้น
rec : A -> (A -> A) -> Nat -> A
ดังนั้น
rec Z S zero = zero
rec Z S (suc n) = S (rec Z S n)
อย่างไรก็ตามมีข้อ จำกัด บางประการเกี่ยวกับสิ่งที่เราสามารถเขียนเป็นกฎ มิฉะนั้นเราสามารถเขียนชุดของกฎที่หลักการเรียกซ้ำไม่สามารถพิสูจน์ได้ พิจารณา "อุปนัยประเภท" D
กับหนึ่งคอนสตรัค
d : (D -> D) -> D
ที่นี่ไม่มีหลักการการเรียกซ้ำที่มีเหตุผลที่นี่ และด้วยเหตุผลที่ดี! หากเรามีหลักการเรียกซ้ำบางอย่างเราสามารถใช้มันเพื่อเข้ารหัสแอปพลิเคชันด้วยตนเองในเวอร์ชันเดียว ซึ่งหมายความว่าD
ไม่สามารถเรียกว่า "อุปนัย" เพราะประเภทอุปนัยเป็นสิ่งก่อสร้าง จำกัด ที่เกิดจากการใช้ตัวสร้างซ้ำ ๆ !
เพื่อที่จะจัดการกับสิ่งนี้เราได้ จำกัด ว่าอุปนัยประเภทนั้นสามารถเกิดซ้ำได้ในทฤษฎีประเภท เราหยุดไม่ให้ปรากฏใน "สถานที่เชิงลบ" นี่คือความคิดเรื่องขั้วที่คุณพูดถึง ขั้วของตำแหน่งจะถูกกำหนดอย่างนั้น
ดังนั้นX
บวกในสองคนแรกและลบในสองคนนั้น
X
Int -> X
X -> Int
(Unit -> X) -> Int
ความคิดนี้เป็นธรรมกับการขอความช่วยเหลือจากทฤษฎีหมวดหมู่ที่อุปนัยประเภทที่มีเพียงการเกิดซ้ำเป็นบวกทำให้เกิด functor covariant รายละเอียดเกี่ยวกับวิธีการทำงานและสาเหตุที่มันน่าสนใจ
ในบล็อกของเขาฮาร์เปอร์กำลังพูดถึงความหมายที่แตกต่างของขั้ว ขั้วนี้มีการอ้างอิงถึงความเชื่อมโยงต่าง ๆ ในตรรกะให้ความหมาย โดยเฉพาะอย่างยิ่งเราสามารถจำแนก connectives ในสองวิธี
ในแง่ภาษาการเขียนโปรแกรมสิ่งนี้ได้รวบรวมความแตกต่างระหว่างคนขี้เกียจและคนประเภทเข้มงวด ประเภทที่เข้มงวดถูกกำหนดโดยค่าของมัน คนขี้เกียจถูกกำหนดโดยวิธีการจับคู่รูปแบบกับพวกเขา เพื่อจัดการสิ่งนี้อย่างถูกต้องเรากำหนดภาษาด้วยโครงสร้างหลัก 2 วิธีวิธีสร้างประเภทบวกและ "เงี่ยง" เพื่อแยกย่อยประเภทลบ เราสามารถใช้สิ่งนี้เพื่อรวมการคำนวณทั้งแบบเข้มงวดและแบบสันหลังยาวเป็นภาษาเดียว
เพื่อที่จะเข้าใจในเรื่องนี้ดีกว่าผมดูคุณบทที่ 38 ของบ๊อบฮาร์เปอร์หนังสือ