Checkpoint-3

System #0

You are a physics research assistant specializing in solving complex, research-level problems using precise, step-by-step reasoning.

Input Problems will be provided in Markdown format.

Output (Markdown format)

  1. Step-by-Step Derivation - Show every non-trivial step in the solution. Justify steps using relevant physical laws, theorems, mathematical identities or numerical codes.
  2. Mathematical Typesetting - Use LaTeX for all mathematics: $...$ for inline expressions, $$...$$ for display equations.
  3. Conventions and Units - Follow the unit system and conventions specified in the problem.
  4. Final Answer - At the end of the solution, start a new line with “Final Answer:”, and present the final result.

    For final answers involving values, follow the precision requirements specified in the problem. If no precision is specified: - If an exact value is possible, provide it (e.g., \$\sqrt(2)\$, \$\pi/4\$). - If exact form is not feasible, retain at least 12 significant digits in the result.

  5. Formatting Compliance - If the user requests a specific output format (e.g., code, table), provide the final answer accordingly.

User #1

Problem setup:

In quantum error correction, you encode quantum states into logical states made of many qubits in order to improve their resilience to errors. In quantum error detection, you do the same but can only detect the presence of errors and not correct them. In this problem, we will consider a single [[4,2,2]] quantum error detection code, which encodes two logical qubits into four physical qubits, and investigate how robust logical quantum operations in this code are to quantum errors.

Our convention is that the four physical qubits in the [[4,2,2]] code are labelled 0,1,2,3. The two logical qubits are labelled A and B. The stabilizers are \(XXXX\) and \(ZZZZ\), where \(X\) and \(Z\) are Pauli matrices. The logical \(X\) and \(Z\) operators on the two qubits are \(X_A = XIXI\), \(X_B=XXII\), \(Z_A = ZZII\), \(Z_B = ZIZI\), up to multiplication by stabilizers.

We will consider different state preparation circuits consisting of controlled not \(CNOT_{ij}\) gates, where \(CNOT_{ij}\) has control qubit \(i\) and target qubit \(j\). As a simple model of quantum errors in hardware, we will suppose that each \(CNOT_{ij}\) gate in the circuit has a two qubit depolarizing error channel following it that produces one of the 15 non-identity two-qubit Paulis with equal probability \(p/15\). The probability \(p\) indicates the probability of an error in a single two-qubit gate. We will assess the logical infidelity of certain state preparation protocols as a function of the physical infidelity \(p\).

Checkpoint 1

Suppose that we wish to prepare a logical two-qubit GHZ state \((|00\rangle_{AB}+|11\rangle_{AB})/\sqrt{2}\) in the [[4,2,2]] code. To do so, we use the following state preparation circuit:

\[ (CNOT_{03}) (H_0) (CNOT_{21}) (H_2). \]

Note that this equation is written in matrix multiplication order, while the quantum operations in the circuit occur in the reverse order (from right-to-left in the above equation). \(H\) is a single-qubit Hadamard gate.

What is the physical state fidelity of the final physical 4-qubit state at the end of the circuit as a function of the two-qubit gate error rate \(p\)?

Assistant #2
  1. Step-by-Step Derivation
  • Ideal state prepared by the circuit:
  • Start from |0000⟩.
  • Apply H2: (|0⟩2 + |1⟩2)/√2 ⊗ |000⟩013.
  • Apply CNOT21: creates a Bell pair on qubits (2,1): |Φ+⟩21 = (|00⟩ + |11⟩)/√2. State is |Φ+⟩21 ⊗ |00⟩03.
  • Apply H0: puts qubit 0 in |+⟩.
  • Apply CNOT03: creates a Bell pair on qubits (0,3): |Φ+⟩03. Final ideal state
\[ |\psi_{\mathrm{ideal}}\rangle = |\Phi^+\rangle_{03}\otimes |\Phi^+\rangle_{21}. \]

The stabilizers of |Φ+⟩ are generated by {X⊗X, Z⊗Z}; equivalently, the four elements {I⊗I, X⊗X, Y⊗Y, Z⊗Z} act as ±1 on |Φ+⟩.

  • Noise model:
  • After each CNOTij, a two-qubit depolarizing channel acts on qubits i and j:
\[ \Lambda_p(\rho) = (1-p)\rho + \frac{p}{15}\sum_{P\in\mathcal{P}_2\setminus\{II\}} P\rho P, \]
where 𝒫2 = {I, X, Y, Z}⊗2.
  • There are two such channels: one on (2,1) after CNOT21 and one on (0,3) after CNOT03. The H gates are ideal. The first channel acts on qubits (2,1) and commutes with later gates (which act on qubits 0 and 3), so the total error at the end is a tensor product E03 ⊗ E21 of independent two-qubit Paulis on the two Bell pairs.

  • Fidelity for a single Bell pair under Λp:

  • For a pure target |Φ+⟩, the output fidelity after Λp is
\[ F_{\mathrm{pair}}(p) = \langle \Phi^+|\Lambda_p(|\Phi^+\rangle\langle\Phi^+|)|\Phi^+\rangle = (1-p) + \frac{p}{15}\sum_{P\neq II} |\langle \Phi^+|P|\Phi^+\rangle|^2. \]
  • Only P ∈ {X⊗X, Y⊗Y, Z⊗Z} give nonzero contribution, and for each of these, |⟨Φ+|P|Φ+⟩|^2 = 1. Hence
\[ F_{\mathrm{pair}}(p) = (1-p) + \frac{3p}{15} = 1 - \frac{4}{5}p. \]
  • Total 4-qubit fidelity:
  • The final state is a tensor product of two Bell pairs, and the two depolarizing channels act independently on disjoint pairs. Therefore the total fidelity is the product of the pair fidelities:
\[ F_{\mathrm{phys}}(p) = \big[F_{\mathrm{pair}}(p)\big]^2 = \left(1 - \frac{4}{5}p\right)^2. \]
  1. Mathematical Typesetting
  • Done above.
  1. Conventions and Units
  • Dimensionless probabilities; standard Pauli and CNOT conventions; depolarizing channel as specified.
  1. Final Answer: F(p) = (1 − 4p/5)^2 = 1 − (8/5)p + (16/25)p^2.
User #3

Checkpoint 2

Suppose that we wish to prepare a logical two-qubit GHZ state \((|00\rangle_{AB}+|11\rangle_{AB})/\sqrt{2}\) in the [[4,2,2]] code. To do so, we use the following state preparation circuit:

\[ (CNOT_{03}) (H_0) (CNOT_{21}) (H_2). \]

Note that this equation is written in matrix multiplication order, while the quantum operations in the circuit occur in the reverse order (from right-to-left in the above equation). \(H\) is a single-qubit Hadamard gate.

What is the logical state fidelity of the final 2-qubit logical state at the end of the circuit as a function of the two-qubit gate error rate \(p\), assuming the state is post-selected on all detectable errors in the code?

Assistant #4
  1. Step-by-Step Derivation
  • Ideal output of the circuit
  • As in Subproblem 1, the noiseless circuit prepares a product of Bell pairs on disjoint pairs (03) and (21):
\[ \]
  • Noise model and factorization
  • A two-qubit depolarizing channel acts after each CNOT, once on qubits (2,1) and once on qubits (0,3). The channels are independent and act on disjoint pairs, so the final error is a tensor product \(E_{03}\otimes E_{21}\) of two-qubit Paulis.

  • One-pair behavior under the depolarizing channel

  • The 16 two-qubit Paulis form four cosets of the stabilizer of \(|\Phi^+\rangle\) on a pair. Consequently, after the channel on a given pair:
    • Probability the pair remains in \(|\Phi^+\rangle\):
\[ p_{\Phi^+}=(1-p) + 3\frac{p}{15} = 1-\frac{4}{5}p. \]
- Probability the pair is mapped to each of the other three Bell states $|\Phi^-\rangle,|\Psi^+\rangle,|\Psi^-\rangle$:
\[ p_{\text{other}}=\frac{4}{15}p. \]
  • What the post-selection accepts
  • The code stabilizers are
\[ \]
  • Each Bell state on a pair is a simultaneous eigenstate of \(XX\) and \(ZZ\) with eigenvalues \((\pm1,\pm1)\). Writing the eigenvalue pair on pair \(03\) as \((a_{03},b_{03})\) for \((ZZ_{03},XX_{03})\) and similarly \((a_{21},b_{21})\) on pair \(21\), the post-selection on \(S_X=+1,S_Z=+1\) enforces
\[ a_{03}a_{21}=+1,\quad b_{03}b_{21}=+1 \;\;\Longleftrightarrow\;\; (a_{03},b_{03})=(a_{21},b_{21}). \]
So both pairs must end up in the same Bell state (both Φ+, or both Φ−, or both Ψ+, or both Ψ−).
  • Hence the acceptance probability is
\[ \]
  • Mapping to the logical 2-qubit state
  • Using the given logicals, observe
\[ \]
Thus the logical Bell labels on $(A,B)$ are exactly the $(XX,ZZ)$ eigenvalues on pair $(1,2)$. Because post-selection enforces pair $(0,3)$ to match $(1,2)$, the accepted 4-qubit state is one of the four orthonormal logical Bell states on $(A,B)$:
- Φ+⊗Φ+ → logical |Φ+⟩AB (the target),
- Φ−⊗Φ− → logical |Φ−⟩AB,
- Ψ+⊗Ψ+ → logical |Ψ+⟩AB,
- Ψ−⊗Ψ− → logical |Ψ−⟩AB.
  • Therefore, the logical state fidelity conditioned on acceptance is the conditional probability that both pairs are Φ+:
\[ \]
  • Simplifications and small-p expansion
  • Closed form:
\[ F_{\text{log}}(p)=\frac{75-120p+48p^2}{75-120p+64p^2}. \]
  • Series (small p):
\[ F_{\text{log}}(p)=1-\frac{16}{75}p^2+O(p^3), \]
showing the leading logical infidelity is second order in p due to post-selection.
  1. Mathematical Typesetting
  • All expressions provided in LaTeX above.
  1. Conventions and Units
  • Dimensionless probabilities; ideal single-qubit gates and stabilizer measurements; two-qubit depolarizing noise as specified.
  1. Final Answer: F_log(p) = [(1 − 4p/5)^2] / [(1 − 4p/5)^2 + 3 (4p/15)^2] = (75 − 120 p + 48 p^2)/(75 − 120 p + 64 p^2).
User #5

Checkpoint 3

Suppose that we prepare a logical two-qubit \(|00\rangle_{AB}\) state in the [[4,2,2]] code. To do so, we introduce an ancilla qubit, qubit 4, and use the following state preparation circuit:

\[ M_4 (CNOT_{04}) (CNOT_{34}) (CNOT_{23}) (CNOT_{10}) (CNOT_{12}) (H_1) \]

Note that this equation is written in matrix multiplication order, while the quantum operations in the circuit occur in the reverse order (from right-to-left in the above equation). \(H\) is a single-qubit Hadamard gate and \(M\) is a single-qubit measurement. The ancilla is used to detect errors in the state preparation circuit and makes the circuit fault-tolerant. If the ancilla measurement is \(|0\rangle\) (\(|1\rangle\)), the state preparation succeeds (fails).

What is the logical state fidelity of the final 2-qubit logical state at the end of the circuit as a function of two-qubit gate error rate \(p\), assuming the state is post-selected on all detectable errors in the code and on the ancilla qubit measuring \(|0\rangle\)?

Assistant #6
Tool Call (code to execute)
from itertools import product
from fractions import Fraction

# Qubit indexing: 0,1,2,3 are data; 4 is ancilla
n = 5

# Helper: Pauli as (x,z) bitvectors lengths n
# Multiplication: XOR x and z (phase ignored)
def pauli_mul(p, q):
    x1, z1 = p
    x2, z2 = q
    return [x1 ^ x2, z1 ^ z2]

# Conjugation by CNOT(c,t)
def conj_cnot(p, c, t):
    x, z = p
    # x_t <- x_t XOR x_c
    xt = (x >> t) & 1
    xc = (x >> c) & 1
    x ^= (xc << t)
    # z_c <- z_c XOR z_t
    zt = (z >> t) & 1
    zc = (z >> c) & 1
    z ^= (zt << c)
    return [x, z]

# Build single-qubit Paulis
label_to_bits = {
    'I': (0,0),
    'X': (1,0),
    'Z': (0,1),
    'Y': (1,1),
}

# Two-qubit Paulis on a given pair (a,b)
def two_qubit_paulis_on_pair(a, b):
    ops = []
    labels = ['I','X','Y','Z']
    for la in labels:
        for lb in labels:
            if la=='I' and lb=='I':
                lab = 'II'
            else:
                lab = la+lb
            # Build 5-qubit Pauli
            x = 0
            z = 0
            xa, za = label_to_bits[la]
            xb, zb = label_to_bits[lb]
            if xa: x |= (1<<a)
            if xb: x |= (1<<b)
            if za: z |= (1<<a)
            if zb: z |= (1<<b)
            ops.append((lab, [x, z]))
    return ops

# Gates in temporal order with error inserted after each CNOT
# 0: H1 (no error here)
# 1: CNOT12 -> error E1 on (1,2)
# 2: CNOT10 -> error E2 on (1,0)
# 3: CNOT23 -> error E3 on (2,3)
# 4: CNOT34 -> error E4 on (3,4)
# 5: CNOT04 -> error E5 on (0,4)
gates = [
    ('H', 1, None),
    ('CNOT', 1, 2),
    ('CNOT', 1, 0),
    ('CNOT', 2, 3),
    ('CNOT', 3, 4),
    ('CNOT', 0, 4),
]

# Precompute conjugated error for each insertion point and each 2-qubit Pauli
insertion_points = [1,2,3,4,5]  # after these gates
pairs = {1:(1,2), 2:(1,0), 3:(2,3), 4:(3,4), 5:(0,4)}
ops_by_point = {}
for s in insertion_points:
    a,b = pairs[s]
    ops = two_qubit_paulis_on_pair(a,b)
    # For each Pauli, propagate through subsequent gates s+1..5
    propagated = []
    for lab, p in ops:
        x,z = p
        p_cur = [x,z]
        for idx in range(s+1, 6):
            g, c, t = gates[idx]
            if g=='CNOT':
                p_cur = conj_cnot(p_cur, c, t)
            else:
                # No more H gates after s>=1
                pass
        propagated.append((lab, p_cur))
    ops_by_point[s] = propagated

# Stabilizers Sx=XXXX, Sz=ZZZZ on data qubits
Sx = [0,0]
for q in [0,1,2,3]:
    Sx[0] |= (1<<q)  # x bits
Sz = [0,0]
for q in [0,1,2,3]:
    Sz[1] |= (1<<q)  # z bits

# Logical operators
# X_A = X I X I (0,2)
XA = [0,0]
XA[0] |= (1<<0) | (1<<2)
# Z_A = Z Z I I (0,1)
ZA = [0,0]
ZA[1] |= (1<<0) | (1<<1)
# X_B = X X I I (0,1)
XB = [0,0]
XB[0] |= (1<<0) | (1<<1)
# Z_B = Z I Z I (0,2)
ZB = [0,0]
ZB[1] |= (1<<0) | (1<<2)

# Commutation check: returns 0 if commute, 1 if anticommute
def anticomm(p, q):
    x1,z1 = p
    x2,z2 = q
    # (-1)^{x1·z2 + z1·x2}
    s = ((x1 & z2).bit_count() + (z1 & x2).bit_count()) & 1
    return s

# Restrict pauli to data (zero ancilla components)
def restrict_data(p):
    x,z = p
    # zero out ancilla bit 4
    mask_data = ((1<<4)-1)  # bits 0..3 set
    return [x & mask_data, z & mask_data]

# acceptance checks
def accept_code(p):
    pd = restrict_data(p)
    return (anticomm(pd, Sx)==0) and (anticomm(pd, Sz)==0)

def accept_anc(p):
    x,z = p
    # accept iff no X/Y on ancilla -> x_4 == 0
    return ((x>>4)&1)==0

# classify logical good: accepted and no logical X on A or B

def logical_good(p):
    if not (accept_code(p) and accept_anc(p)):
        return False
    pd = restrict_data(p)
    xA = anticomm(pd, ZA)  # anticomm with Z_A indicates X_A component
    xB = anticomm(pd, ZB)
    return (xA==0) and (xB==0)

# Iterate all combinations across 5 insertion points, each with 16 options. Compute counts by k (# non-identity)
from collections import defaultdict
acc_counts = [0]*6
good_counts = [0]*6
all_counts = [0]*6
num_total = 0
# Precompute length 16 for each point
ops_per_point = []
labels_per_point = []
for s in insertion_points:
    ops = ops_by_point[s]
    # They are currently 16 ops including 'II' label
    labels_per_point.append([lab for lab,_ in ops])
    ops_per_point.append([p for _,p in ops])

# iterate
indices = [range(16) for _ in range(5)]
for i1 in indices[0]:
    p1 = ops_per_point[0][i1]
    k1 = 0 if labels_per_point[0][i1]=='II' else 1
    for i2 in indices[1]:
        p2 = ops_per_point[1][i2]
        k2 = k1 + (0 if labels_per_point[1][i2]=='II' else 1)
        p12 = pauli_mul(p1, p2)
        for i3 in indices[2]:
            p3 = ops_per_point[2][i3]
            k3 = k2 + (0 if labels_per_point[2][i3]=='II' else 1)
            p123 = pauli_mul(p12, p3)
            for i4 in indices[3]:
                p4 = ops_per_point[3][i4]
                k4 = k3 + (0 if labels_per_point[3][i4]=='II' else 1)
                p1234 = pauli_mul(p123, p4)
                for i5 in indices[4]:
                    p5 = ops_per_point[4][i5]
                    k = k4 + (0 if labels_per_point[4][i5]=='II' else 1)
                    p_final = pauli_mul(p1234, p5)
                    all_counts[k] += 1
                    if accept_code(p_final) and accept_anc(p_final):
                        acc_counts[k] += 1
                        if logical_good(p_final):
                            good_counts[k] += 1

print('all_counts', all_counts)
print('acc_counts', acc_counts)
print('good_counts', good_counts)

# Sanity: total combos
print('Total combos', sum(all_counts))

# Build polynomials Numerator (good) and Denominator (acc) as exact Fractions
from math import comb
maxdeg = 5
num_coeff = [Fraction(0,1) for _ in range(maxdeg+1)]
den_coeff = [Fraction(0,1) for _ in range(maxdeg+1)]

for k in range(0,6):
    # weight factor (p/15)^k * (1-p)^{5-k}
    coef_base = Fraction(1, 15**k)
    # expand (1-p)^{5-k}
    for m in range(0, 6-k):
        coeff = coef_base * Fraction(comb(5-k, m), 1) * ((-1)**m)
        power = k + m
        den_coeff[power] += coeff * acc_counts[k]
        num_coeff[power] += coeff * good_counts[k]

print('Denominator coefficients (lowest to highest degree):')
print([f'{c.numerator}/{c.denominator}' for c in den_coeff])
print('Numerator coefficients:')
print([f'{c.numerator}/{c.denominator}' for c in num_coeff])

# Also print small-p expansion ratio up to order 2
# Compute ratio series: num/den = a0 + a1 p + a2 p^2 + ... using series division
# We'll compute to order 2
from copy import deepcopy
an = [Fraction(c) for c in num_coeff]
ad = [Fraction(c) for c in den_coeff]
# ensure ad[0] != 0
# series division
F0 = an[0]/ad[0]
# Next coefficient
F1 = (an[1] - F0*ad[1]) / ad[0]
F2 = (an[2] - F0*ad[2] - F1*ad[1]) / ad[0]
print('Series coefficients F(p) = F0 + F1 p + F2 p^2 + ...:')
print(F0, F1, F2)
Tool #7
all_counts [1, 75, 2250, 33750, 253125, 759375]
acc_counts [1, 7, 282, 4222, 31637, 94923]
good_counts [1, 7, 138, 1198, 7397, 24027]
Total combos 1048576
Denominator coefficients (lowest to highest degree):
['1/1', '-68/15', '704/75', '-32768/3375', '253952/50625', '-262144/253125']
Numerator coefficients:
['1/1', '-68/15', '656/75', '-29312/3375', '223232/50625', '-229376/253125']
Series coefficients F(p) = F0 + F1 p + F2 p^2 + ...:
1 0 -16/25
Assistant #8
Tool Call (code to execute)
# Compute more series terms up to degree 5 using series division
from fractions import Fraction
an = [Fraction(c) for c in num_coeff]
ad = [Fraction(c) for c in den_coeff]
F = [Fraction(0,1)]*6
F[0] = an[0]/ad[0]
for n in range(1,6):
    s = an[n]
    for k in range(1, n+1):
        s -= F[n-k]*ad[k]
    F[n] = s/ad[0]
print('Series coefficients F_n for n=0..5:')
print(F)
Tool #9
Traceback (most recent call last):
  File "<stdin>", line 3, in <module>
NameError: name 'num_coeff' is not defined
Assistant #10
from fractions import Fraction
# Recompute quickly from earlier printed values
num_coeff = [Fraction(1,1), Fraction(-68,15), Fraction(656,75), Fraction(-29312,3375), Fraction(223232,50625), Fraction(-229376,253125)]
den_coeff = [Fraction(1,1), Fraction(-68,15), Fraction(704,75), Fraction(-32768,3375), Fraction(253952,50625), Fraction(-262144,253125)]

F = [Fraction(0,1)]*6
F[0] = num_coeff[0]/den_coeff[0]
for n in range(1,6):
    s = num_coeff[n]
    for k in range(1, n+1):
        s -= F[n-k]*den_coeff[k]
    F[n] = s/den_coeff[0]
print('Series coefficients F_n for n=0..5:')
print(F)
Tool #11
Series coefficients F_n for n=0..5:
[Fraction(1, 1), Fraction(0, 1), Fraction(-16, 25), Fraction(-704, 375), Fraction(-10496, 3375), Fraction(-216064, 84375)]
Assistant #12
  1. Step-by-Step Derivation
  • Ideal preparation (noiseless circuit)
  • Start from |0000⟩ data and ancilla |0⟩.
  • Apply H1, CNOT12, CNOT10, CNOT23:
\[ \xrightarrow{CNOT_{12},\,CNOT_{10},\,CNOT_{23}} \]
This is the code state stabilized by $XXXX$ and $ZZZZ$ with logical $|00\rangle_{AB}$ (since $Z_A=Z_0Z_1=+1$ and $Z_B=Z_0Z_2=+1$).
  • Parity-check to detect faults: \(CNOT_{34}\) then \(CNOT_{04}\) writes \(Z_0 Z_3\) onto ancilla \(4\); in the ideal state \(Z_0 Z_3=+1\), so the ancilla deterministically measures 0.

  • Noise model

  • After each of the five CNOTs, a two-qubit depolarizing channel applies one of the 15 non-identity Paulis with probability \(p/15\), or applies identity with probability \(1-p\).
  • The five error locations are after \(CNOT_{12}\), \(CNOT_{10}\), \(CNOT_{23}\), \(CNOT_{34}\), \(CNOT_{04}\).

  • Pauli propagation and acceptance conditions

  • Because the circuit is Clifford and the faults are Pauli, any fault pattern reduces to a single Pauli \(E\) on the 5 qubits just before measuring ancilla \(Z_4\).
  • Acceptance on the ancilla: the noiseless state is a \(+1\) eigenstate of \(Z_4\) at measurement. The measurement flips iff \(E\) anticommutes with \(Z_4\), i.e., iff the ancilla component of \(E\) is \(X\) or \(Y\). Thus ancilla acceptance is equivalent to “no \(X\)/\(Y\) on qubit 4.”
  • Post-selection on code stabilizers requires \(E\) (restricted to data qubits 0–3) commute with \(S_X=XXXX\) and \(S_Z=ZZZZ\); i.e., \(E\) lies in the normalizer of the stabilizer.

  • Logical effect inside the code space

  • On accepted events (\(E\) commutes with \(S_X,S_Z\) and no \(X/Y\) on ancilla), the data part of \(E\) is an element of the normalizer and acts as a logical Pauli on \((A,B)\) modulo stabilizers.
  • Write the encoded logicals (given): \(X_A=XIXI\), \(Z_A=ZZII\), \(X_B=XXII\), \(Z_B=ZIZI\).
  • The “\(X\)-type” logical content on \(A\) (resp. \(B\)) is detected by whether the data part of \(E\) anticommutes with \(Z_A\) (resp. \(Z_B\)). For fidelity to the target \(|00\rangle_{AB}\), we require no logical \(X\) on either qubit, i.e., commute with both \(Z_A\) and \(Z_B\) (logical \(Z\) factors are harmless on \(|00\rangle\)).

  • Exact counting (Clifford-Pauli enumeration)

  • We enumerated all \(16^5=1{,}048{,}576\) fault patterns (identity or one of 15 two-qubit Paulis at each of the five locations), propagated each to the end, and classified:
    • acceptance: commute with \(S_X,S_Z\) on data and no \(X/Y\) on ancilla;
    • “good” among accepted: additionally commute with \(Z_A\) and \(Z_B\) (no logical \(X\) on \(A\) or \(B\)).
  • Grouping by the number \(k\) of non-identity faults gives the counts:

    • total patterns: [1, 75, 2250, 33750, 253125, 759375] for k=0..5,
    • accepted: [1, 7, 282, 4222, 31637, 94923],
    • good: [1, 7, 138, 1198, 7397, 24027].
  • Constructing the conditional logical fidelity

  • Let
\[ P_{\text{acc}}(p)=\sum_{k=0}^{5}\frac{\text{accepted}_k}{15^k}\,(1-p)^{5-k}\,p^k, \]
\[ P_{\text{good}}(p)=\sum_{k=0}^{5}\frac{\text{good}_k}{15^k}\,(1-p)^{5-k}\,p^k. \]
  • Expanding, we obtain exact polynomials
\[ P_{\text{acc}}(p) &= 1 - \frac{68}{15}p + \frac{704}{75}p^2 - \frac{32768}{3375}p^3 + \frac{253952}{50625}p^4 - \frac{262144}{253125}p^5,\\ P_{\text{good}}(p) &= 1 - \frac{68}{15}p + \frac{656}{75}p^2 - \frac{29312}{3375}p^3 + \frac{223232}{50625}p^4 - \frac{229376}{253125}p^5. \]
  • Therefore the logical state fidelity conditioned on post-selection is
\[ F_{\text{log}}(p)=\frac{P_{\text{good}}(p)}{P_{\text{acc}}(p)}. \]
  • Small-p expansion
  • Series division yields
\[ F_{\text{log}}(p)=1 - \frac{16}{25}p^2 - \frac{704}{375}p^3 - \frac{10496}{3375}p^4 - \frac{216064}{84375}p^5 + O(p^6), \]
showing fault-tolerance (no linear term) with a quadratic leading logical infidelity.
  1. Mathematical Typesetting
  • All equations are presented in LaTeX above.
  1. Conventions and Units
  • Two-qubit depolarizing after each CNOT, probability p; ideal single-qubit gates; post-selection on both code stabilizers and ancilla measurement.
  1. Final Answer: The logical state fidelity (conditioned on accepting the run: ancilla outcome 0 and code-stabilizer checks passing) is
\[ F_{\text{log}}(p) =\frac{1 - \frac{68}{15}p + \frac{656}{75}p^2 - \frac{29312}{3375}p^3 + \frac{223232}{50625}p^4 - \frac{229376}{253125}p^5} {1 - \frac{68}{15}p + \frac{704}{75}p^2 - \frac{32768}{3375}p^3 + \frac{253952}{50625}p^4 - \frac{262144}{253125}p^5}, \]

with small-p expansion

\[ F_{\text{log}}(p)=1 - \frac{16}{25}p^2 + O(p^3). \]
User #13

Populate your final answer into the code template provided below. This step is purely for formatting/display purposes. No additional reasoning or derivation should be performed. Do not import any modules or packages beyond what is provided in the template.

import sympy as sp

p = sp.symbols('p')

def answer(p):
    r"""
    Return the expression of the logical state fidelity of the final 2-qubit logical state
    at the end of the circuit as a function of two-qubit gate error rate $p$.

    Inputs
    ----------
    p: sympy.Symbol, two-qubit gate error rate, $p$

    Outputs
    ----------
    F_logical: sympy.Expr, logical state fidelity of the final 2-qubit logical state
    """

    # ------------------ FILL IN YOUR RESULTS BELOW ------------------
    F_logical = ...  # a SymPy expression of inputs
    # ---------------------------------------------------------------

    return F_logical
Assistant #14
import sympy as sp

p = sp.symbols('p')

def answer(p):
    r"""
    Return the expression of the logical state fidelity of the final 2-qubit logical state
    at the end of the circuit as a function of two-qubit gate error rate $p$.

    Inputs
    ----------
    p: sympy.Symbol, two-qubit gate error rate, $p$

    Outputs
    ----------
    F_logical: sympy.Expr, logical state fidelity of the final 2-qubit logical state
    """

    # ------------------ FILL IN YOUR RESULTS BELOW ------------------
    F_logical = (
        1
        - sp.Rational(68, 15) * p
        + sp.Rational(656, 75) * p**2
        - sp.Rational(29312, 3375) * p**3
        + sp.Rational(223232, 50625) * p**4
        - sp.Rational(229376, 253125) * p**5
    ) / (
        1
        - sp.Rational(68, 15) * p
        + sp.Rational(704, 75) * p**2
        - sp.Rational(32768, 3375) * p**3
        + sp.Rational(253952, 50625) * p**4
        - sp.Rational(262144, 253125) * p**5
    )
    # ---------------------------------------------------------------

    return F_logical