In[]:=
PacletInstall["https://www.wolfr.am/DevWQCF"]Needs["Wolfram`QuantumFramework`"]
Out[]=
PacletObject
Measurement operator creates an extra qubit, you can think of it as the Copy operator, which is a matrix:
4×2
In[]:=
QuantumOperator["Copy"]["Matrix"]//MatrixForm
Out[]//MatrixForm=
1 | 0 |
0 | 0 |
0 | 0 |
0 | 1 |
In[]:=
QuantumCircuitOperator[{"NOT","Copy"->{1}->{1,0}}]
Out[]=
This circuit has the same matrix as with the measurement:
In[]:=
QuantumCircuitOperator[{"NOT","Copy"->{1}->{1,0}}]["Matrix"]//MatrixForm
Out[]//MatrixForm=
0 | 1 |
0 | 0 |
0 | 0 |
1 | 0 |
When the circuit with measurement is applied, the original or extra qubit has to be traced over:
In[]:=
QuantumCircuitOperator[{"NOT","M","Trace"}]["Diagram","ShowExtraQudits"->True]
Out[]=
In[]:=
QuantumCircuitOperator[{"NOT","M","Trace"->0}]["Diagram","ShowExtraQudits"->True]
Out[]=
In[]:=
ComplexExpand/@QuantumCircuitOperator[{"NOT","M","Trace"}][QuantumState[{α,β}]]["Probabilities"]
Out[]=
+,+
ℰ
0
2
β
2
α
2
β
ℰ
1
2
α
2
α
2
β
In[]:=
ComplexExpand/@QuantumCircuitOperator[{"NOT","M","Trace"->0}][QuantumState[{α,β}]]["Probabilities"]
Out[]=
0+,1+
2
β
2
α
2
β
2
α
2
α
2
β
This is done because you may be willing to measure the same qubit more than once:
In[]:=
QuantumCircuitOperator[{"NOT","M","M","M"}]
Out[]=
In[]:=
QuantumCircuitOperator[{"NOT","M","M","M"}][]["ProbabilityPlot"]
Out[]=
Like in this more practical example:
In[]:=
QuantumCircuitOperator["LeggettGarg"]
Out[]=
The tracing is then done automatically when QuantumMeasurement probabilities are extracted:
In[]:=
m=QuantumCircuitOperator[{"NOT","M"}][QuantumState[{α,β}]]
Out[]=
QuantumMeasurement
In[]:=
ComplexExpand/@m["Probabilities"]
Out[]=
0+,1+
2
β
2
α
2
β
2
α
2
α
2
β