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, 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 = ExprTuple(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))).with_wrapping_at(1), 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(\left(s, t, U, \lvert u \rangle, \varphi\right) \mapsto \left\{\begin{array}{c} \begin{array}{l} \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.. \end{array} \end{array} \textrm{ if } t \in \mathbb{N}^+\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
1Lambdaparameters: 2
body: 3
2ExprTuple134, 142, 131, 120, 138
3Conditionalvalue: 4
condition: 5
4Operationoperator: 29
operands: 6
5Operationoperator: 27
operands: 7
6ExprTuple8, 9
7ExprTuple142, 10
8Conditionalvalue: 12
condition: 11
9Conditionalvalue: 12
condition: 13
10Literal
11Operationoperator: 16
operands: 14
12Operationoperator: 29
operands: 15
13Operationoperator: 16
operands: 17
14ExprTuple20, 21, 22, 18
15ExprTuple19, 133
16Literal
17ExprTuple20, 21, 22
18Operationoperator: 27
operands: 23
19Operationoperator: 24
operand: 32
20Operationoperator: 27
operands: 26
21Operationoperator: 27
operands: 28
22Operationoperator: 29
operands: 30
23ExprTuple138, 31
24Literal
25ExprTuple32
26ExprTuple138, 33
27Literal
28ExprTuple132, 34
29Literal
30ExprTuple35, 36
31Operationoperator: 37
operands: 38
32Operationoperator: 39
operands: 40
33Literal
34Operationoperator: 115
operands: 41
35Operationoperator: 42
operands: 43
36Operationoperator: 44
operands: 45
37Literal
38ExprTuple50, 133
39Literal
40ExprTuple46, 47, 48, 49
41ExprTuple50, 51
42Literal
43ExprTuple131, 120
44Literal
45ExprTuple52, 120
46ExprTuple53, 54
47ExprTuple55, 56
48ExprTuple57, 58
49ExprTuple59, 60
50Literal
51Operationoperator: 129
operands: 61
52Operationoperator: 139
operands: 62
53ExprRangelambda_map: 63
start_index: 133
end_index: 142
54ExprRangelambda_map: 64
start_index: 133
end_index: 134
55ExprRangelambda_map: 65
start_index: 133
end_index: 142
56ExprRangelambda_map: 65
start_index: 122
end_index: 123
57ExprRangelambda_map: 66
start_index: 133
end_index: 142
58ExprRangelambda_map: 67
start_index: 133
end_index: 134
59ExprRangelambda_map: 68
start_index: 133
end_index: 142
60ExprRangelambda_map: 69
start_index: 133
end_index: 134
61ExprTuple137, 70
62ExprTuple71, 72
63Lambdaparameter: 121
body: 73
64Lambdaparameter: 121
body: 74
65Lambdaparameter: 121
body: 75
66Lambdaparameter: 121
body: 76
67Lambdaparameter: 121
body: 77
68Lambdaparameter: 121
body: 78
69Lambdaparameter: 121
body: 80
70Operationoperator: 81
operand: 133
71Literal
72Operationoperator: 135
operands: 83
73Operationoperator: 107
operands: 84
74Operationoperator: 91
operands: 85
75Operationoperator: 91
operands: 86
76Operationoperator: 87
operands: 88
77Operationoperator: 108
operands: 89
78Operationoperator: 91
operands: 90
79ExprTuple121
80Operationoperator: 91
operands: 92
81Literal
82ExprTuple133
83ExprTuple141, 93, 94, 138
84NamedExprsstate: 95
85NamedExprselement: 96
targets: 104
86NamedExprselement: 97
targets: 98
87Literal
88NamedExprsbasis: 99
89NamedExprsoperation: 100
90NamedExprselement: 101
targets: 102
91Literal
92NamedExprselement: 103
targets: 104
93Literal
94Literal
95Operationoperator: 105
operand: 117
96Operationoperator: 107
operands: 114
97Operationoperator: 108
operands: 109
98Operationoperator: 115
operands: 110
99Literal
100Literal
101Operationoperator: 113
operands: 111
102Operationoperator: 115
operands: 112
103Operationoperator: 113
operands: 114
104Operationoperator: 115
operands: 116
105Literal
106ExprTuple117
107Literal
108Literal
109NamedExprsoperation: 118
part: 121
110ExprTuple133, 123
111NamedExprsstate: 119
part: 121
112ExprTuple133, 142
113Literal
114NamedExprsstate: 120
part: 121
115Literal
116ExprTuple122, 123
117Literal
118Operationoperator: 124
operands: 125
119Operationoperator: 126
operands: 127
120Variable
121Variable
122Operationoperator: 129
operands: 128
123Operationoperator: 129
operands: 130
124Literal
125ExprTuple131, 142
126Literal
127ExprTuple132, 142
128ExprTuple142, 133
129Literal
130ExprTuple142, 134
131Variable
132Operationoperator: 135
operands: 136
133Literal
134Variable
135Literal
136ExprTuple137, 138
137Operationoperator: 139
operands: 140
138Variable
139Literal
140ExprTuple141, 142
141Literal
142Variable