Toute fonction classique à un bit où est une entrée à bits et est une sortie à bits peut être écrit comme un calcul réversible,
(Notez que toute fonction de sorties peut être écrite comme juste séparées de 1 bit.)f:x↦yx∈{0,1}nny∈{0,1}n
fr:(x,y)↦(x,y⊕f(x))
mm
Une porte quantique implémentant ceci est fondamentalement juste la porte quantique correspondant à l'évaluation de la fonction réversible. Si vous écrivez simplement la table de vérité de la fonction, chaque ligne correspond à une ligne de la matrice unitaire et la sortie vous indique quelle entrée de colonne contient un 1 (toutes les autres entrées contiennent 0).
Dans le cas de XNOR, nous avons la table de vérité standard et la table de vérité de fonction réversible
Ainsi, la matrice unitaire est
x00011011f(x)1001(x,y)000001010011100101110111(x,y⊕f(x))001000010011100101111110
U=⎛⎝⎜⎜⎜⎜⎜⎜⎜⎜⎜⎜⎜⎜⎜0100000010000000001000000001000000001000000001000000000100000010⎞⎠⎟⎟⎟⎟⎟⎟⎟⎟⎟⎟⎟⎟⎟.
Cela peut facilement être décomposé en termes de deux portes non contrôlées et d'un ou deux flip.
La méthode que je viens de décrire vous donne un moyen très sûr de faire la construction qui fonctionne pour tout , mais elle ne reconstruit pas parfaitement la correspondance entre XOR et non-contrôlé. Pour cela, nous devons en supposer un peu plus sur les propriétés de la fonction .f(x)f(x)
Supposons que nous pouvons décomposer l'entrée en telle que et telle sorte que pour toutes les valeurs de , le les valeurs de sont distinctes pour chaque . Dans ce cas, nous pouvons définir l'évaluation de la fonction réversible commeCela signifie que nous utilisons 1 bits de moins que la construction précédente, mais à partir de là, la technique peut être répétée.xa,ba∈{0,1}n−1b∈{0,1}af(a,b)b
f:(a,b)↦(a,f(a,b)).
Revenons donc à la table de vérité pour XNOR.
Nous pouvons voir que, par exemple, lorsque nous fixons , les deux sorties sont , donc distinctes. De même pour fixer . Ainsi, nous pouvons procéder à la construction de la fonction réversible
et cela nous donne un unitaire
ab00011011f(a,b)1001
a=01,0a=1ab00011011af(a,b)01001011
cNOT⋅(1⊗X)U=⎛⎝⎜⎜⎜0100100000100001⎞⎠⎟⎟⎟
cNOT⋅(1⊗X)