Prueba inductiva de codificación de Fibonacci

Demostrar por inducción sobre norte , que todo entero positivo tiene una representación de Fibonacci, como en la representación del código de Fibonacci .

Entonces, aunque entiendo la premisa detrás de la codificación de Fibonacci, y puedo ver que cada número entero positivo tendrá su propia representación única al tener en cuenta el hecho de que la longitud del código aumenta para cada número de Fibonacci que norte pasa, permitiendo más combinaciones de 1 en la cadena resultante, de alguna manera tengo que relacionar esto con la diferencia entre dos números de Fibonacci consecutivos, y realmente estoy luchando para formalizar todo esto. Me parece bastante extraño en comparación con una prueba de inducción algebraica típica.

Como referencia, aquí hay un código de Python que genera la representación de Fibonacci de norte .

def FibEncode(n):
  Fib = [0, 1]
  while Fib[-1] <= n:
    Fib += [Fib[-1] + Fib[-2]]
  Fib = Fib[:-1]
  rep = '1'
  for i in range(len(Fib) - 1, 1, -1):
    if Fib[i] <= n:
      rep = '1' + rep
      n = n - Fib[i]
    else:
      rep = '0' + rep
  return rep

for i in range(1, 15):
  print("i:", i, "\t|FibEncode(i):", FibEncode(i))

¿Cómo formalizarías todos los diferentes aspectos a los que tendrías que referirte para probar esto por inducción?

Editar:

Así que estoy un poco más cerca, pero todavía no estoy seguro de cómo proceder.

Denotar F a como el a t h número de Fibonacci, y GRAMO norte como el número de números de Fibonacci menor o igual que norte (contando 1 dos veces). Deseamos mostrar que norte Z + una secuencia de X i , X i { 0 , 1 } , 2 i GRAMO norte tal que norte = j = 1 GRAMO norte 1 X j F j + 2 .

Para norte = 1 , 2 , 3 esos son solo números de Fibonacci, por lo que esos casos base son bastante simples.

Para norte = 4 , entonces X 1 = 1 , X 2 = 0 , X 3 = 1 lo que implica que 4 = 1 1 + 0 2 + 1 3 lo cual es cierto.

Así que ahora solo tengo que dar el paso inductivo, pero realmente no estoy seguro de cómo lo escribiría dada la forma en que lo he configurado hasta ahora.

¿Qué pasaría si le dijera que simplemente cambiando las reglas para generar su matriz, produciría la codificación binaria para el número? es decir, cambia Fib += [Fib[-1] + Fib[-2]] en Fib += [2* Fib[-1]] y de repente tu código está escupiendo el binario para números. ¿Eso ayuda en algo?
En particular, el binario de un número representa un número por una suma de potencias de dos. ¿Hay una suma de la que podamos hablar aquí?
@ user24142, ahora veo su punto y actualicé mi pregunta con el comienzo de mi prueba. Todavía no estoy seguro de cómo completarlo.

Respuestas (1)

Usando inducción fuerte, suponga que todos los números hasta norte tener una representación de Fibonacci. Necesitamos demostrar que norte + 1 tiene una representación de Fibonacci. Si restas el número de Fibonacci más grande F k Menos que o igual a norte + 1 obtendrá un resultado más pequeño que F k 1 . Sabemos norte + 1 F k tiene una representación de Fibonacci y no incluye F k 1 , entonces norte + 1 tiene una representación de Fibonacci.

una de las condiciones de la representación fibonnacci de un número es que no debe tener unos consecutivos. No estoy seguro de cómo su prueba deja en claro que la representación resultante tiene esta propiedad.
@ user24142: me lo había perdido, pero actualicé la respuesta para cubrirlo.