ความหมายของ“ ตำแหน่งเชิงบวก” และ“ ตำแหน่งเชิงลบ” ในทฤษฎีประเภทหรือไม่


10

"ในตำแหน่งที่เป็นบวก" และ "ในตำแหน่งเชิงลบ" หมายถึงอะไรในบริบทของทฤษฎีประเภท?

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

คำตอบ:


9

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

ความหมายของคุณ

เมื่อคุณกำหนดประเภทอุปนัยคุณให้ชุดของกฎที่สอดคล้องกับการดำเนินงานสำหรับประเภทที่คุณกำหนด ตัวอย่างเช่นคุณอาจจะบอกว่า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ไม่สามารถเรียกว่า "อุปนัย" เพราะประเภทอุปนัยเป็นสิ่งก่อสร้าง จำกัด ที่เกิดจากการใช้ตัวสร้างซ้ำ ๆ !

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

  1. อาร์กิวเมนต์เริ่มต้นในตำแหน่งที่เป็นบวก
  2. ทุกครั้งที่เราไปทางซ้ายลูกศรขั้วจะพลิก

ดังนั้นXบวกในสองคนแรกและลบในสองคนนั้น

X
Int -> X
X -> Int
(Unit -> X) -> Int

ความคิดนี้เป็นธรรมกับการขอความช่วยเหลือจากทฤษฎีหมวดหมู่ที่อุปนัยประเภทที่มีเพียงการเกิดซ้ำเป็นบวกทำให้เกิด functor covariant รายละเอียดเกี่ยวกับวิธีการทำงานและสาเหตุที่มันน่าสนใจ

ความหมายของ Bob Harper

ในบล็อกของเขาฮาร์เปอร์กำลังพูดถึงความหมายที่แตกต่างของขั้ว ขั้วนี้มีการอ้างอิงถึงความเชื่อมโยงต่าง ๆ ในตรรกะให้ความหมาย โดยเฉพาะอย่างยิ่งเราสามารถจำแนก connectives ในสองวิธี

  • สามารถกำหนดจุดเชื่อมต่อเชิงบวกได้โดยกำหนดวิธีแนะนำ (กฎการแนะนำ)
  • connectives เชิงลบสามารถกำหนดได้โดยการกำหนดวิธีการใช้พวกเขา (กฎการกำจัดของพวกเขา)

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

เพื่อที่จะเข้าใจในเรื่องนี้ดีกว่าผมดูคุณบทที่ 38 ของบ๊อบฮาร์เปอร์หนังสือ


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