यह संभव बिना या तो स्पष्ट साबित करते हुए कि, (क्या GHC स्वचालित रूप से एक हास्केल 98 प्रकार के लिए Eq
उदाहरण के रूप में प्राप्त कर सकते हैं के समान) समानता का एक सरल वाक्यात्मक धारणा को परिभाषित करने के है प्रत्येक डेटा कन्स्ट्रक्टर इंजेक्शनिव है, या कुछ समान कर रहा है, जैसे कि प्रत्येक कन्स्ट्रक्टर के पीछे हटाना और cong
का उपयोग करना?समानता परीक्षण
दूसरे शब्दों में, प्रति रचनाकार एक सहायक कार्य शुरू करने के बजाय डेटा कन्स्ट्रक्टर की इंजेक्शनिटी का अधिक उपयोग करना संभव है?
निम्नलिखित उदाहरण के रूप में प्राकृतिक संख्याओं का उपयोग करता है।
module Eq where
open import Function
open import Relation.Binary
open import Relation.Binary.PropositionalEquality
open import Relation.Nullary
data ℕ : Set where
zero : ℕ
suc : ℕ → ℕ
-- How to eliminate these injectivity proofs?
suc-injective : ∀ {n m} → suc n ≡ suc m → n ≡ m
suc-injective refl = refl
_≟_ : Decidable {A = ℕ} _≡_
zero ≟ suc _ = no (λ())
suc _ ≟ zero = no (λ())
zero ≟ zero = yes refl
suc n ≟ suc m with n ≟ m
suc n ≟ suc .n | yes refl = yes refl
... | no n≢m = no (n≢m ∘ suc-injective)
एक cong (λ { zero → zero ; (suc x) → x })
द्वारा suc-injective
, एक समारोह जो suc
उलट परिभाषित करने तक यानी की जगह सकता है, लेकिन है कि अभी भी निर्माता प्रति एक सहायक समारोह के बॉयलरप्लेट आवश्यकता है, और इस तरह के कार्यों को कुछ हद तक जरूरत कुल होना करने के लिए की वजह से परिभाषित करने के लिए बदसूरत हैं ।
(सामान्य चेतावनियां कर रहे हैं। लागू स्पष्ट कुछ कमी।)
मुझे नहीं लगता कि आपको कुछ स्पष्ट याद आया। मुझे ऐसा कुछ भी पता नहीं था, इसलिए मैं खोज गया लेकिन दुख की बात कुछ भी नहीं मिली। – Vitus
@ विटस क्या हम संभवतः उपयोग के कुछ प्राप्त करने के लिए प्रतिबिंब का उपयोग कर सकते हैं? जरूरी नहीं कि पूर्ण डीसी। eqquality, बस dec। बाहरीतम रचनाकारों की समानता भी सहायक होगी। –
आपका मतलब 'अन-इंजेक्शन' को 'अनकोट (इंजेक्शनिव (उद्धरण सफल)) के साथ बदलने जैसा कुछ है? – Vitus