Agda और इदरिस के बीच अंतर


165

मैं भरोसेमंद रूप से टाइप किए गए प्रोग्रामिंग में गोता लगाना शुरू कर रहा हूं और पाया है कि एजडा और इडरिस भाषा हास्केल के सबसे करीब हैं, इसलिए मैंने वहां शुरू किया।

मेरा प्रश्न है: उनके बीच मुख्य अंतर क्या हैं? क्या टाइप सिस्टम दोनों में समान रूप से व्यापक हैं? व्यापक तुलनात्मक और लाभों के बारे में चर्चा करना बहुत अच्छा होगा।

मैं कुछ हाजिर कर पाया:

  • इदरिस के पास एक क्लास है ला हास्केल, जबकि एजडा उदाहरण तर्क के साथ जाता है
  • इदरीस में मोनैडिक और ऐप्लीकेशन नोटेशन शामिल हैं
  • लगता है कि दोनों में कुछ प्रकार के विद्रोही वाक्य-विन्यास हैं, हालांकि वास्तव में यकीन नहीं है कि वे समान हैं।

संपादित करें : इस प्रश्न के Reddit पृष्ठ में कुछ और उत्तर हैं: http://www.reddit.com/r/dependent_types/comments/q8n2q/agda_vs_idris/


1
आप कोक aswel पर एक नज़र रखना चाहते हैं, वाक्यविन्यास haskell से एक लाख मील दूर नहीं है और यह प्रकार वर्गों का उपयोग करने के लिए आसान है :)

4
रिकॉर्ड के लिए: अगाडा में आजकल मौद्रिक और अनुप्रयोग संबंधी सूचनाएं भी हैं।
गैलिस

जवाबों:


190

मैं इसका उत्तर देने वाला सबसे अच्छा व्यक्ति नहीं हो सकता हूं, जैसा कि इदरीस ने लागू किया है मैं शायद थोड़ा पक्षपाती हूं! अक्सर पूछे जाने वाले प्रश्न - http://docs.idris-lang.org/en/latest/faq/faq.html - इस पर कुछ कहना है, लेकिन उस पर थोड़ा विस्तार करना है:

इदरीस को प्रमेय सिद्ध करने से पहले सामान्य प्रयोजन प्रोग्रामिंग का समर्थन करने के लिए जमीन से डिजाइन किया गया है, और जैसे कि उच्च स्तर की विशेषताएं हैं जैसे कि टाइप क्लास, नोटेशन, मुहावरे कोष्ठक, सूची समझ, अतिभार और इतने पर। इदरीस इंटरएक्टिव प्रूफ के आगे उच्च स्तरीय प्रोग्रामिंग डालता है, हालाँकि क्योंकि इदरीस एक टैक्टिक-आधारित एलबोरेटर पर बनाया गया है, एक टैक्टिक आधारित इंटरएक्टिव प्रमेय प्रोवर (कोक की तरह थोड़ा सा है, लेकिन उतना उन्नत नहीं है, कम से कम अभी तक) के लिए एक इंटरफ़ेस है।

एक और बात इदरिस का उद्देश्य अच्छी तरह से समर्थन करना है एंबेडेड डीएसएल कार्यान्वयन। हास्केल के साथ आपको नोटेशन के साथ एक लंबा रास्ता मिल सकता है, और आप इदरीस के साथ भी कर सकते हैं, लेकिन आप अन्य कंस्ट्रक्शन जैसे एप्लिकेशन और वैरिएबल बाइंडिंग को भी रिबंड कर सकते हैं यदि आपको आवश्यकता है। आप इस पर अधिक विवरण ट्यूटोरियल में देख सकते हैं, या इस पत्र में पूर्ण विवरण: http://eb.host.cs.st-andrews.ac.uk/drafts/dsl-idris.pdf

एक और अंतर संकलन में है। Agda मुख्य रूप से Haskell, Idris के माध्यम से C. के माध्यम से जाता है। Agda के लिए एक प्रयोगात्मक बैक एंड है जो Idris के समान बैक एंड का उपयोग करता है। C. के माध्यम से मुझे नहीं पता कि यह कितनी अच्छी तरह से बनाए रखा गया है। इदरीस का एक प्राथमिक लक्ष्य हमेशा कुशल कोड उत्पन्न करना होगा - हम वर्तमान में जो करते हैं उससे बहुत बेहतर कर सकते हैं, लेकिन हम इस पर काम कर रहे हैं।

Agda और Idris में टाइप सिस्टम कई महत्वपूर्ण मामलों में समान हैं। मुझे लगता है कि मुख्य अंतर ब्रह्मांडों की हैंडलिंग में है। अगाडा में ब्रह्मांड बहुरूपता है, इदरीस में सहक्रियाशीलता है (और आप Set : Setदोनों में हो सकते हैं यदि आपको यह बहुत प्रतिबंधक लगता है और इस बात का बुरा मत मानना ​​कि आपके प्रमाण निराधार हो सकते हैं)।


49
आपका क्या मतलब है, "... जवाब देने के लिए सबसे अच्छा व्यक्ति नहीं ..."? आप जवाब देने के लिए सबसे अच्छे लोगों में से एक हैं, क्योंकि आप इदरीस को आत्मीयता से जानते हैं। अब हमें बस उत्तर के रूप में अच्छी तरह से उत्तर देने की आवश्यकता है, और हमारे पास पूरी तस्वीर है :) उत्तर देने के लिए समय निकालने के लिए धन्यवाद।
एलेक्स आर

9
क्या ऐसी कोई जगह है जहाँ मैं कम्युलेटिविटी के बारे में अधिक पढ़ सकता हूँ? मैंने पहले कभी इसके बारे में नहीं सुना है ...
सेरास

13
एडम चिप्पला की किताब शायद सबसे अच्छी जगह है:
एडविन ब्रैडी

8
HoTT पुस्तक का पहला अध्याय भी स्पष्ट रूप से स्पष्ट रूप से वर्णन करता है।
डेविड क्रिस्टियनसेन David

50

इदरीस और अगाडा के बीच एक अंतर यह है कि इदरीस की प्रस्तावना समानता विषम है, जबकि अगाडा सजातीय है।

दूसरे शब्दों में, इदरीस में समानता की मूल परिभाषा यह होगी:

data (=) : {a, b : Type} -> a -> b -> Type where
  refl : x = x

जबकि आगरा में, यह है

data _≡_ {l} {A : Set l} (x : A) : A → Set a where
    refl : x ≡ x

अगा डिफैंशन में l को नजरअंदाज किया जा सकता है, क्योंकि इसका ब्रह्मांड के बहुरूपता से क्या लेना-देना है, जो एडविन ने अपने जवाब में उल्लेख किया है।

महत्वपूर्ण अंतर यह है कि एजडा में समानता प्रकार ए के दो तत्वों को तर्क के रूप में लेता है, जबकि इदरीस में यह संभावित विभिन्न प्रकारों के साथ दो मान ले सकता है ।

दूसरे शब्दों में, इदरीस में कोई यह दावा कर सकता है कि अलग-अलग प्रकार की दो चीजें बराबर हैं (भले ही यह एक असुरक्षित दावा होने के कारण समाप्त हो जाए), जबकि अगाडा में, बहुत ही बयान बकवास है।

इस प्रकार के सिद्धांत के लिए महत्वपूर्ण और व्यापक परिणाम हैं, विशेष रूप से होमोटॉपी प्रकार के सिद्धांत के साथ काम करने की व्यवहार्यता के बारे में। इसके लिए, विषम समानता सिर्फ इसलिए काम नहीं करेगी क्योंकि इसमें एक स्वयंसिद्ध की आवश्यकता है जो HoTT के साथ असंगत है। दूसरी ओर, समानताओं के साथ उपयोगी प्रमेयों को बताना संभव है, जिन्हें सीधे तौर पर सजातीय समानता के साथ नहीं कहा जा सकता है।

शायद सबसे आसान उदाहरण वेक्टर संघनन की संगति है। इस प्रकार परिभाषित वैक्टर नामक लंबाई-अनुक्रमित सूचियों को देखते हुए:

data Vect : Nat -> Type -> Type where
  Nil : Vect 0 a
  (::) : a -> Vect n a -> Vect (S n) a 

और निम्नलिखित प्रकार के साथ संयोजन:

(++) : Vect n a -> Vect m a -> Vect (n + m) a

हम यह साबित करना चाहते हैं कि:

concatAssoc : (xs : Vect n a) -> (ys : Vect m a) -> (zs : Vect o a) ->
              xs ++ (ys ++ zs) = (xs ++ ys) ++ zs

यह कथन सजातीय समानता के तहत बकवास है, क्योंकि समानता के बाईं ओर का प्रकार Vect (n + (m + o)) aऔर दाईं ओर का प्रकार है Vect ((n + m) + o) a। यह विषम समानता के साथ एक पूरी तरह से समझदार कथन है।


26
आपको लगता है कि एजडा के अंतर्निहित सिद्धांत की तुलना में एजडा मानक पुस्तकालय पर अधिक टिप्पणी की जा रही है, लेकिन यहां तक ​​कि मानक पुस्तकालय में समरूप और विषम समानता ( cse.chalmers.se/~nad/listings/bib/… ) दोनों शामिल हैं । लोग बस पूर्व का उपयोग अक्सर जहां संभव हो करते हैं। उत्तरार्द्ध एक बयान के बराबर है कि मान के बारे में एक के बाद एक प्रकार समान हैं। एक ऐसी दुनिया में जहाँ प्रकार की समानता अजीब है (HoTT) तो हेटेक एक अजीब बयान है।
मिस्टीरियस डैन

6
मुझे समझ में नहीं आता कि कैसे यह बयान सजातीय समानता के तहत बकवास है। जब तक मैं गलत कर रहा हूँ, (n + (m + o))और ((n + m) + o)कर रहे हैं judgmentally की संबद्धता से बराबर +पर (प्रेरण सिद्धांत से प्राप्त)। तदनुसार समानता के प्रत्येक पक्ष में एक ही प्रकार होता है। समानता के प्रकारों के बीच का अंतर महत्वपूर्ण है, लेकिन मैं यह नहीं देखता कि यह कैसे इसका एक उदाहरण है।

5
@ अभिषेक निर्णयिक समानता नहीं है जो कि समान समानता है? मुझे लगता है कि आपके कहने का मतलब है (n + (m + o)) और ((n + m) + o) प्रस्तावित रूप से समान हैं लेकिन परिभाषात्मक / न्यायिक रूप से समान नहीं हैं।
टॉम क्रोकेट

3
सही। जब मैंने निर्णयात्मक समानता की बात की, तो मेरा मतलब था कि समानता का प्रस्ताव। माफ़ करना। यहाँ सही टिप्पणी है: (n + (m + o)) और ((n + m) + o) प्रस्तावित रूप से समान हैं, लेकिन समान रूप से समान नहीं हैं। यदि आपके पास a: A, a है, तो B तभी धारण करता है, जब A और B, समान रूप से समान प्रकार के हों। टाइपकास्टिंग की निर्णायकता के लिए, निश्चित समानता को निर्णायक होना चाहिए। बहुआयामी प्रकार के सिद्धांतों में, निश्चित समानता समानता प्रस्ताव के साथ मेल खाती है और इसलिए टाइपेकिटेकिंग अपरिहार्य है। Coq में, निश्चित समानता में केवल संगणना, अल्फा समानता, निश्चित रूप से अनफिल्डिंग शामिल है।
अभिषेक आनंद
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.