logo

Expression of type Equals

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 ExprRange, U, Variable, VertExprArray, s, t
from proveit.linear_algebra import MatrixMult, ScalarMult, Unitary
from proveit.logic import Equals, Forall, InSet
from proveit.numbers import Add, Exp, Interval, IntervalCO, Mult, NaturalPos, 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_s, 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 = [s, t]
sub_expr3 = [U]
sub_expr4 = [var_ket_u]
sub_expr5 = [phase]
sub_expr6 = Add(t, one)
sub_expr7 = Add(t, s)
sub_expr8 = Interval(sub_expr6, sub_expr7)
sub_expr9 = Mult(two_pow_t, phase)
sub_expr10 = Unitary(two_pow_s)
sub_expr11 = MultiQubitElem(element = Gate(operation = QPE(U, t), part = sub_expr1), targets = Interval(one, sub_expr7))
sub_expr12 = InSet(sub_expr9, Interval(zero, subtract(two_pow_t, one)))
sub_expr13 = Equals(MatrixMult(U, var_ket_u), ScalarMult(Exp(e, Mult(two, pi, i, phase)), var_ket_u))
sub_expr14 = 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_expr8), one, s)], [ExprRange(sub_expr1, sub_expr11, one, t), ExprRange(sub_expr1, sub_expr11, sub_expr6, sub_expr7)], [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_expr9, 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_expr8), one, s)]))), one)
expr = Equals(Forall(instance_param_or_params = sub_expr2, instance_expr = Forall(instance_param_or_params = sub_expr3, instance_expr = Forall(instance_param_or_params = sub_expr4, instance_expr = Forall(instance_param_or_params = sub_expr5, instance_expr = sub_expr14, domain = Real, conditions = [sub_expr12, sub_expr13, InSet(phase, IntervalCO(zero, one))]), domain = s_ket_domain, condition = normalized_var_ket_u), domain = sub_expr10), domain = NaturalPos), Forall(instance_param_or_params = sub_expr2, instance_expr = Forall(instance_param_or_params = sub_expr3, instance_expr = Forall(instance_param_or_params = sub_expr4, instance_expr = Forall(instance_param_or_params = sub_expr5, instance_expr = sub_expr14, domain = Real, conditions = [sub_expr12, sub_expr13]), domain = s_ket_domain, condition = normalized_var_ket_u), domain = sub_expr10), domain = NaturalPos))
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_{s, t \in \mathbb{N}^+}~\left[\forall_{U \in \textrm{U}\left(2^{s}\right)}~\left[\forall_{\lvert u \rangle \in \mathbb{C}^{2^{s}}~|~\left \|\lvert u \rangle\right \| = 1}~\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)\right]\right]\right]\right] = \left[\forall_{s, t \in \mathbb{N}^+}~\left[\forall_{U \in \textrm{U}\left(2^{s}\right)}~\left[\forall_{\lvert u \rangle \in \mathbb{C}^{2^{s}}~|~\left \|\lvert u \rangle\right \| = 1}~\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)}~\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)\right]\right]\right]\right]
In [5]:
stored_expr.style_options()
namedescriptiondefaultcurrent valuerelated methods
operation'infix' or 'function' style formattinginfixinfix
wrap_positionsposition(s) at which wrapping is to occur; '2 n - 1' is after the nth operand, '2 n' is after the nth operation.()()('with_wrapping_at', 'with_wrap_before_operator', 'with_wrap_after_operator', 'without_wrapping', 'wrap_positions')
justificationif any wrap positions are set, justify to the 'left', 'center', or 'right'centercenter('with_justification',)
directionDirection of the relation (normal or reversed)normalnormal('with_direction_reversed', 'is_reversed')
In [6]:
# display the expression information
stored_expr.expr_info()
 core typesub-expressionsexpression
0Operationoperator: 82
operands: 1
1ExprTuple2, 3
2Operationoperator: 44
operand: 6
3Operationoperator: 44
operand: 7
4ExprTuple6
5ExprTuple7
6Lambdaparameters: 9
body: 8
7Lambdaparameters: 9
body: 10
8Conditionalvalue: 11
condition: 13
9ExprTuple188, 196
10Conditionalvalue: 12
condition: 13
11Operationoperator: 44
operand: 17
12Operationoperator: 44
operand: 18
13Operationoperator: 63
operands: 16
14ExprTuple17
15ExprTuple18
16ExprTuple19, 20
17Lambdaparameter: 185
body: 21
18Lambdaparameter: 185
body: 23
19Operationoperator: 80
operands: 24
20Operationoperator: 80
operands: 25
21Conditionalvalue: 26
condition: 28
22ExprTuple185
23Conditionalvalue: 27
condition: 28
24ExprTuple188, 29
25ExprTuple196, 29
26Operationoperator: 44
operand: 33
27Operationoperator: 44
operand: 34
28Operationoperator: 80
operands: 32
29Literal
30ExprTuple33
31ExprTuple34
32ExprTuple185, 35
33Lambdaparameter: 174
body: 36
34Lambdaparameter: 174
body: 37
35Operationoperator: 38
operand: 75
36Conditionalvalue: 40
condition: 42
37Conditionalvalue: 41
condition: 42
38Literal
39ExprTuple75
40Operationoperator: 44
operand: 47
41Operationoperator: 44
operand: 48
42Operationoperator: 63
operands: 46
43ExprTuple47
44Literal
45ExprTuple48
46ExprTuple49, 50
47Lambdaparameter: 192
body: 51
48Lambdaparameter: 192
body: 53
49Operationoperator: 80
operands: 54
50Operationoperator: 82
operands: 55
51Conditionalvalue: 57
condition: 56
52ExprTuple192
53Conditionalvalue: 57
condition: 58
54ExprTuple174, 59
55ExprTuple60, 187
56Operationoperator: 63
operands: 61
57Operationoperator: 82
operands: 62
58Operationoperator: 63
operands: 64
59Operationoperator: 65
operands: 66
60Operationoperator: 67
operand: 174
61ExprTuple71, 72, 73, 69
62ExprTuple70, 187
63Literal
64ExprTuple71, 72, 73
65Literal
66ExprTuple74, 75
67Literal
68ExprTuple174
69Operationoperator: 80
operands: 76
70Operationoperator: 77
operand: 86
71Operationoperator: 80
operands: 79
72Operationoperator: 80
operands: 81
73Operationoperator: 82
operands: 83
74Literal
75Operationoperator: 193
operands: 84
76ExprTuple192, 85
77Literal
78ExprTuple86
79ExprTuple192, 87
80Literal
81ExprTuple186, 88
82Literal
83ExprTuple89, 90
84ExprTuple195, 188
85Operationoperator: 91
operands: 92
86Operationoperator: 93
operands: 94
87Literal
88Operationoperator: 169
operands: 95
89Operationoperator: 96
operands: 97
90Operationoperator: 98
operands: 99
91Literal
92ExprTuple104, 187
93Literal
94ExprTuple100, 101, 102, 103
95ExprTuple104, 105
96Literal
97ExprTuple185, 174
98Literal
99ExprTuple106, 174
100ExprTuple107, 108
101ExprTuple109, 110
102ExprTuple111, 112
103ExprTuple113, 114
104Literal
105Operationoperator: 183
operands: 115
106Operationoperator: 193
operands: 116
107ExprRangelambda_map: 117
start_index: 187
end_index: 196
108ExprRangelambda_map: 118
start_index: 187
end_index: 188
109ExprRangelambda_map: 119
start_index: 187
end_index: 196
110ExprRangelambda_map: 119
start_index: 176
end_index: 177
111ExprRangelambda_map: 120
start_index: 187
end_index: 196
112ExprRangelambda_map: 121
start_index: 187
end_index: 188
113ExprRangelambda_map: 122
start_index: 187
end_index: 196
114ExprRangelambda_map: 123
start_index: 187
end_index: 188
115ExprTuple191, 124
116ExprTuple125, 126
117Lambdaparameter: 175
body: 127
118Lambdaparameter: 175
body: 128
119Lambdaparameter: 175
body: 129
120Lambdaparameter: 175
body: 130
121Lambdaparameter: 175
body: 131
122Lambdaparameter: 175
body: 132
123Lambdaparameter: 175
body: 134
124Operationoperator: 135
operand: 187
125Literal
126Operationoperator: 189
operands: 137
127Operationoperator: 161
operands: 138
128Operationoperator: 145
operands: 139
129Operationoperator: 145
operands: 140
130Operationoperator: 141
operands: 142
131Operationoperator: 162
operands: 143
132Operationoperator: 145
operands: 144
133ExprTuple175
134Operationoperator: 145
operands: 146
135Literal
136ExprTuple187
137ExprTuple195, 147, 148, 192
138NamedExprsstate: 149
139NamedExprselement: 150
targets: 158
140NamedExprselement: 151
targets: 152
141Literal
142NamedExprsbasis: 153
143NamedExprsoperation: 154
144NamedExprselement: 155
targets: 156
145Literal
146NamedExprselement: 157
targets: 158
147Literal
148Literal
149Operationoperator: 159
operand: 171
150Operationoperator: 161
operands: 168
151Operationoperator: 162
operands: 163
152Operationoperator: 169
operands: 164
153Literal
154Literal
155Operationoperator: 167
operands: 165
156Operationoperator: 169
operands: 166
157Operationoperator: 167
operands: 168
158Operationoperator: 169
operands: 170
159Literal
160ExprTuple171
161Literal
162Literal
163NamedExprsoperation: 172
part: 175
164ExprTuple187, 177
165NamedExprsstate: 173
part: 175
166ExprTuple187, 196
167Literal
168NamedExprsstate: 174
part: 175
169Literal
170ExprTuple176, 177
171Literal
172Operationoperator: 178
operands: 179
173Operationoperator: 180
operands: 181
174Variable
175Variable
176Operationoperator: 183
operands: 182
177Operationoperator: 183
operands: 184
178Literal
179ExprTuple185, 196
180Literal
181ExprTuple186, 196
182ExprTuple196, 187
183Literal
184ExprTuple196, 188
185Variable
186Operationoperator: 189
operands: 190
187Literal
188Variable
189Literal
190ExprTuple191, 192
191Operationoperator: 193
operands: 194
192Variable
193Literal
194ExprTuple195, 196
195Literal
196Variable