/// <summary> /// Ensures that measurement of given observable on given qubits will /// lead to result given by value /// </summary> public void ForceMeasure(IQArray <Pauli> observable, IQArray <Qubit> qubits, Result value) { Debug.Assert(observable != null); Debug.Assert(qubits != null); Debug.Assert(observable.Length == qubits.Length); Utils.PruneObservable(observable, qubits, out var observablePr, out var _); var constr = MeasurementConstraint.ForceMeasurement(observablePr, value); QubitConstraint.SetConstraint(QubitConstraints(qubits), constr); }
/// <summary> /// Implements the Q# standard library callable AssertProb /// </summary> public void AssertProb(IQArray <Pauli> observable, IQArray <Qubit> qubits, Result value, double probability) { Debug.Assert(observable != null); Debug.Assert(qubits != null); Debug.Assert(observable.Length == qubits.Length); Utils.PruneObservable(observable, qubits, out var observablePr, out var qubitsPr); Debug.Assert((probability >= 0.0) && (probability <= 1.0)); MeasurementConstraint constr = MeasurementConstraint.AssertMeasurement(observablePr, value, probability); QubitConstraint.SetConstraint(QubitConstraints(qubitsPr), constr); }