quantum-computing - 关于 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”(身份)。
推荐阅读
- sphinx - Sphinx:sphinxql 中的 OR 运算符
- python - 套接字超时后提供了无效参数
- javascript - 1:1 错误解析错误:意外字符“�”
- java - 使用 Android 中的 uid 从 Firebase 获取用户节点?
- javascript - 在 Fabric js 中加载后,我们如何更改画布宽度高度
- d - 链接器错误编译 D 模板
- vba - VBA 中的应用程序定义错误
- android - 未找到用于认证路径的 Android Retrofit2 信任锚
- javascript - div 未显示在表单提交上
- python-3.x - 如何从 AWS Lambda 运行 Scrapy 蜘蛛?