Featured image of post A “Complexidade” Não Se Mede pelo Número de Caracteres: Complexidade de Kolmogorov e a Natureza do Acaso

A “Complexidade” Não Se Mede pelo Número de Caracteres: Complexidade de Kolmogorov e a Natureza do Acaso

Do comprimento do programa mais curto, incompressibilidade e aleatoriedade de Martin-Löf ao teorema da invariância, paradoxo de Berry, incomputabilidade, constante Ômega de Chaitin e grandes modelos de linguagem (LLMs).

Introdução: O Enigma das Três Strings de Um Milhão de Bits — O Ponto Cego da Teoria de Shannon

Imagine que você tem diante de si três strings binárias com exatamente $1.000.000$ de bits cada uma:

  • A primeira string $S_1$ é a repetição quinhentas mil vezes de 01: 01010101...01.
  • A segunda string $S_2$ contém o primeiro milhão de dígitos binários após a vírgula do número $\pi$: 1100100100001111110110....
  • A terceira string $S_3$ é a sequência obtida ao lançar um milhão de vezes uma moeda honesta (cara = 1, coroa = 0).

Qual dessas três strings contém mais “informação”? Qual é a mais “complexa” e qual é verdadeiramente “aleatória”? Se buscarmos a resposta na teoria clássica da informação de Claude Shannon (1948), esbarraremos em uma limitação surpreendente: a entropia de Shannon $H(X) = -\sum P(x)\log_2 P(x)$ mede a incerteza média de uma distribuição de probabilidade (um conjunto ou ensemble), mas nada diz sobre a complexidade intrínseca de um objeto individual específico $x$! No modelo de lançamentos de uma moeda justa, a sequência perfeitamente periódica $S_1$ e a sequência caótica $S_3$ têm exatamente a mesma probabilidade $2^{-1.000.000}$; e para a constante determinística $\pi$ ($S_2$), sua distribuição é pontual com entropia $0$, embora a frequência estatística de seus bits passe em todos os testes de pseudoaleatoriedade!

Para dar um fundamento matemático rigoroso à complexidade e à aleatoriedade de um objeto individual, Ray Solomonoff (1960), Andrey Kolmogorov (1965) e Gregory Chaitin (1966) criaram independentemente a Teoria Algorítmica da Informação (AIT). Seu insight central é profundo: a verdadeira complexidade de um objeto não se mede pela quantidade de caracteres que ele possui, mas pelo comprimento do menor programa de computador capaz de gerá-lo!

  flowchart TD
    S1["String S1: 010101...01 (1M bits)"] -->|"Short Loop Program"| K1["K(S1) = O(log n) bits (Highly Compressible)"]
    S2["String S2: Binary Digits of Pi (1M bits)"] -->|"Spigot Algorithm"| K2["K(S2) = O(log n) bits (Deterministic Law)"]
    S3["String S3: Fair Coin Flips (1M bits)"] -->|"No Pattern / Hardcoded"| K3["K(S3) >= n - O(1) bits (Algorithmically Random)"]

1. A Complexidade de Kolmogorov $K(x)$ e o Teorema da Invariância

Dada uma máquina de Turing universal $U$ (ou qualquer linguagem de programação Turing-completa como C ou Python), a complexidade de Kolmogorov $K_U(x)$ de uma string binária $x \in \{0,1\}^*$ é definida como o comprimento em bits $|p|$ do menor programa $p$ que, executado em $U$, imprime $x$ e para. Para satisfazer a desigualdade de Kraft $\sum 2^{-|p|} \le 1$, a teoria moderna adota a complexidade livre de prefixos (complexidade de Levin-Chaitin) $K(x)$, na qual nenhum programa válido é prefixo de outro.

Olhando para as nossas três strings de um milhão de bits através da lente de $K(x)$, o mistério se desfaz imediatamente:

  • Para $S_1$, basta o minúsculo programa print("01" * 500000). Como só precisamos codificar em binário o contador de loop $n/2$, temos $K(S_1) = O(\log_2 n) pprox 20$ bits: é uma string algoritmicamente trivial.
  • Para $S_2$ (os primeiros $n$ bits de $\pi$), embora pareça ruído aleatório, um pequeno programa de poucas centenas de bytes implementando uma fórmula de Machin ou o algoritmo BBP calcula $S_2$ com exatidão. Logo, também vale $K(S_2) = O(\log_2 n)$! Isso revela uma verdade central da filosofia da ciência: uma lei da natureza nada mais é do que uma compressão algorítmica extrema de dados empíricos.
  • Por outro lado, para a string $S_3$ gerada por lançamentos reais de moeda, não há nenhuma regra oculta capaz de resumi-la. O menor programa capaz de produzir $S_3$ precisa incorporar literalmente o milhão de bits (print("1011001...")), resultando em $K(S_3) pprox n + O(1) pprox 1.000.000$ de bits!

Mas $K_U(x)$ não dependeria arbitrariamente da linguagem de programação $U$ escolhida? O Teorema da Invariância de Kolmogorov prova que não: para quaisquer duas máquinas universais $U_1$ e $U_2$, existe uma constante $c_{12}$ que depende apenas de $U_1$ e $U_2$ (sendo totalmente independente de $x$) tal que $|K_{U_1}(x) - K_{U_2}(x)| \le c_{12}$. A prova é cristalina: $c_{12}$ é simplesmente o tamanho fixo em bits de um interpretador (ou compilador cruzado) escrito em $U_1$ que simula $U_2$! Quando o tamanho dos dados $n o \infty$, esse custo fixo torna-se desprezível.

$$ H(X) = -\sum_{x \in \mathcal{X}} P(X = x) \log_2 P(X = x) $$$$ K_U(x) = \min_{p \in \{0,1\}^*} \Big\{ |p| \;\Big|\; U(p) = x \Big\}, \qquad \Big| K_{U_1}(x) - K_{U_2}(x) \Big| \le c_{12} $$

2. A Essência do Acaso: Princípio da Casa dos Pombos, Incompressibilidade e Aleatoriedade de Martin-Löf

Antes de Kolmogorov, a teoria das probabilidades não conseguia explicar por que 0000000000 não é aleatório enquanto 0110100110 parece ser. A Teoria Algorítmica da Informação fornece a primeira definição rigorosa do acaso individual: aleatoriedade é incompressibilidade — a ausência total de regularidade algorítmica!

Mais surpreendente ainda, usando o elementar Princípio da Casa dos Pombos (Pigeonhole Principle), podemos provar em duas linhas que quase todas as strings binárias são algoritmicamente aleatórias (incompressíveis): Existem exatamente $2^n$ strings binárias de comprimento $n$. Quantos programas binários existem com comprimento estritamente menor que $n - c$ bits? Somando o número de programas de comprimentos $0, 1, \dots, n-c-1$, obtemos no total $\sum_{i=0}^{n-c-1} 2^i = 2^{n-c} - 1$ programas possíveis. Como cada programa produz no máximo uma saída, no máximo $2^{n-c} - 1$ strings de comprimento $n$ podem ser comprimidas em mais de $c$ bits ($K(x) < n - c$)! Em outras palavras, a fração de strings de comprimento $n$ que admitem compressão de pelo menos $c$ bits é estritamente menor que $2^{-c}$. Tomando $c = 20$, mais de $99,9999\,\%$ de todas as strings não podem ser encurtadas nem mesmo em $20$ bits por nenhum algoritmo concebível! Per Martin-Löf provou em 1966 que uma sequência binária infinita passa em todos os testes estatísticos computáveis de aleatoriedade (aleatoriedade de Martin-Löf) se e somente se todos os seus prefixos $x_{1:n}$ forem incompressíveis ($K(x_{1:n}) \ge n - O(1)$).

$$ \sum_{i=0}^{n-c-1} 2^i = 2^{n-c} - 1 \implies \mathbb{P}_{x \sim \text{Unif}(\{0,1\}^n)}\big( K(x) < n - c \big) < \frac{2^{n-c}}{2^n} = 2^{-c} $$$$ \Omega = \sum_{p:\, U(p)\text{ halts}} 2^{-|p|} \in (0, 1), \qquad K(\Omega_{1:n}) \ge n - O(1) $$
  flowchart TD
    A["Assume Program P_K Computes K(x)"] --> B["Construct Program Q of Length L = |Q|"]
    B --> C["Q Searches Lexicographically for First String s with K(s) > L + 1000"]
    C --> D["Q Outputs s, so by Definition K(s) <= |Q| = L"]
    D --> E["Contradiction: L + 1000 < K(s) <= L (Berry Paradox / Uncomputability)"]

3. Paradoxo de Berry, Incomputabilidade de $K(x)$, Constante $\Omega$ de Chaitin e IA Moderna

Se $K(x)$ é tão poderosa, podemos escrever um compressor definitivo que receba qualquer string $x$ e calcule exatamente $K(x)$? A resposta é um não absoluto: a função $K(x)$ é incomputável!

Essa impossibilidade decorre do clássico Paradoxo de Berry (“o menor inteiro positivo que não pode ser definido em menos de vinte palavras” — frase que o define em quinze palavras!). Gregory Chaitin formalizou isso da seguinte maneira: suponha que exista uma sub-rotina ComputeK(x) de tamanho fixo $L$ bits que calcule $K(x)$. Construímos então um programa principal $Q$ que enumera todas as strings $s$ em ordem lexicográfica, chama ComputeK(s) e imprime a primeira string $s^*$ que satisfaz $K(s^*) > L + 10000$. O comprimento total do programa $Q$ é de apenas $L + O(1)$ bits, mas ele consegue imprimir $s^*$! Pela definição de $K(s^*)$ como o comprimento do menor programa que gera $s^*$, deve valer $K(s^*) \le |Q| < L + 10000$, contradizendo diretamente $K(s^*) > L + 10000$! Daqui decorre o Teorema da Incompletude de Chaitin: nenhum sistema axiomático formal de complexidade $C$ bits pode provar que uma string específica satisfaz $K(x) > C + O(1)$.

Chaitin também condensou a probabilidade de parada de uma máquina universal livre de prefixos no lendário número Ômega $\Omega = \sum_{U(p) ext{ para}} 2^{-|p|}$. Embora $\Omega \in (0,1)$ seja perfeitamente definido, ele é totalmente incomputável e algoritmicamente aleatório ($K(\Omega_{1:n}) \ge n - O(1)$): conhecer os primeiros $n$ bits de $\Omega$ equivaleria a resolver o problema da parada de Turing para todos os programas de tamanho até $n$!

Na engenharia e na inteligência artificial modernas, limites superiores computáveis de $K(x)$ impulsionam tecnologias essenciais:

  1. Ponte com a Entropia de Shannon: Para processos estacionários ergódicos, a esperança $ rac{1}{n}\mathbb{E}[K(X_{1:n})]$ converge para a taxa de entropia de Shannon $H(X)$.
  2. Indução Universal de Solomonoff e Comprimento Mínimo de Descrição (MDL): A Navalha de Ockham é formalizada pela distribuição a priori universal $P_M(x) \propto 2^{-K(x)}$.
  3. Distância de Compressão Normalizada (NCD): Aproximando $K(x)$ com compressores reais (zstd, lzma, gzip), a fórmula $ ext{NCD}(x,y) = rac{C(xy) - \min(C(x),C(y))}{\max(C(x),C(y))}$ constrói árvores filogenéticas e agrupa malwares sem engenharia de atributos.
  4. Grandes Modelos de Linguagem (LLMs): Compressão é Inteligência: Como apontaram Marcus Hutter (Hutter Prize) e Ilya Sutskever, minimizar a perda de entropia cruzada $-\sum \log_2 P_ heta(x_t \mid x_{estritamente equivalente a buscar a compressão sem perdas ótima dos dados. Para comprimir ao máximo o texto humano, o modelo é forçado a internalizar a gramática, o raciocínio lógico e um modelo causal do mundo.
Dimensão / ConceitoEntropia de Shannon $H(X)$Complexidade de Kolmogorov $K(x)$Aproximações Modernas (MDL / LLM / NCD)
Objeto MedidoDistribuição de probabilidade (Ensemble)Objeto ou string individual $x$Arquivos reais, genomas, corpus de texto
Julgamento sobre $10^6$ bits de $\pi$Constante determinística ($H=0$); frequências uniformes$K(\pi_{1:n}) = O(\log n)$ (muito simples graças ao algoritmo)Codificação aritmética e redes neurais
ComputabilidadeExatamente computável se $P(X)$ for conhecidaEstritamente incomputável (problema da parada)Limites superiores via zstd/LZMA ou Transformer $P_ heta$
Teoremas e FilosofiaTeorema da codificação de fonteTeorema da invariância, incompletude de Chaitin, $\Omega$Navalha de Ockham, “Compressão = Predição = Inteligência”
$$ P_M(x) = \sum_{p:\, U(p)=x} 2^{-|p|} \approx 2^{-K(x)}, \qquad \text{NCD}(x, y) = \frac{C(xy) - \min\{C(x), C(y)\}}{\max\{C(x), C(y)\}} $$
comments powered by Disqus