Hayır , ama diğer insanların vermiş olduğu nedenlerden dolayı değil. Özyineleme ve indüksiyon arasındaki fark, özyineleme "yukarıdan aşağı" ve indüksiyonun "aşağıdan yukarıya" olmasıdır. Tümevarım, "ilkel özyineleme" adı verilen bir şey için izomorfiktir, ancak genel olarak özyineleme, tümevarımdan kesinlikle daha güçlüdür .
Yukarıdan aşağıya ve aşağıdan yukarıya arasındaki ayrım önemsizdir - herhangi bir "yukarıdan aşağıya" ilkel özyinelemeli program mekanik olarak "aşağıdan yukarıya" bir şeye dönüştürülebilir. Aslında, tümevarımla ilgili herhangi bir kanıt, özyinelemeli bir programa dönüştürülebilir. Endüktif konstrüksiyon hesabı çerçevesinde, her doğal sayının saçma olduğunu kanıtlamak istiyorsanız, bunu n- 1 çok saçma.
Tümevarımın temel faktörü, şeylerin daha küçük şeyler olarak tanımlanmış olması ve sonlu birçok adımdan sonra "dibe vurmaları" dır. Doğal sayılar endüktiftir, çünkü her doğal ya 0'dır ya da daha küçük bir doğallığın halefi. Listeler tümevarımlıdır çünkü her liste ya boştur ya da bir öğeye ve daha küçük bir listeye bölünebilir ("katlanmamış").
Bazen yinelemeli programlar daha küçük şeyler açısından yazılmaz. Örneğin, bu Collatz işlevini ele alalım:
fun collatz(n)
if n <= 1
return 0;
else if n % 2 == 0
return 1 + collatz(n / 2)
else
return 1 + collatz(3 * n + 1)
end
Bu işlev ne yukarıdan aşağıya ne de aşağıdan yukarıya gider ve doğal sayılar üzerinde endüktif değildir.
Bunu endüktif olarak tedavi etmek için bir emir olabilir, ancak çoğu şey için basit bir yolu yoktur. Sonsuz akışlar üzerindeki işlevler harika bir örnektir. Aslında, akışlar "koindüktif" tipin prototipsel örneğidir.
Bob Harper'ın çevrimiçi olarak ücretsiz olarak sunulan "Programlama Dilleri için Pratik Temeller" in tümevarımsal, koindüktif ve özyinelemeli türlerine hoş bir girişi vardır.