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
from proveit.logic import And, Equals, 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, var_ket_u
from proveit.physics.quantum.QPE import QPE, phase, 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 = InSet(phase, Real)
sub_expr5 = Interval(sub_expr2, sub_expr3)
sub_expr6 = Mult(two_pow_t, phase)
sub_expr7 = MultiQubitElem(element = Gate(operation = QPE(U, t), part = sub_expr1), targets = Interval(one, sub_expr3))
sub_expr8 = InSet(sub_expr6, Interval(zero, subtract(two_pow_t, one)))
sub_expr9 = Equals(MatrixMult(U, var_ket_u), ScalarMult(Exp(e, Mult(two, pi, i, phase)), var_ket_u))
sub_expr10 = 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_expr5), one, s)], [ExprRange(sub_expr1, sub_expr7, one, t), ExprRange(sub_expr1, sub_expr7, 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_expr6, 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_expr5), one, s)]))), one)
expr = Lambda([s, t, U, var_ket_u, phase], Conditional(Equals(Conditional(sub_expr10, And(sub_expr4, sub_expr8, sub_expr9, InSet(phase, IntervalCO(zero, one)))), Conditional(sub_expr10, And(sub_expr4, sub_expr8, sub_expr9))), InSet(t, 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(s, t, U, \lvert u \rangle, \varphi\right) \mapsto \left\{\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 \textrm{ if } \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)\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 \textrm{ if } \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)\right.. \textrm{ if } t \in \mathbb{N}^+\right..
In [5]:
stored_expr.style_options()
no style options
In [6]:
# display the expression information
stored_expr.expr_info()
 core typesub-expressionsexpression
0Lambdaparameters: 1
body: 2
1ExprTuple133, 141, 130, 119, 137
2Conditionalvalue: 3
condition: 4
3Operationoperator: 28
operands: 5
4Operationoperator: 26
operands: 6
5ExprTuple7, 8
6ExprTuple141, 9
7Conditionalvalue: 11
condition: 10
8Conditionalvalue: 11
condition: 12
9Literal
10Operationoperator: 15
operands: 13
11Operationoperator: 28
operands: 14
12Operationoperator: 15
operands: 16
13ExprTuple19, 20, 21, 17
14ExprTuple18, 132
15Literal
16ExprTuple19, 20, 21
17Operationoperator: 26
operands: 22
18Operationoperator: 23
operand: 31
19Operationoperator: 26
operands: 25
20Operationoperator: 26
operands: 27
21Operationoperator: 28
operands: 29
22ExprTuple137, 30
23Literal
24ExprTuple31
25ExprTuple137, 32
26Literal
27ExprTuple131, 33
28Literal
29ExprTuple34, 35
30Operationoperator: 36
operands: 37
31Operationoperator: 38
operands: 39
32Literal
33Operationoperator: 114
operands: 40
34Operationoperator: 41
operands: 42
35Operationoperator: 43
operands: 44
36Literal
37ExprTuple49, 132
38Literal
39ExprTuple45, 46, 47, 48
40ExprTuple49, 50
41Literal
42ExprTuple130, 119
43Literal
44ExprTuple51, 119
45ExprTuple52, 53
46ExprTuple54, 55
47ExprTuple56, 57
48ExprTuple58, 59
49Literal
50Operationoperator: 128
operands: 60
51Operationoperator: 138
operands: 61
52ExprRangelambda_map: 62
start_index: 132
end_index: 141
53ExprRangelambda_map: 63
start_index: 132
end_index: 133
54ExprRangelambda_map: 64
start_index: 132
end_index: 141
55ExprRangelambda_map: 64
start_index: 121
end_index: 122
56ExprRangelambda_map: 65
start_index: 132
end_index: 141
57ExprRangelambda_map: 66
start_index: 132
end_index: 133
58ExprRangelambda_map: 67
start_index: 132
end_index: 141
59ExprRangelambda_map: 68
start_index: 132
end_index: 133
60ExprTuple136, 69
61ExprTuple70, 71
62Lambdaparameter: 120
body: 72
63Lambdaparameter: 120
body: 73
64Lambdaparameter: 120
body: 74
65Lambdaparameter: 120
body: 75
66Lambdaparameter: 120
body: 76
67Lambdaparameter: 120
body: 77
68Lambdaparameter: 120
body: 79
69Operationoperator: 80
operand: 132
70Literal
71Operationoperator: 134
operands: 82
72Operationoperator: 106
operands: 83
73Operationoperator: 90
operands: 84
74Operationoperator: 90
operands: 85
75Operationoperator: 86
operands: 87
76Operationoperator: 107
operands: 88
77Operationoperator: 90
operands: 89
78ExprTuple120
79Operationoperator: 90
operands: 91
80Literal
81ExprTuple132
82ExprTuple140, 92, 93, 137
83NamedExprsstate: 94
84NamedExprselement: 95
targets: 103
85NamedExprselement: 96
targets: 97
86Literal
87NamedExprsbasis: 98
88NamedExprsoperation: 99
89NamedExprselement: 100
targets: 101
90Literal
91NamedExprselement: 102
targets: 103
92Literal
93Literal
94Operationoperator: 104
operand: 116
95Operationoperator: 106
operands: 113
96Operationoperator: 107
operands: 108
97Operationoperator: 114
operands: 109
98Literal
99Literal
100Operationoperator: 112
operands: 110
101Operationoperator: 114
operands: 111
102Operationoperator: 112
operands: 113
103Operationoperator: 114
operands: 115
104Literal
105ExprTuple116
106Literal
107Literal
108NamedExprsoperation: 117
part: 120
109ExprTuple132, 122
110NamedExprsstate: 118
part: 120
111ExprTuple132, 141
112Literal
113NamedExprsstate: 119
part: 120
114Literal
115ExprTuple121, 122
116Literal
117Operationoperator: 123
operands: 124
118Operationoperator: 125
operands: 126
119Variable
120Variable
121Operationoperator: 128
operands: 127
122Operationoperator: 128
operands: 129
123Literal
124ExprTuple130, 141
125Literal
126ExprTuple131, 141
127ExprTuple141, 132
128Literal
129ExprTuple141, 133
130Variable
131Operationoperator: 134
operands: 135
132Literal
133Variable
134Literal
135ExprTuple136, 137
136Operationoperator: 138
operands: 139
137Variable
138Literal
139ExprTuple140, 141
140Literal
141Variable