---
# System prepended metadata

title: 04 量子邏輯閘
tags: [Pennylane]

---

# 建立量子邏輯閘

在上一節，我們學了如何用 Pennylane 建立量子電路並執行的基本流程，這節我們將針對量子電路部分，說明各種 quantum gate 的語法，讓你可以用 Pennylane 建立複雜的 circuit。

還不熟悉 quantum gate 的讀者可以先看[量子計算（上）](https://www.entangletech.tw/lesson/basic-algorithm-08)系列文章

## Single qubit quantum gate
單 qubit quantum gate 的基本語法都是這樣的形式：

```python=+
qml.{gate}(wires = number) 
```

中間 {gate} 代表要放的 quantum gate，後面的 number 是純數字，代表你要把這個 quantum gate 放在哪個 qubit 上。以下介紹常用 quantum gate 的語法 

### I gate

```python=+
qml.Identity(wires = 0) # 對第一個 qubit 做 I gate 
```

<div style="text-align: center;">
    <img src="https://hackmd.io/_uploads/BJuEmY4hC.svg" 
         alt="I gate" width="40%"/>
    <br>
    <p>I gate 的符號
    </p>
</div>

### X gate

```python=+
qml.PauliX(wires = 0) # 對第一個 qubit 做 X gate 
```
<div style="text-align: center;">
    <img src="https://hackmd.io/_uploads/H1QEzVP2A.svg" 
         alt="X gate" width="40%"/>
    <br>
    <p>X gate 的符號
    </p>
</div>

### Y gate

```python=+
qml.PauliY(wires = 0) # 對第一個 qubit 做 Y gate 
```

<div style="text-align: center;">
    <img src="https://hackmd.io/_uploads/HJTj7YVnR.svg" 
         alt="Y gate" width="40%"/>
    <br>
    <p>Y gate 的符號
    </p>
</div>

### Z gate

```python=+
qml.PauliZ(wires = 0) # 對第一個 qubit 做 Z gate 
```

<div style="text-align: center;">
    <img src="https://hackmd.io/_uploads/B17lEK42R.svg" 
         alt="Z gate" width="40%"/>
    <br>
    <p>Z gate 的符號
    </p>
</div>

### H gate

```python=+
qml.Hadamard(wires = 0) # 對第一個 qubit 做 H gate
```

<div style="text-align: center;">
    <img src="https://hackmd.io/_uploads/SJXMVYVhR.svg" 
         alt="H gate" width="40%"/>
    <br>
    <p>H gate 的符號
    </p>
</div>

### S gate

```python=+
qml.S(wires = 0) # 對第一個 qubit 做 S gate
```

<div style="text-align: center;">
    <img src="https://hackmd.io/_uploads/rJtV4YEh0.svg" 
         alt="S gate" width="40%"/>
    <br>
    <p>S gate 的符號
    </p>
</div>

### T gate

```python=+
qml.T(wires = 0) # 對第一個 qubit 做 S gate
```

<div style="text-align: center;">
    <img src="https://hackmd.io/_uploads/SkT44KN3R.svg" 
         alt="T gate" width="40%"/>
    <br>
    <p>T gate 的符號
    </p>
</div>

## Single qubit rotation gate
以下是 RX, RY 與 RZ gate，可以自訂要旋轉的角度，語法通常是：

```python=+
qml.{gate}(phi = theta, wires = number) 
```

括號中第一個參數 phi 是欲旋轉的角度。

### RX gate

```python=+
qml.RX(phi = thata, wires=0) # 對第一個 qubit 做 RX gate，旋轉角度 theta
```

這邊要注意的是，旋轉角度 theta，在矩陣計算的時候，要記得 theta 要除以 2，常常寫程式會忽略這點。

\begin{split}
RX(\theta)=
\begin{bmatrix}
\cos{\frac{\theta}{2}} & -i\sin{\frac{\theta}{2}} \\
-i\sin{\frac{\theta}{2}} & \cos{\frac{\theta}{2}}
\end{bmatrix}
\end{split}

<div style="text-align: center;">
    <img src="https://hackmd.io/_uploads/SkJYjzvhR.svg" 
         alt="RX gate" width="40%"/>
    <br>
    <p>RX gate 的符號
    </p>
</div>

### RY gate

```python=+
qml.RY(phi = thata, wires=0) # 對第一個 qubit 做 RY gate，旋轉角度 theta
```

<div style="text-align: center;">
    <img src="https://hackmd.io/_uploads/BkwAiMv3R.svg" 
         alt="RY gate" width="40%"/>
    <br>
    <p>RY gate 的符號
    </p>
</div>

### RZ gate

```python=+
qml.RZ(phi = thata, wires=0) # 對第一個 qubit 做 RZ gate，旋轉角度 theta
```

<div style="text-align: center;">
    <img src="https://hackmd.io/_uploads/B1ZZ2fPh0.svg" 
         alt="RZ gate" width="40%"/>
    <br>
    <p>RZ gate 的符號
    </p>
</div>

## Two qubits quantum gate

語法通常如下：

```python=+
qml.{gate}(wires = [number,number ]) 
```

因為是牽涉兩個 qubits 的 quantum gate，wires 會是一個 list，第一個數字通常都是 control qubit，第二個 qubit 都是 target qubit。

### CNOT gate

```python=+
qml.CNOT(wires=[control,target]) 
```

<div style="text-align: center;">
    <img src="https://hackmd.io/_uploads/Sy6yX_u2C.svg" alt="CX gate" width="30%"/>
    <br>CNOT (CX) gate 的符號
    <p>
    </p>
</div>

### CY gate

```python=+
qml.CY(wires=[control,target]) 
```

### CZ gate

```python=+
qml.CZ(wires=[control,target]) 
```

<div style="text-align: center;">
    <img src="https://hackmd.io/_uploads/BJZl4OO2C.svg" alt="CZ gate" width="60%"/>
    <br>CZ gate 的符號
    <p>
    </p>
</div>

### SWAP

```python=+
qml.SWAP(wires=[target,target]) 
```

<div style="text-align: center;">
    <img src="https://hackmd.io/_uploads/Sy_PBu_nR.svg" alt="SWAP gate" width="40%"/>
    <br>SWAP gate 的符號
    <p>
    </p>
</div>

### Controlled RX gate

```python=+
qml.CRX(wires=[control,target]) 
```

其他 Controlled RY/RZ 也是類似的語法，CRY 和 CRZ。

## Multiple qubits quantum gate
### Toffoli gate

```python=+
qml.Toffoli(wires=[control, control, target]) 
```

<div style="text-align: center;">
    <img src="https://hackmd.io/_uploads/rJLc4__nC.svg" alt="CCNOT gate" width="25%"/>
    <br>Toffoli (CCNOT) gate 的符號
    <p>
    </p>
</div>


### Fredkin gate

```python=+
qml.CSWAP(wires=[control, target, target]) 
```

<div style="text-align: center;">
    <img src="https://hackmd.io/_uploads/B1L8Z1IYkg.svg" alt="CSWAP gate" width="25%"/>
    <br>Fredkin (CSWAP) gate 的符號
    <p>圖片有畫錯，待我們更新
    </p>
</div>