haquil: A Haskell implementation of the Quil instruction set for quantum computing.

[ language, library, mit ] [ Propose Tags ]

This Haskell library implements the Quil language for quantum computing, as specified in "A Practical Quantum Instruction Set Architecture" <https://arxiv.org/abs/1608.03355/>.


[Skip to Readme]

Downloads

Maintainer's Corner

Package maintainers

For package maintainers and hackage trustees

Candidates

Versions [RSS] 0.1.7.5, 0.2.1.5, 0.2.1.14
Change log ChangeLog.md
Dependencies base (<5), bv (>=0.4.1), data-binary-ieee754 (>=0.4.4), data-default (>=0.7.1), hTensor (>=0.9.1), MonadRandom (>=0.5.1), random (>=1.1), vector (>=0.12.0) [details]
License MIT
Copyright (c) 2017-18 Brian W Bush
Author Brian W Bush <code@functionally.io>
Maintainer Brian W Bush <code@functionally.io>
Category Language
Home page https://bitbucket.org/functionally/haquil
Bug tracker https://bwbush.atlassian.net/projects/HQUIL/issues/
Source repo head: git clone https://bitbucket.org/functionally/haquil
Uploaded by BrianBush at 2018-03-05T04:46:09Z
Distributions
Reverse Dependencies 1 direct, 0 indirect [details]
Downloads 1732 total (9 in the last 30 days)
Rating (no votes yet) [estimated by Bayesian average]
Your Rating
  • λ
  • λ
  • λ
Status Docs available [build log]
Last success reported on 2018-03-05 [all 1 reports]

Readme for haquil-0.2.1.14

[back to package description]

quil: An instruction set for quantum computing

This Haskell library implements the Quil language for quantum computing, as specified in "A Practical Quantum Instruction Set Architecture" <https://arxiv.org/abs/1608.03355/>, using the indexing conventions in <https://arxiv.org/abs/1711.02086/>.

Please report issues at <https://bwbush.atlassian.net/projects/HQUIL/issues/>.

Example

This example creates a wavefunction for the Bell state and then performs a measurement on its highest qubit.

> import Control.Monad.Random (evalRandIO)
> import Data.Qubit ((^^*), groundState, measure)
> import Data.Qubit.Gate (h, cnot)

> -- Construct the Bell state.
> let bell = [h 0, cnot 0 1] ^^* groundState 2
> bell
0.7071067811865475|00> + 0.7071067811865475|11> @ [1,0]

> -- Measure the Bell wavefunction.
> bell' <- evalRandIO $ measure [1] bell
> bell'
([(1,0)],1.0|00> @ [1,0])

> -- Measure it again.
> evalRandIO $ measure [1] bell'
([(1,0)],1.0|00> @ [1,0])

> -- Measure another Bell wavefunction.
> evalRandIO $ measure [1] bell
([(1,0)],1.0|00> @ [1,0])

> -- Measure another Bell wavefunction.
> evalRandIO $ measure [1] bell
([(1,1)],1.0|11> @ [1,0])