S ve K birleştiricilerinin Turing Complete olduğu bilinmektedir. İlkel özyinelemeli işlevler (yalnızca) vermek için yeterli birleştiriciler var mı?
S ve K birleştiricilerinin Turing Complete olduğu bilinmektedir. İlkel özyinelemeli işlevler (yalnızca) vermek için yeterli birleştiriciler var mı?
Yanıtlar:
Evet, ama daktilolu birleştiricileri göz önünde bulundurmalısınız. Yani, ve aşağıdaki tür şemalarını vermeniz gerekir : ; burada ve , her kullanımda herhangi bir beton türüne örneklenebilen meta değişkenlerdir.K K : A → B → A S : ( A → B → C ) → ( A → B ) → ( A → C ) A , B C
Ardından, türlerin diline türünü eklemek ve aşağıdaki birleştiricileri eklemek istersiniz : z : N s u c c : N → N i t e r : N → ( N → N ) → N → N
Eklemeler için eşitlik kuralları şunlardır:
Rakamlarla ve yinelemeyle zenginleştirilmiş basit yazılan lambda hesabında programlar yazarsanız, yazdığınız programları okumak çok daha kolaydır. Tarif ettiğim sistem , yüksek tip aritmetiğin dili olan Goedel'in T'sinin bir kısıtlamasıdır . Goedel T olarak, yineleme için yazma daha sınırlıdır: T içinde , sen örneğini doğal sayılar sadece tip, her tür at. Bu sizi ilkel özyinelemeden geçirir ve Ackerman'ın işlevi gibi şeyleri tanımlamanızı sağlar.
EDIT: Xoff, önceki fonksiyonun nasıl kodlanacağını sordu. Bunu standart bir numara ile takip eder. Açıklamak için, bunun için daha okunaklı olduğu için (braket soyutlamasıyla ortadan kaldırılabilen) lambda gösterimini kullanacağım. İlk olarak, çiftlerimiz ve için daha genel bir . Sonra şunları tanımlayabiliriz:
Sadece nat-tipi yineleyiciniz varsa, o zaman sinir bozucu olan ancak temel bir engel teşkil etmeyen izomorfizminden yararlanmanız gerekir .
iter
. Bu cs.stackexchange.com'da bir soru nesnesi olabilir ...