Я изучал QDK и наблюдаю за предоставленным выводом для следующей программы:
Программа: '' '
operation BitIsOne( qs : Qubit[] ): Unit is Adj+Ctl
{
Message( "Is One" );
X(qs[0]); // added in update
}
operation BitIsZero( qs: Qubit[] ): Unit is Adj+Ctl
{
Message( "Is Zero" );
}
operation RandomBehavior( qs: Qubit[] ) : Unit is Adj+Ctl
{
X( qs[0] );
Controlled BitIsZero( [qs[0]], Rest( qs ) );
X( qs[0] );
Controlled BitIsOne( [qs[0]], Rest( qs ) );
DumpMachine(""); // added in update
}
operation TestFunc3() : Unit is Adj+Ctl
{
using( qs = Qubit[3] )
{
RandomBehavior( qs[0..1] );
}
}
@EntryPoint()
operation Start2() : Unit {
Message(" Started Execution");
TestFunc3();
}
Вывод:
Started Execution
Is Zero
Is One
Я не понимаю, почему здесь напечатано Is One ? Входной кубит, который я думал, был 00, поэтому почему вторая управляемая операция выполнила функцию BitIsOne ?
Обновление для предоставления запрошенной информации, которая поддерживает объяснение в ответе (Код правки для получения информации и подтверждения включены объяснения)
Вывод DumpMachine. Изменил функцию BitIsOne, чтобы включить X (qs [0]). Это показывает, что квантовая операция выполнялась не в части else, а в классической функции
Изменил функцию BitIsOne , чтобы включить X (qs [0]). Это показывает, что квантовая операция не выполнялась в части else, но классическая функция «Сообщение» выполнялась.