logo

Expression of type Forall

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 = 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 = Forall(instance_param_or_params = [s, t], instance_expr = Forall(instance_param_or_params = [U], instance_expr = Forall(instance_param_or_params = [var_ket_u], instance_expr = 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))]), domain = s_ket_domain, condition = normalized_var_ket_u), domain = Unitary(two_pow_s)), 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())
\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]
In [5]:
stored_expr.style_options()
namedescriptiondefaultcurrent valuerelated methods
with_wrappingIf 'True', wrap the Expression after the parametersNoneNone/False('with_wrapping',)
condition_wrappingWrap 'before' or 'after' the condition (or None).NoneNone/False('with_wrap_after_condition', 'with_wrap_before_condition')
wrap_paramsIf 'True', wraps every two parameters AND wraps the Expression after the parametersNoneNone/False('with_params',)
justificationjustify to the 'left', 'center', or 'right' in the array cellscentercenter('with_justification',)
In [6]:
# display the expression information
stored_expr.expr_info()
 core typesub-expressionsexpression
0Operationoperator: 28
operand: 2
1ExprTuple2
2Lambdaparameters: 3
body: 4
3ExprTuple168, 176
4Conditionalvalue: 5
condition: 6
5Operationoperator: 28
operand: 9
6Operationoperator: 43
operands: 8
7ExprTuple9
8ExprTuple10, 11
9Lambdaparameter: 165
body: 13
10Operationoperator: 62
operands: 14
11Operationoperator: 62
operands: 15
12ExprTuple165
13Conditionalvalue: 16
condition: 17
14ExprTuple168, 18
15ExprTuple176, 18
16Operationoperator: 28
operand: 21
17Operationoperator: 62
operands: 20
18Literal
19ExprTuple21
20ExprTuple165, 22
21Lambdaparameter: 154
body: 23
22Operationoperator: 24
operand: 55
23Conditionalvalue: 26
condition: 27
24Literal
25ExprTuple55
26Operationoperator: 28
operand: 31
27Operationoperator: 43
operands: 30
28Literal
29ExprTuple31
30ExprTuple32, 33
31Lambdaparameter: 172
body: 35
32Operationoperator: 62
operands: 36
33Operationoperator: 60
operands: 37
34ExprTuple172
35Conditionalvalue: 38
condition: 39
36ExprTuple154, 40
37ExprTuple41, 167
38Operationoperator: 60
operands: 42
39Operationoperator: 43
operands: 44
40Operationoperator: 45
operands: 46
41Operationoperator: 47
operand: 154
42ExprTuple49, 167
43Literal
44ExprTuple50, 51, 52, 53
45Literal
46ExprTuple54, 55
47Literal
48ExprTuple154
49Operationoperator: 56
operand: 65
50Operationoperator: 62
operands: 58
51Operationoperator: 62
operands: 59
52Operationoperator: 60
operands: 61
53Operationoperator: 62
operands: 63
54Literal
55Operationoperator: 173
operands: 64
56Literal
57ExprTuple65
58ExprTuple172, 66
59ExprTuple166, 67
60Literal
61ExprTuple68, 69
62Literal
63ExprTuple172, 70
64ExprTuple175, 168
65Operationoperator: 71
operands: 72
66Literal
67Operationoperator: 149
operands: 73
68Operationoperator: 74
operands: 75
69Operationoperator: 76
operands: 77
70Operationoperator: 78
operands: 79
71Literal
72ExprTuple80, 81, 82, 83
73ExprTuple86, 84
74Literal
75ExprTuple165, 154
76Literal
77ExprTuple85, 154
78Literal
79ExprTuple86, 167
80ExprTuple87, 88
81ExprTuple89, 90
82ExprTuple91, 92
83ExprTuple93, 94
84Operationoperator: 163
operands: 95
85Operationoperator: 173
operands: 96
86Literal
87ExprRangelambda_map: 97
start_index: 167
end_index: 176
88ExprRangelambda_map: 98
start_index: 167
end_index: 168
89ExprRangelambda_map: 99
start_index: 167
end_index: 176
90ExprRangelambda_map: 99
start_index: 156
end_index: 157
91ExprRangelambda_map: 100
start_index: 167
end_index: 176
92ExprRangelambda_map: 101
start_index: 167
end_index: 168
93ExprRangelambda_map: 102
start_index: 167
end_index: 176
94ExprRangelambda_map: 103
start_index: 167
end_index: 168
95ExprTuple171, 104
96ExprTuple105, 106
97Lambdaparameter: 155
body: 107
98Lambdaparameter: 155
body: 108
99Lambdaparameter: 155
body: 109
100Lambdaparameter: 155
body: 110
101Lambdaparameter: 155
body: 111
102Lambdaparameter: 155
body: 112
103Lambdaparameter: 155
body: 114
104Operationoperator: 115
operand: 167
105Literal
106Operationoperator: 169
operands: 117
107Operationoperator: 141
operands: 118
108Operationoperator: 125
operands: 119
109Operationoperator: 125
operands: 120
110Operationoperator: 121
operands: 122
111Operationoperator: 142
operands: 123
112Operationoperator: 125
operands: 124
113ExprTuple155
114Operationoperator: 125
operands: 126
115Literal
116ExprTuple167
117ExprTuple175, 127, 128, 172
118NamedExprsstate: 129
119NamedExprselement: 130
targets: 138
120NamedExprselement: 131
targets: 132
121Literal
122NamedExprsbasis: 133
123NamedExprsoperation: 134
124NamedExprselement: 135
targets: 136
125Literal
126NamedExprselement: 137
targets: 138
127Literal
128Literal
129Operationoperator: 139
operand: 151
130Operationoperator: 141
operands: 148
131Operationoperator: 142
operands: 143
132Operationoperator: 149
operands: 144
133Literal
134Literal
135Operationoperator: 147
operands: 145
136Operationoperator: 149
operands: 146
137Operationoperator: 147
operands: 148
138Operationoperator: 149
operands: 150
139Literal
140ExprTuple151
141Literal
142Literal
143NamedExprsoperation: 152
part: 155
144ExprTuple167, 157
145NamedExprsstate: 153
part: 155
146ExprTuple167, 176
147Literal
148NamedExprsstate: 154
part: 155
149Literal
150ExprTuple156, 157
151Literal
152Operationoperator: 158
operands: 159
153Operationoperator: 160
operands: 161
154Variable
155Variable
156Operationoperator: 163
operands: 162
157Operationoperator: 163
operands: 164
158Literal
159ExprTuple165, 176
160Literal
161ExprTuple166, 176
162ExprTuple176, 167
163Literal
164ExprTuple176, 168
165Variable
166Operationoperator: 169
operands: 170
167Literal
168Variable
169Literal
170ExprTuple171, 172
171Operationoperator: 173
operands: 174
172Variable
173Literal
174ExprTuple175, 176
175Literal
176Variable