physbound
PhysBound é um "Linter de Física" especializado para IA que valida deterministicamente afirmações de RF e termodinâmicas contra limites físicos rigorosos, prevenindo alucinações em fluxos de trabalho de engenharia.
Documentação
PhysBound
Physical Layer Linter — um servidor MCP que valida cálculos de RF e física contra limites físicos rígidos, detectando alucinações de IA em fluxos de trabalho de engenharia.
LLMs geram números de RF que parecem plausíveis, mas violam a física fundamental — vazão acima do limite de Shannon, ganhos de antena que nenhuma abertura pode produzir, alcances de radar que a equação de alcance proíbe. O PhysBound oferece a qualquer assistente de IA compatível com MCP seis ferramentas de cálculo validadas, respaldadas por constantes CODATA (via SciPy) e análise dimensional (via Pint). Reivindicações impossíveis retornam respostas estruturadas PhysicalViolationError com a lei violada, o limite calculado e uma explicação em LaTeX — não falhas silenciosas.
| Ferramenta | O que valida |
|---|---|
rf_link_budget | Orçamentos de link de Friis: FSPL, potência recebida, ganhos de antena vs. limites de abertura/Harrington |
shannon_hartley | Reivindicações de vazão contra a capacidade do canal C = B log2(1 + SNR) |
noise_floor | Ruído térmico kTB, cascatas de figura de ruído de Friis, sensibilidade do receptor |
radar_range | Reivindicações de alcance de detecção contra a equação de alcance do radar monostático |
antenna_gain | Limites de ganho, largura de feixe e distância de campo distante para uma única antena |
radar_ambiguity | Alcance/velocidade inequívocos de pulso-Doppler, aliasing Doppler, resolução de alcance |
Instalação
O PhysBound é um servidor MCP stdio padrão publicado no PyPI. O comando de inicialização recomendado é uvx physbound, que busca e executa a versão mais recente em um ambiente isolado — sem etapa de instalação manual.
Primeira execução:
uvxbaixa ~60 MB de dependências (SciPy, NumPy) na primeira vez. Executeuvx physbounduma vez em um terminal para pré-cacheá-las (Ctrl-C para sair); as inicializações subsequentes são instantâneas.
Claude Code
claude mcp add physbound -- uvx physbound
Claude Desktop
Adicione a claude_desktop_config.json (macOS: ~/Library/Application Support/Claude/, Windows: %APPDATA%\Claude\):
{
"mcpServers": {
"physbound": {
"command": "uvx",
"args": ["physbound"]
}
}
}
Cursor, Windsurf e outros clientes MCP
Use a mesma entrada JSON de servidor acima no arquivo de configuração MCP do seu cliente (Cursor: ~/.cursor/mcp.json; Windsurf: ~/.codeium/windsurf/mcp_config.json).
Sem uv
Se você preferir uma instalação Python simples (requer Python 3.12+):
pip install physbound
depois defina "command": "physbound" (sem args) na configuração do cliente.
Uma vez configurado, pergunte ao seu assistente uma questão de RF — "Um canal de 20 MHz com SNR de 15 dB suporta 500 Mbps?" — e ele responderá com números validados pela física.
Uso via Linha de Comando
Os mesmos validadores estão disponíveis diretamente no terminal — úteis em scripts e pipelines de CI, já que uma violação de física sai com código 1:
$ physbound check shannon --bandwidth-hz 20e6 --snr-db 15 --claimed-throughput-bps 500e6
PHYSICS VIOLATION [Shannon-Hartley Theorem]
Claimed throughput 500000000.0 bps exceeds Shannon limit of 100556153.5 bps by 397.2%
Computed limit: 1.00556e+08 bps
Claimed value: 5e+08 bps
$ echo $?
1
$ physbound check shannon --bandwidth-hz 20e6 --snr-db 15 --claimed-throughput-bps 100e6
Shannon-Hartley Capacity: ... # exit code 0
Subcomandos disponíveis: check {link-budget, shannon, noise, radar-range, antenna, radar-ambiguity} (as flags espelham os parâmetros da ferramenta MCP; adicione --json para o resultado estruturado completo) e serve --transport {stdio,http} para executar o servidor MCP via HTTP. Veja physbound check --help para detalhes.
O Que os LLMs Erram
Dezesseis padrões reais de alucinação, cada um capturado pela suíte de testes do PhysBound:
| # | Categoria | Alucinação do LLM | Verdade do PhysBound | Veredito |
|---|---|---|---|---|
| 1 | Shannon-Hartley | Um canal 802.11n de 20 MHz com SNR de 15 dB pode atingir 500 Mbps | Limite de Shannon: 100,6 Mbps (não 500 Mbps) | PEGO |
| 2 | Shannon-Hartley | Um canal 5G de 100 MHz com SNR de 20 dB entrega 2 Gbps | Limite de Shannon: 665,8 Mbps (não 2000 Mbps) | PEGO |
| 3 | Abertura de Antena | Uma antena parabólica de 30 cm a 1 GHz fornece 45 dBi de ganho | Limite físico: 12,1 dBi (Harrington); abertura eta=1: 9,9 dBi; parabólica típica: 7,4 dBi (eta=0,55) (não 45 dBi) | PEGO |
| 4 | Ruído Térmico | Piso de ruído do receptor de -180 dBm/Hz à temperatura ambiente | Piso de ruído térmico: -174,0 dBm/Hz a 290K (não -180 dBm/Hz) | PEGO |
| 5 | Orçamento de Link / FSPL | Wi-Fi a 2,4 GHz com TX de 20 dBm alcança 10 km com potência RX de -40 dBm | Potência RX real a 10 km: -94,1 dBm (não -40 dBm) | PEGO |
| 6 | Orçamento de Link / FSPL | Um transmissor de 1W a 12 GHz com antenas de 0 dBi alcança GEO a -80 dBm | Potência RX real em GEO: -175,1 dBm (não -80 dBm) | PEGO |
| 7 | Orçamento de Link / FSPL | Bluetooth a 2,4 GHz com TX de 0 dBm e antenas de 0 dBi alcança 1 km a -60 dBm | Potência RX real a 1 km: -100,1 dBm (não -60 dBm) | PEGO |
| 8 | Shannon-Hartley | Um canal LTE de 10 MHz com SNR de 10 dB suporta 1 Gbps | Limite de Shannon: 34,6 Mbps (não 1000 Mbps) | PEGO |
| 9 | Cascata de Ruído | A NF do receptor é a mesma independentemente da ordem dos estágios: LNA(20dB/1,5dB) + Mixer(10dB/8dB) | LNA primeiro: 1,66 dB vs mixer primeiro: 8,03 dB (penalidade: 6,4 dB) | PEGO |
| 10 | Abertura de Antena | Uma antena patch de 10 cm a 900 MHz fornece 20 dBi de ganho | Limite físico: 4,4 dBi (Harrington, D < lambda); abertura eta=1: -0,5 dBi; típica: -3,1 dBi (eta=0,55) (não 20 dBi) | PEGO |
| 11 | Equação de Alcance do Radar | Dobrar a potência do transmissor dobra o alcance de detecção do radar | O alcance aumenta por um fator de 1,189 (2^(1/4) = 1,189), não 2,0 | PEGO |
| 12 | Equação de Alcance do Radar | Drone pequeno (RCS de 0,01 m^2) detectável a 200 km por radar de banda X de 1 kW com ganho de 30 dBi | Alcance máximo: 2,7 km para RCS de 0,01 m^2 a 1 kW em banda X (não 200 km) | PEGO |
| 13 | Ganho de Antena | Uma antena parabólica de terminal de usuário de 0,5 m a 12 GHz dá 50 dBi de ganho | Limite físico: 36,1 dBi (Harrington); parabólica típica: 33,4 dBi (eta=0,55) (não 50 dBi) | PEGO |
| 14 | Ganho de Antena | Uma antena parabólica de 3 m a 10 GHz está em campo distante a 10 m, então o ganho pode ser medido lá | Distância de campo distante 2D^2/lambda = 600 m; 10 m está em campo próximo | PEGO |
| 15 | Ambiguidade de Radar | Um radar de 10 GHz com PRF de 10 kHz mede inequivocamente 500 m/s | v_ua = lambda*PRF/4 = +/-74,9 m/s (velocidade cega 149,9 m/s); 500 m/s sofre aliasing (não 500 m/s) | PEGO |
| 16 | Ambiguidade de Radar | Um radar de pulso-Doppler de 10 GHz pode cobrir inequivocamente 150 km e +/-300 m/s ao mesmo tempo | R_uav_ua = clambda/8 = 1,123e+06 m^2/s para qualquer PRF; reivindicado 4,5e+07 m^2/s (40x maior) | PEGO |
Gerado automaticamente por pytest tests/test_marketing.py -s
Ferramentas
Derivações completas, fontes e exemplos trabalhados para cada fórmula estão em docs/formulas.md.
rf_link_budget
Calcula um orçamento de link de RF completo usando a equação de transmissão de Friis e valida ganhos de antena contra limites físicos.
Exemplo: "Qual é a potência recebida para um link de 2,4 GHz a 100 m com TX de 20 dBm, ganho TX de 10 dBi, ganho RX de 3 dBi?"
Retorna FSPL, potência recebida, comprimento de onda e — quando diâmetros de antena são fornecidos — verificações de limite de ganho. Ganhos acima do limite rígido G_max = max((pi D / lambda)^2, (ka)^2 + 2ka) (o valor de abertura eta = 1, ou o limite de Harrington para antenas eletricamente pequenas) são rejeitados; ganhos acima do valor típico de parabólica (eta = 0,55) são aceitos com um aviso. Também avisa dentro da distância de campo distante 2D^2/lambda e rejeita perdas negativas.
shannon_hartley
Calcula a capacidade do canal de Shannon-Hartley C = B log2(1 + SNR) e valida reivindicações de vazão.
Exemplo: "Um canal de 20 MHz com SNR de 15 dB pode suportar 500 Mbps?"
Retorna capacidade teórica, eficiência espectral e se a reivindicação é fisicamente possível, incluindo a porcentagem exata pela qual uma reivindicação violadora excede o limite de Shannon.
noise_floor
Calcula a potência de ruído térmico N = k_B T B, cascateia figuras de ruído através de receptores de múltiplos estágios com a fórmula de ruído de Friis e calcula a sensibilidade do receptor.
Exemplo: "Qual é o piso de ruído para um receptor de 1 MHz a 290 K com uma cadeia LNA de dois estágios?"
Retorna ruído térmico em dBm e watts, figura de ruído em cascata, temperatura efetiva de ruído de entrada T_e = 290 K * (F - 1) e sensibilidade do receptor.
radar_range
Calcula a equação de alcance do radar monostático R_max = [P_t G^2 lambda^2 sigma / ((4pi)^3 S_min L)]^(1/4) e valida reivindicações de alcance de detecção.
Exemplo: "Um radar de banda X de 1 kW com ganho de 30 dBi pode detectar um drone de 0,01 m^2 a 200 km?"
Retorna alcance máximo de detecção, sinal mínimo detectável, comprimento de onda e valores intermediários. Captura a falácia comum da raiz quarta de que dobrar a potência dobra o alcance.
antenna_gain
Analisa uma única antena a partir de seu diâmetro ou área física: limites de ganho, largura de feixe e distância de campo distante, com validação opcional de um ganho reivindicado.
Exemplo: "Uma antena parabólica de 0,5 m a 12 GHz pode realmente dar 50 dBi? Qual largura de feixe devo esperar?"
Retorna o limite físico de ganho (limite de abertura ou Harrington, e qual governa), ganho típico na eficiência dada (padrão 0,55), abertura efetiva, estimativas de largura de feixe de meia potência, distância de campo distante 2D^2/lambda e — para um ganho reivindicado — a eficiência de abertura implícita e validade.
radar_ambiguity
Calcula limites de ambiguidade de pulso-Doppler para uma frequência de portadora e PRF dadas.
Exemplo: "Um radar de 10 GHz com PRF de 10 kHz pode medir inequivocamente um alvo a 500 m/s até 150 km?"
Retorna alcance inequívoco R_ua = c / (2 PRF), velocidade inequívoca v_ua = lambda PRF / 4, velocidade cega, deslocamento Doppler e velocidade aparente (com aliasing), resolução de alcance (c tau / 2, ou c / 2B com compressão de pulso), alcance mínimo, ciclo de trabalho e o invariante do dilema alcance-Doppler R_ua v_ua = c lambda / 8. Rejeita reivindicações de alcance, velocidade ou resolução que a PRF ou o pulso não podem suportar.
Garantias de Física
Cada cálculo é validado contra limites físicos rígidos:
- Velocidade da luz:
c = 299,792,458 m/s— sem exceções - Piso de ruído térmico:
N = -174 dBm/Hza 290 K — a referência padrão IEEE - Limite de Shannon:
C = B log2(1 + SNR)— nenhuma reivindicação de vazão excede isso - Limite de ganho de antena:
G_max = max((pi D / lambda)^2, (ka)^2 + 2ka)— o valor de abertura eta = 1 para aberturas planas e o limite de Harrington para qualquer antena em uma esfera de diâmetro D; eta = 0,55 é um limite de aviso, não um limite - Equação de alcance do radar:
R_max = [P_t G^2 lambda^2 sigma / ((4pi)^3 S_min)]^(1/4)— o alcance obedece à lei da raiz quarta - Sensibilidade do receptor:
S_min = k (T_A + T_0 (F - 1)) B * SNRcomT_e = T_0 (F - 1)referenciado a 290 K - Alcance inequívoco:
R_ua = c / (2 PRF)— ecos além dele se dobram em um intervalo de pulso posterior - Velocidade inequívoca:
v_ua = lambda PRF / 4— o Doppler é amostrado na PRF, então|f_d| <= PRF/2 - Dilema alcance-Doppler:
R_ua * v_ua = c lambda / 8— nenhuma escolha de PRF supera isso para uma dada portadora
Violações retornam respostas estruturadas PhysicalViolationError com explicações em LaTeX, não falhas silenciosas.
Exemplos e Documentação
- Capturando Alucinações — passo a passo de cinco modos reais de falha de LLM com respostas JSON completas
- Notebook de Demonstração Interativo — notebook Jupyter chamando os motores de física diretamente
- Referência de Fórmulas — cada fórmula, constante e guarda de validação com fontes
- Changelog — histórico de versões
Desenvolvimento
Requer uv e Python 3.12+ (CI cobre 3.12–3.14):
# Clone and install
git clone https://github.com/JonesRobM/physbound.git
cd physbound
uv sync --all-extras
# Run checks
uv run pytest tests/ -v
uv run ruff check src/ tests/
uv run mypy src/physbound/
# Regenerate the hallucination table above
uv run pytest tests/test_marketing.py -s
# Start the MCP server locally
uv run physbound
Contribuições que expandam o conjunto de domínios de física validados são bem-vindas — veja CONTRIBUTING.md para o guia de arquitetura e a receita passo a passo para adicionar um novo validador.
Casos de Uso
- Revisão de projeto de sistema de RF — valide orçamentos de link, sensibilidade do receptor e cascatas de ruído
- Avaliação de propostas de telecomunicações — identifique alegações impossíveis de throughput antes que cheguem ao cliente
- Dimensionamento de sistemas de radar — verifique alcance de detecção, seleção de PRF e compensações de ambiguidade
- Ferramentas educacionais — ensine Shannon-Hartley, transmissão de Friis e ruído térmico com cálculos verificados
- CI/CD para física — integre como etapa de validação em pipelines de engenharia
Suporte
Se o PhysBound for útil no seu trabalho, considere me pagar um café.
Licença
Licença MIT. Consulte LICENSE.
Relacionados
- Model Context Protocol — o padrão aberto para integração de ferramentas de IA
- MCP Server Registry — diretório oficial de servidores MCP
- FastMCP — framework Python para construir servidores MCP