01 · Naturales: cero, sucesor y recursión
Naturales: cero, sucesor y recursión¶
Representa cada natural como cero o como sucesor y lee la igualdad y la suma directamente en esos dos casos.
Ya sabes que los operadores llaman métodos especiales y que el decorador registra al regresar.
- explicar con tus palabras la definición matemática de «Naturales: cero, sucesor y recursión»
- señalar cómo se representa esa definición en datos de Python
- predecir una ejecución pequeña a partir del código real
Cero y sucesor pertenecen al punto de partida de Peano. `n + 0 = n` y `n + S(m) = S(n + m)` son definiciones recursivas de la suma, no axiomas nuevos.
`pre=None` representa cero y `pre=n` representa `S(n)`. El 2 es la cadena `S(S(0))`, no un campo que contenga el int 2.
`0` / `S(n)` → `NaturalNumber.pre`; recursive addition → `__add__`
Definición matemática
Definición matemática¶
Cero y sucesor pertenecen al punto de partida de Peano. n + 0 = n y n + S(m) = S(n + m) son definiciones recursivas de la suma, no axiomas nuevos.
Representación de datos
Representación de datos¶
pre=None representa cero y pre=n representa S(n). El 2 es la cadena S(S(0)), no un campo que contenga el int 2.
Implementación en Python
Implementación en Python¶
__eq__ distingue cero de sucesor y compara predecesores; las dos ramas de __add__ reproducen el caso base y el recursivo.
La correspondencia exacta usada en el curso:
Traza de ejecución
Traza de ejecución¶
En 2 + 2, el operando derecho disminuye hasta cero. Al regresar, aparece primero el caso base y después las dos llamadas externas.
Escribe la línea del caso base, la última línea recursiva y el valor final.
Escribe primero tu predicción y después ejecuta.
Comprobación con pruebas
Comprobación con pruebas¶
Las pruebas nombran la separación de cero, la inyectividad del sucesor y las ecuaciones de suma. Una prueba finita no sustituye a la inducción.
Alcance y límites
Alcance y límites¶
La cadena unaria muestra la estructura, pero su coste crece con el valor; usa entradas pequeñas.