Grover's Algorithm II

We can diagram the steps of the Grover algorithm

We start the system on the left with incoming state |0 ⟩|1⟩

(H^(⊗n)) (Subscript[|0⟩, n]) = (1/(2^(n/2)))  (Underoverscript[(∑_( )^( )), 0, ((2^n)-1)]) |x⟩_n  ≡ |ϕ⟩  and so

(Subscript[U, f]) (H^(⊗n)) (Subscript[|0⟩, n])H|1 ⟩ =    (1/(2^(n/2)))  (Underoverscript[(∑_( )^( )), 0, ((2^n)-1)]) (((-1))^(f((Subscript[x, n])) ))(Subscript[|x ⟩, n]) H|1⟩ = V|ϕ⟩ H|1⟩

then we introduced 

 W = 2 |ϕ⟩⟨ϕ|-I  where |ϕ⟩ = (H^(⊗n)) (Subscript[|0⟩, n]). 
 
We repeat this  (Sqrt[N])/2   times before we make a measurement. Lets translate this procedure into a Mathematica code.
However since we know how the first, one bit, register behaves lets just simulate the input register whose input is
(Subscript[| 0 ⟩, n])  and follow its progression. Suppose n=7, then N=(2^7) is the dimension of our Hilbert space for the first register.

zerobit={1,0};
onebit={0,1};
nullket=Flatten[KroneckerProduct[zerobit,zerobit,zerobit,zerobit,zerobit,zerobit,zerobit]];

Hadamard=1/Sqrt[2]{{1,1},{1,-1}};

Hadtimesn=KroneckerProduct[Hadamard,Hadamard,Hadamard,Hadamard,Hadamard,Hadamard,Hadamard];

MatrixForm[Hadtimesn];

phi=Hadtimesn.nullket;

V=DiagonalMatrix[Table[If[i==76,-1,1],{i,1,2^7}]];

(* in order to construct W it is easiest to use definition above *)

W=2 KroneckerProduct[phi,phi]-IdentityMatrix[2^7];

MatrixForm[W];

(* Grover operator G = W V *)

G=W.V;

(* First Grover iteration *)

grover1=N[G.phi]
grover2=N[G.grover1]
grover3=N[G.grover2]
grover4=N[G.grover3]
grover5=N[G.grover4]
grover6=N[G.grover5]