首页 > 解决方案 > 关于 QDK 中受控操作中令人惊讶的行为的查询

问题描述

我一直在学习 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 部分执行,但经典函数“Message”确实执行了。

标签: quantum-computing

解决方案


最后尝试测量量子比特并分享结果。应该是 00,不管打印了什么。量子中的“控制”不像经典的 IF 语句,因为“THEN”部分和“ELSE”部分都被“执行”。非量子“消息”语句在“ELSE”部分中“执行”,即使在量子术语中“ELSE”部分是“No-Op”(身份)。


推荐阅读