logo

Expression of type ExprTuple

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