kelvin@cluxnei:~/blog$ cat navier-stokes.md
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.
Neste texto
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.
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.
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
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
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
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
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.
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.
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:
- Forças: empuxo e o que o cenário injetar.
- 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.
- Difusão viscosa: implícita, resolvida com Gauss-Seidel.
- Advecção: semi-lagrangiana, com correção opcional de MacCormack para a fumaça ficar mais nítida.
- Projeção de pressão: resolve
∇²p = ∇·ue 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.
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.
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$