Está en la página 1de 31

Inducción y

recursión 5

r
do
rra
5.1. Introducción
Existen muchos universos o dominios que contienen un número ilimitado de elementos
que sin embargo pueden ser contados. Por ejemplo, el universo de números naturales, el
dominio de expresiones lógicas (tomadas con las variables proposicionales de un alfabeto),
el dominio de programas escritos en ciertos lenguajes de programación y en general todas
Bo

las estructuras comunes en computación como son las listas o los árboles, conocidas como
estructuras discretas. Estos universos se conocen como conjuntos infinitos numerables y
son de gran utilidad en Ciencias de la Computación y Matemáticas Discretas. Numerable
en este caso significa que se pueden contar en el sentido de que dado un elemento del
conjunto, es posible determinar cuál es el elemento siguiente. Sin embargo, por ser infinitos,
no es posible describirlos elemento por elemento pues nunca terminarı́amos, ni tampoco
podemos probar alguna propiedad acerca de ellos tratando de mostrarla para cada elemento
particular. En este capı́tulo tratamos dos técnicas muy relacionadas entre sı́, la inducción
y la recursión, las cuales sirven para probar y definir propiedades sobre dominios infinitos
numerables.

Iniciamos el capı́tulo definiendo de manera formal a los números naturales, mostrando


algunas definiciones recursivas de funciones sobre los mismos y discutiendo el llamado
método de inducción matemática y algunas de sus variantes. Posteriormente nos ocupare-
214 Inducción y recursión

mos de las definiciones recursivas de conjuntos y funciones en un ámbito más general.


Estas definiciones recursivas son generalizaciones de las utilizadas en números naturales a
cualquier dominio infinito numerable y que además esté bien fundado1 . En la última sec-
ción nos ocupamos en generalizar el principio de inducción matemática mediante la llama-
da inducción estructural en algunas estructuras discretas muy necesarias en programación
como son árboles y cadenas o listas finitas.

5.2. Los números naturales

r
El conjunto de números naturales2 N ✏ t0, 1, 2, . . .✉ es quizás el ejemplo más senci-
llo de un conjunto infinito numerable. Pero siendo infinito, ¿cómo podemos justificar su

do
construcción y manejo en computación?
Empecemos con su construcción. En la vida diaria utilizamos los sı́mbolos 0, . . . , 9
para representar los primeros diez números naturales, llamados dı́gitos, mientras que los
siguientes números se definen a partir de los dı́gitos mediante ciertas reglas. Formalmente
sólo utilizaremos el dı́gito 0 ya que los demás números se construirán utilizando la función
sucesor. El sucesor de un número n, escrito s♣nq, es simplemente el número que le sigue
a n en la sucesión de números naturales o, equivalentemente, s♣nq ✏ n 1, pero como
rra
aún no definimos la suma evitaremos su uso. Obsérvese que la función sucesor es general
y no depende del dominio de los números naturales; por ejemplo los dı́as y meses tienen
sucesor.
La definición de números naturales será nuestro primer ejemplo de definición recursiva.
✧ 0 es un número natural.
✧ Si n es un número natural, entonces el sucesor de n, denotado s♣nq, es un
Bo

número natural.
✧ Éstos y sólo éstos son números naturales.
Esta definición es recursiva pues en la segunda cláusula se está usando a n, que supo-
nemos es un natural, para poder concluir que s♣nq también lo es, es decir, estamos usando
lo definido en la misma definición; en la siguiente sección trataremos con detalle este tipo
de definiciones. La tercera cláusula puede parecer extraña y con frecuencia se omite en las
definiciones. Sin embargo es necesaria para garantizar que un objeto es un número natural
únicamente si fue construido usando las cláusulas anteriores. Esto es imprescindible para
que funcionen los principios de inducción.
1
dominio bien fundado se refiere, en términos muy generales, a un conjunto tal que cualquiera de sus
subconjuntos tiene un primer elemento.
2
La inclusión del 0 en los naturales no es aceptada universalmente, especialmente por matemáticos; sin
embargo, aquellos académicos que cultivan la investigación en lógica, postulan que 0 P N.
5.2. Los números naturales 215

Según la definición anterior el conjunto de números naturales es


N ✏ t0, s♣0q, s♣s♣0qq, . . .✉
De esta manera hemos construido un conjunto infinito en el sentido de que siempre
podremos construir cualquier número de sus elementos y en particular cualquier elemento.

Diferencia entre sintaxis y semántica


Estructuralmente es claro que el conjunto de números naturales recién definido es in-
finito; sin embargo, si le damos cierto significado a la función sucesor pudiera darse el caso

r
de que los elementos s♣s♣. . . s♣nq . . .qq no sean todos distintos. Por ejemplo, si hablamos
de los dı́as de la semana,

do
s♣s♣s♣s♣s♣s♣s♣lunesqqqqqqq ✏ lunes.
Para indicar que el conjunto es infinito es necesario postular dos propiedades más que
garanticen que todos los naturales son distintos.
• ❅n♣s♣nq ✘ 0q.
• ❅n❅m♣s♣nq ✏ s♣mq Ñ n ✏ mq.
rra
Estas dos propiedades aseguran que el 0 no es sucesor de nadie y que la función sucesor
es inyectiva.
A continuación nos gustarı́a definir las operaciones básicas suma y producto; esto se
hará nuevamente usando recursión. Para la suma tenemos la siguiente definición:
• ❅n♣n 0 ✏ nq.
• ❅n❅m♣m s♣nq ✏ s♣m nqq.
La importancia de una definición recursiva es que podemos extraer de ella un programa
Bo

para calcular dicha función; veamos un ejemplo sencillo:

3 2 ✏ s♣s♣s♣0qqq s♣s♣0qq✟
✏ s s♣s♣s♣0qqq s♣0q✟✟
✏ s s s♣s♣s♣0qqq✟✟ 0
✏ s s s♣s♣s♣0qqq
✏ 5
Finalmente, el producto de dos naturales se define recursivamente como sigue:
• ❅n♣n ✂ 0 ✏ 0q.
• ❅n❅m♣n ✂ s♣mq ✏ n ✂ m n q.
Más adelante daremos más ejemplos de funciones definidas recursivamente.
216 Inducción y recursión

5.2.1. Axiomas de Peano

Las fórmulas lógicas definidas a continuación constituyen los llamados axiomas de


Peano; éstos fueron propuestos por el matemático italiano Giuseppe Peano en 1889 y con-
forman una definición abstracta del conjunto de los números naturales. A continuación los
resumimos.

• 0 es un número natural. (P-1)


• Si n es un número natural entonces s♣nq es un número natural. (P-2)
• ❅n♣s♣nq ✘ 0q. (P-3)

r
✁ ✟ ✟✠
• ❅m❅n s ♣n q ✏ s ♣m q Ñ n✏m . (P-4)

do
También contamos, en este mismo formato, con las definiciones recursivas de las opera-
ciones de suma y producto de los números naturales recién discutidas y que recapitulamos
a continuación:

• ❅m♣m 0 ✏ m q. (D-1)

• ❅m❅n m s♣nq ✏ s♣m nq . (D-2)
• ❅m♣m ✂ 0 ✏ 0q.
rra
(D-3)

• ❅m❅n m ✂ s♣nq ✏ m ✂ n m . (D-4)

El último axioma de Peano es el llamado axioma de inducción y nos dice que para
cualquier predicado P la siguiente expresión es válida:
✁ ✟✠ ✟
•P ♣0q ❫ ❅n P ♣nq Ñ P s♣nq Ñ ❅n P ♣nq . (P-5)
Bo

Esta expresión formaliza el principio de inducción para números naturales. Este prin-
cipio es muy conocido y de gran importancia en matemáticas discretas y ciencias de la
computación y, en general, en todas las matemáticas. A continuación discutimos su validez
y desarrollamos algunos ejemplos de su uso.

5.3. Inducción en los números naturales


Sea P una propiedad acerca de números naturales, tal que para cualquier natural n,
al suponer que P ♣nq ha sido probada, es fácil cerciorarse de la validez de P ♣s♣nqq; es
decir, se prueba la validez de la misma propiedad para el siguiente número. Si además
podemos probar P ♣0q, entonces el axioma (P-5) nos permite concluir que nuestra propiedad
es válida para todos los números naturales. Esto se justifica al existir para cada número
5.3. Inducción en los números naturales 217

natural n0 una derivación de P ♣n0 q construida como sigue (usando 1, 2, 3, . . . en lugar de


s♣0q, s♣s♣0qq, s♣s♣s♣0qqq, . . .) :

1. P ♣0 q Hipótesis.
2. ❅n♣P ♣nq Ñ P ♣s♣nqqq Hipótesis.
3. P ♣0 q Ñ P ♣1 q Instanciación n :✏ 0 en 2.
4. P ♣1 q Modus Ponens 1, 3.
5. P ♣1 q Ñ P ♣2 q Instanciación n :✏ 1 en 2.
6. P ♣2 q Modus Ponens 4, 5.
P ♣2 q Ñ P ♣3 q Instanciación n :✏ 2 en 2.

r
7.
8. P ♣3 q Modus Ponens 6, 7.

do
..
.
k. P ♣n 0 q
Estas derivaciones generan la siguiente regla de inferencia, la cual también se deriva
del axioma (P-5):

P ♣0 q
rra

❅n P ♣nq Ñ P ♣s♣nqq
❅n♣P ♣nqq
donde P es un predicado acerca de números naturales.
Veamos algunos ejemplos de su uso.
Bo

Ejemplo 5.1. Mostrar que 0 es identidad por la izquierda de la suma; esto es


❅n♣0 n ✏ n q.
Demostración.
Base: Demostrar P ♣0q: ♣0 0q ✏ 0.
Esto se cumple por (P-2).
Hipótesis de inducción: Suponemos P ♣nq: 0 n ✏ n.
Paso inductivo: Demostrar P ♣s♣nqq: 0 s♣nq ✏ s♣nq.

0 s♣n q ✏ s ♣0 n q (D-2)
✏ s ♣n q (hipótesis de inducción)

Ejemplo 5.2. Mostrar que la suma es conmutativa, esto es:


218 Inducción y recursión

❅m♣❅n♣n m ✏ m nqq.
Demostración. Demostrar n m ✏ m n.
En este caso hay dos variables m, n y podrı́amos hacer inducción sobre cualquiera de ellas.
Sin embargo, es necesario escoger una sola para la inducción, dejando a la otra como un
parámetro fijo durante toda la prueba, ya que no debemos hacer inducción sobre ambas
variables. Aquı́ elegimos hacer inducción sobre m.
Base: Demostrar P ♣0q: 0 n✏n 0.
0 n✏n (ejemplo (5.1))
✏n 0 (D-1)

r
Hipótesis de inducción: Suponemos P ♣mq: m n ✏ n m.

Paso inductivo: Demostrar P s♣mq : s♣mq n ✏ n s♣mq.

do
Tomando el lado derecho:
n s♣m q ✏ s♣n m q (D-2)
✏ s♣m n q (hipótesis de inducción)
Quisiéramos que el siguiente paso fuera
s ♣m n q ✏ s♣m q n. (5.1)
rra
Pero esto no es consecuencia de los axiomas ni de resultados anteriores. Por lo tanto,
lo tenemos que demostrar. Lo haremos usando inducción natural, ahora sobre n.
La propiedad a probar es:

❅m❅n s♣m n q ✏ s ♣m q n
Base: Demostrar P ♣0q: 0 s♣mq ✏ s♣mq 0.
Esto se cumple porque ambos lados son iguales a s♣mq.
Bo

Hipótesis de inducción: Suponemos P ♣nq: s♣m nq ✏ s♣mq n.



Paso inductivo: Demostrar P s♣nq : s♣m s♣nqq ✏ s♣mq s♣nq.
s♣m s♣nqq ✏ s♣s♣m nqq (D-2)
✏ s ♣s ♣m q n q (hipótesis de inducción)
✏ s ♣m q s ♣ n q (D-2)
Generalización Universal: ❅n♣s♣m s♣nqq ✏ s♣mq s♣nq
Generalización universal sobre m: ❅m❅n♣m n ✏ n mq.

Ejemplo 5.3. ✟Sea Hn ✏ 0 para n ✏ 0, y Hn 1 ✏ 1 2Hn para n → 0. Demostrar que ❅n Hn ✏


2n ✁ 1 .
Demostración. Verificamos primero para la base, que en este caso es 0:
5.3. Inducción en los números naturales 219

Base: Demostrar, usando la definición dada, P ♣0q: H0 ✏ 0 ✏ 20 ✁ 1.


H0 ✏0 (por la definición de Hn con n ✏ 0 )
✏1 ✁ 1 (por aritmética)

✏2 0 ✁ 1
Hipótesis de inducción: Suponemos P ♣nq: Hn ✏ 2n ✁ 1.
Paso inductivo: Verificar que Hn 1 ✏ 2n 1 ✁ 1.

Hn 1 ✏ 1 2Hn (definición de Hn 1 )
✏ 1 2 ♣2 n ✁ 1 q (hipótesis de inducción)

r
✏ 1 2 ☎ 2n ✁ 2 ☎ 1 (aritmética)
✏ 1 2n 1 ✁ 2 (aritmética)

do

✏ 2n 1 ✁ 1 (aritmética)

Ejemplo 5.4. Muestra que para toda n, 2♣n 2q ↕ ♣n 2 q2 .


Demostración.
Base: Para n ✏ 0,
rra
2 ♣0 2 q ✏ 2 ♣2 q ✏ 4 ↕ 4 ✏ 2 2
✏ ♣0 2q2
Hipótesis de inducción: Suponemos P ♣nq: 2♣n 2q ↕ ♣n 2 q2 .
Paso inductivo: Corroborar que se cumple P ♣n 1q:

2♣♣n 1q 2q ✏ 2n 2 4 (definición y aritmética)


✏ 2 ♣n 2q 2 (aritmética)
↕ ♣n 2 q2 2
Bo

(hipótesis de inducción)
✏ n2 4n 4 2 (aritmética)
➔ n2 4n 4 2n 5 n → 0 (por lo que al agregarlo se
mantiene la desigualdad)
✏ n2 6n 9 (aritmética)
✏ ♣n 3q2 (aritmética)

✏ ♣♣n 1q 2 q2

Ejemplo 5.5. Demuestra que n3 2n es divisible entre 3.


Demostración.
Que n3 2n sea divisible entre 3 quiere decir que se puede expresar como n3 2n ✏ 3 ☎ k
para algún natural k.
220 Inducción y recursión

Base: Para n ✏ 0, 03 2 ☎ 0 ✏ 0 0 ✏ 0 ✏ 3 ☎ 0, por lo que 03 2♣0q es divisible por 3.


Hipótesis de inducción: Suponemos P ♣nq: n3 2n ✏ 3 ☎ k para alguna k.
Paso inductivo: Tomemos n 1 y veamos cómo se expresa ♣n 1q3 2♣n 1q.

♣n 1 q3 2 ♣n 1q ✏ n3 3n2 3n 1 2n 2 (álgebra)
✏ ♣n3 2nq 3n2 3n 3 (asociatividad y
conmutatividad)
✏ 3 ☎ k 3 ♣n 2 n 1q (hipótesis de inducción)
✏ 3 ☎ k✶ (con k ✶ ✏ k n2 n 1)

r
Conclusión: De esto, ❅n♣n3 2n es divisible entre 3q.

do
5.3.1. Cambio de la base de la inducción

En algunos casos la base de la inducción no es necesariamente el cero o el uno; esto no


es una falla en el método de inducción, sino que la propiedad utilizada es válida a partir
de cierto numero n0 , lo cual genera un principio similar, presentado aquı́ como regla de
rra
inferencia:
P ♣n 0 q
✁ ✟✠
❅n n ➙ n0 Ñ P ♣nq Ñ P s♣nq

❅n n ➙ n0 Ñ P ♣nq
Ejemplo 5.6. Mostrar que 2n ➔ n!, para n ➙ 4.
Bo

Demostración.
Base: P ♣4q: 24 ✏ 16 ➔ 24 ✏ 4!.
Hipótesis de inducción: Suponer P ♣nq: 2n ➔ n!.
Paso inductivo: Demostrar P ♣n 1q: 2n 1 ➔ ♣n 1q!.
2n 1
✏ 2 ✂ 2n (aritmética)
➔ 2 ✂ n! (hipótesis de inducción)
➔ ♣n 1q ✂ n! 2 ➔ n 1, (pues n ➙ 4)
✏ ♣n 1q! (definición de ♣n 1q! )

Ejemplo 5.7. Mostrar que cualquier cantidad mayor a 3 pesos puede pagarse usando únicamente
monedas de 2 y 5 pesos.
5.3. Inducción en los números naturales 221

Demostración.
Base: P ♣4q: 4 ✏ 2 ☎ 2 de manera que $4 puede pagarse con dos monedas de $2.
Hipótesis de inducción: P ♣nq: Suponemos que $n pueden pagarse con monedas de $2
y $5.
Paso inductivo: P ♣n 1q: Demostrar que $♣n 1q pueden pagarse con monedas de $2 y
$5.
Por la hipótesis de inducción tenemos que $n ✏ k ☎ 2 m ☎ 5. Es decir, $n se pagan
con k monedas de $2 y m monedas de $5. Tenemos dos casos:
• m ✏ 0. Es decir, $n se pagaron solamente con monedas de $2. En este caso,

r
n 1✏k☎2 1 ✏ ♣k ✁ 2q ☎ 2 2☎2 1 ✏ ♣k ✁ 2q ☎ 2 5.

do
de donde si $n se pagaron con k monedas de $2, tenemos que $♣n 1q se
pagan con k ✁ 2 monedas de $2 y una moneda de $5. Obsérvese que estamos
separando dos monedas de $2 para completar $5; esto puede hacerse debido a
que k ➙ 2 ya que n ➙ 4.
• m → 0. Es decir, $n se pagaron con al menos una moneda de $5.
n 1 ✏ k☎2 m☎5 1 ✏ k☎2 ♣m ✁ 1 q ☎ 5 5 1 ✏ ♣k 3q ☎ 2 ♣m ✁ 1 q ☎ 5
rra
de donde $♣n 1q se pagan con k 3 monedas de $2 y m ✁ 1 monedas de $5.
Obsérvese que separamos una moneda de $5 para obtener $6 que se pagan con
tres monedas de $2; esto puede hacerse pues m ➙ 1.

De los ejemplos anteriores podemos obtener un esquema general para una prueba por
Bo

inducción:
1. Enunciar el uso del principio de inducción. De esta manera el lector comprenderá de
qué tipo de prueba se trata.
2. Definir un predicado apropiado P ♣nq, de manera que la meta a probar sea ❅nP ♣nq.
Con frecuencia este predicado puede extraerse de la afirmación matemática o en
español que se desea probar.
3. Mostrar que la base de la inducción P ♣0q (o P ♣n0 q) es cierta.
4. Enunciar la hipótesis de inducción P ♣nq.
5. Probar la implicación P ♣nq Ñ P ♣n 1q; esto se conoce como paso inductivo.
6. Invocar el principio de inducción y concluir que ❅nP ♣nq.

Cualquier prueba por inducción debe tener todos estos pasos y en este orden.
222 Inducción y recursión

5.3.2. Inducción completa

Si pensamos en una prueba por inducción de acuerdo al principio original (P-5) y a


la derivación lógica dada en la página 217 para justificar el método, al probar P ♣mq para
un número cualquiera m tuvimos que probar antes P ♣0q, P ♣1q, . . . , P ♣m ✁ 1q, es decir, la
propiedad P tuvo que verificarse para todos los números anteriores a m. Esta información
podrı́a ser útil y necesaria para probar P ♣m 1q, ya que en algunos casos no basta con la
información inmediata anterior P ♣mq. Esta observación da lugar al principio de inducción
fuerte o completa que enunciamos aquı́ como regla de inferencia.
✁ ✟ ✠
❅n ❅m m ➔ n Ñ P ♣mq Ñ P ♣nq

r

❅n P ♣nq

do
Obsérvese que en este caso no hay una base explı́cita de la inducción. Si instanciamos
n ✏ 0 entonces la premisa de la regla resulta equivalente a P ♣0q, puesto que la fórmu-
la ❅m♣m ➔ 0 Ñ P ♣mqq es cierta al tratarse de una implicación con antecedente falso
(m ➔ 0) con m P N . Al probar el paso inductivo para n ✏ 0 no hay hipótesis disponible
para usarse, por lo que P ♣0q debe ser probado como en casos anteriores. Sin embargo, esto
no es necesario en la mayorı́a de los casos.
rra
Este principio permite partir la prueba del paso inductivo en dos o más casos más
pequeños, cualesquiera que éstos sean.

Ejemplo 5.8. Sea d el cero del operador binario ✆, es decir ❅x♣x ✆ d ✏ d ✆ x ✏ dq. Mostrar que
cualquier expresión e de la forma e ✏ e1 ✆ e2 ✆ . . . ✆ ek que contenga una o más presencias
de d debe ser igual a d.

Sea P ♣nq la proposición de que cualquier expresión con n presencias de ✆ y al menos una
Bo

presencia de d es igual a d.
Base: Veamos cuales son las posibles expresiones de la forma requerida con una presencia
de ✆ y al menos una presencia de d:

♣ aq x ✆ d ♣bq d ✆ x.
Por la definición del operador ✆ tenemos

❅x♣x ✆ d ✏ d ✆ x ✏ dq.
por lo que P ♣1q se cumple.
Hipótesis de inducción: Supongamos P ♣mq para m ➔ n. Es decir, cualquier expresión
de la forma requerida con m ➔ n presencias de ✆ y al menos una presencia de d es
igual a d.
5.3. Inducción en los números naturales 223

Paso inductivo: Sea x una expresión de la forma requerida con n → 0 operadores ✆ que
contiene al menos una presencia de d; entonces x ✏ x1 ✆ x2 donde x1 , x2 son ex-
presiones con menos de n operadores ✆ y alguna de x1 , x2 contiene una presencia
de d, digamos que es x1 . En tal caso, por la hipótesis de inducción se tiene x1 ✏ d,
de donde tenemos x ✏ x1 ✆ x2 ✏ d ✆ x2 ✏ d, lo cual completa el paso inductivo.
Obsérvese que la prueba es totalmente análoga si es x2 quien contiene una presencia
de d.

Ejemplo 5.9. Demostrar que cualquier n ➙ 2 es primo o es producto de primos.

Sea P ♣nq la proposición: n es primo o producto de primos. Queremos probar que

r
❅n♣n ➙ 2 Ñ P ♣nqq.

do
Base: P ♣2q: Para n ✏ 2 tenemos que 2 es primo, por lo que se cumple P ♣2q.

Hipótesis de inducción: Supongamos P ♣mq para m ➔ n. Es decir, cualquier número


m ➔ n es primo o producto de primos.

Paso inductivo: Si n es primo hemos terminado. Si no lo es, n se puede escribir como


n ✏ m ☎ q con 1 ➔ m, q ➔ n y por la hipótesis de inducción, ambos, m y q, son pri-
rra
mos o producto de primos, de donde n ✏ m ☎ q también lo es.

Obsérvese que en este ejemplo se combinan la inducción completa y el cambio de base


al iniciar en n ✏ 2.

Ejercicios
Bo

5.3.1.- Demuestra, usando las definiciones de suma y producto dadas al inicio de esta sec-
ción, que s♣0q es la identidad para la multiplicación; esto es

❅m m ✂ s ♣0 q ✏ m

5.3.2.- Demuestra las siguientes propiedades de la suma y el producto:



• Asociatividad de la suma: ❅m❅n❅k m ♣n kq ✏ ♣m nq k .

• Asociatividad del producto: ❅m❅n❅k m ✂ ♣n ✂ k q ✏ ♣m ✂ nq ✂ k .

• Neutro izquierdo del producto: ❅n 0 ✂ n ✏ 0 .

• Conmutatividad del producto: ❅m❅n m ✂ n ✏ n ✂ m .
224 Inducción y recursión

5.3.3.- Demuestra, usando las definiciones de suma y producto dadas al inicio de esta sec-
ción, que

❅m❅n s♣mq ✂ s♣nq ✏ m ✂ n s ♣m q n

✏ n ♣n 2 1 q .

n
5.3.4.- Demuestra que para toda n, k

k 1
✂ ✡2
➳ n ♣n 1q
n
5.3.5.- Demuestra que para toda n, k 3
✏ .

r

k 1
2


☎ ☎ ☎ ♣3n 2q ✏ 21 3n2

do
5.3.6.- Demuestra que para toda n, 5 8 11 7n .

5.3.7.- Usa inducción ası́ como las leyes de conmutatividad y asociatividad para demostrar
que

a1 ♣a2 ♣a3 ... ♣an✁1 an q . . .qq ✏ an ♣an✁1 ♣. . . ♣a2 a1 q . . .qq

5.3.8.- Sea n → 3 un número natural. Sea✟ m el entero mayor que es menor o igual que
rra
♣n 2q④2 es decir, m ✏ t♣n 2q④2✉ . Veamos una pequeña tabla con los valores de
n y m:

n ♣n 2q④2 m
2 2 2
5 3.5 3
Bo

6 4 4
7 4.5 4

Entonces, dados más de m enteros en el conjunto t1, 2, . . . , n✉, tres de los enteros en
este conjunto tienen la propiedad de que alguno de los tres es la suma de los otros
dos.


n
5.3.9.- Demuestra que para toda n ➙ 0, 9 ☎ 10k ✏ 10n 1 ✁ 1.

k 0

5.3.10.- Usa inducción matemática para demostrar que para todo entero n, n ➔ 2n .

5.3.11.- Demuestra que para todo entero positivo n existe un entero positivo con n dı́gitos
que es divisible entre 5n y tal que todos sus dı́gitos son impares. Que un entero p sea
5.3. Inducción en los números naturales 225

divisible entre otro entero q, denotado p ⑤ q, quiere decir que al dividir p entre q, el
residuo es 0, o dicho de otra manera:

Dados p, q PZ , p⑤q Ñ ❉m P Z tal que p ✏ q ☎ m

Veamos algunos ejemplos de la proposición:

n Entero con n dı́gitos p✏q☎m


P ♣1 q 5 5 ✏ 5 1 ♣1 q
P ♣2 q 75 75 ✏ 52 ♣3q ✏ 25 ☎ 3

r
P ♣3 q 375 375 ✏ 53 ♣3q ✏ 125 ☎ 3
P ♣4 q 54 ♣15q ✏ 625 ☎ 15

do
9375

✏ z z ✁✁1 1

n n 1
5.3.12.- Demuestra que para todo entero n ➙ 0 y z ✘ 1, zk

k 0

5.3.13.- Demostrar que para todo entero n → 6, 3n ➔ n!.


rra

n
5.3.14.- Para todo natural n, k ♣k!q ✏ ♣n 1 q! ✁ 1

k 1

5.3.15.- Los autómatas finitos son un modelo muy útil para dispositivos en software o hard-
ware. Un autómata finito es un dispositivo que se puede encontrar, en un momento
dado, en un número finito de estados. El objetivo de los estados es recordar una por-
Bo

ción relevante de la historia del sistema. Como sólo hay un número finito de estados,
la historia completa no puede ser registrada, por lo que se deberá diseñar con cuidado
para recordar los aspectos relevantes.
En cada estado, el autómata recibe posibles señales, que lo pueden hacer cambiar de
estado. El autómata inicia siempre en un estado designado como inicial, y dependi-
endo del estado en el que está, puede emitir una señal.

Podemos modelar un apagador muy sencillo con un autómata finito. El autómata


tiene dos estados, el de apagado y el de prendido, que es lo que el autómata tiene
que recordar. Cuando se oprime el apagador, dependiendo en cuál de los dos estados
esté, va a pasar al otro: Si está en apagado pasa a prendido y si está en prendido pasa
a apagado. El estado inicial es apagado. Podemos modelar el autómata con lo que se
conoce como un diagrama de transiciones, como se muestra en la figura 5.1. Como
se puede ver en esta figura, los estados están representados por cı́rculos, mientras que
226 Inducción y recursión

el resultado de oprimir el apagador, que corresponde a una transición, se representa


con una flecha que va de un estado al otro. El estado inicial es al que llega la flecha
identificada con inicio.

Figura 5.1. Autómata correspondiente a un apagador

oprimir

inicio
A P

r
oprimir

do
Debemos demostrar que los siguientes enunciados para describir el comportamiento
del autómata se cumplen:

S1 ♣n q : El autómata está en el estado A (de apagado) después de haber oprimido


el botón n veces, si y sólo si n es par.
S2 ♣n q :
rra
El autómata está en el estado P (de prendido) si y sólo si n es impar.

Se tiene que hacer una demostración doble de inducción, ya que hay que hacer in-
ducción sobre los dos casos posibles de la definición.

5.3.16.- Un poliominó es una pieza formada por cuadrados iguales unidos entre sı́ por al
Bo

menos una lı́nea (se excluyen los que estén unidos sólo por un vértice). Los po-
liominós se clasifican según el número de cuadrados que los forman; ası́, tenemos
los monominós son aquéllos formados por un cuadrado, los dominós por dos cuadra-
dos, triminós por tres, tetraminós por cuatro, pentaminós con cinco, los hexaminós
con seis, los heptaminós con siete, . . . . En ciencias de la computación a este tipo de
uniones donde se requiere que cuadrados adyacentes compartan un lado se conoce
también como 4-conectividad.

Al número de cuadrado que tiene el poliominó se le llama el orden de la figura. Según


el número de cuadrados en el poliominó tendremos un número distinto de figuras
con ese número de cuadrados. En la siguiente tabla consideraremos el número de
poliominós libres, donde dos poliominós son diferentes si uno no es el reflejo, la
rotación o la traslación del otro. En la tabla 5.1 en la siguiente página mostramos los
poliominós libres de orden 1 a 5.
5.3. Inducción en los números naturales 227

Tabla 5.1. Poliominós libres de orden 1 a 5

Nombre Número Figuras

monominó 1

(Continúa en la siguiente página)

r
do
rra
Bo
228 Inducción y recursión

Tabla 5.1. Poliominós libres de orden 1 a 5 (Continúa. . . )

Nombre Número Figuras

dominós 1

triminós 2

r
do
tetraminós 5
rra
pentaminós 12
Bo

Consideremos el triminó en forma de L. Consideremos un tablero de 2n ✂ 2n cuadros


en el que eliminamos un cuadro. Demostrar que el resto del tablero puede ser cubierto
con triminós en forma de L.
5.4. Definiciones recursivas 229

5.4. Definiciones recursivas


Una definición recursiva es aquella en la cual el concepto definido figura en la definición
misma. Esto puede parecer problemático y de hecho introduce problemas matemáticos
profundos si dicho uso o autoreferencia se utiliza sin cuidado. Sin embargo, usado bajo
ciertas restricciones, este método de definición, al que llamaremos en adelante recursión,
proporciona una herramienta sumamente útil tanto en matemáticas como en ciencias de la
computación. En particular, la gran mayorı́a de los tipos de datos usuales en programación
como listas o árboles, ası́ como diversas funciones sobre los mismos, pueden definirse

r
recursivamente.
Para que una definición recursiva sea válida, en el sentido de que genere tipos de datos o
funciones que no causen ciclos infinitos de evaluación, debe constar de dos partes:

do
• Un conjunto de casos base, los cuales son casos simples donde la definición se da
directamente, es decir, sin usar autoreferencia.
• Un conjunto de reglas recursivas donde se define un nuevo elemento de la definición
en términos de anteriores ya definidos.
Además de estas dos partes, la definición debe constar de una cláusula que asegure que
rra
las dos anteriores son las únicas formas de obtener el concepto, objeto o función definida.
Esta cláusula puede omitirse en el entendido de que siempre está presente.
La definición en los casos base nos da un punto de partida al proporcionar una definición
directa, mientras que las reglas recursivas nos permiten construir nuevos casos a partir de
los básicos de una manera iterativa.
Es muy importante observar que las únicas definiciones recursivas que consideramos
válidas son aquellas donde las reglas recursivas se definen en términos de elementos ante-
riores. Por ejemplo, la siguiente definición de una función
Bo

f ♣0 q ✏ 1
f ♣n 1 q ✏ f ♣n 2q
no es válida, puesto que la definición en n 1 está dada en términos de un elemento
posterior a n 1, a saber n 2. En particular, f resulta indefinida en cualquier valor
distinto de cero. Definiciones como la anterior se llaman recursivas generales y por lo
general causan ciclos infinitos en programación.
Ya hemos visto definiciones recursivas del conjunto de números naturales, ası́ como de
algunas funciones sobre este mismo tipo de datos como la suma o el producto. Veamos
algunos ejemplos más

Ejemplo 5.10. Dada una persona x, la relación ser descendiente de x en el dominio de las personas
se define como sigue:
230 Inducción y recursión

I. Si y es hijo de x entonces y es descendiente de x.


II . Si y es descendiente de x y z es hijo de y entonces z es descendiente de x.
III . Nadie más es descendiente de x.

Ejemplo 5.11. Dados dos números naturales n y m, la relación n es menor que m, denotada
n ➔ m, se define como sigue:
I . 0 ➔ s ♣k q.
II . s♣nq ➔ s♣k q, si n ➔ k
III . Ningún otro par de números está en la relación ➔.

r
Obsérvese que en el ejemplo anterior la recursión se hace sobre el número n dejando a
m fijo y declarándolo explı́citamente como un número sucesor s♣k q, puesto que la relación
n ➔ 0 no sucede nunca.

do
Ejemplo 5.12. El conjunto de fórmulas bien construidas de la lógica proposicional se define como
sigue:
I . Una variable proposicional es una fórmula bien construida.
II . Las constantes lógicas true y false son fórmulas bien construidas.
III . Si A y B son fórmulas bien construidas, entonces ♣✥ Aq, ♣A ❴ B q, ♣A ❫ B q y
♣A Ñ B q son fórmulas bien construidas.
rra
IV . Ninguna expresión que no sea construida con estas reglas es una fórmula bien con-
struida.

Ejemplo 5.13. El conjunto de expresiones aritméticas se define como sigue:


I . Todos los enteros y todos los nombres de variables son expresiones aritméticas.
II . Si A y B son expresiones aritméticas entonces ♣✁Aq, ♣A B q, ♣A ✁ B q, ♣A ✂ B q y
♣A④B q son expresiones aritméticas.
Bo

III . Sólo éstas son expresiones aritméticas.

Ejemplo 5.14. El tipo de datos de listas finitas ra1 , . . . , an s con elementos ai en un conjunto A se
define de la siguiente forma:
I . La lista vacı́a es una lista y se denota con r s o nil.
II . Si a P A y ℓ es una lista entonces cons♣a, ℓq es una lista. A a se le llama la cabeza y
a ℓ la cola de la lista.
III . Sólo éstas son listas.
Frecuentemente se usa la notación ♣a : ℓq para cons♣a, ℓq. Por ejemplo, si consideramos
al conjunto A ✏ t1, 3, 6, 10, 15, 21, 28✉, la lista r10, 6, 1, 6s que contiene a los elementos
10, 6, 1, 6 en ese orden, se representa de la siguiente manera:

♣ 10 : ♣ 6, ♣ 1, ♣ 6, r s q q q q
5.4. Definiciones recursivas 231

Es conveniente notar que en las listas se admiten repeticiones e importa el orden, a difer-
encia de lo que sucede con los conjuntos. Por lo tanto, una lista formada con elementos de
un conjunto finito puede ser infinita.
Tenemos varias opciones para representar a una lista con un único elemento. cons♣a, r sq
corresponde a una lista con un primer elemento a y donde la cola de la lista es la lista vacı́a.
También podemos denotar a una lista con un solo elemento, de manera abreviada, como ras,
lo que haremos más adelante.

Ejemplo 5.15. El tipo de datos de árboles binarios con todos los nodos etiquetados por elementos
de un conjunto A se define como sigue:

r
I . Un árbol vacı́o es un árbol binario y se denota por void.
II . Si T1 y T2 son árboles binarios y a es un elemento de A, entonces tree♣T1 , c, T2 q es

do
un árbol binario, donde T1 es el subárbol izquierdo y T2 es el subárbol derecho. Al
nodo etiquetado con c se le llama la raı́z del árbol.
III . Nada más es un árbol binario.
Por ejemplo, la expresión tree♣T1 , c, T2 q corresponde a la siguiente figura

c
rra
T1 T2

¿A qué expresión corresponde cada uno de los siguientes árboles?

c a
Bo

d f b c

e d e f

Los ejemplos anteriores muestran definiciones recursivas de tipos de datos usuales en


computación como números naturales, expresiones lógicas o aritméticas, listas o árboles, o
bien de relaciones como el orden usual entre números. En la siguiente sección mostramos
definiciones recursivas de funciones que involucran a los tipos de datos recién definidos.
232 Inducción y recursión

5.4.1. Definición de funciones recursivas

La definición recursiva de tipos de datos permite definir funciones sobre los mismos
utilizando la técnica de casamiento o apareamiento de patrones3 : cada cláusula de la defini-
ción del tipo de datos introduce un patrón, el cual es un esquema sintáctico bien definido
que se utiliza para definir un caso de la función en cuestión. Listamos a continuación los
patrones básicos de cada tipo de datos definido previamente:
• Números naturales: 0, s♣nq.
• Expresiones lógicas: p, true, false, ✥A, A ❫ B, A ❴ B, A Ñ B
• Expresiones aritméticas: n, x, ♣✁Aq, ♣A B q, ♣A ✁ B q, ♣A ✂ B q y ♣A④B q

r
• Listas: r s, ♣a : ℓq

do
• Árboles binarios: void, tree♣T1 , c, T2 q
De esta manera, para definir, por ejemplo, una función f sobre las listas, es suficiente definir
los casos para f ♣r sq y para f ♣♣a : ℓqq.
Veamos a continuación algunos ejemplos de funciones definidas sobre los tipos de
datos recién presentados y cuyas implementaciones se dan mediante apareamiento de pa-
trones. En cada caso se da primero una especificación que proporciona una definición di-
rra
recta, seguida de una implementación mediante una función recursiva f definida mediante
patrones. En algunos ejemplos nos puede resultar claro que la definición recursiva de f
cumple con la especificación dada en cada caso. Sin embargo, debemos mostrar esto for-
malmente para cada ejemplo, proceso que discutiremos en la siguiente sección.
Ejemplo 5.16. Exponenciación de números naturales.

Especificación: pot n, m ♣ q ✏ nm
Bo

Implementación recursiva:
• f ♣n, 0q ✏ 1
• f ♣n, s♣mqq ✏ f ♣n, mq ☎ n

Ejemplo 5.17. Factorial de un número natural.


Especificación: f ac n ♣ q ✏ n ☎ ♣n ✁ 1q ☎ . . . ☎ 2 ☎ 1, donde además f ac♣0q ✏ 1.
Implementación recursiva:
• f ♣0 q ✏ 1
• f ♣s♣nqq ✏ s♣nq ☎ f ♣nq

3
En inglés pattern matching
5.4. Definiciones recursivas 233

Ejemplo 5.18.
Especificación: suma de los elementos de una lista de números.
suml ♣ ra1 , . . . , an s q ✏ a1 a2 ... an
Implementación recursiva:
• f ♣r sq ✏ 0
• f ♣♣a : ℓqq ✏ a f ♣ℓ q

Ejemplo 5.19.
Especificación: producto de los elementos de una lista de números.

r
prodl ♣ ra1 , . . . , an s q ✏ a1 ☎ a2 ☎ . . . ☎ an

do
Implementación recursiva:
• f ♣r sq ✏ 1
• f ♣♣a : ℓqq ✏ a ☎ f ♣ℓq

Ejemplo 5.20.
rra
Especificación: longitud de una lista.
long ♣ra1 , . . . , an sq ✏ n
Implementación recursiva:
• f ♣r sq ✏ 0
• f ♣♣a : ℓqq ✏ 1 f ♣ℓ q
Bo

Ejemplo 5.21.
Especificación: el operador binario ❭ devuelve la concatenación de dos listas.
ra1, . . . , ak s ❭ rb1, . . . , bj s ✏ ra1, . . . , ak , b1, . . . , bj s
Implementación recursiva:
• f ♣r s, ℓ2 q ✏ ℓ2

• f ♣♣a : ℓ1 q, ℓ2 q ✏ a : f ♣ℓ1 , ℓ2 q

Ejemplo 5.22.
Especificación: reversa de una lista.
rev ♣ra1 , . . . , ak sq ✏ rak , . . . , a1 s
234 Inducción y recursión

Implementación recursiva:
• f ♣r sq ✏ r s
• f ♣♣a : ℓqq ✏ f ♣ℓq ❭ ras

En algunos casos, la especificación de una función no puede darse de forma directa


mediante una ecuación como en los casos anteriores, sino que tiene que darse con palabras
como en los siguientes ejemplos.

Ejemplo 5.23.
Especificación: nc es la función que calcula el número de conectivos en una fórmula de la
lógica proposicional. Por ejemplo nc♣p Ñ ✥q ❴ rq ✏ 3.

r
Implementación recursiva:
• f ♣p q ✏ 0

do
• f ♣trueq ✏ f ♣falseq ✏ 0
• f ♣✥Aq ✏ 1 f ♣Aq
• f ♣A ❫ B q ✏ 1 f ♣ Aq f ♣B q
• f ♣A ❴ B q ✏ 1 f ♣ Aq f ♣B q
• f ♣A Ñ B q ✏ 1 f ♣ Aq f ♣B q
rra
Ejemplo 5.24.
Especificación: ccd es la función que recibe una fórmula proposicional A y devuelve la
fórmula obtenida a partir de A al intercambiar los conectivos ❫ y ❴ en A. Por ejemplo
ccd♣✥p ❴ q Ñ r ❫ sq ✏ ✥p ❫ q Ñ r ❴ s.
Implementación recursiva:
f ♣p q ✏ p
Bo


• f ♣trueq ✏ true
• f ♣falseq ✏ false
• f ♣✥Aq ✏ ✥f ♣Aq
• f ♣ A ❫ B q ✏ f ♣ Aq ❴ f ♣ B q
• f ♣ A ❴ B q ✏ f ♣ Aq ❫ f ♣ B q
• f ♣ A Ñ B q ✏ f ♣ Aq Ñ f ♣ B q

Ejemplo 5.25.
Especificación: at es la función que calcula el número de presencias de fórmulas atómicas
que figuran en una fórmula. Por ejemplo, at♣q ❫ ✥p Ñ r ❴ pq ✏ 4, at♣q ❫ ♣true ❴
✥♣r Ñ false ❫ tqqq ✏ 5.
5.4. Definiciones recursivas 235

Implementación recursiva:
• f ♣p q ✏ 1
• f ♣trueq ✏ f ♣falseq ✏ 1
• f ♣✥Aq ✏ f ♣Aq
• f ♣ A ❫ B q ✏ f ♣ Aq f ♣ B q
• f ♣ A ❴ B q ✏ f ♣ Aq f ♣ B q
• f ♣ A Ñ B q ✏ f ♣ Aq f ♣ B q
El ejemplo que sigue involucra a dos tipos de datos, el de las fórmulas proposicionales
y el de listas de fórmulas.

r
Ejemplo 5.26.

do
Especificación: sf es la función que devuelve la lista de subfórmulas de una fórmula proposi-
cional A. Por ejemplo,

sf♣✥♣p Ñ q q ❫ rq ✏ r✥♣p Ñ q q ❫ r, ✥♣p Ñ q q, p Ñ q, p, q, rs.

sf♣p ❴ ✥♣p Ñ sqq ✏ rp ❴ ✥♣p Ñ sq, p, ✥♣p Ñ sq, p Ñ s, p, ss


Implementación recursiva:
f ♣p q ✏ r p s
rra

• f ♣trueq ✏ rtrues
• f ♣falseq ✏ rfalses
• f ♣✥Aq ✏ ♣✥A : f ♣Aqq ✟
• f ♣A ❫ B q ✏ ♣A ❫ B q : ♣f ♣Aq ❭ f ♣B q✟
• f ♣A ❴ B q ✏ ♣A ❴ B q : ♣f ♣Aq ❭ f ♣B q ✟
• f ♣A Ñ B q ✏ ♣A Ñ B q : ♣f ♣Aq ❭ f ♣B q
Bo

Ejemplo 5.27.
Especificación: nn es la función que recibe un árbol binario t y calcula el número de nodos
que hay en t.
Implementación recursiva:
• f ♣voidq ✏ 0
• f ♣tree♣T1 , c, T2 qq ✏ 1 f ♣T 1 q f ♣T 2 q

Ejemplo 5.28.
Especificación: la profundidad o altura de un nodo x en un árbol binario T se define como
la distancia (número de lineas) existente entre x y la raı́z de T en la representación
gráfica de T . La profundidad o altura de un árbol T se define como la altura máxima
de un nodo de T más uno. ht es la función que calcula la profundidad de un árbol
binario.
236 Inducción y recursión

Implementación recursiva:
• f ♣voidq ✏ 0
• f ♣tree♣T1 , c, T2 qq ✏ 1 máxtf ♣T1 q, f ♣T2 q✉

Como ya mencionamos, en cada caso debemos cerciorarnos formalmente que la defini-


ción recursiva dada por f realmente cumple con la especificación dada. Para el caso de
funciones que involucren a los números naturales esto puede lograrse mediante el principio
de inducción matemática. Como ejemplo, veamos que la definición recursiva del factorial
en verdad cumple la especificación.

Ejemplo 5.29. La definición recursiva de f en el ejemplo 5.17 calcula a la función factorial. Es

r
decir, para todo número natural n, se cumple f ♣nq ✏ f ac♣nq.
Base: n ✏ 0. Tenemos f ♣0q ✏ 1 ✏ f ac♣0q.

do
Hipótesis de inducción: f ♣nq ✏ f ac♣nq.
Paso inductivo: queremos demostrar que f ♣s♣nqq ✏ f ac♣s♣nqq.

f ♣s♣nqq ✏ s♣nq ☎ f ♣nq (definición de f )


✏ s♣nq ☎ f ac♣nq (hipótesis de inducción)
✏ ♣n 1q ☎ n ☎ ♣n ✁ 1q ☎ . . . ☎ 2 ☎ 1 (definición de f ac♣nq)
rra
✏ f ac♣s♣nqq (definición de f ac♣s♣nqq)

En conclusión f ♣nq ✏ f ac♣nq para todo número natural n.

Ahora bien, para el caso de funciones definidas sobre otro tipo de datos, ¿cómo pode-
mos probar que la especificación se satisface con la implementación recursiva?
De las definiciones y pruebas por inducción de las operaciones de suma y producto,
Bo

ası́ como de la prueba del ejemplo anterior, se observa una fuerte relación entre el prin-
cipio de inducción matemática y las definiciones recursivas que involucran números natu-
rales. Cada propiedad de la definición recursiva, como cumplir con una especificación da-
da, puede mostrarse mediante el principio de inducción. Esta relación puede generalizarse
a distintas estructuras o tipos de datos definidos recursivamente, lo que haremos a contin-
uación.

5.5. Inducción estructural


Para demostrar propiedades acerca de estructuras definidas recursivamente en el sentido
descrito en la página 229, es posible recurrir a la inducción matemática, definiendo una
medida en la estructura en cuestión, lo que se hace mediante un número natural. Entre
5.5. Inducción estructural 237

las medidas que podemos mencionar están la longitud de una lista, la profundidad de un
árbol o el número de conectivos en una fórmula proposicional. Esto es posible debido a
que las reglas recursivas de la definición en cuestión se dan en términos de elementos
estructuralmente más simples, por lo que su medida será menor y la hipótesis de inducción
podrá emplearse. Sin embargo, en la mayorı́a de los casos, el uso de una medida complica
las pruebas, además de que la elección de una medida incorrecta podrı́a resultar en una
prueba fallida. Otra posibilidad es generalizar el principio de inducción completa mediante
la definición de un orden en los tipos de datos, el cual debe ser bien fundado, es decir, no
debe contener sucesiones descendentes infinitas. Sin embargo, el problema de decidir si
una estructura particular es bien fundada no siempre es fácil de resolver.
En lugar de las alternativas anteriores es posible utilizar los llamados principios de

r
inducción estructural, basados en las reglas base y recursivas de la definición de un tipo de
datos, ası́ como en el análisis de los patrones básicos introducidos por éstas.

do
El esquema general del principio de inducción estructural es el siguiente: Sean A un
conjunto o tipo de datos definido recursivamente y P una propiedad acerca de los elementos
de A. Para probar que P ♣xq es válida para todo elemento de A deben seguirse los siguientes
pasos:
• Base de la inducción: Si a es un elemento de A generado por una regla básica,
entonces debemos probar directamente la validez de P ♣aq.
rra
• Si x es un elemento de A construido mediante alguna regla recursiva a partir de
elementos anteriores4 x1 , . . . , xn , entonces procedemos como sigue:
Hipótesis de inducción: Suponer P ♣x1 q, . . . , P ♣xn q.
Paso inductivo: Probar P ♣xq.
• En este caso, el principio de inducción estructural permite concluir que ❅xP ♣xq.
Bo

La validez de este principio se sigue de un principio más general de la teorı́a de los


conjuntos llamado de B-F-inducción cuya discusión cae fuera de los objetivos de este libro.
En nuestro caso el principio de inducción estructural debe adaptarse a cada conjunto
o tipo de datos particular. En las siguientes secciones lo ejemplificamos para los casos de
listas, árboles y fórmulas proposicionales.

5.5.1. Inducción en listas

El tipo de datos lista es uno de los más comunes en ciencias de la computación. Este
tipo de datos se definió recursivamente en el ejemplo 5.14, y genera el siguiente principio
de inducción estructural:
4
Es decir, elementos estructuralmente más simples.
238 Inducción y recursión

Sea P una propiedad acerca de listas; si se desea probar P ♣xsq para toda lista xs,
basta proceder como sigue:
Base de la inducción: Probar P ♣r sq directamente.
Hipótesis de inducción: Suponer P ♣xsq .
Paso inductivo: Probar P ♣♣a : xsqq para cualquier a.
Si este es el caso, el principio de inducción para listas permite concluir P ♣xsq
para cualquier lista xs.

Para ilustrar el uso de la inducción en listas probamos enseguida algunas propiedades


de las operaciones en listas.

r
Proposición 5.1 La función recursiva f dada en el ejemplo 5.21 calcula la concatenación de

do
dos listas. Es decir, para cualesquiera listas xs, ys, f ♣xs, ysq ✏ xs ❭ ys.
Demostración. Inducción sobre xs.
Base de la inducción: xs ✏ r s. Tenemos f ♣r s, ysq ✏ ys ✏ r s ❭ ys.
Hipótesis de inducción: f ♣xs, ysq ✏ xs ❭ ys.
Paso inductivo: Debemos mostrar que para cualquier a,
rra
f ♣♣a : xsq, ysq ✏ ♣a : xsq ❭ ys

f ♣♣a : xsq, ysq ✏ a : f ♣xs, ysq (definición recursiva de f )

✏ a : ♣xs ❭ ysq (hipótesis de inducción)
✏ ♣a : xsq ❭ ys (especificación de ❭)

En conclusión f ♣xs, ysq ✏ xs ❭ ys para cualesquiera listas xs, ys.


Bo

De manera similar podemos probar la correctud de todas las definiciones recursivas de


listas dadas en los ejemplos de la sección 5.4.1.

Como ya probamos que la implementación de la concatenación ❭ es correcta, podemos


usarla de ahora en adelante, como en el caso de la siguiente proposición.

Proposición 5.2 La operación de concatenación ❭ en listas cumple las siguientes propiedades:


• Asociatividad: xs ❭ ♣ys ❭ zsq ✏ ♣xs ❭ ysq ❭ zs
• Longitud: long ♣xs ❭ ysq ✏ long ♣xsq long ♣ysq

Demostración. Probamos la asociatividad mediante inducción sobre la lista xs.


Sea P ♣xsq la propiedad xs ❭ ♣ys ❭ zsq ✏ ♣xs ❭ ysq ❭ zs.
5.5. Inducción estructural 239

Base de la inducción: xs ✏ r s, debemos mostrar que


r s ❭ ♣ys ❭ zsq ✏ ♣r s ❭ ysq ❭ zs.
r s ❭ ♣ys ❭ zsq ✏ ys ❭ zs (definición recursiva de ❭)
✏ ♣r s ❭ ysq ❭ zs (definición recursiva de ❭, ys ✏ r s ❭ ys)
Hipótesis de inducción: xs ❭ ♣ys ❭ zsq ✏ ♣xs ❭ ysq ❭ zs.
Paso inductivo: Sea a un elemento de A; debemos mostrar que
✟ ✟
♣a : xsq ❭ ys ❭ zs ✏ ♣a : xsq ❭ ys ❭ zs.
✟ ✟
♣a : xsq ❭ ys ❭ zs ✏ a : xs ❭ ♣ys ❭ zsq✟ (definición recursiva de ❭)

r
✏ a : ♣xs ❭ ysq✟❭ zs (hipótesis de inducción)
✏ a : ♣xs ❭ ysq✟ ❭ zs (definición recursiva de ❭)

do
✏ ♣a : xsq ❭ ys ❭ zs (definición recursiva de ❭)
Ası́ que por el principio de inducción para listas, concluimos que la operación ❭ es
asociativa.
La propiedad de longitud se demuestra similarmente.

Proposición 5.3 La operación reversa rev en listas cumple las siguientes propiedades:
rra
• Longitud: long ♣rev ♣xsqq ✏ long ♣xsq
• Concatenación: rev ♣xs ❭ ysq ✏ rev ♣ysq ❭ rev ♣xsq
• Idempotencia: rev ♣rev ♣xsqq ✏ xs
Demostración. Mostramos la propiedad de idempotencia mediante inducción sobre la lista xs,
dejando las restantes como ejercicio.
Base de la inducción: xs ✏ r s. Como rev ♣r sq ✏ r s entonces
rev ♣rev ♣r sqq ✏ rev ♣r sq ✏ r s.
Bo

Hipótesis de inducción: rev ♣rev ♣xsqq ✏ xs


Paso inductivo: Sea a un elemento de A; mostraremos que
rev ♣rev ♣♣a : xsqqq ✏ ♣a : xsq.

rev ♣rev ♣♣a : xsqqq ✏ rev rev ♣xsq ❭ ras (definición recursiva de rev)
✏ rev♣rasq ❭ rev♣rev♣xsq (propiedad de concatenación de rev)
✏ rev♣rasq ❭ xs (hipótesis de inducción)
✏ ras ❭ xs (rev ♣rasq ✏ ras)
✏ ♣a : r sq ❭ xs (ras ✏ ♣a : r sq)
✏ a : ♣r s ❭ xsq (definición recursiva de ❭)
✏ ♣a : xsq (definición recursiva de ❭)
240 Inducción y recursión

Conclusión: Ası́ que por el principio de inducción para listas se cumple


rev ♣rev ♣xsqq ✏ xs para toda lista xs.
Pasamos ahora a ilustrar la inducción estructural en fórmulas proposicionales.

5.5.2. Inducción en fórmulas

El conjunto de fórmulas de la lógica proposicional se definió ya mediante una gramática,


ası́ como mediante la definición recursiva del ejemplo 5.12. Esta última forma de definirlo
habilita un principio de inducción estructural de gran utilidad en lógica matemática.

r
El principio de inducción estructural para fórmulas es el siguiente:

Sea P una propiedad acerca de fórmulas proposicionales. Si se desea probar P ♣Aq

do
para toda fórmula A, basta proceder como sigue:
Base de la inducción: probar P ♣q q directamente para cada variable proposi-
cional q; probar P ♣trueq y probar P ♣falseq
Hipótesis de inducción: suponer P ♣Aq y P ♣B q.
Paso inductivo: probar P ♣✥Aq, P ♣A ❫ B q, P ♣A ❴ B q y P ♣A Ñ B q.
rra
Conclusión: En tal caso el principio de inducción para fórmulas permite concluir
P ♣Aq para cualquier fórmula A.

En este caso, debido a nuestros conocimientos de equivalencias lógicas, el paso induc-


tivo puede simplificarse a probar P ♣✥Aq y alguno de los casos para un operador binario, el
cual se elige dependiendo de la propiedad P particular.
Bo

Demostramos a continuación algunas propiedades de las fórmulas proposicionales.

Proposición 5.4 Sea comp la siguiente función recursiva:


comp♣pq ✏ ✥p (i)
comp♣trueq ✏ false (ii)
comp♣falseq ✏ true (iii)
comp♣✥Aq ✏ ✥comp♣Aq (iv)
comp♣A ❴ B q ✏ comp♣Aq ❫ comp♣B q (v)
comp♣A ❫ B q ✏ comp♣Aq ❴ comp♣B q (vi)

Entonces, para toda fórmula C, se cumple comp♣C q ✑ ✥C.

Demostración. Inducción sobre las fórmulas.


5.5. Inducción estructural 241

Base: C es atómica. Si C ✏ p entonces hay que mostrar comp♣pq ✑ ✥p.


comp♣pq ✏ ✥p (por (i))
✑ ✥p (reflexividad de ✑)

Los casos para C ✏ true y C ✏ false son similares.


Hipótesis de inducción Supongamos que comp♣Aq ✑ ✥A y comp♣B q ✑ ✥B.
Paso inductivo: Dado nuestro conocimiento de las equivalencias lógicas, basta mostrar la
propiedad para ✥A y A ❫ B.
comp♣✥Aq ✏ ✥comp♣Aq (por (iv))
✑ ✥✥A (hipótesis de inducción y equivalencia lógica)

r
comp♣A ❫ B q ✏ comp♣Aq ❴ comp♣B q (por (vi))
✑ ✥ A ❴ ✥B (hipótesis de inducción y equivalencia lógica)

do
✑ ✥♣A ❫ B q (De Morgan)
Conclusión: Por el principio de inducción para fórmulas, podemos concluir que
comp♣C q ✑ ✥C, para cualquier fórmula C.
Por último demostramos una propiedad que relaciona a las funciones definidas en los
ejemplos 5.20, 5.23 y 5.25.
rra
Proposición 5.5 Si A es una fórmula proposicional, entonces la longitud de la lista de subfórmu-
las de A es igual a la suma del número de presencias de variables proposicionales de A con
el número de conectivos que figuran en A. Es decir,
long ♣sf ♣Aqq ✏ at♣Aq nc♣Aq
Demostración. Inducción sobre la fórmula A.
Base de la inducción: Sea A ✏ p. Tenemos en A una presencia de la fórmula atómica p
y ningún conectivo. Por lo tanto,
Bo

long ♣sf ♣pqq ✏ long ♣rpsq ✏ 1 ✏ 1 0 ✏ at♣pq nc♣pq


Para A ✏ true o A ✏ false, la prueba es similar.
Hipótesis de inducción: Supongamos que
long ♣sf ♣Aqq ✏ at♣Aq nc♣Aq long ♣sf ♣B qq ✏ at♣B q nc♣B q.
Paso inductivo: Probamos la propiedad para ✥A y A Ñ B.

long ♣sf ♣✥Aqq ✏ long ♣✥A : sf ♣Aqq (definición de sf )
✏ 1 long♣sf ♣Aqq (definición recursiva de long)
✏ 1 ♣at♣Aq nc♣Aqq (hipótesis de inducción)
✏ at♣Aq ♣1 nc♣Aqq (aritmética)
✏ at♣✥Aq ♣1 nc♣Aqq (definición recursiva de at)
✏ at♣✥Aq nc♣✥Aq (definición recursiva de nc)
242 Inducción y recursión


long ♣sf ♣A Ñ B qq ✏ long ♣♣A Ñ B q : sf ♣Aq ❭ sf ♣B qq ♣definición de sf q
✏ 1 long♣sf ♣Aq ❭ sf ♣B qq (definición recursiva de long)
✏ 1 long♣sf ♣Aqq long♣sf ♣B qq (propiedad de long de ❭)
✏ 1 ♣at♣Aq nc♣Aqq ♣at♣B q nc♣B qq (hipótesis de inducción)
✏ ♣at♣Aq at♣B qq ♣1 nc♣Aq nc♣B qq (aritmética)
✏ at♣A Ñ B q ♣1 nc♣Aq nc♣B qq (definición recursiva de at)
✏ at♣A Ñ B q nc♣A Ñ B q (definición recursiva de nc)

r
Conclusión: Por lo tanto, por el principio de inducción para fórmulas, para cualquier
fórmula A se cumple
long ♣sf ♣Aqq ✏ at♣Aq nc♣Aq.

do
Para finalizar este capı́tulo discutimos el principio de inducción para árboles binarios.

5.5.3. Inducción en árboles


rra
La definición recursiva del tipo de datos de árboles binarios dada en el ejemplo 5.15
genera la siguiente versión del principio de inducción estructural:

Sea P una propiedad acerca de árboles binarios. Si se desea probar P ♣T q para


todo árbol T , basta proceder como sigue:
Base de la inducción: Probar P ♣voidq directamente.
Hipótesis de inducción: Suponer P ♣T1 q y P ♣T2 q.
Paso inductivo: Probar P ♣tree♣T1 , c, T2 qq.
Bo

Conclusión: En tal caso el principio de inducción para árboles permite concluir


P ♣T q para cualquier árbol T .

Veamos a continuación un par de ejemplos de pruebas mediante este principio de in-


ducción.

Proposición 5.6 Cualquier árbol binario T con n nodos contiene exactamente n 1 subárboles
vacı́os.
Demostración. Inducción sobre T .
Base: T ✏ void. El número de nodos de T es 0, y el número de subárboles vacı́os es
0 1 ✏ 1, pues T mismo es un subárbol binario vacı́o.
Hipótesis de inducción: Si los árboles binarios T1 y T2 tienen n1 y n2 nodos respectiva-
mente, entonces tienen n1 1 y n2 1 subárboles vacı́os respectivamente.
5.5. Inducción estructural 243

Paso inductivo: Sea T ✏ tree♣T1 , c, T2 q un árbol binario no vacı́o. El número de nodos


de T es 1 n1 n2 . Queremos demostrar que T tiene n1 n2 2 árboles vacı́os.
Es claro que los subárboles vacı́os de T son subárboles de T1 o de T2 , por lo que se
tiene que el número de subárboles vacı́os de T es igual a la suma de los números de
subárboles vacı́os de T1 y de T2 ; pero por la hipótesis de inducción dicha suma es
igual a ♣n1 1q ♣n2 1q ✏ n1 n2 2.
Conclusión: Todos los árboles binarios con n nodos tienen n 1 subárboles vacı́os.

Proposición 5.7 Si T es un árbol binario con altura n, entonces tiene a lo más 2n ✁ 1 nodos. Es
decir, nn♣T q ↕ 2n ✁ 1

r
Demostración. Inducción sobre T .
Base: T ✏ void. En este caso la altura de T es 0 y nn♣T q ✏ 0 pues T no tiene nodos; por
otro lado, 20 ✁ 1 ✏ 1 ✁ 1 ✏ 0, con lo que queda demostrada la base de la inducción.

do
Hipótesis de inducción: Si el árbol Ti tiene altura ni entonces tiene a lo más 2ni ✁1
nodos, donde i ✏ 1, 2.
Paso inductivo: Sea T ✏ tree♣T1 , c, T2 q. Recordemos que la altura de T es igual a 1
máxtn1 , n2 ✉, por lo que debemos demostrar que el máximo número de nodos en T
es 21 máxtn1 n2 ✉ ✁ 1, es decir que nn♣T q ↕ 21 máxtn1 n2 ✉ ✁ 1.
rra
nn♣T q ✏ nn♣T1 q nn♣T2 q 1 ♣definición recursiva de nnq
↕ 2n1 ✁ 1 2n2 ✁ 1 1 (hipótesis de inducción)

↕ 2máxtn ,n ✉ ✁ 1 2máxtn ,n ✉ ✁ 1
1 2 1 2
1 aritmética: 2n1 , 2n2 ↕ 2máxtn ,n ✉
1 2

✏ 2 ☎ 2máxtn ,n ✉ ✁ 1
1 2
(aritmética)
✏ 21 máxtn ,n ✉ ✁ 1
1 2
(leyes de exponentes)
Bo

Este resultado particular es muy utilizado en computación.

Ejercicios

5.5.1.- Para cada ejemplo de la sección 5.4.1 demuestra mediante el principio de induc-
ción estructural correspondiente que la función especificada cumple con la imple-
mentación recursiva.
5.5.2.- Considera las siguientes especificaciones de dos funciones spar y simp cuyo do-
minio y codominio son los números naturales.
spar♣nq ✏ 2 4 6 . . . 2n simp♣nq ✏ 1 3 5 . . . ♣2n 1q
a) Propone implementaciones recursivas f y g para spar y simp, respectivamente.

También podría gustarte