ทฤษฎีประเภทพึ่งพาได้ง่ายที่สุดที่ฉันสามารถเรียนรู้คืออะไร?


46

ฉันสนใจที่จะเข้าใจอย่างถ่องแท้เกี่ยวกับการพิมพ์แบบพึ่งพา ฉันได้อ่านมากที่สุดของ TaPL และอ่าน (ถ้าไม่ดูดซึมได้อย่างเต็มที่) 'ขึ้นอยู่กับประเภทในATTaPL ฉันยังอ่านและอ่านบทความต่าง ๆ ที่เกี่ยวข้อง

การอภิปรายเชิงทฤษฎีหลายประเภทดูเหมือนว่าจะมุ่งเน้นไปที่การเพิ่มคุณสมบัติที่เพิ่มขึ้นให้กับระบบประเภทก่อนหน้านี้ไม่ใช่ "การวางนัยทั่วไปขนาดใหญ่ถัดไปคืออะไรจากระบบประเภท X" ประเภทที่อ้างถึงดูเหมือนจะเป็นลักษณะทั่วไปขนาดใหญ่ต่อไปจาก System F แต่ฉันยังไม่พบภาษาที่ใช้งานง่าย การอ้างอิงหลายอย่างเกี่ยวกับแคลคูลัสของการสร้าง (อุปนัย) ทำให้ฉันคิดว่า CoC เป็นภาษานั้น แต่คำอธิบายของภาษาที่ฉันได้เห็นดูเหมือนจะไม่ชัดเจนหรือใช้งานง่ายสำหรับฉัน

ฉันคาดหวัง / คาดเดาภาษาดังกล่าวจะมีคุณสมบัติดังนี้: (และโปรดแจ้งให้เราทราบหากมีสิ่งใดที่กระโดดออกมาโดยเฉพาะอย่างยิ่งสับสนหรือไม่สมจริง)

  • สรุปนามธรรม (สามารถมีฟังก์ชั่นจากโดเมนใด ๆ ในลำดับชั้นของประเภทเพื่ออื่น ๆ ชนิด -> คำ, คำ -> ประเภท '' 'ฯลฯ )
  • มีลำดับชั้นการพิมพ์ที่ไม่ จำกัด (คำ: ประเภท: ประเภท ': ประเภท' ': ... )
  • จำนวนองค์ประกอบพื้นฐานขั้นต่ำ ฉันจินตนาการว่าภาษานั้นอ้างถึงองค์ประกอบเดียวสำหรับแต่ละระดับเท่านั้น ตัวอย่างเช่นอาจยืนยันว่า ((): หน่วย: ประเภท: ประเภท ': ... ) องค์ประกอบอื่น ๆ ถูกสร้างขึ้นจากองค์ประกอบเหล่านี้
  • สามารถหาผลรวมและชนิดของผลิตภัณฑ์ได้

ฉันกำลังมองหาคำอธิบายของภาษาที่จะกล่าวถึง:

  • ความสัมพันธ์ระหว่างสิ่งที่เป็นนามธรรมและปริมาณในภาษานั้น หากพวกเขาไม่รวมเป็นหนึ่งเดียวให้อธิบายว่าทำไมพวกเขาถึงไม่รวมเป็นหนึ่ง
  • ลำดับชั้นชนิดไม่สิ้นสุดอย่างชัดเจน

ฉันถามคำถามนี้เพราะฉันต้องการเรียนรู้ทฤษฎีแบบพึ่งพา แต่ยังเพราะฉันต้องการที่จะรวบรวมคำแนะนำที่สมมติว่ามีพื้นหลัง CS เล็ก ๆ สอนการใช้และวิธีการทำความเข้าใจผู้ช่วยพิสูจน์และภาษาที่พิมพ์อย่างพึ่งพาอาศัยกัน

(ข้ามโพสต์ไปยัง Reddit)

คำตอบ:


35

มีวิธีการที่แตกต่างกันเล็กน้อยในการเข้าถึงสิ่งนี้:

  1. ทฤษฎีประเภทขึ้นอยู่กับ นี่อาจไม่ใช่วิธีที่ง่ายที่สุดในการเรียนรู้เกี่ยวกับประเภทพึ่งพา แต่คุณสามารถดูเอกสารแคลคูลัสของสิ่งปลูกสร้างและตัวแปรของพวกเขา Pure Type Systems และบทความของ Martin Hofmann เกี่ยวกับไวยากรณ์และความหมายของประเภทอ้างอิง

  2. พิสูจน์ทฤษฎีบท ก่อนอื่นมาดูคำตอบของคำถามที่เกี่ยวข้อง: ฉันจะเรียนรู้ทฤษฎีพื้นฐานของผู้ช่วยพิสูจน์ Coq ได้อย่างไร .

  3. ΠΣ, ท่ามกลางคนอื่น ๆ. และแน่นอนว่ามีหนังสือของ Adam Chlipala ที่ให้ไว้ในคำตอบของ Marc Hamann

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


ฉันสามารถหาเอกสารสำหรับ Epigram ได้ แต่ฉันไม่สามารถดาวน์โหลด Epigram ที่แท้จริงได้เพียง Epigram 2 ที่ยังไม่เสร็จความคิดใด ๆ
John Salvatier

1
คุณพบ: e-pig.org/darcs/Pig09/webหรือไม่ Epigram มีให้ที่ด้านล่างของหน้า
Dave Clarke

3
ตอนที่ 1 ตอนนี้ไม่มีใครสนใจ Epigram 1 AFAIK - ผู้เขียนใช้ Agda ในขณะนี้ (ตอนที่ทำงานกับ Epigram 2 อยู่ด้านข้าง)
Blaisorblade

ในปี 2019 ฉันไม่คิดว่า Epigram 2 จะเกิดขึ้น - แต่ตอนนี้มี Idris (และ Idris 2!) แล้ว
xrq

14

λπ

Twelf เป็นระบบพิสูจน์ทฤษฎีที่ดีบนพื้นฐานของ LF การดูบันทึกการเรียนการสอนขั้นสูงที่เสนอโดย Frank Pfenning เป็นการแนะนำที่ดีเกี่ยวกับทฤษฎีและการปฏิบัติของ LF

ที่กล่าวว่าอาจไม่ใช่ระบบแรกที่ดีที่สุดที่จะเรียนรู้ว่าคุณสนใจคณิตศาสตร์เชิงสร้างสรรค์มากกว่าสิ่งจำเป็นสำหรับทฤษฎีประเภทหรือไม่: LF หมายถึงเฟรมเวิร์กแบบลอจิคัลและเป็นระบบที่ใช้ทฤษฎี axiomatise ระบบเป้าหมายโดยตรง การใช้ระบบตามทฤษฎีประเภทของ Martin-Loef น่าจะเป็นการแนะนำที่ดีที่สุด -Dave กล่าวถึง Agda และอื่น ๆ - อาจเป็นจุดเริ่มต้นที่ดีกว่าถ้านี่คือเป้าหมายของคุณเนื่องจากคุณสามารถใช้เลขคณิตและอุปนัยประเภทนี้ได้เร็วขึ้น กรอบ.


10

CoC เป็นไปได้มากที่สุด เพียงดำดิ่งสู่Coqและทำงานผ่านบทช่วยสอนที่ดีเช่นSoftware Foundations (ซึ่ง Pierce of TaPL และ ATTaPL เกี่ยวข้องอยู่)

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

รายการคุณสมบัติของคุณฟังดูถูกต้อง แต่การดูว่าพวกเขาเล่นอย่างไรในทางปฏิบัติมีค่ามากกว่าหนึ่งพันคะแนน

(อีกอย่างหนึ่งการสอนขั้นสูงกว่าเล็กน้อยคือการเขียนโปรแกรมที่ผ่านการรับรองของ Adam Chlipala พร้อมประเภทการพึ่งพา )


"สัญชาตญาณ" อาจเป็นจุดผสานที่นี่: มีสัญชาตญาณมากมายใน CoC / CIC มากกว่าแค่การพิมพ์ เป็นเป้าหมายสุดท้ายที่ดี - สำหรับใจของฉันการเลือกอยู่ระหว่าง Coq และ Twelf - แต่อาจไม่ใช่ขั้นตอนแรกที่ดีที่สุดในการ
Charles Stewart

@Charles: คะแนนของคุณถูกยึด ฉันยังคิดว่าจากมุมมองการปฏิบัติมันเป็นเดิมพันที่ดี แม้ว่าความเข้าใจอย่างถ่องแท้เกี่ยวกับ CoC / CIC อาจเป็นเรื่องที่ซับซ้อนมากขึ้น Coq (บวกกับการมีบทเรียนพื้นฐานระดับดีสำหรับมัน) ทำให้ง่ายต่อการมุ่งเน้นไปที่การเรียนรู้เพียงแค่ด้านการเขียนโปรแกรมหรือเพียงแค่แง่มุมการพิสูจน์ขั้นพื้นฐาน ความสนใจของคุณเป็นตัวกำหนด) ก่อนที่คุณจะเข้าใจความซับซ้อนทั้งหมด ฉันคิดว่าสิ่งนี้มีคุณสมบัติเป็น "ใช้งานง่าย" สำหรับคนที่ไม่ได้มาจากพื้นหลังทางทฤษฎี
Marc Hamann


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