Inducción estructural¶
Caso de las listas¶
Paso base: nil (lista vacía).
Paso inductivo: h :: t, donde h es la cabeza y t es la cola.
Demostración de la suma de una lista¶
def sumaL(l: List[Int]): Int = {
// Caso base: si la lista está vacía, la suma es 0
if (l.isEmpty) 0
// Caso inductivo: suma la cabeza con la suma recursiva de la cola
else l.head + sumaL(l.tail) // h + P(t)
}
Demostración por inducción estructural¶
Sea P(l) la propiedad: "sumaL(l) devuelve la suma de todos los elementos de l".
- Paso base:
P(nil) = 0. Se cumple porque la suma de una lista vacía es 0. - Paso inductivo:
h :: t.
Suponemos queP(t)es cierto (hipótesis inductiva).
Entonces:Por definición deP(h :: t) = h + P(t)sumaL,sumaL(h :: t) = h + sumaL(t) = h + P(t).
Por lo tanto,P(h :: t)se cumple.
Ejemplo¶
List(4, 5, 6, 7) = 4 :: List(5, 6, 7)
4 + Suma(List(5, 6, 7)) = Suma(List(4, 5, 6, 7))
Conceptos teóricos clave¶
La inducción estructural es una técnica de demostración utilizada para probar propiedades sobre estructuras definidas recursivamente (como listas, árboles, expresiones).
- Paso base: se demuestra la propiedad para el caso más simple (estructura vacía o atómica).
- Paso inductivo: se asume que la propiedad se cumple para las subestructuras (hipótesis inductiva) y se demuestra para la estructura compuesta.
En el caso de listas en Scala:
- Nil representa la lista vacía.
- :: (cons) construye una lista a partir de un elemento (cabeza) y otra lista (cola).
- La recursión estructural sigue la definición inductiva de la lista.
Tabla de resumen¶
| Concepto | Descripción | Ejemplo en Scala |
|---|---|---|
| Inducción estructural | Método de demostración para estructuras recursivas. | Demostrar sumaL(l) suma correctamente. |
| Paso base | Caso mínimo (estructura vacía). | P(Nil) = 0. |
| Paso inductivo | Caso compuesto, asumiendo la propiedad para subestructuras. | P(h :: t) = h + P(t). |
| Lista (definición inductiva) | Nil o h :: t. |
List(4,5,6,7) = 4 :: List(5,6,7). |
| Recursión estructural | Función que sigue la definición inductiva de la estructura. | sumaL llama a sumaL(tail) en el caso recursivo. |
Comentarios adicionales¶
- La inducción estructural es fundamental en lenguajes funcionales para diseñar y verificar algoritmos recursivos.
- En Scala,
Listes una estructura algebraica (ADT) que se presta naturalmente a este tipo de razonamiento. - La corrección de funciones como
sumaLse garantiza mediante la demostración inductiva, asegurando que todos los casos (base e inductivo) están correctamente definidos. - Este enfoque se extiende a otras estructuras (árboles, grafos) y propiedades (ordenamiento, transformación).