2016-11-02 18 views
10

Agda'da boyut tipleri nelerdir? Ben nedeniyle aşağıdaki noktalara MiniAgda hakkında kağıdı okumaya çalıştım, ama devam etmek başarısız oldum:Agda'da boyut tipleri nelerdir?

  1. Neden veri tipleri onların boyutu üzerinde geneldir? Bildiğim kadarıyla boyut, indüksiyon ağacının derinliğidir.
  2. Veri türleri nedenleri üzerinde eşdeğişkendir, yani, i < = j -> T_i < = T_j?
  3. > ve # kalıpları ne anlama geliyor?

cevap

5
  1. fikir ölçekli tip esasen sıra sayıları olan boyutları tarafından dizine türleri, sadece bir aile olmasıdır. Bir indükleyici türü sized data olarak tanımlanırken, derleyici, sonucun doğru boyutta bir tür olduğunu kontrol eder, böylece SNat'daki succ, 1 boyutunu artırır. Bu şekilde, S(i : Size) -> S i boyutundaki bir tür temel olarak bir öğedir S'un boyutu i ile. Bana garip görünen şey, SNat için sıfır tanımının neden zero : (i : Size) -> SNat ($ 0) gibi bir şey yerine zero : (i : Size) -> SNat ($ i) olmasıdır. T_i daha az boyutta ı ile T elemanlarının türü olduğu gibi boyutlu endüktif tipleri için
  2. bu mantıklı yüzden daha sonra T_i ≤ T_j j ≤ eğer; Kurucular, özyinelemeli aramalarda boyutu büyütmelidir.
  3. Bölüm 2.3'de açıklandığı gibi, #, T_∞ 'e eşdeğerdir; Bu T_i'nin altyazı ön siparişinde en üst öğe. Desen (i> j), j < i bilgisini korurken bir j boyutuna bağlamak için kullanılır. eksi yazıda örnek Bundan da anlaşılacağı:

    fun minus : [i : Size] -> SNat i -> SNat # -> SNat i 
    { minus i (zero (i > j)) y = zero j 
    ; minus i x (zero .#) = x 
    ; minus i (succ (i > j) x) (succ .# y) = minus j x y 
    } 
    

    İlk imza herhangi bir sayıda substracting i (bu ne SNat i anlamı aşağıdaki gibidir en fazla boyutta bir dizi (SNat # hiçbir boyut bağlı bilgiler içeren bir sayı olduğu) anlamına gelir) en fazla sayıda i döndürür; ve > modeli için, son satırda, onu en çok j boyutunda bir dizi ile eşleştirmek için kullanırız ve yinelemeli çağrı tipi alt türetme nedeniyle denetler: SNat j ≤ SNat i.