hqcsim-0.1.0.0: src/Quantum/QDataTypes.hs
{-|
-Module : QDataTypes
-Description : Definitions of datatypes for quantum state and quantum gates.
-Copyright : (c) Mihai Sebastian Ardelean, 2024
-License : BSD3
-Maintainer : ardeleanasm@gmail.com
-Portability : POSIX
-}
module Quantum.QDataTypes
(
State
, Gate
) where
import qualified Numeric.LinearAlgebra as LA
-- |
-- The `State` type is an alias for a vector of complex numbers.
--
-- In the context of quantum computing, a `State` represents a quantum state
-- as a column vector where each element is a complex number. The length of
-- the vector is typically \(2^n\) for a system of `n` qubits.
--
-- For example, a `State` could be:
--
-- @
-- [1 :+ 0, 0 :+ 0, 0 :+ 0, 0 :+ 0] -- Represents |0⟩
-- @
type State = LA.Vector (LA.Complex Double)
-- |
-- The `Gate` type is an alias for a matrix of complex numbers.
--
-- In quantum computing, a `Gate` is a unitary matrix that represents a quantum operation
-- applied to qubits. The matrix elements are complex numbers.
--
-- The `Gate` type is used to describe quantum gates in algorithms. For example:
--
-- @
-- -- Represents a 2x2 Hadamard Gate
-- hGate :: Gate
-- hGate = (2LA.><2)
-- [1/sqrt 2,1/sqrt 2,1/sqrt 2,(-1)/sqrt 2] :: Gate
--
-- @
type Gate = LA.Matrix (LA.Complex Double)