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 = 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))
expr = Conditional(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)), InSet(phase, IntervalCO(zero, one)))), 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.. \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
1Conditionalvalue: 3
condition: 4
2Operationoperator: 21
operands: 5
3Operationoperator: 19
operands: 6
4Operationoperator: 7
operands: 8
5ExprTuple134, 9
6ExprTuple10, 125
7Literal
8ExprTuple11, 12, 13, 14
9Literal
10Operationoperator: 15
operand: 23
11Operationoperator: 21
operands: 17
12Operationoperator: 21
operands: 18
13Operationoperator: 19
operands: 20
14Operationoperator: 21
operands: 22
15Literal
16ExprTuple23
17ExprTuple130, 24
18ExprTuple124, 25
19Literal
20ExprTuple26, 27
21Literal
22ExprTuple130, 28
23Operationoperator: 29
operands: 30
24Literal
25Operationoperator: 107
operands: 31
26Operationoperator: 32
operands: 33
27Operationoperator: 34
operands: 35
28Operationoperator: 36
operands: 37
29Literal
30ExprTuple38, 39, 40, 41
31ExprTuple44, 42
32Literal
33ExprTuple123, 112
34Literal
35ExprTuple43, 112
36Literal
37ExprTuple44, 125
38ExprTuple45, 46
39ExprTuple47, 48
40ExprTuple49, 50
41ExprTuple51, 52
42Operationoperator: 121
operands: 53
43Operationoperator: 131
operands: 54
44Literal
45ExprRangelambda_map: 55
start_index: 125
end_index: 134
46ExprRangelambda_map: 56
start_index: 125
end_index: 126
47ExprRangelambda_map: 57
start_index: 125
end_index: 134
48ExprRangelambda_map: 57
start_index: 114
end_index: 115
49ExprRangelambda_map: 58
start_index: 125
end_index: 134
50ExprRangelambda_map: 59
start_index: 125
end_index: 126
51ExprRangelambda_map: 60
start_index: 125
end_index: 134
52ExprRangelambda_map: 61
start_index: 125
end_index: 126
53ExprTuple129, 62
54ExprTuple63, 64
55Lambdaparameter: 113
body: 65
56Lambdaparameter: 113
body: 66
57Lambdaparameter: 113
body: 67
58Lambdaparameter: 113
body: 68
59Lambdaparameter: 113
body: 69
60Lambdaparameter: 113
body: 70
61Lambdaparameter: 113
body: 72
62Operationoperator: 73
operand: 125
63Literal
64Operationoperator: 127
operands: 75
65Operationoperator: 99
operands: 76
66Operationoperator: 83
operands: 77
67Operationoperator: 83
operands: 78
68Operationoperator: 79
operands: 80
69Operationoperator: 100
operands: 81
70Operationoperator: 83
operands: 82
71ExprTuple113
72Operationoperator: 83
operands: 84
73Literal
74ExprTuple125
75ExprTuple133, 85, 86, 130
76NamedExprsstate: 87
77NamedExprselement: 88
targets: 96
78NamedExprselement: 89
targets: 90
79Literal
80NamedExprsbasis: 91
81NamedExprsoperation: 92
82NamedExprselement: 93
targets: 94
83Literal
84NamedExprselement: 95
targets: 96
85Literal
86Literal
87Operationoperator: 97
operand: 109
88Operationoperator: 99
operands: 106
89Operationoperator: 100
operands: 101
90Operationoperator: 107
operands: 102
91Literal
92Literal
93Operationoperator: 105
operands: 103
94Operationoperator: 107
operands: 104
95Operationoperator: 105
operands: 106
96Operationoperator: 107
operands: 108
97Literal
98ExprTuple109
99Literal
100Literal
101NamedExprsoperation: 110
part: 113
102ExprTuple125, 115
103NamedExprsstate: 111
part: 113
104ExprTuple125, 134
105Literal
106NamedExprsstate: 112
part: 113
107Literal
108ExprTuple114, 115
109Literal
110Operationoperator: 116
operands: 117
111Operationoperator: 118
operands: 119
112Variable
113Variable
114Operationoperator: 121
operands: 120
115Operationoperator: 121
operands: 122
116Literal
117ExprTuple123, 134
118Literal
119ExprTuple124, 134
120ExprTuple134, 125
121Literal
122ExprTuple134, 126
123Variable
124Operationoperator: 127
operands: 128
125Literal
126Variable
127Literal
128ExprTuple129, 130
129Operationoperator: 131
operands: 132
130Variable
131Literal
132ExprTuple133, 134
133Literal
134Variable