logo

Expression of type ExprTuple

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, ExprTuple, Lambda, U, Variable, VertExprArray, eps, m, n, s, t
from proveit.linear_algebra import MatrixMult, ScalarMult, Unitary
from proveit.logic import And, Equals, Forall, InSet
from proveit.numbers import Add, Ceil, Exp, Interval, IntervalCO, LessEq, Log, ModAbs, Mult, NaturalPos, Neg, Real, e, frac, greater_eq, 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_s, two_pow_t
from proveit.physics.quantum.circuits import Gate, Input, Measure, MultiQubitElem, Output, Qcircuit
from proveit.statistics import ProbOfAll
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 = MultiQubitElem(element = Gate(operation = QPE(U, t), part = sub_expr1), targets = Interval(one, sub_expr3))
expr = ExprTuple(Lambda([s, n], Conditional(Forall(instance_param_or_params = [U, var_ket_u, phase], instance_expr = Forall(instance_param_or_params = [t], instance_expr = greater_eq(ProbOfAll(instance_param_or_params = [m], instance_element = 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_expr5, one, t), ExprRange(sub_expr1, sub_expr5, 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(m, 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)])), domain = Interval(zero, subtract(two_pow_t, one)), condition = LessEq(ModAbs(subtract(frac(m, two_pow_t), phase), one), Exp(two, Neg(n)))).with_wrapping(), subtract(one, eps)), domain = NaturalPos, condition = greater_eq(t, Add(n, Ceil(Log(two, Add(two, frac(one, Mult(two, eps)))))))).with_wrapping(), domains = [Unitary(two_pow_s), s_ket_domain, Real], conditions = [InSet(phase, IntervalCO(zero, one)), normalized_var_ket_u, Equals(MatrixMult(U, var_ket_u), ScalarMult(Exp(e, Mult(two, pi, i, phase)), var_ket_u))]).with_wrapping(), And(InSet(s, NaturalPos), InSet(n, NaturalPos), greater_eq(n, two)))))
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(\left(s, n\right) \mapsto \left\{\begin{array}{l}\forall_{U \in \textrm{U}\left(2^{s}\right), \lvert u \rangle \in \mathbb{C}^{2^{s}}, \varphi \in \mathbb{R}~|~\varphi \in \left[0,1\right), \left \|\lvert u \rangle\right \| = 1, \left(U \thinspace \lvert u \rangle\right) = \left(\mathsf{e}^{2 \cdot \pi \cdot \mathsf{i} \cdot \varphi} \cdot \lvert u \rangle\right)}~\\
\left[\begin{array}{l}\forall_{t \in \mathbb{N}^+~|~t \geq \left(n + \left\lceil \textrm{log}_2\left(2 + \frac{1}{2 \cdot \epsilon}\right)\right\rceil\right)}~\\
\left(\left[\begin{array}{l}\textrm{Prob}_{m \in \{0~\ldotp \ldotp~2^{t} - 1\}~|~\left|\frac{m}{2^{t}} - \varphi\right|_{\textup{mod}\thinspace 1} \leq 2^{-n}}~\\
\left(\begin{array}{c} \Qcircuit@C=1em @R=.7em{
\qin{\lvert + \rangle} & \multigate{4}{\textrm{QPE}\left(U, t\right)} & \meter & \multiqout{3}{\lvert m \rangle_{t}} \\
\qin{\lvert + \rangle} & \ghost{\textrm{QPE}\left(U, t\right)} & \meter & \ghostqout{\lvert m \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 m \rangle_{t}} \\
\qin{\lvert + \rangle} & \ghost{\textrm{QPE}\left(U, t\right)} & \meter & \ghostqout{\lvert m \rangle_{t}} \\
\qin{\lvert u \rangle} & \ghost{\textrm{QPE}\left(U, t\right)} & { /^{s} } \qw & \qout{\lvert u \rangle}
} \end{array}\right)\end{array}\right] \geq \left(1 - \epsilon\right)\right)\end{array}\right]\end{array} \textrm{ if } s \in \mathbb{N}^+ ,  n \in \mathbb{N}^+ ,  n \geq 2\right..\right)
In [5]:
stored_expr.style_options()
no style options
In [6]:
# display the expression information
stored_expr.expr_info()
 core typesub-expressionsexpression
0ExprTuple1
1Lambdaparameters: 2
body: 3
2ExprTuple214, 185
3Conditionalvalue: 4
condition: 5
4Operationoperator: 19
operand: 8
5Operationoperator: 93
operands: 7
6ExprTuple8
7ExprTuple9, 10, 11
8Lambdaparameters: 12
body: 13
9Operationoperator: 112
operands: 14
10Operationoperator: 112
operands: 15
11Operationoperator: 114
operands: 16
12ExprTuple211, 190, 209
13Conditionalvalue: 17
condition: 18
14ExprTuple214, 77
15ExprTuple185, 77
16ExprTuple217, 185
17Operationoperator: 19
operand: 22
18Operationoperator: 93
operands: 21
19Literal
20ExprTuple22
21ExprTuple23, 24, 25, 26, 27, 28
22Lambdaparameter: 218
body: 30
23Operationoperator: 112
operands: 31
24Operationoperator: 112
operands: 32
25Operationoperator: 112
operands: 33
26Operationoperator: 112
operands: 34
27Operationoperator: 36
operands: 35
28Operationoperator: 36
operands: 37
29ExprTuple218
30Conditionalvalue: 38
condition: 39
31ExprTuple211, 40
32ExprTuple190, 41
33ExprTuple209, 42
34ExprTuple209, 43
35ExprTuple44, 213
36Literal
37ExprTuple45, 46
38Operationoperator: 114
operands: 47
39Operationoperator: 93
operands: 48
40Operationoperator: 49
operand: 66
41Operationoperator: 51
operands: 52
42Literal
43Operationoperator: 53
operands: 54
44Operationoperator: 55
operand: 190
45Operationoperator: 57
operands: 58
46Operationoperator: 59
operands: 60
47ExprTuple61, 62
48ExprTuple63, 64
49Literal
50ExprTuple66
51Literal
52ExprTuple65, 66
53Literal
54ExprTuple151, 213
55Literal
56ExprTuple190
57Literal
58ExprTuple211, 190
59Literal
60ExprTuple67, 190
61Operationoperator: 206
operands: 68
62Operationoperator: 69
operand: 76
63Operationoperator: 112
operands: 71
64Operationoperator: 114
operands: 72
65Literal
66Operationoperator: 215
operands: 73
67Operationoperator: 215
operands: 74
68ExprTuple213, 75
69Literal
70ExprTuple76
71ExprTuple218, 77
72ExprTuple78, 218
73ExprTuple217, 214
74ExprTuple79, 80
75Operationoperator: 197
operand: 210
76Lambdaparameter: 212
body: 83
77Literal
78Operationoperator: 206
operands: 84
79Literal
80Operationoperator: 199
operands: 85
81ExprTuple210
82ExprTuple212
83Conditionalvalue: 86
condition: 87
84ExprTuple185, 88
85ExprTuple217, 89, 90, 209
86Operationoperator: 91
operands: 92
87Operationoperator: 93
operands: 94
88Operationoperator: 95
operand: 103
89Literal
90Literal
91Literal
92ExprTuple97, 98, 99, 100
93Literal
94ExprTuple101, 102
95Literal
96ExprTuple103
97ExprTuple104, 105
98ExprTuple106, 107
99ExprTuple108, 109
100ExprTuple110, 111
101Operationoperator: 112
operands: 113
102Operationoperator: 114
operands: 115
103Operationoperator: 116
operands: 117
104ExprRangelambda_map: 118
start_index: 213
end_index: 218
105ExprRangelambda_map: 119
start_index: 213
end_index: 214
106ExprRangelambda_map: 120
start_index: 213
end_index: 218
107ExprRangelambda_map: 120
start_index: 192
end_index: 193
108ExprRangelambda_map: 121
start_index: 213
end_index: 218
109ExprRangelambda_map: 122
start_index: 213
end_index: 214
110ExprRangelambda_map: 123
start_index: 213
end_index: 218
111ExprRangelambda_map: 124
start_index: 213
end_index: 214
112Literal
113ExprTuple212, 125
114Literal
115ExprTuple126, 127
116Literal
117ExprTuple217, 128
118Lambdaparameter: 191
body: 129
119Lambdaparameter: 191
body: 130
120Lambdaparameter: 191
body: 131
121Lambdaparameter: 191
body: 132
122Lambdaparameter: 191
body: 133
123Lambdaparameter: 191
body: 134
124Lambdaparameter: 191
body: 136
125Operationoperator: 180
operands: 137
126Operationoperator: 138
operands: 139
127Operationoperator: 215
operands: 140
128Operationoperator: 206
operands: 141
129Operationoperator: 172
operands: 142
130Operationoperator: 149
operands: 143
131Operationoperator: 149
operands: 144
132Operationoperator: 145
operands: 146
133Operationoperator: 173
operands: 147
134Operationoperator: 149
operands: 148
135ExprTuple191
136Operationoperator: 149
operands: 150
137ExprTuple151, 152
138Literal
139ExprTuple153, 213
140ExprTuple217, 154
141ExprTuple217, 155
142NamedExprsstate: 156
143NamedExprselement: 157
targets: 165
144NamedExprselement: 158
targets: 159
145Literal
146NamedExprsbasis: 160
147NamedExprsoperation: 161
148NamedExprselement: 162
targets: 163
149Literal
150NamedExprselement: 164
targets: 165
151Literal
152Operationoperator: 206
operands: 166
153Operationoperator: 206
operands: 167
154Operationoperator: 197
operand: 185
155Operationoperator: 195
operands: 169
156Operationoperator: 170
operand: 187
157Operationoperator: 172
operands: 179
158Operationoperator: 173
operands: 174
159Operationoperator: 180
operands: 175
160Literal
161Literal
162Operationoperator: 178
operands: 176
163Operationoperator: 180
operands: 177
164Operationoperator: 178
operands: 179
165Operationoperator: 180
operands: 181
166ExprTuple208, 182
167ExprTuple183, 184
168ExprTuple185
169ExprTuple213, 186
170Literal
171ExprTuple187
172Literal
173Literal
174NamedExprsoperation: 188
part: 191
175ExprTuple213, 193
176NamedExprsstate: 189
part: 191
177ExprTuple213, 218
178Literal
179NamedExprsstate: 190
part: 191
180Literal
181ExprTuple192, 193
182Operationoperator: 197
operand: 213
183Operationoperator: 195
operands: 196
184Operationoperator: 197
operand: 209
185Variable
186Operationoperator: 199
operands: 200
187Literal
188Operationoperator: 201
operands: 202
189Operationoperator: 203
operands: 204
190Variable
191Variable
192Operationoperator: 206
operands: 205
193Operationoperator: 206
operands: 207
194ExprTuple213
195Literal
196ExprTuple212, 208
197Literal
198ExprTuple209
199Literal
200ExprTuple217, 210
201Literal
202ExprTuple211, 218
203Literal
204ExprTuple212, 218
205ExprTuple218, 213
206Literal
207ExprTuple218, 214
208Operationoperator: 215
operands: 216
209Variable
210Variable
211Variable
212Variable
213Literal
214Variable
215Literal
216ExprTuple217, 218
217Literal
218Variable