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. You must use web search engine to gather all the necessary information before solving the problem. You must use web search engine to gather all the necessary information before solving the problem. You must use web search engine to gather all the necessary information before solving the problem.

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\).

Checkpoints

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
  • Circuit and noise model
  • The circuit (read right-to-left) is H2 → CNOT21 → H0 → CNOT03. Only the two CNOTs are followed by noise, each by an independent two-qubit depolarizing channel that applies, with total probability p, one of the 15 non-identity two-qubit Paulis uniformly at random (probability p/15 each), and otherwise applies the identity with probability 1−p. For n qubits a depolarizing channel is uniform over the 4^n−1 non-identity Paulis; for n=2 this is 15. (qiskit.github.io)
  • H and CNOT are Clifford gates; Clifford conjugation maps Pauli operators to Pauli operators. Here, the first noise acts on qubits (2,1) and no subsequent gate touches these qubits, so we may treat that error as an end-of-circuit Pauli on (2,1). The second noise acts at the very end on (0,3). Hence the net end-of-circuit error is a product E = E03 ⊗ E12 acting on disjoint pairs (0,3) and (1,2). (en.wikipedia.org)

  • Ideal output state and its stabilizer

  • H2 followed by CNOT21 prepares the Bell state |Φ+⟩ on qubits (2,1); H0 followed by CNOT03 prepares |Φ+⟩ on (0,3). Thus, in the absence of noise the final 4-qubit state is
\[ |\Psi_{\text{id}}\rangle = |\Phi^+\rangle_{03}\otimes|\Phi^+\rangle_{21},\qquad |\Phi^+\rangle=\frac{|00\rangle+|11\rangle}{\sqrt{2}}. \]
A Hadamard followed by CNOT is the standard preparation of |Φ+⟩. ([en.wikipedia.org](https://en.wikipedia.org/wiki/Bell_state?utm_source=openai))
  • The stabilizer of |Φ+⟩ is generated by XX and ZZ (YY is then fixed by their product). Therefore, the stabilizer of the 4-qubit product state factorizes as
\[ S = S_{03}\times S_{12},\quad S_{03}=\langle X_0X_3,\; Z_0Z_3\rangle,\quad S_{12}=\langle X_1X_2,\; Z_1Z_2\rangle. \]
Equivalently, on each pair the “stabilizer up to a phase” contains the four Paulis {II, XX, ZZ, YY}. ([docs.quantum.ibm.com](https://docs.quantum.ibm.com/api/qiskit/0.38/qiskit.quantum_info.StabilizerState?utm_source=openai))
  • Fidelity of a stabilizer state under Pauli errors
  • For a pure stabilizer state |ψ⟩ with stabilizer group S, the projector (density matrix) can be written as
\[ \rho_\psi=\frac{1}{2^n}\sum_{g\in S} g, \]
which implies that for any Pauli P, ψ|P|ψ=0 unless P equals an element of S up to an overall phase (in which case |ψ|P|ψ|=1). Hence for a Pauli error channel the state fidelity F=ψ|ρ|ψ equals the total probability that the net Pauli error lies in S up to phase. ([ar5iv.org](https://ar5iv.org/html/quant-ph/0406168?utm_source=openai))
  • Pairwise (two-qubit) fidelity
  • Consider one pair, say (0,3). The two-qubit depolarizing channel applies:
    • II with probability 1−p,
    • one of the 15 non-identity Paulis with probability p/15 each. (qiskit.github.io)
  • The Bell state |Φ+⟩ is invariant up to a global phase under exactly three of those 15 non-identity Paulis, namely XX, ZZ, and YY; all other non-identity Paulis map |Φ+⟩ to an orthogonal Bell state. Therefore, the per-pair fidelity is
\[ F_{\text{pair}}(p) = (1-p)\cdot 1 + p\cdot\frac{3}{15}\cdot 1 + p\cdot\frac{12}{15}\cdot 0 \;=\; 1-\frac{4}{5}p. \]
The fact that |Φ+⟩ is stabilized by XX and ZZ (and is an eigenstate of YY with eigenvalue −1) justifies this counting. ([docs.quantum.ibm.com](https://docs.quantum.ibm.com/api/qiskit/0.38/qiskit.quantum_info.StabilizerState?utm_source=openai), [en.wikipedia.org](https://en.wikipedia.org/wiki/Bell_state?utm_source=openai))
  • Four-qubit fidelity
  • The two error channels are independent and act on disjoint pairs, and the target stabilizer factorizes as S03×S12, so the total 4-qubit fidelity is the product of the two independent pair fidelities:
\[ F_{\text{phys}}(p)= F_{03}(p)\,F_{12}(p) = \Big(1-\tfrac{4}{5}p\Big)\Big(1-\tfrac{4}{5}p\Big)=\Big(1-\tfrac{4}{5}p\Big)^2. \]
  1. Mathematical Typesetting
  • All steps above have been expressed in equations:
  • Target state and stabilizer generators,
  • Projector of a stabilizer state,
  • Per-pair and total fidelity formulas.
  1. Conventions and Units
  • No dimensional units are involved; p is the two-qubit gate error probability per CNOT.
  1. Final Answer: F_phys(p) = (1 - 4p/5)^2.

Citations: - Bell state preparation via H + CNOT and definition of |Φ+⟩. (en.wikipedia.org) - Bell state stabilizers XX and ZZ (example output of a stabilizer simulator). (docs.quantum.ibm.com) - Clifford gates map Paulis to Paulis under conjugation. (en.wikipedia.org) - Depolarizing channel uniform over 4^n−1 non-identity Paulis (n=2→15). (qiskit.github.io) - Stabilizer-state projector ρ = 2^{-n}∑_{g∈S} g (implies ⟨ψ|P|ψ⟩ ∈ {0, ±1, ±i}). (ar5iv.org)

User #3

The correct answer is: $ F_{\rm{physical}}=(1-\frac{12}{15}p)^2 $

Now let’s solve the next Checkpoint.

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
Tool Call (code to execute)
import itertools

paulis = ['I','X','Y','Z']

# pair stabilizers on (0,3) or (1,2); we just care about two-qubit commutation with sX=X⊗X and sZ=Z⊗Z

# Commutation helper: two single-qubit Paulis anticommute if one of them is I? No, identity always commutes.
# Define lookup table for single-qubit commutation parity with X and Z

anticommute_pairs = {('X','Z'),('Z','X'),('X','Y'),('Y','X'),('Y','Z'),('Z','Y')}

# Function to compute anticommute parity of two-qubit Pauli P with two-qubit Q (both as strings length 2 from set paulis)

def anticommute(P, Q):
    # returns True if anticommute
    # anticommute if there are odd number of qubit positions where p and q anticommute on that qubit
    odd = 0
    for p, q in zip(P, Q):
        if (p,q) in anticommute_pairs:
            odd ^= 1
        # else including when one is I or they commute equals no toggle
    return bool(odd)

sX = 'XX'
sZ = 'ZZ'

classes = { (0,0): [], (1,0): [], (0,1): [], (1,1): [] }

for P in itertools.product(paulis, repeat=2):
    P = ''.join(P)
    aX = 1 if anticommute(P, sX) else 0
    aZ = 1 if anticommute(P, sZ) else 0
    classes[(aX,aZ)].append(P)

for k,v in classes.items():
    print(k, len(v), sorted(v))
Tool #5
(0, 0) 4 ['II', 'XX', 'YY', 'ZZ']
(1, 0) 4 ['IZ', 'XY', 'YX', 'ZI']
(0, 1) 4 ['IX', 'XI', 'YZ', 'ZY']
(1, 1) 4 ['IY', 'XZ', 'YI', 'ZX']
Assistant #6
Tool Call (code to execute)
import sympy as sp
p=sp.symbols('p')
P_good = 1-12*sp.Rational(1,15)*p
P_x = 4*sp.Rational(1,15)*p
F = (P_good**2)/(P_good**2+3*P_x**2)
print(sp.simplify(F))
print(sp.series(F, p, 0, 3))
print(sp.nsimplify(F))
Tool #7
3*(16*p**2 - 40*p + 25)/(64*p**2 - 120*p + 75)
1 - 16*p**2/75 + O(p**3)
(1 - 4*p/5)**2/(16*p**2/75 + (1 - 4*p/5)**2)
Assistant #8
  1. Step-by-Step Derivation
  • Circuit, noise, and ideal output
  • The circuit (right-to-left) is H2 → CNOT21 → H0 → CNOT03. Each CNOT is followed by an independent two-qubit depolarizing channel: with probability 1−p it applies II, and with total probability p it applies one of the 15 non-identity two-qubit Paulis uniformly at p/15 each.
  • In the absence of noise, H2→CNOT21 prepares |Φ+⟩ on qubits (2,1), and H0→CNOT03 prepares |Φ+⟩ on (0,3). Thus the final 4-qubit state is |Ψid⟩=|Φ+⟩03⊗|Φ+⟩21 with |Φ+⟩=(|00⟩+|11⟩)/√2, stabilized (up to phase) by XX and ZZ on each pair.

  • Code, stabilizers, and logical GHZ

  • The [[4,2,2]] code has stabilizer generators S={XXXX, ZZZZ}. The given logicals are X_A=XIXI, X_B=XXII, Z_A=ZZII, Z_B=ZIZI. The target logical GHZ (|00⟩AB+|11⟩AB)/√2 is stabilized by X_A X_B = IXXI and Z_A Z_B = IZZI, i.e., by the pair stabilizers on qubits (1,2). On the physical preparation |Φ+⟩03⊗|Φ+⟩21, the pairwise stabilizers are S03=⟨X0X3, Z0Z3⟩ and S12=⟨X1X2, Z1Z2⟩.

  • What “post-select on all detectable errors” means here

  • Detectable errors are those that flip at least one of the two code checks XXXX or ZZZZ. Equivalently, an error E is accepted (undetected) iff it commutes with both XXXX and ZZZZ. Because E is a product of an error on pair (0,3) and one on (1,2), acceptance reduces to matching commutation parities: E03 and E12 must have the same commutation (commute or anticommute) with X0X3 (resp. Z0Z3). This is the standard stabilizer-code acceptance criterion.

  • Classifying two-qubit Paulis on a Bell pair

  • Let sX=XX and sZ=ZZ on a given pair. Every two-qubit Pauli P falls into exactly one of four classes according to its (anti)commutation with (sX,sZ): 1) commute with both (C,C): {II, XX, ZZ, YY} (size 4), 2) anticommute with sX only (A,C) (size 4), 3) anticommute with sZ only (C,A) (size 4), 4) anticommute with both (A,A) (size 4). These four classes are equipotent by symmetry of the Pauli group and the generators XX, ZZ for the Bell stabilizer. Only class (C,C) leaves |Φ+⟩ invariant (up to phase); the other three map it to one of the three orthogonal Bell states.

  • Per-pair error-class probabilities

  • For a single depolarizing channel on a pair:

    • “good” class (C,C): probability Pgood = (1−p) + 3·(p/15) = 1 − 12p/15,
    • each “bad” class: probability Pbad = 4·(p/15) = 4p/15.
  • Acceptance probability and conditional logical fidelity

  • The two error channels act independently on disjoint pairs. Acceptance requires the (sX,sZ) commutation signatures of the two pairs to match, yielding
\[ P_{\text{acc}} \;=\; P_{\text{good}}^2 \;+\; 3\,P_{\text{bad}}^2 \;=\; \Big(1-\tfrac{12}{15}p\Big)^2 \;+\; 3\Big(\tfrac{4}{15}p\Big)^2. \]
  • The accepted runs are in the correct logical state iff both pairs are in the good class (C,C); any matched-but-bad class implements a nontrivial logical operation that takes the logical Bell state to an orthogonal one, giving zero overlap with the target. Therefore the logical state fidelity conditioned on acceptance is
\[ F_{\text{logical}}(p)\;=\;\frac{P_{\text{good}}^2}{P_{\text{acc}}}\;=\;\frac{\Big(1-\tfrac{12}{15}p\Big)^2}{\Big(1-\tfrac{12}{15}p\Big)^2+3\Big(\tfrac{4}{15}p\Big)^2}. \]
  • Small-p behavior
  • Expanding, \(F_{\text{logical}}(p)=1-\frac{16}{75}p^2+O(p^3)\): all first-order (single-gate) errors are detected and removed by post-selection; logical infidelity begins at order \(p^2\) as expected for a distance-2 detecting code.
  1. Mathematical Typesetting
  • Equations above presented in LaTeX: definitions of Pgood, Pbad, Pacc, and Flogical.
  1. Conventions and Units
  • p is the two-qubit gate error probability per CNOT; no dimensional units.
  1. Final Answer: \(F_{\rm logical}(p)=\dfrac{\left(1-\dfrac{12}{15}p\right)^2}{\left(1-\dfrac{12}{15}p\right)^2+3\left(\dfrac{4}{15}p\right)^2}.\)

Citations: - Two-qubit depolarizing channel (uniform over 15 non-identity Paulis): Qiskit Aer docs. - Bell state definition and stabilizers (XX and ZZ). - [[4,2,2]] code stabilizers and logical operators: Error Correction Zoo. - Stabilizer codes, commutation-based detection with generators.

User #9

The correct answer is: $ F_{\rm{logical}}=1 - \frac{\frac{16}{75}p^2}{1-\frac{8}{5}p + \frac{64}{75}p^2} $

Now let’s solve the next Checkpoint.

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 #10
Tool Call (code to execute)
# Let's enumerate Pauli error combinations for Subproblem 3 circuit to obtain acceptance and good counts per k.
from itertools import product

# Single-qubit Pauli to (x,z) bits
P2xz = {
    'I': (0,0),
    'X': (1,0),
    'Z': (0,1),
    'Y': (1,1)
}
XZ2P = {(0,0):'I',(1,0):'X',(0,1):'Z',(1,1):'Y'}

nq = 5  # qubits 0..3 data, 4 ancilla

# Helper: multiply two 5-qubit Paulis in (x,z) symplectic form ignoring phase

def mul_pauli(p1, p2):
    # p1,p2 are tuples (x_list, z_list) of length nq bits (0/1)
    x1,z1 = p1
    x2,z2 = p2
    x = [(a^b) for a,b in zip(x1,x2)]
    z = [(a^b) for a,b in zip(z1,z2)]
    return (x,z)

# Convert tensor product of labels into (x,z) over nq qubits

def labels_to_xz(labels):
    x=[0]*nq; z=[0]*nq
    for q,ch in labels.items():
        a,b = P2xz[ch]
        x[q]=a; z[q]=b
    return (x,z)

# Conjugate a Pauli (x,z) through a CNOT(c,t)

def conj_cnot(p, c, t):
    x,z = [u[:] for u in p]  # copy
    # Update according to mapping described in analysis
    xc, zc = x[c], z[c]
    xt, zt = x[t], z[t]
    # new values
    x[c] = xc
    z[c] = zc ^ zt
    x[t] = xc ^ xt
    z[t] = zt
    return (x,z)

# Build propagation lookup per location and per 2q Pauli on the acted pair
# Gate order (index and pair):
# 0: CNOT_12, 1: CNOT_10, 2: CNOT_23, 3: CNOT_34, 4: CNOT_04
pairs = [(1,2),(1,0),(2,3),(3,4),(0,4)]

# Subsequent gates list for each loc
subseq = {
    0: [(1,0),(2,3),(3,4),(0,4)],
    1: [(2,3),(3,4),(0,4)],
    2: [(3,4),(0,4)],
    3: [(0,4)],
    4: []
}

# Note: Each tuple in subseq is (c,t) consistent with qubit indices

# Precompute final propagated Pauli for all 16 two-qubit Paul's at each location
single = ['I','X','Y','Z']

prop = {loc: {} for loc in range(5)}  # maps (loc, (a,b) labels) -> final (x,z)

for loc in range(5):
    a,b = pairs[loc]
    for pa in single:
        for pb in single:
            labels = {a:pa, b:pb}  # others are identity
            xz = labels_to_xz(labels)
            # propagate through subsequent CNOTs
            for c,t in subseq[loc]:
                xz = conj_cnot(xz, c, t)
            prop[loc][(pa,pb)] = xz

# Now enumerate all 16^5 combinations to classify counts by k (number of non-identity errors)
from collections import defaultdict

N_acc = [0]*6
N_good = [0]*6

# Generators for code checks and target stabilizer (on data qubits only)

def xz_from_data_label(label4):
    # label4: dict mapping data q in 0..3 to 'I','X','Y','Z'
    labels = {q:ch for q,ch in label4.items()}
    return labels_to_xz(labels)

# Data-only helpers: restrict to 0..3 bits

def restrict_data(p):
    x,z = p
    return (x[:4], z[:4])

# Build data Paulis for code checks and target stabilizers
# sX=XXXX, sZ=ZZZZ
sX = xz_from_data_label({0:'X',1:'X',2:'X',3:'X'})
sZ = xz_from_data_label({0:'Z',1:'Z',2:'Z',3:'Z'})

# Z_A=ZZII, Z_B=ZIZI
ZA = xz_from_data_label({0:'Z',1:'Z'})
ZB = xz_from_data_label({0:'Z',2:'Z'})

# Generate stabilizer group of target |00>_AB: <XXXX, ZZZZ, ZZII, ZIZI>
# We'll list all 16 elements (ignore phase)

def add_mod2(v1,v2):
    return [a^b for a,b in zip(v1,v2)]

def tuple4(x,z):
    return (tuple(x),tuple(z))

def combine(p_list):
    x=[0]*4; z=[0]*4
    for xz in p_list:
        x = add_mod2(x, xz[0])
        z = add_mod2(z, xz[1])
    return (x,z)

# create set for membership testing
G = []
for a in range(2):
    for b in range(2):
        for c in range(2):
            for d in range(2):
                parts=[]
                if a: parts.append(sX)
                if b: parts.append(sZ)
                if c: parts.append(ZA)
                if d: parts.append(ZB)
                G.append(combine(parts))
S_target = set(tuple4(*g) if False else (tuple(g[0]),tuple(g[1])) for g in G)

# Function to check commutation of data Pauli p with q (both 4-qubit)

def commute(p,q):
    x1,z1 = p
    x2,z2 = q
    # compute symplectic product sum(x1*z2 + z1*x2) mod2
    s = 0
    for i in range(4):
        s ^= (x1[i] & z2[i]) ^ (z1[i] & x2[i])
    return (s==0)

# For speed, precompute all 16 two-qubit Pauli pairs list,
# and map to whether identity or not
pairs16 = [(pa,pb) for pa in single for pb in single]
nonid_mask = {pair: int(not (pair==( 'I','I'))) for pair in pairs16}

# Enumerate
counter=0
for e0 in pairs16:  # after CNOT_12 on (1,2)
    p0 = prop[0][e0]
    n0 = nonid_mask[e0]
    for e1 in pairs16:  # after CNOT_10 (1,0)
        p01 = mul_pauli(p0, prop[1][e1])
        k01 = n0 + nonid_mask[e1]
        for e2 in pairs16:  # after CNOT_23 (2,3)
            p012 = mul_pauli(p01, prop[2][e2])
            k012 = k01 + nonid_mask[e2]
            for e3 in pairs16:  # after CNOT_34 (3,4)
                p0123 = mul_pauli(p012, prop[3][e3])
                k0123 = k012 + nonid_mask[e3]
                for e4 in pairs16:  # after CNOT_04 (0,4)
                    p_final = mul_pauli(p0123, prop[4][e4])
                    k = k0123 + nonid_mask[e4]
                    x,z = p_final
                    # Acceptance conditions:
                    # ancilla (qubit 4) must have x4==0 (i.e., I or Z)
                    anc_ok = (x[4]==0)
                    if not anc_ok:
                        continue
                    # data must commute with both sX and sZ
                    pdata = (x[:4], z[:4])
                    if not (commute(pdata, sX) and commute(pdata, sZ)):
                        continue
                    N_acc[k] += 1
                    # Good if pdata in S_target
                    if (tuple(pdata[0]), tuple(pdata[1])) in S_target:
                        N_good[k] += 1

    counter += 1

print('N_acc per k:', N_acc)
print('N_good per k:', N_good)
print('Total combos=', 16**5)
Tool #11
N_acc per k: [1, 7, 282, 4222, 31637, 94923]
N_good per k: [1, 7, 138, 1198, 7397, 24027]
Total combos= 1048576
Assistant #12
Tool Call (code to execute)
import sympy as sp
p=sp.symbols('p')
N_acc = [1,7,282,4222,31637,94923]
N_good= [1,7,138,1198,7397,24027]
Pacc = sum(sp.Integer(N_acc[k]) * (1-p)**(5-k) * (p/15)**k for k in range(6))
Pgood= sum(sp.Integer(N_good[k])*(1-p)**(5-k)*(p/15)**k for k in range(6))
F = sp.simplify(Pgood/Pacc)
print('Pacc:'); print(sp.expand(Pacc))
print('\nPgood:'); print(sp.expand(Pgood))
print('\nF logical simplified:'); print(sp.simplify(F))
print('\nSeries around 0:'); print(sp.series(F,p,0,4))
Tool #13
Pacc:
-262144*p**5/253125 + 253952*p**4/50625 - 32768*p**3/3375 + 704*p**2/75 - 68*p/15 + 1

Pgood:
-229376*p**5/253125 + 223232*p**4/50625 - 29312*p**3/3375 + 656*p**2/75 - 68*p/15 + 1

F logical simplified:
(229376*p**5 - 1116160*p**4 + 2198400*p**3 - 2214000*p**2 + 1147500*p - 253125)/(262144*p**5 - 1269760*p**4 + 2457600*p**3 - 2376000*p**2 + 1147500*p - 253125)

Series around 0:
1 - 16*p**2/25 - 704*p**3/375 + O(p**4)
Assistant #14
Tool Call (code to execute)
import sympy as sp
p=sp.symbols('p', real=True)
Pacc = -262144*p**5/253125 + 253952*p**4/50625 - 32768*p**3/3375 + 704*p**2/75 - 68*p/15 + 1
Pgood= -229376*p**5/253125 + 223232*p**4/50625 - 29312*p**3/3375 + 656*p**2/75 - 68*p/15 + 1
F = sp.simplify(Pgood/Pacc)
for val in [0, 1e-3, 1e-2, 0.05, 0.1]:
    print(val, float(F.subs(p,val)))
Tool #15
0 1.0
0.001 0.9999993581195542
0.01 0.9999340913140433
0.05 0.9981451484841417
0.1 0.9913903803885744
Assistant #16
Tool Call (code to execute)
import sympy as sp
p=sp.symbols('p')
Pacc = -262144*p**5/253125 + 253952*p**4/50625 - 32768*p**3/3375 + 704*p**2/75 - 68*p/15 + 1
print(sp.series(Pacc,p,0,4))
Tool #17
1 - 68*p/15 + 704*p**2/75 - 32768*p**3/3375 + O(p**4)
Assistant #18
  1. Step-by-Step Derivation
  • Target and code
  • The [[4,2,2]] code has stabilizers S = ⟨XXXX, ZZZZ⟩ and (one valid choice of) logicals X_A = X I X I, Z_A = Z Z I I, X_B = X X I I, Z_B = Z I Z I. The logical |00⟩AB state is stabilized by S together with Z_A and Z_B. Equivalently, the pure target state is the unique +1 eigenstate of {XXXX, ZZZZ, ZZII, ZIZI}. (ar5iv.labs.arxiv.org)
  • Reading the circuit right-to-left, H1 → CNOT12 → CNOT10 → CNOT23 prepares the 4-qubit GHZ state (|0000⟩ + |1111⟩)/√2 on data qubits 0–3 (a codeword stabilized by XXXX and ZZZZ). The final two gates CNOT34 and CNOT04 copy the Z-parity Z3⊕Z0 onto ancilla 4; for the ideal GHZ data, this parity is 0, so M4 deterministically yields 0. (CNOT-based parity extraction is standard; and H+CNOT prepares Bell/GHZ building blocks.) (en.wikipedia.org)

  • Noise model and Clifford/Pauli propagation

  • After each two-qubit gate we apply an independent 2-qubit depolarizing channel that, with probability p, applies one of the 15 non-identity two-qubit Pauli operators uniformly at random (probability p/15 each), and otherwise applies identity with probability 1−p. (qiskit.github.io)
  • The entire circuit is Clifford, so any Pauli error can be pushed forward through the remaining Cliffords to a single Pauli at the end of the circuit (Heisenberg picture). In particular, for CNOT(c→t) the Pauli propagation rules are Xc→XcXt, Zt→ZcZt, and the others follow from Y=iXZ. (en.wikipedia.org, rainij.github.io)

  • Acceptance (post-selection) conditions

  • “Post-select on all detectable errors in the code” means: keep runs only if the net data Pauli Edata at the end commutes with both code checks XXXX and ZZZZ (i.e., Edata lies in the normalizer of S). (arthurpesah.me)
  • “Ancilla measures 0”: after propagating all Pauli faults to the end, the ancilla outcome flips iff the final ancilla Pauli has an X- or Y-component (since we measure Z4). Thus we accept iff the final ancilla Pauli is I or Z. (rainij.github.io)

  • Logical fidelity conditioned on acceptance

  • For a pure stabilizer target |ψ⟩, ⟨ψ|ρ|ψ⟩ under a Pauli mixture equals the total probability that the net Pauli lies in the stabilizer group of |ψ⟩ (up to phase), because ρψ = 2^{-n}∑_{g∈Sψ} g. Here Sψ is generated by {XXXX, ZZZZ, ZZII, ZIZI}. Therefore, among accepted runs (code checks pass and ancilla=0), the run is “correct logical |00⟩AB” iff Edata ∈ ⟨XXXX, ZZZZ, ZZII, ZIZI⟩. (ar5iv.labs.arxiv.org)

  • Bookkeeping over all Pauli-fault patterns

  • There are five noisy two-qubit gates; each noise location contributes 16 possibilities (identity plus 15 non-identity Paulis on that pair). Using the symplectic (Pauli) representation and the propagation rules above, we exhaustively classify all 16^5 patterns by: 1) number k of non-identity errors, 2) whether the final ancilla Pauli is I/Z (accept) or X/Y (reject), 3) whether the final data Pauli commutes with XXXX and ZZZZ (accept), 4) and, among accepted, whether Edata ∈ ⟨XXXX, ZZZZ, ZZII, ZIZI⟩ (correct).
  • The resulting accepted/good counts by weight k are Nacc = [1, 7, 282, 4222, 31637, 94923], Ngood = [1, 7, 138, 1198, 7397, 24027].
  • With αk(p) = (1−p)^{5−k} (p/15)^k, we have Pacc(p) = ∑{k=0}^5 Nacc[k] αk(p), Pgood(p) = ∑{k=0}^5 Ngood[k] αk(p), and the conditional logical fidelity is Flogical(p) = Pgood(p)/Pacc(p).

  • Closed form

  • Expanding the sums, Pacc(p) = 1 − (68/15)p + (704/75)p^2 − (32768/3375)p^3 + (253952/50625)p^4 − (262144/253125)p^5, Pgood(p)= 1 − (68/15)p + (656/75)p^2 − (29312/3375)p^3 + (223232/50625)p^4 − (229376/253125)p^5, so
\[ F_{\rm logical}(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}. \]
  • Small-p expansion: Flogical(p) = 1 − (16/25)p^2 − (704/375)p^3 + O(p^4), i.e., all first-order faults are detected/removed by post-selection (as expected for a distance-2 flagged preparation).
  1. Mathematical Typesetting
  • All relevant transformations and probabilities are given above in LaTeX.
  1. Conventions and Units
  • p is the two-qubit depolarizing probability per CNOT; no physical units.
  1. Final Answer: \(F_{\rm logical}(p)=\dfrac{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} = 1-\frac{\frac{16}{25}p^2+\frac{704}{375}p^3+O(p^4)}{1-\frac{68}{15}p+\frac{704}{75}p^2-\cdots}.\)

References: - [[4,2,2]] code, stabilizers and logicals. (ar5iv.labs.arxiv.org) - Clifford gates map Paulis to Paulis. (en.wikipedia.org) - Pauli propagation through CNOT (Xc→XcXt, Zt→ZcZt). (rainij.github.io) - Two-qubit depolarizing channel uniformly over 4^n−1 non-identity Paulis. (qiskit.github.io) - Stabilizer-state projector ρ = 2^{-n}∑_{g∈S} g (fidelity criterion). (ar5iv.labs.arxiv.org)

User #19

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 #20
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