Agda ve Idris arasındaki farklar


165

Bağımlı tipte programlamaya dalmaya başladım ve Agda ve Idris dillerinin Haskell'e en yakın olduğunu buldum, o yüzden orada başladım.

Sorum şu: aralarındaki temel farklar nelerdir? Tip sistemleri her ikisinde de eşit derecede açık mı? Kapsamlı bir karşılaştırmalı ve faydalar hakkında bir tartışma yapmak harika olurdu.

Bazılarını tespit edebildim:

  • Idris'in Haskell tipi sınıfları vardır, Agda ise örnek argümanlarla devam eder
  • İdris monadik ve uygulamalı gösterimi içerir
  • Her ikisinin de bir tür yeniden birleştirilebilir sözdizimine sahip olduğu görülüyor, ancak aynı olup olmadıklarından emin değiller.

Düzenleme : Bu sorunun Reddit sayfasında daha fazla cevap var: http://www.reddit.com/r/dependent_types/comments/q8n2q/agda_vs_idris/


1

4
Kayıt için: Agda'nın günümüzde de monadik ve uygulamalı gösterimleri var.
gallais

Yanıtlar:


190

Bunu cevaplayacak en iyi kişi olmayabilirim, Idris'i uyguladığım için muhtemelen biraz önyargılıyım! SSS - http://docs.idris-lang.org/en/latest/faq/faq.html - üzerinde söyleyecek bir şey var, ancak bunu biraz genişletmek için:

İdris, sıfırdan teorem kanıtlama öncesinde genel amaçlı programlamayı destekleyecek şekilde tasarlanmıştır ve bu nedenle tip sınıfları, gösterim, deyim parantezleri, liste kavrayışları, aşırı yükleme ve benzeri gibi üst düzey özelliklere sahiptir. Idris, taktik tabanlı bir detaylandırıcıya dayandığı için, taktik tabanlı bir interaktif teorem kanıtlayıcıya bir arayüz var olmasına rağmen (en azından henüz Coq gibi değil, en azından henüz değil), Idris interaktif kanıtın önüne geçiyor.

Idris'in iyi desteklemeyi amaçladığı başka bir şey de Gömülü DSL uygulamasıdır. Haskell ile do notasyon ile uzun bir yol elde edebilirsiniz ve Idris ile de yapabilirsiniz, ancak gerekirse uygulama ve değişken bağlama gibi diğer yapıları da yeniden bağlayabilirsiniz. Bununla ilgili daha fazla bilgiyi öğreticide veya tüm ayrıntıları bu makalede bulabilirsiniz: http://eb.host.cs.st-andrews.ac.uk/drafts/dsl-idris.pdf

Başka bir fark derlemedir. Agda öncelikle Haskell, Idris C ile gider. Agda için Idris ile aynı arka ucu kullanan deneysel bir arka uç vardır. C aracılığıyla. Idris'in birincil hedefi her zaman verimli kod üretmek olacaktır - şu anda yaptığımızdan çok daha iyisini yapabiliriz, ancak üzerinde çalışıyoruz.

Agda ve Idris'deki tip sistemleri birçok açıdan oldukça benzerdir. Bence asıl fark evrenlerin ele alınmasında. Agda'nın evren polimorfizmi vardır, Idris'in kümülatifliği vardır (ve bunu Set : Setçok kısıtlayıcı bulursanız ve kanıtlarınızın sağlam olabileceğini düşünmezseniz her ikisine de sahip olabilirsiniz).


49
Ne demek, "... cevap verecek en iyi kiţi deđil ..."? İdris'i yakından tanıdığından, cevap verecek en iyi insanlardan birisiniz. Şimdi sadece cevap vermek için NAD'e ihtiyacımız var ve tüm resme sahibiz :) Cevaplamak için zaman ayırdığınız için teşekkürler.
Alex R

9
Kümülatifite hakkında daha fazla bilgi edinebileceğim bir yer var mı? Bunu daha önce hiç duymadım ...
serras

13
Adam Chlipala'nın kitabı muhtemelen en iyi yer:
Edwin Brady

8
HoTT kitabının ilk bölümü, kısaca, oldukça açık bir şekilde açıklamaktadır.
David Christiansen

50

Idris ve Agda arasındaki bir diğer fark, Idris'in önerme eşitliğinin heterojen, Agda'nın homojen olmasıdır.

Diğer bir deyişle, İdris'deki eşitliğin varsayılan tanımı şöyle olacaktır:

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

Agda'dayken

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

Agda tanımındaki l, Edwin'ın cevabında bahsettiği evren polimorfizmiyle ilgili olduğu için göz ardı edilebilir.

Önemli fark, Agda'daki eşitlik türünün A'nın iki öğesini bağımsız değişken olarak alması, Idris'de ise potansiyel olarak farklı türlerde iki değer alabilmesidir .

Başka bir deyişle, İdris'de, farklı tiplerde iki şeyin eşit olduğu iddia edilebilir (kanıtlanamayan bir iddia olsa bile), Agda'da ise bu ifade saçmalıktır.

Bunun tür teorisi için, özellikle de homotopi tür teorisi ile çalışmanın fizibilitesi açısından önemli ve geniş kapsamlı sonuçları vardır. Bunun için heterojen eşitlik işe yaramaz çünkü HoTT ile tutarsız bir aksiyom gerektirir. Öte yandan, homojen eşitlikle doğrudan ifade edilemeyen heterojen eşitliğe sahip faydalı teoremleri belirtmek mümkündür.

Belki de en kolay örnek, vektör birleştirme ilişkisidir. Bu şekilde tanımlanan vektörler olarak adlandırılan uzunluk indeksli listeler verildiğinde:

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

ve aşağıdaki türle birleştirme:

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

bunu kanıtlamak isteyebiliriz:

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

Bu ifade homojen eşitlik altında saçmalıktır, çünkü eşitliğin sol tarafının türü Vect (n + (m + o)) ave sağ tarafının türü vardır Vect ((n + m) + o) a. Heterojen eşitliğe sahip mükemmel mantıklı bir ifade.


26
Agda'nın standart kütüphanesine Agda'nın temel teorisinden daha fazla yorum yapıyor gibi görünüyorsunuz, ancak standart kütüphane bile hem homojen hem de heterojen eşitliği içeriyor ( cse.chalmers.se/~nad/listings/lib/… ). İnsanlar sadece mümkün olan yerlerde eskisini daha sık kullanma eğilimindedir. İkincisi, türlerin eşit olduğu bir ifadeye ve ardından değerler hakkında bir ifadeye eşdeğerdir. Tür eşitliğinin garip (HoTT) olduğu bir dünyada heteq bir garip ifadedir.
Gizemli Dan

6
Bu ifadenin homojen eşitlik altında nasıl saçmalık olduğunu anlamıyorum. Yanılmıyorsam (n + (m + o))ve ((n + m) + o)yargısal olarak +on ile olan ilişkisine (indüksiyon ilkesinden türetilmiş) eşit değilse. Buna göre eşitliğin her iki tarafı da aynı tiptedir. Eşitlik türleri arasındaki fark önemlidir, ancak bunun bunun bir örneği olduğunu görmüyorum.

5
@Abhishek yargı eşitliği tanım eşitliği ile aynı değil mi? Sanırım (n + (m + o)) ve ((n + m) + o) önerme eşittir fakat tanımlayıcı / yargısal olarak eşit değildir demek istediniz.
Tom Crockett

3
sağ. Yargı eşitliği dediğimde öneri eşitliği demek istedim. Afedersiniz. Düzeltilmiş yorum şöyledir: (n + (m + o)) ve ((n + m) + o), önerme bakımından eşittir ancak tanımsal olarak eşit değildir. A: A'nız varsa, a: B yalnızca A ve B tanım olarak eşit türlerse geçerlidir. Daktilo kontrolünün karar verilebilirliği için tanımsal eşitliğin karar verilebilir olması gerekir. Genişlemeli tip teorilerinde, tanımsal eşitlik, önerme eşitliği ile örtüşmektedir ve bu nedenle, yazım denetimi kararsızdır. Coq'ta, tanımsal eşitlik sadece hesaplama, alfa eşitliği, tanımsal açılımı içerir.
Abhishek Anand
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.