Если я правильно понимаю ваше описание, оценщик ресурсов, поставляемый с Quantum Development Kit, точно сообщил, что ваша операция не использовала кубиты или квантовые инструкции.Это связано с тем, что кубиты, используемые операцией Q #, - это в точности те, которые используются явно с операторами using
или borrowing
, плюс те, которые используются любыми другими вызываемыми операциями.
Например, если вы пишете операцию телепортации в Q #, вы можете сделать следующее:
operation PrepareEntangledPair(left : Qubit, right : Qubit) : Unit {
body (...) {
H(left);
CNOT(left, right);
}
adjoint auto;
}
operation ApplyCorrection(here : Qubit, msg : Qubit, there : Qubit) : Unit {
if (M(msg) == One) { Z(there); }
if (M(here) == One) { X(there); }
}
operation TeleportMessage(msg : Qubit, there : Qubit) : Unit {
using (here = Qubit()) {
// Create some entanglement that we can use to send our message.
PrepareEntangledPair(here, there);
// Move our message into the entangled pair by using a Bell
// measurement.
Adjoint PrepareEntangledPair(msg, here);
// Measure out the entanglement.
ApplyCorrection(here, msg, there);
// Reset our "here" qubit before releasing it.
Reset(here);
}
}
operation TeleportClassicalFlag() : Unit {
using ((msg, there) = (Qubit(), Qubit())) {
X(msg);
TeleportMessage(msg, there);
ApplyToEach(Reset, [msg, there]);
}
}
Запуск оценщика ресурсов в этих отчетах об использовании трех кубитов (два непосредственно TeleportClassicalFlag
и один TeleportMessage
, который был вызван TeleportClassicalFlag
):
![enter image description here](https://i.stack.imgur.com/bjHnL.png)
Классическая логика, напротив,всегда остается классическим.Это разработано, чтобы облегчить смешивание классической и квантовой логики, например, при реализации алгоритмов итеративной оценки фазы.В приведенном выше примере операторы if
и операторы ==
, используемые в ApplyCorrection
, используются для описания классических частей алгоритма телепортации.