kelvin@cluxnei.dev:~/blog

kelvin@cluxnei:~/blog$ cat navier-stokes.md

2026-09-14 PT ~18 min de leitura read in English

A equação pode explodir. Meu simulador não deixa.

Na semana passada a OpenAI anunciou que um modelo interno provou algo sobre as equações de Navier-Stokes. Muita gente leu a manchete ao contrário. O que foi provado é que o fluido ideal pode quebrar, não que ele é sempre bem comportado. Eu tenho um simulador dessas equações rodando no navegador, e ele é construído de um jeito que torna essa quebra impossível de aparecer. Entender por que ele não deixa é uma boa forma de entender o que a prova diz.

Vórtice de Taylor-Green. Uma condição inicial escrita como fórmula exata, largada numa caixa periódica. Ela se enrola sozinha em estruturas cada vez menores até virar turbulência, e então some. Essa descida para escalas menores é exatamente onde mora a pergunta do milênio.

Neste texto

  1. O que foi anunciado, com cuidado
  2. A equação, termo a termo
  3. O que "explodir" quer dizer
  4. O que o meu simulador realmente faz
  5. Por que ele não pode explodir
  6. O preço, em números medidos
  7. O que isso ensina sobre a prova
  8. A briga de crédito

O que foi anunciado, com cuidado

Em 8 de setembro de 2026 a OpenAI publicou que um modelo interno produziu uma prova a respeito do problema do milênio de Navier-Stokes, e que ela foi verificada formalmente em Lean. A empresa diz que levou 88 horas e usou até dez mil agentes trabalhando de forma mais ou menos concorrente.

O conteúdo é o que costuma se perder na manchete:

Foi provado que as equações de Navier-Stokes em três dimensões podem desenvolver uma singularidade em tempo finito.

Isto é a resolução negativa. A pergunta do milênio era se uma condição inicial suave permanece suave para sempre, e a resposta é que não. O cenário é o idealizado do enunciado: espaço tridimensional sem fronteira, com uma função de forçamento suave, e com viscosidade, ou seja Navier-Stokes de verdade e não as equações de Euler sem atrito.

Duas ressalvas que valem mais que o resto. A verificação em Lean garante que a prova é internamente correta, mas a parte que ainda cabe a humanos é garantir que o enunciado escrito em Lean é logicamente equivalente ao que os matemáticos queriam provar. E este texto foi escrito dias depois do anúncio: se você está lendo muito tempo depois, confira o estado da discussão antes de citar qualquer coisa daqui.

A equação, termo a termo

Navier-Stokes é a segunda lei de Newton escrita para um fluido. Em vez de acompanhar cada partícula, você acompanha um campo de velocidade u: em cada ponto do espaço, para onde e com que rapidez o fluido está indo naquele instante.

∂u→ ∂t = − (u→⋅∇) u→ − ∇pρ + ν∇2 u→ + f→ ∇⋅u→ =0

A primeira linha diz como a velocidade muda. A segunda é a condição de incompressibilidade: o que entra numa região tem que sair, porque o fluido não pode ser comprimido.

São quatro termos do lado direito, e cada um faz uma coisa que dá para ver na tela.

Advecção, o termo que causa o problema

− (u→⋅∇) u→

O fluido carrega a si mesmo.

Este é o vilão da história inteira. Repare que u aparece duas vezes multiplicando: a velocidade transporta a própria velocidade. É isso que torna a equação não linear, e é a não linearidade que abre a porta para uma velocidade grande criar uma velocidade ainda maior, num laço de realimentação. Sem esse termo, não haveria problema do milênio e nem turbulência.

Pressão, o termo que impõe a regra

− ∇pρ

A pressão não é uma variável independente aqui: ela é o que quer que precise ser para manter ∇·u = 0.

Essa é a parte que costuma confundir. Num fluido incompressível a pressão não tem equação própria de evolução. Ela é calculada a cada passo como a única coisa capaz de cancelar qualquer compressão que os outros termos tentaram criar. É também o termo que torna a equação não local: mexer o fluido num canto altera a pressão em todo o domínio instantaneamente.

Viscosidade, o termo que acalma

ν∇2 u→

Difusão. Espalha a velocidade e come as diferenças, tanto mais forte quanto menor a escala.

A viscosidade é o freio. Ela ataca preferencialmente as estruturas pequenas, que são justamente as que a advecção tenta criar. O problema do milênio é a disputa entre esses dois termos: a advecção empurrando energia para escalas cada vez menores, a viscosidade tentando dissipá-la antes que a escala chegue a zero. A pergunta era se a viscosidade sempre ganha. Agora sabemos que não.

Forçamento, o termo que você controla

f→

Tudo que empurra o fluido de fora: gravidade, empuxo, um ventilador, a sua mão.

No simulador, o empuxo é o que faz a fumaça subir: cada célula quente recebe um empurrão para cima proporcional à temperatura. É o único forçamento no cenário da pluma, e é suficiente para produzir a estrutura inteira.

Pluma, com empuxo como único forçamento. O cogumelo no topo não foi desenhado: ele aparece porque a frente da pluma empurra o ar parado, enrola as bordas para dentro e a advecção faz o resto.

O que "explodir" quer dizer

Singularidade em tempo finito não significa que o líquido some ou que a tela fica branca. Significa uma coisa precisa: existe um instante T, finito, em que alguma quantidade da solução deixa de ser limitada. Tipicamente a vorticidade, que mede o quanto o fluido está girando localmente.

lim t→T− ‖ω→ (t)‖ =∞

A vorticidade ω cresce sem limite ao se aproximar de um instante finito T. A partir daí a equação deixa de ter uma solução suave, e nem dizer o que acontece depois faz mais sentido.

Fisicamente, isso é energia se concentrando numa região que encolhe até o tamanho zero. Em água de verdade nada disso acontece, porque muito antes a descrição de fluido contínuo deixa de valer e você está falando de moléculas. A singularidade é um fato sobre a equação, não sobre a pia da sua cozinha.

O que o meu simulador realmente faz

O simulador resolve exatamente essas equações numa malha uniforme, usando um método chamado Stable Fluids, publicado por Jos Stam no SIGGRAPH de 1999. Cada passo faz cinco coisas, nesta ordem:

  1. Forças: empuxo e o que o cenário injetar.
  2. Confinamento de vorticidade (Fedkiw et al., 2001): mede o giro local e empurra o fluido de volta na direção dele, devolvendo os redemoinhos pequenos que uma malha grossa come.
  3. Difusão viscosa: implícita, resolvida com Gauss-Seidel.
  4. Advecção: semi-lagrangiana, com correção opcional de MacCormack para a fumaça ficar mais nítida.
  5. Projeção de pressão: resolve ∇²p = ∇·u e subtrai o gradiente. É o passo que torna o fluido incompressível.

Guarde os itens 3 e 4. São eles que fecham a porta.

Por que ele não pode explodir

A advecção semi-lagrangiana funciona ao contrário do que a intuição sugere. Em vez de perguntar "para onde esta partícula vai", ela pergunta, para cada célula, de onde veio o que está aqui agora: anda para trás no campo de velocidade e interpola o valor que encontrar.

O valor novo de uma célula é sempre uma interpolação de valores que já existiam. Uma média ponderada nunca é maior que o maior dos valores que ela mistura. Então o máximo do campo não pode crescer por advecção, qualquer que seja o passo de tempo. É o que se chama de método incondicionalmente estável.

A difusão implícita fecha a outra metade: em vez de calcular o novo estado a partir do antigo, ela resolve um sistema em que o novo estado aparece dos dois lados. Isso é estável para qualquer viscosidade e qualquer passo.

advecção semi-lagrangiana   incondicionalmente estável
difusão implícita           estável a qualquer passo
                            ─────────────────────────────
resultado                   o campo nunca diverge

Ou seja: mesmo que as equações de verdade quisessem produzir uma singularidade, este método não tem como representá-la. Ele é suave por construção, não por física. A estabilidade que o faz nunca travar é a mesma coisa que o torna cego para o fenômeno que acabou de ser provado existir.

O preço, em números medidos

Estabilidade incondicional não é de graça. A interpolação que garante que nada cresce também suaviza a cada passo, e essa suavização funciona como uma viscosidade que ninguém pediu. O nome dela é viscosidade numérica, e nas resoluções de um navegador ela domina.

Dá para ver isso no painel. Estes são os números de uma rua de vórtices de Kármán rodando de verdade:

Grid          62x24x24
Cells         35,7k
Peak u        1,00
Energy        0,157
Vorticity     1,60
Divergence    0,1003
Reynolds      2.191
Solver        36,1 ms

Dois deles merecem atenção.

Divergence 0,1003. A equação exige ∇·u = 0 exatamente. O que sobra depois da projeção é isso, e não é zero. O passo de pressão é resolvido por iterações de Gauss-Seidel que param quando o orçamento acaba, não quando convergem. A incompressibilidade é aproximada.

Reynolds 2.191. Esse é o número implicado pela viscosidade que eu pedi. O Reynolds efetivo do que aparece na tela é menor, porque a viscosidade numérica se soma à explícita. É por isso que o vórtice de Taylor-Green lá do começo decai mais rápido aqui do que numa simulação numérica direta de verdade.

Há um contrapeso honesto: onde dá para medir contra a realidade, o resultado se sustenta. A rua de Kármán se desprende com número de Strouhal entre 0,13 e 0,19, contra cerca de 0,2 medido num cilindro real.

Rua de vórtices de Kármán. Escoamento uniforme passando por um cilindro. Acima de Reynolds 50 a esteira para de ser simétrica e começa a soltar vórtices alternados de cada lado. É o mesmo padrão que faz fio de alta tensão assobiar no vento.

O que isso ensina sobre a prova

Quase todo simulador de fluidos usado em produção, de efeito visual a previsão do tempo, faz alguma versão do mesmo acordo: troca fidelidade nas escalas pequenas por um método que não estoura. As escolhas variam, o acordo não.

Isso quer dizer que a singularidade provada este mês é invisível para a maior parte da computação de fluidos que existe. Não porque ela seja irrelevante, mas porque toda a engenharia numérica foi construída para suprimir exatamente o comportamento que ela descreve. Um método que conseguisse mostrá-la seria, do ponto de vista de quem simula fumaça em cinema, um método quebrado.

Há uma simetria bonita aqui com o post sobre a simulação gravitacional. Lá, a singularidade da lei de Newton quando dois corpos se aproximam demais é removida de propósito, com o softening de Plummer, e o texto defende escolher a escala em que você aceita errar. Aqui é a mesma decisão, tomada pela mesma razão, contra uma singularidade que agora sabemos ser real e não apenas um acidente da fórmula.

A briga de crédito

Seria desonesto contar a notícia sem isto. O anúncio veio acompanhado de uma disputa. A OpenAI diz que começou o esforço em 1º de setembro depois de ouvir um rumor, e que depois conectou esse rumor a Levent Alpöge, da Anthropic, e Tristan Buckmaster, da NYU.

Ao concluir a própria prova e a verificação em Lean, a empresa diz ter procurado os dois para um anúncio conjunto, e então descoberto que o trabalho deles tratava de um problema relacionado mas distinto: as equações de Euler forçadas, que são Navier-Stokes sem o termo de viscosidade.

Buckmaster sugeriu publicamente que os agentes da OpenAI possam ter tido acesso ao trabalho dele e de Alpöge e se beneficiado disso. A OpenAI credita a dupla pelo resultado de Euler e reivindica prioridade no de Navier-Stokes. Os dois times devem base ao trabalho anterior de Córdoba e Martínez-Zoroa.

Não tenho como arbitrar isso e não vou tentar. Registro porque é parte do fato, e porque é a parte que vai envelhecer primeiro.

Nota sobre os vídeos. Foram capturados em renderização por software, a cerca de 7 quadros por segundo, e remontados a 24. São, portanto, acelerados: o que você vê em um minuto levou vários para ser calculado. O ajuste de níveis é o mesmo dos outros posts. A física não foi tocada.

O simulador está em cluxnei.dev/navier-stokes/, com doze cenários e os parâmetros de cada um expostos antes de começar. O código, com 53 testes e um README que documenta os próprios defeitos, está no GitHub.

kelvin@cluxnei:~/blog$