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

This is a package candidate release! Here you can preview how this package release will appear once published to the main package index (which can be accomplished via the 'maintain' link below). Please note that once a package has been published to the main package index it cannot be undone! Please consult the package uploading documentation for more information.

[maintain] [Publish]

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]

Properties

Versions 0.1.7.5, 0.2.1.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-02T04:14:49Z

Modules

[Index]

Downloads

Maintainer's Corner

Package maintainers

For package maintainers and hackage trustees


Readme for haquil-0.2.1.5

[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])