8

ऐसे Agda, Idris, या प्रकार एक्सटेंशन के साथ Haskell जैसी भाषाओं में, वहाँ `रेफ्ल` चीज?

data a :~: b where 
    Refl :: a :~: a 

a :~: b मतलब यह है कि a और b ही कर रहे हैं की तरह निम्नलिखित

के = प्रकार प्रकार है।

ऐसे प्रकार को calculus of constructions या Morte (जो निर्माण के गणक के आधार पर प्रोग्रामिंग भाषा है) में परिभाषित किया जा सकता है?

+2

प्रत्येक अपरिवर्तनीय प्रकार को कोक में एन्कोड किया जा सकता है, लेकिन कोई संबद्ध _dependent_ उन्मूलन सिद्धांत (गैर-निर्भर उन्मूलन उपलब्ध नहीं है) के साथ। (यह भी ध्यान रखें कि 'ए: ~: बी' एक प्रकार है, लेकिन' रेफ्ल' एक मान है।) – chi

+1

निर्माण का कैलकुस लैम्ब्डा घन का "शीर्ष" है। हास्केल, आगाडा और इडिस "सीओसी" नीचे हैं। इसलिए यह सरल तथ्य के लिए संभव होना चाहिए कि सीओसी अधिक अभिव्यक्तिपूर्ण है। (कोई यह बता सकता है कि क्या मैं इस कटौती में गलत हूं?) – Bakuriu

+3

@ बाकुरीयू असल में, आगादा/कोक कोओसी से बाहर हैं क्योंकि वे अपरिवर्तनीय प्रकारों को आश्रित उन्मूलन के साथ भी अनुमति देते हैं, जिसमें कोक की कमी है। आगादा स्ट्रिकर के वसंत के लिए भी साबित होता है, जिसका अर्थ है कि समानता के '2, क्यू' समान समानता 'ए = बी' बराबर (' पी = क्यू') होना चाहिए - कोक या कोक (उर्फ सीआईसी) में अनुपलब्ध होना चाहिए। – chi

उत्तर

11

मानक सीओसी में a :~: b के चर्च एन्कोडिंग है:

(a :~: b) = 
    forall (P :: * -> * -> *). 
     (forall c :: *. P c c) -> 
     P a b 

Refl जा रहा है

Refl a :: a :~: a 
Refl a = 
    \ (P :: * -> * -> *) 
    (h :: forall (c::*). P c c) -> 
    h a 

ऊपर प्रकार के बीच समानता का निर्माण करता। शर्तों के बीच समानता के लिए, :~: संबंध को अतिरिक्त तर्क t :: * लेना चाहिए, जहां a b :: t है।

((:~:) t a b) = 
    forall (P :: t -> t -> *). 
     (forall c :: t. P c c) -> 
     P a b 

Refl t a :: (:~:) t a a 
Refl t a = 
    \ (P :: t -> t -> *) 
    (h :: forall (c :: t). P c c) -> 
    h a 
+0

दिलचस्प। क्या '0: ~: 1' से विरोधाभास प्राप्त करना संभव है, जैसे आप अन्य भाषाओं में कर सकते हैं? (ओह रुको, मैं देखता हूं। बस एक समानता कार्य करें जो गलत (''' के बजाय सत्य और 'शून्य' के बदले में लौटाता है। मुझे लगता है कि यह काम करेगा।) – PyRulez

+0

(इसके अलावा, मैं देखता हूं कि यह आसानी से अन्य जीएडीटी को कैसे सामान्यीकृत करता है ।) – PyRulez

+2

@PyRulez हां। चर्च अंकों के साथ, '0 एफ x = x' और' 1 एफ x = f x' (मॉड्यूलो अतिरिक्त प्रकार के तर्क)। इसका उपयोग करके, आप '0 (सही सत्य) गलत = झूठा' और' 1 (सत्य सच) गलत = सही हो सकता है। मान लीजिए '0: ~: 1' और 'पी एक्स वाई = (एक्स (कॉन्स ट्रू) झूठा लेना) <-> (वाई (कॉन्स ट्रू) झूठा)', हम 'गलत <-> ट्रू' साबित कर सकते हैं। – chi

संबंधित मुद्दे