ความแตกต่างระหว่างชนิดที่อ้างอิง, ประเภทการปรับแต่งและ Hoare Logic


18

ฉันรู้ทฤษฎีประเภทพึ่งพาน้อย จากวิกิพีเดีย:

ชนิดที่ขึ้นต่อกันคือชนิดที่คำจำกัดความขึ้นอยู่กับค่า

และจากหลักสูตรทฤษฎีของฉันฉันจำได้ว่าประเภทที่พึ่งพาคือ:

ตระกูลของชนิดที่จัดทำดัชนีตามประเภท

แต่ฉันมีความสับสนเกี่ยวกับประเภทพึ่งพาและประเภทการปรับแต่งและตรรกะ hoare

เนื่องจากจากประเภทDepeneent vs Refinement ประเภทการปรับแต่งดูเหมือนว่าตรรกะของ Hoare มีประเภทการปรับแต่งพลังงานเพิ่มเติมอะไรอีกนอกเหนือจากการอนุญาตให้แจ้งล่วงหน้าว่าจะต้องได้รับความพึงพอใจ (ซึ่งคล้ายกับ Hoare Logic)

มีอะไรเพิ่มเติมที่ประเภทการพึ่งพาให้เปรียบเทียบกับประเภทการปรับแต่ง และประเภท Dependent นั้นมีประสิทธิภาพมากกว่าประเภทการปรับแต่ง + ตัวแก้ Sat / Constraint

ทุกคนสามารถล้างอากาศด้วยตัวอย่าง

คำตอบ:


18

มีงานล่าสุดโดย Paul-AndréMellièsและNoam Zeilbergerที่สำรวจสิ่งนี้ โดยเฉพาะอย่างยิ่งเอกสารFunctors เป็นประเภทระบบการปรับแต่งและอิสเบลล์คู่ทฤษฎีบทประเภทระบบการปรับแต่ง นอกจากนี้ยังมีวิดีโอการพูดคุยในตอนแรก

ฉันคิดว่ามีความสับสนมากมายเกี่ยวกับประเภทการปรับแต่งเนื่องจากคนที่คิดว่าระบบใดระบบหนึ่งเป็นตัวแทนซึ่งทำให้เป้าหมายและรายละเอียดของระบบเหล่านั้นมาจากแนวคิดทั่วไป สั้น ๆ ของมันคือระบบการปรับแต่งประเภทประเภทคำที่มีอยู่อย่างอิสระในขณะที่ประเภท (ที่ไม่ใช่การปรับแต่ง) ขึ้นอยู่กับหรือมิฉะนั้นเป็นส่วนหนึ่งของเงื่อนไข สิ่งนี้อาจฟังดูคุ้นเคยและอาจขัดแย้งกันบ้างเล็กน้อย

ส่วนที่ดูเหมือนจะคุ้นเคยและขัดแย้งกันอาจเกิดขึ้นได้หากคุณดูประเภทà la Curry (ภายนอก) และประเภทศาสนจักร (ภายใน) เมื่อเรานึกถึงประเภทà la Curry เราคิดว่าประเภทเป็นคำที่ไม่ได้พิมพ์ซึ่งมีความหมายอยู่แล้ว ในโบสถ์àประเภทคำเดียวที่มีอยู่คือคำศัพท์ที่พิมพ์ได้ดีเช่นข้อ จำกัด ประเภทเป็นส่วนหนึ่งของไวยากรณ์ของเรา ดังนั้นสิ่งที่ฉันพูดคือระบบประเภท Curry-style เป็นระบบการปรับแต่งแบบพิมพ์ที่ปรับเงื่อนไขที่ไม่พิมพ์ออกมาในขณะที่ระบบประเภทแบบ Church ไม่ใช่ระบบการปรับแต่งแบบ ซึ่งหมายความว่าตัวอย่างเช่นเราสามารถนึกถึงแคลคูลัสแลมบ์ดาที่พิมพ์ออกมาอย่างเรียบง่ายว่าเป็นระบบการปรับแต่งแบบพิมพ์หรือเป็นระบบการพิมพ์แบบไม่ปรับ

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

จนถึงตอนนี้ฉันยังไม่ได้พูดอะไรเกี่ยวกับประเภทพึ่งพา เหตุผลก็คือมันเป็นความกังวลมุมฉากอย่างสมบูรณ์ ฉันจะบอกว่าระบบพิมพ์ตามแบบฉบับมักจะนำเสนอในรูปแบบของคริสตจักรและดังนั้นจึงไม่ได้เป็นระบบการปรับแต่งพิมพ์ แต่NuPRL (ขึ้นอยู่กับทฤษฎีประเภทคอมพิวเตอร์คำนวณตัวแปรของทฤษฎีประเภทขึ้นอยู่กับเทพมากที่สุดมาร์ติน-Löf) เป็นระบบการปรับแต่งประเภทโจ๋งครึ่มตามที่ฉันอธิบาย ข้อตกลงใน NuPRL อาจไม่ได้มีประเภท! ความจริงที่ว่า "PRL" หมายถึง "ตรรกะการปรับแต่งโปรแกรม" อาจเป็นเคล็ดลับเช่นกัน ในทางกลับกันประเภทการปรับแต่งสำหรับ ML จะอธิบายระบบประเภทการปรับแต่งซึ่งอาจเป็นที่มาของคำศัพท์ซึ่งไม่ใช่ระบบประเภทที่ขึ้นต่อกัน แต่อย่างใด

สำหรับ Hoare triples พวกเขาเป็นระบบการปรับแต่งประเภท พวกเขาใช้จริงเป็นตัวอย่างของระบบการปรับแต่งประเภทในกระดาษแผ่นแรก อย่างไรก็ตามทฤษฎีประเภท Hoareให้บางสิ่งบางอย่างซึ่งสามารถดูได้ว่าเป็นระบบที่ไม่ใช่การปรับแต่งสำหรับภาษาที่มีสาม Hoare

หากต้องการคำตอบเกี่ยวกับ "พลังงาน" ของระบบที่แตกต่างกันคุณจะต้องระบุระบบประเภทที่พึ่งพาได้ (ตระกูลของ) และระบบประเภทการปรับแต่งเฉพาะ (เฉพาะตระกูล) คำว่า "ระบบการพิมพ์ขึ้นอยู่กับ" ครอบคลุมประเภทของระบบการพิมพ์ที่กว้างมากและ "ระบบการปรับแต่งประเภท" นั้นกว้างยิ่งขึ้น แม้ว่าจะมีข้อกำหนดก็ตาม แต่ก็ไม่ได้เป็นการเปรียบเทียบกันระหว่าง "ระบบประเภทที่พึ่งพา" และ "ระบบประเภทการปรับแต่ง" อย่างไรก็ตามถ้าโดย "ระบบชนิดพึ่งพา" คุณกำลังคิดถึงสิ่งที่ต้องการCoqและสำหรับ "ระบบประเภทการปรับแต่ง" บางอย่างเช่นประเภทของเหลวแล้วมันก็สวยด้านเดียว โดยทั่วไปแล้ว Coq จะมองว่ามีพลังมากพอที่จะรองรับคณิตศาสตร์ในทางปฏิบัติ คุณสามารถนำไปใช้และพิสูจน์ตัวแก้ไข SMT ภายใน Coq ได้อย่างถูกต้องแล้วใช้มัน และสามารถกำหนดสูตรแอนะล็อกที่ใกล้เคียงกับเซ็ตย่อยได้ (NuPRL มีประเภทย่อยตามตัวอักษร) ในอีกด้านหนึ่งนักแก้ปัญหา SMT มักถูก จำกัด ให้ใช้ทฤษฎีที่ตัดสินใจได้ซึ่ง Coq ไม่มีข้อ จำกัด เช่นนั้น และระบบจำนวนมากเช่นประเภทเหลวมีภาษาที่ จำกัด และไม่สามารถขยายได้สำหรับการระบุภาคแสดง (แน่นอนโดย "ระบบประเภทพึ่งพา" คุณอาจหมายถึงML Dependentและโดย "ระบบการปรับแต่งประเภท" NuPRL [ซึ่งเป็นระบบประเภทที่ขึ้นต่อกันด้วย] ซึ่งจะเป็นด้านเดียวในลักษณะอื่น)


1
ขอบคุณมากช่วยจริงๆ ใช่กำลังอ่าน Dependent Types ในการฝึกเขียนโปรแกรม (popl '99) และเกิดความสับสน ไชโย
Pushpa

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