Genel veri türleri üzerinde ilkel özyinelemeli fonksiyonların tanımlanması


9

İlkel özyinelemeli işlevler doğal sayılar üzerinden tanımlanır. Bununla birlikte, kavramın, örneğin listeleri ikili ağaçlarla eşleştiren ilkel özyinelemeli işlevler hakkında konuşmasına izin vererek diğer veri türlerine genelleme yapması gerektiği anlaşılıyor. Benzer şekilde, doğal sayılar üzerindeki kısmi özyinelemeli işlevler, herhangi bir veri türündeki hesaplanabilir işlevler için güzelleşir ve ilkel özyinelemeli işlevler için aynı tür genellemenin nasıl yapılacağını anlamak isterim.

Sezgisel olarak, temel işlemlere izin veren basit bir zorunlu dil tanımlayacak olsaydım, listeler (birleştirme, baş ve kuyruğu alma, öğelerin karşılaştırılması gibi) ve önceden kaç tane yinelemenin olacağını bilmeyi gerektiren bir yineleme biçimi (örneğin, değişmez bir listedeki elemanlar üzerinde yineleme gibi), o zaman böyle bir dil en çok ilkel özyinelemeli fonksiyonları listeler üzerinden hesaplayabilmelidir. Ancak bunu resmi olarak nasıl anlayabilirim ve daha spesifik olarak, dilimin yalnızca ilkel özyinelemeli işlevleri listelerin üzerinde hesapladığını ve bunların bir alt kümesini hesapladığını nasıl kanıtlayabilirim?

Açık olmak gerekirse, basit görünen ilkel özyinelemenin kendisinden ziyade, ilkel özyinelemeli işlevleri (gerçekten de öyleyse) iyi tanımlanmış bir işlev sınıfı olarak anlamakla ilgileniyorum. Genel veri yapıları üzerinde ilkel özyineleme üzerine yazılan herhangi bir şeye veya gerçekten de doğal sayılar dışındaki herhangi bir bağlama işaret etmek isterim.

Güncelleme: McAllester ve Arkoudas'ın Walther Recursion adlı bir makalesinde bir cevap bulmuş olabilirim . ( CADE 1996 tarihli Bildiriler .) Bu, ilkel özyinelemenin ve daha güçlü Walther özyinelemesinin genelleştirilmiş bir sürümünü içeriyor gibi görünüyor. Bunu sindirdiğimde kendi kendine cevap yazmayı düşünüyorum, ancak bu arada bu not aynı soruya sahip olanlara yardımcı olabilir.


1
Tam olarak ne aradığını net değil. Görünüşe göre sadece W-tiplerini bulmaya çalışıyorsunuz , ama bu olmayabilir.
Andrej Bauer

3
Muhtemelen "sıradan" (ağaç benzeri) veri tiplerinin doğal sayılara oldukça basit bir şekilde kodlanabileceğini ve daha sonra doğallar üzerindeki PR işlevlerinin ne isteyebileceğinizi oldukça iyi temsil ettiğini belirtmek yararlıdır. Alternatif olarak, Gödel'in "T " yi "olağan" yineleyicilerle kesinlikle pozitif birinci dereceden veri türlerine genişletilmiş olarak kullanabilirsiniz.
cody

1
Bu "özelliği" ortadan kaldırmak istiyorsanız, eliminatörlerin çıkış tiplerini temel tiplerle sınırlandırabilirsiniz .
cody

1
Bana hala bir tür kısıtlı W tipi aradığınız şey gibi görünüyor. Sonlu dallara sahip W-tipleri ve tekrarlayanlar gibi diğer kısıtlı W-tiplerini ortadan kaldırmakla sınırlıdır.
Andrej Bauer

1
CADE konferansı 1996 ziyareti: dblp.org/db/conf/cade/cade96
John Fisher

Yanıtlar:


5

Genel olarak, veri tiplerine sahip bir dilde (listeler, ağaçlar, vb.), Tam olarak ilkel özyinelemenin beklediğimiz gibi davranan bir işlev dilini tanımlamak kolaydır.

Örneğin, veri türü ise ve yapıcılarDc1,...,cn tip var

cben:T1benT2ben...Tk1benD...D

sonra imleç recDÖ çıkış tipi için Ö türü olacak

recDÖ:(T11...Tk11D...DÖ...Ö)...DÖ

ve işlemsel semantik:

recDO f1  fn (ci t1tki d1dm)fi t1tki (recDO f1 fn d1)(recDO f1fn dm)

her biri için i.

Ağız dolusu bir şey! En azından doğal sayılar için,

recN-Ö:(N-ÖÖ)ÖN-Ö

recN-Ö f0 f1 0f1 0
ve
recN-Ö f0 f1 (S n)f0 n (recN-Ö f0 f1 n)

beklendiği gibi (sıfır kurucusunun sıfır argümanı olduğunu unutmayın!).

Şimdi sabit işlevlere ve projeksiyonlara izin veriyor ve recDÖiçin işlev olmayan türleriÖ, sonra tamamen ilkel özyinelemeye sahipsiniz.

Güven verici bir şekilde, eğer Tbenjs de işlevsel değildir, o zaman veri tipinin olağan Gödel kodlaması aynı ilkel özyinelemeli işlevleri verir.


Yine de bu sürecin daha zarif bir tanımına sahip olmak güzel olurdu. Carlos'un cevabı geliyordu: bu veri tipleri kategori teorisinde daha polinom functorları olarak adlandırılan belirli functorların ilk cebirleri olarak daha zarif bir şekilde tanımlanabilir . O zaman, imleç, bu cebirin başlangıçtaki morfizmidir (bazen bir çeşidi), bazen bir şeyleri karıştırmaya çalışan insanlar tarafından bir katamorfizma olarak adlandırılır . Bu morfizm, ilk cebirin inşasıyla ortaya çıkar.

Bir paramorphism sadece yukarıda tarif ettiğim özel varyanttır.


Korkarým bu benim biraz ötesinde. Neden almayı umuyordukrecN-Ö:(N-ÖÖ)ÖN-Ötip imzası olarak? Bu otomatik olarak ilkel özyinelemeyi temsil ettiği anlamına mı geliyor? (Bunun sadece bir işlevin türünden nasıl okunabileceğini hayal etmekte zorlanıyorum.) Haskell'de programlayabildiğim ölçüde tip teorisine aşinayım, ama biçimselliğe aşina değilim ' burada kullanıyoruz. Ne yazdığınızı anlayacak kadar arka planı nerede okuyabilirim?
Nathaniel

Türü recN-yukarıdaki genel şemadan izler. İlkel özyinelemeyi temsil eder, çünkü işlemsel anlambilim PR işlevlerinin tanımından özyineleme işlemini temsil eder. Operasyonel semantiği açıklamam, bu yüzden yorumumu genişleteceğim.
cody

Elimde herhangi bir temel referansım yok, sanırım bu slaytlar hoş bir yumuşak tanıtım veriyor ve Ralph Mattes'in tezinin 3. bölümü , "birinci dereceden" endüktif türlere izin vermese de, büyük teknik ayrıntılara giriyor.
cody

2

Son zamanlarda bu soruyu soruyordum ve birkaç ilgi çekici makale buldum:

Finitary Endüktif Olarak Sunulan Mantık: (a) belirli gereksinimleri karşılayan herhangi bir veri tipi üzerinde genel bir ilkel özyineleme kavramı sağlayan bir mantığı tanımlar (b) bu ​​mantığın ilkel özyinelemeli aritmetiğin muhafazakar bir uzantısı olduğunu kanıtlar.

Döngü Programlarının Karmaşıklığı : döngü programı kavramının ilkel özyinelemeli işlevlere eşdeğer olduğunu kanıtlar.

İlkel Özyinelemeli Kümeler için Mantık Programları : Mantık programları sınıflarının ilkel özyinelemeli işlevlere eşdeğer olduğunu kanıtlar.

İlkel özyinelemeli küme fonksiyonlarının kanıt-kuramsal karakterizasyonu : verilen küme üzerindeki tüm ilkel özyinelemeli fonksiyonların sadece çok zayıf küme teorisinde tanımlanabilenler olduğunu kanıtlar.


0

Belki bir paramorphism kavramını mı düşünüyorsunuz ?

Gönderen Muz, Lensler, Zarflar ve Dikenli telle Fonksiyonel Programlama :

Doğal sayılar için bir paramorphism bir işlevdir h=(b,) şeklinde

h0=bh(n+1)=n(hn)

Örneğin, faktöriyel fonksiyon b=1 ve nm=(n+1)xm.

Listeler için, bir paramorphism bir işlev olacaktır h şeklinde

hsıfır=bh(Eksileribirb)=bir(b,hb)
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.