#!/usr/bin/env python # coding: utf-8 # # Meyer Penny Game # In[1]: import pyquil.quil as pq from pyquil import api from pyquil.gates import I, H, X import numpy as np # In[2]: def meyer_penny_program(): """ Returns the program to simulate the Meyer-Penny Game The full description is available in ../docs/source/exercises.rst :return: pyQuil Program """ prog = pq.Program() ro = prog.declare("ro", memory_size=2) picard_register = ro[1] answer_register = ro[0] then_branch = pq.Program(X(0)) else_branch = pq.Program(I(0)) # Prepare Qubits in Heads state or superposition, respectively prog.inst(X(0), H(1)) # Q puts the coin into a superposition prog.inst(H(0)) # Picard makes a decision and acts accordingly prog.measure(1, picard_register) prog.if_then(picard_register, then_branch, else_branch) # Q undoes his superposition operation prog.inst(H(0)) # The outcome is recorded into the answer register prog.measure(0, answer_register) return prog # In[3]: n_trials = 10 qvm = api.QVMConnection() outcomes = np.asarray(qvm.run(meyer_penny_program(), [0, 1], trials=n_trials)) print("Number of games: {}".format(n_trials)) print("Q's winning average: {}".format(outcomes[:, 0].mean())) print("Picard's flip-decision average: {}".format(outcomes[:, 1].mean()))