พิสูจน์ว่าλ x Ω ≠Ω in เป็นหนึ่งในเป้าหมายที่อับรามสกี้วางไว้สำหรับทฤษฎีแคลคูลัสแลมบ์ดาสันหลังยาวของเขา (หน้า 2 จากกระดาษของเขาซึ่งถูกอ้างถึงโดยอูเดย์เรดดี้) เพราะพวกเขาทั้งคู่อยู่ในรูปแบบปกติที่อ่อนแอ ตามนิยาม 2.7 เขากล่าวอย่างชัดเจนว่ากทพ. ลดλ x M x → M โดยทั่วไปไม่ถูกต้อง แต่เป็นไปได้ถ้า M ยุติในทุกสภาพแวดล้อม นี่ไม่ได้หมายความว่า M จะต้องเป็นฟังก์ชันทั้งหมด - เฉพาะที่การประเมิน M ต้องยุติ (โดยการลดแลมบ์ดาเป็นต้น)
คำถามของคุณดูเหมือนจะมีแรงจูงใจจากความกังวลในทางปฏิบัติ (การปฏิบัติงาน) อย่างไรก็ตามถึงแม้ว่ารายงาน Haskell อาจจะชัดเจนน้อยกว่า แต่ฉันสงสัยว่ามันเท่ากับλ x ith ด้วย⊥จะสร้างการใช้งานที่มีประโยชน์ของ Haskell; ไม่ว่าจะเป็นการดำเนินการของ Haskell '98 หรือไม่เป็นที่ถกเถียงกัน แต่ได้รับคำพูดเป็นที่ชัดเจนว่าผู้เขียนตั้งใจให้เป็นจริง
ในที่สุด seq ของวิธีการสร้างองค์ประกอบสำหรับประเภทการป้อนข้อมูลโดยพลการ? (ฉันรู้ว่า QuickCheck กำหนดประเภทของ Arbitrary สำหรับสิ่งนั้น แต่คุณไม่ได้รับอนุญาตให้เพิ่มข้อ จำกัด ดังกล่าวที่นี่) สิ่งนี้ละเมิดพาราเมตริก
อัปเดต : ฉันไม่สามารถจัดการรหัสนี้ได้ถูกต้อง (เพราะฉันไม่ค่อยคล่องแคล่วใน Haskel) และการแก้ไขนี้ดูเหมือนว่าจะต้องใช้runST
พื้นที่ซ้อนกัน ฉันพยายามใช้เซลล์อ้างอิงเดียว (ใน ST monad) เพื่อบันทึกองค์ประกอบตามอำเภอใจดังกล่าวอ่านในภายหลังและทำให้ใช้ได้อย่างเป็นสากล Parametricity พิสูจน์ว่าbreak_parametricity
ไม่สามารถกำหนดด้านล่างได้ (ยกเว้นกลับด้านล่างเช่นข้อผิดพลาด) ในขณะที่มันสามารถกู้คืนองค์ประกอบที่ seq เสนอของคุณจะสร้าง
import Control.Monad.ST
import Data.STRef
import Data.Maybe
produce_maybe_a :: Maybe a
produce_maybe_a = runST $ do { cell <- newSTRef Nothing; (\x -> writeSTRef cell (Just x) >> return x) `seq` (readSTRef cell) }
break_parametricity :: a
break_parametricity = fromJust produce_maybe_a
ฉันต้องยอมรับว่าฉันคลุมเครือเล็กน้อยเกี่ยวกับการพิสูจน์แบบพาราเมทริกที่จำเป็นที่นี่ แต่การใช้พาราเมตริกแบบไม่เป็นทางการเป็นมาตรฐานใน Haskell; แต่ฉันได้เรียนรู้จากงานเขียนของ Derek Dreyer ว่าทฤษฎีที่ต้องการนั้นได้ผลอย่างรวดเร็วในช่วงหลายปีที่ผ่านมา
การแก้ไข:
- ฉันไม่แน่ใจด้วยซ้ำว่าคุณต้องการส่วนขยายเหล่านั้นซึ่งได้รับการศึกษาสำหรับภาษาที่มีลักษณะคล้าย ML, ที่จำเป็นและไม่พิมพ์หรือว่าทฤษฎีคลาสสิกของพาราเมทริกตี้ครอบคลุม Haskell
- นอกจากนี้ฉันยังพูดถึง Derek Dreyer เพียงเพราะฉันเพิ่งเจองานของ Uday Reddy - ฉันได้เรียนรู้เกี่ยวกับเรื่องนี้เมื่อไม่นานมานี้จาก "แก่นแท้ของ Reynolds" (ฉันเพิ่งเริ่มอ่านวรรณคดีเรื่องพาราเมตริกเมื่อเดือนที่แล้ว)