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, 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 = [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))
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_{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]
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: 16
operand: 2
1ExprTuple2
2Lambdaparameter: 153
body: 4
3ExprTuple153
4Conditionalvalue: 5
condition: 6
5Operationoperator: 16
operand: 9
6Operationoperator: 50
operands: 8
7ExprTuple9
8ExprTuple153, 10
9Lambdaparameter: 142
body: 11
10Operationoperator: 12
operand: 43
11Conditionalvalue: 14
condition: 15
12Literal
13ExprTuple43
14Operationoperator: 16
operand: 19
15Operationoperator: 31
operands: 18
16Literal
17ExprTuple19
18ExprTuple20, 21
19Lambdaparameter: 160
body: 23
20Operationoperator: 50
operands: 24
21Operationoperator: 48
operands: 25
22ExprTuple160
23Conditionalvalue: 26
condition: 27
24ExprTuple142, 28
25ExprTuple29, 155
26Operationoperator: 48
operands: 30
27Operationoperator: 31
operands: 32
28Operationoperator: 33
operands: 34
29Operationoperator: 35
operand: 142
30ExprTuple37, 155
31Literal
32ExprTuple38, 39, 40, 41
33Literal
34ExprTuple42, 43
35Literal
36ExprTuple142
37Operationoperator: 44
operand: 53
38Operationoperator: 50
operands: 46
39Operationoperator: 50
operands: 47
40Operationoperator: 48
operands: 49
41Operationoperator: 50
operands: 51
42Literal
43Operationoperator: 161
operands: 52
44Literal
45ExprTuple53
46ExprTuple160, 54
47ExprTuple154, 55
48Literal
49ExprTuple56, 57
50Literal
51ExprTuple160, 58
52ExprTuple163, 156
53Operationoperator: 59
operands: 60
54Literal
55Operationoperator: 137
operands: 61
56Operationoperator: 62
operands: 63
57Operationoperator: 64
operands: 65
58Operationoperator: 66
operands: 67
59Literal
60ExprTuple68, 69, 70, 71
61ExprTuple74, 72
62Literal
63ExprTuple153, 142
64Literal
65ExprTuple73, 142
66Literal
67ExprTuple74, 155
68ExprTuple75, 76
69ExprTuple77, 78
70ExprTuple79, 80
71ExprTuple81, 82
72Operationoperator: 151
operands: 83
73Operationoperator: 161
operands: 84
74Literal
75ExprRangelambda_map: 85
start_index: 155
end_index: 164
76ExprRangelambda_map: 86
start_index: 155
end_index: 156
77ExprRangelambda_map: 87
start_index: 155
end_index: 164
78ExprRangelambda_map: 87
start_index: 144
end_index: 145
79ExprRangelambda_map: 88
start_index: 155
end_index: 164
80ExprRangelambda_map: 89
start_index: 155
end_index: 156
81ExprRangelambda_map: 90
start_index: 155
end_index: 164
82ExprRangelambda_map: 91
start_index: 155
end_index: 156
83ExprTuple159, 92
84ExprTuple93, 94
85Lambdaparameter: 143
body: 95
86Lambdaparameter: 143
body: 96
87Lambdaparameter: 143
body: 97
88Lambdaparameter: 143
body: 98
89Lambdaparameter: 143
body: 99
90Lambdaparameter: 143
body: 100
91Lambdaparameter: 143
body: 102
92Operationoperator: 103
operand: 155
93Literal
94Operationoperator: 157
operands: 105
95Operationoperator: 129
operands: 106
96Operationoperator: 113
operands: 107
97Operationoperator: 113
operands: 108
98Operationoperator: 109
operands: 110
99Operationoperator: 130
operands: 111
100Operationoperator: 113
operands: 112
101ExprTuple143
102Operationoperator: 113
operands: 114
103Literal
104ExprTuple155
105ExprTuple163, 115, 116, 160
106NamedExprsstate: 117
107NamedExprselement: 118
targets: 126
108NamedExprselement: 119
targets: 120
109Literal
110NamedExprsbasis: 121
111NamedExprsoperation: 122
112NamedExprselement: 123
targets: 124
113Literal
114NamedExprselement: 125
targets: 126
115Literal
116Literal
117Operationoperator: 127
operand: 139
118Operationoperator: 129
operands: 136
119Operationoperator: 130
operands: 131
120Operationoperator: 137
operands: 132
121Literal
122Literal
123Operationoperator: 135
operands: 133
124Operationoperator: 137
operands: 134
125Operationoperator: 135
operands: 136
126Operationoperator: 137
operands: 138
127Literal
128ExprTuple139
129Literal
130Literal
131NamedExprsoperation: 140
part: 143
132ExprTuple155, 145
133NamedExprsstate: 141
part: 143
134ExprTuple155, 164
135Literal
136NamedExprsstate: 142
part: 143
137Literal
138ExprTuple144, 145
139Literal
140Operationoperator: 146
operands: 147
141Operationoperator: 148
operands: 149
142Variable
143Variable
144Operationoperator: 151
operands: 150
145Operationoperator: 151
operands: 152
146Literal
147ExprTuple153, 164
148Literal
149ExprTuple154, 164
150ExprTuple164, 155
151Literal
152ExprTuple164, 156
153Variable
154Operationoperator: 157
operands: 158
155Literal
156Variable
157Literal
158ExprTuple159, 160
159Operationoperator: 161
operands: 162
160Variable
161Literal
162ExprTuple163, 164
163Literal
164Variable