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, 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 = 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(phase, Conditional(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), And(InSet(phase, Real), 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)))))
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())
\varphi \mapsto \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..
In [5]:
stored_expr.style_options()
no style options
In [6]:
# display the expression information
stored_expr.expr_info()
 core typesub-expressionsexpression
0Lambdaparameter: 128
body: 2
1ExprTuple128
2Conditionalvalue: 3
condition: 4
3Operationoperator: 17
operands: 5
4Operationoperator: 6
operands: 7
5ExprTuple8, 123
6Literal
7ExprTuple9, 10, 11, 12
8Operationoperator: 13
operand: 21
9Operationoperator: 19
operands: 15
10Operationoperator: 19
operands: 16
11Operationoperator: 17
operands: 18
12Operationoperator: 19
operands: 20
13Literal
14ExprTuple21
15ExprTuple128, 22
16ExprTuple122, 23
17Literal
18ExprTuple24, 25
19Literal
20ExprTuple128, 26
21Operationoperator: 27
operands: 28
22Literal
23Operationoperator: 105
operands: 29
24Operationoperator: 30
operands: 31
25Operationoperator: 32
operands: 33
26Operationoperator: 34
operands: 35
27Literal
28ExprTuple36, 37, 38, 39
29ExprTuple42, 40
30Literal
31ExprTuple121, 110
32Literal
33ExprTuple41, 110
34Literal
35ExprTuple42, 123
36ExprTuple43, 44
37ExprTuple45, 46
38ExprTuple47, 48
39ExprTuple49, 50
40Operationoperator: 119
operands: 51
41Operationoperator: 129
operands: 52
42Literal
43ExprRangelambda_map: 53
start_index: 123
end_index: 132
44ExprRangelambda_map: 54
start_index: 123
end_index: 124
45ExprRangelambda_map: 55
start_index: 123
end_index: 132
46ExprRangelambda_map: 55
start_index: 112
end_index: 113
47ExprRangelambda_map: 56
start_index: 123
end_index: 132
48ExprRangelambda_map: 57
start_index: 123
end_index: 124
49ExprRangelambda_map: 58
start_index: 123
end_index: 132
50ExprRangelambda_map: 59
start_index: 123
end_index: 124
51ExprTuple127, 60
52ExprTuple61, 62
53Lambdaparameter: 111
body: 63
54Lambdaparameter: 111
body: 64
55Lambdaparameter: 111
body: 65
56Lambdaparameter: 111
body: 66
57Lambdaparameter: 111
body: 67
58Lambdaparameter: 111
body: 68
59Lambdaparameter: 111
body: 70
60Operationoperator: 71
operand: 123
61Literal
62Operationoperator: 125
operands: 73
63Operationoperator: 97
operands: 74
64Operationoperator: 81
operands: 75
65Operationoperator: 81
operands: 76
66Operationoperator: 77
operands: 78
67Operationoperator: 98
operands: 79
68Operationoperator: 81
operands: 80
69ExprTuple111
70Operationoperator: 81
operands: 82
71Literal
72ExprTuple123
73ExprTuple131, 83, 84, 128
74NamedExprsstate: 85
75NamedExprselement: 86
targets: 94
76NamedExprselement: 87
targets: 88
77Literal
78NamedExprsbasis: 89
79NamedExprsoperation: 90
80NamedExprselement: 91
targets: 92
81Literal
82NamedExprselement: 93
targets: 94
83Literal
84Literal
85Operationoperator: 95
operand: 107
86Operationoperator: 97
operands: 104
87Operationoperator: 98
operands: 99
88Operationoperator: 105
operands: 100
89Literal
90Literal
91Operationoperator: 103
operands: 101
92Operationoperator: 105
operands: 102
93Operationoperator: 103
operands: 104
94Operationoperator: 105
operands: 106
95Literal
96ExprTuple107
97Literal
98Literal
99NamedExprsoperation: 108
part: 111
100ExprTuple123, 113
101NamedExprsstate: 109
part: 111
102ExprTuple123, 132
103Literal
104NamedExprsstate: 110
part: 111
105Literal
106ExprTuple112, 113
107Literal
108Operationoperator: 114
operands: 115
109Operationoperator: 116
operands: 117
110Variable
111Variable
112Operationoperator: 119
operands: 118
113Operationoperator: 119
operands: 120
114Literal
115ExprTuple121, 132
116Literal
117ExprTuple122, 132
118ExprTuple132, 123
119Literal
120ExprTuple132, 124
121Variable
122Operationoperator: 125
operands: 126
123Literal
124Variable
125Literal
126ExprTuple127, 128
127Operationoperator: 129
operands: 130
128Variable
129Literal
130ExprTuple131, 132
131Literal
132Variable