logo

Expression of type Equals

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, 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 = 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 = 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)
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())
\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}
In [5]:
stored_expr.style_options()
namedescriptiondefaultcurrent valuerelated methods
operation'infix' or 'function' style formattinginfixinfix
wrap_positionsposition(s) at which wrapping is to occur; '2 n - 1' is after the nth operand, '2 n' is after the nth operation.()(1)('with_wrapping_at', 'with_wrap_before_operator', 'with_wrap_after_operator', 'without_wrapping', 'wrap_positions')
justificationif any wrap positions are set, justify to the 'left', 'center', or 'right'centercenter('with_justification',)
directionDirection of the relation (normal or reversed)normalnormal('with_direction_reversed', 'is_reversed')
In [6]:
# display the expression information
stored_expr.expr_info()
 core typesub-expressionsexpression
0Operationoperator: 22
operands: 1
1ExprTuple2, 3
2Conditionalvalue: 5
condition: 4
3Conditionalvalue: 5
condition: 6
4Operationoperator: 9
operands: 7
5Operationoperator: 22
operands: 8
6Operationoperator: 9
operands: 10
7ExprTuple13, 14, 15, 11
8ExprTuple12, 126
9Literal
10ExprTuple13, 14, 15
11Operationoperator: 20
operands: 16
12Operationoperator: 17
operand: 25
13Operationoperator: 20
operands: 19
14Operationoperator: 20
operands: 21
15Operationoperator: 22
operands: 23
16ExprTuple131, 24
17Literal
18ExprTuple25
19ExprTuple131, 26
20Literal
21ExprTuple125, 27
22Literal
23ExprTuple28, 29
24Operationoperator: 30
operands: 31
25Operationoperator: 32
operands: 33
26Literal
27Operationoperator: 108
operands: 34
28Operationoperator: 35
operands: 36
29Operationoperator: 37
operands: 38
30Literal
31ExprTuple43, 126
32Literal
33ExprTuple39, 40, 41, 42
34ExprTuple43, 44
35Literal
36ExprTuple124, 113
37Literal
38ExprTuple45, 113
39ExprTuple46, 47
40ExprTuple48, 49
41ExprTuple50, 51
42ExprTuple52, 53
43Literal
44Operationoperator: 122
operands: 54
45Operationoperator: 132
operands: 55
46ExprRangelambda_map: 56
start_index: 126
end_index: 135
47ExprRangelambda_map: 57
start_index: 126
end_index: 127
48ExprRangelambda_map: 58
start_index: 126
end_index: 135
49ExprRangelambda_map: 58
start_index: 115
end_index: 116
50ExprRangelambda_map: 59
start_index: 126
end_index: 135
51ExprRangelambda_map: 60
start_index: 126
end_index: 127
52ExprRangelambda_map: 61
start_index: 126
end_index: 135
53ExprRangelambda_map: 62
start_index: 126
end_index: 127
54ExprTuple130, 63
55ExprTuple64, 65
56Lambdaparameter: 114
body: 66
57Lambdaparameter: 114
body: 67
58Lambdaparameter: 114
body: 68
59Lambdaparameter: 114
body: 69
60Lambdaparameter: 114
body: 70
61Lambdaparameter: 114
body: 71
62Lambdaparameter: 114
body: 73
63Operationoperator: 74
operand: 126
64Literal
65Operationoperator: 128
operands: 76
66Operationoperator: 100
operands: 77
67Operationoperator: 84
operands: 78
68Operationoperator: 84
operands: 79
69Operationoperator: 80
operands: 81
70Operationoperator: 101
operands: 82
71Operationoperator: 84
operands: 83
72ExprTuple114
73Operationoperator: 84
operands: 85
74Literal
75ExprTuple126
76ExprTuple134, 86, 87, 131
77NamedExprsstate: 88
78NamedExprselement: 89
targets: 97
79NamedExprselement: 90
targets: 91
80Literal
81NamedExprsbasis: 92
82NamedExprsoperation: 93
83NamedExprselement: 94
targets: 95
84Literal
85NamedExprselement: 96
targets: 97
86Literal
87Literal
88Operationoperator: 98
operand: 110
89Operationoperator: 100
operands: 107
90Operationoperator: 101
operands: 102
91Operationoperator: 108
operands: 103
92Literal
93Literal
94Operationoperator: 106
operands: 104
95Operationoperator: 108
operands: 105
96Operationoperator: 106
operands: 107
97Operationoperator: 108
operands: 109
98Literal
99ExprTuple110
100Literal
101Literal
102NamedExprsoperation: 111
part: 114
103ExprTuple126, 116
104NamedExprsstate: 112
part: 114
105ExprTuple126, 135
106Literal
107NamedExprsstate: 113
part: 114
108Literal
109ExprTuple115, 116
110Literal
111Operationoperator: 117
operands: 118
112Operationoperator: 119
operands: 120
113Variable
114Variable
115Operationoperator: 122
operands: 121
116Operationoperator: 122
operands: 123
117Literal
118ExprTuple124, 135
119Literal
120ExprTuple125, 135
121ExprTuple135, 126
122Literal
123ExprTuple135, 127
124Variable
125Operationoperator: 128
operands: 129
126Literal
127Variable
128Literal
129ExprTuple130, 131
130Operationoperator: 132
operands: 133
131Variable
132Literal
133ExprTuple134, 135
134Literal
135Variable