logo

Expression of type Lambda

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, Lambda, U, Variable, VertExprArray, eps, m, n, s, t
from proveit.linear_algebra import MatrixMult, ScalarMult, Unitary
from proveit.logic import Equals, Forall, InSet
from proveit.numbers import Add, Ceil, Exp, Interval, IntervalCO, IntervalOC, 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 = Lambda(eps, Conditional(Forall(instance_param_or_params = [s, n], instance_expr = 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(), domain = NaturalPos, condition = greater_eq(n, two)).with_wrapping(), InSet(eps, IntervalOC(zero, one))))
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())
\epsilon \mapsto \left\{\begin{array}{l}\forall_{s, n \in \mathbb{N}^+~|~n \geq 2}~\\
\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}\right]\end{array} \textrm{ if } \epsilon \in \left(0,1\right]\right..
In [5]:
stored_expr.style_options()
no style options
In [6]:
# display the expression information
stored_expr.expr_info()
 core typesub-expressionsexpression
0Lambdaparameter: 217
body: 1
1Conditionalvalue: 2
condition: 3
2Operationoperator: 26
operand: 6
3Operationoperator: 119
operands: 5
4ExprTuple6
5ExprTuple217, 7
6Lambdaparameters: 8
body: 9
7Operationoperator: 10
operands: 61
8ExprTuple221, 192
9Conditionalvalue: 11
condition: 12
10Literal
11Operationoperator: 26
operand: 15
12Operationoperator: 100
operands: 14
13ExprTuple15
14ExprTuple16, 17, 18
15Lambdaparameters: 19
body: 20
16Operationoperator: 119
operands: 21
17Operationoperator: 119
operands: 22
18Operationoperator: 121
operands: 23
19ExprTuple218, 197, 216
20Conditionalvalue: 24
condition: 25
21ExprTuple221, 84
22ExprTuple192, 84
23ExprTuple224, 192
24Operationoperator: 26
operand: 29
25Operationoperator: 100
operands: 28
26Literal
27ExprTuple29
28ExprTuple30, 31, 32, 33, 34, 35
29Lambdaparameter: 225
body: 37
30Operationoperator: 119
operands: 38
31Operationoperator: 119
operands: 39
32Operationoperator: 119
operands: 40
33Operationoperator: 119
operands: 41
34Operationoperator: 43
operands: 42
35Operationoperator: 43
operands: 44
36ExprTuple225
37Conditionalvalue: 45
condition: 46
38ExprTuple218, 47
39ExprTuple197, 48
40ExprTuple216, 49
41ExprTuple216, 50
42ExprTuple51, 220
43Literal
44ExprTuple52, 53
45Operationoperator: 121
operands: 54
46Operationoperator: 100
operands: 55
47Operationoperator: 56
operand: 73
48Operationoperator: 58
operands: 59
49Literal
50Operationoperator: 60
operands: 61
51Operationoperator: 62
operand: 197
52Operationoperator: 64
operands: 65
53Operationoperator: 66
operands: 67
54ExprTuple68, 69
55ExprTuple70, 71
56Literal
57ExprTuple73
58Literal
59ExprTuple72, 73
60Literal
61ExprTuple158, 220
62Literal
63ExprTuple197
64Literal
65ExprTuple218, 197
66Literal
67ExprTuple74, 197
68Operationoperator: 213
operands: 75
69Operationoperator: 76
operand: 83
70Operationoperator: 119
operands: 78
71Operationoperator: 121
operands: 79
72Literal
73Operationoperator: 222
operands: 80
74Operationoperator: 222
operands: 81
75ExprTuple220, 82
76Literal
77ExprTuple83
78ExprTuple225, 84
79ExprTuple85, 225
80ExprTuple224, 221
81ExprTuple86, 87
82Operationoperator: 204
operand: 217
83Lambdaparameter: 219
body: 90
84Literal
85Operationoperator: 213
operands: 91
86Literal
87Operationoperator: 206
operands: 92
88ExprTuple217
89ExprTuple219
90Conditionalvalue: 93
condition: 94
91ExprTuple192, 95
92ExprTuple224, 96, 97, 216
93Operationoperator: 98
operands: 99
94Operationoperator: 100
operands: 101
95Operationoperator: 102
operand: 110
96Literal
97Literal
98Literal
99ExprTuple104, 105, 106, 107
100Literal
101ExprTuple108, 109
102Literal
103ExprTuple110
104ExprTuple111, 112
105ExprTuple113, 114
106ExprTuple115, 116
107ExprTuple117, 118
108Operationoperator: 119
operands: 120
109Operationoperator: 121
operands: 122
110Operationoperator: 123
operands: 124
111ExprRangelambda_map: 125
start_index: 220
end_index: 225
112ExprRangelambda_map: 126
start_index: 220
end_index: 221
113ExprRangelambda_map: 127
start_index: 220
end_index: 225
114ExprRangelambda_map: 127
start_index: 199
end_index: 200
115ExprRangelambda_map: 128
start_index: 220
end_index: 225
116ExprRangelambda_map: 129
start_index: 220
end_index: 221
117ExprRangelambda_map: 130
start_index: 220
end_index: 225
118ExprRangelambda_map: 131
start_index: 220
end_index: 221
119Literal
120ExprTuple219, 132
121Literal
122ExprTuple133, 134
123Literal
124ExprTuple224, 135
125Lambdaparameter: 198
body: 136
126Lambdaparameter: 198
body: 137
127Lambdaparameter: 198
body: 138
128Lambdaparameter: 198
body: 139
129Lambdaparameter: 198
body: 140
130Lambdaparameter: 198
body: 141
131Lambdaparameter: 198
body: 143
132Operationoperator: 187
operands: 144
133Operationoperator: 145
operands: 146
134Operationoperator: 222
operands: 147
135Operationoperator: 213
operands: 148
136Operationoperator: 179
operands: 149
137Operationoperator: 156
operands: 150
138Operationoperator: 156
operands: 151
139Operationoperator: 152
operands: 153
140Operationoperator: 180
operands: 154
141Operationoperator: 156
operands: 155
142ExprTuple198
143Operationoperator: 156
operands: 157
144ExprTuple158, 159
145Literal
146ExprTuple160, 220
147ExprTuple224, 161
148ExprTuple224, 162
149NamedExprsstate: 163
150NamedExprselement: 164
targets: 172
151NamedExprselement: 165
targets: 166
152Literal
153NamedExprsbasis: 167
154NamedExprsoperation: 168
155NamedExprselement: 169
targets: 170
156Literal
157NamedExprselement: 171
targets: 172
158Literal
159Operationoperator: 213
operands: 173
160Operationoperator: 213
operands: 174
161Operationoperator: 204
operand: 192
162Operationoperator: 202
operands: 176
163Operationoperator: 177
operand: 194
164Operationoperator: 179
operands: 186
165Operationoperator: 180
operands: 181
166Operationoperator: 187
operands: 182
167Literal
168Literal
169Operationoperator: 185
operands: 183
170Operationoperator: 187
operands: 184
171Operationoperator: 185
operands: 186
172Operationoperator: 187
operands: 188
173ExprTuple215, 189
174ExprTuple190, 191
175ExprTuple192
176ExprTuple220, 193
177Literal
178ExprTuple194
179Literal
180Literal
181NamedExprsoperation: 195
part: 198
182ExprTuple220, 200
183NamedExprsstate: 196
part: 198
184ExprTuple220, 225
185Literal
186NamedExprsstate: 197
part: 198
187Literal
188ExprTuple199, 200
189Operationoperator: 204
operand: 220
190Operationoperator: 202
operands: 203
191Operationoperator: 204
operand: 216
192Variable
193Operationoperator: 206
operands: 207
194Literal
195Operationoperator: 208
operands: 209
196Operationoperator: 210
operands: 211
197Variable
198Variable
199Operationoperator: 213
operands: 212
200Operationoperator: 213
operands: 214
201ExprTuple220
202Literal
203ExprTuple219, 215
204Literal
205ExprTuple216
206Literal
207ExprTuple224, 217
208Literal
209ExprTuple218, 225
210Literal
211ExprTuple219, 225
212ExprTuple225, 220
213Literal
214ExprTuple225, 221
215Operationoperator: 222
operands: 223
216Variable
217Variable
218Variable
219Variable
220Literal
221Variable
222Literal
223ExprTuple224, 225
224Literal
225Variable