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, 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 = 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))
sub_expr7 = 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))))
expr = Equals(Conditional(sub_expr7, InSet(t, NaturalPos)), sub_expr7)
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\{\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.. = \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..
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.()()('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: 21
operands: 1
1ExprTuple2, 3
2Conditionalvalue: 3
condition: 4
3Conditionalvalue: 5
condition: 6
4Operationoperator: 19
operands: 7
5Operationoperator: 21
operands: 8
6Operationoperator: 9
operands: 10
7ExprTuple131, 11
8ExprTuple12, 122
9Literal
10ExprTuple13, 14, 15
11Literal
12Operationoperator: 16
operand: 23
13Operationoperator: 19
operands: 18
14Operationoperator: 19
operands: 20
15Operationoperator: 21
operands: 22
16Literal
17ExprTuple23
18ExprTuple127, 24
19Literal
20ExprTuple121, 25
21Literal
22ExprTuple26, 27
23Operationoperator: 28
operands: 29
24Literal
25Operationoperator: 104
operands: 30
26Operationoperator: 31
operands: 32
27Operationoperator: 33
operands: 34
28Literal
29ExprTuple35, 36, 37, 38
30ExprTuple39, 40
31Literal
32ExprTuple120, 109
33Literal
34ExprTuple41, 109
35ExprTuple42, 43
36ExprTuple44, 45
37ExprTuple46, 47
38ExprTuple48, 49
39Literal
40Operationoperator: 118
operands: 50
41Operationoperator: 128
operands: 51
42ExprRangelambda_map: 52
start_index: 122
end_index: 131
43ExprRangelambda_map: 53
start_index: 122
end_index: 123
44ExprRangelambda_map: 54
start_index: 122
end_index: 131
45ExprRangelambda_map: 54
start_index: 111
end_index: 112
46ExprRangelambda_map: 55
start_index: 122
end_index: 131
47ExprRangelambda_map: 56
start_index: 122
end_index: 123
48ExprRangelambda_map: 57
start_index: 122
end_index: 131
49ExprRangelambda_map: 58
start_index: 122
end_index: 123
50ExprTuple126, 59
51ExprTuple60, 61
52Lambdaparameter: 110
body: 62
53Lambdaparameter: 110
body: 63
54Lambdaparameter: 110
body: 64
55Lambdaparameter: 110
body: 65
56Lambdaparameter: 110
body: 66
57Lambdaparameter: 110
body: 67
58Lambdaparameter: 110
body: 69
59Operationoperator: 70
operand: 122
60Literal
61Operationoperator: 124
operands: 72
62Operationoperator: 96
operands: 73
63Operationoperator: 80
operands: 74
64Operationoperator: 80
operands: 75
65Operationoperator: 76
operands: 77
66Operationoperator: 97
operands: 78
67Operationoperator: 80
operands: 79
68ExprTuple110
69Operationoperator: 80
operands: 81
70Literal
71ExprTuple122
72ExprTuple130, 82, 83, 127
73NamedExprsstate: 84
74NamedExprselement: 85
targets: 93
75NamedExprselement: 86
targets: 87
76Literal
77NamedExprsbasis: 88
78NamedExprsoperation: 89
79NamedExprselement: 90
targets: 91
80Literal
81NamedExprselement: 92
targets: 93
82Literal
83Literal
84Operationoperator: 94
operand: 106
85Operationoperator: 96
operands: 103
86Operationoperator: 97
operands: 98
87Operationoperator: 104
operands: 99
88Literal
89Literal
90Operationoperator: 102
operands: 100
91Operationoperator: 104
operands: 101
92Operationoperator: 102
operands: 103
93Operationoperator: 104
operands: 105
94Literal
95ExprTuple106
96Literal
97Literal
98NamedExprsoperation: 107
part: 110
99ExprTuple122, 112
100NamedExprsstate: 108
part: 110
101ExprTuple122, 131
102Literal
103NamedExprsstate: 109
part: 110
104Literal
105ExprTuple111, 112
106Literal
107Operationoperator: 113
operands: 114
108Operationoperator: 115
operands: 116
109Variable
110Variable
111Operationoperator: 118
operands: 117
112Operationoperator: 118
operands: 119
113Literal
114ExprTuple120, 131
115Literal
116ExprTuple121, 131
117ExprTuple131, 122
118Literal
119ExprTuple131, 123
120Variable
121Operationoperator: 124
operands: 125
122Literal
123Variable
124Literal
125ExprTuple126, 127
126Operationoperator: 128
operands: 129
127Variable
128Literal
129ExprTuple130, 131
130Literal
131Variable