परिणाम जो आप रेनॉल्ड्स की पैरामीट्रिकिटी से प्राप्त कर रहे हैं, और सबसे प्रसिद्ध रूप से वेडलर द्वारा theorems for free में दिखाया गया था।
मैंने मूलभूत पैरामीट्रिकिटी परिणामों को साबित करने का सबसे शानदार तरीका देखा है जिसे मैंने "सिंगलटन टाइप" की धारणा का उपयोग किया है। अनिवार्य रूप से, किसी भी एडीटी
दिया
data Nat = Zero | Succ Nat
एक अनुक्रमित परिवार (यह भी एक GADT के रूप में जाना)
data SNat n where
SZero :: SNat Zero
SSucc :: SNat n -> SNat (Succ n)
वहाँ मौजूद है और हम से एक untyped करने के लिए "मिटा" सभी प्रकार हमारी भाषा के लिए एक अर्थ विज्ञान दे सकते हैं भाषा जैसे Nat
और SNat
एक ही चीज़ को मिटा दें। फिर, उस भाषा
id (x :: SNat n) :: SNat n
SNat n
है केवल एक निवासी (अपने सिंगलटन), अर्थ विज्ञान के बाद से विलोपन द्वारा दिया जाता है की टाइपिंग नियमों से, कार्यों उनके तर्क का प्रकार, इसलिए केवल मूल्य से वापस उपयोग नहीं कर सकते किसी भी Nat
पर id
वह नंबर है जिसे आपने दिया था। अधिकांश मूलभूत परिणामों को साबित करने के लिए इस मूल तर्क को बढ़ाया जा सकता है और A Simple Proof Technique for Parametricity Results में कार्ल क्रैरी द्वारा उपयोग किया गया था, हालांकि मेरे पास प्रेजेंटेशन Stone and Harper
स्रोत
2012-11-27 06:05:50
पैडेंटिक होने के लिए, मुझे लगता है कि लोग आमतौर पर कहेंगे कि 'आईडी' 'a-> a' प्रकार का केवल' रोचक 'या' कुल 'फ़ंक्शन। 'अपरिभाषित' होस्केल में * किसी * प्रकार का हो सकता है, लेकिन यह एक उपयोगी कार्य नहीं है। आपको डीज़िन में भी रुचि हो सकती है, एक ऐसा प्रोग्राम जो संभवतः एक प्रकार से कार्यों को उत्पन्न करता है, http://lambda-the-ultimate.org/node/1178 –
@ जॉन डीजेन वास्तव में विशिष्टता साबित नहीं करता है, है ना? अगर यह मौजूद है तो यह उस प्रकार के कुछ फ़ंक्शन को पाता है। –
यह प्रश्न http://cs.stackexchange.com – Heatsink