คุณจะได้รับแคลคูลัสของสิ่งก่อสร้างจากจุดอื่น ๆ ในแลมบ์ดาคิวบ์ได้อย่างไร


21

CoC กล่าวกันว่าเป็นสุดยอดของทั้งสามมิติของแลมบ์ดาคิวบ์ สิ่งนี้ไม่ชัดเจนสำหรับฉันเลย ฉันคิดว่าฉันเข้าใจมิติของแต่ละบุคคลและการรวมกันของสองใด ๆ ที่ดูเหมือนจะส่งผลให้มีการรวมกันค่อนข้างตรงไปตรงมา (บางทีฉันอาจจะขาดอะไรบางอย่าง?) แต่เมื่อฉันดู CoC แทนที่จะมองเหมือนการรวมกันของทั้งสามดูเหมือนว่าสิ่งที่แตกต่างอย่างสิ้นเชิง มิติข้อมูลประเภทใดชนิดหนึ่ง Prop และขนาดเล็ก / ขนาดใหญ่มาจากไหน ผลิตภัณฑ์ที่ขึ้นต่อกันหายไปที่ไหน และทำไมจึงให้ความสำคัญกับข้อเสนอและบทพิสูจน์แทนประเภทและโปรแกรม มีสิ่งที่เทียบเท่าที่เน้นประเภทและโปรแกรมหรือไม่

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


1
soft-questionอย่างน้อยที่สุดนี้ควรจะเป็น ฉันไม่เห็นคำถามทางเทคนิคจริงๆที่นี่ บางทีคุณอาจจะเจาะจงมากขึ้นในสิ่งที่คุณถาม
Andrej Bauer

3
@AndrejBauer ไม่ใช่คำถาม: อะไรคือความสัมพันธ์ระหว่างการนำเสนอ Barendregt-cube / PTS ของ CoC และงานนำเสนอดั้งเดิมโดย Coquand & Huet
Martin Berger

1
@ AndrejBauer: คำถามก็ดูเหมือนว่าจะถามเกี่ยวกับความแตกต่างในการนำเสนอของ CoC (ทั้งชุด) และเน้นคุณลักษณะบางอย่างในทางปฏิบัติ มันเป็นความจริงที่รุ่น PTS ที่มุ่งเน้นของ CoC เน้นคุณลักษณะบางอย่างที่มีความสำคัญในขณะที่การปฏิบัติของ Coq จะเน้นเรื่องอื่น ๆ ฉันเห็นด้วยว่าควรมีแท็กคำถามอ่อน
Jacques Carette

1
ฉันดีใจที่ได้เห็นบางคนสามารถตอบคำถามนี้ได้
Andrej Bauer

คำตอบ:


28

ขั้นแรกเพื่อย้ำจุดหนึ่งของโคดี้แคลคูลัสของการเหนี่ยวนำ (ซึ่งเคอร์เนลของ Coq อยู่บนพื้นฐาน) นั้นแตกต่างจากแคลคูลัสของการก่อสร้าง มันเป็นความคิดที่ดีที่สุดที่เริ่มจากทฤษฎีประเภท Martin-Löfกับจักรวาลและจากนั้นเพิ่ม Prop เรียงลำดับที่ด้านล่างของลำดับชั้นของประเภท นี่เป็นสัตว์ร้ายที่แตกต่างจาก CoC ดั้งเดิมซึ่งเป็นความคิดที่ดีที่สุดในฐานะ F-omega รุ่นที่ต้องพึ่งพา (ตัวอย่างเช่น CiC มีโมเดลเชิงทฤษฎีและ CoC ไม่มี)

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

อย่างไรก็ตามเพื่อความเข้าใจจะเป็นประโยชน์ในการแยกหมวดหมู่ที่แตกต่างออกไปอย่างชัดเจน เราสามารถแนะนำสามประเภทประโยค, ชนิด (ตั้งแต่ไปโดย metavariable k) ประเภท (ตั้งแต่ไปโดย metavariable A) และข้อตกลง (ตั้งแต่ไปโดย metavariable e) จากนั้นทั้งแปดระบบสามารถเข้าใจได้ว่าเป็นความแตกต่างของสิ่งที่ได้รับอนุญาตในแต่ละระดับ

λ→ (แลมบ์ดาแลมบ์ดาพิมพ์ง่าย)

 k ::= ∗
 A ::= p | A → B
 e ::= x | λx:A.e | e e

นี่คือแคลคูลัสแลมบ์ดาชนิดพื้นฐาน มีชนิดเดียวซึ่งเป็นชนิด ชนิดที่ตัวเองเป็นประเภทอะตอมและประเภทฟังก์ชั่นp A → Bคำศัพท์คือตัวแปรนามธรรมหรือแอปพลิเคชัน

λω_ (STLC + ตัวดำเนินการชนิดที่สูงกว่า)

 k ::= ∗ | k → k
 A ::= a | p | A → B | λa:k.A | A B
 e ::= x | λx:A.e | e e

STLC อนุญาตเฉพาะสิ่งที่เป็นนามธรรมในระดับของข้อกำหนด หากเราเพิ่มไว้ที่ระดับประเภทเราจะเพิ่มประเภทใหม่k → kซึ่งเป็นประเภทของฟังก์ชั่นระดับประเภทและสิ่งที่เป็นนามธรรมλa:k.Aและการประยุกต์ใช้A Bในระดับประเภทเช่นกัน ตอนนี้เราไม่มีพหุสัณฐาน แต่เรามีตัวดำเนินการพิมพ์

หากหน่วยความจำทำหน้าที่ระบบนี้จะไม่มีพลังงานในการคำนวณมากกว่า STLC มันให้ความสามารถในการย่อประเภท

λ2 (ระบบ F)

 k ::= ∗
 A ::= a | p | A → B  | ∀a:k. A 
 e ::= x | λx:A.e | e e | Λa:k. e | e [A]

แทนที่จะเพิ่มตัวดำเนินการประเภทเราอาจเพิ่ม polymorphism ในระดับชนิดเราเพิ่ม∀a:k. Aซึ่งเป็นชนิด polymorphic อดีตและในระดับคำว่าเราเพิ่มเป็นนามธรรมมากกว่าประเภทและการประยุกต์ประเภทΛa:k. ee [A]

ระบบนี้มีประสิทธิภาพมากกว่า STLC มาก - มันมีความแข็งแกร่งเท่ากับเลขคณิตอันดับสอง

λω (ระบบ F-omega)

 k ::= ∗ | k → k 
 A ::= a | p | A → B  | ∀a:k. A | λa:k.A | A B
 e ::= x | λx:A.e | e e | Λa:k. e | e [A]

ถ้าเรามีทั้งตัวดำเนินการประเภทและพหุสัณฐานเราจะได้ F-omega ระบบนี้เป็นทฤษฎีประเภทเคอร์เนลของภาษาการทำงานที่ทันสมัยที่สุด (เช่น ML และ Haskell) นอกจากนี้ยังมีประสิทธิภาพมากกว่าระบบ F อย่างมาก - ซึ่งเทียบเท่ากับความแข็งแกร่งในการคำนวณลำดับที่สูงขึ้น

λP (LF)

 k ::= ∗ | Πx:A. k 
 A ::= a | p | Πx:A. B | Λx:A.B | A [e]
 e ::= x | λx:A.e | e e

แทนที่จะเป็นพหุสัณฐานเราสามารถไปในทิศทางของการพึ่งพาจากแคลคูลัสแลมบ์ดาที่พิมพ์ได้ง่าย หากคุณอนุญาตให้ฟังก์ชันประเภทนี้อนุญาตให้ใช้อาร์กิวเมนต์ในประเภทส่งคืน (เช่นเขียนΠx:A. B(x)แทนA → B) คุณจะได้รับλP เพื่อให้มีประโยชน์จริง ๆ เราต้องขยายชุดของชนิดด้วยตัวดำเนินการชนิดที่รับเงื่อนไขเป็นอาร์กิวเมนต์Πx:A. kดังนั้นเราจึงต้องเพิ่มนามธรรมΛx:A.BและแอปพลิเคชันA [e]ที่สอดคล้องกันในระดับประเภทด้วย

บางครั้งระบบนี้เรียกว่า LF หรือ Edinburgh Logical Framework

มันมีความแข็งแรงในการคำนวณเช่นเดียวกับแคลคูลัสแลมบ์ดาที่พิมพ์ได้อย่างง่าย

λP2 (ไม่มีชื่อพิเศษ)

 k ::= ∗ | Πx:A. k 
 A ::= a | p | Πx:A. B | ∀a:k.A | Λx:A.B | A [e]
 e ::= x | λx:A.e | e e | Λa:k. e | e [A]

เรายังสามารถเพิ่มความหลากหลายให้กับ toP เพื่อรับλP2 ระบบนี้มักไม่ได้ใช้ดังนั้นจึงไม่มีชื่อเฉพาะ (กระดาษแผ่นเดียวที่ฉันอ่านซึ่งใช้เป็น Herman Geuvers ' Induction ไม่สามารถดัดแปลงได้ในทฤษฎีประเภทที่สองขึ้นอยู่กับคำสั่งซื้อ )

ระบบนี้มีความแข็งแกร่งเช่นเดียวกับระบบ F

λPω_ (ไม่มีชื่อพิเศษ)

 k ::= ∗ | Πx:A. k | Πa:k. k'
 A ::= a | p | Πx:A. B | Λx:A.B | A [e] | λa:k.A | A B 
 e ::= x | λx:A.e | e e 

เรายังสามารถเพิ่มตัวดำเนินการประเภทไปที่ toP เพื่อรับgetPω_ นี้เกี่ยวข้องกับการเพิ่มชนิดΠa:k. k'สำหรับผู้ประกอบการประเภทและนามธรรมประเภทในระดับที่สอดคล้องกันและการประยุกต์ใช้Λx:A.BA [e]

เนื่องจากไม่มีความแข็งแกร่งในการคำนวณมากกว่า STLC อีกต่อไประบบนี้จึงควรสร้างพื้นฐานที่ดีสำหรับเฟรมเวิร์กแบบลอจิคัล แต่ก็ไม่มีใครทำได้

CalculPω (แคลคูลัสของสิ่งปลูกสร้าง)

 k ::= ∗ | Πx:A. k | Πa:k. k'
 A ::= a | p | Πx:A. B | ∀a:k.A | Λx:A.B | A [e] | λa:k.A | A B 
 e ::= x | λx:A.e | e e | Λa:k. e | e [A]

ในที่สุดเราก็ไปถึงλP Calcul, แคลคูลัสของสิ่งปลูกสร้าง, โดยการλPω_และเพิ่มประเภท polymorphic ในอดีต∀a:k.AและระดับเทอมเชิงนามธรรมΛa:k. eและการประยุกต์ใช้e [A]มัน

ประเภทของระบบนี้แสดงออกได้ดีกว่าใน F-omega แต่มีความแข็งแรงในการคำนวณเหมือนกัน


3
แน่นอนว่า CoC ในทางเทคนิค (ที่ไม่มีสัจพจน์) มีตัวแบบตั้งทฤษฎีอย่างน้อยที่สุดเท่าที่ CiC พวกเขาก็ไม่ค่อยเก่งในการสร้างแบบจำลองสถานการณ์ที่เราต้องการซึ่งก็คือ CoC ที่มีสัจพจน์สำหรับจำนวนธรรมชาติ (พูด, ) 01
ดี้

2
ฉันยังจริงๆขอบคุณข้อมูลอ้างอิงใน conservativity ของกว่า STLC ดูเหมือนว่าจะไม่ชัดเจน λω_
cody

3
@ โคดี้: ฉันไม่รู้การอ้างอิง - เควิน Watkins ร่างหลักฐานสำหรับฉันบนไวท์บอร์ด! แนวคิดคือคุณใช้คำที่พิมพ์ในλω_ใส่ประเภททั้งหมดลงในแบบฟอร์มเบต้ายาวปกติแล้วฝังลงใน STLC โดยแนะนำประเภทอะตอมสดสำหรับรูปแบบปกติที่แตกต่างกันในโปรแกรมต้นฉบับ จากนั้นจะเห็นได้ชัดว่าลำดับการลดต้องเรียงกันแบบหนึ่งต่อหนึ่ง
Neel Krishnaswami

1
@ user833970 ความจริงที่ว่าไม่ได้เป็นจริงได้ง่ายกว่าข้อเท็จจริงอื่น ๆ ที่คุณพูดถึงและไม่มีอะไรเกี่ยวข้องกับการเข้ารหัสของn a t : มันมาจากความจริงที่ว่ามีรูปแบบที่ไม่เกี่ยวข้องกับการพิสูจน์ของ CC ประเภทใดมีองค์ประกอบได้มากที่สุดหนึ่งรายการ นี่คือคุณสมบัติที่ไม่ดีถ้าคุณต้องการตรรกะที่มีประเภทที่มีมากกว่าหนึ่งองค์ประกอบ (พูด nat) การอ้างอิงคือ: โมเดลที่ไม่เกี่ยวข้องที่พิสูจน์ได้ง่ายของ CCโดย Miquel และ Werner 01nat
ดี้

1
คุณบอกว่า Fw เป็น "พลังที่ยิ่งใหญ่กว่า" มากกว่า System F คุณได้รับการอ้างอิงสำหรับสิ่งนี้หรือไม่? โดยเฉพาะอย่างยิ่งมีฟังก์ชั่นเกี่ยวกับตัวเลขธรรมชาติที่สามารถพิสูจน์ได้ทั้งหมดใน Fw แต่ไม่ใช่ใน F?
Thorsten Altenkirch

21

ฉันมักจะต้องการลองและสรุปแต่ละมิติของ -cube และสิ่งที่พวกเขาเป็นตัวแทนดังนั้นฉันจะให้ภาพนี้λ

แต่ก่อนอื่นคุณควรพยายามที่จะทำให้ยุ่งเหยิงปัญหาต่าง ๆ ทฤษฎีบทโต้ตอบ Coq สอบมาตรจะขึ้นอยู่กับประเภททฤษฎีพื้นฐานบางครั้งความรักที่เรียกว่าแคลคูลัสของการก่อสร้างอุปนัยกับจักรวาล คุณจะทราบว่านี่เป็นคำพูดที่มากกว่าแค่คำว่า "แคลคูลัสแห่งการก่อสร้าง" และแน่นอนมีสิ่งต่าง ๆ มากมายในนั้นมากกว่าแค่ CoC โดยเฉพาะอย่างยิ่งฉันคิดว่าคุณสับสนเกี่ยวกับคุณลักษณะที่เหมาะสมใน CoC โดยเฉพาะอย่างยิ่งความแตกต่าง Set / Prop และจักรวาลไม่ปรากฏใน CoC

ฉันจะไม่ให้ภาพรวมทั้งหมดของระบบ Pure Type ที่นี่ แต่กฎสำคัญ (สำหรับPTS ที่ทำงานได้เช่น CoC) มีดังต่อไปนี้

ΓA:sΓ,x:AB:kΓΠx:A.B : k (s,k)R

s,kS(s,k)RS

SRΠx:A.B

S

{,}
R={(,),(,),(,),(,)}

ดังนั้นเราจึงมีกฎ 4 ข้อที่ตรงกับวัตถุประสงค์ที่แตกต่างกัน 4 ประการ:

  • (,)

  • (,)

  • (,)

  • (,)

ฉันจะอธิบายรายละเอียดเหล่านี้โดยละเอียด


ABΠx:A.BxB

natboolx=yxy

listlist:listnat,listbool(,)

Πt:. tt
λ(t:)(x:t).xΠt:._(,)tt(,)

AB:=Πt:. (ABt)t
AB:=Πt:. (At)(Bt)t
:=Πt:. t
:=Πt:. tt
x:A. P(x):=Πt:. (Πy:A. P(y)t)t
(,)

(,)

(,)

Πc:.  c natc nat

0=1

= : natnat
= : Πt:. tt
natnat(,)

ii=1,2,3,i:i+1

(i,i)

ΓA:ผมΓA:J ผมJ

ด้วยประเภทและกฎระเบียบพิเศษเหล่านี้คุณจะได้รับสิ่งที่ไม่ใช่ PTS แต่เป็นสิ่งที่ใกล้เคียง นี่คือ (เกือบ) แคลคูลัสเสริมของการก่อสร้างซึ่งใกล้เคียงกับพื้นฐานของ Coq ชิ้นส่วนที่ขาดหายไปขนาดใหญ่ที่นี่คือประเภทอุปนัยซึ่งฉันจะไม่พูดคุยที่นี่

แก้ไข:มีการอ้างอิงที่ค่อนข้างดีที่อธิบายคุณสมบัติต่าง ๆ ของการเขียนโปรแกรมภาษาในกรอบของ PTSes โดยการอธิบาย PTS ซึ่งเป็นตัวเลือกที่ดีสำหรับการเป็นตัวแทนระดับกลางของภาษาโปรแกรมการทำงาน:

Henk: ภาษากลางระดับกลาง SP Jones & E. Meijer


2
หัวข้อขั้นสูงในประเภทและการเขียนโปรแกรมภาษาS2.6และS2.7
Kaveh

2
BTW "ประเภทตระกูล" มักจะเรียกว่าประเภทที่สูงกว่า
Martin Berger

1
PTS เป็นความคิดที่ดีเมื่อ 20 ปีก่อน แต่สิ่งต่าง ๆ ได้ดำเนินต่อไป
Thorsten Altenkirch

@ThorstenAltenkirch ไม่จำเป็นสำหรับการแยกตัวออกจากกัน Thorsten! ยังมีเรื่องสนุก ๆ ที่ต้องพิจารณาเกี่ยวกับ PTS เช่นงานของเบอร์นาร์ดเกี่ยวกับเรื่องพารามิเตอร์
ดี้

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