No artigo anterior, o Princípio de Indução Matemática (PIM) assumia apenas \(P(k)\) para provar \(P(k+1)\). Isso é suficiente em muitos casos. Mas e quando o passo \(k+1\) depende não apenas de \(k\), mas de dois ou mais casos anteriores ao mesmo tempo?
A resposta é a Indução Forte — uma variante que assume a verdade de todos os casos anteriores de uma vez.
Por que a Indução Forte? #
A indução simples basta quando cada passo depende apenas do caso imediatamente anterior. A indução forte é necessária quando o raciocínio precisa recuar mais de um nível — o que acontece com frequência em ciência da computação:
- Sequências recorrentes de múltiplos passos — Fibonacci usa \(F_{k+1} = F_k + F_{k-1}\); provar qualquer propriedade desse tipo de sequência por indução exige ambos os casos anteriores.
- Algoritmos de divisão e conquista — Merge sort e quick sort dividem o problema em partes de tamanho arbitrário (não necessariamente \(k-1\)); a prova de corretude precisa da hipótese para todos os subproblemas menores.
- Fatoração e teoria dos números — a prova de que todo inteiro \(n > 1\) tem um fator primo requer a hipótese para qualquer divisor de \(n\), que pode ser bem menor que \(n-1\).
- Propriedades estruturais de árvores — demonstrações sobre uma árvore de \(n\) nós frequentemente recaem em subárvores de tamanho qualquer menor que \(n\).
Este artigo apresenta a técnica com exemplos de crescente complexidade, culminando na Fórmula de Binet para Fibonacci.
A Sequência de Fibonacci #
Antes do princípio formal, vale apresentar a sequência que será usada como exemplo ao longo deste artigo.
Primeiros termos: \(1, 1, 2, 3, 5, 8, 13, 21, 34, 55, \ldots\)
Cada termo é a soma dos dois anteriores:
$$F_3 = F_2 + F_1 = 2, \quad F_4 = F_3 + F_2 = 3, \quad F_5 = F_4 + F_3 = 5, \ldots$$Uma identidade observada #
Calculando os primeiros casos:
| \(n\) | \(F_1^2 + \cdots + F_n^2\) | \(F_n \cdot F_{n+1}\) |
|---|---|---|
| 1 | 1 | \(1 \cdot 1 = 1\) |
| 2 | 2 | \(1 \cdot 2 = 2\) |
| 3 | 6 | \(2 \cdot 3 = 6\) |
| 4 | 15 | \(3 \cdot 5 = 15\) |
O padrão sugere: \(F_1^2 + F_2^2 + \cdots + F_n^2 = F_n \cdot F_{n+1}\).
Essa identidade pode ser provada por indução simples (cada passo só precisa do caso anterior):
Base (\(n = 1\)): \(F_1^2 = 1 = F_1 \cdot F_2\) ✓
HI: \(F_1^2 + \cdots + F_k^2 = F_k \cdot F_{k+1}\)
Passo indutivo (\(n = k+1\)):
$$F_1^2 + \cdots + F_k^2 + F_{k+1}^2 \stackrel{\text{HI}}{=} F_k F_{k+1} + F_{k+1}^2 = F_{k+1}(F_k + F_{k+1}) = F_{k+1} \cdot F_{k+2}$$Portanto, \(F_1^2 + F_2^2 + \cdots + F_n^2 = F_n \cdot F_{n+1}\), que é o que queríamos demonstrar. \(\blacksquare\)
Aplicação: Fibonacci recursivo e complexidade exponencial
A implementação recursiva ingênua de Fibonacci em Python espelha diretamente a definição:
def fib(n):
if n <= 2:
return 1
return fib(n - 1) + fib(n - 2)Cada chamada gera duas chamadas menores — fib(n-1) e fib(n-2) — e muitos
subproblemas são recalculados repetidamente. Chamando de \(C_n\) o número de
chamadas feitas por fib(n), temos \(C_1 = C_2 = 1\) e
\(C_n = 1 + C_{n-1} + C_{n-2}\), e uma indução forte mostra que \(C_n = 2F_n - 1\).
O custo cresce, portanto, como o próprio \(F_n\) — e \(F_n\) cresce
exponencialmente: pela Fórmula de Binet, provada no Exercício 4,
\(F_n \approx \varphi^n/\sqrt{5}\), com \(\varphi \approx 1{,}618\). Para
\(n = 50\), são mais de 25 bilhões de chamadas. O Exemplo 1, adiante, dá o outro
lado da conta: a cota superior \(F_n < \left(\frac{7}{4}\right)^n\) garante que o
crescimento não passa de exponencial.
A solução é memoização: armazenar cada \(F_k\) calculado e reutilizá-lo:
from functools import lru_cache
@lru_cache(maxsize=None)
def fib(n):
if n <= 2:
return 1
return fib(n - 1) + fib(n - 2)Com memoização, cada valor é calculado uma única vez — complexidade \(O(n)\).
O impacto aparece em medições práticas. Para \(n = 35\), com Python 3.13 num computador pessoal recente:
| Versão | Tempo (1 execução) | Complexidade |
|---|---|---|
| Ingênua | ~0,75 s | exponencial |
| Memoizada | ~0,01 ms | \(O(n)\) |
| Binet | ~0,01 ms | \(O(1)\) |
Os tempos exatos variam de máquina para máquina; o que se repete é a proporção. Cada unidade a mais em \(n\) multiplica o tempo da versão ingênua por cerca de \(\varphi \approx 1{,}6\): de \(n = 30\) para \(n = 35\), o tempo fica umas dez vezes maior.
A Fórmula de Binet, que será provada adiante no Exercício 4, reduz o cálculo a \(O(1)\) operações aritméticas, e a indução forte é a garantia matemática de que essa fórmula está correta para todo \(n\). Mas a garantia é matemática: o computador não trabalha com \(\sqrt{5}\) exato. Em ponto flutuante de 64 bits, a fórmula acerta até \(F_{70}\) e erra a partir de \(F_{71}\):
from math import sqrt
phi = (1 + sqrt(5)) / 2
psi = (1 - sqrt(5)) / 2
def fib_binet(n):
return round((phi**n - psi**n) / sqrt(5))
def fib_exato(n):
a, b = 0, 1
for _ in range(n):
a, b = b, a + b
return a
print(fib_binet(70) == fib_exato(70)) # True
print(fib_binet(71)) # 308061521170130
print(fib_exato(71)) # 308061521170129O float64 guarda cerca de 16 algarismos significativos, e \(F_{71}\) já tem 15:
o pequeno erro de arredondamento em \(\sqrt{5}\) e em \(\varphi^n\) passa a
atingir a casa das unidades. O
artigo sobre o padrão IEEE 754 explica de
onde vem esse limite. Para valores exatos com \(n\) grande, as versões que usam só
inteiros — memoizada ou iterativa — são a escolha certa.
A redundância de cálculos fica evidente na árvore de chamadas de fib(5): fib(3)
é calculado duas vezes e fib(2) três vezes — e o problema se agrava exponencialmente
com \(n\).
flowchart TD F5["fib(5)"] --> F4["fib(4)"] F5 --> F3a["fib(3)"] F4 --> F3b["fib(3)"] F4 --> F2a["fib(2)"] F3a --> F2b["fib(2)"] F3a --> F1a["fib(1)"] F3b --> F2c["fib(2)"] F3b --> F1b["fib(1)"]
Princípio de Indução Forte #
Seja \(P(n)\) uma propriedade sobre \(n \in \mathbb{N}\). Se:
- Base: \(P(1)\) é verdadeira
- Passo: \(\bigl[P(1), P(2), \ldots, P(k)\ \text{são todas verdadeiras}\bigr] \Rightarrow P(k+1)\)
Então \(P(n)\) é verdadeira para todo \(n \in \mathbb{N}\).
O Princípio de Indução Forte é equivalente ao PIM padrão: qualquer proposição que pode ser provada por um também pode ser provada pelo outro. A diferença é prática: a hipótese mais forte da indução forte torna certas provas muito mais diretas.
A diferença está na hipótese: no PIM, assumimos apenas \(P(k)\). Na indução forte — em inglês, strong ou complete induction —, assumimos \(P(1), P(2), \ldots, P(k)\), todos os casos anteriores simultaneamente. Isso é particularmente útil quando \(P(k+1)\) depende de casos mais distantes (como \(P(k-1)\), \(P(k-2)\), etc.).
O diagrama abaixo contrasta as duas cadeias de implicação: na indução simples, cada nó recebe seta apenas do anterior; na indução forte, cada nó recebe setas de todos os anteriores.
flowchart LR
subgraph simples["Indução Simples"]
direction LR
P1["P(1)"] --> P2["P(2)"]
P2 --> P3["P(3)"]
P3 --> P4["P(4)"]
P4 --> PN["..."]
end
subgraph forte["Indução Forte"]
direction LR
Q1["P(1)"] --> Q3["P(3)"]
Q2["P(2)"] --> Q3
Q1 --> Q4["P(4)"]
Q2 --> Q4
Q3 --> Q4
Q4 --> QN["..."]
end
Estrutura da prova #
Toda prova por indução forte segue a mesma estrutura em três etapas:
| Etapa | O que fazer |
|---|---|
| Base | Verificar \(P(1)\) (e às vezes \(P(2)\) ou mais) |
| Hipótese forte (HIF) | Assumir \(P(1), P(2), \ldots, P(k)\) verdadeiras para um \(k \geq 1\) fixado arbitrariamente |
| Passo indutivo | Provar \(P(k+1)\) usando a HIF |
Quando a recorrência no passo indutivo recua \(r\) posições — isto é, \(P(k+1)\) depende de \(P(k), P(k-1), \ldots, P(k-r+1)\) — é preciso verificar \(r\) casos base independentemente. Para Fibonacci (\(r = 2\)), os casos \(P(1)\) e \(P(2)\) são necessários; para uma recorrência de ordem 3, seriam \(P(1)\), \(P(2)\) e \(P(3)\). Sem esses casos iniciais, a cadeia indutiva não tem ponto de partida suficiente.
Há uma formulação mais enxuta da indução forte: se, para todo \(n \geq 1\), a verdade de \(P(m)\) para todos os \(m < n\) implica \(P(n)\), então \(P(n)\) vale para todo \(n\). Ela parece dispensar a base, mas não dispensa: para \(n = 1\) não existe nenhum \(m < 1\), a hipótese é vazia, e a implicação exige provar \(P(1)\) sem ajuda nenhuma — que é justamente o caso base. A versão com base explícita, usada neste artigo, só deixa esse passo à vista.
Aplicação: Merge sort e corretude por divisão e conquista
O merge sort ordena uma lista dividindo-a ao meio, ordenando cada metade recursivamente e fundindo os resultados:
def merge(a, b):
result, i, j = [], 0, 0
while i < len(a) and j < len(b):
if a[i] <= b[j]:
result.append(a[i]); i += 1
else:
result.append(b[j]); j += 1
return result + a[i:] + b[j:]
def merge_sort(lst):
if len(lst) <= 1:
return lst
mid = len(lst) // 2
left = merge_sort(lst[:mid])
right = merge_sort(lst[mid:])
return merge(left, right)A prova de corretude segue exatamente a estrutura da indução forte:
| Etapa | No merge sort |
|---|---|
| Base | len(lst) <= 1 — lista vazia ou unitária já está ordenada |
| HIF | merge_sort(lst[:mid]) e merge_sort(lst[mid:]) retornam listas ordenadas (subproblemas de tamanhos \(\lfloor n/2 \rfloor\) e \(\lceil n/2 \rceil\), ambos \(\leq k\)) |
| Passo | merge(left, right) — fusão de duas listas ordenadas produz lista ordenada |
A hipótese simples não bastaria aqui: os subproblemas têm tamanhos \(\lfloor n/2 \rfloor\) e \(\lceil n/2 \rceil\) — não necessariamente \(n-1\). A HIF garante a corretude para qualquer tamanho de subproblema menor que \(n\).
Quanto ao custo, o merge sort satisfaz \(T(n) = 2T(n/2) + n\), resolvida — com a resposta \(O(n \log n)\) — na seção sobre divisão e conquista do artigo sobre relações de recorrência.
A árvore de chamadas de merge_sort([5, 3, 8, 1]) contrasta com a do Fibonacci:
cada subproblema é calculado uma única vez e os resultados são combinados de
baixo para cima pelas fusões.
flowchart TD A["[5, 3, 8, 1]"] -->|divide| B["[5, 3]"] A -->|divide| C["[8, 1]"] B -->|divide| D["[5]"] B -->|divide| E["[3]"] C -->|divide| F["[8]"] C -->|divide| G["[1]"] D & E -->|merge| H["[3, 5]"] F & G -->|merge| I["[1, 8]"] H & I -->|merge| J["[1, 3, 5, 8] ✓"]
Exemplo 1: \(F_n < \left(\frac{7}{4}\right)^n\) #
Esse resultado não sai diretamente da indução simples: \(F_{k+1} = F_k + F_{k-1}\) depende de dois casos anteriores, e a HI simples só entrega um. Como as duas induções são equivalentes, dá para contornar — provando, por exemplo, \(P(k)\) e \(P(k+1)\) juntas —, mas a indução forte torna a prova direta.
Base: \(P(1)\): \(F_1 = 1 < \dfrac{7}{4}\) ✓ \(P(2)\): \(F_2 = 1 < \left(\dfrac{7}{4}\right)^2 = \dfrac{49}{16}\) ✓
HIF: \(F_j < \left(\dfrac{7}{4}\right)^j\) para \(j = 1, 2, \ldots, k\).
Passo indutivo (\(n = k+1\), com \(k \geq 2\)):
$$F_{k+1} = F_k + F_{k-1} \stackrel{\text{HIF}}{<} \left(\frac{7}{4}\right)^k + \left(\frac{7}{4}\right)^{k-1} = \left(\frac{7}{4}\right)^{k-1}\left(\frac{7}{4} + 1\right) = \left(\frac{7}{4}\right)^{k-1} \cdot \frac{11}{4}$$Como \(\dfrac{11}{4} < \left(\dfrac{7}{4}\right)^2 = \dfrac{49}{16}\):
$$F_{k+1} < \left(\frac{7}{4}\right)^{k-1} \cdot \left(\frac{7}{4}\right)^2 = \left(\frac{7}{4}\right)^{k+1}$$Portanto, \(F_n < \left(\dfrac{7}{4}\right)^n\), que é o que queríamos demonstrar. \(\blacksquare\)
Indução Forte Generalizada (base em \(n_0\)) #
Assim como o PIM tem versão generalizada, a indução forte também:
Para provar \(P(n)\) para todo \(n \geq n_0\):
- Base: verificar \(P(n_0)\)
- Hipótese: \(P(n_0), P(n_0+1), \ldots, P(k)\) são verdadeiras
- Passo: provar \(P(k+1)\)
Exemplo 2: Decomposição em Primos #
O Exemplo 2 aplica a variante generalizada com \(n_0 = 2\): o enunciado vale para todo \(n > 1\), e não há inteiros maiores que 1 e menores que 2 para verificar antes do caso base.
Todo inteiro \(n > 1\) é primo ou pode ser escrito como produto de números primos.
Base (\(n = 2\)): \(2\) é primo ✓
HIF: \(P(2), P(3), \ldots, P(k)\) são verdadeiras.
Passo (\(n = k+1\)):
- Se \(k+1\) é primo, \(P(k+1)\) é verdadeira.
- Se \(k+1\) não é primo, então \(k+1 = a \cdot b\) com \(2 \leq a, b < k+1\).
- Pela HIF, \(a\) e \(b\) são primos ou produtos de primos.
- Logo \(k+1 = a \cdot b\) também é produto de primos.
Portanto, todo inteiro \(n > 1\) é primo ou produto de primos, que é o que queríamos demonstrar. \(\blacksquare\)
Por que a indução forte é a ferramenta natural aqui? Porque quando \(k+1\) se decompõe como \(a \cdot b\), não há garantia de que \(a\) ou \(b\) seja igual a \(k\). Pode ser qualquer valor entre 2 e \(k-1\). A hipótese simples, que só entrega \(P(k)\), não sustenta esse argumento.
Exemplo 3: A Barra de Chocolate #
Uma barra de chocolate \(m \times n\) quadradinhos pode ser partida em quadradinhos individuais em muitas ordens diferentes. Quantas quebras são necessárias no total?
Seja \(Q(k)\): “partir um pedaço de \(k\) quadradinhos em unidades requer exatamente \(k-1\) quebras.” Provamos \(Q(k)\) por indução forte em \(k\).
Base (\(k=1\)): um quadradinho já está partido; \(0 = 1-1\) quebras. ✓
HIF: \(Q(j)\) é verdadeira para todo \(j = 1, 2, \ldots, k\).
Passo indutivo (\(k+1\) quadradinhos):
A primeira quebra divide o pedaço em duas partes de tamanhos \(a\) e \(b\), com \(a + b = k+1\) e \(1 \leq a, b \leq k\). Pela HIF, a parte de \(a\) quadradinhos precisa de \(a-1\) quebras e a de \(b\) precisa de \(b-1\). O total é:
$$1 + (a-1) + (b-1) = a + b - 1 = (k+1) - 1$$Portanto, um pedaço de \(k\) quadradinhos requer exatamente \(k - 1\) quebras para todo \(k \geq 1\), que é o que queríamos demonstrar. \(\blacksquare\)
Em particular, uma barra \(m \times n\), com \(mn\) quadradinhos, precisa de exatamente \(mn - 1\) quebras, qualquer que seja a ordem.
A indução forte é a ferramenta natural aqui: ao partir \(k+1\) quadradinhos, os tamanhos \(a\) e \(b\) podem ser quaisquer valores entre 1 e \(k\) — não necessariamente \(k\). A HIF garante a corretude para todos esses casos de uma só vez.
Comparativo: Indução Simples vs. Indução Forte #
| Característica | Indução Simples | Indução Forte |
|---|---|---|
| Hipótese | \(P(k)\) é verdadeira | \(P(1), \ldots, P(k)\) são verdadeiras |
| Passo | \(P(k) \Rightarrow P(k+1)\) | \(P(1) \wedge \cdots \wedge P(k) \Rightarrow P(k+1)\) |
| Quando usar | Próximo passo depende só de \(k\) | Próximo passo depende de múltiplos casos |
| Equivalência | Sim, são equivalentes | Sim, são equivalentes |
Exercícios #
Pratique aplicando a estrutura da indução forte. Os exercícios 1 e 2 são de dificuldade intermediária; os exercícios 3 e 4 exigem mais elaboração algébrica; o exercício 5 é um resultado fundamental em ciência da computação.
Exercício 1 — Cota para Fibonacci
Prove por indução forte que \(F_n \leq 2^{n-1}\) para todo \(n \geq 1\).
Demonstração:
Base (\(n=1\)): \(F_1 = 1 = 2^0\) ✓ Base (\(n=2\)): \(F_2 = 1 \leq 2^1 = 2\) ✓
HIF: \(F_j \leq 2^{j-1}\) para todo \(j = 1, 2, \ldots, k\) com \(k \geq 2\).
Passo indutivo (\(n = k+1\)):
$$F_{k+1} = F_k + F_{k-1} \stackrel{\text{HIF}}{\leq} 2^{k-1} + 2^{k-2} = 3 \cdot 2^{k-2} \leq 4 \cdot 2^{k-2} = 2^k$$Portanto, \(F_n \leq 2^{n-1}\), que é o que queríamos demonstrar. \(\blacksquare\)
Exercício 2 — Franqueio postal
Prove por indução forte que qualquer valor \(n \geq 8\) centavos pode ser pago exatamente usando selos de 3 e 5 centavos.
Demonstração:
Base (\(n=8\)): \(8 = 3 + 5\) ✓ Base (\(n=9\)): \(9 = 3 + 3 + 3\) ✓ Base (\(n=10\)): \(10 = 5 + 5\) ✓
HIF: todo valor \(j\) com \(8 \leq j \leq k\) pode ser pago, para algum \(k \geq 10\).
Passo indutivo (\(n = k+1 \geq 11\)):
Como \(k+1 \geq 11\), temos \((k+1) - 3 = k-2 \geq 8\). Pela HIF, \(k-2\) centavos podem ser pagos com selos de 3 e 5. Acrescentando um selo de 3 centavos, obtemos \((k-2)+3 = k+1\) centavos.
Portanto, todo valor \(n \geq 8\) centavos pode ser pago, que é o que queríamos demonstrar. \(\blacksquare\)
O enunciado começa em 8 porque 7 é o maior valor que não pode ser pago com selos de 3 e 5 centavos — e isso não é acidente. Dados dois inteiros positivos coprimos \(a\) e \(b\), o maior valor que não se escreve como soma de parcelas \(a\) e \(b\) é \(ab - a - b\); para \(a = 3\) e \(b = 5\): \(15 - 3 - 5 = 7\). A fórmula já aparece num trabalho de James Joseph Sylvester de 1882, e a pergunta geral, com qualquer quantidade de valores, é conhecida como problema de Frobenius, em homenagem a Ferdinand Frobenius. Para três ou mais valores, não se conhece fórmula explícita. Veja este artigo para uma visão abrangente.
Exercício 3 — Sequência com dois casos base
Seja \(\{a_n\}\) definida por \(a_1 = 1\), \(a_2 = 5\) e \(a_n = a_{n-1} + 2a_{n-2}\) para \(n \geq 3\). Mostre por indução forte que \(a_n = 2^n + (-1)^n\) para todo \(n \geq 1\).
Demonstração:
Base (\(n=1\)): \(2^1 + (-1)^1 = 1 = a_1\) ✓ Base (\(n=2\)): \(2^2 + (-1)^2 = 5 = a_2\) ✓
HIF: \(a_i = 2^i + (-1)^i\) para todo \(i = 1, 2, \ldots, k\) com \(k \geq 2\).
Passo indutivo (\(n = k+1\)):
$$a_{k+1} = a_k + 2a_{k-1} \stackrel{\text{HIF}}{=} \bigl[2^k + (-1)^k\bigr] + 2\bigl[2^{k-1} + (-1)^{k-1}\bigr]$$$$= 2^k + (-1)^k + 2^k + 2(-1)^{k-1} = 2^{k+1} + (-1)^{k-1}\bigl[(-1) + 2\bigr] = 2^{k+1} + (-1)^{k+1}$$
Portanto, \(a_n = 2^n + (-1)^n\), que é o que queríamos demonstrar. \(\blacksquare\)
A expressão do Exercício 4 leva o nome de Jacques Binet, que a publicou em 1843, mas ela já era usada no século XVIII por Abraham de Moivre, por membros da família Bernoulli e por Leonhard Euler — mais de um século antes (veja a seção sobre a fórmula no verbete da sequência de Fibonacci e a história da razão áurea). É um caso clássico da Lei de Stigler: “nenhuma descoberta científica leva o nome de quem a descobriu de fato.”
Exercício 4 — Fórmula de Binet para Fibonacci
A Fórmula de Binet dá o \(n\)-ésimo termo de Fibonacci diretamente:
$$F_n = \frac{1}{\sqrt{5}}\left(\frac{1+\sqrt{5}}{2}\right)^n - \frac{1}{\sqrt{5}}\left(\frac{1-\sqrt{5}}{2}\right)^n$$Prove essa fórmula por indução forte.
Demonstração: Seja \(\varphi = \dfrac{1+\sqrt{5}}{2}\) e \(\psi = \dfrac{1-\sqrt{5}}{2}\) (\(\varphi\) é a razão áurea).
Base (\(n=1\)): \(\dfrac{1}{\sqrt{5}}(\varphi - \psi) = \dfrac{1}{\sqrt{5}} \cdot \sqrt{5} = 1 = F_1\) ✓ Base (\(n=2\)): \(\dfrac{1}{\sqrt{5}}(\varphi^2 - \psi^2) = \dfrac{1}{\sqrt{5}}(\varphi+\psi)(\varphi-\psi) = \dfrac{1}{\sqrt{5}} \cdot 1 \cdot \sqrt{5} = 1 = F_2\) ✓
HIF: \(F_i = \dfrac{\varphi^i - \psi^i}{\sqrt{5}}\) para todo \(i = 1, 2, \ldots, k\) com \(k \geq 2\).
Passo indutivo (\(n = k+1\)):
$$F_{k+1} = F_k + F_{k-1} \stackrel{\text{HIF}}{=} \frac{\varphi^k - \psi^k}{\sqrt{5}} + \frac{\varphi^{k-1} - \psi^{k-1}}{\sqrt{5}} = \frac{\varphi^{k-1}(\varphi+1) - \psi^{k-1}(\psi+1)}{\sqrt{5}}$$Como \(\varphi^2 = \varphi + 1\) e \(\psi^2 = \psi + 1\) (propriedade da razão áurea):
$$F_{k+1} = \frac{\varphi^{k-1} \cdot \varphi^2 - \psi^{k-1} \cdot \psi^2}{\sqrt{5}} = \frac{\varphi^{k+1} - \psi^{k+1}}{\sqrt{5}}$$Portanto, \(F_n = \dfrac{\varphi^n - \psi^n}{\sqrt{5}}\), que é o que queríamos demonstrar. \(\blacksquare\)
A fórmula também explica por que \(\varphi\) aparece: como \(|\psi| < 1\), o termo \(\psi^n\) encolhe até sumir, e a razão entre dois termos consecutivos, \(F_{n+1}/F_n\), se aproxima de \(\varphi\). A figura abaixo mostra essa aproximação em forma de retângulos: quadrados com os lados de Fibonacci, encaixados um ao lado do outro, formam retângulos cada vez mais próximos da proporção áurea.

Exercício 5 — Representação binária
Prove por indução forte que todo inteiro \(n \geq 1\) pode ser escrito como soma de potências distintas de 2 (representação binária).
Demonstração:
Base (\(n=1\)): \(1 = 2^0\). ✓
HIF: todo inteiro \(j\) com \(1 \leq j \leq k\) tem representação binária.
Passo indutivo (\(n = k+1\)):
- Se \(k+1\) é ímpar: então \(k\) é par. Pela HIF, \(k\) tem representação binária usando somente potências \(2^1, 2^2, \ldots\) (pois \(k\) é par, não contém \(2^0\)). Acrescentando \(2^0\) obtemos representação de \(k+1\) com potências distintas. ✓
- Se \(k+1\) é par: então \(\dfrac{k+1}{2} \leq k\). Pela HIF, \(\dfrac{k+1}{2}\) tem representação binária \(2^{a_1} + \cdots + 2^{a_r}\). Somando 1 a cada expoente (equivalente a multiplicar por 2) obtemos \(k+1 = 2^{a_1+1} + \cdots + 2^{a_r+1}\), com potências distintas. ✓
Portanto, todo inteiro \(n \geq 1\) pode ser escrito como soma de potências distintas de 2, que é o que queríamos demonstrar. \(\blacksquare\)
Tabela-Resumo #
Os resultados provados neste artigo, reunidos para consulta rápida:
| Resultado | Enunciado |
|---|---|
| Identidade de Fibonacci | \(F_1^2 + F_2^2 + \cdots + F_n^2 = F_n \cdot F_{n+1}\) |
| Cota exponencial | \(F_n < \left(\dfrac{7}{4}\right)^n\) |
| Decomposição em primos | Todo \(n > 1\) é primo ou produto de primos |
| Barra de chocolate (Exemplo 3) | Uma barra \(m \times n\) requer exatamente \(mn - 1\) quebras |
| Cota para Fibonacci (Ex. 1) | \(F_n \leq 2^{n-1}\) |
| Franqueio postal (Ex. 2) | Todo \(n \geq 8\) centavos pode ser pago com selos de 3 e 5 centavos |
| Sequência recorrente (Ex. 3) | \(a_n = 2^n + (-1)^n\) onde \(a_n = a_{n-1} + 2a_{n-2}\) |
| Fórmula de Binet (Ex. 4) | \(F_n = \dfrac{\varphi^n - \psi^n}{\sqrt{5}}\) com \(\varphi = \dfrac{1+\sqrt{5}}{2}\) |
| Representação binária (Ex. 5) | Todo inteiro \(n \geq 1\) tem representação em base 2 |
Próximos passos #
A recorrência de Fibonacci é um exemplo de relação de recorrência — uma fórmula que define cada termo a partir de termos anteriores. O próximo artigo generaliza essa ideia, apresentando técnicas sistemáticas para resolver esse tipo de equação.
Até lá!