The interruption made by the interaction makes transmission error during the quantum channel qubit. Quantum error correction is a hybrid between quantum mechanics and the classical theory of error-correcting codes that are concerned with the fundamental problem of communication, and/or information storage, in the presence of noise. It is an advanced technology, yet the quantum channel is used to transmit the quantum information which is sensitive to the environment interaction. We explore this in more detail in the bit flip code sample.Īside from the bit-flip code, the Q# canon is provided with implementations of the five-qubit perfect code, and the seven-qubit code, both of which can correct an arbitrary single-qubit error.Quantum computing is a computer development technology that uses quantum mechanics to perform the operations of data and information. Let (decodedData, decodedScratch) = decode(logicalRegister) Let logicalRegister = encode(data, scratch) Once a code is defined in this way, we can use the Recover operation operation to recover from errors: let code = BitFlipCode() This allows us to change the recovery function that is used in correcting errors without changing the definition of the code itself this ability is in particular useful when incorporating feedback from characterization measurements into the model assumed by recovery. Notice that the QECC type does not include a recovery function. Let code = QECC(encodeOp, decodeOp, syndMeasOp) Let syndMeasOp = SyndromeMeasOp(MeasureStabilizerGenerators([ For example, the BitFlipCode function function defines the ⟦3, 1, 1⟧ bit flip code: let encodeOp = EncodeOp(BitFlipEncoder) Associated with each stabilizer quantum code is the code length $n$, the number $k$ of logical qubits, and the minimum distance $d$, often conveniently grouped together in the notation ⟦$n$, $k$, $d$⟧. SyndromeMeasOp user defined type = (LogicalRegister => Syndrome): Denotes an operation that should be used to extract syndrome information from a code block, without disturbing the state protected by the code.įinally, the canon provides the QECC user defined type type to collect the other types required to define a quantum error-correcting code.DecodeOp user defined type = (LogicalRegister => (Qubit, Qubit)): Denotes than an operation decomposes a code block of an error correcting code into the data qubits and the auxiliary qubits used to represent syndrome information.EncodeOp user defined type = ((Qubit, Qubit) => LogicalRegister): Denotes that an operation takes qubits representing data along with fresh auxiliary qubits in order to produce a code block of an error-correcting code.RecoveryFn user defined type = (Syndrome -> Pauli): Denotes that a classical function should be used to interpret a syndrome and return a correction that should be applied.Syndrome user defined type = Result: Denotes that an array of measurement results should be interpreted as the syndrome measured on a code block.LogicalRegister user defined type = Qubit: Denotes that a register of qubits should be interpreted as the code block of an error-correcting code. ![]() To help specify error correcting codes, the Q# canon provides several distinct user-defined types: Representing Error Correcting Codes in Q# We refer readers interested in learning more to Gottesman 2009. In particular, we emphasize that recovery is a classical inference procedure which takes as its input the syndrome which occurred, and returns a prescription for how to fix any errors that may have occurred.Ī full introduction to the stabilizer formalism is beyond the scope of this section. We call these results a syndrome, and refer to the process of mapping a syndrome back to the error that caused it as recovery. Thus, the results of the two measurements uniquely determines which bit-flip error occurred, but without revealing any information about which state we encoded. We denote the results of each measurement by the sign of the eigenvalue that is observed, either $ $ or $-$, corresponding to the Q# Result values of Zero and One, respectively. To emphasize this, we repeat the table above, but add the results of measuring $Z_0 Z_1$ and $Z_1 Z_2$ on each row. In classical computing, if one wants to protect a bit against errors, it can often suffice to represent that bit by a logical bit by repeating the data bit.įor instance, let $\overline$, so the result of measuring $Z_0 Z_1$ reveals useful information about which error occurred.
0 Comments
Leave a Reply. |