คำถามติดแท็ก polymorphism

2
System F ที่มีคู่มีคุณสมบัติในการทำให้ปกติมีความแข็งแรงและการลดของวัตถุหรือไม่?
มันง่ายที่จะดูในหนังสือตำราจำนวนมากที่พิสูจน์ถึงการลดลงของวัตถุและการกลับคืนสู่ปกติที่แข็งแกร่งสำหรับ System F เช่นกันบางครั้งก็มีคำจำกัดความของ System F พร้อมคู่ซึ่งโดยที่ (t, r) เป็นคำศัพท์ไม่ใช่แค่การเข้ารหัส คำถามคือสิ่งที่จะอ้างอิงสำหรับระบบนี้

2
polymorphism ระดับสูงกว่าประเภทที่ไม่มีกล่อง
ฉันมีภาษาที่ไม่มีประเภทกล่องโดยค่าเริ่มต้นด้วยการอนุมานประเภทตาม Hindley – Milner ฉันต้องการเพิ่ม polymorphism ที่มีอันดับสูงกว่าโดยเฉพาะอย่างยิ่งสำหรับการทำงานกับประเภทที่มีอยู่ ฉันคิดว่าฉันเข้าใจวิธีตรวจสอบประเภทเหล่านี้ แต่ฉันไม่แน่ใจว่าต้องทำอย่างไรเมื่อรวบรวม ขณะนี้ฉันรวบรวมคำจำกัดความ polymorphic โดยการสร้างความเชี่ยวชาญเช่นเทมเพลต C ++ เพื่อให้สามารถทำงานกับค่าที่ไม่ได้ทำกล่อง เช่นให้คำจำกัดความของf<T>หากโปรแกรมเรียกใช้เท่านั้นf<Int32>และf<Char>จากนั้นเฉพาะความเชี่ยวชาญเหล่านั้นจะปรากฏในโปรแกรมรวบรวม (ตอนนี้ฉันกำลังรวบรวมโปรแกรมทั้งหมดไว้) แต่เมื่อผ่านฟังก์ชั่น polymorphic เป็นอาร์กิวเมนต์ฉันไม่เห็นว่าฉันสามารถสร้างความเชี่ยวชาญเฉพาะทางแบบสแตติกได้เนื่องจากฟังก์ชั่นสามารถเลือกได้ที่รันไทม์ ฉันไม่มีทางเลือกนอกจากใช้การแสดงแบบกล่องหรือไม่? หรือมีวิธีแก้ไขปัญหาหรือไม่ ความคิดแรกของฉันคือการเข้ารหัสอย่างใด rank- n polymorphism เป็นอันดับ 1 แต่ผมไม่เชื่อว่ามันเป็นไปได้ในทั่วไปเพราะสูตรในตรรกะที่สร้างสรรค์ไม่จำเป็นต้องมี prenex แบบปกติ

1
ใน System F à la Church เราสามารถทำให้การอนุมานแบบอัตโนมัติสำหรับการกำจัดทั้งหมดได้หรือไม่?
คำถามมีดังต่อไปนี้ โดยทั่วไปเมื่อมีคำเช่นΛ X. เสื้อΛX.t\Lambda X.tเราสามารถกำจัด forall โดยใช้คำนี้กับประเภทเช่น( Λ X. t ) [ T] → t [ X: = T](ΛX.t)[T]→t[X:=T](\Lambda X.t)[T]\to t[X:=T]. ทีนี้สมมติว่านี่คือลูกศรและเราต้องการโต้แย้งมันแล้วเราจะต้องใช้เทอมนี้กับประเภทที่เหมาะสมเพื่อให้สามารถรับอาร์กิวเมนต์ได้ นั่นคือสิ่งที่ฉันถามถ้าฉันสามารถทำให้เป็นอัตโนมัติ: มันเป็นไปได้ที่จะสร้างฟังก์ชั่นฉff รับสองเทอมและคืนค่าประเภทนั้น ฉ&lt; Λ X. t &gt; &lt; r &gt;f&lt;ΛX.t&gt;&lt;r&gt;f<{\Lambda X.t}><{r}> โปรดระบุประเภทที่จำเป็นสำหรับการแทนที่ด้วย XXX ใน ttt ดังนั้น ttt สามารถยอมรับข้อโต้แย้ง rrr? ตัวอย่างบางส่วน: f&lt;ΛX.λxX→X.t&gt;&lt;λxT.x&gt;=Tf&lt;ΛX.λxX→X.t&gt;&lt;λxT.x&gt;=Tf<{\Lambda X.\lambda x^{X\to X}.t}><{\lambda x^T.x}>=T. f&lt;ΛX.λxX.r&gt;&lt;(λxR.tT) s&gt;=Tf&lt;ΛX.λxX.r&gt;&lt;(λxR.tT) …
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.