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, 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(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)\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: 17
operands: 5
3Operationoperator: 19
operands: 6
4Operationoperator: 7
operands: 8
5ExprTuple129, 9
6ExprTuple10, 120
7Literal
8ExprTuple11, 12, 13
9Literal
10Operationoperator: 14
operand: 21
11Operationoperator: 17
operands: 16
12Operationoperator: 17
operands: 18
13Operationoperator: 19
operands: 20
14Literal
15ExprTuple21
16ExprTuple125, 22
17Literal
18ExprTuple119, 23
19Literal
20ExprTuple24, 25
21Operationoperator: 26
operands: 27
22Literal
23Operationoperator: 102
operands: 28
24Operationoperator: 29
operands: 30
25Operationoperator: 31
operands: 32
26Literal
27ExprTuple33, 34, 35, 36
28ExprTuple37, 38
29Literal
30ExprTuple118, 107
31Literal
32ExprTuple39, 107
33ExprTuple40, 41
34ExprTuple42, 43
35ExprTuple44, 45
36ExprTuple46, 47
37Literal
38Operationoperator: 116
operands: 48
39Operationoperator: 126
operands: 49
40ExprRangelambda_map: 50
start_index: 120
end_index: 129
41ExprRangelambda_map: 51
start_index: 120
end_index: 121
42ExprRangelambda_map: 52
start_index: 120
end_index: 129
43ExprRangelambda_map: 52
start_index: 109
end_index: 110
44ExprRangelambda_map: 53
start_index: 120
end_index: 129
45ExprRangelambda_map: 54
start_index: 120
end_index: 121
46ExprRangelambda_map: 55
start_index: 120
end_index: 129
47ExprRangelambda_map: 56
start_index: 120
end_index: 121
48ExprTuple124, 57
49ExprTuple58, 59
50Lambdaparameter: 108
body: 60
51Lambdaparameter: 108
body: 61
52Lambdaparameter: 108
body: 62
53Lambdaparameter: 108
body: 63
54Lambdaparameter: 108
body: 64
55Lambdaparameter: 108
body: 65
56Lambdaparameter: 108
body: 67
57Operationoperator: 68
operand: 120
58Literal
59Operationoperator: 122
operands: 70
60Operationoperator: 94
operands: 71
61Operationoperator: 78
operands: 72
62Operationoperator: 78
operands: 73
63Operationoperator: 74
operands: 75
64Operationoperator: 95
operands: 76
65Operationoperator: 78
operands: 77
66ExprTuple108
67Operationoperator: 78
operands: 79
68Literal
69ExprTuple120
70ExprTuple128, 80, 81, 125
71NamedExprsstate: 82
72NamedExprselement: 83
targets: 91
73NamedExprselement: 84
targets: 85
74Literal
75NamedExprsbasis: 86
76NamedExprsoperation: 87
77NamedExprselement: 88
targets: 89
78Literal
79NamedExprselement: 90
targets: 91
80Literal
81Literal
82Operationoperator: 92
operand: 104
83Operationoperator: 94
operands: 101
84Operationoperator: 95
operands: 96
85Operationoperator: 102
operands: 97
86Literal
87Literal
88Operationoperator: 100
operands: 98
89Operationoperator: 102
operands: 99
90Operationoperator: 100
operands: 101
91Operationoperator: 102
operands: 103
92Literal
93ExprTuple104
94Literal
95Literal
96NamedExprsoperation: 105
part: 108
97ExprTuple120, 110
98NamedExprsstate: 106
part: 108
99ExprTuple120, 129
100Literal
101NamedExprsstate: 107
part: 108
102Literal
103ExprTuple109, 110
104Literal
105Operationoperator: 111
operands: 112
106Operationoperator: 113
operands: 114
107Variable
108Variable
109Operationoperator: 116
operands: 115
110Operationoperator: 116
operands: 117
111Literal
112ExprTuple118, 129
113Literal
114ExprTuple119, 129
115ExprTuple129, 120
116Literal
117ExprTuple129, 121
118Variable
119Operationoperator: 122
operands: 123
120Literal
121Variable
122Literal
123ExprTuple124, 125
124Operationoperator: 126
operands: 127
125Variable
126Literal
127ExprTuple128, 129
128Literal
129Variable