O “compilador” da IBM transformaria meu circuito de identidade em nada?
Se eu fosse criar um circuito com a seguinte porta:
$$\tag{1}R_\phi = \begin{bmatrix} 1 & 0 \\ 0 & e^{i \phi} \end{bmatrix},$$
com$\phi$especificado para ser igual a 0, o portão que estou executando é apenas o portão de identidade e o circuito não deve fazer nada com os qubits. O hardware IBM realmente "executaria" algum portão com algum parâmetro sendo definido o mais próximo possível de 0? Ou os compiladores da IBM reconheceriam que nada deve ser feito e simplesmente não "aplicariam" nenhuma porta?
Embora os dois casos fossem idealmente equivalentes, na prática aquele em que "nada" é feito seria menos suscetível a erros, o que poderia fazer uma diferença significativa nos resultados que observamos.
Da mesma forma, se colocarmos dois$X$portas próximas umas das outras em um circuito a ser executado no hardware IBM, os compiladores da IBM notariam que o circuito é apenas o circuito de identidade e decidiriam não fazer nada em vez de aplicar duas portas que se anulam?
Até que ponto o software e o firmware da IBM "compilam" circuitos como este?
Respostas
Qualquer compilação/otimização de circuito acontece de forma transparente pelo Qiskit. Como usuário, você tem controle sobre o que acontece por meio do optimization_level
argumento passado para transpile()
. Definir o nível de otimização alto (por exemplo, nível 3) fará mais otimizações de circuito e defini-lo como baixo fará pouca ou nenhuma otimização (por exemplo, nível 0). Os dois exemplos que você fornece são diretos. Eles serão otimizados no nível de otimização 3 e deixados sozinhos no nível de otimização 0.