logo

Expression of type Conditional

from the theory of proveit.physics.quantum.QPE

In [1]:
import proveit
# Automation is not needed when building an expression:
proveit.defaults.automation = False # This will speed things up.
proveit.defaults.inline_pngs = False # Makes files smaller.
%load_expr # Load the stored expression as 'stored_expr'
# import Expression classes needed to build the expression
from proveit import Conditional, ExprRange, U, Variable, VertExprArray, s, t
from proveit.linear_algebra import MatrixMult, ScalarMult
from proveit.logic import And, Equals, Forall, InSet
from proveit.numbers import Add, Exp, Interval, IntervalCO, Mult, Real, e, i, one, pi, subtract, two, zero
from proveit.physics.quantum import I, NumKet, Z, ket_plus, normalized_var_ket_u, var_ket_u
from proveit.physics.quantum.QPE import QPE, phase, s_ket_domain, two_pow_t
from proveit.physics.quantum.circuits import Gate, Input, Measure, MultiQubitElem, Output, Qcircuit
from proveit.statistics import Prob
In [2]:
# build up the expression from sub-expressions
sub_expr1 = Variable("_a", latex_format = r"{_{-}a}")
sub_expr2 = Add(t, one)
sub_expr3 = Add(t, s)
sub_expr4 = Interval(sub_expr2, sub_expr3)
sub_expr5 = Mult(two_pow_t, phase)
sub_expr6 = MultiQubitElem(element = Gate(operation = QPE(U, t), part = sub_expr1), targets = Interval(one, sub_expr3))
expr = Conditional(Forall(instance_param_or_params = [phase], instance_expr = Equals(Prob(Qcircuit(vert_expr_array = VertExprArray([ExprRange(sub_expr1, Input(state = ket_plus), one, t), ExprRange(sub_expr1, MultiQubitElem(element = Input(state = var_ket_u, part = sub_expr1), targets = sub_expr4), one, s)], [ExprRange(sub_expr1, sub_expr6, one, t), ExprRange(sub_expr1, sub_expr6, sub_expr2, sub_expr3)], [ExprRange(sub_expr1, Measure(basis = Z), one, t), ExprRange(sub_expr1, Gate(operation = I).with_implicit_representation(), one, s)], [ExprRange(sub_expr1, MultiQubitElem(element = Output(state = NumKet(sub_expr5, t), part = sub_expr1), targets = Interval(one, t)), one, t), ExprRange(sub_expr1, MultiQubitElem(element = Output(state = var_ket_u, part = sub_expr1), targets = sub_expr4), one, s)]))), one), domain = Real, conditions = [InSet(sub_expr5, Interval(zero, subtract(two_pow_t, one))), Equals(MatrixMult(U, var_ket_u), ScalarMult(Exp(e, Mult(two, pi, i, phase)), var_ket_u)), InSet(phase, IntervalCO(zero, one))]), And(InSet(var_ket_u, s_ket_domain), normalized_var_ket_u))
expr:
In [3]:
# check that the built expression is the same as the stored expression
assert expr == stored_expr
assert expr._style_id == stored_expr._style_id
print("Passed sanity check: expr matches stored_expr")
Passed sanity check: expr matches stored_expr
In [4]:
# Show the LaTeX representation of the expression for convenience if you need it.
print(stored_expr.latex())
\left\{\forall_{\varphi \in \mathbb{R}~|~\left(2^{t} \cdot \varphi\right) \in \{0~\ldotp \ldotp~2^{t} - 1\}, \left(U \thinspace \lvert u \rangle\right) = \left(\mathsf{e}^{2 \cdot \pi \cdot \mathsf{i} \cdot \varphi} \cdot \lvert u \rangle\right), \varphi \in \left[0,1\right)}~\left(\textrm{Pr}\left(\begin{array}{c} \Qcircuit@C=1em @R=.7em{
\qin{\lvert + \rangle} & \multigate{4}{\textrm{QPE}\left(U, t\right)} & \meter & \multiqout{3}{\lvert 2^{t} \cdot \varphi \rangle_{t}} \\
\qin{\lvert + \rangle} & \ghost{\textrm{QPE}\left(U, t\right)} & \meter & \ghostqout{\lvert 2^{t} \cdot \varphi \rangle_{t}} \\
\qin{\begin{array}{c}:\\ \left(t - 3\right) \times \\:\end{array}} & \ghost{\textrm{QPE}\left(U, t\right)} & \measure{\begin{array}{c}:\\ \left(t - 3\right) \times \\:\end{array}} \qw & \ghostqout{\lvert 2^{t} \cdot \varphi \rangle_{t}} \\
\qin{\lvert + \rangle} & \ghost{\textrm{QPE}\left(U, t\right)} & \meter & \ghostqout{\lvert 2^{t} \cdot \varphi \rangle_{t}} \\
\qin{\lvert u \rangle} & \ghost{\textrm{QPE}\left(U, t\right)} & { /^{s} } \qw & \qout{\lvert u \rangle}
} \end{array}\right) = 1\right) \textrm{ if } \lvert u \rangle \in \mathbb{C}^{2^{s}} ,  \left \|\lvert u \rangle\right \| = 1\right..
In [5]:
stored_expr.style_options()
namedescriptiondefaultcurrent valuerelated methods
condition_delimiter'comma' or 'and'commacomma('with_comma_delimiter', 'with_conjunction_delimiter')
In [6]:
# display the expression information
stored_expr.expr_info()
 core typesub-expressionsexpression
0Conditionalvalue: 1
condition: 2
1Operationoperator: 3
operand: 6
2Operationoperator: 18
operands: 5
3Literal
4ExprTuple6
5ExprTuple7, 8
6Lambdaparameter: 147
body: 10
7Operationoperator: 37
operands: 11
8Operationoperator: 35
operands: 12
9ExprTuple147
10Conditionalvalue: 13
condition: 14
11ExprTuple129, 15
12ExprTuple16, 142
13Operationoperator: 35
operands: 17
14Operationoperator: 18
operands: 19
15Operationoperator: 20
operands: 21
16Operationoperator: 22
operand: 129
17ExprTuple24, 142
18Literal
19ExprTuple25, 26, 27, 28
20Literal
21ExprTuple29, 30
22Literal
23ExprTuple129
24Operationoperator: 31
operand: 40
25Operationoperator: 37
operands: 33
26Operationoperator: 37
operands: 34
27Operationoperator: 35
operands: 36
28Operationoperator: 37
operands: 38
29Literal
30Operationoperator: 148
operands: 39
31Literal
32ExprTuple40
33ExprTuple147, 41
34ExprTuple141, 42
35Literal
36ExprTuple43, 44
37Literal
38ExprTuple147, 45
39ExprTuple150, 143
40Operationoperator: 46
operands: 47
41Literal
42Operationoperator: 124
operands: 48
43Operationoperator: 49
operands: 50
44Operationoperator: 51
operands: 52
45Operationoperator: 53
operands: 54
46Literal
47ExprTuple55, 56, 57, 58
48ExprTuple61, 59
49Literal
50ExprTuple140, 129
51Literal
52ExprTuple60, 129
53Literal
54ExprTuple61, 142
55ExprTuple62, 63
56ExprTuple64, 65
57ExprTuple66, 67
58ExprTuple68, 69
59Operationoperator: 138
operands: 70
60Operationoperator: 148
operands: 71
61Literal
62ExprRangelambda_map: 72
start_index: 142
end_index: 151
63ExprRangelambda_map: 73
start_index: 142
end_index: 143
64ExprRangelambda_map: 74
start_index: 142
end_index: 151
65ExprRangelambda_map: 74
start_index: 131
end_index: 132
66ExprRangelambda_map: 75
start_index: 142
end_index: 151
67ExprRangelambda_map: 76
start_index: 142
end_index: 143
68ExprRangelambda_map: 77
start_index: 142
end_index: 151
69ExprRangelambda_map: 78
start_index: 142
end_index: 143
70ExprTuple146, 79
71ExprTuple80, 81
72Lambdaparameter: 130
body: 82
73Lambdaparameter: 130
body: 83
74Lambdaparameter: 130
body: 84
75Lambdaparameter: 130
body: 85
76Lambdaparameter: 130
body: 86
77Lambdaparameter: 130
body: 87
78Lambdaparameter: 130
body: 89
79Operationoperator: 90
operand: 142
80Literal
81Operationoperator: 144
operands: 92
82Operationoperator: 116
operands: 93
83Operationoperator: 100
operands: 94
84Operationoperator: 100
operands: 95
85Operationoperator: 96
operands: 97
86Operationoperator: 117
operands: 98
87Operationoperator: 100
operands: 99
88ExprTuple130
89Operationoperator: 100
operands: 101
90Literal
91ExprTuple142
92ExprTuple150, 102, 103, 147
93NamedExprsstate: 104
94NamedExprselement: 105
targets: 113
95NamedExprselement: 106
targets: 107
96Literal
97NamedExprsbasis: 108
98NamedExprsoperation: 109
99NamedExprselement: 110
targets: 111
100Literal
101NamedExprselement: 112
targets: 113
102Literal
103Literal
104Operationoperator: 114
operand: 126
105Operationoperator: 116
operands: 123
106Operationoperator: 117
operands: 118
107Operationoperator: 124
operands: 119
108Literal
109Literal
110Operationoperator: 122
operands: 120
111Operationoperator: 124
operands: 121
112Operationoperator: 122
operands: 123
113Operationoperator: 124
operands: 125
114Literal
115ExprTuple126
116Literal
117Literal
118NamedExprsoperation: 127
part: 130
119ExprTuple142, 132
120NamedExprsstate: 128
part: 130
121ExprTuple142, 151
122Literal
123NamedExprsstate: 129
part: 130
124Literal
125ExprTuple131, 132
126Literal
127Operationoperator: 133
operands: 134
128Operationoperator: 135
operands: 136
129Variable
130Variable
131Operationoperator: 138
operands: 137
132Operationoperator: 138
operands: 139
133Literal
134ExprTuple140, 151
135Literal
136ExprTuple141, 151
137ExprTuple151, 142
138Literal
139ExprTuple151, 143
140Variable
141Operationoperator: 144
operands: 145
142Literal
143Variable
144Literal
145ExprTuple146, 147
146Operationoperator: 148
operands: 149
147Variable
148Literal
149ExprTuple150, 151
150Literal
151Variable