{-| -Module : Qubits -Description : Definitions of |0>, |1>, |+> and |-> -Copyright : (c) Mihai Sebastian Ardelean, 2018 -License : BSD3 -Maintainer : ardeleanasm@gmail.com -Portability : POSIX -} module Quantum.Qubits ( Qubit(..) , qZero , qOne , qPlus , qMinus ) where import Numeric.LinearAlgebra hiding ( (|>) ) import Quantum.Gates newtype Qubit= Qubit { qubitState::Matrix C -- ^ Qubit constructor accepts a parameter of type Matrix C } deriving (Eq,Show) {-| - qZero function is used to represent a 0 qubit |0> >>>qZero (2><1) [ 1.0 :+ 0.0 , 0.0 :+ 0.0 ] -} qZero::Qubit qZero=Qubit ((2><1)[1,0]::Matrix C) {-| - qOne function is used to represent a 1 qubit |1> >>>qOne (2><1) [ 0.0 :+ 0.0 , 1.0 :+ 0.0 ] -} qOne::Qubit qOne=Qubit ((2><1) [0,1]::Matrix C) {-| - qPlus function is used to represent a + qubit |+> - |+> can be also obtained by applying Hadamard Gate on |0>. See 'Utils.apply' for more information >>>qPlus (2><1) [ 0.7071067811865475 :+ 0.0 , 0.7071067811865475 :+ 0.0 ] -} qPlus::Qubit qPlus=Qubit ((2><1) [1/sqrt 2, 1/sqrt 2]::Matrix C) {-| - qMinus function is used to represent a - qubit |-> - Same as |+>, qubit |-> can be obtained by applying Hadamard Gate on |1>. See 'Utils.apply' for more information >>>qMinus (2><1) [ 0.7071067811865475 :+ 0.0 , (-0.7071067811865475) :+ (-0.0) ] -} qMinus::Qubit qMinus=Qubit ((2><1) [1/sqrt 2, -1/sqrt 2]::Matrix C)