Teorema di Zeckendorf

Il teorema di Zeckendorf, dal matematico belga Edouard Zeckendorf, è un teorema sulla rappresentazione di interi come somme di numeri di Fibonacci; esso afferma che ogni intero ha una e una sola rappresentazione di Zeckendorf.

Definizione di una rappresentazione di Zeckendorf

modifica

Un intero è rappresentato secondo Zeckendorf se è espresso come somma di numeri di Fibonacci e se tale somma verifica le seguenti proprietà:

  1. tra gli addendi della somma non compaiono numeri di Fibonacci consecutivi
  2. gli addendi sono distinti, ovvero non ci sono addendi doppioni
  3. tra gli addendi della somma non compaiono   e  

Una somma che rispetti queste condizioni è detta rappresentazione di Zeckendorf.

Esempi e falsi esempi

modifica

A titolo di chiarimento si mostra esplicitamente la rappresentazione di Zeckendorf del numero cento:

 

Non è difficile, partendo dalla rappresentazione fornita e ricordando le proprietà di costruzione dei numeri di Fibonacci, esprimere il numero cento come somma di altri numeri di Fibonacci.
Ecco degli esempi:

 
  • Questa rappresentazione non è di Zeckendorf, perché   e   sono numeri di Fibonacci consecutivi.
 
  • Questa rappresentazione non è di Zeckendorf, perché il numero di Fibonacci   compare due volte.
 
  • In questa rappresentazione il problema cambia a seconda dell'ottica scelta: si possono vedere gli addendi 1 e 2 ancora una volta numeri di Fibonacci consecutivi o, qualora si scelgano i pedici affinché non lo siano, rifiutarla perché in essa compare  , addendo vietato dalla terza richiesta fatta nella definizione.

Esistenza della rappresentazione di Zeckendorf e suo ottenimento tramite algoritmo ingordo

modifica

Di seguito dimostreremo che, fissato un qualunque intero positivo  , si può costruire una somma che soddisfa le condizioni di Zeckendorf usando un semplice algoritmo ingordo, ovvero scegliendo a ogni passo il più grande numero di Fibonacci possibile.
Segue una formalizzazione di questa idea.

Sia   il numero che si vuole rappresentare. Si introduca la funzione:

 

Che, dato un numero  , restituisce il più grande numero di Fibonacci non più grande di   o equivalentemente, il numero di Fibonacci precedente il primo numero di Fibonacci più grande di  .
Si può indicare questo numero con il nome parte di Zeckendorf o se si vuole parte di Fibonacci del numero  .
A titolo di esempio, avvantaggiandoci dell'aver già studiato il caso nel capitolo precedente, si può calcolare la parte di Zeckendorf (o di Fibonacci) del numero cento, risulta:

 

L'idea dell'algoritmo ingordo è che, preso un numero iniziale, a esso si sottragga la sua parte di Zeckendorf. Così facendo si ottiene un secondo numero del quale si calcola la parte di Zeckendorf, poi nuovamente si sottrae e così via. L'insieme delle varie parti di Zeckendorf così ottenute costituirà la rappresentazione di Zeckendorf del numero  .

Si può ora esporre questa idea appoggiandoci al formalismo delle successioni ricorrenti.
Per amor di brevità e per disinteresse del nominalismo nel prosieguo ci riferiremo alle varie parti di Zeckendorf (o di Fibonacci) con il semplice nome di parti.

In particolare useremo i nomi: prima parte, seconda parte, terza parte, ecc. Con l'usuale convenzione che fa sì che l'ordinale sia funzione dell'indice della parte.

Si costruiscano le due successioni:

 

Che chiameremo successione degli avanzi e:

 

che sarà chiamata successione delle parti.

Si dimostra che la somma della successione delle parti, per come è costruita, rispetta tutte le richieste di Zeckendorf.

Lemma 1: Due parti successive non sono mai numeri di Fibonacci successivi

modifica

In simboli:

 

Sostituendo nella definizione logica di   si osserva che, affinché sia vera la disuguaglianza, basta chiedere che sia identicamente vera la seguente disequazione:

 

Si supponga dunque per assurdo che non sia così per qualche n:

 

Utilizzando la definizione ricorsiva della successione degli avanzi:

 

ovvero

 

Ma per ipotesi è vero proprio l'opposto per ipotesi.

 

ergo, nel caso fosse, saremmo di fronte a un'incongruenza e quindi la disequazione è sempre vera e con essa la disuguaglianza.

Moralmente si può dire che ciò si verifica perché l'ingordigia fa preferire all'algoritmo un unico boccone grosso di peso   a due bocconi più piccoli anche se di peso equivalente  .

Ogni addendo compare una e una sola volta

modifica

Questo risultato si ottiene agevolmente a partire dallo studio delle tre successioni che compaiono all'interno della sezione.

Per lo studio della successione di Fibonacci si rimanda alla voce specifica e ci si limita qui a prendere nota che essa è positiva, divergente e crescente per ogni indice positivo.

Dal risultato precedente segue, per costruzione, che la successione degli avanzi è positiva e sempre decrescente.
Ciò si verifica perché l'enne+1-esimo avanzo è ottenuto, per costruzione, come differenza di un numero positivo (l'avanzo precedente) con un numero di Fibonacci inferiore o uguale (la parte dell'avanzo precedente) e certamente positivo. Questa proprietà è legata al fatto che la successione di Fibonacci è crescente, positiva, divergente e si ha  , queste tre ipotesi implicano che, per ogni   naturale non nullo, esiste sempre un numero di Fibonacci positivo   più piccolo o uguale, in simboli:

 

Di contro, questo secondo risultato, implica che anche la successione delle parti, essendo i numeri di Fibonacci positivi e crescenti per indici positivi, è decrescente, e questo teorema è vero tanto nelle parti quanto nei loro pedici di Fibonacci.

In simboli i tre risultati si sintetizzano.

 
 
 

In particolare, l'ultima catena di disequazioni, garantisce che ogni numero di Fibonacci compaia una e una sola volta.

L'algoritmo non produce mai come risultati   o  

modifica

Per quel che riguarda l'assenza di F_1 ci si rifà alla definizione di algoritmo ingordo, e si osserva che esso non potrà mai, per costruzione logica, fornire come uscita  .
Ciò è dovuto al fatto che:

 

è che affinché   possa essere un'uscita dell'algoritmo, dovrebbe esistere un intero che verifichi la seguente e:

 

Ma tale intero ovviamente non esiste.
Per ragioni analoghe, posto   per la definizione ricorsiva, l'algoritmo non può produrre come uscita   .

L'algoritmo termina sempre in un numero finito di passaggi

modifica

Si è dimostrato precedentemente che l'algoritmo produce sempre avanzi positivi minori dell'avanzo iniziale, i numeri positivi minori di N sono un numero finito, ergo l'algoritmo si arresta in un numero finito di passaggi

Unicità della rappresentazione di Zeckendorf

modifica

L'unicità si ottiene efficientemente per assurdo. Si supponga che un numero   abbia due decomposizioni distinte.

 
 

Si eliminino per prima cosa da ambo le rappresentazioni gli elementi ripetuti ovvero gli:

 

Il nuovo numero così ottenuto sarà indicato come  , ed avrà anch'esso due rappresentazioni. Ovviamente, essendo scomparsi dei termini, gli indici andranno riassegnati e ad essere cambiato saranno anche il loro complessivo dei termini costituenti le rappresentazioni.

 
 

Avendo solamente tolto addendi entrambe le rappresentazioni ottenute saranno ancora di Zekendorf; non c'è infatti rischio di aver aggiunto doppioni o addendi in posizioni vietate. Inoltre, dato che abbiamo supposto le due rappresentazioni di   distinte, anche   , poiché somma di quantità positive e non nulle. Il caso in cui tutti i termini si fossero elisi vicendevolmente va escluso perché, se così fosse, verrebbe meno l'ipotesi che le due rappresentazioni siano distinte.
Senza perdere di generalità si supponga a questo punto:

 

Per il seguito si introduce la seguente identità, valida per   :

 

Dove la disequazione è vera perché la successione di Fibonacci è crescente e la seconda parte è semplicemente la definizione ricorsiva di  .
Si può scrivere a questo punto la seguente catena di equazioni e disequazioni:

 

Ora, essendo il numero   rappresentato secondo Zeckendorf, l'ultimo termine della disequazione   è tale da soddisfare la seguente disequazione:

 

e questo perché le rappresentazioni di Zeckendorf non ammettono parti successive che siano numeri di fibonacci successivi. Sostituendo anche questa disequazione nella catena:

 

Che iterato fino alla fine del processo da:

 

Elidendo l'esubero rimane:

 

Il primo termine tra parentesi potrebbe anche essere nullo, ma sicuramente non è negativo, il secondo, essendo   rappresentato secondo Zeckendorf, è quantomeno  , ergo :

 

Assurdo.

Ogni rappresentazione di Zeckendorf di un numero è pertanto unica

Codifica di Fibonacci binaria

modifica

I numeri codificati secondo Zeckendorf si possono scrivere in maniera analoga ai numeri binari. In particolare, posti

 

Si possono scrivere banalmente i numeri rappresentati secondo Zeckendorf nella forma:

 

e omettendo i moltiplicandi di Fibonacci come stringa binaria

Alcuni esempi chiariranno meglio cosa si è fatto:

 
 

Tale modo di codificare i numeri, con l'omissione dei due zeri all'inizio e l'aggiunta di un uno alla fine, viene utilizzato in informatica e prende il nome di codifica di Fibonacci.
Essa ha la proprietà di presentare una coppia di 1 appaiati solamente alla fine del numero e permette per questo di memorizzare gli interi senza imporre loro una dimensione a priori, come ad esempio si fa nelle architetture a 32 bit.
Si tratta di un esempio di notazione dotata di codice prefisso (suffisso in questo caso).

Normalizzazione di un numero

modifica

Si supponga di avere un numero espresso in binario di Fibonacci ma non ben rappresentato secondo Zeckendorf.
A titolo d'esempio un numero del genere è il seguente.

 

Che non è in forma corretta perché ci sono degli 1 adiacenti.
Per portarlo nella forma corretta quello che si deve fare è leggerlo da destra a sinistra e, quando si trovano coppie di 1, sostituire queste con uno 0 e lo zero precedente la coppia (a destra)con un 1.
Si applica il procedimento tutte le volte necessarie.

  1º Passaggio
  2º Passaggio

Tale operazione è giustificata dal fatto che

 

Somma ordinaria tra rappresentazioni Zeckendorf binarie

modifica

Così come si può costruire un algoritmo di somma tra numeri in binario si può fare altrettanto con i numeri rappresentati secondo Zeckendorf. Le tabelle della soma rimangono fondamentalmente invariate con l'unica differenza che, rispetto all'usuale somma binaria, i riporti non sono fatti solo in avanti di una posizione ma anche indietro di due. Il perché si capisce facilmente leggendo la seguente identità:

 

A titolo di esempio:

 

Che con la notazione binaria introdotta diventa:

  Addendo
  Addendo

Che computato diventa

  Parziale
  Riporto

Che a sua volta da

  che non è una rappresentazione Zeckendorf

Applicando la procedura di normalizzazione si ottiene infine:

 

E che ci conferma che, anche con questa notazione:

 

Prodotto di Fibonacci

modifica

Mediante la codifica di Zeckendorf si può definire l'operazione "prodotto di Fibonacci". Tale operazione non coincide identicamente con l'usuale moltiplicazione e non è distributiva rispetto all'usuale somma, si tratta pertanto di un'operazione binaria a sé stante.

 
 

Date le rappresentazioni di Zeckendorf di due naturali

 
 

si definisce prodotto di Fibonacci

 .

Un contr'esempio dimostra esplicitamente la non equivalenza tra questa operazione ed il prodotto usuale, siano dunque:

 
 

Applicando la definizione e mandando avanti i conti

 

Dove l'ultima parte è stata aggiunta per confronto.

Knuth dimostrò il fatto notevole che questa operazione è associativa. La dimostrazione si appoggia sull'equivalenza procedurale (da un punto di vista formale) tra prodotto tra numeri scritti in binario e prodotto Fibonacci tra numeri espressi in binario di fibonacci.

Si veda anche A101330.


Bibliografia

modifica
  • (EN) D. E. Knuth, Fibonacci multiplication, Appl. Math. Lett. 1 (1988), 57–60

Voci correlate

modifica

Altri progetti

modifica

Collegamenti esterni

modifica
  Portale Matematica: accedi alle voci di Wikipedia che trattano di matematica