量子计算基础06-认识量子门(扩展多量子门)

基本量子门kata 基本量子门kata是Q#中为了让大家熟悉基本量子门的一系列的练习,它有以下几个主题:

  1. 基本的单量子门和多量子门
  2. Adjoint和操控
  3. 使用量子门去改变量子位的状态
这些示例是按难度递增的顺序进行的,较难的示例会用星号标出。
第一部分:单量子门 示例1.1状态翻转:|0?转变为 |1?,反之亦然 输入:
1.一个量子位状态,|ψ? = α|0? + β|1?
目标:
量子位的状态转变为α|1? + β|0?
operation StateFlip (q : Qubit) : Unit is Adj+Ctl { // The Pauli X gate will change the |0? state to the |1? state and vice versa. X(q); }

示例1.2修改基底:|0?转变为|+?, |1?转变为|??,反之亦然 输入:
1.一个量子位状态,|ψ? = α|0? + β|1?
目标:
按如下方式改变量子位的状态:
如果状态是|0?,则转变为|+?,即量子计算基础06-认识量子门(扩展多量子门)
文章图片

如果状态是|1?,则转变为|-?,即量子计算基础06-认识量子门(扩展多量子门)
文章图片

如果量子位处于叠加状态,根据对基础向量的影响改变其状态。
注意:|+? 和|??为单个量子位形成不同的基底,称之为X基底。|0? 和|1?称为Z基底。
operation BasisChange (q : Qubit) : Unit is Adj+Ctl { H(q); }

示例1.3符号翻转:|+?转变为|??,反之亦然 输入:
1.一个量子位状态,|ψ? = α|0? + β|1?
目标:
将量子状态转变为α|0? ? β|1?(翻转 |1?的符号)
operation SignFlip (q : Qubit) : Unit is Adj+Ctl { Z(q); }

示例1.4:振幅转变:|0?转变为cosα|0?+sinα|1? 输入:
【量子计算基础06-认识量子门(扩展多量子门)】1.类型为double的表示弧度的角度α
2.一个量子位状态,|ψ? = β|0? + γ|1?
目标:
按如下方式改变量子位的状态:
如果状态是|0?,则转变为cosα|0? + sinα|1?
如果状态是|1?,则转变为-cosα|0? + sinα|1?
如果量子位处于叠加状态,根据对基础向量的影响改变其状态。
operation AmplitudeChange (alpha : Double, q : Qubit) : Unit is Adj+Ctl { Ry(2 * alpha, q); }

示例1.5相位翻转 输入:
1.类型为double的表示弧度的角度α
2.一个量子位状态,|ψ? = β|0? + γ|1?
目标:
按如下方式改变量子位的状态:
如果状态是|0?,不转变状态
如果状态是|1?,则转变为量子计算基础06-认识量子门(扩展多量子门)
文章图片

如果量子位处于叠加状态,根据对基础向量的影响改变其状态: 量子计算基础06-认识量子门(扩展多量子门)
文章图片

operation PhaseChange (alpha : Double, q : Qubit) : Unit is Adj+Ctl { R1(alpha, q); }

示例1.7修改全局相位 输入:
1.一个量子?β|0??γ|1?.状态,|ψ? = β|0? + γ|1?
目标:
修改量子位状态为?β|0? ? γ|1?
注意:这个改变本身是不可观察的——你不能在一个独立的量子位上做实验来弄清楚它是否改变了全局相位。但是,可以使用一个可控的操作去观察它的全局相位,在以后katas复杂的任务中,会使用到这种方法。
分析:应用Z门后得到β|0? ? γ|1?,再应用X门得到β|1? ? γ|0?,再应用Z门得到?β|1? ? γ|0?,再应用X门得到?β|0? ? γ|1?
operation GlobalPhaseChange (q : Qubit) : Unit is Adj+Ctl { Z(q); X(q); Z(q); X(q); }

示例1.8Bell态改变-1 输入:
1.两个纠缠Bell态的量子位状态 量子计算基础06-认识量子门(扩展多量子门)
文章图片

目标:
改变两个量子位状态为 量子计算基础06-认识量子门(扩展多量子门)
文章图片

operation BellStateChange2 (qs : Qubit[1]) : Unit is Adj+Ctl { Z(qs[1]); }

示例1.9Bell态改变-2 输入:
1.两个纠缠Bell态的量子位状态 量子计算基础06-认识量子门(扩展多量子门)
文章图片

目标:
改变两个量子位状态为 量子计算基础06-认识量子门(扩展多量子门)
文章图片

operation BellStateChange2 (qs : Qubit[1]) : Unit is Adj+Ctl { X(qs[1]); }

示例1.10Bell态改变-3 输入:
1.两个纠缠Bell态的量子位状态 量子计算基础06-认识量子门(扩展多量子门)
文章图片

目标:
改变两个量子位状态为 量子计算基础06-认识量子门(扩展多量子门)
文章图片

operation BellStateChange3 (qs : Qubit[1]) : Unit is Adj+Ctl { X(qs[1]); Z(qs[1]); }

第二部分:多量子门 Q# 概念 在Q#中有介绍使用Adjoint和操控,可以查看资料:类型模型
演示2.1双量子门-1 输入:
1.两个未纠缠的量子位(储存在一个长度为2的数组中),第一个量子位态处于|ψ? = α|0? + β|1?,第二个量子位态为|0?,也可以写成双量子位态(α|0? + β|1?) ? |0? = α|00? + β|10?
目标:
改变双量子位态为α|00? + β|11?
注意:除非第一个量子位的状态为|0? 或 |1?,否则双量子位的状态不再能用两个量子位状态的张量积表示。从而量子位元就纠缠在一起了。
operation TwoQubitGate1 (qs : Qubit[1]) : Unit is Adj { Controlled X(qs[0], qs[1]); }

演示2.2双量子门-2 输入:
1.两个未纠缠的量子位(储存在一个长度为2的数组中): 量子计算基础06-认识量子门(扩展多量子门)
文章图片

目标:
改变双量子位态为 量子计算基础06-认识量子门(扩展多量子门)
文章图片

注意:虽然开始状态可以表示为单量子状态的一个张量积,但是得到的双量子位状态不能用这种方式表示。
operation TwoQubitGate2 (qs : Qubit[1]) : Unit is Adj { Controlled Z(qs[0], qs[1]); }

演示2.3双量子门-3 输入:
1.任意两量子位状态下的两个未纠缠的量子位(储存在一个长度为2的数组中): α|00? + β|01? + γ|10? + δ|11?
目标:
改变双量子位态为 α|00? + β|10? + γ|01? + δ|11?
operation TwoQubitGate3 (qs : Qubit[]) : Unit is Adj { SWAP(qs[0], qs[1]); }

演示2.4Toffoli门(三量子门,控控非门) 输入:
1.三个量子位状态下的三个为纠缠的量子位(储存在一个长度为3的数组中): α|000? + β|001? + γ|010? + δ|011? + ?|100? + ζ|101? + η|110? + θ|111?
目标:
改变双量子位态为 α|000? + β|001? + γ|010? + δ|011? + ?|100? + ζ|101? + η|111? + θ|110?
演示2.5Fredkin门(三量子门,三位受控互换门Controlled-SWAP) 输入:
1.三个量子位状态下的三个为纠缠的量子位(储存在一个长度为3的数组中): α|000? + β|001? + γ|010? + δ|011? + ?|100? + ζ|101? + η|110? + θ|111?
目标:
改变双量子位态为 α|000? + β|001? + γ|010? + δ|011? + ?|100? + ζ|110? + η|101? + θ|111?
operation FredkinGate (qs : Qubit[2]) : Unit is Adj { Controlled SWAP(qs[0], (qs[1], qs[2])); }

因为对Q#语法还不太熟悉,对量子门使用的语法可能存在差错。大家可以看对这些量子门的应用的原理,至于语法,等后期学习完Q#语言再来修改。

    推荐阅读