Ejercicio de Inducción (mal)

La siguiente es una demostración errónea de que sum.(duplica.xs) = 2 * sum.xs. Escribimos las definiciones:

duplica : [Num] → [Num]
duplica.[ ] ≐ [ ]
duplica.(x ▷ xs) ≐ 2*x ▷ duplica.xs

sum : [Num] → Num
sum.[ ]
0
sum.(x ▷ xs)
x + sum.xs

Caso Base: reemplazo la variable elegida por [ ]:

sum.(duplica.[ ]) = 2*sum.[ ]

y pruebo lo que obtengo:

      sum.(duplica.[ ] )
={ Definición de duplica }
      sum.[ ]
={ Definición de sum }
      
0
={ Aritmética }
      2*
0
={ Definición de sum }
      2*sum.[ ]

Caso inductivo: La Hipótesis Inductiva es:

(HI) sum.(duplica.xs) = 2 * sum.xs

y debemos probar

sum.(duplica.(x ▷ xs)) = 2* sum. (x ▷ xs):

Comparemos el lado izquierdo con la hipótesis inductiva. Como venimos haciendo, ponemos uno arriba del otro,

sum.(duplica.

xs

)= 2*sum.

xs

sum.(duplica.

(x ▷ xs)

)= 2*sum.

...

Luego, en lugar de los puntos suspensivos debe ir (x ▷ xs):

sum.(duplica.

xs

)= 2*sum.

xs

sum.(duplica.

(x ▷ xs)

)= 2*sum.

(x ▷ xs)

Entonces podemos justificar así:

sum.(duplica.(x ▷ xs)) = 2*sum. (x ▷ xs)
≡{ HI para
(x ▷ xs) }
      2*sum. (x ▷ xs) = 2*sum. (x ▷ xs)
≡{ Reflexividad de = }
      True

Y así concluye la prueba (?!?)

Ejercicio: Encontrar el error!