logo

Expression of type Conditional

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, 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 = 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))), 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\{\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.. \textrm{ if } t \in \mathbb{N}^+\right..
In [5]:
stored_expr.style_options()
namedescriptiondefaultcurrent valuerelated methods
condition_delimiter'comma' or 'and'commacomma('with_comma_delimiter', 'with_conjunction_delimiter')
In [6]:
# display the expression information
stored_expr.expr_info()
 core typesub-expressionsexpression
0Conditionalvalue: 1
condition: 2
1Operationoperator: 26
operands: 3
2Operationoperator: 24
operands: 4
3ExprTuple5, 6
4ExprTuple139, 7
5Conditionalvalue: 9
condition: 8
6Conditionalvalue: 9
condition: 10
7Literal
8Operationoperator: 13
operands: 11
9Operationoperator: 26
operands: 12
10Operationoperator: 13
operands: 14
11ExprTuple17, 18, 19, 15
12ExprTuple16, 130
13Literal
14ExprTuple17, 18, 19
15Operationoperator: 24
operands: 20
16Operationoperator: 21
operand: 29
17Operationoperator: 24
operands: 23
18Operationoperator: 24
operands: 25
19Operationoperator: 26
operands: 27
20ExprTuple135, 28
21Literal
22ExprTuple29
23ExprTuple135, 30
24Literal
25ExprTuple129, 31
26Literal
27ExprTuple32, 33
28Operationoperator: 34
operands: 35
29Operationoperator: 36
operands: 37
30Literal
31Operationoperator: 112
operands: 38
32Operationoperator: 39
operands: 40
33Operationoperator: 41
operands: 42
34Literal
35ExprTuple47, 130
36Literal
37ExprTuple43, 44, 45, 46
38ExprTuple47, 48
39Literal
40ExprTuple128, 117
41Literal
42ExprTuple49, 117
43ExprTuple50, 51
44ExprTuple52, 53
45ExprTuple54, 55
46ExprTuple56, 57
47Literal
48Operationoperator: 126
operands: 58
49Operationoperator: 136
operands: 59
50ExprRangelambda_map: 60
start_index: 130
end_index: 139
51ExprRangelambda_map: 61
start_index: 130
end_index: 131
52ExprRangelambda_map: 62
start_index: 130
end_index: 139
53ExprRangelambda_map: 62
start_index: 119
end_index: 120
54ExprRangelambda_map: 63
start_index: 130
end_index: 139
55ExprRangelambda_map: 64
start_index: 130
end_index: 131
56ExprRangelambda_map: 65
start_index: 130
end_index: 139
57ExprRangelambda_map: 66
start_index: 130
end_index: 131
58ExprTuple134, 67
59ExprTuple68, 69
60Lambdaparameter: 118
body: 70
61Lambdaparameter: 118
body: 71
62Lambdaparameter: 118
body: 72
63Lambdaparameter: 118
body: 73
64Lambdaparameter: 118
body: 74
65Lambdaparameter: 118
body: 75
66Lambdaparameter: 118
body: 77
67Operationoperator: 78
operand: 130
68Literal
69Operationoperator: 132
operands: 80
70Operationoperator: 104
operands: 81
71Operationoperator: 88
operands: 82
72Operationoperator: 88
operands: 83
73Operationoperator: 84
operands: 85
74Operationoperator: 105
operands: 86
75Operationoperator: 88
operands: 87
76ExprTuple118
77Operationoperator: 88
operands: 89
78Literal
79ExprTuple130
80ExprTuple138, 90, 91, 135
81NamedExprsstate: 92
82NamedExprselement: 93
targets: 101
83NamedExprselement: 94
targets: 95
84Literal
85NamedExprsbasis: 96
86NamedExprsoperation: 97
87NamedExprselement: 98
targets: 99
88Literal
89NamedExprselement: 100
targets: 101
90Literal
91Literal
92Operationoperator: 102
operand: 114
93Operationoperator: 104
operands: 111
94Operationoperator: 105
operands: 106
95Operationoperator: 112
operands: 107
96Literal
97Literal
98Operationoperator: 110
operands: 108
99Operationoperator: 112
operands: 109
100Operationoperator: 110
operands: 111
101Operationoperator: 112
operands: 113
102Literal
103ExprTuple114
104Literal
105Literal
106NamedExprsoperation: 115
part: 118
107ExprTuple130, 120
108NamedExprsstate: 116
part: 118
109ExprTuple130, 139
110Literal
111NamedExprsstate: 117
part: 118
112Literal
113ExprTuple119, 120
114Literal
115Operationoperator: 121
operands: 122
116Operationoperator: 123
operands: 124
117Variable
118Variable
119Operationoperator: 126
operands: 125
120Operationoperator: 126
operands: 127
121Literal
122ExprTuple128, 139
123Literal
124ExprTuple129, 139
125ExprTuple139, 130
126Literal
127ExprTuple139, 131
128Variable
129Operationoperator: 132
operands: 133
130Literal
131Variable
132Literal
133ExprTuple134, 135
134Operationoperator: 136
operands: 137
135Variable
136Literal
137ExprTuple138, 139
138Literal
139Variable