packages feed

quipper-demos-0.9.0.0: Quipper/Demos/MultiControlledNot.hs

-- | Demonstrates Quipper's decomposition of multiply-controlled
-- not-gates into the Clifford+/T/ gate set.

import Quipper
import Quipper.Libraries.Decompose

multi_cnot :: [Qubit] -> Qubit -> Circ ()
multi_cnot controls target = do
  qnot_at target `controlled` controls

multi_cnot_decomposed :: [Qubit] -> Qubit -> Circ ()
multi_cnot_decomposed = decompose_generic Exact multi_cnot

main_n :: Int -> IO ()
main_n n = do
  putStrLn ("Gate counts for " ++ show n ++ " controls:")
  putStrLn ""
  print_generic GateCount multi_cnot_decomposed (replicate n qubit) qubit
  putStrLn ""
  print_generic Preview multi_cnot_decomposed (replicate n qubit) qubit
 
main :: IO ()
main = do
  main_n 0
  main_n 1
  main_n 2
  main_n 3
  main_n 4
  main_n 5
  main_n 6