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, 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 = [s, t, U, var_ket_u, phase]
sub_expr3 = Add(t, one)
sub_expr4 = Add(t, s)
sub_expr5 = InSet(phase, Real)
sub_expr6 = InSet(t, NaturalPos)
sub_expr7 = Interval(sub_expr3, sub_expr4)
sub_expr8 = Mult(two_pow_t, phase)
sub_expr9 = MultiQubitElem(element = Gate(operation = QPE(U, t), part = sub_expr1), targets = Interval(one, sub_expr4))
sub_expr10 = InSet(sub_expr8, Interval(zero, subtract(two_pow_t, one)))
sub_expr11 = Equals(MatrixMult(U, var_ket_u), ScalarMult(Exp(e, Mult(two, pi, i, phase)), var_ket_u))
sub_expr12 = 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_expr7), one, s)], [ExprRange(sub_expr1, sub_expr9, one, t), ExprRange(sub_expr1, sub_expr9, sub_expr3, sub_expr4)], [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_expr8, 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_expr7), one, s)]))), one)
expr = Equals(Lambda(sub_expr2, Conditional(Conditional(sub_expr12, And(sub_expr5, sub_expr10, sub_expr11, InSet(phase, IntervalCO(zero, one)))), sub_expr6)), Lambda(sub_expr2, Conditional(Conditional(sub_expr12, And(sub_expr5, sub_expr10, sub_expr11)), sub_expr6))).with_wrapping_at(2)
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[\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.. \textrm{ if } t \in \mathbb{N}^+\right..\right] =  \\ \left[\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)\right.. \textrm{ if } t \in \mathbb{N}^+\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.()(2)('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: 30
operands: 1
1ExprTuple2, 3
2Lambdaparameters: 5
body: 4
3Lambdaparameters: 5
body: 6
4Conditionalvalue: 7
condition: 9
5ExprTuple135, 143, 132, 121, 139
6Conditionalvalue: 8
condition: 9
7Conditionalvalue: 11
condition: 10
8Conditionalvalue: 11
condition: 12
9Operationoperator: 28
operands: 13
10Operationoperator: 16
operands: 14
11Operationoperator: 30
operands: 15
12Operationoperator: 16
operands: 17
13ExprTuple143, 18
14ExprTuple21, 22, 23, 19
15ExprTuple20, 134
16Literal
17ExprTuple21, 22, 23
18Literal
19Operationoperator: 28
operands: 24
20Operationoperator: 25
operand: 33
21Operationoperator: 28
operands: 27
22Operationoperator: 28
operands: 29
23Operationoperator: 30
operands: 31
24ExprTuple139, 32
25Literal
26ExprTuple33
27ExprTuple139, 34
28Literal
29ExprTuple133, 35
30Literal
31ExprTuple36, 37
32Operationoperator: 38
operands: 39
33Operationoperator: 40
operands: 41
34Literal
35Operationoperator: 116
operands: 42
36Operationoperator: 43
operands: 44
37Operationoperator: 45
operands: 46
38Literal
39ExprTuple51, 134
40Literal
41ExprTuple47, 48, 49, 50
42ExprTuple51, 52
43Literal
44ExprTuple132, 121
45Literal
46ExprTuple53, 121
47ExprTuple54, 55
48ExprTuple56, 57
49ExprTuple58, 59
50ExprTuple60, 61
51Literal
52Operationoperator: 130
operands: 62
53Operationoperator: 140
operands: 63
54ExprRangelambda_map: 64
start_index: 134
end_index: 143
55ExprRangelambda_map: 65
start_index: 134
end_index: 135
56ExprRangelambda_map: 66
start_index: 134
end_index: 143
57ExprRangelambda_map: 66
start_index: 123
end_index: 124
58ExprRangelambda_map: 67
start_index: 134
end_index: 143
59ExprRangelambda_map: 68
start_index: 134
end_index: 135
60ExprRangelambda_map: 69
start_index: 134
end_index: 143
61ExprRangelambda_map: 70
start_index: 134
end_index: 135
62ExprTuple138, 71
63ExprTuple72, 73
64Lambdaparameter: 122
body: 74
65Lambdaparameter: 122
body: 75
66Lambdaparameter: 122
body: 76
67Lambdaparameter: 122
body: 77
68Lambdaparameter: 122
body: 78
69Lambdaparameter: 122
body: 79
70Lambdaparameter: 122
body: 81
71Operationoperator: 82
operand: 134
72Literal
73Operationoperator: 136
operands: 84
74Operationoperator: 108
operands: 85
75Operationoperator: 92
operands: 86
76Operationoperator: 92
operands: 87
77Operationoperator: 88
operands: 89
78Operationoperator: 109
operands: 90
79Operationoperator: 92
operands: 91
80ExprTuple122
81Operationoperator: 92
operands: 93
82Literal
83ExprTuple134
84ExprTuple142, 94, 95, 139
85NamedExprsstate: 96
86NamedExprselement: 97
targets: 105
87NamedExprselement: 98
targets: 99
88Literal
89NamedExprsbasis: 100
90NamedExprsoperation: 101
91NamedExprselement: 102
targets: 103
92Literal
93NamedExprselement: 104
targets: 105
94Literal
95Literal
96Operationoperator: 106
operand: 118
97Operationoperator: 108
operands: 115
98Operationoperator: 109
operands: 110
99Operationoperator: 116
operands: 111
100Literal
101Literal
102Operationoperator: 114
operands: 112
103Operationoperator: 116
operands: 113
104Operationoperator: 114
operands: 115
105Operationoperator: 116
operands: 117
106Literal
107ExprTuple118
108Literal
109Literal
110NamedExprsoperation: 119
part: 122
111ExprTuple134, 124
112NamedExprsstate: 120
part: 122
113ExprTuple134, 143
114Literal
115NamedExprsstate: 121
part: 122
116Literal
117ExprTuple123, 124
118Literal
119Operationoperator: 125
operands: 126
120Operationoperator: 127
operands: 128
121Variable
122Variable
123Operationoperator: 130
operands: 129
124Operationoperator: 130
operands: 131
125Literal
126ExprTuple132, 143
127Literal
128ExprTuple133, 143
129ExprTuple143, 134
130Literal
131ExprTuple143, 135
132Variable
133Operationoperator: 136
operands: 137
134Literal
135Variable
136Literal
137ExprTuple138, 139
138Operationoperator: 140
operands: 141
139Variable
140Literal
141ExprTuple142, 143
142Literal
143Variable