ToolDingo

Simulador de computador quântico

Escreve um pequeno circuito quântico em JavaScript, simula-o diretamente no navegador e vê o diagrama do circuito, as probabilidades e o vetor de estado. Ou descreve um cálculo a alto nível (por exemplo, uma adição) e vê como se transforma automaticamente num circuito quântico reversível real.

Modelo de ruído

Os computadores quânticos reais não calculam perfeitamente: os qubits são extremamente sensíveis e perdem parte da informação por cada interação indesejada com o ambiente — calor, campos eletromagnéticos ou qubits vizinhos. As operações de porta também nunca são perfeitamente precisas e até a leitura final pode falhar. Este simulador calcula idealmente por predefinição; aqui podes ativar modelos de erro típicos e observar diretamente o efeito nos resultados.

Aplica-se a todas as simulações desta página, tanto a execuções de alto nível como a circuitos escritos manualmente.
%
Por porta e qubit envolvido, ou por bit lido no modelo de leitura. Escolhe um valor para o cenário que queres explorar.

Código do programa

Descreve um cálculo com quantum.add, quantum.subtract, quantum.multiply, quantum.divide ou quantum.random. Ctrl+Enter inicia a simulação. Consulta a documentação completa através do botão “Documentação”.

Documentação

Descreve um cálculo no editor; um circuito quântico real é gerado automaticamente a partir dele e simulado. Máximo de 4000 caracteres. Ctrl+Enter inicia a simulação.

FórmulaDescriçãoLimites
quantum.add({ a, b })Adicionar dois númerosResultado máx. 4 bits (0–15)
quantum.subtract({ a, b })Subtraçãoa ≥ b, máx. 4 bits
quantum.multiply({ a, b })MultiplicaçãoFatores 0–7 (3 bits)
quantum.divide({ a, b })Divisão (quociente + resto)b ≥ 1; muito limitado: bits(a)+bits(b)+bits(a÷b)+1 ≤ 10
quantum.random({ bits })Número aleatório quântico verdadeirobits 1–10

Escolhe um exemplo

Código do circuito

Máximo de 4000 caracteres. Métodos QuantumCircuit disponíveis: x, y, z, h, s, sdg, t, tdg, rx, ry, rz, cnot, cz, ccnot (aliás: toffoli), swap, measureAll, run. Ctrl+Enter inicia a simulação.

Escolhe um exemplo

Noções básicas: como funciona?

Esquema de um computador quântico: um computador de controlo direciona vários feixes laser numa mesa ótica para um qubit dentro de uma câmara de vácuo.
Do computador de controlo clássico, através de lasers e ótica, até ao qubit físico.

Do programa ao qubit físico

Um computador quântico real é mais do que um chip. A eletrónica de controlo clássica traduz o circuito em impulsos precisos. No exemplo, lasers de arrefecimento, repump, qubit e leitura moldam estes sinais numa mesa ótica e direcionam-nos para uma câmara de vácuo blindada. Aí alteram e medem o estado do qubit; o resultado da medição regressa depois ao computador clássico.

Qubit e estados de base

Um bit clássico é 0 ou 1. Um qubit pode, além disso, existir numa sobreposição dos dois estados de base |0⟩ e |1⟩. Com vários qubits, todos os estados de base são escritos como uma cadeia de bits, por exemplo |10⟩ para 2 qubits — onde q0 neste simulador é sempre o bit mais significativo (esquerdo).

Sobreposição

Um qubit em sobreposição contém simultaneamente componentes de vários estados de base. Estas componentes são descritas por amplitudes complexas; o quadrado do módulo de uma amplitude dá a probabilidade de obter o estado correspondente numa medição.

A esfera de Bloch

O estado de um único qubit pode ser visualizado como uma seta numa esfera: o polo norte representa |0⟩, o polo sul |1⟩, e todos os pontos do equador são sobreposições com pesos iguais; a fase determina a direção no equador para onde aponta a seta. As portas de rotação rx, rye rz rodam a seta em torno do respetivo eixo; portas de fase como S e T rodam-na em torno do eixo Z. Com qubits entrelaçados, a seta encolhe para o centro da esfera: o qubit individual deixa de ter um estado puro próprio, pelo que o entrelaçamento se torna literalmente visível.

Medição e shots

measureAll() mede todos os qubits de uma vez e termina o circuito. Como uma única medição só produz um resultado aleatório, o circuito é conceptualmente medido “shots” vezes com run({ shots }), para que a distribuição de probabilidades apareça como histograma. As probabilidades exatas são ainda calculadas diretamente do vetor de estado, independentemente da aleatoriedade das medições.

Porta Hadamard

A porta Hadamard h(q) leva um qubit de um estado definido (|0⟩ ou |1⟩) para uma sobreposição com pesos iguais de |0⟩ e |1⟩ — portanto, cerca de 50% / 50% na medição.

Portas de fase: S e T

As portas s(q) e t(q) não alteram as probabilidades de medição de um único qubit; apenas rodam a fase da amplitude |1⟩ — S em 90°, T em 45°. Só mostram o efeito combinadas com sobreposição: entre duas Hadamard, a fase decide como as amplitudes se combinam ou se anulam (interferência). As variantes adaga sdg(q) e tdg(q) rodam exatamente no sentido oposto e desfazem S e T. A regra é: duas T fazem uma S; duas S fazem uma Z.

CNOT e entrelaçamento condicional

A porta CNOT cnot(control, target) inverte o qubit alvo exatamente quando o qubit de controlo está no estado |1⟩. Se o qubit de controlo estiver antes em sobreposição, isso pode criar entrelaçamento; os dois qubits deixam então de poder ser descritos independentemente, como no exemplo do estado de Bell. Se o controlo estiver num estado de base definido, CNOT apenas faz uma inversão condicional de bit, sem entrelaçamento. Portanto, nem toda CNOT cria automaticamente entrelaçamento.

CZ: a parente simétrica da CNOT

A porta CZ cz(a, b) inverte o sinal da amplitude exatamente quando ambos os qubits são |1⟩. Ao contrário de CNOT, não há controlo nem alvo; a porta atua de forma idêntica nos dois qubits e por isso é desenhada como dois pontos ligados no diagrama. CZ e CNOT podem converter-se mutuamente: uma CNOT é uma CZ cujo qubit alvo passa por uma Hadamard antes e depois. CZ é um bloco central de muitos algoritmos, como a pesquisa de Grover.

Estado GHZ: entrelaçamento em trio

O estado GHZ (assim chamado por Greenberger, Horne e Zeilinger) estende o princípio do estado de Bell a três qubits: uma porta Hadamard e duas CNOT entrelaçam os três, pelo que a medição só produz |000⟩ ou |111⟩ — nunca cadeias de bits mistas. Nenhum qubit tem já um estado próprio; a informação reside exclusivamente na correlação partilhada.

Algoritmo de Deutsch: a menor vantagem quântica

Com uma única avaliação de um oráculo desconhecido, o algoritmo de Deutsch responde a uma questão para a qual um computador clássico precisa de duas avaliações: a função é constante ou equilibrada? O truque é enviar a entrada pelo oráculo em sobreposição; graças à interferência, a resposta fica depois inequivocamente codificada no qubit de entrada. O princípio subjacente (phase kickback) está no centro de quase todos os algoritmos quânticos.

Pesquisa de Grover: amplificar amplitudes

A pesquisa de Grover encontra uma entrada marcada num conjunto não ordenado com significativamente menos consultas do que seriam necessárias classicamente. Um oráculo marca o estado procurado com uma inversão de fase (aqui por uma porta CZ); depois, o operador de difusão amplifica a amplitude marcada à custa de todas as outras. Com 2 qubits, uma iteração basta para medir o resultado com 100% de probabilidade.

Adição reversível: de quantum.add() a um circuito

O editor de código do programa acima traduz quantum.add({ a, b }) num circuito de portas X, CNOT e CCNOT (Toffoli), que reproduz a adição clássica de modo puramente reversível: cada porta pode ser desfeita exatamente porque nenhuma informação é descartada. Uma porta CCNOT (ccnot(c1, c2, target)) inverte o qubit alvo apenas quando ambos os qubits de controlo são |1⟩ — o que basta como bloco para reconstruir reversivelmente qualquer circuito clássico, incluindo um somador completo com transporte. As entradas A e B são primeiro inicializadas como estados de base definidos (sem sobreposição) usando portas X. Como todo o circuito passa apenas por estados definidos em vez de sobreposições, a medição no fim dá exatamente um resultado com 100% de probabilidade: a soma clássica correta. É por isso que quantum.add() produz um resultado determinístico apesar da simulação quântica, em vez de vários estados possíveis com probabilidades abaixo de 100%.

Subtração: adição ao contrário

Como cada porta de um circuito quântico é exatamente invertível, o circuito completo do somador pode ser executado para trás, e a adição transforma-se numa subtração: quantum.subtract({ a, b }) usa exatamente as portas do somador na ordem inversa e calcula assim a − b. Não é um truque, mas o princípio básico da computação reversível: nenhum passo de cálculo destrói informação e cada passo pode ser desfeito. Nesta versão, é exigido a ≥ b para não haver resultado negativo.

Multiplicação: quantum.multiply()

A multiplicação surge aqui dos mesmos blocos reversíveis que a adição: seguindo o método escolar, o fator a é adicionado várias vezes em posições deslocadas, correspondendo aos bits ativos do fator b. Cada adição parcial é o mesmo somador reversível com transporte propagado; o transporte flui cada vez para o bit de produto seguinte. Como o registo de resultado cresce com o produto, os fatores limitam-se aqui a 3 bits (0–7); só assim fator, produto e qubit de transporte cabem nos 10 qubits deste simulador.

Divisão: quantum.divide()

A divisão também usa apenas blocos reversíveis: quantum.divide({ a, b }) executa divisão longa baseada em subtrações reversíveis deslocadas do divisor ao registo de resto; o resultado é o quociente e o resto (a = quotient · b + remainder). Como dividendo, divisor, quociente e um qubit de empréstimo têm todos de caber nos 10 qubits, a divisão é a operação mais limitada: bits(a) + bits(b) + bits(a÷b) + 1 ≤ 10 tem de ser válido, e o divisor b tem de ser ≥ 1 (sem divisão por zero). Se uma entrada não couber no orçamento, o editor informa em vez de calcular.

Aleatoriedade verdadeira: quantum.random()

Os computadores clássicos não podem gerar aleatoriedade verdadeira: os seus “números aleatórios” vêm de algoritmos determinísticos (pseudoaleatoriedade). Um computador quântico pode: quantum.random({ bits }) coloca cada bit numa sobreposição 50/50 através de uma porta Hadamard, e só a medição decide — de forma fundamentalmente imprevisível — que valor sai. Em hardware quântico real, isto é aleatoriedade física verdadeira; este simulador imita-a com a pseudoaleatoriedade do teu navegador.

Simulador vs. hardware quântico real

Este simulador calcula o estado exatamente com aritmética clássica de vírgula flutuante no navegador; isto só funciona porque aqui são considerados apenas circuitos muito pequenos, até 10 qubits. Computadores quânticos reais usam qubits físicos, são propensos a erros (decoerência, ruído) e a sua vantagem só surge em circuitos bem maiores, que já não podem ser simulados classicamente na prática. Esta ferramenta é educativa, não um processador quântico real.

Perguntas frequentes

Isto é um computador quântico real?
Não. Esta ferramenta é um simulador clássico de vetor de estado que calcula exatamente a matemática de um pequeno circuito quântico (até 10 qubits), com aritmética de vírgula flutuante no navegador. O hardware quântico real usa qubits físicos e funciona de forma fundamentalmente diferente.
Que qubit é q0 numa cadeia de bits como "10"?
q0 é sempre o bit mais significativo (esquerdo). Com 2 qubits, x(0) cria portanto o estado |10⟩, não |01⟩.
O que significam "shots"?
Shots é o número de medições repetidas simuladas (1–10 000). Cada medição obtém aleatoriamente um resultado segundo a distribuição de probabilidades exata do vetor de estado. As próprias probabilidades exatas são apresentadas à parte.
Porque é que alguns exemplos mostram uma mensagem de erro?
O âmbito MVP permite exatamente um circuito com uma única chamada run() depois de measureAll(). Índices de qubit inválidos, portas após measureAll(), ângulos ou números de medições inválidos e erros de sintaxe no código são rejeitados com uma mensagem compreensível.
O que fazem as portas Hadamard, X e CNOT?
X troca |0⟩ e |1⟩. Hadamard transforma um estado de base numa sobreposição com pesos iguais. CNOT inverte o alvo apenas quando o controlo é |1⟩ e pode criar entrelaçamento combinada com sobreposição.
Como se cria entrelaçamento?
Um exemplo aplica Hadamard ao primeiro qubit e depois CNOT a um segundo. Os qubits deixam de poder ser descritos independentemente e a medição produz resultados correlacionados como |00⟩ ou |11⟩.