Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Add docs tutorial section for predefined quantum objects #82

Merged
merged 4 commits into from
Sep 8, 2024
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
50 changes: 50 additions & 0 deletions docs/src/introduction.md
Original file line number Diff line number Diff line change
Expand Up @@ -171,6 +171,56 @@ Below, we state all of the supported linear algebra operations on quantum object
- exponential of an operator: [`exp`](@ref),
- vectorization of an operator: [`vec`](@ref).

## Predefined Quantum Objects

So far in this tutorial, we have considered arbitrary kets, bras, operators, and their corresponding operations. This package supports predefined quantum objects and operations in several formalisms, which are discussed in detail in other sections (see, for example, the [quantum harmonic oscillators](@ref Quantum-Harmonic-Oscillators) or [qubit basis](@ref Typical-Qubit-Bases) pages). To get a taste of what's available, let us consider a few symbolic examples. For a complete description, see the [full API page](@ref Full-API).

Quantum gates and their basis states can be represented symbolically:

```jldoctest
julia> CNOT # CNOT Gate
CNOT

julia> X, Y, Z, I # Pauli operators
(X, Y, Z, 𝕀)

julia> X1, X2 # Eigenstates of the Pauli X operator
(|X₁⟩, |X₂⟩)

julia> CPHASE * (Z1 ⊗ Z2) # Application of CPHASE gate on |01⟩
CPHASE|Z₁⟩|Z₂⟩
```

We also have symbolic representations of bosonic systems:

```jldoctest
julia> FockState(4) # Fock state with 4 excitation quanta
|4⟩

julia> Create, Destroy # creation and annihilation operators
(a†, a)

julia> DisplaceOp(im) # Displacement operator for single bosonic mode
D(im)

julia> N * vac # Application of number operator on vacuum state
n|0⟩
```

If we want to substitute a predefined quantum object into a general symbolic expression, we can use the [`substitute`](https://symbolics.juliasymbolics.org/v3.5/manual/expression_manipulation/#SymbolicUtils.substitute) command from [`Symbolics.jl`](https://github.com/JuliaSymbolics/Symbolics.jl):

```jldoctest
julia> using Symbolics

julia> @op A; @ket k;

julia> ex = 2*A + projector(k)
(2A+𝐏[|k⟩])

julia> substitute(ex, Dict([A => X, k => X1]))
(2X+𝐏[|X₁⟩])
```

## Simplifying Expressions

For predefined objects such as the Pauli operators [`X`](@ref), [`Y`](@ref), and [`Z`](@ref), additional simplification can be performed with the [`qsimplify`](@ref) function. Take the following example:
Expand Down
Loading