İlkel özyineleme işlevlerinin sınıfı, Fetus'un sona erdiğini kanıtladığı işlev sınıfına eşdeğer mi?


9

Bunu duymamış eğer Fötus, üzerinde okunabilir burada . Bir fonksiyondaki özyinelemeli çağrıların tüm 'özyineleme davranışlarını' bulmak için bir 'çağrı matrisleri' ve 'çağrı grafikleri' sistemi kullanır. Bir fonksiyonun sonlandığını göstermek için, bir fonksiyona yapılan özyinelemeli çağrıların tüm özyineleme davranışlarının belirli bir 'sözlükbilimsel sıralamaya' uyduğunu gösterir. Sonlandırma denetleyicisi tüm ilkel özyinelemeli işlevlere ve Ackermann işlevi gibi işlevlere izin verir. Temelde çoklu argüman ilkel özyinelemeye izin verir. Bu aynı zamanda Agda'nın sonlandırma denetleyicisidir; Coq'un belki de daha genel olsa da bazı benzer tesislere sahip olduğuna inanıyorum.

DA Turner'ın "Toplam Fonksiyonel Programlama" makalesini okurken . Önerilen dilinin Godel tarafından incelenen Sistem T'de görüldüğü gibi tüm "ilkel özyinelemeli işlevleri" ifade edebileceğini açıklar. Bu sistemin "bütünlüğü birinci dereceden mantıkta kanıtlanabilen her özyinelemeli işlevi içerdiği biliniyor" diye devam ediyor.

Doz Fetüsü tüm ilkel özyinelemeli fonksiyonellere izin verir mi? Eğer öyleyse, ilkel özyinelemeli fonksiyonel olmayan fonksiyonlara izin verir mi? Bunun cevabı için bir atıf yapılabilir mi? (bu sadece ilgi duyduğum için gerekli değil; sadece bu konuda evlilik okumanın iyi olması)

Bonus soru: İlkel özyinelemeli işlevler, birleştiriciler açısından çok özlü bir tanıma sahiptir: S ve K (sabit nokta birleştiricileri ifade edemeyen), sıfır, ardıl işlev ve yineleme işlevi; bu kadar. Böyle özlü bir tanımı olan ve tüm ifadelerin sona erdiği daha genel bu tür diller var mı?


Agda vs Coq: Ben her zaman Agda'nın sonlandırma denetleyicisini daha gelişmiş olması ve daha fazla işlevi kabul etmesi için okurum, tam tersine ilk iddia sizinki (Agda'nın taktik eksikliği hariç, Agda'yı Coq ile karşılaştırırken iyi bir kural bu: Agda daha araştırma ve kararlılığı daha az olan uzantılara açıktır). Andreas Abel, boyut türlerine göre daha gelişmiş sonlandırma denetleyicileri üzerinde çalışıyor, MiniAgda ve ayrıca bu çalışmadaki çalışmalarına bakın .
Blaisorblade

"Daha fazla işlev tanımını kabul et" ve "daha büyük bir hesaplanabilir işlev sınıfına sahip" vardır. İkisi kıyaslanamaz. Agda ilk sayı kazanır, ancak Coq açıkça ikinci kazanır.
cody

Coq ve Agda'yı hiç kullanmadığımı açıklığa kavuşturmalıyım. Coq okuduğum kadarıyla, daha geniş bir hesaplanabilir fonksiyon sınıfı tanımlayabiliyordu ama bilmiyordum ki "Coq'un belki de daha genel olsa da bazı benzer tesislere sahip olduğuna inanıyorum"; "İnan" ve "belki" bilmediğimi ifade etmek için kullanıldılar.
Jake

Yanıtlar:


7

Evet, Fetus denetleyicisi Goedel'in T'sindeki her şeyi kontrol edebilir. Bunu, T'deki yineleme operatörünün sonlandığını göstermek için denetleyiciyi kullanarak gösterebilirsiniz. Örneğin, aşağıdaki tanım işe yarar:

iter:A(AA)NAiterif0=iiterif(n+1)=f(iterifn)

Bu, Fetus denetleyicisinin (veya diğer herhangi bir sonlandırma denetleyicisinin) kontrol etmesi çok kolaydır, çünkü açıkça yapısal olarak özyinelemeli bir tanımdır.

Agda ve Coq, her ikisi de birinci dereceden aritmetik olarak kanıtlanabilir toplamın ötesine geçen işlevlerin sonlandırılmasına izin veriyor. Bunu mümkün kılan özellik, "büyük eliminasyon" adı verilen veriler üzerinde özyineleme yoluyla türlerin tanımlanmasına izin vermesidir. (ZF set teorisinde, değiştirme aksiyom şeması kabaca aynı amaca hizmet eder.)

T'nin ötesine geçen bir şeye kolay bir örnek, Goedel'in T'nin kendisinin tutarlılığıdır! Sözdizimini veri türü olarak verebiliriz:

data T : Set where 
   N : T 
   _⇒_ : T → T → T

data Term : T → Set where 
   zero : Term N
   succ : Term (N ⇒ N)
   k    : {A B : T} → Term (A ⇒ B ⇒ A)
   s    : {A B C : T} → Term ((A ⇒ B ⇒ C) ⇒ (A ⇒ B) ⇒ A ⇒ C)
   r    : {A : T} → Term (A ⇒ (A ⇒ A) ⇒ N ⇒ A)
   _·_  : {A B : T} → Term (A ⇒ B) → Term A → Term B

Tür bağımlılığının, yalnızca iyi türetilen T terimlerini içeren bir terim veri türü tanımlamamıza izin verdiğini unutmayın. Daha sonra türler için bir yorumlama işlevi verebiliriz:

interp-T : T → Set 
interp-T N       = Nat 
interp-T (A ⇒ B) = (interp-T A) → (interp-T B)

Bu, bunun NAgda doğal sayıları olması gerektiğini ve T'nin okunun Agda fonksiyon alanı olarak yorumlanması gerektiğini söylüyor. Bu "büyük" bir eliminasyondur, çünkü veri tipi T'nin yapısı üzerinde özyineleme yoluyla bir küme tanımlarız .

Daha sonra, Goedel'in T'nin her teriminin bir Agda terimi tarafından yorumlanabileceğini gösteren bir yorumlama fonksiyonu tanımlayabiliriz:

interp-term : {A : T} → Term A → interp-T A
interp-term zero    = 0 
interp-term succ    = \n → n + 1
interp-term k       = \x y → x
interp-term s       = \x y z → x z (y z)
interp-term r       = Data.Nat.fold 
interp-term (f · t) = (interp-term f) (interp-term t)

(Bu makinede Agda yok, bu yüzden şüphesiz bazı eksik ithalatlar, sabitlik bildirimleri ve yazım hataları var. Düzeltme, bu, isterse editör olabilecek okuyucu için bir alıştırmadır.)

Agda'nın tutarlılık gücünün ne olduğunu bilmiyorum, ama Benjamin Werner Endüktif Yapılar hesabının (Coq'un çekirdek hesabı) ZFC ile eşit olarak var olduğunu ve sayıca pek çok ulaşılmaz kardinal olduğunu gösterdi.


Örneğinizde büyük bir eliminasyon kullanmadığınızı unutmayın. Büyük eleme aslında hesaplama gücü eklemez. Beklenmediklik: F sistemi öncekine sahip değildir, ancak T sisteminde ifade edilemeyen işlevleri ifade edebilir
cody

@cody: interp-T işlevi, benim için büyük bir eliminasyon gibi görünen bir terim kümesini hesaplar! Büyük elemelerin güç kattığı kesinlikle doğrudur: Martin-Loef tipi teori, büyük bir eliminasyon olmadan 0 = 1'den tutarsızlık bile elde edemez. (Bunu görmek için, evrenler / büyük elemeler olmadan tüm bağımlılıkları silebileceğinizi ve basit bir şekilde yazabileceğinizi unutmayın: Harper ve Pfenning'in LF için yeterlilik kanıtlarında yaptıkları budur.)
Neel Krishnaswami

Üzgünüm: evet interp-T işlevi gerçekten büyük eliminasyon kullanıyor. Ayrıca, 0! = 1 ispatlamanın gerçekten gerektirdiğini de kabul ediyorum. Ancak, hesaplanabilir fonksiyonların tanımlanması , matematiksel ifadeleri kanıtlamakla aynı şey değildir . Cevabım bunu biraz açıklığa kavuşturuyor. Saf İnşaatlar, örneğin, 0! = 1'i kanıtlayamaz. Bununla birlikte, Ackermann fonksiyonunu nispeten kolaylıkla tanımlayabilir.
cody

Bu, Agda'nın T sistemi için bir tercüman yazabileceğinin daha genel bir anlamı olduğunu, ancak hava göstermediğini veya bağımlı olarak yazılmayan bir dil olan Fetus'u göstermediğini gösterir. Fetus bunu yapabilir mi? Agda bunu "büyük eleme" için olmasa bile yine de yapabilir mi?
Jake

1
Agda'nın belgeleri, sonlandırma denetleyicisinin Fetus algoritmasını kullandığını söylüyor. T'yi aldıysanız ve Fetus tarafından kontrol edilen desen eşleme ve özyinelemeli tanımlarla genişlettiyseniz, T için bir tercüman yazamazsınız. Aslında, T tarafından hesaplanan işlevleri hiç değiştirmezsiniz - Fetus'un hesapladığı tüm sonlandırma emirleri Peano aritmetiğinde kanıtlanmış bir şekilde sağlam temellere sahiptir. (Bkz. Cody'nin cevabı.) Fetus algoritması , hesaplayabileceğiniz fonksiyonlar dizisini değiştirmeden daha fazla tanım yazmanıza izin verir . Agda'nın büyük elemeleri aslında fonksiyon setini arttırır.
Neel Krishnaswami

3

Açıklığa kavuşturmak gerekirse, Fetus'un Agda için orijinal sonlandırma denetleyicisini de geliştiren ve o zamandan beri daha gelişmiş sonlandırma teknikleri üzerinde çalışan Andreas Abel tarafından geliştirildiğini belirtmeliyim .

Sorunuzun cevabı biraz hayal kırıklığı yaratabilir: N için Nolduğu tam olarak sistemde tanımlanabilir fonksiyonlarF. Bunun nedeni: yukarıda belirtilen sınıf, İkinci Mertebeden Aritmetik (PA2) bu da sistemde tanımlanabilir fonksiyonlara eşittir F(bakınız Örnekler ve Tipler , bölüm 11). Ayrıca, polimorfizmi çıkarırsanız, tanımlanabilir fonksiyonlara düşersiniz.PA, bu sistemde tanımlanabilenlerle çakışır T.

Yine, bunun yankısı, "çağrı matrisleri" tarafından yakalanan azalmanın kanıtlanmış bir dayanak oluşturması ve bu kanıtın tamamenPA.

Ancak bu, Fetus'un sistemden daha yararlı olmadığı anlamına gelmezT! Uygulamada, hesaplanabilir fonksiyonların belirli sunumlarını kabul edebilmek için daha karmaşık sonlandırma analizleri gerekmektedir . Örneğin, bir birleştirme işlevi her yazışınızda Peano Aritmetiği'nde karmaşık bir kanıt yapmak istemezsiniz. Bu bakımdan, Fetus çok güçlüdür ve işlevleri Coq, Agda veya herhangi bir ortak kanıt sistemi tarafından kabul edilmeyecek şekilde tanımlamanıza izin verir.


kanıtlanabilir şekilde sonlandırılan bir fonksiyon sınıfı (PA ^ 2) F sistemindeki bildiğim kadarıyla sonlandırılması mümkün olmayan fonksiyon sınıfına nasıl eşit olabilir? Ayrıca bana soruyu nasıl cevapladığınızı da anlamıyorum. Sistem T'nin daha büyük bir hesaplanabilir fonksiyon sınıfına sahip olduğunu mu söylüyorsunuz yoksa fetüsün olduğunu mu söylüyorsunuz? Sanırım mantığınızda aslında benden daha fazla geçmişe sahip olmamı bekleyen bir sıçrama oldu. Ayrıca sağladığınız bağlantı, doğru şekilde görüntülenmeyen kötü bir sayfaya yönlendiriyor gibi görünüyor.
Jake

F sistemindeki işlevlerin tümü sona erer. Fetus, sistem T'den daha büyük bir hesaplanabilir fonksiyon sınıfı yakalar, ancak "yanlışlıkla", polimorfizmi kaldırırsanız, Fetus sadece tam olarak sistem T'yi yakalar. Bana hangi bağlantının sizin için işe yaramadığını söyleyebilir misiniz? (ve hangi tarayıcıyı kullanıyorsunuz :)
cody

1

İlkel özyinelemeli işlevler ile ilkel özyinelemeli işlevler kastediyorsanız ve Fetus'un Ackermann işlevini içerdiğini biliyorsanız, Acusmann işlevi ilkel özyinelemeli olmadığından Fetus pr işlevlerinin sınıfıyla çakışmaz. Bu Ackermann tarafından gösterildi ve daha sonra Rosza Peter tarafından " Konstruktion nichtrekursiver Funktionen " 1935'te (maalesef bildiğim kadarıyla sadece Almanca) basitleştirilmiş bir kanıt verildi .

Fetus tarafından yakalanan işlevler sınıfına denk gelebilecek, sonlandırılması garanti edilen daha büyük özyinelemeli işlev sınıfları arıyorsanız, Rosza Peter'ın diğer bazı çalışmaları sizi ilgilendirebilir.

Ackermann işlevi, Rosza Peter tarafından " Uber die mehrfache Rekursion " 1937'de tanımlandığı gibi çoklu özyinelemeli işlevler sınıfında bulunur . Örneğinf(a,b) arayabilir f(a,b1) veya f(a1,b).

Yine de, daha güçlü bir sınıf, Rosza Peter tarafından " Zusammenhang der mehrfachen und transfiniten Rekursion " da anlatılan sınırsız özyineleme kavramı tarafından verilmektedir. Sınırsız özyineleme için öncekileri özel bir siparişe göre çağırabilen bir özyinelemeli değişkeniniz var<

Örneğin, bir tamsayıyı bir tam sayı çifti olarak yorumlayabilir ve sıralamayı kullanabilirsiniz

(a,b)<(c,d)(a<cbd)(acb<d)
Bu, tamsayıların üçlüleri için genelleştirilebilir. Peter bu emirleri çağırırω2,ω3ve bunun gibi. Bir adım daha ileri gidebilir ve bir tamsayıyı keyfi sayıda tamsayı olarak yorumlayabilirsiniz. İzin Vermekpi ol i- asal sayı. Sonra düşünebilirizz=p1np2x1p3x2 nerede n , kodlanan tam sayıların sayısını belirtir z ve xiresp içerir. değer. Bir tamsayı listesi için bir sıralamayı belirtir.ωωve köşegenleştirme yoluyla, bu tür özyinelemenin çoklu özyinelemeden daha güçlü olduğunu gösterir. Ancak, bu sınıfın sözdizimsel karakterizasyonu olup olmadığından emin değilim.

İlkel özyinelemeli işlevler, aşağıdaki yorumda belirtildiği gibi ilkel özyinelemeli işlevlerle aynı değildir. Ancak bence sonsuz özyineleme kavramını işlevsellere aktarabiliriz. Bununla birlikte, fonksiyonel bir ayar ile hala daha güçlü olup olmadığı açık değildir.


2
sonlu tipteki ilkel özyinelemeli fonksiyoneller sınıfı, ilkel özyinelemeli fonksiyonların sınıfından daha geneldir. Örneğin Ackermann işlevini ifade edebilir ve Godel'in sistem T'sinde görülebilir.
Jake
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.