import proveit
theory = proveit.Theory() # the theorem's theory
from proveit import defaults
from proveit import a, b, f, g, l, m, n, x, X, Y, Omega
from proveit.logic import InSet
from proveit.numbers import Natural
from proveit.statistics import sample_space_via_bijections
from proveit.physics.quantum import var_ket_psi, Ket
from proveit.physics.quantum.circuits import (
born_rule_on_register, register_meas_sample_space, register_meas_bijection)
from proveit.physics.quantum.QPE import (
_t, _t_in_natural_pos, _Psi_ket, _Psi_ket_is_normalized_vec,
_alpha_m_def,
_Omega, _sample_space_def, _sample_space_bijection, _outcome_prob)
%proving _Omega_is_sample_space
sample_space_via_bijections
_outcome_prob
defaults.assumptions = _outcome_prob.conditions
_alpha_m_def
alpha_m_replacement = _alpha_m_def.instantiate().derive_reversed()
born_rule_on_register
Psi_meas_prob = born_rule_on_register.instantiate({m:_t, var_ket_psi:_Psi_ket, n:m},
replacements=[alpha_m_replacement])
Psi_meas_is_sample_space = register_meas_sample_space.instantiate({m:_t, var_ket_psi:_Psi_ket, n:m})
Psi_meas_bijection = register_meas_bijection.instantiate({m:_t, var_ket_psi:_Psi_ket, n:m}).with_wrapping_at()
_sample_space_bijection
domain = _sample_space_bijection.domain.domain
_sample_space_def
sample_space_via_bijections
Psi_meas_prob
impl = sample_space_via_bijections.instantiate(
{Omega:Psi_meas_is_sample_space.element, X:domain, Y:_Omega,
f:Psi_meas_bijection.element, g:_sample_space_bijection.element, x:m},
replacements=[Psi_meas_prob, _outcome_prob.instantiate()],
assumptions=[])
%qed