Como seria um programa quântico muito simples?


76

À luz do anúncio do primeiro chip fotônico quântico programável do mundo , fiquei imaginando como seria um software para um computador que usa o emaranhamento quântico. Um dos primeiros programas que escrevi foi algo como

for i = 1 to 10
  print i
next i

Alguém pode dar um exemplo de código de simplicidade comparável que utilizaria chips fotônicos quânticos (ou hardware semelhante), em pseudocódigo ou linguagem de alto nível? Estou tendo dificuldade em dar o salto conceitual da programação tradicional para o emaranhamento, etc.


o link está quebrado
Suresh Venkat

1
+1 e para esta pergunta. Estou muito curioso sobre uma linguagem de programação sob um paradigma diferente do das Máquinas de Turing, por mais distantes que possamos estar de executar o código em um computador quântico.
Janoma

Respostas:


60

Advertência Emptor: o seguinte é fortemente tendencioso em minha própria pesquisa e visão no campo do CQ. Isso não constitui o consenso geral do campo e pode até conter alguma autopromoção.

O problema de mostrar um “olá mundo” da computação quântica é que estamos basicamente tão longe dos computadores quânticos quanto Leibnitz ou Babbage do seu computador atual. Embora saibamos como eles devem operar teoricamente, não existe uma maneira padrão de realmente construir um computador quântico físico. Um efeito colateral disso é que não existe um modelo único de programação da computação quântica. Livros didáticos como Nielsen et al. mostrará um diagrama de 'circuito quântico', mas esses estão longe de serem linguagens de programação formais: eles acenam um pouco com os detalhes, como controle clássico ou lidam com resultados de entrada / saída / medição.

O que me serviu melhor em minha pesquisa como cientista da computação em linguagem de programação, e para transmitir o entusiasmo do CQ a outros cientistas da computação, é usar o modelo mais simples de CQ que já deparei.

O programa mais simples de computação quântica que vi que contém todos os elementos essenciais é um pequeno programa de três instruções no modelo de programação quântica mais simples que já encontrei. Eu o uso como se fosse um 'olá mundo' para transmitir o básico.

Permitam-me apresentar um resumo simplificado e rápido do The Measurement Calculus, de Danos et al. 1 que se baseia é baseado no computador quântico unidirecional 2 : um qubit é destruído quando medido, mas medi-lo afeta todos os outros qubits que foram emaranhados com ele. Ele tem alguns benefícios teóricos e práticos sobre os computadores quânticos 'baseados em circuito', conforme realizado pelo chip fotônico, mas essa é uma discussão diferente.

Considere um computador quântico que tenha apenas cinco instruções: N, E, M, X e Z. Sua "linguagem assembly" é semelhante ao seu computador comum, depois de executar uma instrução, ela passa para a próxima instrução na sequência. Cada instrução usa um identificador de qubit alvo, usamos apenas um número aqui e outros argumentos.

N 2          # create a new quantum bit and identify it as '2'
E 1 2        # entangle qubits '1' and '2', qubit 1 already exists and is considered input
M 1 0        # measure qubit '1' with an angle of zero  (angle can be anything in [0,2pi]
             # qubit '1' is destroyed and the result is either True or False
             # operations beyond this point can be dependent on the signal of '1'
X 2 1        # if the signal of qubit '1' is True, execute the Pauli-X operation on qubit '2'

O programa acima cria uma ancilla, entrelaça-a com o qubit de entrada, mede a entrada e, dependendo do resultado da medição, executa uma operação na ancilla. O resultado é que o qubit 2 agora contém o estado do qubit 1 após a operação do Hadamard .

O acima é naturalmente em um nível tão baixo que você não gostaria de codificá-lo manualmente. O benefício do cálculo de medição é que ele introduz 'padrões', algum tipo de macros composíveis que permitem compor algoritmos maiores, como faria com as sub-rotinas. Você começa com padrões de 1 instrução e cresce padrões maiores a partir daí.

Em vez de uma sequência de instruções do tipo assembler, também é comum escrever o programa como um gráfico:

 input                .........
    \--> ( E ) ---> (M:0)     v
(N) ---> (   ) ------------> (X) ---> output

onde setas completas são dependências de qubit e a seta pontilhada é uma dependência de 'sinal'.

A seguir, é apresentado o mesmo exemplo do Hadamard, expresso em uma pequena ferramenta de programação, como eu imaginaria que um 'programador quântico' usaria.

Ferramenta de cálculo de medição

edit: (adicionando relação com computadores 'clássicos') Os computadores clássicos ainda são realmente eficientes no que fazem de melhor e, portanto, a visão é que os computadores quânticos serão usados ​​para descarregar certos algoritmos, de forma análoga a como o computador atual transfere gráficos para um computador. GPU. Como você viu acima, a CPU controlaria o computador quântico enviando a ele um fluxo de instruções e lendo novamente os resultados da medição dos 'sinais' booleanos. Dessa forma, você tem uma separação estrita do controle clássico pela CPU e pelo estado quântico e pelos efeitos no computador quântico.

Por exemplo, vou usar meu co-processador quântico para calcular um booleano aleatório ou cointoss. Os computadores clássicos são determinísticos; portanto, é ruim retornar um bom número aleatório. Computadores quânticos são inerentemente probabilísticos, tudo o que preciso fazer para obter um 0 ou 1 aleatório é medir um qubit igualmente equilibrado. A comunicação entre a CPU e o 'QPU' seria assim:

 qrand()       N 1; M 1 0;
 ==>  | CPU | ------------> | QPU |  ==> { q1 } ,  []
                 start()
      |     | ------------> |     |  ==> { } , [q1: 0]
                 read(q1)         
      |     | ------------> |     |
                  q1: 0 
 0    |     | <-----------  |     |
 <==

Onde { ... }está a memória quântica do QPU contendo qubits e [...]sua memória clássica (sinal) contendo booleanos.


  1. Danos et al. O cálculo de medição. arXiv (2007) vol. quant-ph
  2. Raussendorf e Briegel. Um computador quântico unidirecional. Physical Review Letters (2001) vol. 86 (22) pp. 5188-5191

Excelente discussão sobre o tema, obrigado, Beef. Aliás, o OP fala de "Estou tendo dificuldade em dar o salto conceitual da programação tradicional para o entrelaçamento etc." Portanto, algo que ajude nessa transição deve ser bem-vindo.
Kris

Você está certo, eu parecia realmente ter perdido essa parte, por vergonha: / Adicionando um paragraph.≈
Beef

"Considere um computador quântico que tenha apenas cinco instruções: N, E, M, X e Z." nenhuma explicação da instrução Z :(
Fernando Gonzalez Sanchez

Z é muito parecido com X;) en.wikipedia.org/wiki/Pauli_matrices A operação X transforma o vetor [ab] em [ba], a operação Z transforma em [a -b].
Carne

21

Suponho que o libquantum de C , as mônadas quânticas de Haskell ou o Quantum :: Entanglement de Perl representam todos os cálculos quânticos fielmente. Você pode ver os exemplos deles.

Em geral, você descreve um algoritmo quântico como um algoritmo clássico que aplica uma série de operadores lineares a uma super-posição que representa o estado do seu sistema quântico. Os artigos de periódicos geralmente descrevem um circuito com linhas para bits / registros quânticos e caixas para operadores lineares.

Obviamente, a parte difícil não é descrever o algoritmo, mas entender por que ele funciona, assim como algoritmos probabilísticos. Sempre considerei o algoritmo de Grover bastante compreensível. Você também pode ler sobre a transformação Quantum Fourier usada pelo algoritmo de Shor .


11

Se parece com isso: insira a descrição da imagem aqui

Você também pode ter acesso a um processador quântico real. Acesse aqui e inscreva-se: http://www.research.ibm.com/quantum/

Ele também inclui um simulador para que você possa testar sem usar o hardware real ou usar créditos (gratuitos) para executar no hardware real.



3

Penso que a resposta é "Muito parecido com um simples programa clássico".

Se considerarmos que o cálculo lambda de tipo simples (com produtos) é o coração da programação clássica, podemos explorar que é a teoria interna do tipo de uma categoria cartesiana fechada, que nos fornece um ponteiro.

nk

Então, se o STLC é para categorias fechadas cartesianas, o que é para categorias monoidais simétricas fechadas? Bem, sabemos que a lógica interna de uma categoria monoidal simétrica é MILL . Então, o que precisamos é de uma teoria de tipos correspondente a MILL - uma teoria de tipos linear.

Afastando-nos do absurdo abstrato, o que obtemos com uma teoria de tipos linear? Linearidade. Temos linearidade de recursos. E é exatamente isso que queremos. Você não pode clonar bits quânticos. Você não tem permissão para medir implicitamente. E linearidade significa que você não pode fazer nada disso durante a redução.

Houve algum trabalho sobre teorias de tipos lineares, mas não uma tonelada. Eu recebi algumas das idéias neste post deste artigo: Física, Topologia, Lógica e Computação: Uma Pedra de Roseta de Mike Stay e John Baez, que são muito mais detalhadas do que as minhas mãos.


0

Eu provavelmente usaria uma simples implementação de contador "dividir por pequenos n" para começar.

Por exemplo: dada uma fonte de 10 GHz, gere uma saída de 5 GHz (mas esses números são arbitrários e servem apenas para ilustrar o conceito).

Isso nos permite ignorar questões como armazenamento e arquitetura Von Neumann e nos concentramos em saber se os componentes estão realmente fazendo algo compreensível.

O próximo objetivo, então, seria criar um pequeno repertório de "pequeno n" (mas eu também ouviria uma reação dos meus pesquisadores - se eles achassem que outros pequenos objetivos seriam mais frutíferos imediatamente, eu certamente gostaria de entender o que eles estavam me dizendo.)

Objetivos de longo prazo incluiriam mecanismos para bombear informações para dentro e para fora do sistema e mantê-las por tempo suficiente para usá-las.

(Vale a pena lembrar que os primeiros programas de computador eram todos "conectados". Foi somente após uma vasta experiência com esses sistemas que conseguimos implementar os programas armazenados.)


-6

Eu acho que a programação de um computador quântico deve ser vista de um ponto de vista diferente da programação orientada a objetos normal.

O CQ tem a mesma capacidade do cérebro de pensar e decidir. A capacidade de pensar em meios tem o poder de minerar dados, uma fonte de dados que seria a opção possível e decidir qual escolher entre todos os estados possíveis.

Um software nesse momento precisaria ser arquitetado de maneira que os qubits representassem a fonte de dados que pode ser extraída e emaranhada com outros grupos de dados.

O CQ deve ter um minerador de dados que processe a leitura de dados, vinculando diferentes opções entre diferentes grupos de fontes de dados que representem informações, lendo todos os estados possíveis e escolha qual deles seguir.

É assim que o nosso cérebro funciona. O CQ é capaz de entender e agir de acordo com a lei da Mecânica Quântica, o que significa que você fornece um problema e o CQ mostra todas as soluções possíveis para resolvê-lo.

é assim que poderoso pode ser o controle de qualidade, você concorda?

https://www.cs.rutgers.edu/~mlittman/papers/openhouse11.pdf, este é o ponto de partida e, em seguida, crie um dataminer para construir o dispositivo quântico com portões etc., um leitor conectado ao dataminer, para ler e dar uma resposta. dados quânticos do host do componente DataSource e o escopo do conhecimento em que o dataminer atua.

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.