Estou tentando me acostumar com o IBM Q implementando o algoritmo de Grover de três qubits, mas tendo dificuldade em implementar o oráculo.
Você poderia mostrar como fazer isso ou sugerir alguns bons recursos para se acostumar à programação de circuitos IBM Q?
O que eu quero fazer é marcar um estado arbitrário, lançando seu sinal como o oráculo deveria fazer.
Por exemplo, eu tenho
.
e eu quero marcar lançando seu sinal para - | 111 ⟩ . De alguma forma, entendo que o gate CCZ resolveria o problema, mas não temos o gate CCZ no IBM Q. A combinação de alguns portões funcionará da mesma forma que o CCZ, mas ainda não tenho certeza de como fazer isso. E também estou lutando pelos outros casos, não apenas por | 111 ⟩ .
O caso de dois qubits é bastante simples para eu implementar, mas o cuidado com três qubits ainda é confuso para mim.
Respostas:
Eu estou respondendo minha pergunta. Após algumas pesquisas no google, encontrei esta imagem mostrando o portão CCZ do CNOT, do punhal T e do portão T. Eu tentei isso no IBM Q e funcionou. Quero explorar por que funciona, mas isso é outra história.
Para alguém que está interessado, aqui está o meu circuito quântico da descoberta do algoritmo de Grover com uma iteração.
fonte
Eu implementei o mesmo problema para vários qubits usando o qiskit aqui .
...
Em geral, a idéia é simular um portão CCZ usando Hadamard no bit de destino, seguido por um portão CCX e outro Hadamard no bit de destino.
fonte