关于QDK中受控操作中令人惊讶的行为的查询

Query regarding surprising Behavior in Controlled operations in 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函数?

更新以提供支持答案中解释的请求信息 (代码编辑以获取信息并确认包含解释)

已更改 BitIsOne 函数以包含 X(qs[0])。这表明else部分没有执行量子操作,但执行了经典函数“Message”。

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