black-hole-engine / Quantinuum.qs
SNAPKITTYWEST's picture
push from SNAPKITTYWEST/black-hole-engine
98d5347 verified
Raw History Blame Contribute Delete
2.12 kB
//
// Copyright (c) 2026 BEL ESPRIT D ACCORD TRUST HOLDINGS INC
// All rights reserved.
// BlackHoleEngine/Quantinuum.qs
// Hardware-specific: Quantinuum H1/H2 (all-to-all, native ZZ)
namespace BlackHoleEngine.Quantinuum {
open Microsoft.Quantum.Intrinsic;
open Microsoft.Quantum.Canon;
open BlackHoleEngine.Primitives;
operation QuantinuumXX(q1 : Qubit, q2 : Qubit, theta : Double) : Unit is Adj + Ctl {
within {
H(q1); H(q2);
} apply {
Exp([PauliZ, PauliZ], theta, [q1, q2]);
}
}
operation QuantinuumHaydenPreskill(
qubits : Qubit[],
scrambleTime : Double,
couplings : Double[][],
fields : Double[]
) : Unit is Adj + Ctl {
let n = Length(qubits);
let dt = scrambleTime / 5.0;
let steps = 5;
for _ in 1..steps {
for i in 0..n-1 {
Rz(2.0 * fields[i] * dt, qubits[i]);
}
for layer in GetXXLayers(n, couplings) {
for (i, j) in layer {
let J = couplings[i][j];
if (AbsD(J) > 1e-10) {
QuantinuumXX(qubits[i], qubits[j], 2.0 * J * dt);
}
}
}
}
}
operation QuantinuumLindbladStep(
ancilla : Qubit,
qubits : Qubit[],
viol : ViolatingAssignment,
gamma_dt : Double
) : Unit {
let sqrt_gamma = Sqrt(gamma_dt);
let theta = 2.0 * Arcsin(sqrt_gamma);
Ry(theta, ancilla);
let (va, vb, vc) = viol;
if (va) { X(qubits[0]); }
if (vb) { X(qubits[1]); }
if (vc) { X(qubits[2]); }
// Quantinuum has high-fidelity CCZ
CCZ(ancilla, qubits[0], qubits[1]);
CCZ(ancilla, qubits[0], qubits[2]);
CCZ(ancilla, qubits[1], qubits[2]);
if (va) { X(qubits[0]); }
if (vb) { X(qubits[1]); }
if (vc) { X(qubits[2]); }
let outcome = M(ancilla);
Reset(ancilla);
}
}