Teste de permutação

Fonte: testwiki
Saltar para a navegação Saltar para a pesquisa

Na criptografia quântica e na computação quântica,[1][2][3][4] um teste de permutação ou teste SWAP (uma operação de troca controlada) é a principal técnica nestas áreas,[5][6] para determinar com certeza se dois estados desconhecidos são diferentes.[7][8] Basicamente, o teste SWAP envolve uma porta de Fredkin.[9] A porta de Fredkin é um portal multi-qubit representativo e possui um qubit de controle e dois qubits de destino para operação de troca entre si, resultantes do estado do qubit de controle.[10][11]

Computação quântica

Predefinição:Menu lateral ocultável Na computação quântica, o teste Swap é um procedimento que é usado para verificar o quanto dois estados quânticos diferem.[12][13]

Considere dois estados: |ϕ e |ψ.O estado do sistema no início do protocolo é |0,ϕ,ψ. Após a porta de Hadamard, o estado do sistema é 12(|0,ϕ,ψ+|1,ϕ,ψ). A porta SWAP controlada transforma o estado em 12(|0,ϕ,ψ+|1,ψ,ϕ). A segunda porta de Hadamard resulta em 12(|0,ϕ,ψ+|1,ϕ,ψ+|0,ψ,ϕ|1,ψ,ϕ)=12|0(|ϕ,ψ+|ψ,ϕ)+12|1(|ϕ,ψ|ψ,ϕ)

A porta de medição no primeiro qubit garante que seja 0 com uma probabilidade de

P(First qubit=0)=12(ϕ|ψ|+ψ|ϕ|)12(|ϕ|ψ+|ψ|ϕ)=12+12|ψ|ϕ|2

quando medido. Se ψ e ϕ são ortogonais (|ψ|ϕ|2=0), então a probabilidade de que 0 seja medido é 12. Se os estados forem iguais (|ψ|ϕ|2=1), então a probabilidade de que 0 seja medido é 1.[14]

Exemplo

Uma implementação do teste Swap em Cirq.[15]

"""Demonstra teste Swap.
=== EXEMPLO DE SAÍDA ===
0: ───H───@───H───M('Resultados')───

1: ───H───×──────────────────────

2: ───H───×──────────────────────
Os resultados são todos 0, porque os estados são iguais.
Resultados=0000000000
0: ───H───────@───H───M('Resultados')───

1: ───X───H───×──────────────────────

2: ───H───────×──────────────────────
Nem todos os resultados são 0 porque os estados não são iguais.
Resultados=1111000011
"""
import cirq


def swap_test(q0, q1, q2, circuit):
    circuit.append(
        [
            cirq.H(q0),
            cirq.CSWAP(q0, q1, q2),
            cirq.H(q0),
            cirq.measure(q0, key="Resultados"),
        ]
    )
    simulator = cirq.Simulator()
    print(circuit)
    result = simulator.run(circuit, repetitions=10)
    return result


def main():
    q0, q1, q2 = cirq.LineQubit.range(3)
    equal_states = cirq.Circuit.from_ops(cirq.H(q1), cirq.H(q2),)
    results = swap_test(q0, q1, q2, equal_states)
    print("Os resultados são todos 0, porque os estados são iguais.")
    print(resultados)

    non_equal_states = cirq.Circuit.from_ops(cirq.X(q1), cirq.H(q1), cirq.H(q2),)
    results = swap_test(q0, q1, q2, non_equal_states)
    print("Nem todos os resultados são 0 porque os estados não são iguais.")
    print(resultados)


if __name__ == "__principal__":
    main()


Predefinição:Referências Predefinição:Esboço-física

Predefinição:Portal3