{
  "cells": [
    {
      "cell_type": "markdown",
      "id": "37d2b600",
      "metadata": {},
      "source": [
        "---\n",
        "title: \"Analisi\"\n",
        "description: \"Corso gratuito \\\" IBM \\\" sull'informazione e il calcolo quantistico\"\n",
        "---\n",
        "\n",
        "<span id=\"analysis\" />\n",
        "\n",
        "# Analisi\n",
        "\n",
        "Ora analizzeremo l'algoritmo di Grover per capire come funziona.\n",
        "Inizieremo con quella che potremmo definire un'analisi *simbolica*, in cui calcoliamo come l'operazione di Grover $G$ agisce su determinati stati, e poi legheremo questa analisi simbolica a un'immagine *geometrica* utile per visualizzare il funzionamento dell'algoritmo.\n",
        "\n",
        "<span id=\"solutions-and-non-solutions\" />\n",
        "\n",
        "## Soluzioni e non soluzioni\n",
        "\n",
        "Iniziamo definendo due serie di stringhe.\n",
        "\n",
        "$$\n",
        "\\begin{aligned}\n",
        "  A_0 &= \\bigl\\{ x\\in\\Sigma^n : f(x) = 0\\bigr\\} \\\\\n",
        "  A_1 &= \\bigl\\{ x\\in\\Sigma^n : f(x) = 1\\bigr\\}\n",
        "\\end{aligned}\n",
        "$$\n",
        "\n",
        "L'insieme $A_1$ contiene tutte le soluzioni al nostro problema di ricerca, mentre $A_0$ contiene le stringhe che non sono soluzioni (che possiamo chiamare *“non-soluzioni”* quando è opportuno).\n",
        "Questi due insiemi soddisfano le condizioni $A_0 \\cap A_1 = \\varnothing$ e $A_0 \\cup A_1 = \\Sigma^n$, il che significa che si tratta di una *bipartizione* di $\\Sigma^n$.\n",
        "\n",
        "Successivamente definiremo due vettori unitari che rappresentano le sovrapposizioni uniformi sugli insiemi di soluzioni e non soluzioni.\n",
        "\n",
        "$$\n",
        "\\begin{aligned}\n",
        "  \\vert A_0\\rangle &= \\frac{1}{\\sqrt{\\vert A_0\\vert}} \\sum_{x\\in A_0} \\vert x\\rangle \\\\\n",
        "  \\vert A_1\\rangle &= \\frac{1}{\\sqrt{\\vert A_1\\vert}} \\sum_{x\\in A_1} \\vert x\\rangle\n",
        "\\end{aligned}\n",
        "$$\n",
        "\n",
        "Dal punto di vista formale, ognuno di questi vettori è definito solo quando l'insieme corrispondente è non vuoto, ma di seguito ci concentreremo sul caso in cui né $A_0$ né $A_1$ siano vuoti.\n",
        "I casi di $A_0 = \\varnothing$ e $A_1 = \\varnothing$ possono essere trattati separatamente e lo faremo più avanti.\n",
        "\n",
        "Per inciso, la notazione qui utilizzata è comune: ogni volta che abbiamo un insieme finito e non vuoto $S$, possiamo scrivere $\\vert S\\rangle$ per indicare il vettore di stato quantistico che è uniforme sugli elementi di $S$.\n",
        "\n",
        "Definiamo inoltre che $\\vert u \\rangle$ è uno stato quantistico *uniforme* su tutte le stringhe di $n$ bit:\n",
        "\n",
        "$$\n",
        "\\vert u\\rangle = \\frac{1}{\\sqrt{N}} \\sum_{x\\in\\Sigma^n} \\vert x\\rangle.\n",
        "$$\n",
        "\n",
        "Si noti che\n",
        "\n",
        "$$\n",
        "\\vert u\\rangle\n",
        "= \\sqrt{\\frac{\\vert A_0 \\vert}{N}} \\vert A_0\\rangle\n",
        "+ \\sqrt{\\frac{\\vert A_1 \\vert}{N}} \\vert A_1\\rangle.\n",
        "$$\n",
        "\n",
        "Abbiamo anche che $\\vert u\\rangle = H^{\\otimes n} \\vert 0^n \\rangle$, quindi $\\vert u\\rangle$ rappresenta lo stato del registro $\\mathsf{Q}$ dopo l'inizializzazione al passo 1 dell'algoritmo di Grover.\n",
        "\n",
        "Ciò implica che, immediatamente prima che avvengano le iterazioni di $G$ nella fase 2, lo stato di $\\mathsf{Q}$ sia contenuto nello spazio vettoriale bidimensionale generato da $\\vert A_0\\rangle$ e $\\vert A_1\\rangle$, e che inoltre i coefficienti di questi vettori siano numeri reali.\n",
        "Come vedremo, lo stato $\\mathsf{Q}$ avrà sempre queste proprietà — il che significa che lo stato è una combinazione lineare reale di $\\vert A_0\\rangle$ e $\\vert A_1\\rangle$ — dopo un numero qualsiasi di iterazioni dell’operazione $G$ nel passaggio 2.\n",
        "\n",
        "<span id=\"an-observation-about-the-grover-operation\" />\n",
        "\n",
        "## Un'osservazione sull'operazione Grover\n",
        "\n",
        "Passiamo ora all'operazione di Grover\n",
        "\n",
        "$$\n",
        "G = H^{\\otimes n} Z_{\\mathrm{OR}} H^{\\otimes n} Z_f,\n",
        "$$\n",
        "\n",
        "iniziando con un'interessante osservazione al riguardo.\n",
        "\n",
        "Immaginiamo per un momento di sostituire la funzione $f$ con la composizione di $f$ e della funzione NOT — ovvero, la funzione che si ottiene invertendo il bit di uscita di $f$.\n",
        "Chiameremo questa nuova funzione $g$ e potremo esprimerla utilizzando i simboli in diversi modi alternativi.\n",
        "\n",
        "$$\n",
        "g(x) = \\neg f(x) = 1 \\oplus f(x) = 1 - f(x) =\n",
        "\\begin{cases}\n",
        "1 & f(x) = 0\\\\[1mm]\n",
        "0 & f(x) = 1\n",
        "\\end{cases}\n",
        "$$\n",
        "\n",
        "Si noti che\n",
        "\n",
        "$$\n",
        "(-1)^{g(x)} = (-1)^{1 \\oplus f(x)} = - (-1)^{f(x)}\n",
        "$$\n",
        "\n",
        "per ogni stringa $x\\in\\Sigma^n$, e quindi\n",
        "\n",
        "$$\n",
        "Z_g = - Z_f.\n",
        "$$\n",
        "\n",
        "Ciò significa che se sostituissimo la funzione $f$ con la funzione $g$, l'algoritmo di Grover non funzionerebbe in modo diverso, poiché gli stati ottenuti dall'algoritmo nei due casi sono necessariamente equivalenti, a parte una fase globale.\n",
        "\n",
        "Non è un problema!\n",
        "Intuitivamente, l'algoritmo non si preoccupa di quali stringhe siano soluzioni e quali non soluzioni: deve solo essere in grado di *distinguere le* soluzioni e le non soluzioni per funzionare correttamente.\n",
        "\n",
        "<span id=\"action-of-the-grover-operation\" />\n",
        "\n",
        "## Azione dell'operazione Grover\n",
        "\n",
        "Consideriamo ora l'azione di $G$ sui vettori di stato quantistico $\\vert A_0\\rangle$ e $\\vert A_1\\rangle$.\n",
        "\n",
        "Innanzitutto, notiamo che l'operazione $Z_f$ ha un effetto molto semplice su $\\vert A_0\\rangle$ e $\\vert A_1\\rangle$.\n",
        "\n",
        "$$\n",
        "\\begin{aligned}\n",
        "Z_f \\vert A_0\\rangle & = \\vert A_0\\rangle \\\\[1mm]\n",
        "Z_f \\vert A_1\\rangle & = -\\vert A_1\\rangle\n",
        "\\end{aligned}\n",
        "$$\n",
        "\n",
        "In secondo luogo, abbiamo l’operazione $H^{\\otimes n} Z_{\\mathrm{OR}} H^{\\otimes n}$.\n",
        "L’operazione $Z_{\\mathrm{OR}}$ è definita come\n",
        "\n",
        "$$\n",
        "Z_{\\mathrm{OR}} \\vert x\\rangle\n",
        "= \\begin{cases}\n",
        "\\vert x\\rangle & x = 0^n \\\\[2mm]\n",
        "-\\vert x\\rangle & x \\neq 0^n,\n",
        "\\end{cases}\n",
        "$$\n",
        "\n",
        "ancora una volta per ogni stringa $x\\in\\Sigma^n$, e un modo alternativo e pratico per esprimere questa operazione è il seguente:\n",
        "\n",
        "$$\n",
        "Z_{\\mathrm{OR}} = 2 \\vert 0^n \\rangle \\langle 0^n \\vert - \\mathbb{I}.\n",
        "$$\n",
        "\n",
        "Un modo semplice per verificare che questa espressione sia in accordo con la definizione di $Z_{\\mathrm{OR}}$ è quello di valutare la sua azione sugli stati base standard.\n",
        "\n",
        "L'operazione $H^{\\otimes n} Z_{\\mathrm{OR}} H^{\\otimes n}$ può quindi essere scritta in questo modo:\n",
        "\n",
        "$$\n",
        "H^{\\otimes n} Z_{\\mathrm{OR}} H^{\\otimes n} = 2 H^{\\otimes n} \\vert 0^n \\rangle \\langle 0^n \\vert H^{\\otimes n} - \\mathbb{I} = 2 \\vert u \\rangle \\langle u \\vert - \\mathbb{I},\n",
        "$$\n",
        "\n",
        "utilizzando la stessa notazione, $\\vert u \\rangle$, che abbiamo usato in precedenza per la sovrapposizione uniforme su tutte le stringhe di bit $n$.\n",
        "\n",
        "E ora abbiamo ciò che ci serve per calcolare l'azione di $G$ su $\\vert A_0\\rangle$ e $\\vert A_1\\rangle$.\n",
        "Per prima cosa calcoliamo l'azione di $G$ su $\\vert A_0\\rangle$.\n",
        "\n",
        "$$\n",
        "\\begin{aligned}\n",
        "  G \\vert A_0 \\rangle\n",
        "  & = \\bigl( 2 \\vert u\\rangle \\langle u \\vert - \\mathbb{I}\\bigr) Z_f \\vert A_0\\rangle \\\\\n",
        "  & = \\bigl( 2 \\vert u\\rangle \\langle u \\vert - \\mathbb{I}\\bigr) \\vert A_0\\rangle \\\\\n",
        "  & = 2 \\sqrt{\\frac{\\vert A_0\\vert}{N}} \\vert u\\rangle -\\vert A_0 \\rangle\\\\\n",
        "  & = 2 \\sqrt{\\frac{\\vert A_0\\vert}{N}} \\biggl(\n",
        "  \\sqrt{\\frac{\\vert A_0\\vert}{N}} \\vert A_0\\rangle + \\sqrt{\\frac{\\vert A_1\\vert}{N}} \\vert A_1\\rangle\\biggr)\n",
        "  -\\vert A_0 \\rangle \\\\\n",
        "  & = \\biggl( \\frac{2\\vert A_0\\vert}{N} - 1\\biggr) \\vert A_0 \\rangle\n",
        "  + \\frac{2 \\sqrt{\\vert A_0\\vert \\cdot \\vert A_1\\vert}}{N} \\vert A_1 \\rangle \\\\\n",
        "  & = \\frac{\\vert A_0\\vert - \\vert A_1\\vert}{N} \\vert A_0 \\rangle\n",
        "  + \\frac{2 \\sqrt{\\vert A_0\\vert \\cdot \\vert A_1\\vert}}{N} \\vert A_1 \\rangle\n",
        "\\end{aligned}\n",
        "$$\n",
        "\n",
        "In secondo luogo, calcoliamo l’azione di $G$ su $\\vert A_1\\rangle$.\n",
        "\n",
        "$$\n",
        "\\begin{aligned}\n",
        "  G \\vert A_1 \\rangle\n",
        "  & = \\bigl( 2 \\vert u\\rangle \\langle u \\vert - \\mathbb{I} \\bigr) Z_f \\vert A_1\\rangle \\\\\n",
        "  & = - \\bigl( 2 \\vert u\\rangle \\langle u \\vert - \\mathbb{I} \\bigr) \\vert A_1\\rangle \\\\\n",
        "  & = - 2 \\sqrt{\\frac{\\vert A_1\\vert}{N}} \\vert u\\rangle + \\vert A_1 \\rangle \\\\\n",
        "  & = - 2 \\sqrt{\\frac{\\vert A_1\\vert}{N}} \\biggl(\\sqrt{\\frac{\\vert A_0\\vert}{N}} \\vert A_0\\rangle\n",
        "      + \\sqrt{\\frac{\\vert A_1\\vert}{N}} \\vert A_1\\rangle\\biggr) + \\vert A_1 \\rangle \\\\\n",
        "  & = - \\frac{2 \\sqrt{\\vert A_1\\vert \\cdot \\vert A_0\\vert}}{N} \\vert A_0 \\rangle\n",
        "      + \\biggl( 1 - \\frac{2\\vert A_1\\vert}{N} \\biggr) \\vert A_1 \\rangle \\\\\n",
        "  & = - \\frac{2 \\sqrt{\\vert A_1\\vert \\cdot \\vert A_0\\vert}}{N} \\vert A_0 \\rangle\n",
        "      + \\frac{\\vert A_0\\vert - \\vert A_1\\vert}{N} \\vert A_1 \\rangle\n",
        "\\end{aligned}\n",
        "$$\n",
        "\n",
        "In entrambi i casi si utilizza l'equazione\n",
        "\n",
        "$$\n",
        "\\vert u\\rangle\n",
        "= \\sqrt{\\frac{\\vert A_0 \\vert}{N}} \\vert A_0\\rangle\n",
        "+ \\sqrt{\\frac{\\vert A_1 \\vert}{N}} \\vert A_1\\rangle\n",
        "$$\n",
        "\n",
        "insieme alle espressioni\n",
        "\n",
        "$$\n",
        "\\langle u \\vert A_0\\rangle = \\sqrt{\\frac{\\vert A_0 \\vert}{N}}\n",
        "\\qquad\\text{and}\\qquad\n",
        "\\langle u \\vert A_1\\rangle = \\sqrt{\\frac{\\vert A_1 \\vert}{N}}\n",
        "$$\n",
        "\n",
        "che seguono.\n",
        "\n",
        "In sintesi, abbiamo\n",
        "\n",
        "$$\n",
        "\\begin{aligned}\n",
        "  G \\vert A_0 \\rangle\n",
        "  & = \\frac{\\vert A_0\\vert - \\vert A_1\\vert}{N} \\vert A_0 \\rangle\n",
        "  + \\frac{2 \\sqrt{\\vert A_0\\vert \\cdot \\vert A_1\\vert}}{N} \\vert A_1 \\rangle\\\\[2mm]\n",
        "  G \\vert A_1 \\rangle\n",
        "  & = - \\frac{2 \\sqrt{\\vert A_1\\vert \\cdot \\vert A_0\\vert}}{N} \\vert A_0 \\rangle\n",
        "      + \\frac{\\vert A_0\\vert - \\vert A_1\\vert}{N} \\vert A_1 \\rangle.\n",
        "\\end{aligned}\n",
        "$$\n",
        "\n",
        "Come abbiamo già osservato, lo stato di $\\mathsf{Q}$ immediatamente prima della fase 2 è contenuto nello spazio bidimensionale generato da $\\vert A_0\\rangle$ e $\\vert A_1\\rangle$, e abbiamo appena dimostrato che $G$ mappa qualsiasi vettore in questo spazio su un altro vettore nello stesso spazio.\n",
        "Ciò significa che, ai fini dell'analisi, possiamo concentrare la nostra attenzione esclusivamente su questo sottospazio.\n",
        "\n",
        "Per comprendere meglio ciò che accade in questo spazio bidimensionale, esprimiamo l'azione di $G$ su questo spazio come una matrice,\n",
        "\n",
        "$$\n",
        "M = \\begin{pmatrix}\n",
        "  \\frac{\\vert A_0\\vert - \\vert A_1\\vert}{N} & -\\frac{2 \\sqrt{\\vert A_1\\vert \\cdot \\vert A_0\\vert}}{N} \\\\[2mm]\n",
        "  \\frac{2 \\sqrt{\\vert A_0\\vert \\cdot \\vert A_1\\vert}}{N} & \\frac{\\vert A_0\\vert - \\vert A_1\\vert}{N}\n",
        "\\end{pmatrix},\n",
        "$$\n",
        "\n",
        "le cui prima e seconda riga/colonna corrispondono rispettivamente a $\\vert A_0\\rangle$ e $\\vert A_1\\rangle$.\n",
        "Finora, in questa serie, abbiamo sempre associato le righe e le colonne delle matrici agli stati classici di un sistema, ma le matrici possono anche essere utilizzate per descrivere le azioni delle applicazioni lineari su basi diverse, come nel caso che ci occupa.\n",
        "\n",
        "Anche se non è affatto ovvio a prima vista, la matrice $M$ è ciò che si ottiene *squadrando* una matrice di aspetto più semplice.\n",
        "\n",
        "$$\n",
        "\\begin{pmatrix}\n",
        "  \\sqrt{\\frac{\\vert A_0\\vert}{N}} & - \\sqrt{\\frac{\\vert A_1\\vert}{N}} \\\\[2mm]\n",
        "  \\sqrt{\\frac{\\vert A_1\\vert}{N}} & \\sqrt{\\frac{\\vert A_0\\vert}{N}}\n",
        "\\end{pmatrix}^2\n",
        "=\n",
        "\\begin{pmatrix}\n",
        "  \\frac{\\vert A_0\\vert - \\vert A_1\\vert}{N} & -\\frac{2 \\sqrt{\\vert A_1\\vert \\cdot \\vert A_0\\vert}}{N} \\\\[2mm]\n",
        "  \\frac{2 \\sqrt{\\vert A_0\\vert \\cdot \\vert A_1\\vert}}{N} & \\frac{\\vert A_0\\vert - \\vert A_1\\vert}{N}\n",
        "\\end{pmatrix} = M\n",
        "$$\n",
        "\n",
        "La matrice\n",
        "\n",
        "$$\n",
        "\\begin{pmatrix}\n",
        "  \\sqrt{\\frac{\\vert A_0\\vert}{N}} & - \\sqrt{\\frac{\\vert A_1\\vert}{N}} \\\\[2mm]\n",
        "  \\sqrt{\\frac{\\vert A_1\\vert}{N}} & \\sqrt{\\frac{\\vert A_0\\vert}{N}}\n",
        "\\end{pmatrix}\n",
        "$$\n",
        "\n",
        "è una *matrice di rotazione*, che possiamo esprimere alternativamente come\n",
        "\n",
        "$$\n",
        "\\begin{pmatrix}\n",
        "  \\sqrt{\\frac{\\vert A_0\\vert}{N}} & - \\sqrt{\\frac{\\vert A_1\\vert}{N}} \\\\[2mm]\n",
        "  \\sqrt{\\frac{\\vert A_1\\vert}{N}} & \\sqrt{\\frac{\\vert A_0\\vert}{N}}\n",
        "\\end{pmatrix}\n",
        "=\n",
        "\\begin{pmatrix}\n",
        "  \\cos(\\theta) & -\\sin(\\theta) \\\\[2mm]\n",
        "  \\sin(\\theta) & \\cos(\\theta)\n",
        "\\end{pmatrix}\n",
        "$$\n",
        "\n",
        "per\n",
        "\n",
        "$$\n",
        "\\theta = \\sin^{-1}\\biggl(\\sqrt{\\frac{\\vert A_1\\vert}{N}}\\biggr).\n",
        "$$\n",
        "\n",
        "Questo angolo $\\theta$ avrà un ruolo molto importante nell'analisi che segue, quindi vale la pena di sottolinearne l'importanza in questa sede, visto che lo vediamo per la prima volta.\n",
        "\n",
        "Alla luce di questa espressione della matrice, osserviamo che\n",
        "\n",
        "$$\n",
        "M = \\begin{pmatrix}\n",
        "  \\cos(\\theta) & -\\sin(\\theta) \\\\[2mm]\n",
        "  \\sin(\\theta) & \\cos(\\theta)\n",
        "\\end{pmatrix}^2\n",
        "= \\begin{pmatrix}\n",
        "  \\cos(2\\theta) & -\\sin(2\\theta) \\\\[2mm]\n",
        "  \\sin(2\\theta) & \\cos(2\\theta)\n",
        "\\end{pmatrix}.\n",
        "$$\n",
        "\n",
        "Questo perché ruotare di due volte di un angolo pari a $\\theta$ equivale a ruotare di un angolo pari a $2\\theta$.\n",
        "Un altro modo per renderlo evidente è quello di ricorrere all'espressione alternativa\n",
        "\n",
        "$$\n",
        "\\theta\n",
        "= \\cos^{-1}\\biggl(\\sqrt{\\frac{\\vert A_0\\vert}{N}}\\biggr),\n",
        "$$\n",
        "\n",
        "insieme alle formule degli *angoli doppi* della trigonometria:\n",
        "\n",
        "$$\n",
        "\\begin{aligned}\n",
        "\\cos(2\\theta) & = \\cos^2(\\theta) - \\sin^2(\\theta)\\\\[1mm]\n",
        "\\sin(2\\theta) & = 2 \\sin(\\theta)\\cos(\\theta).\n",
        "\\end{aligned}\n",
        "$$\n",
        "\n",
        "In sintesi, lo stato del registro $\\mathsf{Q}$ all'inizio del passo 2 è\n",
        "\n",
        "$$\n",
        "\\vert u\\rangle\n",
        "= \\sqrt{\\frac{\\vert A_0\\vert}{N}} \\vert A_0\\rangle\n",
        "+ \\sqrt{\\frac{\\vert A_1\\vert}{N}} \\vert A_1\\rangle\n",
        "= \\cos(\\theta) \\vert A_0\\rangle + \\sin(\\theta) \\vert A_1\\rangle,\n",
        "$$\n",
        "\n",
        "e l'effetto dell'applicazione di $G$ a questo stato è quello di ruotarlo di un angolo $2\\theta$ all'interno dello spazio generato da $\\vert A_0\\rangle$ e $\\vert A_1\\rangle$.\n",
        "Quindi, ad esempio, abbiamo\n",
        "\n",
        "$$\n",
        "\\begin{aligned}\n",
        "G \\vert u \\rangle &= \\cos(3\\theta) \\vert A_0\\rangle + \\sin(3\\theta) \\vert A_1\\rangle\\\\[1mm]\n",
        "G^2 \\vert u \\rangle &= \\cos(5\\theta) \\vert A_0\\rangle + \\sin(5\\theta) \\vert A_1\\rangle\\\\[1mm]\n",
        "G^3 \\vert u \\rangle &= \\cos(7\\theta) \\vert A_0\\rangle + \\sin(7\\theta) \\vert A_1\\rangle\n",
        "\\end{aligned}\n",
        "$$\n",
        "\n",
        "e in generale\n",
        "\n",
        "$$\n",
        "G^t \\vert u \\rangle\n",
        "= \\cos\\bigl((2t + 1)\\theta\\bigr) \\vert A_0\\rangle\n",
        "+ \\sin\\bigl((2t + 1)\\theta\\bigr) \\vert A_1\\rangle.\n",
        "$$\n",
        "\n",
        "<span id=\"geometric-picture\" />\n",
        "\n",
        "## Immagine geometrica\n",
        "\n",
        "Ora colleghiamo l'analisi che abbiamo appena svolto a un'immagine geometrica.\n",
        "L'idea è che l'operazione $G$ sia il prodotto di due *riflessioni*,\n",
        "$Z_f$ e $H^{\\otimes n} Z_{\\mathrm{OR}} H^{\\otimes n}$.\n",
        "E l'effetto complessivo dell'esecuzione di due riflessioni è quello di eseguire una *rotazione*.\n",
        "\n",
        "Cominciamo con $Z_f$.\n",
        "Come abbiamo già osservato in precedenza, abbiamo\n",
        "\n",
        "$$\n",
        "\\begin{aligned}\n",
        "Z_f \\vert A_0\\rangle & = \\vert A_0\\rangle \\\\[1mm]\n",
        "Z_f \\vert A_1\\rangle & = -\\vert A_1\\rangle.\n",
        "\\end{aligned}\n",
        "$$\n",
        "\n",
        "All'interno dello spazio vettoriale bidimensionale generato da $\\vert A_0\\rangle$ e $\\vert A_1\\rangle$,\n",
        "si tratta di una *riflessione* rispetto alla retta parallela a $\\vert A_0\\rangle$, che chiameremo $L_1$.\n",
        "Ecco una figura che illustra l'azione di questa riflessione su un ipotetico vettore unitario $\\vert\\psi\\rangle$,\n",
        "che supponiamo sia una combinazione lineare reale di $\\vert A_0\\rangle$ e $\\vert A_1\\rangle$.\n",
        "\n",
        "![Una figura che rappresenta l'azione di una riflessione su un vettore.](https://quantum.cloud.ibm.com/learning/images/courses/fundamentals-of-quantum-algorithms/grover-algorithm/reflection1.svg)\n",
        "\n",
        "In secondo luogo abbiamo l'operazione $H^{\\otimes n} Z_{\\mathrm{OR}} H^{\\otimes n}$, che, come abbiamo già visto, può essere scritta come\n",
        "\n",
        "$$\n",
        "H^{\\otimes n} Z_{\\mathrm{OR}} H^{\\otimes n} = 2 \\vert u \\rangle \\langle u \\vert - \\mathbb{I}.\n",
        "$$\n",
        "\n",
        "Anche questa è una riflessione, questa volta riguardante la retta $L_2$ parallela al vettore $\\vert u\\rangle$.\n",
        "Ecco una figura che illustra l'effetto di questa riflessione su un vettore unitario $\\vert\\psi\\rangle$.\n",
        "\n",
        "![Una figura che rappresenta l'azione di una seconda riflessione su un vettore.](https://quantum.cloud.ibm.com/learning/images/courses/fundamentals-of-quantum-algorithms/grover-algorithm/reflection2.svg)\n",
        "\n",
        "Quando componiamo queste due riflessioni, otteniamo una rotazione - di due volte l'angolo tra le linee di riflessione - come illustra questa figura.\n",
        "\n",
        "![Una figura che illustra l'azione dell'operazione di Grover su un vettore.](https://quantum.cloud.ibm.com/learning/images/courses/fundamentals-of-quantum-algorithms/grover-algorithm/Grover_rotation.svg)\n",
        "\n",
        "Questo spiega, in termini geometrici, perché l’effetto dell’operazione di Grover consiste nel ruotare le combinazioni lineari di $\\vert A_0\\rangle$ e $\\vert A_1\\rangle$ di un angolo pari a $2\\theta$.\n",
        "\n"
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {},
      "id": "a1b8767d",
      "source": "© IBM Corp., 2017-2026"
    }
  ],
  "metadata": {
    "kernelspec": {
      "display_name": "Python 3",
      "language": "python",
      "name": "python3"
    },
    "language_info": {
      "codemirror_mode": {
        "name": "ipython",
        "version": 3
      },
      "file_extension": ".py",
      "mimetype": "text/x-python",
      "name": "python",
      "nbconvert_exporter": "python",
      "pygments_lexer": "ipython3",
      "version": "3"
    }
  },
  "nbformat": 4,
  "nbformat_minor": 5
}