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, 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 = Lambda(U, Conditional(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), InSet(U, 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())
U \mapsto \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] \textrm{ if } U \in \textrm{U}\left(2^{s}\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: 151
body: 2
1ExprTuple151
2Conditionalvalue: 3
condition: 4
3Operationoperator: 14
operand: 7
4Operationoperator: 48
operands: 6
5ExprTuple7
6ExprTuple151, 8
7Lambdaparameter: 140
body: 9
8Operationoperator: 10
operand: 41
9Conditionalvalue: 12
condition: 13
10Literal
11ExprTuple41
12Operationoperator: 14
operand: 17
13Operationoperator: 29
operands: 16
14Literal
15ExprTuple17
16ExprTuple18, 19
17Lambdaparameter: 158
body: 21
18Operationoperator: 48
operands: 22
19Operationoperator: 46
operands: 23
20ExprTuple158
21Conditionalvalue: 24
condition: 25
22ExprTuple140, 26
23ExprTuple27, 153
24Operationoperator: 46
operands: 28
25Operationoperator: 29
operands: 30
26Operationoperator: 31
operands: 32
27Operationoperator: 33
operand: 140
28ExprTuple35, 153
29Literal
30ExprTuple36, 37, 38, 39
31Literal
32ExprTuple40, 41
33Literal
34ExprTuple140
35Operationoperator: 42
operand: 51
36Operationoperator: 48
operands: 44
37Operationoperator: 48
operands: 45
38Operationoperator: 46
operands: 47
39Operationoperator: 48
operands: 49
40Literal
41Operationoperator: 159
operands: 50
42Literal
43ExprTuple51
44ExprTuple158, 52
45ExprTuple152, 53
46Literal
47ExprTuple54, 55
48Literal
49ExprTuple158, 56
50ExprTuple161, 154
51Operationoperator: 57
operands: 58
52Literal
53Operationoperator: 135
operands: 59
54Operationoperator: 60
operands: 61
55Operationoperator: 62
operands: 63
56Operationoperator: 64
operands: 65
57Literal
58ExprTuple66, 67, 68, 69
59ExprTuple72, 70
60Literal
61ExprTuple151, 140
62Literal
63ExprTuple71, 140
64Literal
65ExprTuple72, 153
66ExprTuple73, 74
67ExprTuple75, 76
68ExprTuple77, 78
69ExprTuple79, 80
70Operationoperator: 149
operands: 81
71Operationoperator: 159
operands: 82
72Literal
73ExprRangelambda_map: 83
start_index: 153
end_index: 162
74ExprRangelambda_map: 84
start_index: 153
end_index: 154
75ExprRangelambda_map: 85
start_index: 153
end_index: 162
76ExprRangelambda_map: 85
start_index: 142
end_index: 143
77ExprRangelambda_map: 86
start_index: 153
end_index: 162
78ExprRangelambda_map: 87
start_index: 153
end_index: 154
79ExprRangelambda_map: 88
start_index: 153
end_index: 162
80ExprRangelambda_map: 89
start_index: 153
end_index: 154
81ExprTuple157, 90
82ExprTuple91, 92
83Lambdaparameter: 141
body: 93
84Lambdaparameter: 141
body: 94
85Lambdaparameter: 141
body: 95
86Lambdaparameter: 141
body: 96
87Lambdaparameter: 141
body: 97
88Lambdaparameter: 141
body: 98
89Lambdaparameter: 141
body: 100
90Operationoperator: 101
operand: 153
91Literal
92Operationoperator: 155
operands: 103
93Operationoperator: 127
operands: 104
94Operationoperator: 111
operands: 105
95Operationoperator: 111
operands: 106
96Operationoperator: 107
operands: 108
97Operationoperator: 128
operands: 109
98Operationoperator: 111
operands: 110
99ExprTuple141
100Operationoperator: 111
operands: 112
101Literal
102ExprTuple153
103ExprTuple161, 113, 114, 158
104NamedExprsstate: 115
105NamedExprselement: 116
targets: 124
106NamedExprselement: 117
targets: 118
107Literal
108NamedExprsbasis: 119
109NamedExprsoperation: 120
110NamedExprselement: 121
targets: 122
111Literal
112NamedExprselement: 123
targets: 124
113Literal
114Literal
115Operationoperator: 125
operand: 137
116Operationoperator: 127
operands: 134
117Operationoperator: 128
operands: 129
118Operationoperator: 135
operands: 130
119Literal
120Literal
121Operationoperator: 133
operands: 131
122Operationoperator: 135
operands: 132
123Operationoperator: 133
operands: 134
124Operationoperator: 135
operands: 136
125Literal
126ExprTuple137
127Literal
128Literal
129NamedExprsoperation: 138
part: 141
130ExprTuple153, 143
131NamedExprsstate: 139
part: 141
132ExprTuple153, 162
133Literal
134NamedExprsstate: 140
part: 141
135Literal
136ExprTuple142, 143
137Literal
138Operationoperator: 144
operands: 145
139Operationoperator: 146
operands: 147
140Variable
141Variable
142Operationoperator: 149
operands: 148
143Operationoperator: 149
operands: 150
144Literal
145ExprTuple151, 162
146Literal
147ExprTuple152, 162
148ExprTuple162, 153
149Literal
150ExprTuple162, 154
151Variable
152Operationoperator: 155
operands: 156
153Literal
154Variable
155Literal
156ExprTuple157, 158
157Operationoperator: 159
operands: 160
158Variable
159Literal
160ExprTuple161, 162
161Literal
162Variable